Ada计算机图形DirectX之ddraw

----------------------------------------
-- File : ddraw.ads                   --
-- Translator:Dongfeng.Gu,2018/10/29  --
-- Mail: [email protected]                --
-- Progress:100%                      --
----------------------------------------

with win32;                                     use win32;
with win32.winnt;
with Win32.Winerror;
with win32.Wingdi;                              use win32.Wingdi;
with win32.windef;                              use win32.windef;
with win32.Objbase;                             use win32.Objbase;
with win32.rpcdce;                              use win32.rpcdce;


with Interfaces.C;

with Ada.Unchecked_Conversion;


package ddraw is

   type LPGUID is access all GUID;
   type LPIUNKNOWN is access all IUnknown;

   use type Interfaces.C.unsigned_long;

   function Shift_Left(A:dword;B:Natural) return dword with import,convention=>Intrinsic;
   function Lsh(A:dword;B:Natural) return dword is (Shift_Left(A,B));

   function Shift_Right(A:dword;B:Natural) return dword with import,convention=>Intrinsic;
   function Rsh(A:dword;B:Natural) return dword is (Shift_Right(A,B));


   DIRECTDRAW_VERSION : constant := 16#0700#;

   CO_E_NOTINITIALIZED : constant := 16#800401F0#;

   FACDD : constant := 16#876#;

   function MAKE_DDHRESULT( code:Word ) return win32.Winerror.HRESULT is (Win32.Winerror.MAKE_HRESULT( 1, FACDD, code ));

   function AsDWORD is new Ada.Unchecked_Conversion(Character,DWORD);pragma Warnings(off,AsDWORD);
   function MAKEFOURCC(ch0,ch1,ch2,ch3:Character) return dword is (AsDWORD(ch0) or Lsh(AsDWORD(ch1),8) or Lsh(AsDWORD(ch2),16) or Lsh(AsDWORD(ch3),24));

   FOURCC_DXT1 : constant DWORD:= (MAKEFOURCC('D','X','T','1'));

   FOURCC_DXT2 : constant DWORD:= (MAKEFOURCC('D','X','T','2'));

   FOURCC_DXT3 : constant DWORD:= (MAKEFOURCC('D','X','T','3'));

   FOURCC_DXT4 : constant DWORD:= (MAKEFOURCC('D','X','T','4'));

   FOURCC_DXT5 : constant DWORD:= (MAKEFOURCC('D','X','T','5'));

   CLSID_DirectDraw:constant win32.rpcdce.GUID:=(16#D7B70EE0#,16#4340#,16#11CF#,(16#B0#,16#63#,16#00#,16#20#,16#AF#,16#C2#,16#CD#,16#35#));
   CLSID_DirectDraw7:constant win32.rpcdce.GUID:=(16#3c305196#,16#50db#,16#11d3#,(16#9c#,16#fe#,16#00#,16#c0#,16#4f#,16#d9#,16#30#,16#c5#));
   CLSID_DirectDrawClipper:constant win32.rpcdce.GUID:=(16#593817A0#,16#7DB3#,16#11CF#,(16#A2#,16#DE#,16#00#,16#AA#,16#00#,16#b9#,16#33#,16#56#));
   IID_IDirectDraw:constant win32.rpcdce.GUID:=(16#6C14DB80#,16#A733#,16#11CE#,(16#A5#,16#21#,16#00#,16#20#,16#AF#,16#0B#,16#E5#,16#60#));
   IID_IDirectDraw2:constant win32.rpcdce.GUID:=(16#B3A6F3E0#,16#2B43#,16#11CF#,(16#A2#,16#DE#,16#00#,16#AA#,16#00#,16#B9#,16#33#,16#56#));
   IID_IDirectDraw4:constant win32.rpcdce.GUID:=(16#9c59509a#,16#39bd#,16#11d1#,(16#8c#,16#4a#,16#00#,16#c0#,16#4f#,16#d9#,16#30#,16#c5#));
   IID_IDirectDraw7:constant win32.rpcdce.GUID:=(16#15e65ec0#,16#3b9c#,16#11d2#,(16#b9#,16#2f#,16#00#,16#60#,16#97#,16#97#,16#ea#,16#5b#));
   IID_IDirectDrawSurface:constant win32.rpcdce.GUID:=(16#6C14DB81#,16#A733#,16#11CE#,(16#A5#,16#21#,16#00#,16#20#,16#AF#,16#0B#,16#E5#,16#60#));
   IID_IDirectDrawSurface2:constant win32.rpcdce.GUID:=(16#57805885#,16#6eec#,16#11cf#,(16#94#,16#41#,16#a8#,16#23#,16#03#,16#c1#,16#0e#,16#27#));
   IID_IDirectDrawSurface3:constant win32.rpcdce.GUID:=(16#DA044E00#,16#69B2#,16#11D0#,(16#A1#,16#D5#,16#00#,16#AA#,16#00#,16#B8#,16#DF#,16#BB#));
   IID_IDirectDrawSurface4:constant win32.rpcdce.GUID:=(16#0B2B8630#,16#AD35#,16#11D0#,(16#8E#,16#A6#,16#00#,16#60#,16#97#,16#97#,16#EA#,16#5B#));
   IID_IDirectDrawSurface7:constant win32.rpcdce.GUID:=(16#06675a80#,16#3b9b#,16#11d2#,(16#b9#,16#2f#,16#00#,16#60#,16#97#,16#97#,16#ea#,16#5b#));
   IID_IDirectDrawPalette:constant win32.rpcdce.GUID:=(16#6C14DB84#,16#A733#,16#11CE#,(16#A5#,16#21#,16#00#,16#20#,16#AF#,16#0B#,16#E5#,16#60#));
   IID_IDirectDrawClipper:constant win32.rpcdce.GUID:=(16#6C14DB85#,16#A733#,16#11CE#,(16#A5#,16#21#,16#00#,16#20#,16#AF#,16#0B#,16#E5#,16#60#));
   IID_IDirectDrawColorControl:constant win32.rpcdce.GUID:=(16#4B9F0EE0#,16#0D7E#,16#11D0#,(16#9B#,16#06#,16#00#,16#A0#,16#C9#,16#03#,16#A3#,16#B8#));
   IID_IDirectDrawGammaControl:constant win32.rpcdce.GUID:=(16#69C11C3E#,16#B46B#,16#11D1#,(16#AD#,16#7A#,16#00#,16#C0#,16#4F#,16#C2#,16#9B#,16#4E#));


   type IDirectDraw;
   type LPIDirectDraw is access all IDirectDraw;
   type LPLPIDirectDraw is access all LPIDirectDraw;
   subtype LPDirectDraw is LPIDirectDraw;
   subtype LPLPDirectDraw is LPLPIDirectDraw;

   type IDirectDraw2;
   type LPIDirectDraw2 is access all IDirectDraw2;
   type LPLPIDirectDraw2 is access all LPIDirectDraw2;
   subtype LPDirectDraw2 is LPIDirectDraw2;
   subtype LPLPDirectDraw2 is LPLPIDirectDraw2;

   type IDirectDraw4;
   type LPIDirectDraw4 is access all IDirectDraw4;
   type LPLPIDirectDraw4 is access all LPIDirectDraw4;
   subtype LPDirectDraw4 is LPIDirectDraw4;
   subtype LPLPDirectDraw4 is LPLPIDirectDraw4;

   type IDirectDraw7;
   type LPIDirectDraw7 is access all IDirectDraw7;
   type LPLPIDirectDraw7 is access all LPIDirectDraw7;
   subtype LPDirectDraw7 is LPIDirectDraw7;
   subtype LPLPDirectDraw7 is LPLPIDirectDraw7;

   type IDirectDrawSurface;
   type LPIDirectDrawSurface is access all IDirectDrawSurface;
   type LPLPIDirectDrawSurface is access all LPIDirectDrawSurface;
   subtype LPDirectDrawSurface is LPIDirectDrawSurface;
   subtype LPLPDirectDrawSurface is LPLPIDirectDrawSurface;

   type IDirectDrawSurface2;
   type LPIDirectDrawSurface2 is access all IDirectDrawSurface2;
   type LPLPIDirectDrawSurface2 is access all LPIDirectDrawSurface2;
   subtype LPDirectDrawSurface2 is LPIDirectDrawSurface2;
   subtype LPLPDirectDrawSurface2 is LPLPIDirectDrawSurface2;

   type IDirectDrawSurface3;
   type LPIDirectDrawSurface3 is access all IDirectDrawSurface3;
   type LPLPIDirectDrawSurface3 is access all LPIDirectDrawSurface3;
   subtype LPDirectDrawSurface3 is LPIDirectDrawSurface3;
   subtype LPLPDirectDrawSurface3 is LPLPIDirectDrawSurface3;

   type IDirectDrawSurface4;
   type LPIDirectDrawSurface4 is access all IDirectDrawSurface4;
   type LPLPIDirectDrawSurface4 is access all LPIDirectDrawSurface4;
   subtype LPDirectDrawSurface4 is LPIDirectDrawSurface4;
   subtype LPLPDirectDrawSurface4 is LPLPIDirectDrawSurface4;

   type IDirectDrawSurface7;
   type LPIDirectDrawSurface7 is access all IDirectDrawSurface7;
   type LPLPIDirectDrawSurface7 is access all LPIDirectDrawSurface7;
   subtype LPDirectDrawSurface7 is LPIDirectDrawSurface7;
   subtype LPLPDirectDrawSurface7 is LPLPIDirectDrawSurface7;

   type IDirectDrawPalette;
   type LPIDirectDrawPalette is access all IDirectDrawPalette;
   type LPLPIDirectDrawPalette is access all LPIDirectDrawPalette;
   subtype LPDirectDrawPalette is LPIDirectDrawPalette;
   subtype LPLPDirectDrawPalette is LPLPIDirectDrawPalette;

   type IDirectDrawClipper;
   type LPIDirectDrawClipper is access all IDirectDrawClipper;
   type LPLPIDirectDrawClipper is access all LPIDirectDrawClipper;
   subtype LPDirectDrawClipper is LPIDirectDrawClipper;
   subtype LPLPDirectDrawClipper is LPLPIDirectDrawClipper;

   type IDirectDrawColorControl;
   type LPIDirectDrawColorControl is access all IDirectDrawColorControl;
   type LPLPIDirectDrawColorControl is access all LPIDirectDrawColorControl;
   subtype LPDirectDrawColorControl is LPIDirectDrawColorControl;
   subtype LPLPDirectDrawColorControl is LPLPIDirectDrawColorControl;

   type IDirectDrawGammaControl;
   type LPIDirectDrawGammaControl is access all IDirectDrawGammaControl;
   type LPLPIDirectDrawGammaControl is access all LPIDirectDrawGammaControl;
   subtype LPDirectDrawGammaControl is LPIDirectDrawGammaControl;
   subtype LPLPDirectDrawGammaControl is LPLPIDirectDrawGammaControl;



   -- Ò»¸öδ֪µÄ½á¹¹,ÇÒddraw.hÖÐûÓÐʹÓøýṹµÄµØ·½
   -- ÍøÂçÉÏҲûÓÐÕÒµ½¸Ã½á¹¹.
   -- type tagDDFXROP;
   -- type LPDDFXROP is access all tagDDFXROP;

   type tagDDSURFACEDESC;
   type LPDDSURFACEDESC is access all tagDDSURFACEDESC;

   type tagDDSURFACEDESC2;
   type LPDDSURFACEDESC2 is access all tagDDSURFACEDESC2;

   type tagDDCOLORCONTROL;
   type LPDDCOLORCONTROL is access all tagDDCOLORCONTROL;

   type tagDDPIXELFORMAT;

   type tagDDCOLORKEY;

   subtype HMONITOR is win32.winnt.HANDLE;

   type LPDDENUMCALLBACKA is access function(pgid:LPGUID;ps1:LPSTR;ps2:LPSTR;pv:LPVOID) return BOOL with Convention=>Stdcall;

   type LPDDENUMCALLBACKW is access function(pgid:LPGUID;pws1:LPWSTR;pws2:LPWSTR;pv:LPVOID) return BOOL with Convention=>Stdcall;

   function DirectDrawEnumerateW(lpCallback:LPDDENUMCALLBACKW;lpContext:LPVOID) return HRESULT with Import,Convention=>stdcall,external_name=>"DirectDrawEnumerateW";

   function DirectDrawEnumerateA(lpCallback:LPDDENUMCALLBACKA;lpContext:LPVOID) return HRESULT with Import,Convention=>stdcall,external_name=>"DirectDrawEnumerateA";

   type LPDDENUMCALLBACKEXA is access function(pgid:LPGUID;ps1:LPSTR;ps2:LPSTR;pv:LPVOID;hm:HMONITOR) return BOOL with Convention=>Stdcall;

   type LPDDENUMCALLBACKEXW is access function(pgid:LPGUID;pws1:LPWSTR;pws2:LPWSTR;pv:LPVOID;hm:HMONITOR) return BOOL with Convention=>Stdcall;

   function DirectDrawEnumerateExW(lpCallback:LPDDENUMCALLBACKEXW;lpContext:LPVOID;dwFlags:DWORD) return HRESULT with Import,Convention=>stdcall,external_name=>"DirectDrawEnumerateExW";

   function DirectDrawEnumerateExA(lpCallback:LPDDENUMCALLBACKEXA;lpContext:LPVOID;dwFlags:DWORD) return HRESULT with Import,Convention=>stdcall,external_name=>"DirectDrawEnumerateExA";

   type LPDIRECTDRAWENUMERATEEXA is access function(lpCallback:LPDDENUMCALLBACKEXA;lpContext:LPVOID;dwFlags:DWORD) return HRESULT with Convention=>Stdcall;

   type LPDIRECTDRAWENUMERATEEXW is access function(lpCallback:LPDDENUMCALLBACKEXW;lpContext:LPVOID;dwFlags:DWORD) return HRESULT with Convention=>Stdcall;


   function DirectDrawCreate(lpGID:LPGUID;lplpDD:LPLPDIRECTDRAW;pUnkOuter:LPIUnknown) return HRESULT with Import,Convention=>stdcall,external_name=>"DirectDrawCreate";

   function DirectDrawCreateEx(lpGid:LPGUID;lplpDD:LPLPVOID;iid:REFIID;pUnkOuter:LPIUnknown) return HRESULT with Import,Convention=>stdcall,external_name=>"DirectDrawCreateEx";

   function DirectDrawCreateClipper(dwFlags:DWORD;lplpDDClipper:LPLPDIRECTDRAWCLIPPER;pUnkOuter:LPIUnknown) return HRESULT with Import,Convention=>stdcall,external_name=>"DirectDrawCreateClipper";

   DDENUM_ATTACHEDSECONDARYDEVICES : constant := 16#00000001#;

   DDENUM_DETACHEDSECONDARYDEVICES : constant := 16#00000002#;

   DDENUM_NONDISPLAYDEVICES : constant := 16#00000004#;

   Nul:constant Character:=Character'First;

   REGSTR_KEY_DDHW_DESCRIPTION : constant String:= "Description"&Nul;

   REGSTR_KEY_DDHW_DRIVERNAME : constant String:= "DriverName"&Nul;

   REGSTR_PATH_DDHW : constant String:= "Hardware\\DirectDrawDrivers"&Nul;

   DDCREATE_HARDWAREONLY  : constant := 16#00000001#;
   DDCREATE_EMULATIONONLY : constant := 16#00000002#;



   type LPDDENUMMODESCALLBACK is access function(psd:LPDDSURFACEDESC;pv:LPVOID) return HRESULT with Convention=>Stdcall;

   type LPDDENUMMODESCALLBACK2 is access function(psd2:LPDDSURFACEDESC2;pv:LPVOID) return HRESULT with Convention=>Stdcall;

   type LPDDENUMSURFACESCALLBACK is access function(ps:LPDIRECTDRAWSURFACE;pdsc:LPDDSURFACEDESC;pv:LPVOID) return HRESULT with Convention=>Stdcall;

   type LPDDENUMSURFACESCALLBACK2 is access function(ps4:LPDIRECTDRAWSURFACE4;pds2:LPDDSURFACEDESC2;pv:LPVOID) return HRESULT with Convention=>Stdcall;

   type LPDDENUMSURFACESCALLBACK7 is access function(ps7:LPDIRECTDRAWSURFACE7;pds2:LPDDSURFACEDESC2;pv:LPVOID) return HRESULT with Convention=>Stdcall;


   type tagDDARGB is record
      blue: BYTE;
      green: BYTE;
      red: BYTE;
      alpha: BYTE;
   end record;

   subtype DDARGB is tagDDARGB;
   type LPDDARGB is access all DDARGB;

   type tagDDRGBA is record
      red: BYTE;
      green: BYTE;
      blue: BYTE;
      alpha: BYTE;
   end record;

   subtype DDRGBA is tagDDRGBA;

   type LPDDRGBA is access all DDRGBA;

   type tagDDCOLORKEY is record
      dwColorSpaceLowValue: DWORD;
      dwColorSpaceHighValue: DWORD;
   end record;

   subtype DDCOLORKEY is tagDDCOLORKEY;

   type LPDDCOLORKEY is access all DDCOLORKEY;
   
   type  tagDDBLTFX_U1(b:Boolean:=True) is record
      case b is
         when True=>
            dwZDestConst: DWORD;
         when False=>
            lpDDSZBufferDest: LPDIRECTDRAWSURFACE;
      end case;
   end record with Unchecked_Union,size=>32;

   type tagDDBLTFX_U2(b:Boolean:=True) is record
      case b is
         when True=>
            dwZSrcConst: DWORD;
         when False=>
            lpDDSZBufferSrc: LPDIRECTDRAWSURFACE;
      end case;
   end record with Unchecked_Union,size=>32;

   type tagDDBLTFX_U3(b:Boolean:=True) is record
      case b is
         when True=>
            dwAlphaDestConst: DWORD;
         when False=>
            lpDDSAlphaDest: LPDIRECTDRAWSURFACE;
      end case;
   end record with Unchecked_Union,size=>32;

   type tagDDBLTFX_U4(b:Boolean:=True) is record
      case b is
         when True=>
            dwAlphaSrcConst: DWORD;
         when False=>
            lpDDSAlphaSrc: LPDIRECTDRAWSURFACE;
      end case;
   end record with Unchecked_Union,size=>32;

   type tagDDBLTFX_U5(i:Integer:=0) is record
      case i is
         when 0=>
            dwFillColor: DWORD;
         when 1=>
            dwFillDepth: DWORD;
         when 2=>
            dwFillPixel: DWORD;
         when Others=>
            lpDDSPattern: LPDIRECTDRAWSURFACE;
      end case;
   end record with Unchecked_Union,size=>32;

   type tagDDBLTFX is record
      dwSize: DWORD;
      dwDDFX: DWORD;
      dwROP: DWORD;
      dwDDROP: DWORD;
      dwRotationAngle: DWORD;
      dwZBufferOpCode: DWORD;
      dwZBufferLow: DWORD;
      dwZBufferHigh: DWORD;
      dwZBufferBaseDest: DWORD;
      dwZDestConstBitDepth: DWORD;
      u1:tagDDBLTFX_U1;
      dwZSrcConstBitDepth: DWORD;
      u2:tagDDBLTFX_U2;
      dwAlphaEdgeBlendBitDepth: DWORD;
      dwAlphaEdgeBlend: DWORD;
      dwReserved: DWORD;
      dwAlphaDestConstBitDepth: DWORD;
      u3:tagDDBLTFX_U3;
      dwAlphaSrcConstBitDepth: DWORD;
      u4:tagDDBLTFX_U4;
      u5:tagDDBLTFX_U5;
      ddckDestColorkey: DDCOLORKEY;
      ddckSrcColorkey: DDCOLORKEY;
   end record;

   subtype DDBLTFX is tagDDBLTFX;

   type LPDDBLTFX is access all tagDDBLTFX;

   type tagDDSCAPS is record
      dwCaps: DWORD;
   end record;

   subtype DDSCAPS is tagDDSCAPS;

   type LPDDSCAPS is access all DDSCAPS;

   type tagDDOSCAPS is record
      dwCaps: DWORD;
   end record;

   subtype DDOSCAPS is tagDDOSCAPS;

   type LPDDOSCAPS is access all DDOSCAPS;


   type tagDDSCAPSEX(b:Boolean:=True) is record
      dwCaps2,dwCaps3:DWORD;
      case b is
         when True=>
            dwCaps4:DWORD;
         when False=>
            dwVolumeDepth:DWORD;
      end case;
   end record with Unchecked_Union,size=>96;
   subtype DDSCAPSEX is tagDDSCAPSEX;
   type LPDDSCAPSEX is access all tagDDSCAPSEX;

   type tagDDSCAPS2(b:Boolean:=True) is record
      dwCaps,dwCaps2,dwCaps3:DWORD;
      case b is
         when True=>
            dwCaps4:DWORD;
         when False=>
            dwVolumeDepth:DWORD;
      end case;
   end record with Unchecked_Union,size=>128;
   subtype DDSCAPS2 is tagDDSCAPS2;
   type LPDDSCAPS2 is access all tagDDSCAPS2;

   DD_ROP_SPACE : constant := (256/32);        -- space required to store ROP array;

   type tagDDCAPS_DX1 is record
      dwSize: DWORD;
      dwCaps: DWORD;
      dwCaps2: DWORD;
      dwCKeyCaps: DWORD;
      dwFXCaps: DWORD;
      dwFXAlphaCaps: DWORD;
      dwPalCaps: DWORD;
      dwSVCaps: DWORD;
      dwAlphaBltConstBitDepths: DWORD;
      dwAlphaBltPixelBitDepths: DWORD;
      dwAlphaBltSurfaceBitDepths: DWORD;
      dwAlphaOverlayConstBitDepths: DWORD;
      dwAlphaOverlayPixelBitDepths: DWORD;
      dwAlphaOverlaySurfaceBitDepths: DWORD;
      dwZBufferBitDepths: DWORD;
      dwVidMemTotal: DWORD;
      dwVidMemFree: DWORD;
      dwMaxVisibleOverlays: DWORD;
      dwCurrVisibleOverlays: DWORD;
      dwNumFourCCCodes: DWORD;
      dwAlignBoundarySrc: DWORD;
      dwAlignSizeSrc: DWORD;
      dwAlignBoundaryDest: DWORD;
      dwAlignSizeDest: DWORD;
      dwAlignStrideAlign: DWORD;
      dwRops: DWORD_Array(0..DD_ROP_SPACE-1);
      ddsCaps: ddraw.DDSCAPS;
      dwMinOverlayStretch: DWORD;
      dwMaxOverlayStretch: DWORD;
      dwMinLiveVideoStretch: DWORD;
      dwMaxLiveVideoStretch: DWORD;
      dwMinHwCodecStretch: DWORD;
      dwMaxHwCodecStretch: DWORD;
      dwReserved1: DWORD;
      dwReserved2: DWORD;
      dwReserved3: DWORD;
   end record;

   subtype DDCAPS_DX1 is tagDDCAPS_DX1;

   type LPDDCAPS_DX1 is access all DDCAPS_DX1;

   type tagDDCAPS_DX3 is record
      dwSize: DWORD;
      dwCaps: DWORD;
      dwCaps2: DWORD;
      dwCKeyCaps: DWORD;
      dwFXCaps: DWORD;
      dwFXAlphaCaps: DWORD;
      dwPalCaps: DWORD;
      dwSVCaps: DWORD;
      dwAlphaBltConstBitDepths: DWORD;
      dwAlphaBltPixelBitDepths: DWORD;
      dwAlphaBltSurfaceBitDepths: DWORD;
      dwAlphaOverlayConstBitDepths: DWORD;
      dwAlphaOverlayPixelBitDepths: DWORD;
      dwAlphaOverlaySurfaceBitDepths: DWORD;
      dwZBufferBitDepths: DWORD;
      dwVidMemTotal: DWORD;
      dwVidMemFree: DWORD;
      dwMaxVisibleOverlays: DWORD;
      dwCurrVisibleOverlays: DWORD;
      dwNumFourCCCodes: DWORD;
      dwAlignBoundarySrc: DWORD;
      dwAlignSizeSrc: DWORD;
      dwAlignBoundaryDest: DWORD;
      dwAlignSizeDest: DWORD;
      dwAlignStrideAlign: DWORD;
      dwRops: DWORD_Array(0..DD_ROP_SPACE-1);
      ddsCaps: tagDDSCAPS;
      dwMinOverlayStretch: DWORD;
      dwMaxOverlayStretch: DWORD;
      dwMinLiveVideoStretch: DWORD;
      dwMaxLiveVideoStretch: DWORD;
      dwMinHwCodecStretch: DWORD;
      dwMaxHwCodecStretch: DWORD;
      dwReserved1: DWORD;
      dwReserved2: DWORD;
      dwReserved3: DWORD;
      dwSVBCaps: DWORD;
      dwSVBCKeyCaps: DWORD;
      dwSVBFXCaps: DWORD;
      dwSVBRops: DWORD_Array(0..DD_ROP_SPACE-1);
      dwVSBCaps: DWORD;
      dwVSBCKeyCaps: DWORD;
      dwVSBFXCaps: DWORD;
      dwVSBRops: DWORD_Array(0..DD_ROP_SPACE-1);
      dwSSBCaps: DWORD;
      dwSSBCKeyCaps: DWORD;
      dwSSBFXCaps: DWORD;
      dwSSBRops: DWORD_Array(0..DD_ROP_SPACE-1);
      dwReserved4: DWORD;
      dwReserved5: DWORD;
      dwReserved6: DWORD;
   end record;

   subtype DDCAPS_DX3 is tagDDCAPS_DX3;

   type LPDDCAPS_DX3 is access all DDCAPS_DX3;

   type tagDDCAPS_DX5 is record
      dwSize: DWORD;
      dwCaps: DWORD;
      dwCaps2: DWORD;
      dwCKeyCaps: DWORD;
      dwFXCaps: DWORD;
      dwFXAlphaCaps: DWORD;
      dwPalCaps: DWORD;
      dwSVCaps: DWORD;
      dwAlphaBltConstBitDepths: DWORD;
      dwAlphaBltPixelBitDepths: DWORD;
      dwAlphaBltSurfaceBitDepths: DWORD;
      dwAlphaOverlayConstBitDepths: DWORD;
      dwAlphaOverlayPixelBitDepths: DWORD;
      dwAlphaOverlaySurfaceBitDepths: DWORD;
      dwZBufferBitDepths: DWORD;
      dwVidMemTotal: DWORD;
      dwVidMemFree: DWORD;
      dwMaxVisibleOverlays: DWORD;
      dwCurrVisibleOverlays: DWORD;
      dwNumFourCCCodes: DWORD;
      dwAlignBoundarySrc: DWORD;
      dwAlignSizeSrc: DWORD;
      dwAlignBoundaryDest: DWORD;
      dwAlignSizeDest: DWORD;
      dwAlignStrideAlign: DWORD;
      dwRops: DWORD_Array(0..DD_ROP_SPACE-1);
      ddsCaps: tagDDSCAPS;
      dwMinOverlayStretch: DWORD;
      dwMaxOverlayStretch: DWORD;
      dwMinLiveVideoStretch: DWORD;
      dwMaxLiveVideoStretch: DWORD;
      dwMinHwCodecStretch: DWORD;
      dwMaxHwCodecStretch: DWORD;
      dwReserved1: DWORD;
      dwReserved2: DWORD;
      dwReserved3: DWORD;
      dwSVBCaps: DWORD;
      dwSVBCKeyCaps: DWORD;
      dwSVBFXCaps: DWORD;
      dwSVBRops: DWORD_Array(0..DD_ROP_SPACE-1);
      dwVSBCaps: DWORD;
      dwVSBCKeyCaps: DWORD;
      dwVSBFXCaps: DWORD;
      dwVSBRops: DWORD_Array(0..DD_ROP_SPACE-1);
      dwSSBCaps: DWORD;
      dwSSBCKeyCaps: DWORD;
      dwSSBFXCaps: DWORD;
      dwSSBRops: DWORD_Array(0..DD_ROP_SPACE-1);
      dwMaxVideoPorts: DWORD;
      dwCurrVideoPorts: DWORD;
      dwSVBCaps2: DWORD;
      dwNLVBCaps: DWORD;
      dwNLVBCaps2: DWORD;
      dwNLVBCKeyCaps: DWORD;
      dwNLVBFXCaps: DWORD;
      dwNLVBRops: DWORD_Array(0..DD_ROP_SPACE-1);
   end record;

   subtype DDCAPS_DX5 is tagDDCAPS_DX5;

   type LPDDCAPS_DX5 is access all DDCAPS_DX5;

   type tagDDCAPS_DX6 is record
      dwSize: DWORD;
      dwCaps: DWORD;
      dwCaps2: DWORD;
      dwCKeyCaps: DWORD;
      dwFXCaps: DWORD;
      dwFXAlphaCaps: DWORD;
      dwPalCaps: DWORD;
      dwSVCaps: DWORD;
      dwAlphaBltConstBitDepths: DWORD;
      dwAlphaBltPixelBitDepths: DWORD;
      dwAlphaBltSurfaceBitDepths: DWORD;
      dwAlphaOverlayConstBitDepths: DWORD;
      dwAlphaOverlayPixelBitDepths: DWORD;
      dwAlphaOverlaySurfaceBitDepths: DWORD;
      dwZBufferBitDepths: DWORD;
      dwVidMemTotal: DWORD;
      dwVidMemFree: DWORD;
      dwMaxVisibleOverlays: DWORD;
      dwCurrVisibleOverlays: DWORD;
      dwNumFourCCCodes: DWORD;
      dwAlignBoundarySrc: DWORD;
      dwAlignSizeSrc: DWORD;
      dwAlignBoundaryDest: DWORD;
      dwAlignSizeDest: DWORD;
      dwAlignStrideAlign: DWORD;
      dwRops: DWORD_Array(0..DD_ROP_SPACE-1);
      ddsOldCaps: DDSCAPS;
      dwMinOverlayStretch: DWORD;
      dwMaxOverlayStretch: DWORD;
      dwMinLiveVideoStretch: DWORD;
      dwMaxLiveVideoStretch: DWORD;
      dwMinHwCodecStretch: DWORD;
      dwMaxHwCodecStretch: DWORD;
      dwReserved1: DWORD;
      dwReserved2: DWORD;
      dwReserved3: DWORD;
      dwSVBCaps: DWORD;
      dwSVBCKeyCaps: DWORD;
      dwSVBFXCaps: DWORD;
      dwSVBRops: DWORD_Array(0..DD_ROP_SPACE-1);
      dwVSBCaps: DWORD;
      dwVSBCKeyCaps: DWORD;
      dwVSBFXCaps: DWORD;
      dwVSBRops: DWORD_Array(0..DD_ROP_SPACE-1);
      dwSSBCaps: DWORD;
      dwSSBCKeyCaps: DWORD;
      dwSSBFXCaps: DWORD;
      dwSSBRops: DWORD_Array(0..DD_ROP_SPACE-1);
      dwMaxVideoPorts: DWORD;
      dwCurrVideoPorts: DWORD;
      dwSVBCaps2: DWORD;
      dwNLVBCaps: DWORD;
      dwNLVBCaps2: DWORD;
      dwNLVBCKeyCaps: DWORD;
      dwNLVBFXCaps: DWORD;
      dwNLVBRops: DWORD_Array(0..DD_ROP_SPACE-1);
      ddsCaps: DDSCAPS2;
   end record;

   subtype DDCAPS_DX6 is tagDDCAPS_DX6;

   type LPDDCAPS_DX6 is access all DDCAPS_DX6;

   type tagDDCAPS_DX7 is record
      dwSize: DWORD;
      dwCaps: DWORD;
      dwCaps2: DWORD;
      dwCKeyCaps: DWORD;
      dwFXCaps: DWORD;
      dwFXAlphaCaps: DWORD;
      dwPalCaps: DWORD;
      dwSVCaps: DWORD;
      dwAlphaBltConstBitDepths: DWORD;
      dwAlphaBltPixelBitDepths: DWORD;
      dwAlphaBltSurfaceBitDepths: DWORD;
      dwAlphaOverlayConstBitDepths: DWORD;
      dwAlphaOverlayPixelBitDepths: DWORD;
      dwAlphaOverlaySurfaceBitDepths: DWORD;
      dwZBufferBitDepths: DWORD;
      dwVidMemTotal: DWORD;
      dwVidMemFree: DWORD;
      dwMaxVisibleOverlays: DWORD;
      dwCurrVisibleOverlays: DWORD;
      dwNumFourCCCodes: DWORD;
      dwAlignBoundarySrc: DWORD;
      dwAlignSizeSrc: DWORD;
      dwAlignBoundaryDest: DWORD;
      dwAlignSizeDest: DWORD;
      dwAlignStrideAlign: DWORD;
      dwRops: DWORD_Array(0..DD_ROP_SPACE-1);
      ddsOldCaps: DDSCAPS;
      dwMinOverlayStretch: DWORD;
      dwMaxOverlayStretch: DWORD;
      dwMinLiveVideoStretch: DWORD;
      dwMaxLiveVideoStretch: DWORD;
      dwMinHwCodecStretch: DWORD;
      dwMaxHwCodecStretch: DWORD;
      dwReserved1: DWORD;
      dwReserved2: DWORD;
      dwReserved3: DWORD;
      dwSVBCaps: DWORD;
      dwSVBCKeyCaps: DWORD;
      dwSVBFXCaps: DWORD;
      dwSVBRops: DWORD_Array(0..DD_ROP_SPACE-1);
      dwVSBCaps: DWORD;
      dwVSBCKeyCaps: DWORD;
      dwVSBFXCaps: DWORD;
      dwVSBRops: DWORD_Array(0..DD_ROP_SPACE-1);
      dwSSBCaps: DWORD;
      dwSSBCKeyCaps: DWORD;
      dwSSBFXCaps: DWORD;
      dwSSBRops: DWORD_Array(0..DD_ROP_SPACE-1);
      dwMaxVideoPorts: DWORD;
      dwCurrVideoPorts: DWORD;
      dwSVBCaps2: DWORD;
      dwNLVBCaps: DWORD;
      dwNLVBCaps2: DWORD;
      dwNLVBCKeyCaps: DWORD;
      dwNLVBFXCaps: DWORD;
      dwNLVBRops: DWORD_Array(0..DD_ROP_SPACE-1);
      ddsCaps: DDSCAPS2;
   end record;

   subtype DDCAPS_DX7 is tagDDCAPS_DX7;

   type LPDDCAPS_DX7 is access all DDCAPS_DX7;

--     subtype DDCAPS is DDCAPS_DX3;
--
--     subtype DDCAPS is DDCAPS_DX5;
--
--     subtype DDCAPS is DDCAPS_DX6;

   subtype DDCAPS is DDCAPS_DX7;

   type LPDDCAPS is access all DDCAPS;


   type tagDDPIXELFORMAT_U1(i:Integer:=0) is record
      case i is
         when 0=>
            dwRGBBitCount:DWORD;
         when 1=>
            dwYUVBitCount:DWORD;
         when 2=>
            dwZBufferBitDepth:DWORD;
         when 3=>
            dwAlphaBitDepth:DWORD;
         when 4=>
            dwLuminanceBitCount:DWORD;
         when 5=>
            dwBumpBitCount:DWORD;
         when others=>
            dwPrivateFormatBitCount:DWORD;
      end case;
   end record with Unchecked_Union,size=>32;

   type tagDDPIXELFORMAT_U2(i:Integer:=0) is record
      case i is
         when 0=>
            dwRBitMask:DWORD;
         when 1=>
            dwYBitMask:DWORD;
         when 2=>
            dwStencilBitDepth:DWORD;
         when 3=>
            dwLuminanceBitMask:DWORD;
         when 4=>
            dwBumpDuBitMask:DWORD;
         when others=>
            dwOperations:DWORD;
      end case;
   end record with Unchecked_Union,size=>32;

   type tagDDPIXELFORMAT_U3_MultiSampleCaps is record
      wFlipMSTypes,wBltMSTypes:WORD;
   end record;

   type tagDDPIXELFORMAT_U3(i:Integer:=0) is record
      case i is
         when 0=>
            dwGBitMask:DWORD;
         when 1=>
            dwUBitMask:DWORD;
         when 2=>
            dwZBitMask:DWORD;
         when 3=>
            dwBumpDvBitMask:DWORD;
         when others=>
            MultiSampleCaps:tagDDPIXELFORMAT_U3_MultiSampleCaps;
      end case;
   end record with Unchecked_Union,size=>32;

   type tagDDPIXELFORMAT_U4(i:Integer:=0) is record
      case i is
         when 0=>
            dwBBitMask:DWORD;
         when 1=>
            dwVBitMask:DWORD;
         when 2=>
            dwStencilBitMask:DWORD;
         when others=>
            dwBumpLuminanceBitMask:DWORD;
      end case;
   end record with Unchecked_Union,size=>32;

   type tagDDPIXELFORMAT_U5(i:Integer:=0) is record
      case i is
         when 0=>
            dwRGBAlphaBitMask:DWORD;
         when 1=>
            dwYUVAlphaBitMask:DWORD;
         when 2=>
            dwLuminanceAlphaBitMask:DWORD;
         when 3=>
            dwRGBZBitMask:DWORD;
         when others=>
            dwYUVZBitMask:DWORD;
      end case;
   end record with Unchecked_Union,size=>32;

   type tagDDPIXELFORMAT is record
      dwSize,dwFlags,dwFourcc:DWORD;
      u1:tagDDPIXELFORMAT_U1;
      u2:tagDDPIXELFORMAT_U2;
      u3:tagDDPIXELFORMAT_U3;
      u4:tagDDPIXELFORMAT_U4;
      u5:tagDDPIXELFORMAT_U5;
   end record;
   subtype DDPIXELFORMAT is tagDDPIXELFORMAT;
   type LPDDPIXELFORMAT is access all tagDDPIXELFORMAT;

   type tagDDOVERLAYFX_U1(b:Boolean:=True) is record
      case b is
         when True=>
            dwAlphaDestConst:DWORD;
         when False=>
            lpDDSAlphaDest:LPDIRECTDRAWSURFACE;
      end case;
   end record with Unchecked_Union,size=>32;

   type tagDDOVERLAYFX_U2(b:Boolean:=True) is record
      case b is
         when True=>
            dwAlphaSrcConst:DWORD;
         when False=>
            lpDDSAlphaSrc:LPDIRECTDRAWSURFACE;
      end case;
   end record with Unchecked_Union,size=>32;

   type tagDDOVERLAYFX is record
      dwSize:DWORD;
      dwAlphaEdgeBlendBitDepth:DWORD;
      dwAlphaEdgeBlend:DWORD;
      dwReserved:DWORD;
      dwAlphaDestConstBitDepth:DWORD;
      u1:tagDDOVERLAYFX_U1;
      u2:tagDDOVERLAYFX_U2;
   end record;
   subtype DDOVERLAYFX is tagDDOVERLAYFX;
   type LPDDOVERLAYFX is access all tagDDOVERLAYFX;

   type tagDDBLTBATCH is record
      lprDest: LPRECT;
      lpDDSSrc: LPDIRECTDRAWSURFACE;
      lprSrc: LPRECT;
      dwFlags: DWORD;
      lpDDBltFx: ddraw.LPDDBLTFX;
   end record;

   subtype DDBLTBATCH is tagDDBLTBATCH;

   type LPDDBLTBATCH is access all DDBLTBATCH;

   type tagDDGAMMARAMP is record
      red: WORD_Array(0..256-1);
      green: WORD_Array(0..256-1);
      blue: WORD_Array(0..256-1);
   end record;

   subtype DDGAMMARAMP is tagDDGAMMARAMP;

   type LPDDGAMMARAMP is access all DDGAMMARAMP;

   MAX_DDDEVICEID_STRING : constant := 512;

   type tagDDDEVICEIDENTIFIER is record
      szDriver: char_Array(0..MAX_DDDEVICEID_STRING-1);
      szDescription: char_Array(0..MAX_DDDEVICEID_STRING-1);
      liDriverVersion: winnt.LARGE_INTEGER;
      dwVendorId: DWORD;
      dwDeviceId: DWORD;
      dwSubSysId: DWORD;
      dwRevision: DWORD;
      guidDeviceIdentifier: GUID;
   end record;

   subtype DDDEVICEIDENTIFIER is tagDDDEVICEIDENTIFIER;

   type LPDDDEVICEIDENTIFIER is access all tagDDDEVICEIDENTIFIER;

   type tagDDDEVICEIDENTIFIER2 is record
      szDriver: char_Array(0..MAX_DDDEVICEID_STRING-1);
      szDescription: char_Array(0..MAX_DDDEVICEID_STRING-1);
      liDriverVersion: winnt.LARGE_INTEGER;
      dwVendorId: DWORD;
      dwDeviceId: DWORD;
      dwSubSysId: DWORD;
      dwRevision: DWORD;
      guidDeviceIdentifier: GUID;
      dwWHQLLevel: DWORD;
   end record;

   subtype DDDEVICEIDENTIFIER2 is tagDDDEVICEIDENTIFIER2;

   type LPDDDEVICEIDENTIFIER2 is access all tagDDDEVICEIDENTIFIER2;

   DDGDI_GETHOSTIDENTIFIER : constant := 16#00000001#;

   -- #define GET_WHQL_YEAR( dwWHQLLevel ) ( (dwWHQLLevel) / 16#10000 )

   -- #define GET_WHQL_MONTH( dwWHQLLevel ) ( ( (dwWHQLLevel) / 16#100 ) & 16#00ff )

   -- #define GET_WHQL_DAY( dwWHQLLevel ) ( (dwWHQLLevel) & 16#ff )

   type LPCLIPPERCALLBACK is access function(lpDDClipper:LPDIRECTDRAWCLIPPER;hWnd:windef.HWND;code:DWORD;lpContext:LPVOID) return DWORD with Convention=>Stdcall;

   type LPSURFACESTREAMINGCALLBACK is access function(DW:DWORD) return DWORD with Convention=>Stdcall;


type IDirectDraw is record
   QueryInterface:access procedure(THIS:LPIDirectDraw;riid:REFIID;ppvObj:LPLPVOID) with Convention=>Stdcall;
   AddRef:access function(THIS:LPIDirectDraw) return ULONG with Convention=>Stdcall;
   Release:access function(THIS:LPIDirectDraw) return ULONG with Convention=>Stdcall;
   Compact:access procedure(THIS:LPIDirectDraw) with Convention=>Stdcall;
   CreateClipper:access procedure(THIS:LPIDirectDraw;Arg2:DWORD;Arg3:LPLPDIRECTDRAWCLIPPER;Arg4:LPIUnknown) with Convention=>Stdcall;
   CreatePalette:access procedure(THIS:LPIDirectDraw;Arg2:DWORD;Arg3:LPPALETTEENTRY;Arg4:LPLPDIRECTDRAWPALETTE;Arg5:LPIUnknown) with Convention=>Stdcall;
   CreateSurface:access procedure(THIS:LPIDirectDraw;Arg2:LPDDSURFACEDESC;Arg3:LPLPDIRECTDRAWSURFACE;Arg4:LPIUnknown) with Convention=>Stdcall;
   DuplicateSurface:access procedure(THIS:LPIDirectDraw;Arg2:LPDIRECTDRAWSURFACE;Arg3:LPLPDIRECTDRAWSURFACE) with Convention=>Stdcall;
   EnumDisplayModes:access procedure(THIS:LPIDirectDraw;Arg2:DWORD;Arg3:LPDDSURFACEDESC;Arg4:LPVOID;Arg5:LPDDENUMMODESCALLBACK) with Convention=>Stdcall;
   EnumSurfaces:access procedure(THIS:LPIDirectDraw;Arg2:DWORD;Arg3:LPDDSURFACEDESC;Arg4:LPVOID;Arg5:LPDDENUMSURFACESCALLBACK) with Convention=>Stdcall;
   FlipToGDISurface:access procedure(THIS:LPIDirectDraw) with Convention=>Stdcall;
   GetCaps:access procedure(THIS:LPIDirectDraw;Arg2:LPDDCAPS;Arg3:LPDDCAPS) with Convention=>Stdcall;
   GetDisplayMode:access procedure(THIS:LPIDirectDraw;Arg2:LPDDSURFACEDESC) with Convention=>Stdcall;
   GetFourCCCodes:access procedure(THIS:LPIDirectDraw;Arg2:LPDWORD;Arg3:LPDWORD) with Convention=>Stdcall;
   GetGDISurface:access procedure(THIS:LPIDirectDraw;Arg2:LPLPDIRECTDRAWSURFACE) with Convention=>Stdcall;
   GetMonitorFrequency:access procedure(THIS:LPIDirectDraw;Arg2:LPDWORD) with Convention=>Stdcall;
   GetScanLine:access procedure(THIS:LPIDirectDraw;Arg2:LPDWORD) with Convention=>Stdcall;
   GetVerticalBlankStatus:access procedure(THIS:LPIDirectDraw;Arg2:LPBOOL) with Convention=>Stdcall;
   Initialize:access procedure(THIS:LPIDirectDraw;Arg2:LPGUID) with Convention=>Stdcall;
   RestoreDisplayMode:access procedure(THIS:LPIDirectDraw) with Convention=>Stdcall;
   SetCooperativeLevel:access procedure(THIS:LPIDirectDraw;Arg2:HWND;Arg3:DWORD) with Convention=>Stdcall;
   SetDisplayMode:access procedure(THIS:LPIDirectDraw;Arg2:DWORD;Arg3:DWORD;Arg4:DWORD) with Convention=>Stdcall;
   WaitForVerticalBlank:access procedure(THIS:LPIDirectDraw;Arg2:DWORD;Arg3:winnt.HANDLE) with Convention=>Stdcall;
end record;

type IDirectDraw2 is record
   QueryInterface:access procedure(THIS:LPIDirectDraw2;riid:REFIID;ppvObj:LPLPVOID) with Convention=>Stdcall;
   AddRef:access function(THIS:LPIDirectDraw2) return ULONG with Convention=>Stdcall;
   Release:access function(THIS:LPIDirectDraw2) return ULONG with Convention=>Stdcall;
   Compact:access procedure(THIS:LPIDirectDraw2) with Convention=>Stdcall;
   CreateClipper:access procedure(THIS:LPIDirectDraw2;Arg2:DWORD;Arg3:LPLPDIRECTDRAWCLIPPER;Arg4:LPIUnknown) with Convention=>Stdcall;
   CreatePalette:access procedure(THIS:LPIDirectDraw2;Arg2:DWORD;Arg3:LPPALETTEENTRY;Arg4:LPLPDIRECTDRAWPALETTE;Arg5:LPIUnknown) with Convention=>Stdcall;
   CreateSurface:access procedure(THIS:LPIDirectDraw2;Arg2:LPDDSURFACEDESC;Arg3:LPLPDIRECTDRAWSURFACE;Arg4:LPIUnknown) with Convention=>Stdcall;
   DuplicateSurface:access procedure(THIS:LPIDirectDraw2;Arg2:LPDIRECTDRAWSURFACE;Arg3:LPLPDIRECTDRAWSURFACE) with Convention=>Stdcall;
   EnumDisplayModes:access procedure(THIS:LPIDirectDraw2;Arg2:DWORD;Arg3:LPDDSURFACEDESC;Arg4:LPVOID;Arg5:LPDDENUMMODESCALLBACK) with Convention=>Stdcall;
   EnumSurfaces:access procedure(THIS:LPIDirectDraw2;Arg2:DWORD;Arg3:LPDDSURFACEDESC;Arg4:LPVOID;Arg5:LPDDENUMSURFACESCALLBACK) with Convention=>Stdcall;
   FlipToGDISurface:access procedure(THIS:LPIDirectDraw2) with Convention=>Stdcall;
   GetCaps:access procedure(THIS:LPIDirectDraw2;Arg2:LPDDCAPS;Arg3:LPDDCAPS) with Convention=>Stdcall;
   GetDisplayMode:access procedure(THIS:LPIDirectDraw2;Arg2:LPDDSURFACEDESC) with Convention=>Stdcall;
   GetFourCCCodes:access procedure(THIS:LPIDirectDraw2;Arg2:LPDWORD;Arg3:LPDWORD) with Convention=>Stdcall;
   GetGDISurface:access procedure(THIS:LPIDirectDraw2;Arg2:LPLPDIRECTDRAWSURFACE) with Convention=>Stdcall;
   GetMonitorFrequency:access procedure(THIS:LPIDirectDraw2;Arg2:LPDWORD) with Convention=>Stdcall;
   GetScanLine:access procedure(THIS:LPIDirectDraw2;Arg2:LPDWORD) with Convention=>Stdcall;
   GetVerticalBlankStatus:access procedure(THIS:LPIDirectDraw2;Arg2:LPBOOL) with Convention=>Stdcall;
   Initialize:access procedure(THIS:LPIDirectDraw2;Arg2:LPGUID) with Convention=>Stdcall;
   RestoreDisplayMode:access procedure(THIS:LPIDirectDraw2) with Convention=>Stdcall;
   SetCooperativeLevel:access procedure(THIS:LPIDirectDraw2;Arg2:HWND;Arg3:DWORD) with Convention=>Stdcall;
   SetDisplayMode:access procedure(THIS:LPIDirectDraw2;Arg2:DWORD;Arg3:DWORD;Arg4:DWORD;Arg5:DWORD;Arg6:DWORD) with Convention=>Stdcall;
   WaitForVerticalBlank:access procedure(THIS:LPIDirectDraw2;Arg2:DWORD;Arg3:winnt.HANDLE) with Convention=>Stdcall;
   GetAvailableVidMem:access procedure(THIS:LPIDirectDraw2;Arg2:LPDDSCAPS;Arg3:LPDWORD;Arg4:LPDWORD) with Convention=>Stdcall;
end record;

type IDirectDraw4 is record
   QueryInterface:access procedure(THIS:LPIDirectDraw4;riid:REFIID;ppvObj:LPLPVOID) with Convention=>Stdcall;
   AddRef:access function(THIS:LPIDirectDraw4) return ULONG with Convention=>Stdcall;
   Release:access function(THIS:LPIDirectDraw4) return ULONG with Convention=>Stdcall;
   Compact:access procedure(THIS:LPIDirectDraw4) with Convention=>Stdcall;
   CreateClipper:access procedure(THIS:LPIDirectDraw4;Arg2:DWORD;Arg3:LPLPDIRECTDRAWCLIPPER;Arg4:LPIUnknown) with Convention=>Stdcall;
   CreatePalette:access procedure(THIS:LPIDirectDraw4;Arg2:DWORD;Arg3:LPPALETTEENTRY;Arg4:LPLPDIRECTDRAWPALETTE;Arg5:LPIUnknown) with Convention=>Stdcall;
   CreateSurface:access procedure(THIS:LPIDirectDraw4;Arg2:LPDDSURFACEDESC2;Arg3:LPLPDIRECTDRAWSURFACE4;Arg4:LPIUnknown) with Convention=>Stdcall;
   DuplicateSurface:access procedure(THIS:LPIDirectDraw4;Arg2:LPDIRECTDRAWSURFACE4;Arg3:LPLPDIRECTDRAWSURFACE4) with Convention=>Stdcall;
   EnumDisplayModes:access procedure(THIS:LPIDirectDraw4;Arg2:DWORD;Arg3:LPDDSURFACEDESC2;Arg4:LPVOID;Arg5:LPDDENUMMODESCALLBACK2) with Convention=>Stdcall;
   EnumSurfaces:access procedure(THIS:LPIDirectDraw4;Arg2:DWORD;Arg3:LPDDSURFACEDESC2;Arg4:LPVOID;Arg5:LPDDENUMSURFACESCALLBACK2) with Convention=>Stdcall;
   FlipToGDISurface:access procedure(THIS:LPIDirectDraw4) with Convention=>Stdcall;
   GetCaps:access procedure(THIS:LPIDirectDraw4;Arg2:LPDDCAPS;Arg3:LPDDCAPS) with Convention=>Stdcall;
   GetDisplayMode:access procedure(THIS:LPIDirectDraw4;Arg2:LPDDSURFACEDESC2) with Convention=>Stdcall;
   GetFourCCCodes:access procedure(THIS:LPIDirectDraw4;Arg2:LPDWORD;Arg3:LPDWORD) with Convention=>Stdcall;
   GetGDISurface:access procedure(THIS:LPIDirectDraw4;Arg2:LPLPDIRECTDRAWSURFACE4) with Convention=>Stdcall;
   GetMonitorFrequency:access procedure(THIS:LPIDirectDraw4;Arg2:LPDWORD) with Convention=>Stdcall;
   GetScanLine:access procedure(THIS:LPIDirectDraw4;Arg2:LPDWORD) with Convention=>Stdcall;
   GetVerticalBlankStatus:access procedure(THIS:LPIDirectDraw4;Arg2:LPBOOL) with Convention=>Stdcall;
   Initialize:access procedure(THIS:LPIDirectDraw4;Arg2:LPGUID) with Convention=>Stdcall;
   RestoreDisplayMode:access procedure(THIS:LPIDirectDraw4) with Convention=>Stdcall;
   SetCooperativeLevel:access procedure(THIS:LPIDirectDraw4;Arg2:HWND;Arg3:DWORD) with Convention=>Stdcall;
   SetDisplayMode:access procedure(THIS:LPIDirectDraw4;Arg2:DWORD;Arg3:DWORD;Arg4:DWORD;Arg5:DWORD;Arg6:DWORD) with Convention=>Stdcall;
   WaitForVerticalBlank:access procedure(THIS:LPIDirectDraw4;Arg2:DWORD;Arg3:winnt.HANDLE) with Convention=>Stdcall;
   GetAvailableVidMem:access procedure(THIS:LPIDirectDraw4;Arg2:LPDDSCAPS2;Arg3:LPDWORD;Arg4:LPDWORD) with Convention=>Stdcall;
   GetSurfaceFromDC:access procedure(THIS:LPIDirectDraw4;Arg2:HDC;Arg3:LPLPDIRECTDRAWSURFACE4) with Convention=>Stdcall;
   RestoreAllSurfaces:access procedure(THIS:LPIDirectDraw4) with Convention=>Stdcall;
   TestCooperativeLevel:access procedure(THIS:LPIDirectDraw4) with Convention=>Stdcall;
   GetDeviceIdentifier:access procedure(THIS:LPIDirectDraw4;Arg2:LPDDDEVICEIDENTIFIER;Arg3:DWORD) with Convention=>Stdcall;
end record;

type IDirectDraw7 is record
   QueryInterface:access procedure(THIS:LPIDirectDraw7;riid:REFIID;ppvObj:LPLPVOID) with Convention=>Stdcall;
   AddRef:access function(THIS:LPIDirectDraw7) return ULONG with Convention=>Stdcall;
   Release:access function(THIS:LPIDirectDraw7) return ULONG with Convention=>Stdcall;
   Compact:access procedure(THIS:LPIDirectDraw7) with Convention=>Stdcall;
   CreateClipper:access procedure(THIS:LPIDirectDraw7;Arg2:DWORD;Arg3:LPLPDIRECTDRAWCLIPPER;Arg4:LPIUnknown) with Convention=>Stdcall;
   CreatePalette:access procedure(THIS:LPIDirectDraw7;Arg2:DWORD;Arg3:LPPALETTEENTRY;Arg4:LPLPDIRECTDRAWPALETTE;Arg5:LPIUnknown) with Convention=>Stdcall;
   CreateSurface:access procedure(THIS:LPIDirectDraw7;Arg2:LPDDSURFACEDESC2;Arg3:LPLPDIRECTDRAWSURFACE7;Arg4:LPIUnknown) with Convention=>Stdcall;
   DuplicateSurface:access procedure(THIS:LPIDirectDraw7;Arg2:LPDIRECTDRAWSURFACE7;Arg3:LPLPDIRECTDRAWSURFACE7) with Convention=>Stdcall;
   EnumDisplayModes:access procedure(THIS:LPIDirectDraw7;Arg2:DWORD;Arg3:LPDDSURFACEDESC2;Arg4:LPVOID;Arg5:LPDDENUMMODESCALLBACK2) with Convention=>Stdcall;
   EnumSurfaces:access procedure(THIS:LPIDirectDraw7;Arg2:DWORD;Arg3:LPDDSURFACEDESC2;Arg4:LPVOID;Arg5:LPDDENUMSURFACESCALLBACK7) with Convention=>Stdcall;
   FlipToGDISurface:access procedure(THIS:LPIDirectDraw7) with Convention=>Stdcall;
   GetCaps:access procedure(THIS:LPIDirectDraw7;Arg2:LPDDCAPS;Arg3:LPDDCAPS) with Convention=>Stdcall;
   GetDisplayMode:access procedure(THIS:LPIDirectDraw7;Arg2:LPDDSURFACEDESC2) with Convention=>Stdcall;
   GetFourCCCodes:access procedure(THIS:LPIDirectDraw7;Arg2:LPDWORD;Arg3:LPDWORD) with Convention=>Stdcall;
   GetGDISurface:access procedure(THIS:LPIDirectDraw7;Arg2:LPLPDIRECTDRAWSURFACE7) with Convention=>Stdcall;
   GetMonitorFrequency:access procedure(THIS:LPIDirectDraw7;Arg2:LPDWORD) with Convention=>Stdcall;
   GetScanLine:access procedure(THIS:LPIDirectDraw7;Arg2:LPDWORD) with Convention=>Stdcall;
   GetVerticalBlankStatus:access procedure(THIS:LPIDirectDraw7;Arg2:LPBOOL) with Convention=>Stdcall;
   Initialize:access procedure(THIS:LPIDirectDraw7;Arg2:LPGUID) with Convention=>Stdcall;
   RestoreDisplayMode:access procedure(THIS:LPIDirectDraw7) with Convention=>Stdcall;
   SetCooperativeLevel:access procedure(THIS:LPIDirectDraw7;Arg2:HWND;Arg3:DWORD) with Convention=>Stdcall;
   SetDisplayMode:access procedure(THIS:LPIDirectDraw7;Arg2:DWORD;Arg3:DWORD;Arg4:DWORD;Arg5:DWORD;Arg6:DWORD) with Convention=>Stdcall;
   WaitForVerticalBlank:access procedure(THIS:LPIDirectDraw7;Arg2:DWORD;Arg3:winnt.HANDLE) with Convention=>Stdcall;
   GetAvailableVidMem:access procedure(THIS:LPIDirectDraw7;Arg2:LPDDSCAPS2;Arg3:LPDWORD;Arg4:LPDWORD) with Convention=>Stdcall;
   GetSurfaceFromDC:access procedure(THIS:LPIDirectDraw7;Arg2:HDC;Arg3:LPLPDIRECTDRAWSURFACE7) with Convention=>Stdcall;
   RestoreAllSurfaces:access procedure(THIS:LPIDirectDraw7) with Convention=>Stdcall;
   TestCooperativeLevel:access procedure(THIS:LPIDirectDraw7) with Convention=>Stdcall;
   GetDeviceIdentifier:access procedure(THIS:LPIDirectDraw7;Arg2:LPDDDEVICEIDENTIFIER2;Arg3:DWORD) with Convention=>Stdcall;
   StartModeTest:access procedure(THIS:LPIDirectDraw7;Arg2:LPSIZE;Arg3:DWORD;Arg4:DWORD) with Convention=>Stdcall;
   EvaluateMode:access procedure(THIS:LPIDirectDraw7;Arg2:DWORD;Arg3:LPDWORD) with Convention=>Stdcall;
end record;

type IDirectDrawPalette is record
   QueryInterface:access procedure(THIS:LPIDirectDrawPalette;riid:REFIID;ppvObj:LPLPVOID) with Convention=>Stdcall;
   AddRef:access function(THIS:LPIDirectDrawPalette) return ULONG with Convention=>Stdcall;
   Release:access function(THIS:LPIDirectDrawPalette) return ULONG with Convention=>Stdcall;
   GetCaps:access procedure(THIS:LPIDirectDrawPalette;Arg2:LPDWORD) with Convention=>Stdcall;
   GetEntries:access procedure(THIS:LPIDirectDrawPalette;Arg2:DWORD;Arg3:DWORD;Arg4:DWORD;Arg5:LPPALETTEENTRY) with Convention=>Stdcall;
   Initialize:access procedure(THIS:LPIDirectDrawPalette;Arg2:LPDIRECTDRAW;Arg3:DWORD;Arg4:LPPALETTEENTRY) with Convention=>Stdcall;
   SetEntries:access procedure(THIS:LPIDirectDrawPalette;Arg2:DWORD;Arg3:DWORD;Arg4:DWORD;Arg5:LPPALETTEENTRY) with Convention=>Stdcall;
end record;

type IDirectDrawClipper is record
   QueryInterface:access procedure(THIS:LPIDirectDrawClipper;riid:REFIID;ppvObj:LPLPVOID) with Convention=>Stdcall;
   AddRef:access function(THIS:LPIDirectDrawClipper) return ULONG with Convention=>Stdcall;
   Release:access function(THIS:LPIDirectDrawClipper) return ULONG with Convention=>Stdcall;
   GetClipList:access procedure(THIS:LPIDirectDrawClipper;Arg2:LPRECT;Arg3:LPRGNDATA;Arg4:LPDWORD) with Convention=>Stdcall;
   GetHWnd:access procedure(THIS:LPIDirectDrawClipper;Arg2:access HWND) with Convention=>Stdcall;
   Initialize:access procedure(THIS:LPIDirectDrawClipper;Arg2:LPDIRECTDRAW;Arg3:DWORD) with Convention=>Stdcall;
   IsClipListChanged:access procedure(THIS:LPIDirectDrawClipper;Arg2:LPBOOL) with Convention=>Stdcall;
   SetClipList:access procedure(THIS:LPIDirectDrawClipper;Arg2:LPRGNDATA;Arg3:DWORD) with Convention=>Stdcall;
   SetHWnd:access procedure(THIS:LPIDirectDrawClipper;Arg2:DWORD;Arg3:HWND) with Convention=>Stdcall;
end record;

type IDirectDrawSurface is record
   QueryInterface:access procedure(THIS:LPIDirectDrawSurface;riid:REFIID;ppvObj:LPLPVOID) with Convention=>Stdcall;
   AddRef:access function(THIS:LPIDirectDrawSurface) return ULONG with Convention=>Stdcall;
   Release:access function(THIS:LPIDirectDrawSurface) return ULONG with Convention=>Stdcall;
   AddAttachedSurface:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPDIRECTDRAWSURFACE) with Convention=>Stdcall;
   AddOverlayDirtyRect:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPRECT) with Convention=>Stdcall;
   Blt:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPRECT;Arg3:LPDIRECTDRAWSURFACE;Arg4:LPRECT;Arg5:DWORD;Arg6:LPDDBLTFX) with Convention=>Stdcall;
   BltBatch:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPDDBLTBATCH;Arg3:DWORD;Arg4:DWORD) with Convention=>Stdcall;
   BltFast:access procedure(THIS:LPIDirectDrawSurface;Arg2:DWORD;Arg3:DWORD;Arg4:LPDIRECTDRAWSURFACE;Arg5:LPRECT;Arg6:DWORD) with Convention=>Stdcall;
   DeleteAttachedSurface:access procedure(THIS:LPIDirectDrawSurface;Arg2:DWORD;Arg3:LPDIRECTDRAWSURFACE) with Convention=>Stdcall;
   EnumAttachedSurfaces:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPVOID;Arg3:LPDDENUMSURFACESCALLBACK) with Convention=>Stdcall;
   EnumOverlayZOrders:access procedure(THIS:LPIDirectDrawSurface;Arg2:DWORD;Arg3:LPVOID;Arg4:LPDDENUMSURFACESCALLBACK) with Convention=>Stdcall;
   Flip:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPDIRECTDRAWSURFACE;Arg3:DWORD) with Convention=>Stdcall;
   GetAttachedSurface:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPDDSCAPS;Arg3:LPLPDIRECTDRAWSURFACE) with Convention=>Stdcall;
   GetBltStatus:access procedure(THIS:LPIDirectDrawSurface;Arg2:DWORD) with Convention=>Stdcall;
   GetCaps:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPDDSCAPS) with Convention=>Stdcall;
   GetClipper:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPLPDIRECTDRAWCLIPPER) with Convention=>Stdcall;
   GetColorKey:access procedure(THIS:LPIDirectDrawSurface;Arg2:DWORD;Arg3:LPDDCOLORKEY) with Convention=>Stdcall;
   GetDC:access procedure(THIS:LPIDirectDrawSurface;Arg2:access HDC) with Convention=>Stdcall;
   GetFlipStatus:access procedure(THIS:LPIDirectDrawSurface;Arg2:DWORD) with Convention=>Stdcall;
   GetOverlayPosition:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPLONG;Arg3:LPLONG) with Convention=>Stdcall;
   GetPalette:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPLPDIRECTDRAWPALETTE) with Convention=>Stdcall;
   GetPixelFormat:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPDDPIXELFORMAT) with Convention=>Stdcall;
   GetSurfaceDesc:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPDDSURFACEDESC) with Convention=>Stdcall;
   Initialize:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPDIRECTDRAW;Arg3:LPDDSURFACEDESC) with Convention=>Stdcall;
   IsLost:access procedure(THIS:LPIDirectDrawSurface) with Convention=>Stdcall;
   Lock:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPRECT;Arg3:LPDDSURFACEDESC;Arg4:DWORD;Arg5:winnt.HANDLE) with Convention=>Stdcall;
   ReleaseDC:access procedure(THIS:LPIDirectDrawSurface;Arg2:HDC) with Convention=>Stdcall;
   Restore:access procedure(THIS:LPIDirectDrawSurface) with Convention=>Stdcall;
   SetClipper:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPDIRECTDRAWCLIPPER) with Convention=>Stdcall;
   SetColorKey:access procedure(THIS:LPIDirectDrawSurface;Arg2:DWORD;Arg3:LPDDCOLORKEY) with Convention=>Stdcall;
   SetOverlayPosition:access procedure(THIS:LPIDirectDrawSurface;Arg2:LONG;Arg3:LONG) with Convention=>Stdcall;
   SetPalette:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPDIRECTDRAWPALETTE) with Convention=>Stdcall;
   Unlock:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPVOID) with Convention=>Stdcall;
   UpdateOverlay:access procedure(THIS:LPIDirectDrawSurface;Arg2:LPRECT;Arg3:LPDIRECTDRAWSURFACE;Arg4:LPRECT;Arg5:DWORD;Arg6:LPDDOVERLAYFX) with Convention=>Stdcall;
   UpdateOverlayDisplay:access procedure(THIS:LPIDirectDrawSurface;Arg2:DWORD) with Convention=>Stdcall;
   UpdateOverlayZOrder:access procedure(THIS:LPIDirectDrawSurface;Arg2:DWORD;Arg3:LPDIRECTDRAWSURFACE) with Convention=>Stdcall;
