Implement some COM-related functions.
Modified: trunk/reactos/lib/ddraw/main/clipper.c
Modified: trunk/reactos/lib/ddraw/main/color.c
Modified: trunk/reactos/lib/ddraw/main/ddraw.c
Modified: trunk/reactos/lib/ddraw/main/gamma.c
Modified: trunk/reactos/lib/ddraw/main/palette.c
Modified: trunk/reactos/lib/ddraw/main.c
  _____
Modified: trunk/reactos/lib/ddraw/main/clipper.c
--- trunk/reactos/lib/ddraw/main/clipper.c      2005-10-24 23:46:55 UTC
(rev 18766)
+++ trunk/reactos/lib/ddraw/main/clipper.c      2005-10-25 14:03:20 UTC
(rev 18767)
@@ -11,14 +11,34 @@
 #include "rosdraw.h"
-HRESULT WINAPI Main_DirectDrawClipper_SetHwnd(
-    LPDIRECTDRAWCLIPPER iface, DWORD dwFlags, HWND hWnd)
+ULONG WINAPI Main_DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface)
 {
-       DX_STUB;
+    IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
+    ULONG ref = InterlockedDecrement(&This->ref);
+
+    if (ref == 0)
+               HeapFree(GetProcessHeap(), 0, This);
+
+    return ref;
 }
-ULONG WINAPI Main_DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface)
+ULONG WINAPI Main_DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface)
 {
+    IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+    ULONG ref =
InterlockedIncrement((PLONG)&This->DirectDrawGlobal.dwRefCnt);
+
+       return ref;
+}
+
+HRESULT WINAPI Main_DirectDrawClipper_Initialize(
+     LPDIRECTDRAWCLIPPER iface, LPDIRECTDRAW lpDD, DWORD dwFlags)
+{
+       return DD_OK;
+}
+
+HRESULT WINAPI Main_DirectDrawClipper_SetHwnd(
+    LPDIRECTDRAWCLIPPER iface, DWORD dwFlags, HWND hWnd)
+{
        DX_STUB;
 }
@@ -41,23 +61,12 @@
        DX_STUB;
 }
-ULONG WINAPI Main_DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface)
-{
-       DX_STUB;
-}
-
 HRESULT WINAPI Main_DirectDrawClipper_GetHWnd(
     LPDIRECTDRAWCLIPPER iface, HWND* hWndPtr)
 {
        DX_STUB;
 }
-HRESULT WINAPI Main_DirectDrawClipper_Initialize(
-     LPDIRECTDRAWCLIPPER iface, LPDIRECTDRAW lpDD, DWORD dwFlags)
-{
-       DX_STUB;
-}
-
 HRESULT WINAPI Main_DirectDrawClipper_IsClipListChanged(
     LPDIRECTDRAWCLIPPER iface, BOOL* lpbChanged)
 {
  _____
Modified: trunk/reactos/lib/ddraw/main/color.c
--- trunk/reactos/lib/ddraw/main/color.c        2005-10-24 23:46:55 UTC
(rev 18766)
+++ trunk/reactos/lib/ddraw/main/color.c        2005-10-25 14:03:20 UTC
(rev 18767)
@@ -10,22 +10,31 @@
 #include "rosdraw.h"
-HRESULT WINAPI
-Main_DirectDrawColorControl_QueryInterface(LPDIRECTDRAWCOLORCONTROL
iface,
-
REFIID riid, LPVOID* ppvObj)
-{
-       DX_STUB;
-}
-
 ULONG WINAPI
 Main_DirectDrawColorControl_AddRef(LPDIRECTDRAWCOLORCONTROL iface)
 {
-       DX_STUB;
+    IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+    ULONG ref =
InterlockedIncrement((PLONG)&This->DirectDrawGlobal.dwRefCnt);
+
+       return ref;
 }
 ULONG WINAPI
 Main_DirectDrawColorControl_Release(LPDIRECTDRAWCOLORCONTROL iface)
 {
+    IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
+    ULONG ref = InterlockedDecrement(&This->ref);
+
+    if (ref == 0)
+               HeapFree(GetProcessHeap(), 0, This);
+
+    return ref;
+}
+
+HRESULT WINAPI
+Main_DirectDrawColorControl_QueryInterface(LPDIRECTDRAWCOLORCONTROL
iface,
+
REFIID riid, LPVOID* ppvObj)
+{
        DX_STUB;
 }
  _____
Modified: trunk/reactos/lib/ddraw/main/ddraw.c
--- trunk/reactos/lib/ddraw/main/ddraw.c        2005-10-24 23:46:55 UTC
(rev 18766)
+++ trunk/reactos/lib/ddraw/main/ddraw.c        2005-10-25 14:03:20 UTC
(rev 18767)
@@ -125,33 +125,6 @@
        return DD_OK;
 }
-HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface,
LPDDSURFACEDESC2 pDDSD,
-
LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter)
-{
-    if (pUnkOuter!=NULL)
-               return DDERR_INVALIDPARAMS;
-
-       if(sizeof(DDSURFACEDESC2)!=pDDSD->dwSize)
-               return DDERR_UNSUPPORTED;
-
-       // the nasty com stuff
-       IDirectDrawSurfaceImpl* That;
-
-       That = (IDirectDrawSurfaceImpl*)HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY, sizeof(IDirectDrawSurfaceImpl));
-
-       if (That == NULL)
-               return E_OUTOFMEMORY;
-
-       That->lpVtbl = &DirectDrawSurface7_Vtable;
-       That->lpVtbl_v3 = &DDRAW_IDDS3_Thunk_VTable;
-
-       That->ref = 1;
-       *ppSurf = (LPDIRECTDRAWSURFACE7)That;
-
-       // the real surface object creation
-       return That->lpVtbl->Initialize (*ppSurf, (LPDIRECTDRAW)iface,
pDDSD);
-}
-
 ULONG WINAPI Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface)
 {
     IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
@@ -208,24 +181,91 @@
     return S_OK;
 }
-/**** Stubs ****/
+HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface,
LPDDSURFACEDESC2 pDDSD,
+
LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter)
+{
+    if (pUnkOuter!=NULL)
+               return DDERR_INVALIDPARAMS;
-HRESULT WINAPI Main_DirectDraw_Compact(LPDIRECTDRAW7 iface)
-{
-       DX_STUB;
+       if(sizeof(DDSURFACEDESC2)!=pDDSD->dwSize)
+               return DDERR_UNSUPPORTED;
+
+       // the nasty com stuff
+       IDirectDrawSurfaceImpl* That;
+
+       That = (IDirectDrawSurfaceImpl*)HeapAlloc(GetProcessHeap(), 0,
sizeof(IDirectDrawSurfaceImpl));
+
+       if (That == NULL)
+               return E_OUTOFMEMORY;
+
+       ZeroMemory(That, sizeof(IDirectDrawSurfaceImpl));
+
+       That->lpVtbl = &DirectDrawSurface7_Vtable;
+       That->lpVtbl_v3 = &DDRAW_IDDS3_Thunk_VTable;
+       That->ref = 1;
+
+       *ppSurf = (LPDIRECTDRAWSURFACE7)That;
+
+       // the real surface object creation
+       return That->lpVtbl->Initialize (*ppSurf, (LPDIRECTDRAW)iface,
pDDSD);
 }
 HRESULT WINAPI Main_DirectDraw_CreateClipper(LPDIRECTDRAW7 iface, DWORD
dwFlags,
LPDIRECTDRAWCLIPPER *ppClipper, IUnknown *pUnkOuter)
 {
-       DX_STUB;
+    if (pUnkOuter!=NULL)
+               return DDERR_INVALIDPARAMS;
+
+       IDirectDrawClipperImpl* That;
+       That = (IDirectDrawClipperImpl*)HeapAlloc(GetProcessHeap(), 0,
sizeof(IDirectDrawClipperImpl));
+
+       if (That == NULL)
+               return E_OUTOFMEMORY;
+
+       ZeroMemory(That, sizeof(IDirectDrawClipperImpl));
+
+       That->lpVtbl = &DirectDrawClipper_Vtable;
+       That->ref = 1;
+       *ppClipper = (LPDIRECTDRAWCLIPPER)That;
+
+       return That->lpVtbl->Initialize (*ppClipper,
(LPDIRECTDRAW)iface, dwFlags);
 }
+
+// This function is exported by the dll
+HRESULT WINAPI DirectDrawCreateClipper (DWORD dwFlags,
+
LPDIRECTDRAWCLIPPER* lplpDDClipper, LPUNKNOWN pUnkOuter)
+{
+    return Main_DirectDraw_CreateClipper(NULL, dwFlags, lplpDDClipper,
pUnkOuter);
+}
+
 HRESULT WINAPI Main_DirectDraw_CreatePalette(LPDIRECTDRAW7 iface, DWORD
dwFlags,
-                             LPPALETTEENTRY palent,LPDIRECTDRAWPALETTE*
ppPalette,LPUNKNOWN pUnknown)
+                             LPPALETTEENTRY palent,
LPDIRECTDRAWPALETTE* ppPalette, LPUNKNOWN pUnkOuter)
 {
-       DX_STUB;
+    if (pUnkOuter!=NULL)
+               return DDERR_INVALIDPARAMS;
+
+       IDirectDrawPaletteImpl* That;
+       That = (IDirectDrawPaletteImpl*)HeapAlloc(GetProcessHeap(), 0,
sizeof(IDirectDrawPaletteImpl));
+
+       if (That == NULL)
+               return E_OUTOFMEMORY;
+
+       ZeroMemory(That, sizeof(IDirectDrawPaletteImpl));
+
+       That->lpVtbl = &DirectDrawPalette_Vtable;
+       That->ref = 1;
+       *ppPalette = (LPDIRECTDRAWPALETTE)That;
+
+       return That->lpVtbl->Initialize (*ppPalette,
(LPDIRECTDRAW)iface, dwFlags, palent);
 }
