]> git.cworth.org Git - apitrace/blobdiff - ddraw.py
Get DDraw/D3D7 building.
[apitrace] / ddraw.py
old mode 100755 (executable)
new mode 100644 (file)
index a3e6760..fd8c5f5
--- a/ddraw.py
+++ b/ddraw.py
@@ -1,25 +1,32 @@
-#############################################################################
+##########################################################################
 #
-# Copyright 2008 Tungsten Graphics, Inc.
+# Copyright 2008-2009 VMware, Inc.
+# All Rights Reserved.
 #
-# This program is free software: you can redistribute it and/or modify it
-# under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
 #
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
 #
-# You should have received a copy of the GNU Lesser General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
 #
-#############################################################################
+##########################################################################/
 
 """ddraw.h"""
 
-from windows import *
+from winapi import *
+from trace import DllTracer
 
 IDirectDraw = Interface("IDirectDraw", IUnknown)
 IDirectDraw2 = Interface("IDirectDraw2", IUnknown)
@@ -479,8 +486,8 @@ DDGAMMARAMP = Struct("DDGAMMARAMP", [
 LPDDGAMMARAMP = Pointer(DDGAMMARAMP)
 
 DDDEVICEIDENTIFIER = Struct("DDDEVICEIDENTIFIER", [
-    (String, "szDriver"),
-    (String, "szDescription"),
+    (CString, "szDriver"),
+    (CString, "szDescription"),
     (LARGE_INTEGER, "liDriverVersion"),
     (DWORD, "dwVendorId"),
     (DWORD, "dwDeviceId"),
@@ -491,8 +498,8 @@ DDDEVICEIDENTIFIER = Struct("DDDEVICEIDENTIFIER", [
 LPDDDEVICEIDENTIFIER = Pointer(DDDEVICEIDENTIFIER)
 
 DDDEVICEIDENTIFIER2 = Struct("DDDEVICEIDENTIFIER2", [
-    (String, "szDriver[MAX_DDDEVICEID_STRING]"),
-    (String, "szDescription[MAX_DDDEVICEID_STRING]"),
+    (CString, "szDriver[MAX_DDDEVICEID_STRING]"),
+    (CString, "szDescription[MAX_DDDEVICEID_STRING]"),
     (LARGE_INTEGER, "liDriverVersion"),
     (DWORD, "dwVendorId"),
     (DWORD, "dwDeviceId"),
@@ -503,8 +510,8 @@ DDDEVICEIDENTIFIER2 = Struct("DDDEVICEIDENTIFIER2", [
 ])
 LPDDDEVICEIDENTIFIER2 = Pointer(DDDEVICEIDENTIFIER2)
 
-LPCLIPPERCALLBACK = Pointer(Function("DWORD", "CLIPPERCALLBACK", [(LPDIRECTDRAWCLIPPER, "lpDDClipper"), (HWND, "hWnd"), (DWORD, "code"), (LPVOID, "lpContext")]))
-LPSURFACESTREAMINGCALLBACK = Pointer(Function("DWORD", "SURFACESTREAMINGCALLBACK", [DWORD]))
+LPCLIPPERCALLBACK = FunctionPointer("DWORD", "LPCLIPPERCALLBACK", [(LPDIRECTDRAWCLIPPER, "lpDDClipper"), (HWND, "hWnd"), (DWORD, "code"), (LPVOID, "lpContext")])
+LPSURFACESTREAMINGCALLBACK = FunctionPointer("DWORD", "LPSURFACESTREAMINGCALLBACK", [DWORD])
 
 DDSURFACEDESC = Struct("DDSURFACEDESC", [
     (DWORD, "dwSize"),
@@ -1234,115 +1241,115 @@ HRESULT = Enum("HRESULT", [
     "DDERR_NOTINITIALIZED",
 ])
 
-LPDDENUMMODESCALLBACK = Pointer(Function(HRESULT, "LPDDENUMMODESCALLBACK", [LPDDSURFACEDESC, LPVOID]))
-LPDDENUMMODESCALLBACK2 = Pointer(Function(HRESULT, "LPDDENUMMODESCALLBACK2", [LPDDSURFACEDESC2, LPVOID]))
-LPDDENUMSURFACESCALLBACK = Pointer(Function(HRESULT, "LPDDENUMSURFACESCALLBACK", [LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, LPVOID]))
-LPDDENUMSURFACESCALLBACK2 = Pointer(Function(HRESULT, "LPDDENUMSURFACESCALLBACK2", [LPDIRECTDRAWSURFACE4, LPDDSURFACEDESC2, LPVOID]))
-LPDDENUMSURFACESCALLBACK7 = Pointer(Function(HRESULT, "LPDDENUMSURFACESCALLBACK7", [LPDIRECTDRAWSURFACE7, LPDDSURFACEDESC2, LPVOID]))
+LPDDENUMMODESCALLBACK     = FunctionPointer(HRESULT, "LPDDENUMMODESCALLBACK", [LPDDSURFACEDESC, LPVOID])
+LPDDENUMMODESCALLBACK2    = FunctionPointer(HRESULT, "LPDDENUMMODESCALLBACK2", [LPDDSURFACEDESC2, LPVOID])
+LPDDENUMSURFACESCALLBACK  = FunctionPointer(HRESULT, "LPDDENUMSURFACESCALLBACK", [LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, LPVOID])
+LPDDENUMSURFACESCALLBACK2 = FunctionPointer(HRESULT, "LPDDENUMSURFACESCALLBACK2", [LPDIRECTDRAWSURFACE4, LPDDSURFACEDESC2, LPVOID])
+LPDDENUMSURFACESCALLBACK7 = FunctionPointer(HRESULT, "LPDDENUMSURFACESCALLBACK7", [LPDIRECTDRAWSURFACE7, LPDDSURFACEDESC2, LPVOID])
 
 IDirectDraw.methods += [
     Method(HRESULT, "Compact", []),
-    Method(HRESULT, "CreateClipper", [DWORD, Pointer(LPDIRECTDRAWCLIPPER) , Pointer(IUnknown) ]),
-    Method(HRESULT, "CreatePalette", [DWORD, LPPALETTEENTRY, Pointer(LPDIRECTDRAWPALETTE) , Pointer(IUnknown) ]),
-    Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC, Pointer(LPDIRECTDRAWSURFACE) , Pointer(IUnknown) ]),
-    Method(HRESULT, "DuplicateSurface", [ LPDIRECTDRAWSURFACE, Pointer(LPDIRECTDRAWSURFACE) ]),
-    Method(HRESULT, "EnumDisplayModes", [ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ]),
-    Method(HRESULT, "EnumSurfaces", [DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ]),
+    Method(HRESULT, "CreateClipper", [DWORD, Pointer(LPDIRECTDRAWCLIPPER), Pointer(IUnknown)]),
+    Method(HRESULT, "CreatePalette", [DWORD, LPPALETTEENTRY, Pointer(LPDIRECTDRAWPALETTE) , Pointer(IUnknown)]),
+    Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC, Pointer(LPDIRECTDRAWSURFACE) , Pointer(IUnknown)]),
+    Method(HRESULT, "DuplicateSurface", [LPDIRECTDRAWSURFACE, Pointer(LPDIRECTDRAWSURFACE)]),
+    Method(HRESULT, "EnumDisplayModes", [DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK]),
+    Method(HRESULT, "EnumSurfaces", [DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK]),
     Method(HRESULT, "FlipToGDISurface", []),
-    Method(HRESULT, "GetCaps", [ LPDDCAPS, LPDDCAPS]),
-    Method(HRESULT, "GetDisplayMode", [ LPDDSURFACEDESC]),
-    Method(HRESULT, "GetFourCCCodes", [LPDWORD, LPDWORD ]),
-    Method(HRESULT, "GetGDISurface", [Pointer(LPDIRECTDRAWSURFACE) ]),
+    Method(HRESULT, "GetCaps", [LPDDCAPS, LPDDCAPS]),
+    Method(HRESULT, "GetDisplayMode", [LPDDSURFACEDESC]),
+    Method(HRESULT, "GetFourCCCodes", [LPDWORD, LPDWORD]),
+    Method(HRESULT, "GetGDISurface", [Pointer(LPDIRECTDRAWSURFACE)]),
     Method(HRESULT, "GetMonitorFrequency", [LPDWORD]),
     Method(HRESULT, "GetScanLine", [LPDWORD]),
-    Method(HRESULT, "GetVerticalBlankStatus", [LPBOOL ]),
-    Method(HRESULT, "Initialize", [Pointer(GUID) ]),
+    Method(HRESULT, "GetVerticalBlankStatus", [LPBOOL]),
+    Method(HRESULT, "Initialize", [Pointer(GUID)]),
     Method(HRESULT, "RestoreDisplayMode", []),
     Method(HRESULT, "SetCooperativeLevel", [HWND, DWORD]),
     Method(HRESULT, "SetDisplayMode", [DWORD, DWORD,DWORD]),
-    Method(HRESULT, "WaitForVerticalBlank", [DWORD, HANDLE ]),
+    Method(HRESULT, "WaitForVerticalBlank", [DWORD, HANDLE]),
 ]
 
 IDirectDraw2.methods += [
     Method(HRESULT, "Compact", []),
-    Method(HRESULT, "CreateClipper", [DWORD, Pointer(LPDIRECTDRAWCLIPPER) , Pointer(IUnknown) ]),
-    Method(HRESULT, "CreatePalette", [DWORD, LPPALETTEENTRY, Pointer(LPDIRECTDRAWPALETTE) , Pointer(IUnknown) ]),
-    Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC, Pointer(LPDIRECTDRAWSURFACE) , Pointer(IUnknown) ]),
-    Method(HRESULT, "DuplicateSurface", [ LPDIRECTDRAWSURFACE, Pointer(LPDIRECTDRAWSURFACE) ]),
-    Method(HRESULT, "EnumDisplayModes", [ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ]),
-    Method(HRESULT, "EnumSurfaces", [DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ]),
+    Method(HRESULT, "CreateClipper", [DWORD, Pointer(LPDIRECTDRAWCLIPPER) , Pointer(IUnknown)]),
+    Method(HRESULT, "CreatePalette", [DWORD, LPPALETTEENTRY, Pointer(LPDIRECTDRAWPALETTE) , Pointer(IUnknown)]),
+    Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC, Pointer(LPDIRECTDRAWSURFACE) , Pointer(IUnknown)]),
+    Method(HRESULT, "DuplicateSurface", [LPDIRECTDRAWSURFACE, Pointer(LPDIRECTDRAWSURFACE)]),
+    Method(HRESULT, "EnumDisplayModes", [DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK]),
+    Method(HRESULT, "EnumSurfaces", [DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK]),
     Method(HRESULT, "FlipToGDISurface", []),
-    Method(HRESULT, "GetCaps", [ LPDDCAPS, LPDDCAPS]),
-    Method(HRESULT, "GetDisplayMode", [ LPDDSURFACEDESC]),
-    Method(HRESULT, "GetFourCCCodes", [LPDWORD, LPDWORD ]),
-    Method(HRESULT, "GetGDISurface", [Pointer(LPDIRECTDRAWSURFACE) ]),
+    Method(HRESULT, "GetCaps", [LPDDCAPS, LPDDCAPS]),
+    Method(HRESULT, "GetDisplayMode", [LPDDSURFACEDESC]),
+    Method(HRESULT, "GetFourCCCodes", [LPDWORD, LPDWORD]),
+    Method(HRESULT, "GetGDISurface", [Pointer(LPDIRECTDRAWSURFACE)]),
     Method(HRESULT, "GetMonitorFrequency", [LPDWORD]),
     Method(HRESULT, "GetScanLine", [LPDWORD]),
-    Method(HRESULT, "GetVerticalBlankStatus", [LPBOOL ]),
-    Method(HRESULT, "Initialize", [Pointer(GUID) ]),
+    Method(HRESULT, "GetVerticalBlankStatus", [LPBOOL]),
+    Method(HRESULT, "Initialize", [Pointer(GUID)]),
     Method(HRESULT, "RestoreDisplayMode", []),
     Method(HRESULT, "SetCooperativeLevel", [HWND, DWORD]),
     Method(HRESULT, "SetDisplayMode", [DWORD, DWORD,DWORD, DWORD, DWORD]),
-    Method(HRESULT, "WaitForVerticalBlank", [DWORD, HANDLE ]),
+    Method(HRESULT, "WaitForVerticalBlank", [DWORD, HANDLE]),
     Method(HRESULT, "GetAvailableVidMem", [LPDDSCAPS, LPDWORD, LPDWORD]),
 ]
 
 IDirectDraw4.methods += [
     Method(HRESULT, "Compact", []),
-    Method(HRESULT, "CreateClipper", [DWORD, Pointer(LPDIRECTDRAWCLIPPER) , Pointer(IUnknown) ]),
-    Method(HRESULT, "CreatePalette", [DWORD, LPPALETTEENTRY, Pointer(LPDIRECTDRAWPALETTE) , Pointer(IUnknown) ]),
-    Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC2, Pointer(LPDIRECTDRAWSURFACE4) , Pointer(IUnknown) ]),
-    Method(HRESULT, "DuplicateSurface", [ LPDIRECTDRAWSURFACE4, Pointer(LPDIRECTDRAWSURFACE4) ]),
-    Method(HRESULT, "EnumDisplayModes", [ DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2 ]),
-    Method(HRESULT, "EnumSurfaces", [DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK2 ]),
+    Method(HRESULT, "CreateClipper", [DWORD, Pointer(LPDIRECTDRAWCLIPPER) , Pointer(IUnknown)]),
+    Method(HRESULT, "CreatePalette", [DWORD, LPPALETTEENTRY, Pointer(LPDIRECTDRAWPALETTE) , Pointer(IUnknown)]),
+    Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC2, Pointer(LPDIRECTDRAWSURFACE4) , Pointer(IUnknown)]),
+    Method(HRESULT, "DuplicateSurface", [LPDIRECTDRAWSURFACE4, Pointer(LPDIRECTDRAWSURFACE4)]),
+    Method(HRESULT, "EnumDisplayModes", [DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2]),
+    Method(HRESULT, "EnumSurfaces", [DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK2]),
     Method(HRESULT, "FlipToGDISurface", []),