end record;

type IDirectDrawSurface2 is record
   QueryInterface:access procedure(THIS:LPIDirectDrawSurface2;riid:REFIID;ppvObj:LPLPVOID) with Convention=>Stdcall;
   AddRef:access function(THIS:LPIDirectDrawSurface2) return ULONG with Convention=>Stdcall;
   Release:access function(THIS:LPIDirectDrawSurface2) return ULONG with Convention=>Stdcall;
   AddAttachedSurface:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPDIRECTDRAWSURFACE2) with Convention=>Stdcall;
   AddOverlayDirtyRect:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPRECT) with Convention=>Stdcall;
   Blt:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPRECT;Arg3:LPDIRECTDRAWSURFACE2;Arg4:LPRECT;Arg5:DWORD;Arg6:LPDDBLTFX) with Convention=>Stdcall;
   BltBatch:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPDDBLTBATCH;Arg3:DWORD;Arg4:DWORD) with Convention=>Stdcall;
   BltFast:access procedure(THIS:LPIDirectDrawSurface2;Arg2:DWORD;Arg3:DWORD;Arg4:LPDIRECTDRAWSURFACE2;Arg5:LPRECT;Arg6:DWORD) with Convention=>Stdcall;
   DeleteAttachedSurface:access procedure(THIS:LPIDirectDrawSurface2;Arg2:DWORD;Arg3:LPDIRECTDRAWSURFACE2) with Convention=>Stdcall;
   EnumAttachedSurfaces:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPVOID;Arg3:LPDDENUMSURFACESCALLBACK) with Convention=>Stdcall;
   EnumOverlayZOrders:access procedure(THIS:LPIDirectDrawSurface2;Arg2:DWORD;Arg3:LPVOID;Arg4:LPDDENUMSURFACESCALLBACK) with Convention=>Stdcall;
   Flip:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPDIRECTDRAWSURFACE2;Arg3:DWORD) with Convention=>Stdcall;
   GetAttachedSurface:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPDDSCAPS;Arg3:LPLPDIRECTDRAWSURFACE2) with Convention=>Stdcall;
   GetBltStatus:access procedure(THIS:LPIDirectDrawSurface2;Arg2:DWORD) with Convention=>Stdcall;
   GetCaps:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPDDSCAPS) with Convention=>Stdcall;
   GetClipper:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPLPDIRECTDRAWCLIPPER) with Convention=>Stdcall;
   GetColorKey:access procedure(THIS:LPIDirectDrawSurface2;Arg2:DWORD;Arg3:LPDDCOLORKEY) with Convention=>Stdcall;
   GetDC:access procedure(THIS:LPIDirectDrawSurface2;Arg2:access HDC) with Convention=>Stdcall;
   GetFlipStatus:access procedure(THIS:LPIDirectDrawSurface2;Arg2:DWORD) with Convention=>Stdcall;
   GetOverlayPosition:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPLONG;Arg3:LPLONG) with Convention=>Stdcall;
   GetPalette:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPLPDIRECTDRAWPALETTE) with Convention=>Stdcall;
   GetPixelFormat:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPDDPIXELFORMAT) with Convention=>Stdcall;
   GetSurfaceDesc:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPDDSURFACEDESC) with Convention=>Stdcall;
   Initialize:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPDIRECTDRAW;Arg3:LPDDSURFACEDESC) with Convention=>Stdcall;
   IsLost:access procedure(THIS:LPIDirectDrawSurface2) with Convention=>Stdcall;
   Lock:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPRECT;Arg3:LPDDSURFACEDESC;Arg4:DWORD;Arg5:winnt.HANDLE) with Convention=>Stdcall;
   ReleaseDC:access procedure(THIS:LPIDirectDrawSurface2;Arg2:HDC) with Convention=>Stdcall;
   Restore:access procedure(THIS:LPIDirectDrawSurface2) with Convention=>Stdcall;
   SetClipper:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPDIRECTDRAWCLIPPER) with Convention=>Stdcall;
   SetColorKey:access procedure(THIS:LPIDirectDrawSurface2;Arg2:DWORD;Arg3:LPDDCOLORKEY) with Convention=>Stdcall;
   SetOverlayPosition:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LONG;Arg3:LONG) with Convention=>Stdcall;
   SetPalette:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPDIRECTDRAWPALETTE) with Convention=>Stdcall;
   Unlock:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPVOID) with Convention=>Stdcall;
   UpdateOverlay:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPRECT;Arg3:LPDIRECTDRAWSURFACE2;Arg4:LPRECT;Arg5:DWORD;Arg6:LPDDOVERLAYFX) with Convention=>Stdcall;
   UpdateOverlayDisplay:access procedure(THIS:LPIDirectDrawSurface2;Arg2:DWORD) with Convention=>Stdcall;
   UpdateOverlayZOrder:access procedure(THIS:LPIDirectDrawSurface2;Arg2:DWORD;Arg3:LPDIRECTDRAWSURFACE2) with Convention=>Stdcall;
   GetDDInterface:access procedure(THIS:LPIDirectDrawSurface2;Arg2:LPLPVOID) with Convention=>Stdcall;
   PageLock:access procedure(THIS:LPIDirectDrawSurface2;Arg2:DWORD) with Convention=>Stdcall;
   PageUnlock:access procedure(THIS:LPIDirectDrawSurface2;Arg2:DWORD) with Convention=>Stdcall;