+/**** Stubs ****/
+
+HRESULT WINAPI Main_DirectDraw_Compact(LPDIRECTDRAW7 iface)
+{
+       DX_STUB;
+}
+
 HRESULT WINAPI Main_DirectDraw_DuplicateSurface(LPDIRECTDRAW7 iface,
LPDIRECTDRAWSURFACE7 src,
                                 LPDIRECTDRAWSURFACE7* dst)
 {
  _____
Modified: trunk/reactos/lib/ddraw/main/gamma.c
--- trunk/reactos/lib/ddraw/main/gamma.c        2005-10-24 23:46:55 UTC
(rev 18766)
+++ trunk/reactos/lib/ddraw/main/gamma.c        2005-10-25 14:03:20 UTC
(rev 18767)
@@ -10,23 +10,31 @@
 #include "rosdraw.h"
-
-HRESULT WINAPI
-Main_DirectDrawGammaControl_QueryInterface(LPDIRECTDRAWGAMMACONTROL
iface, REFIID riid,
-                                     LPVOID *ppObj)
-{
-       DX_STUB;
-}
-
 ULONG WINAPI
 Main_DirectDrawGammaControl_AddRef(LPDIRECTDRAWGAMMACONTROL iface)
 {
-       DX_STUB;
+    IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+    ULONG ref =
InterlockedIncrement((PLONG)&This->DirectDrawGlobal.dwRefCnt);
+
+       return ref;
 }
 ULONG WINAPI
 Main_DirectDrawGammaControl_Release(LPDIRECTDRAWGAMMACONTROL iface)
 {
+    IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
+    ULONG ref = InterlockedDecrement(&This->ref);
+
+    if (ref == 0)
+               HeapFree(GetProcessHeap(), 0, This);
+
+    return ref;
+}
+
+HRESULT WINAPI
+Main_DirectDrawGammaControl_QueryInterface(LPDIRECTDRAWGAMMACONTROL
iface, REFIID riid,
+                                     LPVOID *ppObj)
+{
        DX_STUB;
 }
  _____
Modified: trunk/reactos/lib/ddraw/main/palette.c
--- trunk/reactos/lib/ddraw/main/palette.c      2005-10-24 23:46:55 UTC
(rev 18766)
+++ trunk/reactos/lib/ddraw/main/palette.c      2005-10-25 14:03:20 UTC
(rev 18767)
@@ -10,42 +10,49 @@
 #include "rosdraw.h"
+ULONG WINAPI
+Main_DirectDrawPalette_Release(LPDIRECTDRAWPALETTE iface)
+{
+    IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+    ULONG ref =
InterlockedIncrement((PLONG)&This->DirectDrawGlobal.dwRefCnt);
+       return ref;
+}
+
+ULONG WINAPI Main_DirectDrawPalette_AddRef(LPDIRECTDRAWPALETTE iface)
+{
+    IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
+    ULONG ref = InterlockedDecrement(&This->ref);
+
+    if (ref == 0)
+               HeapFree(GetProcessHeap(), 0, This);
+
+    return ref;
+}
+
 HRESULT WINAPI
-Main_DirectDrawPalette_GetEntries(LPDIRECTDRAWPALETTE iface, DWORD
dwFlags,
-                                 DWORD dwStart, DWORD dwCount,
+Main_DirectDrawPalette_Initialize(LPDIRECTDRAWPALETTE iface,
+                                 LPDIRECTDRAW ddraw, DWORD dwFlags,
                                  LPPALETTEENTRY palent)
 {
-    DX_STUB;
+    return DD_OK;
 }
 HRESULT WINAPI
-Main_DirectDrawPalette_SetEntries(LPDIRECTDRAWPALETTE iface, DWORD
dwFlags,
+Main_DirectDrawPalette_GetEntries(LPDIRECTDRAWPALETTE iface, DWORD
dwFlags,
                                  DWORD dwStart, DWORD dwCount,
                                  LPPALETTEENTRY palent)
 {
     DX_STUB;
 }
-ULONG WINAPI
-Main_DirectDrawPalette_Release(LPDIRECTDRAWPALETTE iface)
-{
-    DX_STUB;
-}
-
-ULONG WINAPI Main_DirectDrawPalette_AddRef(LPDIRECTDRAWPALETTE iface)
-{
-    DX_STUB;
-}
-
 HRESULT WINAPI
-Main_DirectDrawPalette_Initialize(LPDIRECTDRAWPALETTE iface,
-                                 LPDIRECTDRAW ddraw, DWORD dwFlags,
+Main_DirectDrawPalette_SetEntries(LPDIRECTDRAWPALETTE iface, DWORD
dwFlags,
+                                 DWORD dwStart, DWORD dwCount,
                                  LPPALETTEENTRY palent)
 {
     DX_STUB;
 }
-
 HRESULT WINAPI
 Main_DirectDrawPalette_GetCaps(LPDIRECTDRAWPALETTE iface, LPDWORD
lpdwCaps)
 {
  _____
Modified: trunk/reactos/lib/ddraw/main.c
--- trunk/reactos/lib/ddraw/main.c      2005-10-24 23:46:55 UTC (rev
18766)
+++ trunk/reactos/lib/ddraw/main.c      2005-10-25 14:03:20 UTC (rev
18767)
@@ -101,11 +101,3 @@
      DX_STUB;
 }
-HRESULT WINAPI DirectDrawCreateClipper(
-  DWORD dwFlags,
-  LPDIRECTDRAWCLIPPER* lplpDDClipper,
-  LPUNKNOWN pUnkOuter
-)
-{
-     DX_STUB;
-}