[DSOUND] move duplex from capture to new file
Robert Reif
reif at earthlink.net
Wed Jun 1 19:53:15 CDT 2005
Move FullDuplex code from capture.c to duplex.c.
-------------- next part --------------
diff -u -N wine.cvs/dlls/dsound/capture.c wine/dlls/dsound/capture.c
--- wine.cvs/dlls/dsound/capture.c 2005-06-01 20:43:58.000000000 -0400
+++ wine/dlls/dsound/capture.c 2005-06-01 20:40:29.000000000 -0400
@@ -20,7 +20,6 @@
*/
/*
* TODO:
- * Implement DirectSoundFullDuplex support.
* Implement FX support.
*/
@@ -53,20 +52,9 @@
IDirectSoundCaptureImpl *ipDSC,
LPCDSCBUFFERDESC lpcDSCBufferDesc,
LPVOID* ppobj );
-static HRESULT WINAPI IDirectSoundFullDuplexImpl_Initialize(
- LPDIRECTSOUNDFULLDUPLEX iface,
- LPCGUID pCaptureGuid,
- LPCGUID pRendererGuid,
- LPCDSCBUFFERDESC lpDscBufferDesc,
- LPCDSBUFFERDESC lpDsBufferDesc,
- HWND hWnd,
- DWORD dwLevel,
- LPLPDIRECTSOUNDCAPTUREBUFFER8 lplpDirectSoundCaptureBuffer8,
- LPLPDIRECTSOUNDBUFFER8 lplpDirectSoundBuffer8 );
static const IDirectSoundCaptureVtbl dscvt;
static const IDirectSoundCaptureBuffer8Vtbl dscbvt;
-static const IDirectSoundFullDuplexVtbl dsfdvt;
static IDirectSoundCaptureImpl* dsound_capture = NULL;
@@ -1632,230 +1620,3 @@
};
IClassFactoryImpl DSOUND_CAPTURE_CF = { &DSCCF_Vtbl, 1 };
-
-/***************************************************************************
- * DirectSoundFullDuplexCreate [DSOUND.10]
- *
- * Create and initialize a DirectSoundFullDuplex interface.
- *
- * PARAMS
- * pcGuidCaptureDevice [I] Address of sound capture device GUID.
- * pcGuidRenderDevice [I] Address of sound render device GUID.
- * pcDSCBufferDesc [I] Address of capture buffer description.
- * pcDSBufferDesc [I] Address of render buffer description.
- * hWnd [I] Handle to application window.
- * dwLevel [I] Cooperative level.
- * ppDSFD [O] Address where full duplex interface returned.
- * ppDSCBuffer8 [0] Address where capture buffer interface returned.
- * ppDSBuffer8 [0] Address where render buffer interface returned.
- * pUnkOuter [I] Must be NULL.
- *
- * RETURNS
- * Success: DS_OK
- * Failure: DSERR_NOAGGREGATION, DSERR_ALLOCATED, DSERR_INVALIDPARAM,
- * DSERR_OUTOFMEMORY DSERR_INVALIDCALL DSERR_NODRIVER
- */
-HRESULT WINAPI
-DirectSoundFullDuplexCreate(
- LPCGUID pcGuidCaptureDevice,
- LPCGUID pcGuidRenderDevice,
- LPCDSCBUFFERDESC pcDSCBufferDesc,
- LPCDSBUFFERDESC pcDSBufferDesc,
- HWND hWnd,
- DWORD dwLevel,
- LPDIRECTSOUNDFULLDUPLEX *ppDSFD,
- LPDIRECTSOUNDCAPTUREBUFFER8 *ppDSCBuffer8,
- LPDIRECTSOUNDBUFFER8 *ppDSBuffer8,
- LPUNKNOWN pUnkOuter)
-{
- IDirectSoundFullDuplexImpl** ippDSFD=(IDirectSoundFullDuplexImpl**)ppDSFD;
- TRACE("(%s,%s,%p,%p,%lx,%lx,%p,%p,%p,%p)\n", debugstr_guid(pcGuidCaptureDevice),
- debugstr_guid(pcGuidRenderDevice), pcDSCBufferDesc, pcDSBufferDesc,
- (DWORD)hWnd, dwLevel, ppDSFD, ppDSCBuffer8, ppDSBuffer8, pUnkOuter);
-
- if ( pUnkOuter ) {
- WARN("pUnkOuter != 0\n");
- return DSERR_NOAGGREGATION;
- }
-
- *ippDSFD = HeapAlloc(GetProcessHeap(),
- HEAP_ZERO_MEMORY, sizeof(IDirectSoundFullDuplexImpl));
-
- if (*ippDSFD == NULL) {
- WARN("out of memory\n");
- return DSERR_OUTOFMEMORY;
- } else {
- HRESULT hres;
- IDirectSoundFullDuplexImpl *This = (IDirectSoundFullDuplexImpl *)*ippDSFD;
-
- This->ref = 1;
- This->lpVtbl = &dsfdvt;
-
- InitializeCriticalSection( &(This->lock) );
- This->lock.DebugInfo->Spare[1] = (DWORD)"DSDUPLEX_lock";
-
- hres = IDirectSoundFullDuplexImpl_Initialize( (LPDIRECTSOUNDFULLDUPLEX)This,
- pcGuidCaptureDevice, pcGuidRenderDevice,
- pcDSCBufferDesc, pcDSBufferDesc,
- hWnd, dwLevel, ppDSCBuffer8, ppDSBuffer8);
- if (hres != DS_OK)
- WARN("IDirectSoundFullDuplexImpl_Initialize failed\n");
- return hres;
- }
-}
-
-static HRESULT WINAPI
-IDirectSoundFullDuplexImpl_QueryInterface(
- LPDIRECTSOUNDFULLDUPLEX iface,
- REFIID riid,
- LPVOID* ppobj )
-{
- IDirectSoundFullDuplexImpl *This = (IDirectSoundFullDuplexImpl *)iface;
- TRACE( "(%p,%s,%p)\n", This, debugstr_guid(riid), ppobj );
-
- if (ppobj == NULL) {
- WARN("invalid parameter\n");
- return E_INVALIDARG;
- }
-
- *ppobj = NULL;
- return E_NOINTERFACE;
-}
-
-static ULONG WINAPI
-IDirectSoundFullDuplexImpl_AddRef( LPDIRECTSOUNDFULLDUPLEX iface )
-{
- IDirectSoundFullDuplexImpl *This = (IDirectSoundFullDuplexImpl *)iface;
- ULONG ref = InterlockedIncrement(&(This->ref));
- TRACE("(%p) ref was %ld\n", This, ref - 1);
- return ref;
-}
-
-static ULONG WINAPI
-IDirectSoundFullDuplexImpl_Release( LPDIRECTSOUNDFULLDUPLEX iface )
-{
- IDirectSoundFullDuplexImpl *This = (IDirectSoundFullDuplexImpl *)iface;
- ULONG ref = InterlockedDecrement(&(This->ref));
- TRACE("(%p) ref was %ld\n", This, ref - 1);
-
- if (!ref) {
- This->lock.DebugInfo->Spare[1] = 0;
- DeleteCriticalSection( &(This->lock) );
- HeapFree( GetProcessHeap(), 0, This );
- TRACE("(%p) released\n", This);
- }
- return ref;
-}
-
-static HRESULT WINAPI
-IDirectSoundFullDuplexImpl_Initialize(
- LPDIRECTSOUNDFULLDUPLEX iface,
- LPCGUID pCaptureGuid,
- LPCGUID pRendererGuid,
- LPCDSCBUFFERDESC lpDscBufferDesc,
- LPCDSBUFFERDESC lpDsBufferDesc,
- HWND hWnd,
- DWORD dwLevel,
- LPLPDIRECTSOUNDCAPTUREBUFFER8 lplpDirectSoundCaptureBuffer8,
- LPLPDIRECTSOUNDBUFFER8 lplpDirectSoundBuffer8 )
-{
- IDirectSoundFullDuplexImpl *This = (IDirectSoundFullDuplexImpl *)iface;
- IDirectSoundCaptureBufferImpl** ippdscb=(IDirectSoundCaptureBufferImpl**)lplpDirectSoundCaptureBuffer8;
- IDirectSoundBufferImpl** ippdsc=(IDirectSoundBufferImpl**)lplpDirectSoundBuffer8;
-
- FIXME( "(%p,%s,%s,%p,%p,%lx,%lx,%p,%p) stub!\n", This, debugstr_guid(pCaptureGuid),
- debugstr_guid(pRendererGuid), lpDscBufferDesc, lpDsBufferDesc, (DWORD)hWnd, dwLevel,
- ippdscb, ippdsc);
-
- return E_FAIL;
-}
-
-static const IDirectSoundFullDuplexVtbl dsfdvt =
-{
- /* IUnknown methods */
- IDirectSoundFullDuplexImpl_QueryInterface,
- IDirectSoundFullDuplexImpl_AddRef,
- IDirectSoundFullDuplexImpl_Release,
-
- /* IDirectSoundFullDuplex methods */
- IDirectSoundFullDuplexImpl_Initialize
-};
-
-/*******************************************************************************
- * DirectSoundFullDuplex ClassFactory
- */
-
-static HRESULT WINAPI
-DSFDCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
- IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
-
- FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-static ULONG WINAPI
-DSFDCF_AddRef(LPCLASSFACTORY iface)
-{
- IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
- TRACE("(%p) ref was %ld\n", This, This->ref);
- return InterlockedIncrement(&(This->ref));
-}
-
-static ULONG WINAPI
-DSFDCF_Release(LPCLASSFACTORY iface)
-{
- IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
- /* static class, won't be freed */
- TRACE("(%p) ref was %ld\n", This, This->ref);
- return InterlockedDecrement(&(This->ref));
-}
-
-static HRESULT WINAPI
-DSFDCF_CreateInstance(
- LPCLASSFACTORY iface,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj )
-{
- IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
-
- TRACE("(%p)->(%p,%s,%p)\n",This,pOuter,debugstr_guid(riid),ppobj);
-
- if (pOuter) {
- WARN("aggregation not supported\n");
- return CLASS_E_NOAGGREGATION;
- }
-
- if (ppobj == NULL) {
- WARN("invalid parameter\n");
- return E_INVALIDARG;
- }
-
- *ppobj = NULL;
-
- if ( IsEqualGUID( &IID_IDirectSoundFullDuplex, riid ) ) {
- /* FIXME: how do we do this one ? */
- FIXME("not implemented\n");
- return E_NOINTERFACE;
- }
-
- WARN("(%p,%p,%s,%p) Interface not found!\n",This,pOuter,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-static HRESULT WINAPI
-DSFDCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
- IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
- FIXME("(%p)->(%d),stub!\n",This,dolock);
- return S_OK;
-}
-
-static const IClassFactoryVtbl DSFDCF_Vtbl =
-{
- DSFDCF_QueryInterface,
- DSFDCF_AddRef,
- DSFDCF_Release,
- DSFDCF_CreateInstance,
- DSFDCF_LockServer
-};
-
-IClassFactoryImpl DSOUND_FULLDUPLEX_CF = { &DSFDCF_Vtbl, 1 };
diff -u -N wine.cvs/dlls/dsound/duplex.c wine/dlls/dsound/duplex.c
--- wine.cvs/dlls/dsound/duplex.c 1969-12-31 19:00:00.000000000 -0500
+++ wine/dlls/dsound/duplex.c 2005-06-01 20:39:52.000000000 -0400
@@ -0,0 +1,283 @@
+/* DirectSoundFullDuplex
+ *
+ * Copyright 1998 Marcus Meissner
+ * Copyright 1998 Rob Riggs
+ * Copyright 2000-2001 TransGaming Technologies, Inc.
+ * Copyright 2005 Robert Reif
+ *
+ * This library 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 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+/*
+ * TODO:
+ * Implement DirectSoundFullDuplex support.
+ */
+
+#include <stdarg.h>
+
+#define NONAMELESSSTRUCT
+#define NONAMELESSUNION
+#include "windef.h"
+#include "winbase.h"
+#include "mmsystem.h"
+#include "mmddk.h"
+#include "winreg.h"
+#include "winternl.h"
+#include "winnls.h"
+#include "wine/debug.h"
+#include "dsound.h"
+#include "dsdriver.h"
+#include "dsound_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(dsound);
+
+static HRESULT WINAPI IDirectSoundFullDuplexImpl_Initialize(
+ LPDIRECTSOUNDFULLDUPLEX iface,
+ LPCGUID pCaptureGuid,
+ LPCGUID pRendererGuid,
+ LPCDSCBUFFERDESC lpDscBufferDesc,
+ LPCDSBUFFERDESC lpDsBufferDesc,
+ HWND hWnd,
+ DWORD dwLevel,
+ LPLPDIRECTSOUNDCAPTUREBUFFER8 lplpDirectSoundCaptureBuffer8,
+ LPLPDIRECTSOUNDBUFFER8 lplpDirectSoundBuffer8 );
+
+static const IDirectSoundFullDuplexVtbl dsfdvt;
+
+/***************************************************************************
+ * DirectSoundFullDuplexCreate [DSOUND.10]
+ *
+ * Create and initialize a DirectSoundFullDuplex interface.
+ *
+ * PARAMS
+ * pcGuidCaptureDevice [I] Address of sound capture device GUID.
+ * pcGuidRenderDevice [I] Address of sound render device GUID.
+ * pcDSCBufferDesc [I] Address of capture buffer description.
+ * pcDSBufferDesc [I] Address of render buffer description.
+ * hWnd [I] Handle to application window.
+ * dwLevel [I] Cooperative level.
+ * ppDSFD [O] Address where full duplex interface returned.
+ * ppDSCBuffer8 [0] Address where capture buffer interface returned.
+ * ppDSBuffer8 [0] Address where render buffer interface returned.
+ * pUnkOuter [I] Must be NULL.
+ *
+ * RETURNS
+ * Success: DS_OK
+ * Failure: DSERR_NOAGGREGATION, DSERR_ALLOCATED, DSERR_INVALIDPARAM,
+ * DSERR_OUTOFMEMORY DSERR_INVALIDCALL DSERR_NODRIVER
+ */
+HRESULT WINAPI
+DirectSoundFullDuplexCreate(
+ LPCGUID pcGuidCaptureDevice,
+ LPCGUID pcGuidRenderDevice,
+ LPCDSCBUFFERDESC pcDSCBufferDesc,
+ LPCDSBUFFERDESC pcDSBufferDesc,
+ HWND hWnd,
+ DWORD dwLevel,
+ LPDIRECTSOUNDFULLDUPLEX *ppDSFD,
+ LPDIRECTSOUNDCAPTUREBUFFER8 *ppDSCBuffer8,
+ LPDIRECTSOUNDBUFFER8 *ppDSBuffer8,
+ LPUNKNOWN pUnkOuter)
+{
+ IDirectSoundFullDuplexImpl** ippDSFD=(IDirectSoundFullDuplexImpl**)ppDSFD;
+ TRACE("(%s,%s,%p,%p,%lx,%lx,%p,%p,%p,%p)\n", debugstr_guid(pcGuidCaptureDevice),
+ debugstr_guid(pcGuidRenderDevice), pcDSCBufferDesc, pcDSBufferDesc,
+ (DWORD)hWnd, dwLevel, ppDSFD, ppDSCBuffer8, ppDSBuffer8, pUnkOuter);
+
+ if ( pUnkOuter ) {
+ WARN("pUnkOuter != 0\n");
+ return DSERR_NOAGGREGATION;
+ }
+
+ *ippDSFD = HeapAlloc(GetProcessHeap(),
+ HEAP_ZERO_MEMORY, sizeof(IDirectSoundFullDuplexImpl));
+
+ if (*ippDSFD == NULL) {
+ WARN("out of memory\n");
+ return DSERR_OUTOFMEMORY;
+ } else {
+ HRESULT hres;
+ IDirectSoundFullDuplexImpl *This = (IDirectSoundFullDuplexImpl *)*ippDSFD;
+
+ This->ref = 1;
+ This->lpVtbl = &dsfdvt;
+
+ InitializeCriticalSection( &(This->lock) );
+ This->lock.DebugInfo->Spare[1] = (DWORD)"DSDUPLEX_lock";
+
+ hres = IDirectSoundFullDuplexImpl_Initialize( (LPDIRECTSOUNDFULLDUPLEX)This,
+ pcGuidCaptureDevice, pcGuidRenderDevice,
+ pcDSCBufferDesc, pcDSBufferDesc,
+ hWnd, dwLevel, ppDSCBuffer8, ppDSBuffer8);
+ if (hres != DS_OK)
+ WARN("IDirectSoundFullDuplexImpl_Initialize failed\n");
+ return hres;
+ }
+}
+
+static HRESULT WINAPI
+IDirectSoundFullDuplexImpl_QueryInterface(
+ LPDIRECTSOUNDFULLDUPLEX iface,
+ REFIID riid,
+ LPVOID* ppobj )
+{
+ IDirectSoundFullDuplexImpl *This = (IDirectSoundFullDuplexImpl *)iface;
+ TRACE( "(%p,%s,%p)\n", This, debugstr_guid(riid), ppobj );
+
+ if (ppobj == NULL) {
+ WARN("invalid parameter\n");
+ return E_INVALIDARG;
+ }
+
+ *ppobj = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI
+IDirectSoundFullDuplexImpl_AddRef( LPDIRECTSOUNDFULLDUPLEX iface )
+{
+ IDirectSoundFullDuplexImpl *This = (IDirectSoundFullDuplexImpl *)iface;
+ ULONG ref = InterlockedIncrement(&(This->ref));
+ TRACE("(%p) ref was %ld\n", This, ref - 1);
+ return ref;
+}
+
+static ULONG WINAPI
+IDirectSoundFullDuplexImpl_Release( LPDIRECTSOUNDFULLDUPLEX iface )
+{
+ IDirectSoundFullDuplexImpl *This = (IDirectSoundFullDuplexImpl *)iface;
+ ULONG ref = InterlockedDecrement(&(This->ref));
+ TRACE("(%p) ref was %ld\n", This, ref - 1);
+
+ if (!ref) {
+ This->lock.DebugInfo->Spare[1] = 0;
+ DeleteCriticalSection( &(This->lock) );
+ HeapFree( GetProcessHeap(), 0, This );
+ TRACE("(%p) released\n", This);
+ }
+ return ref;
+}
+
+static HRESULT WINAPI
+IDirectSoundFullDuplexImpl_Initialize(
+ LPDIRECTSOUNDFULLDUPLEX iface,
+ LPCGUID pCaptureGuid,
+ LPCGUID pRendererGuid,
+ LPCDSCBUFFERDESC lpDscBufferDesc,
+ LPCDSBUFFERDESC lpDsBufferDesc,
+ HWND hWnd,
+ DWORD dwLevel,
+ LPLPDIRECTSOUNDCAPTUREBUFFER8 lplpDirectSoundCaptureBuffer8,
+ LPLPDIRECTSOUNDBUFFER8 lplpDirectSoundBuffer8 )
+{
+ IDirectSoundFullDuplexImpl *This = (IDirectSoundFullDuplexImpl *)iface;
+ IDirectSoundCaptureBufferImpl** ippdscb=(IDirectSoundCaptureBufferImpl**)lplpDirectSoundCaptureBuffer8;
+ IDirectSoundBufferImpl** ippdsc=(IDirectSoundBufferImpl**)lplpDirectSoundBuffer8;
+
+ FIXME( "(%p,%s,%s,%p,%p,%lx,%lx,%p,%p) stub!\n", This, debugstr_guid(pCaptureGuid),
+ debugstr_guid(pRendererGuid), lpDscBufferDesc, lpDsBufferDesc, (DWORD)hWnd, dwLevel,
+ ippdscb, ippdsc);
+
+ return E_FAIL;
+}
+
+static const IDirectSoundFullDuplexVtbl dsfdvt =
+{
+ /* IUnknown methods */
+ IDirectSoundFullDuplexImpl_QueryInterface,
+ IDirectSoundFullDuplexImpl_AddRef,
+ IDirectSoundFullDuplexImpl_Release,
+
+ /* IDirectSoundFullDuplex methods */
+ IDirectSoundFullDuplexImpl_Initialize
+};
+
+/*******************************************************************************
+ * DirectSoundFullDuplex ClassFactory
+ */
+
+static HRESULT WINAPI
+DSFDCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
+{
+ IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
+
+ FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI
+DSFDCF_AddRef(LPCLASSFACTORY iface)
+{
+ IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
+ TRACE("(%p) ref was %ld\n", This, This->ref);
+ return InterlockedIncrement(&(This->ref));
+}
+
+static ULONG WINAPI
+DSFDCF_Release(LPCLASSFACTORY iface)
+{
+ IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
+ /* static class, won't be freed */
+ TRACE("(%p) ref was %ld\n", This, This->ref);
+ return InterlockedDecrement(&(This->ref));
+}
+
+static HRESULT WINAPI
+DSFDCF_CreateInstance(
+ LPCLASSFACTORY iface,LPUNKNOWN pOuter,REFIID riid,LPVOID *ppobj )
+{
+ IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
+
+ TRACE("(%p)->(%p,%s,%p)\n",This,pOuter,debugstr_guid(riid),ppobj);
+
+ if (pOuter) {
+ WARN("aggregation not supported\n");
+ return CLASS_E_NOAGGREGATION;
+ }
+
+ if (ppobj == NULL) {
+ WARN("invalid parameter\n");
+ return E_INVALIDARG;
+ }
+
+ *ppobj = NULL;
+
+ if ( IsEqualGUID( &IID_IDirectSoundFullDuplex, riid ) ) {
+ /* FIXME: how do we do this one ? */
+ FIXME("not implemented\n");
+ return E_NOINTERFACE;
+ }
+
+ WARN("(%p,%p,%s,%p) Interface not found!\n",This,pOuter,debugstr_guid(riid),ppobj);
+ return E_NOINTERFACE;
+}
+
+static HRESULT WINAPI
+DSFDCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
+{
+ IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
+ FIXME("(%p)->(%d),stub!\n",This,dolock);
+ return S_OK;
+}
+
+static const IClassFactoryVtbl DSFDCF_Vtbl =
+{
+ DSFDCF_QueryInterface,
+ DSFDCF_AddRef,
+ DSFDCF_Release,
+ DSFDCF_CreateInstance,
+ DSFDCF_LockServer
+};
+
+IClassFactoryImpl DSOUND_FULLDUPLEX_CF = { &DSFDCF_Vtbl, 1 };
diff -u -N wine.cvs/dlls/dsound/Makefile.in wine/dlls/dsound/Makefile.in
--- wine.cvs/dlls/dsound/Makefile.in 2005-05-09 18:31:14.000000000 -0400
+++ wine/dlls/dsound/Makefile.in 2005-06-01 20:40:51.000000000 -0400
@@ -12,6 +12,7 @@
capture.c \
dsound.c \
dsound_main.c \
+ duplex.c \
mixer.c \
primary.c \
propset.c \
More information about the wine-patches
mailing list