end record;

type IDirectDrawSurface3 is record
   QueryInterface:access procedure(THIS:LPIDirectDrawSurface3;riid:REFIID;ppvObj:LPLPVOID) with Convention=>Stdcall;
   AddRef:access function(THIS:LPIDirectDrawSurface3) return ULONG with Convention=>Stdcall;
   Release:access function(THIS:LPIDirectDrawSurface3) return ULONG with Convention=>Stdcall;
   AddAttachedSurface:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPDIRECTDRAWSURFACE3) with Convention=>Stdcall;
   AddOverlayDirtyRect:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPRECT) with Convention=>Stdcall;
   Blt:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPRECT;Arg3:LPDIRECTDRAWSURFACE3;Arg4:LPRECT;Arg5:DWORD;Arg6:LPDDBLTFX) with Convention=>Stdcall;
   BltBatch:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPDDBLTBATCH;Arg3:DWORD;Arg4:DWORD) with Convention=>Stdcall;
   BltFast:access procedure(THIS:LPIDirectDrawSurface3;Arg2:DWORD;Arg3:DWORD;Arg4:LPDIRECTDRAWSURFACE3;Arg5:LPRECT;Arg6:DWORD) with Convention=>Stdcall;
   DeleteAttachedSurface:access procedure(THIS:LPIDirectDrawSurface3;Arg2:DWORD;Arg3:LPDIRECTDRAWSURFACE3) with Convention=>Stdcall;
   EnumAttachedSurfaces:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPVOID;Arg3:LPDDENUMSURFACESCALLBACK) with Convention=>Stdcall;
   EnumOverlayZOrders:access procedure(THIS:LPIDirectDrawSurface3;Arg2:DWORD;Arg3:LPVOID;Arg4:LPDDENUMSURFACESCALLBACK) with Convention=>Stdcall;
   Flip:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPDIRECTDRAWSURFACE3;Arg3:DWORD) with Convention=>Stdcall;
   GetAttachedSurface:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPDDSCAPS;Arg3:LPLPDIRECTDRAWSURFACE3) with Convention=>Stdcall;
   GetBltStatus:access procedure(THIS:LPIDirectDrawSurface3;Arg2:DWORD) with Convention=>Stdcall;
   GetCaps:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPDDSCAPS) with Convention=>Stdcall;
   GetClipper:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPLPDIRECTDRAWCLIPPER) with Convention=>Stdcall;
   GetColorKey:access procedure(THIS:LPIDirectDrawSurface3;Arg2:DWORD;Arg3:LPDDCOLORKEY) with Convention=>Stdcall;
   GetDC:access procedure(THIS:LPIDirectDrawSurface3;Arg2:access HDC) with Convention=>Stdcall;
   GetFlipStatus:access procedure(THIS:LPIDirectDrawSurface3;Arg2:DWORD) with Convention=>Stdcall;
   GetOverlayPosition:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPLONG;Arg3:LPLONG) with Convention=>Stdcall;
   GetPalette:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPLPDIRECTDRAWPALETTE) with Convention=>Stdcall;
   GetPixelFormat:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPDDPIXELFORMAT) with Convention=>Stdcall;
   GetSurfaceDesc:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPDDSURFACEDESC) with Convention=>Stdcall;
   Initialize:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPDIRECTDRAW;Arg3:LPDDSURFACEDESC) with Convention=>Stdcall;
   IsLost:access procedure(THIS:LPIDirectDrawSurface3) with Convention=>Stdcall;
   Lock:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPRECT;Arg3:LPDDSURFACEDESC;Arg4:DWORD;Arg5:winnt.HANDLE) with Convention=>Stdcall;
   ReleaseDC:access procedure(THIS:LPIDirectDrawSurface3;Arg2:HDC) with Convention=>Stdcall;
   Restore:access procedure(THIS:LPIDirectDrawSurface3) with Convention=>Stdcall;
   SetClipper:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPDIRECTDRAWCLIPPER) with Convention=>Stdcall;
   SetColorKey:access procedure(THIS:LPIDirectDrawSurface3;Arg2:DWORD;Arg3:LPDDCOLORKEY) with Convention=>Stdcall;
   SetOverlayPosition:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LONG;Arg3:LONG) with Convention=>Stdcall;
   SetPalette:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPDIRECTDRAWPALETTE) with Convention=>Stdcall;
   Unlock:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPVOID) with Convention=>Stdcall;
   UpdateOverlay:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPRECT;Arg3:LPDIRECTDRAWSURFACE3;Arg4:LPRECT;Arg5:DWORD;Arg6:LPDDOVERLAYFX) with Convention=>Stdcall;
   UpdateOverlayDisplay:access procedure(THIS:LPIDirectDrawSurface3;Arg2:DWORD) with Convention=>Stdcall;
   UpdateOverlayZOrder:access procedure(THIS:LPIDirectDrawSurface3;Arg2:DWORD;Arg3:LPDIRECTDRAWSURFACE3) with Convention=>Stdcall;
   GetDDInterface:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPLPVOID) with Convention=>Stdcall;
   PageLock:access procedure(THIS:LPIDirectDrawSurface3;Arg2:DWORD) with Convention=>Stdcall;
   PageUnlock:access procedure(THIS:LPIDirectDrawSurface3;Arg2:DWORD) with Convention=>Stdcall;
   SetSurfaceDesc:access procedure(THIS:LPIDirectDrawSurface3;Arg2:LPDDSURFACEDESC;Arg3:DWORD) with Convention=>Stdcall;