-    Method(HRESULT, "GetCaps", [ LPDDCAPS, LPDDCAPS]),
-    Method(HRESULT, "GetDisplayMode", [ LPDDSURFACEDESC2]),
-    Method(HRESULT, "GetFourCCCodes", [LPDWORD, LPDWORD ]),
-    Method(HRESULT, "GetGDISurface", [Pointer(LPDIRECTDRAWSURFACE4) ]),
+    Method(HRESULT, "GetCaps", [LPDDCAPS, LPDDCAPS]),
+    Method(HRESULT, "GetDisplayMode", [LPDDSURFACEDESC2]),
+    Method(HRESULT, "GetFourCCCodes", [LPDWORD, LPDWORD]),
+    Method(HRESULT, "GetGDISurface", [Pointer(LPDIRECTDRAWSURFACE4)]),
     Method(HRESULT, "GetMonitorFrequency", [LPDWORD]),
     Method(HRESULT, "GetScanLine", [LPDWORD]),
-    Method(HRESULT, "GetVerticalBlankStatus", [LPBOOL ]),
-    Method(HRESULT, "Initialize", [Pointer(GUID) ]),
+    Method(HRESULT, "GetVerticalBlankStatus", [LPBOOL]),
+    Method(HRESULT, "Initialize", [Pointer(GUID)]),
     Method(HRESULT, "RestoreDisplayMode", []),
     Method(HRESULT, "SetCooperativeLevel", [HWND, DWORD]),
     Method(HRESULT, "SetDisplayMode", [DWORD, DWORD,DWORD, DWORD, DWORD]),
-    Method(HRESULT, "WaitForVerticalBlank", [DWORD, HANDLE ]),
+    Method(HRESULT, "WaitForVerticalBlank", [DWORD, HANDLE]),
     Method(HRESULT, "GetAvailableVidMem", [LPDDSCAPS2, LPDWORD, LPDWORD]),
     Method(HRESULT, "GetSurfaceFromDC", [HDC, Pointer(LPDIRECTDRAWSURFACE4)]),
     Method(HRESULT, "RestoreAllSurfaces", []),
     Method(HRESULT, "TestCooperativeLevel", []),
-    Method(HRESULT, "GetDeviceIdentifier", [LPDDDEVICEIDENTIFIER, DWORD ]),
+    Method(HRESULT, "GetDeviceIdentifier", [LPDDDEVICEIDENTIFIER, DWORD]),
 ]
 
 IDirectDraw7.methods += [
     Method(HRESULT, "Compact", []),
-    Method(HRESULT, "CreateClipper", [DWORD, Pointer(LPDIRECTDRAWCLIPPER) , Pointer(IUnknown) ]),
-    Method(HRESULT, "CreatePalette", [DWORD, LPPALETTEENTRY, Pointer(LPDIRECTDRAWPALETTE) , Pointer(IUnknown) ]),
-    Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC2, Pointer(LPDIRECTDRAWSURFACE7) , Pointer(IUnknown) ]),
-    Method(HRESULT, "DuplicateSurface", [ LPDIRECTDRAWSURFACE7, Pointer(LPDIRECTDRAWSURFACE7) ]),
-    Method(HRESULT, "EnumDisplayModes", [ DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2 ]),
-    Method(HRESULT, "EnumSurfaces", [DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK7 ]),
+    Method(HRESULT, "CreateClipper", [DWORD, Pointer(LPDIRECTDRAWCLIPPER) , Pointer(IUnknown)]),
+    Method(HRESULT, "CreatePalette", [DWORD, LPPALETTEENTRY, Pointer(LPDIRECTDRAWPALETTE) , Pointer(IUnknown)]),
+    Method(HRESULT, "CreateSurface", [LPDDSURFACEDESC2, Pointer(LPDIRECTDRAWSURFACE7) , Pointer(IUnknown)]),
+    Method(HRESULT, "DuplicateSurface", [LPDIRECTDRAWSURFACE7, Pointer(LPDIRECTDRAWSURFACE7)]),
+    Method(HRESULT, "EnumDisplayModes", [DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2]),
+    Method(HRESULT, "EnumSurfaces", [DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK7]),
     Method(HRESULT, "FlipToGDISurface", []),