end record;

type IDirectDrawSurface4 is record
   QueryInterface:access procedure(THIS:LPIDirectDrawSurface4;riid:REFIID;ppvObj:LPLPVOID) with Convention=>Stdcall;
   AddRef:access function(THIS:LPIDirectDrawSurface4) return ULONG with Convention=>Stdcall;
   Release:access function(THIS:LPIDirectDrawSurface4) return ULONG with Convention=>Stdcall;
   AddAttachedSurface:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPDIRECTDRAWSURFACE4) with Convention=>Stdcall;
   AddOverlayDirtyRect:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPRECT) with Convention=>Stdcall;
   Blt:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPRECT;Arg3:LPDIRECTDRAWSURFACE4;Arg4:LPRECT;Arg5:DWORD;Arg6:LPDDBLTFX) with Convention=>Stdcall;
   BltBatch:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPDDBLTBATCH;Arg3:DWORD;Arg4:DWORD) with Convention=>Stdcall;
   BltFast:access procedure(THIS:LPIDirectDrawSurface4;Arg2:DWORD;Arg3:DWORD;Arg4:LPDIRECTDRAWSURFACE4;Arg5:LPRECT;Arg6:DWORD) with Convention=>Stdcall;
   DeleteAttachedSurface:access procedure(THIS:LPIDirectDrawSurface4;Arg2:DWORD;Arg3:LPDIRECTDRAWSURFACE4) with Convention=>Stdcall;
   EnumAttachedSurfaces:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPVOID;Arg3:LPDDENUMSURFACESCALLBACK2) with Convention=>Stdcall;
   EnumOverlayZOrders:access procedure(THIS:LPIDirectDrawSurface4;Arg2:DWORD;Arg3:LPVOID;Arg4:LPDDENUMSURFACESCALLBACK2) with Convention=>Stdcall;
   Flip:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPDIRECTDRAWSURFACE4;Arg3:DWORD) with Convention=>Stdcall;
   GetAttachedSurface:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPDDSCAPS2;Arg3:LPLPDIRECTDRAWSURFACE4) with Convention=>Stdcall;
   GetBltStatus:access procedure(THIS:LPIDirectDrawSurface4;Arg2:DWORD) with Convention=>Stdcall;
   GetCaps:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPDDSCAPS2) with Convention=>Stdcall;
   GetClipper:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPLPDIRECTDRAWCLIPPER) with Convention=>Stdcall;
   GetColorKey:access procedure(THIS:LPIDirectDrawSurface4;Arg2:DWORD;Arg3:LPDDCOLORKEY) with Convention=>Stdcall;
   GetDC:access procedure(THIS:LPIDirectDrawSurface4;Arg2:access HDC) with Convention=>Stdcall;
   GetFlipStatus:access procedure(THIS:LPIDirectDrawSurface4;Arg2:DWORD) with Convention=>Stdcall;
   GetOverlayPosition:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPLONG;Arg3:LPLONG) with Convention=>Stdcall;
   GetPalette:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPLPDIRECTDRAWPALETTE) with Convention=>Stdcall;
   GetPixelFormat:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPDDPIXELFORMAT) with Convention=>Stdcall;
   GetSurfaceDesc:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPDDSURFACEDESC2) with Convention=>Stdcall;
   Initialize:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPDIRECTDRAW;Arg3:LPDDSURFACEDESC2) with Convention=>Stdcall;
   IsLost:access procedure(THIS:LPIDirectDrawSurface4) with Convention=>Stdcall;
   Lock:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPRECT;Arg3:LPDDSURFACEDESC2;Arg4:DWORD;Arg5:winnt.HANDLE) with Convention=>Stdcall;
   ReleaseDC:access procedure(THIS:LPIDirectDrawSurface4;Arg2:HDC) with Convention=>Stdcall;
   Restore:access procedure(THIS:LPIDirectDrawSurface4) with Convention=>Stdcall;
   SetClipper:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPDIRECTDRAWCLIPPER) with Convention=>Stdcall;
   SetColorKey:access procedure(THIS:LPIDirectDrawSurface4;Arg2:DWORD;Arg3:LPDDCOLORKEY) with Convention=>Stdcall;
   SetOverlayPosition:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LONG;Arg3:LONG) with Convention=>Stdcall;
   SetPalette:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPDIRECTDRAWPALETTE) with Convention=>Stdcall;
   Unlock:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPRECT) with Convention=>Stdcall;
   UpdateOverlay:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPRECT;Arg3:LPDIRECTDRAWSURFACE4;Arg4:LPRECT;Arg5:DWORD;Arg6:LPDDOVERLAYFX) with Convention=>Stdcall;
   UpdateOverlayDisplay:access procedure(THIS:LPIDirectDrawSurface4;Arg2:DWORD) with Convention=>Stdcall;
   UpdateOverlayZOrder:access procedure(THIS:LPIDirectDrawSurface4;Arg2:DWORD;Arg3:LPDIRECTDRAWSURFACE4) with Convention=>Stdcall;
   GetDDInterface:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPLPVOID) with Convention=>Stdcall;
   PageLock:access procedure(THIS:LPIDirectDrawSurface4;Arg2:DWORD) with Convention=>Stdcall;
   PageUnlock:access procedure(THIS:LPIDirectDrawSurface4;Arg2:DWORD) with Convention=>Stdcall;
   SetSurfaceDesc:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPDDSURFACEDESC2;Arg3:DWORD) with Convention=>Stdcall;
   SetPrivateData:access procedure(THIS:LPIDirectDrawSurface4;Arg2:REFGUID;Arg3:LPVOID;Arg4:DWORD;Arg5:DWORD) with Convention=>Stdcall;
   GetPrivateData:access procedure(THIS:LPIDirectDrawSurface4;Arg2:REFGUID;Arg3:LPVOID;Arg4:LPDWORD) with Convention=>Stdcall;
   FreePrivateData:access procedure(THIS:LPIDirectDrawSurface4;Arg2:REFGUID) with Convention=>Stdcall;
   GetUniquenessValue:access procedure(THIS:LPIDirectDrawSurface4;Arg2:LPDWORD) with Convention=>Stdcall;
   ChangeUniquenessValue:access procedure(THIS:LPIDirectDrawSurface4) with Convention=>Stdcall;