-    Method(HRESULT, "GetCaps", [ LPDDCAPS, LPDDCAPS]),
-    Method(HRESULT, "GetDisplayMode", [ LPDDSURFACEDESC2]),
-    Method(HRESULT, "GetFourCCCodes", [LPDWORD, LPDWORD ]),
-    Method(HRESULT, "GetGDISurface", [Pointer(LPDIRECTDRAWSURFACE7) ]),
+    Method(HRESULT, "GetCaps", [LPDDCAPS, LPDDCAPS]),
+    Method(HRESULT, "GetDisplayMode", [LPDDSURFACEDESC2]),
+    Method(HRESULT, "GetFourCCCodes", [LPDWORD, LPDWORD]),
+    Method(HRESULT, "GetGDISurface", [Pointer(LPDIRECTDRAWSURFACE7)]),
     Method(HRESULT, "GetMonitorFrequency", [LPDWORD]),
     Method(HRESULT, "GetScanLine", [LPDWORD]),
-    Method(HRESULT, "GetVerticalBlankStatus", [LPBOOL ]),
-    Method(HRESULT, "Initialize", [Pointer(GUID) ]),
+    Method(HRESULT, "GetVerticalBlankStatus", [LPBOOL]),
+    Method(HRESULT, "Initialize", [Pointer(GUID)]),
     Method(HRESULT, "RestoreDisplayMode", []),
     Method(HRESULT, "SetCooperativeLevel", [HWND, DWORD]),
     Method(HRESULT, "SetDisplayMode", [DWORD, DWORD,DWORD, DWORD, DWORD]),
-    Method(HRESULT, "WaitForVerticalBlank", [DWORD, HANDLE ]),
+    Method(HRESULT, "WaitForVerticalBlank", [DWORD, HANDLE]),
     Method(HRESULT, "GetAvailableVidMem", [LPDDSCAPS2, LPDWORD, LPDWORD]),
     Method(HRESULT, "GetSurfaceFromDC", [HDC, Pointer(LPDIRECTDRAWSURFACE7)]),
     Method(HRESULT, "RestoreAllSurfaces", []),
     Method(HRESULT, "TestCooperativeLevel", []),