end record;

type IDirectDrawSurface7 is record
   QueryInterface:access procedure(THIS:LPIDirectDrawSurface7;riid:REFIID;ppvObj:LPLPVOID) with Convention=>Stdcall;
   AddRef:access function(THIS:LPIDirectDrawSurface7) return ULONG with Convention=>Stdcall;
   Release:access function(THIS:LPIDirectDrawSurface7) return ULONG with Convention=>Stdcall;
   AddAttachedSurface:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPDIRECTDRAWSURFACE7) with Convention=>Stdcall;
   AddOverlayDirtyRect:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPRECT) with Convention=>Stdcall;
   Blt:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPRECT;Arg3:LPDIRECTDRAWSURFACE7;Arg4:LPRECT;Arg5:DWORD;Arg6:LPDDBLTFX) with Convention=>Stdcall;
   BltBatch:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPDDBLTBATCH;Arg3:DWORD;Arg4:DWORD) with Convention=>Stdcall;
   BltFast:access procedure(THIS:LPIDirectDrawSurface7;Arg2:DWORD;Arg3:DWORD;Arg4:LPDIRECTDRAWSURFACE7;Arg5:LPRECT;Arg6:DWORD) with Convention=>Stdcall;
   DeleteAttachedSurface:access procedure(THIS:LPIDirectDrawSurface7;Arg2:DWORD;Arg3:LPDIRECTDRAWSURFACE7) with Convention=>Stdcall;
   EnumAttachedSurfaces:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPVOID;Arg3:LPDDENUMSURFACESCALLBACK7) with Convention=>Stdcall;
   EnumOverlayZOrders:access procedure(THIS:LPIDirectDrawSurface7;Arg2:DWORD;Arg3:LPVOID;Arg4:LPDDENUMSURFACESCALLBACK7) with Convention=>Stdcall;
   Flip:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPDIRECTDRAWSURFACE7;Arg3:DWORD) with Convention=>Stdcall;
   GetAttachedSurface:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPDDSCAPS2;Arg3:LPLPDIRECTDRAWSURFACE7) with Convention=>Stdcall;
   GetBltStatus:access procedure(THIS:LPIDirectDrawSurface7;Arg2:DWORD) with Convention=>Stdcall;
   GetCaps:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPDDSCAPS2) with Convention=>Stdcall;
   GetClipper:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPLPDIRECTDRAWCLIPPER) with Convention=>Stdcall;
   GetColorKey:access procedure(THIS:LPIDirectDrawSurface7;Arg2:DWORD;Arg3:LPDDCOLORKEY) with Convention=>Stdcall;
   GetDC:access procedure(THIS:LPIDirectDrawSurface7;Arg2:access HDC) with Convention=>Stdcall;
   GetFlipStatus:access procedure(THIS:LPIDirectDrawSurface7;Arg2:DWORD) with Convention=>Stdcall;
   GetOverlayPosition:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPLONG;Arg3:LPLONG) with Convention=>Stdcall;
   GetPalette:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPLPDIRECTDRAWPALETTE) with Convention=>Stdcall;
   GetPixelFormat:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPDDPIXELFORMAT) with Convention=>Stdcall;
   GetSurfaceDesc:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPDDSURFACEDESC2) with Convention=>Stdcall;
   Initialize:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPDIRECTDRAW;Arg3:LPDDSURFACEDESC2) with Convention=>Stdcall;
   IsLost:access procedure(THIS:LPIDirectDrawSurface7) with Convention=>Stdcall;
   Lock:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPRECT;Arg3:LPDDSURFACEDESC2;Arg4:DWORD;Arg5:winnt.HANDLE) with Convention=>Stdcall;
   ReleaseDC:access procedure(THIS:LPIDirectDrawSurface7;Arg2:HDC) with Convention=>Stdcall;
   Restore:access procedure(THIS:LPIDirectDrawSurface7) with Convention=>Stdcall;
   SetClipper:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPDIRECTDRAWCLIPPER) with Convention=>Stdcall;
   SetColorKey:access procedure(THIS:LPIDirectDrawSurface7;Arg2:DWORD;Arg3:LPDDCOLORKEY) with Convention=>Stdcall;
   SetOverlayPosition:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LONG;Arg3:LONG) with Convention=>Stdcall;
   SetPalette:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPDIRECTDRAWPALETTE) with Convention=>Stdcall;
   Unlock:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPRECT) with Convention=>Stdcall;
   UpdateOverlay:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPRECT;Arg3:LPDIRECTDRAWSURFACE7;Arg4:LPRECT;Arg5:DWORD;Arg6:LPDDOVERLAYFX) with Convention=>Stdcall;
   UpdateOverlayDisplay:access procedure(THIS:LPIDirectDrawSurface7;Arg2:DWORD) with Convention=>Stdcall;
   UpdateOverlayZOrder:access procedure(THIS:LPIDirectDrawSurface7;Arg2:DWORD;Arg3:LPDIRECTDRAWSURFACE7) with Convention=>Stdcall;
   GetDDInterface:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPLPVOID) with Convention=>Stdcall;
   PageLock:access procedure(THIS:LPIDirectDrawSurface7;Arg2:DWORD) with Convention=>Stdcall;
   PageUnlock:access procedure(THIS:LPIDirectDrawSurface7;Arg2:DWORD) with Convention=>Stdcall;
   SetSurfaceDesc:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPDDSURFACEDESC2;Arg3:DWORD) with Convention=>Stdcall;
   SetPrivateData:access procedure(THIS:LPIDirectDrawSurface7;Arg2:REFGUID;Arg3:LPVOID;Arg4:DWORD;Arg5:DWORD) with Convention=>Stdcall;
   GetPrivateData:access procedure(THIS:LPIDirectDrawSurface7;Arg2:REFGUID;Arg3:LPVOID;Arg4:LPDWORD) with Convention=>Stdcall;
   FreePrivateData:access procedure(THIS:LPIDirectDrawSurface7;Arg2:REFGUID) with Convention=>Stdcall;
   GetUniquenessValue:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPDWORD) with Convention=>Stdcall;
   ChangeUniquenessValue:access procedure(THIS:LPIDirectDrawSurface7) with Convention=>Stdcall;
   SetPriority:access procedure(THIS:LPIDirectDrawSurface7;Arg2:DWORD) with Convention=>Stdcall;
   GetPriority:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPDWORD) with Convention=>Stdcall;
   SetLOD:access procedure(THIS:LPIDirectDrawSurface7;Arg2:DWORD) with Convention=>Stdcall;
   GetLOD:access procedure(THIS:LPIDirectDrawSurface7;Arg2:LPDWORD) with Convention=>Stdcall;