-    Method(HRESULT, "GetDeviceIdentifier", [LPDDDEVICEIDENTIFIER2, DWORD ]),
-    Method(HRESULT, "StartModeTest", [LPSIZE, DWORD, DWORD ]),
-    Method(HRESULT, "EvaluateMode", [DWORD, Pointer(DWORD) ]),
+    Method(HRESULT, "GetDeviceIdentifier", [LPDDDEVICEIDENTIFIER2, DWORD]),
+    Method(HRESULT, "StartModeTest", [LPSIZE, DWORD, DWORD]),
+    Method(HRESULT, "EvaluateMode", [DWORD, Pointer(DWORD)]),
 ]
 
 IDirectDrawPalette.methods += [
@@ -1354,11 +1361,11 @@ IDirectDrawPalette.methods += [
 
 IDirectDrawClipper.methods += [
     Method(HRESULT, "GetClipList", [LPRECT, LPRGNDATA, LPDWORD]),
-    Method(HRESULT, "GetHWnd", [Pointer(HWND) ]),
+    Method(HRESULT, "GetHWnd", [Pointer(HWND)]),
     Method(HRESULT, "Initialize", [LPDIRECTDRAW, DWORD]),
-    Method(HRESULT, "IsClipListChanged", [Pointer(BOOL) ]),
+    Method(HRESULT, "IsClipListChanged", [Pointer(BOOL)]),
     Method(HRESULT, "SetClipList", [LPRGNDATA,DWORD]),
-    Method(HRESULT, "SetHWnd", [DWORD, HWND ]),
+    Method(HRESULT, "SetHWnd", [DWORD, HWND]),
 ]
 
 
@@ -1366,21 +1373,21 @@ IDirectDrawSurface.methods += [
     Method(HRESULT, "AddAttachedSurface", [LPDIRECTDRAWSURFACE]),
     Method(HRESULT, "AddOverlayDirtyRect", [LPRECT]),
     Method(HRESULT, "Blt", [LPRECT,LPDIRECTDRAWSURFACE, LPRECT,DWORD, LPDDBLTFX]),
-    Method(HRESULT, "BltBatch", [LPDDBLTBATCH, DWORD, DWORD ]),
+    Method(HRESULT, "BltBatch", [LPDDBLTBATCH, DWORD, DWORD]),
     Method(HRESULT, "BltFast", [DWORD,DWORD,LPDIRECTDRAWSURFACE, LPRECT,DWORD]),
     Method(HRESULT, "DeleteAttachedSurface", [DWORD,LPDIRECTDRAWSURFACE]),
     Method(HRESULT, "EnumAttachedSurfaces", [LPVOID,LPDDENUMSURFACESCALLBACK]),
     Method(HRESULT, "EnumOverlayZOrders", [DWORD,LPVOID,LPDDENUMSURFACESCALLBACK]),
     Method(HRESULT, "Flip", [LPDIRECTDRAWSURFACE, DWORD]),
-    Method(HRESULT, "GetAttachedSurface", [LPDDSCAPS, Pointer(LPDIRECTDRAWSURFACE) ]),
+    Method(HRESULT, "GetAttachedSurface", [LPDDSCAPS, Pointer(LPDIRECTDRAWSURFACE)]),
     Method(HRESULT, "GetBltStatus", [DWORD]),
     Method(HRESULT, "GetCaps", [LPDDSCAPS]),
-    Method(HRESULT, "GetClipper", [Pointer(LPDIRECTDRAWCLIPPER) ]),
+    Method(HRESULT, "GetClipper", [Pointer(LPDIRECTDRAWCLIPPER)]),
     Method(HRESULT, "GetColorKey", [DWORD, LPDDCOLORKEY]),
-    Method(HRESULT, "GetDC", [Pointer(HDC) ]),
+    Method(HRESULT, "GetDC", [Pointer(HDC)]),
     Method(HRESULT, "GetFlipStatus", [DWORD]),
-    Method(HRESULT, "GetOverlayPosition", [LPLONG, LPLONG ]),
-    Method(HRESULT, "GetPalette", [Pointer(LPDIRECTDRAWPALETTE) ]),
+    Method(HRESULT, "GetOverlayPosition", [LPLONG, LPLONG]),
+    Method(HRESULT, "GetPalette", [Pointer(LPDIRECTDRAWPALETTE)]),
     Method(HRESULT, "GetPixelFormat", [LPDDPIXELFORMAT]),
     Method(HRESULT, "GetSurfaceDesc", [LPDDSURFACEDESC]),
     Method(HRESULT, "Initialize", [LPDIRECTDRAW, LPDDSURFACEDESC]),
@@ -1390,7 +1397,7 @@ IDirectDrawSurface.methods += [
     Method(HRESULT, "Restore", []),
     Method(HRESULT, "SetClipper", [LPDIRECTDRAWCLIPPER]),
     Method(HRESULT, "SetColorKey", [DWORD, LPDDCOLORKEY]),
-    Method(HRESULT, "SetOverlayPosition", [LONG, LONG ]),
+    Method(HRESULT, "SetOverlayPosition", [LONG, LONG]),
     Method(HRESULT, "SetPalette", [LPDIRECTDRAWPALETTE]),
     Method(HRESULT, "Unlock", [LPVOID]),
     Method(HRESULT, "UpdateOverlay", [LPRECT, LPDIRECTDRAWSURFACE,LPRECT,DWORD, LPDDOVERLAYFX]),
@@ -1402,21 +1409,21 @@ IDirectDrawSurface2.methods += [
     Method(HRESULT, "AddAttachedSurface", [LPDIRECTDRAWSURFACE2]),
     Method(HRESULT, "AddOverlayDirtyRect", [LPRECT]),
     Method(HRESULT, "Blt", [LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX]),
-    Method(HRESULT, "BltBatch", [LPDDBLTBATCH, DWORD, DWORD ]),
+    Method(HRESULT, "BltBatch", [LPDDBLTBATCH, DWORD, DWORD]),
     Method(HRESULT, "BltFast", [DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD]),
     Method(HRESULT, "DeleteAttachedSurface", [DWORD,LPDIRECTDRAWSURFACE2]),
     Method(HRESULT, "EnumAttachedSurfaces", [LPVOID,LPDDENUMSURFACESCALLBACK]),
     Method(HRESULT, "EnumOverlayZOrders", [DWORD,LPVOID,LPDDENUMSURFACESCALLBACK]),
     Method(HRESULT, "Flip", [LPDIRECTDRAWSURFACE2, DWORD]),
-    Method(HRESULT, "GetAttachedSurface", [LPDDSCAPS, Pointer(LPDIRECTDRAWSURFACE2) ]),
+    Method(HRESULT, "GetAttachedSurface", [LPDDSCAPS, Pointer(LPDIRECTDRAWSURFACE2)]),
     Method(HRESULT, "GetBltStatus", [DWORD]),
     Method(HRESULT, "GetCaps", [LPDDSCAPS]),
-    Method(HRESULT, "GetClipper", [Pointer(LPDIRECTDRAWCLIPPER) ]),
+    Method(HRESULT, "GetClipper", [Pointer(LPDIRECTDRAWCLIPPER)]),
     Method(HRESULT, "GetColorKey", [DWORD, LPDDCOLORKEY]),
-    Method(HRESULT, "GetDC", [Pointer(HDC) ]),
+    Method(HRESULT, "GetDC", [Pointer(HDC)]),
     Method(HRESULT, "GetFlipStatus", [DWORD]),
-    Method(HRESULT, "GetOverlayPosition", [LPLONG, LPLONG ]),
-    Method(HRESULT, "GetPalette", [Pointer(LPDIRECTDRAWPALETTE) ]),
+    Method(HRESULT, "GetOverlayPosition", [LPLONG, LPLONG]),
+    Method(HRESULT, "GetPalette", [Pointer(LPDIRECTDRAWPALETTE)]),
     Method(HRESULT, "GetPixelFormat", [LPDDPIXELFORMAT]),
     Method(HRESULT, "GetSurfaceDesc", [LPDDSURFACEDESC]),
     Method(HRESULT, "Initialize", [LPDIRECTDRAW, LPDDSURFACEDESC]),
@@ -1426,13 +1433,13 @@ IDirectDrawSurface2.methods += [
     Method(HRESULT, "Restore", []),
     Method(HRESULT, "SetClipper", [LPDIRECTDRAWCLIPPER]),
     Method(HRESULT, "SetColorKey", [DWORD, LPDDCOLORKEY]),
-    Method(HRESULT, "SetOverlayPosition", [LONG, LONG ]),
+    Method(HRESULT, "SetOverlayPosition", [LONG, LONG]),
     Method(HRESULT, "SetPalette", [LPDIRECTDRAWPALETTE]),
     Method(HRESULT, "Unlock", [LPVOID]),
     Method(HRESULT, "UpdateOverlay", [LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX]),
     Method(HRESULT, "UpdateOverlayDisplay", [DWORD]),
     Method(HRESULT, "UpdateOverlayZOrder", [DWORD, LPDIRECTDRAWSURFACE2]),
-    Method(HRESULT, "GetDDInterface", [Pointer(LPVOID) ]),
+    Method(HRESULT, "GetDDInterface", [Pointer(LPVOID)]),
     Method(HRESULT, "PageLock", [DWORD]),
     Method(HRESULT, "PageUnlock", [DWORD]),
 ]
@@ -1441,21 +1448,21 @@ IDirectDrawSurface3.methods += [
     Method(HRESULT, "AddAttachedSurface", [LPDIRECTDRAWSURFACE3]),
     Method(HRESULT, "AddOverlayDirtyRect", [LPRECT]),
     Method(HRESULT, "Blt", [LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX]),
-    Method(HRESULT, "BltBatch", [LPDDBLTBATCH, DWORD, DWORD ]),
+    Method(HRESULT, "BltBatch", [LPDDBLTBATCH, DWORD, DWORD]),
     Method(HRESULT, "BltFast", [DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD]),
     Method(HRESULT, "DeleteAttachedSurface", [DWORD,LPDIRECTDRAWSURFACE3]),
     Method(HRESULT, "EnumAttachedSurfaces", [LPVOID,LPDDENUMSURFACESCALLBACK]),
     Method(HRESULT, "EnumOverlayZOrders", [DWORD,LPVOID,LPDDENUMSURFACESCALLBACK]),
     Method(HRESULT, "Flip", [LPDIRECTDRAWSURFACE3, DWORD]),
-    Method(HRESULT, "GetAttachedSurface", [LPDDSCAPS, Pointer(LPDIRECTDRAWSURFACE3) ]),
+    Method(HRESULT, "GetAttachedSurface", [LPDDSCAPS, Pointer(LPDIRECTDRAWSURFACE3)]),
     Method(HRESULT, "GetBltStatus", [DWORD]),
     Method(HRESULT, "GetCaps", [LPDDSCAPS]),
-    Method(HRESULT, "GetClipper", [Pointer(LPDIRECTDRAWCLIPPER) ]),
+    Method(HRESULT, "GetClipper", [Pointer(LPDIRECTDRAWCLIPPER)]),
     Method(HRESULT, "GetColorKey", [DWORD, LPDDCOLORKEY]),
-    Method(HRESULT, "GetDC", [Pointer(HDC) ]),
+    Method(HRESULT, "GetDC", [Pointer(HDC)]),
     Method(HRESULT, "GetFlipStatus", [DWORD]),
-    Method(HRESULT, "GetOverlayPosition", [LPLONG, LPLONG ]),
-    Method(HRESULT, "GetPalette", [Pointer(LPDIRECTDRAWPALETTE) ]),
+    Method(HRESULT, "GetOverlayPosition", [LPLONG, LPLONG]),
+    Method(HRESULT, "GetPalette", [Pointer(LPDIRECTDRAWPALETTE)]),
     Method(HRESULT, "GetPixelFormat", [LPDDPIXELFORMAT]),
     Method(HRESULT, "GetSurfaceDesc", [LPDDSURFACEDESC]),
     Method(HRESULT, "Initialize", [LPDIRECTDRAW, LPDDSURFACEDESC]),
@@ -1465,13 +1472,13 @@ IDirectDrawSurface3.methods += [
     Method(HRESULT, "Restore", []),
     Method(HRESULT, "SetClipper", [LPDIRECTDRAWCLIPPER]),
     Method(HRESULT, "SetColorKey", [DWORD, LPDDCOLORKEY]),
-    Method(HRESULT, "SetOverlayPosition", [LONG, LONG ]),
+    Method(HRESULT, "SetOverlayPosition", [LONG, LONG]),
     Method(HRESULT, "SetPalette", [LPDIRECTDRAWPALETTE]),
     Method(HRESULT, "Unlock", [LPVOID]),
     Method(HRESULT, "UpdateOverlay", [LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX]),
     Method(HRESULT, "UpdateOverlayDisplay", [DWORD]),
     Method(HRESULT, "UpdateOverlayZOrder", [DWORD, LPDIRECTDRAWSURFACE3]),
-    Method(HRESULT, "GetDDInterface", [Pointer(LPVOID) ]),
+    Method(HRESULT, "GetDDInterface", [Pointer(LPVOID)]),
     Method(HRESULT, "PageLock", [DWORD]),
     Method(HRESULT, "PageUnlock", [DWORD]),
     Method(HRESULT, "SetSurfaceDesc", [LPDDSURFACEDESC, DWORD]),
@@ -1481,21 +1488,21 @@ IDirectDrawSurface4.methods += [
     Method(HRESULT, "AddAttachedSurface", [LPDIRECTDRAWSURFACE4]),
     Method(HRESULT, "AddOverlayDirtyRect", [LPRECT]),
     Method(HRESULT, "Blt", [LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX]),
-    Method(HRESULT, "BltBatch", [LPDDBLTBATCH, DWORD, DWORD ]),
+    Method(HRESULT, "BltBatch", [LPDDBLTBATCH, DWORD, DWORD]),
     Method(HRESULT, "BltFast", [DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD]),
     Method(HRESULT, "DeleteAttachedSurface", [DWORD,LPDIRECTDRAWSURFACE4]),
     Method(HRESULT, "EnumAttachedSurfaces", [LPVOID,LPDDENUMSURFACESCALLBACK2]),
     Method(HRESULT, "EnumOverlayZOrders", [DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2]),
     Method(HRESULT, "Flip", [LPDIRECTDRAWSURFACE4, DWORD]),
-    Method(HRESULT, "GetAttachedSurface", [LPDDSCAPS2, Pointer(LPDIRECTDRAWSURFACE4) ]),
+    Method(HRESULT, "GetAttachedSurface", [LPDDSCAPS2, Pointer(LPDIRECTDRAWSURFACE4)]),
     Method(HRESULT, "GetBltStatus", [DWORD]),
     Method(HRESULT, "GetCaps", [LPDDSCAPS2]),
-    Method(HRESULT, "GetClipper", [Pointer(LPDIRECTDRAWCLIPPER) ]),
+    Method(HRESULT, "GetClipper", [Pointer(LPDIRECTDRAWCLIPPER)]),
     Method(HRESULT, "GetColorKey", [DWORD, LPDDCOLORKEY]),
-    Method(HRESULT, "GetDC", [Pointer(HDC) ]),
+    Method(HRESULT, "GetDC", [Pointer(HDC)]),
     Method(HRESULT, "GetFlipStatus", [DWORD]),
-    Method(HRESULT, "GetOverlayPosition", [LPLONG, LPLONG ]),
-    Method(HRESULT, "GetPalette", [Pointer(LPDIRECTDRAWPALETTE) ]),
+    Method(HRESULT, "GetOverlayPosition", [LPLONG, LPLONG]),
+    Method(HRESULT, "GetPalette", [Pointer(LPDIRECTDRAWPALETTE)]),
     Method(HRESULT, "GetPixelFormat", [LPDDPIXELFORMAT]),
     Method(HRESULT, "GetSurfaceDesc", [LPDDSURFACEDESC2]),
     Method(HRESULT, "Initialize", [LPDIRECTDRAW, LPDDSURFACEDESC2]),
@@ -1505,13 +1512,13 @@ IDirectDrawSurface4.methods += [
     Method(HRESULT, "Restore", []),
     Method(HRESULT, "SetClipper", [LPDIRECTDRAWCLIPPER]),
     Method(HRESULT, "SetColorKey", [DWORD, LPDDCOLORKEY]),
-    Method(HRESULT, "SetOverlayPosition", [LONG, LONG ]),
+    Method(HRESULT, "SetOverlayPosition", [LONG, LONG]),
     Method(HRESULT, "SetPalette", [LPDIRECTDRAWPALETTE]),
     Method(HRESULT, "Unlock", [LPRECT]),
     Method(HRESULT, "UpdateOverlay", [LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX]),
     Method(HRESULT, "UpdateOverlayDisplay", [DWORD]),
     Method(HRESULT, "UpdateOverlayZOrder", [DWORD, LPDIRECTDRAWSURFACE4]),
-    Method(HRESULT, "GetDDInterface", [Pointer(LPVOID) ]),
+    Method(HRESULT, "GetDDInterface", [Pointer(LPVOID)]),
     Method(HRESULT, "PageLock", [DWORD]),
     Method(HRESULT, "PageUnlock", [DWORD]),
     Method(HRESULT, "SetSurfaceDesc", [LPDDSURFACEDESC2, DWORD]),
@@ -1526,21 +1533,21 @@ IDirectDrawSurface7.methods += [
     Method(HRESULT, "AddAttachedSurface", [LPDIRECTDRAWSURFACE7]),
     Method(HRESULT, "AddOverlayDirtyRect", [LPRECT]),
     Method(HRESULT, "Blt", [LPRECT,LPDIRECTDRAWSURFACE7, LPRECT,DWORD, LPDDBLTFX]),
-    Method(HRESULT, "BltBatch", [LPDDBLTBATCH, DWORD, DWORD ]),
+    Method(HRESULT, "BltBatch", [LPDDBLTBATCH, DWORD, DWORD]),
     Method(HRESULT, "BltFast", [DWORD,DWORD,LPDIRECTDRAWSURFACE7, LPRECT,DWORD]),
     Method(HRESULT, "DeleteAttachedSurface", [DWORD,LPDIRECTDRAWSURFACE7]),
     Method(HRESULT, "EnumAttachedSurfaces", [LPVOID,LPDDENUMSURFACESCALLBACK7]),
     Method(HRESULT, "EnumOverlayZOrders", [DWORD,LPVOID,LPDDENUMSURFACESCALLBACK7]),
     Method(HRESULT, "Flip", [LPDIRECTDRAWSURFACE7, DWORD]),
-    Method(HRESULT, "GetAttachedSurface", [LPDDSCAPS2, Pointer(LPDIRECTDRAWSURFACE7) ]),
+    Method(HRESULT, "GetAttachedSurface", [LPDDSCAPS2, Pointer(LPDIRECTDRAWSURFACE7)]),
     Method(HRESULT, "GetBltStatus", [DWORD]),
     Method(HRESULT, "GetCaps", [LPDDSCAPS2]),
-    Method(HRESULT, "GetClipper", [Pointer(LPDIRECTDRAWCLIPPER) ]),
+    Method(HRESULT, "GetClipper", [Pointer(LPDIRECTDRAWCLIPPER)]),
     Method(HRESULT, "GetColorKey", [DWORD, LPDDCOLORKEY]),
-    Method(HRESULT, "GetDC", [Pointer(HDC) ]),
+    Method(HRESULT, "GetDC", [Pointer(HDC)]),
     Method(HRESULT, "GetFlipStatus", [DWORD]),
-    Method(HRESULT, "GetOverlayPosition", [LPLONG, LPLONG ]),
-    Method(HRESULT, "GetPalette", [Pointer(LPDIRECTDRAWPALETTE) ]),
+    Method(HRESULT, "GetOverlayPosition", [LPLONG, LPLONG]),
+    Method(HRESULT, "GetPalette", [Pointer(LPDIRECTDRAWPALETTE)]),
     Method(HRESULT, "GetPixelFormat", [LPDDPIXELFORMAT]),
     Method(HRESULT, "GetSurfaceDesc", [LPDDSURFACEDESC2]),
     Method(HRESULT, "Initialize", [LPDIRECTDRAW, LPDDSURFACEDESC2]),
@@ -1550,13 +1557,13 @@ IDirectDrawSurface7.methods += [
     Method(HRESULT, "Restore", []),
     Method(HRESULT, "SetClipper", [LPDIRECTDRAWCLIPPER]),
     Method(HRESULT, "SetColorKey", [DWORD, LPDDCOLORKEY]),
-    Method(HRESULT, "SetOverlayPosition", [LONG, LONG ]),
+    Method(HRESULT, "SetOverlayPosition", [LONG, LONG]),
     Method(HRESULT, "SetPalette", [LPDIRECTDRAWPALETTE]),
     Method(HRESULT, "Unlock", [LPRECT]),
     Method(HRESULT, "UpdateOverlay", [LPRECT, LPDIRECTDRAWSURFACE7,LPRECT,DWORD, LPDDOVERLAYFX]),
     Method(HRESULT, "UpdateOverlayDisplay", [DWORD]),
     Method(HRESULT, "UpdateOverlayZOrder", [DWORD, LPDIRECTDRAWSURFACE7]),
-    Method(HRESULT, "GetDDInterface", [Pointer(LPVOID) ]),
+    Method(HRESULT, "GetDDInterface", [Pointer(LPVOID)]),
     Method(HRESULT, "PageLock", [DWORD]),
     Method(HRESULT, "PageUnlock", [DWORD]),
     Method(HRESULT, "SetSurfaceDesc", [LPDDSURFACEDESC2, DWORD]),
@@ -1581,14 +1588,10 @@ IDirectDrawGammaControl.methods += [
     Method(HRESULT, "SetGammaRamp", [DWORD, LPDDGAMMARAMP]),
 ]
 
-#LPDDENUMCALLBACKA   = WrapPointer(Function(BOOL, "LPDDENUMCALLBACKA", [Pointer(GUID), LPSTR, LPSTR, LPVOID]))
-#LPDDENUMCALLBACKW   = WrapPointer(Function(BOOL, "LPDDENUMCALLBACKW", [Pointer(GUID), LPWSTR, LPWSTR, LPVOID]))
-#LPDDENUMCALLBACKEXA = WrapPointer(Function(BOOL, "LPDDENUMCALLBACKEXA", [Pointer(GUID), LPSTR, LPSTR, LPVOID, HMONITOR]))
-#LPDDENUMCALLBACKEXW = WrapPointer(Function(BOOL, "LPDDENUMCALLBACKEXW", [Pointer(GUID), LPWSTR, LPWSTR, LPVOID, HMONITOR]))
-LPDDENUMCALLBACKA   = Alias("LPDDENUMCALLBACKA", Pointer(Void))
-LPDDENUMCALLBACKW   = Alias("LPDDENUMCALLBACKW", Pointer(Void))
-LPDDENUMCALLBACKEXA = Alias("LPDDENUMCALLBACKEXA", Pointer(Void))
-LPDDENUMCALLBACKEXW = Alias("LPDDENUMCALLBACKEXW", Pointer(Void))
+LPDDENUMCALLBACKA   = FunctionPointer(BOOL, "LPDDENUMCALLBACKA", [Pointer(GUID), LPSTR, LPSTR, LPVOID])
+LPDDENUMCALLBACKW   = FunctionPointer(BOOL, "LPDDENUMCALLBACKW", [Pointer(GUID), LPWSTR, LPWSTR, LPVOID])
+LPDDENUMCALLBACKEXA = FunctionPointer(BOOL, "LPDDENUMCALLBACKEXA", [Pointer(GUID), LPSTR, LPSTR, LPVOID, HMONITOR])
+LPDDENUMCALLBACKEXW = FunctionPointer(BOOL, "LPDDENUMCALLBACKEXW", [Pointer(GUID), LPWSTR, LPWSTR, LPVOID, HMONITOR])
 
 DDENUM = Flags(DWORD, [
     "DDENUM_ATTACHEDSECONDARYDEVICES",
@@ -1601,22 +1604,19 @@ DDCREATE = Flags(DWORD, [
     "DDCREATE_EMULATIONONLY",
 ])
 
-ddraw = Dll("ddraw")
-ddraw.functions += [
-    DllFunction(HRESULT, "DirectDrawEnumerateW", [(LPDDENUMCALLBACKW, "lpCallback"), (LPVOID, "lpContext")]),
-    DllFunction(HRESULT, "DirectDrawEnumerateA", [(LPDDENUMCALLBACKA, "lpCallback"), (LPVOID, "lpContext")]),
-    DllFunction(HRESULT, "DirectDrawEnumerateExW", [(LPDDENUMCALLBACKEXW, "lpCallback"), (LPVOID, "lpContext"), (DDENUM, "dwFlags")]),
-    DllFunction(HRESULT, "DirectDrawEnumerateExA", [(LPDDENUMCALLBACKEXA, "lpCallback"), (LPVOID, "lpContext"), (DDENUM, "dwFlags")]),
-    DllFunction(HRESULT, "DirectDrawCreate", [(Pointer(GUID), "lpGUID"), (OutPointer(LPDIRECTDRAW), "lplpDD"), (Pointer(IUnknown), "pUnkOuter")]),
-    DllFunction(HRESULT, "DirectDrawCreateEx", [(Pointer(GUID), "lpGuid"), (OutPointer(LPVOID), "lplpDD"), (REFIID, "iid"), (Pointer(IUnknown), "pUnkOuter")]),
-    DllFunction(HRESULT, "DirectDrawCreateClipper", [(DWORD, "dwFlags"), (OutPointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (Pointer(IUnknown), "pUnkOuter")]),
-]
+ddraw = API("ddraw")
+ddraw.add_functions([
+    StdFunction(HRESULT, "DirectDrawEnumerateW", [(LPDDENUMCALLBACKW, "lpCallback"), (LPVOID, "lpContext")]),
+    StdFunction(HRESULT, "DirectDrawEnumerateA", [(LPDDENUMCALLBACKA, "lpCallback"), (LPVOID, "lpContext")]),
+    StdFunction(HRESULT, "DirectDrawEnumerateExW", [(LPDDENUMCALLBACKEXW, "lpCallback"), (LPVOID, "lpContext"), (DDENUM, "dwFlags")]),
+    StdFunction(HRESULT, "DirectDrawEnumerateExA", [(LPDDENUMCALLBACKEXA, "lpCallback"), (LPVOID, "lpContext"), (DDENUM, "dwFlags")]),
+    StdFunction(HRESULT, "DirectDrawCreate", [(Pointer(GUID), "lpGUID"), Out(Pointer(LPDIRECTDRAW), "lplpDD"), (Pointer(IUnknown), "pUnkOuter")]),
+    StdFunction(HRESULT, "DirectDrawCreateEx", [(Pointer(GUID), "lpGuid"), Out(Pointer(LPVOID), "lplpDD"), (REFIID, "iid"), (Pointer(IUnknown), "pUnkOuter")]),
+    StdFunction(HRESULT, "DirectDrawCreateClipper", [(DWORD, "dwFlags"), Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (Pointer(IUnknown), "pUnkOuter")]),
+    StdFunction(Void, "AcquireDDThreadLock", []),
+    StdFunction(Void, "ReleaseDDThreadLock", []),
+    StdFunction(DWORD, "D3DParseUnknownCommand", [(LPVOID, "lpCmd"), Out(Pointer(LPVOID), "lpRetCmd")]),
+    StdFunction(HRESULT, "DllCanUnloadNow", []),
+    StdFunction(HRESULT, "DllGetClassObject", [(REFCLSID, "rclsid"), (REFIID, "riid"), Out(Pointer(OpaquePointer(Void)), "ppv")]),
+])
 
-if __name__ == '__main__':
-    print '#include <windows.h>'
-    print '#include <tchar.h>'
-    print '#include <ddraw.h>'
-    print
-    print '#include "log.hpp"'
-    print
-    wrap()