end record;

type IDirectDrawColorControl is record
   QueryInterface:access procedure(THIS:LPIDirectDrawColorControl;riid:REFIID;ppvObj:LPLPVOID) with Convention=>Stdcall;
   AddRef:access function(THIS:LPIDirectDrawColorControl) return ULONG with Convention=>Stdcall;
   Release:access function(THIS:LPIDirectDrawColorControl) return ULONG with Convention=>Stdcall;
   GetColorControls:access procedure(THIS:LPIDirectDrawColorControl;Arg2:LPDDCOLORCONTROL) with Convention=>Stdcall;
   SetColorControls:access procedure(THIS:LPIDirectDrawColorControl;Arg2:LPDDCOLORCONTROL) with Convention=>Stdcall;
end record;

type IDirectDrawGammaControl is record
   QueryInterface:access procedure(THIS:LPIDirectDrawGammaControl;riid:REFIID;ppvObj:LPLPVOID) with Convention=>Stdcall;
   AddRef:access function(THIS:LPIDirectDrawGammaControl) return ULONG with Convention=>Stdcall;
   Release:access function(THIS:LPIDirectDrawGammaControl) return ULONG with Convention=>Stdcall;
   GetGammaRamp:access procedure(THIS:LPIDirectDrawGammaControl;Arg2:DWORD;Arg3:LPDDGAMMARAMP) with Convention=>Stdcall;
   SetGammaRamp:access procedure(THIS:LPIDirectDrawGammaControl;Arg2:DWORD;Arg3:LPDDGAMMARAMP) with Convention=>Stdcall;
end record;


   type tagDDSURFACEDESC_U1(b:Boolean:=True) is record
      case b is
         when True=>
            lPitch: LONG;
         when False=>
            dwLinearSize: DWORD;
      end case;
   end record with Unchecked_Union;


   type tagDDSURFACEDESC_U2(i:Integer:=0) is record
      case i is
         when 0=>
            dwMipMapCount: DWORD;
         when 1=>
            dwZBufferBitDepth: DWORD;
         when others=>
            dwRefreshRate: DWORD;
      end case;
   end record with Unchecked_Union;


   type tagDDSURFACEDESC is record
      dwSize: DWORD;
      dwFlags: DWORD;
      dwHeight: DWORD;
      dwWidth: DWORD;
      u1:tagDDSURFACEDESC_U1;
      dwBackBufferCount: DWORD;
      u2:tagDDSURFACEDESC_U2;
      dwAlphaBitDepth: DWORD;
      dwReserved: DWORD;
      lpSurface: LPVOID;
      ddckCKDestOverlay: DDCOLORKEY;
      ddckCKDestBlt: DDCOLORKEY;
      ddckCKSrcOverlay: DDCOLORKEY;
      ddckCKSrcBlt: DDCOLORKEY;
      ddpfPixelFormat: DDPIXELFORMAT;
      ddsCaps: ddraw.DDSCAPS;
   end record;

   subtype DDSURFACEDESC is tagDDSURFACEDESC;

   --type LPDDSURFACEDESC is access all tagDDSURFACEDESC;

   type tagDDSURFACEDESC2_U1(b:Boolean:=True) is record
      case b is
         when True=>
            lPitch: LONG;
         when False=>
            dwLinearSize: DWORD;
      end case;
   end record with Unchecked_Union;

   type tagDDSURFACEDESC2_U5(b:Boolean:=True) is record
      case b is
         when True=>
            dwBackBufferCount: DWORD;
         when False=>
            dwDepth: DWORD;
      end case;
   end record with Unchecked_Union;



   type tagDDSURFACEDESC2_U2(i:Integer:=0) is record
      case i is
         when 0=>
            dwMipMapCount: DWORD;
         when 1=>
            dwRefreshRate: DWORD;
         when others=>
            dwSrcVBHandle: DWORD;
      end case;
   end record with Unchecked_Union;

   type tagDDSURFACEDESC2_U3(b:Boolean:=True) is record
      case b is
         when True=>
            ddckCKDestOverlay: DDCOLORKEY;
         when False=>
            dwEmptyFaceColor: DWORD;
      end case;
   end record with Unchecked_Union;


   type tagDDSURFACEDESC2_U4(b:Boolean:=True) is record
      case b is
         when True=>
            ddpfPixelFormat: DDPIXELFORMAT;
         when False=>
            dwFVF: DWORD;
      end case;
   end record with Unchecked_Union;

   type tagDDSURFACEDESC2 is record
      dwSize: DWORD;
      dwFlags: DWORD;
      dwHeight: DWORD;
      dwWidth: DWORD;
      u1:tagDDSURFACEDESC2_U1;
      u5:tagDDSURFACEDESC2_U5;
      u2:tagDDSURFACEDESC2_U2;
      dwAlphaBitDepth: DWORD;
      dwReserved: DWORD;
      lpSurface: LPVOID;
      u3:tagDDSURFACEDESC2_U3;
      ddckCKDestBlt: DDCOLORKEY;
      ddckCKSrcOverlay: DDCOLORKEY;
      ddckCKSrcBlt: DDCOLORKEY;
      u4:tagDDSURFACEDESC2_U4;
      ddsCaps: DDSCAPS2;
      dwTextureStage: DWORD;
   end record;

   subtype DDSURFACEDESC2 is tagDDSURFACEDESC2;

   --type LPDDSURFACEDESC2 is access all tagDDSURFACEDESC2;

   DDSD_CAPS : constant := 16#00000001#;

   DDSD_HEIGHT : constant := 16#00000002#;

   DDSD_WIDTH : constant := 16#00000004#;

   DDSD_PITCH : constant := 16#00000008#;

   DDSD_BACKBUFFERCOUNT : constant := 16#00000020#;

   DDSD_ZBUFFERBITDEPTH : constant := 16#00000040#;

   DDSD_ALPHABITDEPTH : constant := 16#00000080#;

   DDSD_LPSURFACE : constant := 16#00000800#;

   DDSD_PIXELFORMAT : constant := 16#00001000#;

   DDSD_CKDESTOVERLAY : constant := 16#00002000#;

   DDSD_CKDESTBLT : constant := 16#00004000#;

   DDSD_CKSRCOVERLAY : constant := 16#00008000#;

   DDSD_CKSRCBLT : constant := 16#00010000#;

   DDSD_MIPMAPCOUNT : constant := 16#00020000#;

   DDSD_REFRESHRATE : constant := 16#00040000#;

   DDSD_LINEARSIZE : constant := 16#00080000#;

   DDSD_TEXTURESTAGE : constant := 16#00100000#;

   DDSD_FVF : constant := 16#00200000#;

   DDSD_SRCVBHANDLE : constant := 16#00400000#;

   DDSD_DEPTH : constant := 16#00800000#;

   DDSD_ALL : constant := 16#00fff9ee#;

   type tagDDOPTSURFACEDESC is record
      dwSize: DWORD;
      dwFlags: DWORD;
      ddSCaps: DDSCAPS2;
      ddOSCaps: ddraw.DDOSCAPS;
      guid: rpcdce.GUID;
      dwCompressionRatio: DWORD;
   end record;

   subtype DDOPTSURFACEDESC is tagDDOPTSURFACEDESC;

   type LPDDOPTSURFACEDESC is access all tagDDOPTSURFACEDESC;

   DDOSD_GUID : constant := 16#00000001#;

   DDOSD_COMPRESSION_RATIO : constant := 16#00000002#;

   DDOSD_SCAPS : constant := 16#00000004#;

   DDOSD_OSCAPS : constant := 16#00000008#;

   DDOSD_ALL : constant := 16#0000000f#;

   DDOSDCAPS_OPTCOMPRESSED : constant := 16#00000001#;

   DDOSDCAPS_OPTREORDERED : constant := 16#00000002#;

   DDOSDCAPS_MONOLITHICMIPMAP : constant := 16#00000004#;

   DDOSDCAPS_VALIDSCAPS : constant := 16#30004800#;

   DDOSDCAPS_VALIDOSCAPS : constant := 16#00000007#;

   type tagDDCOLORCONTROL is record
      dwSize: DWORD;
      dwFlags: DWORD;
      lBrightness: LONG;
      lContrast: LONG;
      lHue: LONG;
      lSaturation: LONG;
      lSharpness: LONG;
      lGamma: LONG;
      lColorEnable: LONG;
      dwReserved1: DWORD;
   end record;

   subtype DDCOLORCONTROL is tagDDCOLORCONTROL;

   --type LPDDCOLORCONTROL is access all tagDDCOLORCONTROL;

   DDCOLOR_BRIGHTNESS : constant := 16#00000001#;

   DDCOLOR_CONTRAST : constant := 16#00000002#;

   DDCOLOR_HUE : constant := 16#00000004#;

   DDCOLOR_SATURATION : constant := 16#00000008#;

   DDCOLOR_SHARPNESS : constant := 16#00000010#;

   DDCOLOR_GAMMA : constant := 16#00000020#;

   DDCOLOR_COLORENABLE : constant := 16#00000040#;

   DDSCAPS_RESERVED1 : constant := 16#00000001#;

   DDSCAPS_ALPHA : constant := 16#00000002#;

   DDSCAPS_BACKBUFFER : constant := 16#00000004#;

   DDSCAPS_COMPLEX : constant := 16#00000008#;

   DDSCAPS_FLIP : constant := 16#00000010#;

   DDSCAPS_FRONTBUFFER : constant := 16#00000020#;

   DDSCAPS_OFFSCREENPLAIN : constant := 16#00000040#;

   DDSCAPS_OVERLAY : constant := 16#00000080#;

   DDSCAPS_PALETTE : constant := 16#00000100#;

   DDSCAPS_PRIMARYSURFACE : constant := 16#00000200#;

   DDSCAPS_RESERVED3 : constant := 16#00000400#;

   DDSCAPS_PRIMARYSURFACELEFT : constant := 16#00000000#;

   DDSCAPS_SYSTEMMEMORY : constant := 16#00000800#;

   DDSCAPS_TEXTURE : constant := 16#00001000#;

   DDSCAPS_3DDEVICE : constant := 16#00002000#;

   DDSCAPS_VIDEOMEMORY : constant := 16#00004000#;

   DDSCAPS_VISIBLE : constant := 16#00008000#;

   DDSCAPS_WRITEONLY : constant := 16#00010000#;

   DDSCAPS_ZBUFFER : constant := 16#00020000#;

   DDSCAPS_OWNDC : constant := 16#00040000#;

   DDSCAPS_LIVEVIDEO : constant := 16#00080000#;

   DDSCAPS_HWCODEC : constant := 16#00100000#;

   DDSCAPS_MODEX : constant := 16#00200000#;

   DDSCAPS_MIPMAP : constant := 16#00400000#;

   DDSCAPS_RESERVED2 : constant := 16#00800000#;

   DDSCAPS_ALLOCONLOAD : constant := 16#04000000#;

   DDSCAPS_VIDEOPORT : constant := 16#08000000#;

   DDSCAPS_LOCALVIDMEM : constant := 16#10000000#;

   DDSCAPS_NONLOCALVIDMEM : constant := 16#20000000#;

   DDSCAPS_STANDARDVGAMODE : constant := 16#40000000#;

   DDSCAPS_OPTIMIZED : constant := 16#80000000#;

   DDSCAPS2_RESERVED4 : constant := 16#00000002#;

   DDSCAPS2_HARDWAREDEINTERLACE : constant := 16#00000000#;

   DDSCAPS2_HINTDYNAMIC : constant := 16#00000004#;

   DDSCAPS2_HINTSTATIC : constant := 16#00000008#;

   DDSCAPS2_TEXTUREMANAGE : constant := 16#00000010#;

   DDSCAPS2_RESERVED1 : constant := 16#00000020#;

   DDSCAPS2_RESERVED2 : constant := 16#00000040#;

   DDSCAPS2_OPAQUE : constant := 16#00000080#;

   DDSCAPS2_HINTANTIALIASING : constant := 16#00000100#;

   DDSCAPS2_CUBEMAP : constant := 16#00000200#;

   DDSCAPS2_CUBEMAP_POSITIVEX : constant := 16#00000400#;

   DDSCAPS2_CUBEMAP_NEGATIVEX : constant := 16#00000800#;

   DDSCAPS2_CUBEMAP_POSITIVEY : constant := 16#00001000#;

   DDSCAPS2_CUBEMAP_NEGATIVEY : constant := 16#00002000#;

   DDSCAPS2_CUBEMAP_POSITIVEZ : constant := 16#00004000#;

   DDSCAPS2_CUBEMAP_NEGATIVEZ : constant := 16#00008000#;

   DDSCAPS2_CUBEMAP_ALLFACES : constant dword:= ( DDSCAPS2_CUBEMAP_POSITIVEX or
                                             DDSCAPS2_CUBEMAP_NEGATIVEX or
                                             DDSCAPS2_CUBEMAP_POSITIVEY or
                                             DDSCAPS2_CUBEMAP_NEGATIVEY or
                                             DDSCAPS2_CUBEMAP_POSITIVEZ or
                                             DDSCAPS2_CUBEMAP_NEGATIVEZ );

   DDSCAPS2_MIPMAPSUBLEVEL : constant := 16#00010000#;

   DDSCAPS2_D3DTEXTUREMANAGE : constant := 16#00020000#;

   DDSCAPS2_DONOTPERSIST : constant := 16#00040000#;

   DDSCAPS2_STEREOSURFACELEFT : constant := 16#00080000#;

   DDSCAPS2_VOLUME : constant := 16#00200000#;

   DDSCAPS2_NOTUSERLOCKABLE : constant := 16#00400000#;

   DDSCAPS2_POINTS : constant := 16#00800000#;

   DDSCAPS2_RTPATCHES : constant := 16#01000000#;

   DDSCAPS2_NPATCHES : constant := 16#02000000#;

   DDSCAPS2_RESERVED3 : constant := 16#04000000#;

   DDSCAPS2_DISCARDBACKBUFFER : constant := 16#10000000#;

   DDSCAPS2_ENABLEALPHACHANNEL : constant := 16#20000000#;

   DDSCAPS2_EXTENDEDFORMATPRIMARY : constant := 16#40000000#;

   DDSCAPS2_ADDITIONALPRIMARY : constant := 16#80000000#;

   DDSCAPS3_MULTISAMPLE_MASK : constant := 16#0000001F#;

   DDSCAPS3_MULTISAMPLE_QUALITY_MASK : constant := 16#000000E0#;

   DDSCAPS3_MULTISAMPLE_QUALITY_SHIFT : constant := 5;

   DDSCAPS3_RESERVED1 : constant := 16#00000100#;

   DDSCAPS3_RESERVED2 : constant := 16#00000200#;

   DDSCAPS3_LIGHTWEIGHTMIPMAP : constant := 16#00000400#;

   DDSCAPS3_AUTOGENMIPMAP : constant := 16#00000800#;

   DDSCAPS3_DMAP : constant := 16#00001000#;

   DDSCAPS3_CREATESHAREDRESOURCE : constant := 16#00002000#;

   DDSCAPS3_READONLYRESOURCE : constant := 16#00004000#;

   DDSCAPS3_OPENSHAREDRESOURCE : constant := 16#00008000#;

   DDCAPS_3D : constant := 16#00000001#;

   DDCAPS_ALIGNBOUNDARYDEST : constant := 16#00000002#;

   DDCAPS_ALIGNSIZEDEST : constant := 16#00000004#;

   DDCAPS_ALIGNBOUNDARYSRC : constant := 16#00000008#;

   DDCAPS_ALIGNSIZESRC : constant := 16#00000010#;

   DDCAPS_ALIGNSTRIDE : constant := 16#00000020#;

   DDCAPS_BLT : constant := 16#00000040#;

   DDCAPS_BLTQUEUE : constant := 16#00000080#;

   DDCAPS_BLTFOURCC : constant := 16#00000100#;

   DDCAPS_BLTSTRETCH : constant := 16#00000200#;

   DDCAPS_GDI : constant := 16#00000400#;

   DDCAPS_OVERLAY : constant := 16#00000800#;

   DDCAPS_OVERLAYCANTCLIP : constant := 16#00001000#;

   DDCAPS_OVERLAYFOURCC : constant := 16#00002000#;

   DDCAPS_OVERLAYSTRETCH : constant := 16#00004000#;

   DDCAPS_PALETTE : constant := 16#00008000#;

   DDCAPS_PALETTEVSYNC : constant := 16#00010000#;

   DDCAPS_READSCANLINE : constant := 16#00020000#;

   DDCAPS_RESERVED1 : constant := 16#00040000#;

   DDCAPS_VBI : constant := 16#00080000#;

   DDCAPS_ZBLTS : constant := 16#00100000#;

   DDCAPS_ZOVERLAYS : constant := 16#00200000#;

   DDCAPS_COLORKEY : constant := 16#00400000#;

   DDCAPS_ALPHA : constant := 16#00800000#;

   DDCAPS_COLORKEYHWASSIST : constant := 16#01000000#;

   DDCAPS_NOHARDWARE : constant := 16#02000000#;

   DDCAPS_BLTCOLORFILL : constant := 16#04000000#;

   DDCAPS_BANKSWITCHED : constant := 16#08000000#;

   DDCAPS_BLTDEPTHFILL : constant := 16#10000000#;

   DDCAPS_CANCLIP : constant := 16#20000000#;

   DDCAPS_CANCLIPSTRETCHED : constant := 16#40000000#;

   DDCAPS_CANBLTSYSMEM : constant := 16#80000000#;

   DDCAPS2_CERTIFIED : constant := 16#00000001#;

   DDCAPS2_NO2DDURING3DSCENE : constant := 16#00000002#;

   DDCAPS2_VIDEOPORT : constant := 16#00000004#;

   DDCAPS2_AUTOFLIPOVERLAY : constant := 16#00000008#;

   DDCAPS2_CANBOBINTERLEAVED : constant := 16#00000010#;

   DDCAPS2_CANBOBNONINTERLEAVED : constant := 16#00000020#;

   DDCAPS2_COLORCONTROLOVERLAY : constant := 16#00000040#;

   DDCAPS2_COLORCONTROLPRIMARY : constant := 16#00000080#;

   DDCAPS2_CANDROPZ16BIT : constant := 16#00000100#;

   DDCAPS2_NONLOCALVIDMEM : constant := 16#00000200#;

   DDCAPS2_NONLOCALVIDMEMCAPS : constant := 16#00000400#;

   DDCAPS2_NOPAGELOCKREQUIRED : constant := 16#00000800#;

   DDCAPS2_WIDESURFACES : constant := 16#00001000#;

   DDCAPS2_CANFLIPODDEVEN : constant := 16#00002000#;

   DDCAPS2_CANBOBHARDWARE : constant := 16#00004000#;

   DDCAPS2_COPYFOURCC : constant := 16#00008000#;

   DDCAPS2_PRIMARYGAMMA : constant := 16#00020000#;

   DDCAPS2_CANRENDERWINDOWED : constant := 16#00080000#;

   DDCAPS2_CANCALIBRATEGAMMA : constant := 16#00100000#;

   DDCAPS2_FLIPINTERVAL : constant := 16#00200000#;

   DDCAPS2_FLIPNOVSYNC : constant := 16#00400000#;

   DDCAPS2_CANMANAGETEXTURE : constant := 16#00800000#;

   DDCAPS2_TEXMANINNONLOCALVIDMEM : constant := 16#01000000#;

   DDCAPS2_STEREO : constant := 16#02000000#;

   DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL : constant := 16#04000000#;

   DDCAPS2_RESERVED1 : constant := 16#08000000#;

   DDCAPS2_CANMANAGERESOURCE : constant := 16#10000000#;

   DDCAPS2_DYNAMICTEXTURES : constant := 16#20000000#;

   DDCAPS2_CANAUTOGENMIPMAP : constant := 16#40000000#;

   DDCAPS2_CANSHARERESOURCE : constant := 16#80000000#;

   DDFXALPHACAPS_BLTALPHAEDGEBLEND : constant := 16#00000001#;

   DDFXALPHACAPS_BLTALPHAPIXELS : constant := 16#00000002#;

   DDFXALPHACAPS_BLTALPHAPIXELSNEG : constant := 16#00000004#;

   DDFXALPHACAPS_BLTALPHASURFACES : constant := 16#00000008#;

   DDFXALPHACAPS_BLTALPHASURFACESNEG : constant := 16#00000010#;

   DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND : constant := 16#00000020#;

   DDFXALPHACAPS_OVERLAYALPHAPIXELS : constant := 16#00000040#;

   DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG : constant := 16#00000080#;

   DDFXALPHACAPS_OVERLAYALPHASURFACES : constant := 16#00000100#;

   DDFXALPHACAPS_OVERLAYALPHASURFACESNEG : constant := 16#00000200#;

   DDFXCAPS_BLTARITHSTRETCHY : constant := 16#00000020#;

   DDFXCAPS_BLTARITHSTRETCHYN : constant := 16#00000010#;

   DDFXCAPS_BLTMIRRORLEFTRIGHT : constant := 16#00000040#;

   DDFXCAPS_BLTMIRRORUPDOWN : constant := 16#00000080#;

   DDFXCAPS_BLTROTATION : constant := 16#00000100#;

   DDFXCAPS_BLTROTATION90 : constant := 16#00000200#;

   DDFXCAPS_BLTSHRINKX : constant := 16#00000400#;

   DDFXCAPS_BLTSHRINKXN : constant := 16#00000800#;

   DDFXCAPS_BLTSHRINKY : constant := 16#00001000#;

   DDFXCAPS_BLTSHRINKYN : constant := 16#00002000#;

   DDFXCAPS_BLTSTRETCHX : constant := 16#00004000#;

   DDFXCAPS_BLTSTRETCHXN : constant := 16#00008000#;

   DDFXCAPS_BLTSTRETCHY : constant := 16#00010000#;

   DDFXCAPS_BLTSTRETCHYN : constant := 16#00020000#;

   DDFXCAPS_OVERLAYARITHSTRETCHY : constant := 16#00040000#;

   DDFXCAPS_OVERLAYARITHSTRETCHYN : constant := 16#00000008#;

   DDFXCAPS_OVERLAYSHRINKX : constant := 16#00080000#;

   DDFXCAPS_OVERLAYSHRINKXN : constant := 16#00100000#;

   DDFXCAPS_OVERLAYSHRINKY : constant := 16#00200000#;

   DDFXCAPS_OVERLAYSHRINKYN : constant := 16#00400000#;

   DDFXCAPS_OVERLAYSTRETCHX : constant := 16#00800000#;

   DDFXCAPS_OVERLAYSTRETCHXN : constant := 16#01000000#;

   DDFXCAPS_OVERLAYSTRETCHY : constant := 16#02000000#;

   DDFXCAPS_OVERLAYSTRETCHYN : constant := 16#04000000#;

   DDFXCAPS_OVERLAYMIRRORLEFTRIGHT : constant := 16#08000000#;

   DDFXCAPS_OVERLAYMIRRORUPDOWN : constant := 16#10000000#;

   DDFXCAPS_OVERLAYDEINTERLACE : constant := 16#20000000#;

   DDFXCAPS_BLTALPHA : constant := 16#00000001#;

   DDFXCAPS_BLTFILTER : constant := DDFXCAPS_BLTARITHSTRETCHY;

   DDFXCAPS_OVERLAYALPHA : constant := 16#00000004#;

   DDFXCAPS_OVERLAYFILTER : constant := DDFXCAPS_OVERLAYARITHSTRETCHY;

   DDSVCAPS_RESERVED1 : constant := 16#00000001#;

   DDSVCAPS_RESERVED2 : constant := 16#00000002#;

   DDSVCAPS_RESERVED3 : constant := 16#00000004#;

   DDSVCAPS_RESERVED4 : constant := 16#00000008#;

   DDSVCAPS_STEREOSEQUENTIAL : constant := 16#00000010#;

   DDPCAPS_4BIT : constant := 16#00000001#;

   DDPCAPS_8BITENTRIES : constant := 16#00000002#;

   DDPCAPS_8BIT : constant := 16#00000004#;

   DDPCAPS_INITIALIZE : constant := 16#00000000#;

   DDPCAPS_PRIMARYSURFACE : constant := 16#00000010#;

   DDPCAPS_PRIMARYSURFACELEFT : constant := 16#00000020#;

   DDPCAPS_ALLOW256 : constant := 16#00000040#;

   DDPCAPS_VSYNC : constant := 16#00000080#;

   DDPCAPS_1BIT : constant := 16#00000100#;

   DDPCAPS_2BIT : constant := 16#00000200#;

   DDPCAPS_ALPHA : constant := 16#00000400#;

   DDSPD_IUNKNOWNPOINTER : constant := 16#00000001#;

   DDSPD_VOLATILE : constant := 16#00000002#;

   DDBD_1 : constant := 16#00004000#;

   DDBD_2 : constant := 16#00002000#;

   DDBD_4 : constant := 16#00001000#;

   DDBD_8 : constant := 16#00000800#;

   DDBD_16 : constant := 16#00000400#;

   DDBD_24 : constant := 16#00000200#;

   DDBD_32 : constant := 16#00000100#;

   DDCKEY_COLORSPACE : constant := 16#00000001#;

   DDCKEY_DESTBLT : constant := 16#00000002#;

   DDCKEY_DESTOVERLAY : constant := 16#00000004#;

   DDCKEY_SRCBLT : constant := 16#00000008#;

   DDCKEY_SRCOVERLAY : constant := 16#00000010#;

   DDCKEYCAPS_DESTBLT : constant := 16#00000001#;

   DDCKEYCAPS_DESTBLTCLRSPACE : constant := 16#00000002#;

   DDCKEYCAPS_DESTBLTCLRSPACEYUV : constant := 16#00000004#;

   DDCKEYCAPS_DESTBLTYUV : constant := 16#00000008#;

   DDCKEYCAPS_DESTOVERLAY : constant := 16#00000010#;

   DDCKEYCAPS_DESTOVERLAYCLRSPACE : constant := 16#00000020#;

   DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV : constant := 16#00000040#;

   DDCKEYCAPS_DESTOVERLAYONEACTIVE : constant := 16#00000080#;

   DDCKEYCAPS_DESTOVERLAYYUV : constant := 16#00000100#;

   DDCKEYCAPS_SRCBLT : constant := 16#00000200#;

   DDCKEYCAPS_SRCBLTCLRSPACE : constant := 16#00000400#;

   DDCKEYCAPS_SRCBLTCLRSPACEYUV : constant := 16#00000800#;

   DDCKEYCAPS_SRCBLTYUV : constant := 16#00001000#;

   DDCKEYCAPS_SRCOVERLAY : constant := 16#00002000#;

   DDCKEYCAPS_SRCOVERLAYCLRSPACE : constant := 16#00004000#;

   DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV : constant := 16#00008000#;

   DDCKEYCAPS_SRCOVERLAYONEACTIVE : constant := 16#00010000#;

   DDCKEYCAPS_SRCOVERLAYYUV : constant := 16#00020000#;

   DDCKEYCAPS_NOCOSTOVERLAY : constant := 16#00040000#;

   DDPF_ALPHAPIXELS : constant := 16#00000001#;

   DDPF_ALPHA : constant := 16#00000002#;

   DDPF_FOURCC : constant := 16#00000004#;

   DDPF_PALETTEINDEXED4 : constant := 16#00000008#;

   DDPF_PALETTEINDEXEDTO8 : constant := 16#00000010#;

   DDPF_PALETTEINDEXED8 : constant := 16#00000020#;

   DDPF_RGB : constant := 16#00000040#;

   DDPF_COMPRESSED : constant := 16#00000080#;

   DDPF_RGBTOYUV : constant := 16#00000100#;

   DDPF_YUV : constant := 16#00000200#;

   DDPF_ZBUFFER : constant := 16#00000400#;

   DDPF_PALETTEINDEXED1 : constant := 16#00000800#;

   DDPF_PALETTEINDEXED2 : constant := 16#00001000#;

   DDPF_ZPIXELS : constant := 16#00002000#;

   DDPF_STENCILBUFFER : constant := 16#00004000#;

   DDPF_ALPHAPREMULT : constant := 16#00008000#;

   DDPF_LUMINANCE : constant := 16#00020000#;

   DDPF_BUMPLUMINANCE : constant := 16#00040000#;

   DDPF_BUMPDUDV : constant := 16#00080000#;

   DDENUMSURFACES_ALL : constant := 16#00000001#;

   DDENUMSURFACES_MATCH : constant := 16#00000002#;

   DDENUMSURFACES_NOMATCH : constant := 16#00000004#;

   DDENUMSURFACES_CANBECREATED : constant := 16#00000008#;

   DDENUMSURFACES_DOESEXIST : constant := 16#00000010#;

   DDSDM_STANDARDVGAMODE : constant := 16#00000001#;

   DDEDM_REFRESHRATES : constant := 16#00000001#;

   DDEDM_STANDARDVGAMODES : constant := 16#00000002#;

   DDSCL_FULLSCREEN : constant := 16#00000001#;

   DDSCL_ALLOWREBOOT : constant := 16#00000002#;

   DDSCL_NOWINDOWCHANGES : constant := 16#00000004#;

   DDSCL_NORMAL : constant := 16#00000008#;

   DDSCL_EXCLUSIVE : constant := 16#00000010#;

   DDSCL_ALLOWMODEX : constant := 16#00000040#;

   DDSCL_SETFOCUSWINDOW : constant := 16#00000080#;

   DDSCL_SETDEVICEWINDOW : constant := 16#00000100#;

   DDSCL_CREATEDEVICEWINDOW : constant := 16#00000200#;

   DDSCL_MULTITHREADED : constant := 16#00000400#;

   DDSCL_FPUSETUP : constant := 16#00000800#;

   DDSCL_FPUPRESERVE : constant := 16#00001000#;

   DDBLT_ALPHADEST : constant := 16#00000001#;

   DDBLT_ALPHADESTCONSTOVERRIDE : constant := 16#00000002#;

   DDBLT_ALPHADESTNEG : constant := 16#00000004#;

   DDBLT_ALPHADESTSURFACEOVERRIDE : constant := 16#00000008#;

   DDBLT_ALPHAEDGEBLEND : constant := 16#00000010#;

   DDBLT_ALPHASRC : constant := 16#00000020#;

   DDBLT_ALPHASRCCONSTOVERRIDE : constant := 16#00000040#;

   DDBLT_ALPHASRCNEG : constant := 16#00000080#;

   DDBLT_ALPHASRCSURFACEOVERRIDE : constant := 16#00000100#;

   DDBLT_ASYNC : constant := 16#00000200#;

   DDBLT_COLORFILL : constant := 16#00000400#;

   DDBLT_DDFX : constant := 16#00000800#;

   DDBLT_DDROPS : constant := 16#00001000#;

   DDBLT_KEYDEST : constant := 16#00002000#;

   DDBLT_KEYDESTOVERRIDE : constant := 16#00004000#;

   DDBLT_KEYSRC : constant := 16#00008000#;

   DDBLT_KEYSRCOVERRIDE : constant := 16#00010000#;

   DDBLT_ROP : constant := 16#00020000#;

   DDBLT_ROTATIONANGLE : constant := 16#00040000#;

   DDBLT_ZBUFFER : constant := 16#00080000#;

   DDBLT_ZBUFFERDESTCONSTOVERRIDE : constant := 16#00100000#;

   DDBLT_ZBUFFERDESTOVERRIDE : constant := 16#00200000#;

   DDBLT_ZBUFFERSRCCONSTOVERRIDE : constant := 16#00400000#;

   DDBLT_ZBUFFERSRCOVERRIDE : constant := 16#00800000#;

   DDBLT_WAIT : constant := 16#01000000#;

   DDBLT_DEPTHFILL : constant := 16#02000000#;

   DDBLT_DONOTWAIT : constant := 16#08000000#;

   DDBLT_PRESENTATION : constant := 16#10000000#;

   DDBLT_LAST_PRESENTATION : constant := 16#20000000#;

   DDBLT_EXTENDED_FLAGS : constant := 16#40000000#;

   DDBLT_EXTENDED_LINEAR_CONTENT : constant := 16#00000004#;

   DDBLTFAST_NOCOLORKEY : constant := 16#00000000#;

   DDBLTFAST_SRCCOLORKEY : constant := 16#00000001#;

   DDBLTFAST_DESTCOLORKEY : constant := 16#00000002#;

   DDBLTFAST_WAIT : constant := 16#00000010#;

   DDBLTFAST_DONOTWAIT : constant := 16#00000020#;

   DDFLIP_WAIT : constant := 16#00000001#;

   DDFLIP_EVEN : constant := 16#00000002#;

   DDFLIP_ODD : constant := 16#00000004#;

   DDFLIP_NOVSYNC : constant := 16#00000008#;

   DDFLIP_INTERVAL2 : constant := 16#02000000#;

   DDFLIP_INTERVAL3 : constant := 16#03000000#;

   DDFLIP_INTERVAL4 : constant := 16#04000000#;

   DDFLIP_STEREO : constant := 16#00000010#;

   DDFLIP_DONOTWAIT : constant := 16#00000020#;

   DDOVER_ALPHADEST : constant := 16#00000001#;

   DDOVER_ALPHADESTCONSTOVERRIDE : constant := 16#00000002#;

   DDOVER_ALPHADESTNEG : constant := 16#00000004#;

   DDOVER_ALPHADESTSURFACEOVERRIDE : constant := 16#00000008#;

   DDOVER_ALPHAEDGEBLEND : constant := 16#00000010#;

   DDOVER_ALPHASRC : constant := 16#00000020#;

   DDOVER_ALPHASRCCONSTOVERRIDE : constant := 16#00000040#;

   DDOVER_ALPHASRCNEG : constant := 16#00000080#;

   DDOVER_ALPHASRCSURFACEOVERRIDE : constant := 16#00000100#;

   DDOVER_HIDE : constant := 16#00000200#;

   DDOVER_KEYDEST : constant := 16#00000400#;

   DDOVER_KEYDESTOVERRIDE : constant := 16#00000800#;

   DDOVER_KEYSRC : constant := 16#00001000#;

   DDOVER_KEYSRCOVERRIDE : constant := 16#00002000#;

   DDOVER_SHOW : constant := 16#00004000#;

   DDOVER_ADDDIRTYRECT : constant := 16#00008000#;

   DDOVER_REFRESHDIRTYRECTS : constant := 16#00010000#;

   DDOVER_REFRESHALL : constant := 16#00020000#;

   DDOVER_DDFX : constant := 16#00080000#;

   DDOVER_AUTOFLIP : constant := 16#00100000#;

   DDOVER_BOB : constant := 16#00200000#;

   DDOVER_OVERRIDEBOBWEAVE : constant := 16#00400000#;

   DDOVER_INTERLEAVED : constant := 16#00800000#;

   DDOVER_BOBHARDWARE : constant := 16#01000000#;

   DDOVER_ARGBSCALEFACTORS : constant := 16#02000000#;

   DDOVER_DEGRADEARGBSCALING : constant := 16#04000000#;

   DDSETSURFACEDESC_RECREATEDC : constant := 16#00000000#;--     // default;

   DDSETSURFACEDESC_PRESERVEDC : constant := 16#00000001#;

   DDLOCK_SURFACEMEMORYPTR : constant := 16#00000000#;--     // default;

   DDLOCK_WAIT : constant := 16#00000001#;

   DDLOCK_EVENT : constant := 16#00000002#;

   DDLOCK_READONLY : constant := 16#00000010#;

   DDLOCK_WRITEONLY : constant := 16#00000020#;

   DDLOCK_NOSYSLOCK : constant := 16#00000800#;

   DDLOCK_NOOVERWRITE : constant := 16#00001000#;

   DDLOCK_DISCARDCONTENTS : constant := 16#00002000#;

   DDLOCK_OKTOSWAP : constant := 16#00002000#;

   DDLOCK_DONOTWAIT : constant := 16#00004000#;

   DDLOCK_HASVOLUMETEXTUREBOXRECT : constant := 16#00008000#;

   DDLOCK_NODIRTYUPDATE : constant := 16#00010000#;

   DDBLTFX_ARITHSTRETCHY : constant := 16#00000001#;

   DDBLTFX_MIRRORLEFTRIGHT : constant := 16#00000002#;

   DDBLTFX_MIRRORUPDOWN : constant := 16#00000004#;

   DDBLTFX_NOTEARING : constant := 16#00000008#;

   DDBLTFX_ROTATE180 : constant := 16#00000010#;

   DDBLTFX_ROTATE270 : constant := 16#00000020#;

   DDBLTFX_ROTATE90 : constant := 16#00000040#;

   DDBLTFX_ZBUFFERRANGE : constant := 16#00000080#;

   DDBLTFX_ZBUFFERBASEDEST : constant := 16#00000100#;

   DDOVERFX_ARITHSTRETCHY : constant := 16#00000001#;

   DDOVERFX_MIRRORLEFTRIGHT : constant := 16#00000002#;

   DDOVERFX_MIRRORUPDOWN : constant := 16#00000004#;

   DDOVERFX_DEINTERLACE : constant := 16#00000008#;

   DDWAITVB_BLOCKBEGIN : constant := 16#00000001#;

   DDWAITVB_BLOCKBEGINEVENT : constant := 16#00000002#;

   DDWAITVB_BLOCKEND : constant := 16#00000004#;

   DDGFS_CANFLIP : constant := 16#00000001#;

   DDGFS_ISFLIPDONE : constant := 16#00000002#;

   DDGBS_CANBLT : constant := 16#00000001#;

   DDGBS_ISBLTDONE : constant := 16#00000002#;

   DDENUMOVERLAYZ_BACKTOFRONT : constant := 16#00000000#;

   DDENUMOVERLAYZ_FRONTTOBACK : constant := 16#00000001#;

   DDOVERZ_SENDTOFRONT : constant := 16#00000000#;

   DDOVERZ_SENDTOBACK : constant := 16#00000001#;

   DDOVERZ_MOVEFORWARD : constant := 16#00000002#;

   DDOVERZ_MOVEBACKWARD : constant := 16#00000003#;

   DDOVERZ_INSERTINFRONTOF : constant := 16#00000004#;

   DDOVERZ_INSERTINBACKOF : constant := 16#00000005#;

   DDSGR_CALIBRATE : constant := 16#00000001#;

   DDSMT_ISTESTREQUIRED : constant := 16#00000001#;

   DDEM_MODEPASSED : constant := 16#00000001#;

   DDEM_MODEFAILED : constant := 16#00000002#;

   DD_OK : constant := 0;

   DD_FALSE : constant := 1;

   DDENUMRET_CANCEL : constant := 0;

   DDENUMRET_OK : constant := 1;

   DDERR_ALREADYINITIALIZED : constant HRESULT:= MAKE_DDHRESULT( 5 );

   DDERR_CANNOTATTACHSURFACE : constant HRESULT:= MAKE_DDHRESULT( 10 );

   DDERR_CANNOTDETACHSURFACE : constant HRESULT:= MAKE_DDHRESULT( 20 );

   DDERR_CURRENTLYNOTAVAIL : constant HRESULT:= MAKE_DDHRESULT( 40 );

   DDERR_EXCEPTION : constant HRESULT:= MAKE_DDHRESULT( 55 );

   DDERR_GENERIC : constant := Winerror.E_FAIL;

   DDERR_HEIGHTALIGN : constant HRESULT:= MAKE_DDHRESULT( 90 );

   DDERR_INCOMPATIBLEPRIMARY : constant HRESULT:= MAKE_DDHRESULT( 95 );

   DDERR_INVALIDCAPS : constant HRESULT:= MAKE_DDHRESULT( 100 );

   DDERR_INVALIDCLIPLIST : constant HRESULT:= MAKE_DDHRESULT( 110 );

   DDERR_INVALIDMODE : constant HRESULT:= MAKE_DDHRESULT( 120 );

   DDERR_INVALIDOBJECT : constant HRESULT:= MAKE_DDHRESULT( 130 );

   DDERR_INVALIDPARAMS : constant := Winerror.E_INVALIDARG;

   DDERR_INVALIDPIXELFORMAT : constant HRESULT:= MAKE_DDHRESULT( 145 );

   DDERR_INVALIDRECT : constant HRESULT:= MAKE_DDHRESULT( 150 );

   DDERR_LOCKEDSURFACES : constant HRESULT:= MAKE_DDHRESULT( 160 );

   DDERR_NO3D : constant HRESULT:= MAKE_DDHRESULT( 170 );

   DDERR_NOALPHAHW : constant HRESULT:= MAKE_DDHRESULT( 180 );

   DDERR_NOSTEREOHARDWARE : constant HRESULT:= MAKE_DDHRESULT( 181 );

   DDERR_NOSURFACELEFT : constant HRESULT:= MAKE_DDHRESULT( 182 );

   DDERR_NOCLIPLIST : constant HRESULT:= MAKE_DDHRESULT( 205 );

   DDERR_NOCOLORCONVHW : constant HRESULT:= MAKE_DDHRESULT( 210 );

   DDERR_NOCOOPERATIVELEVELSET : constant HRESULT:= MAKE_DDHRESULT( 212 );

   DDERR_NOCOLORKEY : constant HRESULT:= MAKE_DDHRESULT( 215 );

   DDERR_NOCOLORKEYHW : constant HRESULT:= MAKE_DDHRESULT( 220 );

   DDERR_NODIRECTDRAWSUPPORT : constant HRESULT:= MAKE_DDHRESULT( 222 );

   DDERR_NOEXCLUSIVEMODE : constant HRESULT:= MAKE_DDHRESULT( 225 );

   DDERR_NOFLIPHW : constant HRESULT:= MAKE_DDHRESULT( 230 );

   DDERR_NOGDI : constant HRESULT:= MAKE_DDHRESULT( 240 );

   DDERR_NOMIRRORHW : constant HRESULT:= MAKE_DDHRESULT( 250 );

   DDERR_NOTFOUND : constant HRESULT:= MAKE_DDHRESULT( 255 );

   DDERR_NOOVERLAYHW : constant HRESULT:= MAKE_DDHRESULT( 260 );

   DDERR_OVERLAPPINGRECTS : constant HRESULT:= MAKE_DDHRESULT( 270 );

   DDERR_NORASTEROPHW : constant HRESULT:= MAKE_DDHRESULT( 280 );

   DDERR_NOROTATIONHW : constant HRESULT:= MAKE_DDHRESULT( 290 );

   DDERR_NOSTRETCHHW : constant HRESULT:= MAKE_DDHRESULT( 310 );

   DDERR_NOT4BITCOLOR : constant HRESULT:= MAKE_DDHRESULT( 316 );

   DDERR_NOT4BITCOLORINDEX : constant HRESULT:= MAKE_DDHRESULT( 317 );

   DDERR_NOT8BITCOLOR : constant HRESULT:= MAKE_DDHRESULT( 320 );

   DDERR_NOTEXTUREHW : constant HRESULT:= MAKE_DDHRESULT( 330 );

   DDERR_NOVSYNCHW : constant HRESULT:= MAKE_DDHRESULT( 335 );

   DDERR_NOZBUFFERHW : constant HRESULT:= MAKE_DDHRESULT( 340 );

   DDERR_NOZOVERLAYHW : constant HRESULT:= MAKE_DDHRESULT( 350 );

   DDERR_OUTOFCAPS : constant HRESULT:= MAKE_DDHRESULT( 360 );

   DDERR_OUTOFMEMORY : constant := Winerror.E_OUTOFMEMORY;

   DDERR_OUTOFVIDEOMEMORY : constant HRESULT:= MAKE_DDHRESULT( 380 );

   DDERR_OVERLAYCANTCLIP : constant HRESULT:= MAKE_DDHRESULT( 382 );

   DDERR_OVERLAYCOLORKEYONLYONEACTIVE : constant HRESULT:= MAKE_DDHRESULT( 384 );

   DDERR_PALETTEBUSY : constant HRESULT:= MAKE_DDHRESULT( 387 );

   DDERR_COLORKEYNOTSET : constant HRESULT:= MAKE_DDHRESULT( 400 );

   DDERR_SURFACEALREADYATTACHED : constant HRESULT:= MAKE_DDHRESULT( 410 );

   DDERR_SURFACEALREADYDEPENDENT : constant HRESULT:= MAKE_DDHRESULT( 420 );

   DDERR_SURFACEBUSY : constant HRESULT:= MAKE_DDHRESULT( 430 );

   DDERR_CANTLOCKSURFACE : constant HRESULT:= MAKE_DDHRESULT( 435 );

   DDERR_SURFACEISOBSCURED : constant HRESULT:= MAKE_DDHRESULT( 440 );

   DDERR_SURFACELOST : constant HRESULT:= MAKE_DDHRESULT( 450 );

   DDERR_SURFACENOTATTACHED : constant HRESULT:= MAKE_DDHRESULT( 460 );

   DDERR_TOOBIGHEIGHT : constant HRESULT:= MAKE_DDHRESULT( 470 );

   DDERR_TOOBIGSIZE : constant HRESULT:= MAKE_DDHRESULT( 480 );

   DDERR_TOOBIGWIDTH : constant HRESULT:= MAKE_DDHRESULT( 490 );

   DDERR_UNSUPPORTED : constant := Winerror.E_NOTIMPl;

   DDERR_UNSUPPORTEDFORMAT : constant HRESULT:= MAKE_DDHRESULT( 510 );

   DDERR_UNSUPPORTEDMASK : constant HRESULT:= MAKE_DDHRESULT( 520 );

   DDERR_INVALIDSTREAM : constant HRESULT:= MAKE_DDHRESULT( 521 );

   DDERR_VERTICALBLANKINPROGRESS : constant HRESULT:= MAKE_DDHRESULT( 537 );

   DDERR_WASSTILLDRAWING : constant HRESULT:= MAKE_DDHRESULT( 540 );

   DDERR_DDSCAPSCOMPLEXREQUIRED : constant HRESULT:= MAKE_DDHRESULT( 542 );

   DDERR_XALIGN : constant HRESULT:= MAKE_DDHRESULT( 560 );

   DDERR_INVALIDDIRECTDRAWGUID : constant HRESULT:= MAKE_DDHRESULT( 561 );

   DDERR_DIRECTDRAWALREADYCREATED : constant HRESULT:= MAKE_DDHRESULT( 562 );

   DDERR_NODIRECTDRAWHW : constant HRESULT:= MAKE_DDHRESULT( 563 );

   DDERR_PRIMARYSURFACEALREADYEXISTS : constant HRESULT:= MAKE_DDHRESULT( 564 );

   DDERR_NOEMULATION : constant HRESULT:= MAKE_DDHRESULT( 565 );

   DDERR_REGIONTOOSMALL : constant HRESULT:= MAKE_DDHRESULT( 566 );

   DDERR_CLIPPERISUSINGHWND : constant HRESULT:= MAKE_DDHRESULT( 567 );

   DDERR_NOCLIPPERATTACHED : constant HRESULT:= MAKE_DDHRESULT( 568 );

   DDERR_NOHWND : constant HRESULT:= MAKE_DDHRESULT( 569 );

   DDERR_HWNDSUBCLASSED : constant HRESULT:= MAKE_DDHRESULT( 570 );

   DDERR_HWNDALREADYSET : constant HRESULT:= MAKE_DDHRESULT( 571 );

   DDERR_NOPALETTEATTACHED : constant HRESULT:= MAKE_DDHRESULT( 572 );

   DDERR_NOPALETTEHW : constant HRESULT:= MAKE_DDHRESULT( 573 );

   DDERR_BLTFASTCANTCLIP : constant HRESULT:= MAKE_DDHRESULT( 574 );

   DDERR_NOBLTHW : constant HRESULT:= MAKE_DDHRESULT( 575 );

   DDERR_NODDROPSHW : constant HRESULT:= MAKE_DDHRESULT( 576 );

   DDERR_OVERLAYNOTVISIBLE : constant HRESULT:= MAKE_DDHRESULT( 577 );

   DDERR_NOOVERLAYDEST : constant HRESULT:= MAKE_DDHRESULT( 578 );

   DDERR_INVALIDPOSITION : constant HRESULT:= MAKE_DDHRESULT( 579 );

   DDERR_NOTAOVERLAYSURFACE : constant HRESULT:= MAKE_DDHRESULT( 580 );

   DDERR_EXCLUSIVEMODEALREADYSET : constant HRESULT:= MAKE_DDHRESULT( 581 );

   DDERR_NOTFLIPPABLE : constant HRESULT:= MAKE_DDHRESULT( 582 );

   DDERR_CANTDUPLICATE : constant HRESULT:= MAKE_DDHRESULT( 583 );

   DDERR_NOTLOCKED : constant HRESULT:= MAKE_DDHRESULT( 584 );

   DDERR_CANTCREATEDC : constant HRESULT:= MAKE_DDHRESULT( 585 );

   DDERR_NODC : constant HRESULT:= MAKE_DDHRESULT( 586 );

   DDERR_WRONGMODE : constant HRESULT:= MAKE_DDHRESULT( 587 );

   DDERR_IMPLICITLYCREATED : constant HRESULT:= MAKE_DDHRESULT( 588 );

   DDERR_NOTPALETTIZED : constant HRESULT:= MAKE_DDHRESULT( 589 );

   DDERR_UNSUPPORTEDMODE : constant HRESULT:= MAKE_DDHRESULT( 590 );

   DDERR_NOMIPMAPHW : constant HRESULT:= MAKE_DDHRESULT( 591 );

   DDERR_INVALIDSURFACETYPE : constant HRESULT:= MAKE_DDHRESULT( 592 );

   DDERR_NOOPTIMIZEHW : constant HRESULT:= MAKE_DDHRESULT( 600 );

   DDERR_NOTLOADED : constant HRESULT:= MAKE_DDHRESULT( 601 );

   DDERR_NOFOCUSWINDOW : constant HRESULT:= MAKE_DDHRESULT( 602 );

   DDERR_NOTONMIPMAPSUBLEVEL : constant HRESULT:= MAKE_DDHRESULT( 603 );

   DDERR_DCALREADYCREATED : constant HRESULT:= MAKE_DDHRESULT( 620 );

   DDERR_NONONLOCALVIDMEM : constant HRESULT:= MAKE_DDHRESULT( 630 );

   DDERR_CANTPAGELOCK : constant HRESULT:= MAKE_DDHRESULT( 640 );

   DDERR_CANTPAGEUNLOCK : constant HRESULT:= MAKE_DDHRESULT( 660 );

   DDERR_NOTPAGELOCKED : constant HRESULT:= MAKE_DDHRESULT( 680 );

   DDERR_MOREDATA : constant HRESULT:= MAKE_DDHRESULT( 690 );

   DDERR_EXPIRED : constant HRESULT:= MAKE_DDHRESULT( 691 );

   DDERR_TESTFINISHED : constant HRESULT:= MAKE_DDHRESULT( 692 );

   DDERR_NEWMODE : constant HRESULT:= MAKE_DDHRESULT( 693 );

   DDERR_D3DNOTINITIALIZED : constant HRESULT:= MAKE_DDHRESULT( 694 );

   DDERR_VIDEONOTACTIVE : constant HRESULT:= MAKE_DDHRESULT( 695 );

   DDERR_NOMONITORINFORMATION : constant HRESULT:= MAKE_DDHRESULT( 696 );

   DDERR_NODRIVERSUPPORT : constant HRESULT:= MAKE_DDHRESULT( 697 );

   DDERR_DEVICEDOESNTOWNSURFACE : constant HRESULT:= MAKE_DDHRESULT( 699 );

   DDERR_NOTINITIALIZED : constant := CO_E_NOTINITIALIZED;



   --
   -- THE END.
   --


end ddraw;















猜你喜欢

转载自blog.csdn.net/adacore/article/details/83501127
今日推荐