- updated resources to DX9
- completely rewritten headers (DX9 compat.; look much nicer now ;=)
- removed IDirectMusicSong and IDirectMusicMelodyFormulationTrack
(which are removed from DX9; weren't implemented in DX8 anyway)
- combined/simplified IDirectMusicSomething / IDirectMusicObject /
IPersistStream for objects that support loading
- implemented IDirectMusicObject on all such objects; via generic
functions
- combined IDirectMusicTrack(8)/IPersistStream on all tracks
- fully implemented IDirectMusicContainer (at least 90% if there are
no private interfaces)
- implemented IDirectMusicCollection (99% work & MS compliant
behaviour; except for instruments)
- tried to implement IDirectMusicInstrument (unfortunately uses some
dirty private interfaces... :(
- added dswave.dll; DirectMusic Wave
- some changes in style
- many, many more ;)
diff --git a/configure b/configure
index 313c7af..3d9c209 100755
--- a/configure
+++ b/configure
@@ -19070,7 +19070,7 @@
MAKE_PROG_RULES=programs/Makeprog.rules
- ac_config_files="$ac_config_files Make.rules dlls/Makedll.rules dlls/Maketest.rules libs/Makelib.rules programs/Makeprog.rules Makefile dlls/Makefile dlls/advapi32/Makefile dlls/advapi32/tests/Makefile dlls/avicap32/Makefile dlls/avifil32/Makefile dlls/cabinet/Makefile dlls/capi2032/Makefile dlls/cfgmgr32/Makefile dlls/comcat/Makefile dlls/comctl32/Makefile dlls/comctl32/tests/Makefile dlls/commdlg/Makefile dlls/crtdll/Makefile dlls/crypt32/Makefile dlls/ctl3d/Makefile dlls/wined3d/Makefile dlls/d3d8/Makefile dlls/d3d9/Makefile dlls/d3dim/Makefile dlls/d3dx8/Makefile dlls/dciman32/Makefile dlls/ddraw/Makefile dlls/ddraw/tests/Makefile dlls/devenum/Makefile dlls/dinput/Makefile dlls/dinput8/Makefile dlls/dmband/Makefile dlls/dmcompos/Makefile dlls/dmime/Makefile dlls/dmloader/Makefile dlls/dmscript/Makefile dlls/dmstyle/Makefile dlls/dmsynth/Makefile dlls/dmusic/Makefile dlls/dmusic32/Makefile dlls/dplay/Makefile dlls/dplayx/Makefile dlls/dpnhpast/Makefile dlls/dsound/Makefile dlls/dsound/tests/Makefile dlls/gdi/Makefile dlls/gdi/tests/Makefile dlls/glu32/Makefile dlls/glut32/Makefile dlls/iccvid/Makefile dlls/icmp/Makefile dlls/imagehlp/Makefile dlls/imm32/Makefile dlls/iphlpapi/Makefile dlls/iphlpapi/tests/Makefile dlls/kernel/Makefile dlls/kernel/tests/Makefile dlls/lzexpand/Makefile dlls/mapi32/Makefile dlls/mpr/Makefile dlls/msacm/Makefile dlls/msacm/imaadp32/Makefile dlls/msacm/msadp32/Makefile dlls/msacm/msg711/Makefile dlls/msacm/winemp3/Makefile dlls/msdmo/Makefile dlls/mshtml/Makefile dlls/msi/Makefile dlls/msimg32/Makefile dlls/msisys/Makefile dlls/msnet32/Makefile dlls/msvcrt/Makefile dlls/msvcrt/tests/Makefile dlls/msvcrt20/Makefile dlls/msvcrt40/Makefile dlls/msvcrtd/Makefile dlls/msvideo/Makefile dlls/msvideo/msrle32/Makefile dlls/mswsock/Makefile dlls/netapi32/Makefile dlls/netapi32/tests/Makefile dlls/newdev/Makefile dlls/ntdll/Makefile dlls/ntdll/tests/Makefile dlls/odbc32/Makefile dlls/ole32/Makefile dlls/oleacc/Makefile dlls/oleaut32/Makefile dlls/oleaut32/tests/Makefile dlls/olecli/Makefile dlls/oledlg/Makefile dlls/olepro32/Makefile dlls/olesvr/Makefile dlls/opengl32/Makefile dlls/psapi/Makefile dlls/qcap/Makefile dlls/quartz/Makefile dlls/rasapi32/Makefile dlls/richedit/Makefile dlls/rpcrt4/Makefile dlls/rpcrt4/tests/Makefile dlls/serialui/Makefile dlls/setupapi/Makefile dlls/shdocvw/Makefile dlls/shell32/Makefile dlls/shell32/tests/Makefile dlls/shfolder/Makefile dlls/shlwapi/Makefile dlls/shlwapi/tests/Makefile dlls/snmpapi/Makefile dlls/sti/Makefile dlls/tapi32/Makefile dlls/ttydrv/Makefile dlls/twain/Makefile dlls/unicows/Makefile dlls/url/Makefile dlls/urlmon/Makefile dlls/urlmon/tests/Makefile dlls/user/Makefile dlls/user/tests/Makefile dlls/uxtheme/Makefile dlls/version/Makefile dlls/win32s/Makefile dlls/winaspi/Makefile dlls/winedos/Makefile dlls/wineps/Makefile dlls/wininet/Makefile dlls/wininet/tests/Makefile dlls/winmm/Makefile dlls/winmm/joystick/Makefile dlls/winmm/mcianim/Makefile dlls/winmm/mciavi/Makefile dlls/winmm/mcicda/Makefile dlls/winmm/mciseq/Makefile dlls/winmm/mciwave/Makefile dlls/winmm/midimap/Makefile dlls/winmm/tests/Makefile dlls/winmm/wavemap/Makefile dlls/winmm/winealsa/Makefile dlls/winmm/winearts/Makefile dlls/winmm/wineaudioio/Makefile dlls/winmm/winenas/Makefile dlls/winmm/winejack/Makefile dlls/winmm/wineoss/Makefile dlls/winnls/Makefile dlls/winsock/Makefile dlls/winsock/tests/Makefile dlls/winspool/Makefile dlls/winspool/tests/Makefile dlls/wintab32/Makefile dlls/wintrust/Makefile dlls/wow32/Makefile dlls/wsock32/Makefile dlls/x11drv/Makefile documentation/Makefile include/Makefile libs/Makefile libs/port/Makefile libs/unicode/Makefile libs/uuid/Makefile libs/wine/Makefile libs/wpp/Makefile loader/Makefile programs/Makefile programs/avitools/Makefile programs/clock/Makefile programs/cmdlgtst/Makefile programs/control/Makefile programs/expand/Makefile programs/notepad/Makefile programs/progman/Makefile programs/regedit/Makefile programs/regsvr32/Makefile programs/rpcss/Makefile programs/rundll32/Makefile programs/start/Makefile programs/uninstaller/Makefile programs/view/Makefile programs/wcmd/Makefile programs/wineboot/Makefile programs/winebrowser/Makefile programs/winecfg/Makefile programs/wineconsole/Makefile programs/winedbg/Makefile programs/winefile/Makefile programs/winemenubuilder/Makefile programs/winemine/Makefile programs/winepath/Makefile programs/winetest/Makefile programs/winevdm/Makefile programs/winhelp/Makefile programs/winver/Makefile server/Makefile tools/Makefile tools/widl/Makefile tools/winapi/Makefile tools/winebuild/Makefile tools/winedump/Makefile tools/winegcc/Makefile tools/wmc/Makefile tools/wrc/Makefile"
+ ac_config_files="$ac_config_files Make.rules dlls/Makedll.rules dlls/Maketest.rules libs/Makelib.rules programs/Makeprog.rules Makefile dlls/Makefile dlls/advapi32/Makefile dlls/advapi32/tests/Makefile dlls/avicap32/Makefile dlls/avifil32/Makefile dlls/cabinet/Makefile dlls/capi2032/Makefile dlls/cfgmgr32/Makefile dlls/comcat/Makefile dlls/comctl32/Makefile dlls/comctl32/tests/Makefile dlls/commdlg/Makefile dlls/crtdll/Makefile dlls/crypt32/Makefile dlls/ctl3d/Makefile dlls/wined3d/Makefile dlls/d3d8/Makefile dlls/d3d9/Makefile dlls/d3dim/Makefile dlls/d3dx8/Makefile dlls/dciman32/Makefile dlls/ddraw/Makefile dlls/ddraw/tests/Makefile dlls/devenum/Makefile dlls/dinput/Makefile dlls/dinput8/Makefile dlls/dmband/Makefile dlls/dmcompos/Makefile dlls/dmime/Makefile dlls/dmloader/Makefile dlls/dmscript/Makefile dlls/dmstyle/Makefile dlls/dmsynth/Makefile dlls/dmusic/Makefile dlls/dmusic32/Makefile dlls/dplay/Makefile dlls/dplayx/Makefile dlls/dpnhpast/Makefile dlls/dsound/Makefile dlls/dsound/tests/Makefile dlls/dswave/Makefile dlls/gdi/Makefile dlls/gdi/tests/Makefile dlls/glu32/Makefile dlls/glut32/Makefile dlls/iccvid/Makefile dlls/icmp/Makefile dlls/imagehlp/Makefile dlls/imm32/Makefile dlls/iphlpapi/Makefile dlls/iphlpapi/tests/Makefile dlls/kernel/Makefile dlls/kernel/tests/Makefile dlls/lzexpand/Makefile dlls/mapi32/Makefile dlls/mpr/Makefile dlls/msacm/Makefile dlls/msacm/imaadp32/Makefile dlls/msacm/msadp32/Makefile dlls/msacm/msg711/Makefile dlls/msacm/winemp3/Makefile dlls/msdmo/Makefile dlls/mshtml/Makefile dlls/msi/Makefile dlls/msimg32/Makefile dlls/msisys/Makefile dlls/msnet32/Makefile dlls/msvcrt/Makefile dlls/msvcrt/tests/Makefile dlls/msvcrt20/Makefile dlls/msvcrt40/Makefile dlls/msvcrtd/Makefile dlls/msvideo/Makefile dlls/msvideo/msrle32/Makefile dlls/mswsock/Makefile dlls/netapi32/Makefile dlls/netapi32/tests/Makefile dlls/newdev/Makefile dlls/ntdll/Makefile dlls/ntdll/tests/Makefile dlls/odbc32/Makefile dlls/ole32/Makefile dlls/oleacc/Makefile dlls/oleaut32/Makefile dlls/oleaut32/tests/Makefile dlls/olecli/Makefile dlls/oledlg/Makefile dlls/olepro32/Makefile dlls/olesvr/Makefile dlls/opengl32/Makefile dlls/psapi/Makefile dlls/qcap/Makefile dlls/quartz/Makefile dlls/rasapi32/Makefile dlls/richedit/Makefile dlls/rpcrt4/Makefile dlls/rpcrt4/tests/Makefile dlls/serialui/Makefile dlls/setupapi/Makefile dlls/shdocvw/Makefile dlls/shell32/Makefile dlls/shell32/tests/Makefile dlls/shfolder/Makefile dlls/shlwapi/Makefile dlls/shlwapi/tests/Makefile dlls/snmpapi/Makefile dlls/sti/Makefile dlls/tapi32/Makefile dlls/ttydrv/Makefile dlls/twain/Makefile dlls/unicows/Makefile dlls/url/Makefile dlls/urlmon/Makefile dlls/urlmon/tests/Makefile dlls/user/Makefile dlls/user/tests/Makefile dlls/uxtheme/Makefile dlls/version/Makefile dlls/win32s/Makefile dlls/winaspi/Makefile dlls/winedos/Makefile dlls/wineps/Makefile dlls/wininet/Makefile dlls/wininet/tests/Makefile dlls/winmm/Makefile dlls/winmm/joystick/Makefile dlls/winmm/mcianim/Makefile dlls/winmm/mciavi/Makefile dlls/winmm/mcicda/Makefile dlls/winmm/mciseq/Makefile dlls/winmm/mciwave/Makefile dlls/winmm/midimap/Makefile dlls/winmm/tests/Makefile dlls/winmm/wavemap/Makefile dlls/winmm/winealsa/Makefile dlls/winmm/winearts/Makefile dlls/winmm/wineaudioio/Makefile dlls/winmm/winenas/Makefile dlls/winmm/winejack/Makefile dlls/winmm/wineoss/Makefile dlls/winnls/Makefile dlls/winsock/Makefile dlls/winsock/tests/Makefile dlls/winspool/Makefile dlls/winspool/tests/Makefile dlls/wintab32/Makefile dlls/wintrust/Makefile dlls/wow32/Makefile dlls/wsock32/Makefile dlls/x11drv/Makefile documentation/Makefile include/Makefile libs/Makefile libs/port/Makefile libs/unicode/Makefile libs/uuid/Makefile libs/wine/Makefile libs/wpp/Makefile loader/Makefile programs/Makefile programs/avitools/Makefile programs/clock/Makefile programs/cmdlgtst/Makefile programs/control/Makefile programs/expand/Makefile programs/notepad/Makefile programs/progman/Makefile programs/regedit/Makefile programs/regsvr32/Makefile programs/rpcss/Makefile programs/rundll32/Makefile programs/start/Makefile programs/uninstaller/Makefile programs/view/Makefile programs/wcmd/Makefile programs/wineboot/Makefile programs/winebrowser/Makefile programs/winecfg/Makefile programs/wineconsole/Makefile programs/winedbg/Makefile programs/winefile/Makefile programs/winemenubuilder/Makefile programs/winemine/Makefile programs/winepath/Makefile programs/winetest/Makefile programs/winevdm/Makefile programs/winhelp/Makefile programs/winver/Makefile server/Makefile tools/Makefile tools/widl/Makefile tools/winapi/Makefile tools/winebuild/Makefile tools/winedump/Makefile tools/winegcc/Makefile tools/wmc/Makefile tools/wrc/Makefile"
cat >confcache <<\_ACEOF
@@ -19647,6 +19647,7 @@
"dlls/dpnhpast/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/dpnhpast/Makefile" ;;
"dlls/dsound/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/dsound/Makefile" ;;
"dlls/dsound/tests/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/dsound/tests/Makefile" ;;
+ "dlls/dswave/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/dswave/Makefile" ;;
"dlls/gdi/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/gdi/Makefile" ;;
"dlls/gdi/tests/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/gdi/tests/Makefile" ;;
"dlls/glu32/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/glu32/Makefile" ;;
diff --git a/configure.ac b/configure.ac
index ccebdb7..181e379 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1498,6 +1498,7 @@
dlls/dpnhpast/Makefile
dlls/dsound/Makefile
dlls/dsound/tests/Makefile
+dlls/dswave/Makefile
dlls/gdi/Makefile
dlls/gdi/tests/Makefile
dlls/glu32/Makefile
diff --git a/dlls/Makefile.in b/dlls/Makefile.in
index 5c58a49..aea4045 100644
--- a/dlls/Makefile.in
+++ b/dlls/Makefile.in
@@ -46,6 +46,7 @@
dplayx \
dpnhpast \
dsound \
+ dswave \
gdi \
iccvid \
icmp \
@@ -239,6 +240,7 @@
dplayx.dll$(DLLEXT) \
dpnhpast.dll$(DLLEXT) \
dsound.dll$(DLLEXT) \
+ dswave.dll$(DLLEXT) \
gdi32.dll$(DLLEXT) \
iccvid.dll$(DLLEXT) \
icmp.dll$(DLLEXT) \
@@ -446,6 +448,9 @@
dsound.dll$(DLLEXT): dsound/dsound.dll$(DLLEXT)
$(RM) $@ && $(LN_S) dsound/dsound.dll$(DLLEXT) $@
+dswave.dll$(DLLEXT): dswave/dswave.dll$(DLLEXT)
+ $(RM) $@ && $(LN_S) dswave/dswave.dll$(DLLEXT) $@
+
gdi32.dll$(DLLEXT): gdi/gdi32.dll$(DLLEXT)
$(RM) $@ && $(LN_S) gdi/gdi32.dll$(DLLEXT) $@
@@ -840,6 +845,7 @@
libdplayx \
libdpnhpast \
libdsound \
+ libdswave \
libgdi32 \
libglu32 \
libglut32 \
@@ -1086,6 +1092,11 @@
libdsound.a: dsound/dsound.spec.def
$(DLLTOOL) -k -l $@ -d dsound/dsound.spec.def
+libdswave.def: dswave/dswave.spec.def
+ $(RM) $@ && $(LN_S) dswave/dswave.spec.def $@
+libdswave.a: dswave/dswave.spec.def
+ $(DLLTOOL) -k -l $@ -d dswave/dswave.spec.def
+
libgdi32.def: gdi/gdi32.spec.def
$(RM) $@ && $(LN_S) gdi/gdi32.spec.def $@
libgdi32.a: gdi/gdi32.spec.def
@@ -1495,6 +1506,7 @@
dplayx/dplayx.spec.def: $(WINEBUILD)
dpnhpast/dpnhpast.spec.def: $(WINEBUILD)
dsound/dsound.spec.def: $(WINEBUILD)
+dswave/dswave.spec.def: $(WINEBUILD)
gdi/gdi32.spec.def: $(WINEBUILD)
glu32/glu32.spec.def: $(WINEBUILD)
glut32/glut32.spec.def: $(WINEBUILD)
@@ -1611,6 +1623,7 @@
dplayx/dplayx.dll$(DLLEXT): dplayx
dpnhpast/dpnhpast.dll$(DLLEXT): dpnhpast
dsound/dsound.dll$(DLLEXT): dsound
+dswave/dswave.dll$(DLLEXT): dswave
gdi/gdi32.dll$(DLLEXT): gdi
glu32/glu32.dll$(DLLEXT): glu32
glut32/glut32.dll$(DLLEXT): glut32
diff --git a/dlls/dmband/band.c b/dlls/dmband/band.c
index a503e29..b4b13b7 100644
--- a/dlls/dmband/band.c
+++ b/dlls/dmband/band.c
@@ -1,6 +1,6 @@
/* IDirectMusicBand Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,47 +17,51 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmband_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmband);
WINE_DECLARE_DEBUG_CHANNEL(dmfile);
+const GUID IID_IDirectMusicBandPRIVATE = {0xda54db81,0x837d,0x11d1,{0x86,0xbc,0x00,0xc0,0x4f,0xbf,0x8f,0xef}};
+
/*****************************************************************************
* IDirectMusicBandImpl implementation
*/
-/* IDirectMusicBand IUnknown part: */
-HRESULT WINAPI IDirectMusicBandImpl_QueryInterface (LPDIRECTMUSICBAND iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicBandImpl,iface);
-
- if (IsEqualGUID(riid, &IID_IUnknown) ||
- IsEqualGUID(riid, &IID_IDirectMusicBand)) {
- IDirectMusicBandImpl_AddRef(iface);
- *ppobj = This;
+/* IDirectMusicBandImpl IUnknown part: */
+HRESULT WINAPI IDirectMusicBandImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicBandImpl, UnknownVtbl, iface);
+
+ TRACE("(%p, %s, %p)\n", This, debugstr_guid(riid), ppobj);
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPVOID)&This->UnknownVtbl;
+ IDirectMusicBandImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicBand)) {
+ *ppobj = (LPVOID)&This->BandVtbl;
+ IDirectMusicBandImpl_IDirectMusicBand_AddRef ((LPDIRECTMUSICBAND)&This->BandVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
+ *ppobj = (LPVOID)&This->ObjectVtbl;
+ IDirectMusicBandImpl_IDirectMusicObject_AddRef ((LPDIRECTMUSICOBJECT)&This->ObjectVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IPersistStream)) {
+ *ppobj = (LPVOID)&This->PersistStreamVtbl;
+ IDirectMusicBandImpl_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
+
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicBandImpl_AddRef (LPDIRECTMUSICBAND iface)
-{
- ICOM_THIS(IDirectMusicBandImpl,iface);
+ULONG WINAPI IDirectMusicBandImpl_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicBandImpl, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicBandImpl_Release (LPDIRECTMUSICBAND iface)
-{
- ICOM_THIS(IDirectMusicBandImpl,iface);
+ULONG WINAPI IDirectMusicBandImpl_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicBandImpl, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -66,611 +70,348 @@
return ref;
}
-/* IDirectMusicBand IDirectMusicBand part: */
-HRESULT WINAPI IDirectMusicBandImpl_CreateSegment (LPDIRECTMUSICBAND iface, IDirectMusicSegment** ppSegment)
-{
- ICOM_THIS(IDirectMusicBandImpl,iface);
+ICOM_VTABLE(IUnknown) DirectMusicBand_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicBandImpl_IUnknown_QueryInterface,
+ IDirectMusicBandImpl_IUnknown_AddRef,
+ IDirectMusicBandImpl_IUnknown_Release
+};
+/* IDirectMusicBandImpl IDirectMusicBand part: */
+HRESULT WINAPI IDirectMusicBandImpl_IDirectMusicBand_QueryInterface (LPDIRECTMUSICBAND iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicBandImpl, BandVtbl, iface);
+ return IDirectMusicBandImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicBandImpl_IDirectMusicBand_AddRef (LPDIRECTMUSICBAND iface) {
+ ICOM_THIS_MULTI(IDirectMusicBandImpl, BandVtbl, iface);
+ return IDirectMusicBandImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicBandImpl_IDirectMusicBand_Release (LPDIRECTMUSICBAND iface) {
+ ICOM_THIS_MULTI(IDirectMusicBandImpl, BandVtbl, iface);
+ return IDirectMusicBandImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicBandImpl_IDirectMusicBand_CreateSegment (LPDIRECTMUSICBAND iface, IDirectMusicSegment** ppSegment) {
+ ICOM_THIS_MULTI(IDirectMusicBandImpl, BandVtbl, iface);
FIXME("(%p, %p): stub\n", This, ppSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBandImpl_Download (LPDIRECTMUSICBAND iface, IDirectMusicPerformance* pPerformance)
-{
- ICOM_THIS(IDirectMusicBandImpl,iface);
-
+HRESULT WINAPI IDirectMusicBandImpl_IDirectMusicBand_Download (LPDIRECTMUSICBAND iface, IDirectMusicPerformance* pPerformance) {
+ ICOM_THIS_MULTI(IDirectMusicBandImpl, BandVtbl, iface);
FIXME("(%p, %p): stub\n", This, pPerformance);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBandImpl_Unload (LPDIRECTMUSICBAND iface, IDirectMusicPerformance* pPerformance)
-{
- ICOM_THIS(IDirectMusicBandImpl,iface);
-
+HRESULT WINAPI IDirectMusicBandImpl_IDirectMusicBand_Unload (LPDIRECTMUSICBAND iface, IDirectMusicPerformance* pPerformance) {
+ ICOM_THIS_MULTI(IDirectMusicBandImpl, BandVtbl, iface);
FIXME("(%p, %p): stub\n", This, pPerformance);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicBand) DirectMusicBand_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicBand) DirectMusicBand_Band_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicBandImpl_QueryInterface,
- IDirectMusicBandImpl_AddRef,
- IDirectMusicBandImpl_Release,
- IDirectMusicBandImpl_CreateSegment,
- IDirectMusicBandImpl_Download,
- IDirectMusicBandImpl_Unload
+ IDirectMusicBandImpl_IDirectMusicBand_QueryInterface,
+ IDirectMusicBandImpl_IDirectMusicBand_AddRef,
+ IDirectMusicBandImpl_IDirectMusicBand_Release,
+ IDirectMusicBandImpl_IDirectMusicBand_CreateSegment,
+ IDirectMusicBandImpl_IDirectMusicBand_Download,
+ IDirectMusicBandImpl_IDirectMusicBand_Unload
};
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicBand (LPCGUID lpcGUID, LPDIRECTMUSICBAND* ppDMBand, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicBandImpl* dmband;
-
- if (IsEqualGUID (lpcGUID, &IID_IDirectMusicBand)) {
- dmband = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicBandImpl));
- if (NULL == dmband) {
- *ppDMBand = (LPDIRECTMUSICBAND) NULL;
- return E_OUTOFMEMORY;
- }
- dmband->lpVtbl = &DirectMusicBand_Vtbl;
- dmband->ref = 1;
- list_init (&dmband->Instruments);
- *ppDMBand = (LPDIRECTMUSICBAND) dmband;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
+/* IDirectMusicBandImpl IDirectMusicObject part: */
+HRESULT WINAPI IDirectMusicBandImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicBandImpl, ObjectVtbl, iface);
+ return IDirectMusicBandImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
}
-/*****************************************************************************
- * IDirectMusicBandObject implementation
- */
-/* IDirectMusicBandObject IUnknown part: */
-HRESULT WINAPI IDirectMusicBandObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicBandObject,iface);
-
- if (IsEqualGUID (riid, &IID_IUnknown)
- || IsEqualGUID(riid, &IID_IDirectMusicObject)) {
- IDirectMusicBandObject_AddRef(iface);
- *ppobj = This;
- return S_OK;
- } else if (IsEqualGUID (riid, &IID_IPersistStream)) {
- IPersistStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = (LPPERSISTSTREAM)This->pStream;
- return S_OK;
- } else if (IsEqualGUID (riid, &IID_IDirectMusicBand)) {
- IDirectMusicBand_AddRef ((LPDIRECTMUSICBAND)This->pBand);
- *ppobj = (LPDIRECTMUSICBAND)This->pBand;
- return S_OK;
- }
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
+ULONG WINAPI IDirectMusicBandImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicBandImpl, ObjectVtbl, iface);
+ return IDirectMusicBandImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicBandObject_AddRef (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicBandObject,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
+ULONG WINAPI IDirectMusicBandImpl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicBandImpl, ObjectVtbl, iface);
+ return IDirectMusicBandImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicBandObject_Release (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicBandObject,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0)
- {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicBandObject IDirectMusicObject part: */
-HRESULT WINAPI IDirectMusicBandObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicBandObject,iface);
-
+HRESULT WINAPI IDirectMusicBandImpl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicBandImpl, ObjectVtbl, iface);
TRACE("(%p, %p)\n", This, pDesc);
- pDesc = This->pDesc;
-
+ /* I think we shouldn't return pointer here since then values can be changed; it'd be a mess */
+ memcpy (pDesc, This->pDesc, This->pDesc->dwSize);
return S_OK;
}
-HRESULT WINAPI IDirectMusicBandObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicBandObject,iface);
-
- TRACE("(%p, %p)\n", This, pDesc);
- This->pDesc = pDesc;
+HRESULT WINAPI IDirectMusicBandImpl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicBandImpl, ObjectVtbl, iface);
+ TRACE("(%p, %p): setting descriptor:\n", This, pDesc);
+ if (TRACE_ON(dmband)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
+ }
+
+ /* According to MSDN, we should copy only given values, not whole struct */
+ if (pDesc->dwValidData & DMUS_OBJ_OBJECT)
+ memcpy (&This->pDesc->guidObject, &pDesc->guidObject, sizeof (pDesc->guidObject));
+ if (pDesc->dwValidData & DMUS_OBJ_CLASS)
+ memcpy (&This->pDesc->guidClass, &pDesc->guidClass, sizeof (pDesc->guidClass));
+ if (pDesc->dwValidData & DMUS_OBJ_NAME)
+ strncpyW (This->pDesc->wszName, pDesc->wszName, DMUS_MAX_NAME);
+ if (pDesc->dwValidData & DMUS_OBJ_CATEGORY)
+ strncpyW (This->pDesc->wszCategory, pDesc->wszCategory, DMUS_MAX_CATEGORY);
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME)
+ strncpyW (This->pDesc->wszFileName, pDesc->wszFileName, DMUS_MAX_FILENAME);
+ if (pDesc->dwValidData & DMUS_OBJ_VERSION)
+ memcpy (&This->pDesc->vVersion, &pDesc->vVersion, sizeof (pDesc->vVersion));
+ if (pDesc->dwValidData & DMUS_OBJ_DATE)
+ memcpy (&This->pDesc->ftDate, &pDesc->ftDate, sizeof (pDesc->ftDate));
+ if (pDesc->dwValidData & DMUS_OBJ_MEMORY) {
+ memcpy (&This->pDesc->llMemLength, &pDesc->llMemLength, sizeof (pDesc->llMemLength));
+ memcpy (This->pDesc->pbMemData, pDesc->pbMemData, sizeof (pDesc->pbMemData));
+ }
+ if (pDesc->dwValidData & DMUS_OBJ_STREAM) {
+ /* according to MSDN, we copy the stream */
+ IStream_Clone (pDesc->pStream, &This->pDesc->pStream);
+ }
+
+ /* add new flags */
+ This->pDesc->dwValidData |= pDesc->dwValidData;
return S_OK;
}
-HRESULT WINAPI IDirectMusicBandObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicBandObject,iface);
-
- FIXME("(%p, %p, %p): stub\n", This, pStream, pDesc);
-
- return S_OK;
-}
-
-ICOM_VTABLE(IDirectMusicObject) DirectMusicBandObject_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicBandObject_QueryInterface,
- IDirectMusicBandObject_AddRef,
- IDirectMusicBandObject_Release,
- IDirectMusicBandObject_GetDescriptor,
- IDirectMusicBandObject_SetDescriptor,
- IDirectMusicBandObject_ParseDescriptor
-};
-
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicBandObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicBandObject *obj;
-
- TRACE("(%p,%p,%p)\n", lpcGUID, ppObject, pUnkOuter);
- if (IsEqualGUID (lpcGUID, &IID_IDirectMusicObject)) {
- obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicBandObject));
- if (NULL == obj) {
- *ppObject = (LPDIRECTMUSICOBJECT) NULL;
- return E_OUTOFMEMORY;
- }
- obj->lpVtbl = &DirectMusicBandObject_Vtbl;
- obj->ref = 1;
- /* prepare IPersistStream */
- obj->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicBandObjectStream));
- obj->pStream->lpVtbl = &DirectMusicBandObjectStream_Vtbl;
- obj->pStream->ref = 1;
- obj->pStream->pParentObject = obj;
- /* prepare IDirectMusicBand */
- DMUSIC_CreateDirectMusicBand (&IID_IDirectMusicBand, (LPDIRECTMUSICBAND*)&obj->pBand, NULL);
- obj->pBand->pObject = obj;
- *ppObject = (LPDIRECTMUSICOBJECT) obj;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
-}
-
-/*****************************************************************************
- * IDirectMusicBandObjectStream implementation
- */
-/* IDirectMusicBandObjectStream IUnknown part: */
-HRESULT WINAPI IDirectMusicBandObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicBandObjectStream,iface);
-
- if (IsEqualGUID(riid, &IID_IUnknown)
- || IsEqualGUID(riid, &IID_IPersistStream)) {
- IDirectMusicBandObjectStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicBandObjectStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicBandObjectStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicBandObjectStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicBandObjectStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicBandObjectStream IPersist part: */
-HRESULT WINAPI IDirectMusicBandObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- return E_NOTIMPL;
-}
-
-/* IDirectMusicBandObjectStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicBandObjectStream_IsDirty (LPPERSISTSTREAM iface)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicBandObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
- ICOM_THIS(IDirectMusicBandObjectStream,iface);
- FOURCC chunkID;
- DWORD chunkSize, StreamSize, StreamCount, ListSize[3], ListCount[3];
+HRESULT WINAPI IDirectMusicBandImpl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc) {
+ DMUS_PRIVATE_CHUNK Chunk;
+ DWORD StreamSize, StreamCount, ListSize[1], ListCount[1];
LARGE_INTEGER liMove; /* used when skipping chunks */
- DMUS_IO_REFERENCE tempReferenceHeader;
- DMUS_OBJECTDESC ObjDesc;
- IDirectMusicBandImpl* pBand = This->pParentObject->pBand; /* that's where we load data to */
- LPDIRECTMUSICLOADER pLoader;
- LPDIRECTMUSICGETLOADER pGetLoader;
+
+ TRACE("(%p, %p)\n", pStream, pDesc);
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(DWORD), NULL);
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
+ /* FIXME: should this be determined from stream? */
+ pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&pDesc->guidClass, &CLSID_DirectMusicBand, sizeof(CLSID));
+
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
case FOURCC_RIFF: {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(chunkID));
- StreamSize = chunkSize - sizeof(FOURCC);
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ StreamSize = Chunk.dwSize - sizeof(FOURCC);
StreamCount = 0;
- switch (chunkID) {
- case DMUS_FOURCC_BAND_FORM: {
- TRACE_(dmfile)(": band form\n");
- do {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
- StreamCount += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
- case DMUS_FOURCC_GUID_CHUNK: {
- TRACE_(dmfile)(": GUID chunk\n");
- IStream_Read (pStm, pBand->guidID, chunkSize, NULL);
- break;
- }
- case DMUS_FOURCC_VERSION_CHUNK: {
- TRACE_(dmfile)(": version chunk\n");
- IStream_Read (pStm, pBand->vVersion, chunkSize, NULL);
- break;
- }
- case FOURCC_LIST: {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(chunkID));
- ListSize[0] = chunkSize - sizeof(FOURCC);
- ListCount[0] = 0;
- switch (chunkID) {
- case DMUS_FOURCC_UNFO_LIST: {
- TRACE_(dmfile)(": UNFO list\n");
- do {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
- ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
- /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
- (though strings seem to be valid unicode) */
- case mmioFOURCC('I','N','A','M'):
- case DMUS_FOURCC_UNAM_CHUNK: {
- TRACE_(dmfile)(": name chunk\n");
- pBand->wzName = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, chunkSize);
- IStream_Read (pStm, pBand->wzName, chunkSize, NULL);
- break;
- }
- case mmioFOURCC('I','A','R','T'):
- case DMUS_FOURCC_UART_CHUNK: {
- TRACE_(dmfile)(": artist chunk\n");
- pBand->wzArtist = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, chunkSize);
- IStream_Read (pStm, pBand->wzArtist, chunkSize, NULL);
- break;
- }
- case mmioFOURCC('I','C','O','P'):
- case DMUS_FOURCC_UCOP_CHUNK: {
- TRACE_(dmfile)(": copyright chunk\n");
- pBand->wzCopyright = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, chunkSize);
- IStream_Read (pStm, pBand->wzCopyright, chunkSize, NULL);
- break;
- }
- case mmioFOURCC('I','S','B','J'):
- case DMUS_FOURCC_USBJ_CHUNK: {
- TRACE_(dmfile)(": subject chunk\n");
- pBand->wzSubject = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, chunkSize);
- IStream_Read (pStm, pBand->wzSubject, chunkSize, NULL);
- break;
- }
- case mmioFOURCC('I','C','M','T'):
- case DMUS_FOURCC_UCMT_CHUNK: {
- TRACE_(dmfile)(": comment chunk\n");
- pBand->wzComment = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, chunkSize);
- IStream_Read (pStm, pBand->wzComment, chunkSize, NULL);
- break;
- }
- default: {
- TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
- break;
- }
- }
- TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
- } while (ListCount[0] < ListSize[0]);
- break;
- }
- case DMUS_FOURCC_INSTRUMENTS_LIST: {
- TRACE_(dmfile)(": instruments list\n");
- do {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
- ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
- case FOURCC_LIST: {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(chunkID));
- ListSize[1] = chunkSize - sizeof(FOURCC);
- ListCount[1] = 0;
- switch (chunkID) {
- case DMUS_FOURCC_INSTRUMENT_LIST: {
- /* init new instrument list entry */
- LPDMUS_PRIVATE_INSTRUMENT pNewInstrument = (LPDMUS_PRIVATE_INSTRUMENT) HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(DMUS_PRIVATE_INSTRUMENT));
- TRACE_(dmfile)(": instrument list\n");
- do {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
- ListCount[1] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
- case DMUS_FOURCC_INSTRUMENT_CHUNK: {
- TRACE_(dmfile)(": band instrument header\n");
- IStream_Read (pStm, &pNewInstrument->pInstrument, chunkSize, NULL);
- break;
- }
- case FOURCC_LIST: {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(chunkID));
- ListSize[2] = chunkSize - sizeof(FOURCC);
- ListCount[2] = 0;
- switch (chunkID) {
- case DMUS_FOURCC_REF_LIST: {
- TRACE_(dmfile)(": reference list\n");
- ZeroMemory ((LPVOID)&ObjDesc, sizeof(DMUS_OBJECTDESC));
- do {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
- ListCount[2] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
- case DMUS_FOURCC_REF_CHUNK: {
- TRACE_(dmfile)(": reference header chunk\n");
- IStream_Read (pStm, &tempReferenceHeader, chunkSize, NULL);
- /* copy retrieved data to DMUS_OBJECTDESC */
- ObjDesc.dwSize = sizeof(DMUS_OBJECTDESC);
- ObjDesc.guidClass = tempReferenceHeader.guidClassID;
- ObjDesc.dwValidData = tempReferenceHeader.dwValidData;
- break;
- }
- case DMUS_FOURCC_GUID_CHUNK: {
- TRACE_(dmfile)(": guid chunk\n");
- IStream_Read (pStm, &ObjDesc.guidObject, chunkSize, NULL);
- break;
- }
- case DMUS_FOURCC_DATE_CHUNK: {
- TRACE_(dmfile)(": file date chunk\n");
- IStream_Read (pStm, &ObjDesc.ftDate, chunkSize, NULL);
- break;
- }
- case DMUS_FOURCC_NAME_CHUNK: {
- TRACE_(dmfile)(": name chunk\n");
- IStream_Read (pStm, &ObjDesc.wszName, chunkSize, NULL);
- break;
- }
- case DMUS_FOURCC_FILE_CHUNK: {
- TRACE_(dmfile)(": file name chunk\n");
- IStream_Read (pStm, &ObjDesc.wszFileName, chunkSize, NULL);
- break;
- }
- case DMUS_FOURCC_CATEGORY_CHUNK: {
- TRACE_(dmfile)(": category chunk\n");
- IStream_Read (pStm, &ObjDesc.wszCategory, chunkSize, NULL);
- break;
- }
- case DMUS_FOURCC_VERSION_CHUNK: {
- TRACE_(dmfile)(": version chunk\n");
- IStream_Read (pStm, &ObjDesc.vVersion, chunkSize, NULL);
- break;
- }
- default: {
- TRACE_(dmfile)(": unknown chunk (skipping)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip this chunk */
- break;
- }
- }
- TRACE_(dmfile)(": ListCount[2] = %ld < ListSize[2] = %ld\n", ListCount[2], ListSize[2]);
- } while (ListCount[2] < ListSize[2]);
- /* let's see what we have */
- TRACE_(dmfile)(": (READ): reference: dwSize = %ld; dwValidData = %ld; guidObject = %s; guidClass = %s; \
-vVersion = %08lx,%08lx; wszName = %s; wszCategory = %s; wszFileName = %s\n", ObjDesc.dwSize, ObjDesc.dwValidData, debugstr_guid(&ObjDesc.guidObject), debugstr_guid(&ObjDesc.guidClass),
-ObjDesc.vVersion.dwVersionMS, ObjDesc.vVersion.dwVersionLS, debugstr_w(ObjDesc.wszName), debugstr_w(ObjDesc.wszCategory), debugstr_w(ObjDesc.wszFileName));
- /* now, let's convience loader to load reference */
- if (IStream_QueryInterface (pStm, &IID_IDirectMusicGetLoader, (LPVOID*)&pGetLoader) == S_OK) {
- if (IDirectMusicGetLoader_GetLoader (pGetLoader, &pLoader) == S_OK) {
- /* load referenced object */
- IDirectMusicObject* pObject;
- if(FAILED(IDirectMusicLoader_GetObject (pLoader, &ObjDesc, &IID_IDirectMusicObject, (LPVOID*)&pObject)))
- /* acquire collection from loaded referenced object */
- if(FAILED(IDirectMusicObject_QueryInterface (pObject, &IID_IDirectMusicCollection, (LPVOID*)&pNewInstrument->ppReferenceCollection)))
- IDirectMusicLoader_Release (pLoader);
- }
- IDirectMusicGetLoader_Release (pGetLoader);
- } else {
- ERR("Could not get IDirectMusicGetLoader... reference will not be loaded :(\n");
- /* E_FAIL */
- }
- break;
- }
- default: {
- TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
- return E_FAIL;
- }
- }
- break;
- }
- default: {
- TRACE_(dmfile)(": unknown chunk (skipping)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip this chunk */
- break;
- }
- }
- TRACE_(dmfile)(": ListCount[1] = %ld < ListSize[1] = %ld\n", ListCount[1], ListSize[1]);
- } while (ListCount[1] < ListSize[1]);
- /* hmm... in dxdiag segment's band there aren't any references, but loader still desperatly
- loads default collection... does that mean that if there is no reference, use default?
- */
- if (!pNewInstrument->ppReferenceCollection) {
- TRACE_(dmfile)(": (READ): loading default collection (as no specific reference was made)\n");
- ZeroMemory ((LPVOID)&ObjDesc, sizeof(DMUS_OBJECTDESC));
- ObjDesc.dwSize = sizeof(DMUS_OBJECTDESC);
- ObjDesc.dwValidData = DMUS_OBJ_CLASS | DMUS_OBJ_OBJECT;
- ObjDesc.guidObject = GUID_DefaultGMCollection;
- ObjDesc.guidClass = CLSID_DirectMusicCollection;
- if (SUCCEEDED(IStream_QueryInterface (pStm, &IID_IDirectMusicGetLoader, (LPVOID*)&pGetLoader))) {
- if (SUCCEEDED(IDirectMusicGetLoader_GetLoader (pGetLoader, &pLoader))) {
- IDirectMusicObject* pObject;
- if (SUCCEEDED(IDirectMusicLoader_GetObject (pLoader, &ObjDesc, &IID_IDirectMusicObject, (LPVOID*)&pObject))) {
- IDirectMusicObject_QueryInterface (pObject, &IID_IDirectMusicCollection, (LPVOID*)&pNewInstrument->ppReferenceCollection);
- IDirectMusicLoader_Release (pLoader);
- }
- }
- IDirectMusicGetLoader_Release (pGetLoader);
- } else {
- ERR("Could not get IDirectMusicGetLoader... reference will not be loaded :(\n");
- /* E_FAIL */
- }
- }
- list_add_tail (&This->pParentObject->pBand->Instruments, &pNewInstrument->entry);
- break;
- }
- default: {
- TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
- return E_FAIL;
- }
- }
- break;
- }
- default: {
- TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
- break;
- }
- }
- TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
- } while (ListCount[0] < ListSize[0]);
- break;
- }
- default: {
- TRACE_(dmfile)(": unknown (skipping)\n");
- liMove.QuadPart = chunkSize - sizeof(FOURCC);
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
- break;
- }
- }
- break;
- }
- default: {
- TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
- break;
- }
+ if (Chunk.fccID == DMUS_FOURCC_BAND_FORM) {
+ TRACE_(dmfile)(": band form\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ StreamCount += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case DMUS_FOURCC_GUID_CHUNK: {
+ TRACE_(dmfile)(": GUID chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read (pStream, &pDesc->guidObject, Chunk.dwSize, NULL);
+ break;
}
- TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
- } while (StreamCount < StreamSize);
- break;
- }
- default: {
- TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
- liMove.QuadPart = StreamSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
- return E_FAIL;
- }
+ case DMUS_FOURCC_VERSION_CHUNK: {
+ TRACE_(dmfile)(": version chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read (pStream, &pDesc->vVersion, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CATEGORY_CHUNK: {
+ TRACE_(dmfile)(": category chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_CATEGORY;
+ IStream_Read (pStream, pDesc->wszCategory, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[0] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[0] = 0;
+ switch (Chunk.fccID) {
+ /* evil M$ UNFO list, which can (!?) contain INFO elements */
+ case DMUS_FOURCC_UNFO_LIST: {
+ TRACE_(dmfile)(": UNFO list\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
+ (though strings seem to be valid unicode) */
+ case mmioFOURCC('I','N','A','M'):
+ case DMUS_FOURCC_UNAM_CHUNK: {
+ TRACE_(dmfile)(": name chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_NAME;
+ IStream_Read (pStream, pDesc->wszName, Chunk.dwSize, NULL);
+ break;
+ }
+ case mmioFOURCC('I','A','R','T'):
+ case DMUS_FOURCC_UART_CHUNK: {
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','O','P'):
+ case DMUS_FOURCC_UCOP_CHUNK: {
+ TRACE_(dmfile)(": copyright chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','S','B','J'):
+ case DMUS_FOURCC_USBJ_CHUNK: {
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','M','T'):
+ case DMUS_FOURCC_UCMT_CHUNK: {
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
+ } while (StreamCount < StreamSize);
+ break;
+ } else {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = StreamSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
}
+
TRACE_(dmfile)(": reading finished\n");
break;
}
default: {
TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
- return E_FAIL;
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return DMUS_E_INVALIDFILE;
}
+ }
+
+ TRACE(": returning descriptor:\n");
+ if (TRACE_ON(dmband)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
}
- /* DEBUG: dumps whole band object tree: */
- if (TRACE_ON(dmband)) {
- int r = 0;
- DMUS_PRIVATE_INSTRUMENT *tmpEntry;
- struct list *listEntry;
-
- TRACE("*** IDirectMusicBand (%p) ***\n", pBand);
- if (pBand->guidID)
- TRACE(" - GUID = %s\n", debugstr_guid(pBand->guidID));
- if (pBand->vVersion)
- TRACE(" - Version = %i,%i,%i,%i\n", (pBand->vVersion->dwVersionMS >> 8) && 0x0000FFFF, pBand->vVersion->dwVersionMS && 0x0000FFFF, \
- (pBand->vVersion->dwVersionLS >> 8) && 0x0000FFFF, pBand->vVersion->dwVersionLS && 0x0000FFFF);
- if (pBand->wzName)
- TRACE(" - Name = %s\n", debugstr_w(pBand->wzName));
- if (pBand->wzArtist)
- TRACE(" - Artist = %s\n", debugstr_w(pBand->wzArtist));
- if (pBand->wzCopyright)
- TRACE(" - Copyright = %s\n", debugstr_w(pBand->wzCopyright));
- if (pBand->wzSubject)
- TRACE(" - Subject = %s\n", debugstr_w(pBand->wzSubject));
- if (pBand->wzComment)
- TRACE(" - Comment = %s\n", debugstr_w(pBand->wzComment));
-
- TRACE(" - Instruments:\n");
-
- LIST_FOR_EACH (listEntry, &This->pParentObject->pBand->Instruments) {
- tmpEntry = LIST_ENTRY( listEntry, DMUS_PRIVATE_INSTRUMENT, entry );
- TRACE(" - Instrument[%i]:\n", r);
- TRACE(" - Instrument header:\n");
- TRACE(" - dwPatch = %ld\n", tmpEntry->pInstrument.dwPatch);
- TRACE(" - dwAssignPatch = %ld\n", tmpEntry->pInstrument.dwAssignPatch);
- TRACE(" - dwNoteRanges[4] = %ln\n", tmpEntry->pInstrument.dwNoteRanges);
- TRACE(" - dwPChannel = %ld\n", tmpEntry->pInstrument.dwPChannel);
- TRACE(" - dwFlags = %ld\n", tmpEntry->pInstrument.dwFlags);
- TRACE(" - bPan = %i\n", tmpEntry->pInstrument.bPan);
- TRACE(" - bVolume = %i\n", tmpEntry->pInstrument.bVolume);
- TRACE(" - nTranspose = %i\n", tmpEntry->pInstrument.nTranspose);
- TRACE(" - dwChannelPriority = %ld\n", tmpEntry->pInstrument.dwChannelPriority);
- TRACE(" - nPitchBendRange = %i\n", tmpEntry->pInstrument.nPitchBendRange);
- TRACE(" - Reference collection: %p\n", tmpEntry->ppReferenceCollection);
- r++;
- }
- }
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBandObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicBandObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
- return E_NOTIMPL;
-}
-
-ICOM_VTABLE(IPersistStream) DirectMusicBandObjectStream_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicObject) DirectMusicBand_Object_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicBandObjectStream_QueryInterface,
- IDirectMusicBandObjectStream_AddRef,
- IDirectMusicBandObjectStream_Release,
- IDirectMusicBandObjectStream_GetClassID,
- IDirectMusicBandObjectStream_IsDirty,
- IDirectMusicBandObjectStream_Load,
- IDirectMusicBandObjectStream_Save,
- IDirectMusicBandObjectStream_GetSizeMax
+ IDirectMusicBandImpl_IDirectMusicObject_QueryInterface,
+ IDirectMusicBandImpl_IDirectMusicObject_AddRef,
+ IDirectMusicBandImpl_IDirectMusicObject_Release,
+ IDirectMusicBandImpl_IDirectMusicObject_GetDescriptor,
+ IDirectMusicBandImpl_IDirectMusicObject_SetDescriptor,
+ IDirectMusicBandImpl_IDirectMusicObject_ParseDescriptor
};
+
+/* IDirectMusicBandImpl IPersistStream part: */
+HRESULT WINAPI IDirectMusicBandImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicBandImpl, PersistStreamVtbl, iface);
+ return IDirectMusicBandImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicBandImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicBandImpl, PersistStreamVtbl, iface);
+ return IDirectMusicBandImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicBandImpl_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicBandImpl, PersistStreamVtbl, iface);
+ return IDirectMusicBandImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicBandImpl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicBandImpl_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicBandImpl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
+ ICOM_THIS_MULTI(IDirectMusicBandImpl, PersistStreamVtbl, iface);
+ FIXME("(%p,%p): loading not implemented yet\n", This, pStm);
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicBandImpl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicBandImpl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
+ return E_NOTIMPL;
+}
+
+ICOM_VTABLE(IPersistStream) DirectMusicBand_PersistStream_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicBandImpl_IPersistStream_QueryInterface,
+ IDirectMusicBandImpl_IPersistStream_AddRef,
+ IDirectMusicBandImpl_IPersistStream_Release,
+ IDirectMusicBandImpl_IPersistStream_GetClassID,
+ IDirectMusicBandImpl_IPersistStream_IsDirty,
+ IDirectMusicBandImpl_IPersistStream_Load,
+ IDirectMusicBandImpl_IPersistStream_Save,
+ IDirectMusicBandImpl_IPersistStream_GetSizeMax
+};
+
+/* for ClassFactory */
+HRESULT WINAPI DMUSIC_CreateDirectMusicBandImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicBandImpl* obj;
+
+ obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicBandImpl));
+ if (NULL == obj) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ obj->UnknownVtbl = &DirectMusicBand_Unknown_Vtbl;
+ obj->BandVtbl = &DirectMusicBand_Band_Vtbl;
+ obj->ObjectVtbl = &DirectMusicBand_Object_Vtbl;
+ obj->PersistStreamVtbl = &DirectMusicBand_PersistStream_Vtbl;
+ obj->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(obj->pDesc);
+ obj->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&obj->pDesc->guidClass, &CLSID_DirectMusicBand, sizeof (CLSID));
+ obj->ref = 0; /* will be inited by QueryInterface */
+ list_init (&obj->Instruments);
+
+ return IDirectMusicBandImpl_IUnknown_QueryInterface ((LPUNKNOWN)&obj->UnknownVtbl, lpcGUID, ppobj);
+}
diff --git a/dlls/dmband/bandtrack.c b/dlls/dmband/bandtrack.c
index 11edaf5..d094acc 100644
--- a/dlls/dmband/bandtrack.c
+++ b/dlls/dmband/bandtrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicBandTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,53 +17,45 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmband_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmband);
WINE_DECLARE_DEBUG_CHANNEL(dmfile);
-
/*****************************************************************************
* IDirectMusicBandTrack implementation
*/
/* IDirectMusicBandTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicBandTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicBandTrack,iface);
+HRESULT WINAPI IDirectMusicBandTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicBandTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicBandTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicBandTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicBandTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicBandTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
+
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicBandTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicBandTrack,iface);
+ULONG WINAPI IDirectMusicBandTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicBandTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicBandTrack,iface);
+ULONG WINAPI IDirectMusicBandTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -72,37 +64,49 @@
return ref;
}
-/* IDirectMusicBandTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicBandTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicBandTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicBandTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicBandTrack_IUnknown_QueryInterface,
+ IDirectMusicBandTrack_IUnknown_AddRef,
+ IDirectMusicBandTrack_IUnknown_Release
+};
+/* IDirectMusicBandTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, TrackVtbl, iface);
+ return IDirectMusicBandTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicBandTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, TrackVtbl, iface);
+ return IDirectMusicBandTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicBandTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, TrackVtbl, iface);
+ return IDirectMusicBandTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBandTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicBandTrack,iface);
-
+HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBandTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
-{
- ICOM_THIS(IDirectMusicBandTrack,iface);
-
+HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBandTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicBandTrack,iface);
+HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): semi-stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
/* Sends following pMSG:
@@ -111,92 +115,24 @@
- DMUS_CHANNEL_PRIORITY_PMSG
- DMUS_MIDI_PMSG
*/
-
-#if 0
- /* get the graph and segment */
- IDirectMusicSegment* pSegment; /* needed for getting track group */
- IDirectMusicGraph* pGraph; /* needed for PMsg stamping */
- DWORD dwGroup;
- if (FAILED(IDirectMusicSegmentState_GetSegment (pSegSt, &pSegment))) {
- ERR("failed to get segment\n");
- return E_FAIL;
- }
- /* HINT: M$ lies when saying that we can query segment for graph; one can obtain graph only
- by querying segment state or performance */
- if (FAILED(IDirectMusicSegmentState_QueryInterface (pSegSt, &IID_IDirectMusicGraph, (LPVOID*)&pGraph))) {
- ERR("failed to get graph on segment\n");
- return E_FAIL;
- }
- IDirectMusicSegment_GetTrackGroup (pSegment, (LPDIRECTMUSICTRACK)iface, &dwGroup);
-
- /* iterate through band list to get appropriate band */
- DMUS_PRIVATE_BAND *tmpBandEntry;
- struct list *listEntry;
- IDirectMusicBandImpl* pBand = NULL;
- LIST_FOR_EACH (listEntry, &This->Bands) {
- tmpBandEntry = LIST_ENTRY (listEntry, DMUS_PRIVATE_BAND, entry);
- /* FIXME: time checking is far from perfect: i don't know if times are properly compared and
- in case of v.2 header i don't know which time to take; besides, first band with smaller
- time will be taken */
- if (((tmpBandEntry->pBandHeader.dwVersion = 1) && (tmpBandEntry->pBandHeader.lBandTime < mtStart))
- || ((tmpBandEntry->pBandHeader.dwVersion = 2) && (tmpBandEntry->pBandHeader.lBandTimeLogical < mtStart))) {
- pBand = tmpBandEntry->ppBand;
- break;
- }
-
- }
-
- int r = 0; /* TEST */
- /* now iterate through instruments list on selected band and fill and send all messages related to it */
- DMUS_PRIVATE_INSTRUMENT *tmpInstrumentEntry;
- LIST_FOR_EACH (listEntry, &pBand->Instruments) {
- tmpInstrumentEntry = LIST_ENTRY (listEntry, DMUS_PRIVATE_INSTRUMENT, entry);
- FIXME("parsing instrument [%i]\n", r);
- r++;
-
- /* allocate the msg */
- DMUS_CHANNEL_MIDI_PMSG* pMIDI = NULL;
- if (FAILED(IDirectMusicPerformance_AllocPMsg (pPerf, sizeof(DMUS_MIDI_PMSG), (DMUS_PMSG**)&pMIDI))) {
- ERR("could not allocate PMsg\n");
- }
-
- /* HERE THE MESSAGE DATA SHOULD BE PUT IN */
-
- if (FAILED(IDirectMusicGraph_StampPMsg (pGraph, (DMUS_PMSG*)pMIDI))) {
- ERR("could not stamp PMsg\n");
- }
-
- if (FAILED(IDirectMusicPerformance_SendPMsg (pPerf, (DMUS_PMSG*)pMIDI))) {
- ERR("could not send PMsg\n");
- }
-
- }
-#endif
return S_OK;
}
-HRESULT WINAPI IDirectMusicBandTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicBandTrack,iface);
-
+HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBandTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicBandTrack,iface);
-
+HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBandTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicBandTrack,iface);
+HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
if (IsEqualGUID (rguidType, &GUID_BandParam)
@@ -218,497 +154,144 @@
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicBandTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicBandTrack,iface);
-
+HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBandTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicBandTrack,iface);
-
+HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBandTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicBandTrack,iface);
-
+HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicBandTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicBandTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicBandTrack,iface);
-
+HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBandTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicBandTrack,iface);
-
+HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBandTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicBandTrack,iface);
-
+HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBandTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicBandTrack,iface);
-
+HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBandTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicBandTrack,iface);
-
+HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicBandTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicBandTrack_DirectMusicTrack_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicBandTrack_QueryInterface,
- IDirectMusicBandTrack_AddRef,
- IDirectMusicBandTrack_Release,
- IDirectMusicBandTrack_Init,
- IDirectMusicBandTrack_InitPlay,
- IDirectMusicBandTrack_EndPlay,
- IDirectMusicBandTrack_Play,
- IDirectMusicBandTrack_GetParam,
- IDirectMusicBandTrack_SetParam,
- IDirectMusicBandTrack_IsParamSupported,
- IDirectMusicBandTrack_AddNotificationType,
- IDirectMusicBandTrack_RemoveNotificationType,
- IDirectMusicBandTrack_Clone,
- IDirectMusicBandTrack_PlayEx,
- IDirectMusicBandTrack_GetParamEx,
- IDirectMusicBandTrack_SetParamEx,
- IDirectMusicBandTrack_Compose,
- IDirectMusicBandTrack_Join
+ IDirectMusicBandTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicBandTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicBandTrack_IDirectMusicTrack_Release,
+ IDirectMusicBandTrack_IDirectMusicTrack_Init,
+ IDirectMusicBandTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicBandTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicBandTrack_IDirectMusicTrack_Play,
+ IDirectMusicBandTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicBandTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicBandTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicBandTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicBandTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicBandTrack_IDirectMusicTrack_Clone,
+ IDirectMusicBandTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicBandTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicBandTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicBandTrack_IDirectMusicTrack_Compose,
+ IDirectMusicBandTrack_IDirectMusicTrack_Join
+};
+
+/* IDirectMusicBandTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicBandTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, PersistStreamVtbl, iface);
+ return IDirectMusicBandTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicBandTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, PersistStreamVtbl, iface);
+ return IDirectMusicBandTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicBandTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, PersistStreamVtbl, iface);
+ return IDirectMusicBandTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicBandTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicBandTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicBandTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
+ ICOM_THIS_MULTI(IDirectMusicBandTrack, PersistStreamVtbl, iface);
+ FIXME("(%p,%p): loading not implemented yet\n", This, pStm);
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicBandTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicBandTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
+ return E_NOTIMPL;
+}
+
+ICOM_VTABLE(IPersistStream) DirectMusicBandTrack_PerststStream_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicBandTrack_IPersistStream_QueryInterface,
+ IDirectMusicBandTrack_IPersistStream_AddRef,
+ IDirectMusicBandTrack_IPersistStream_Release,
+ IDirectMusicBandTrack_IPersistStream_GetClassID,
+ IDirectMusicBandTrack_IPersistStream_IsDirty,
+ IDirectMusicBandTrack_IPersistStream_Load,
+ IDirectMusicBandTrack_IPersistStream_Save,
+ IDirectMusicBandTrack_IPersistStream_GetSizeMax
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicBandTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
+HRESULT WINAPI DMUSIC_CreateDirectMusicBandTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
IDirectMusicBandTrack* track;
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicBandTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicBandTrack_Vtbl;
- track->ref = 1;
- list_init (&track->Bands);
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicBandTrackStream));
- track->pStream->lpVtbl = &DirectMusicBandTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicBandTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
}
- WARN("No interface found\n");
+ track->UnknownVtbl = &DirectMusicBandTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicBandTrack_DirectMusicTrack_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicBandTrack_PerststStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicBandTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
+ list_init (&track->Bands);
- return E_NOINTERFACE;
+ return IDirectMusicBandTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
}
-
-
-/*****************************************************************************
- * IDirectMusicBandTrackStream implementation
- */
-/* IDirectMusicBandTrackStream IUnknown part: */
-HRESULT WINAPI IDirectMusicBandTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicBandTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicBandTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicBandTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicBandTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicBandTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicBandTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicBandTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicBandTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- return E_NOTIMPL;
-}
-
-/* IDirectMusicBandTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicBandTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicBandTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
- ICOM_THIS(IDirectMusicBandTrackStream,iface);
- FOURCC chunkID;
- DWORD chunkSize, StreamSize, StreamCount, ListSize[3], ListCount[3];
- LARGE_INTEGER liMove; /* used when skipping chunks */
- DMUS_OBJECTDESC ObjDesc;
- IDirectMusicBandTrack* pTrack = This->pParentTrack; /* that's where we load data to */
- DMUS_IO_BAND_ITEM_HEADER tempHeaderV1;
- DMUS_IO_BAND_ITEM_HEADER2 tempHeaderV2;
- LPDIRECTMUSICLOADER pLoader;
- LPDIRECTMUSICGETLOADER pGetLoader;
-
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(DWORD), NULL);
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
- case FOURCC_RIFF: {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(chunkID));
- StreamSize = chunkSize - sizeof(FOURCC);
- StreamCount = 0;
- switch (chunkID) {
- case DMUS_FOURCC_BANDTRACK_FORM: {
- TRACE_(dmfile)(": band track form\n");
- do {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
- StreamCount += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
- case DMUS_FOURCC_BANDTRACK_CHUNK: {
- TRACE_(dmfile)(": band track header chunk\n");
- IStream_Read (pStm, pTrack->btkHeader, chunkSize, NULL);
- break;
- }
- case DMUS_FOURCC_GUID_CHUNK: {
- TRACE_(dmfile)(": GUID chunk\n");
- IStream_Read (pStm, pTrack->guidID, chunkSize, NULL);
- break;
- }
- case DMUS_FOURCC_VERSION_CHUNK: {
- TRACE_(dmfile)(": version chunk\n");
- IStream_Read (pStm, pTrack->vVersion, chunkSize, NULL);
- break;
- }
- case FOURCC_LIST: {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(chunkID));
- ListSize[0] = chunkSize - sizeof(FOURCC);
- ListCount[0] = 0;
- switch (chunkID) {
- case DMUS_FOURCC_UNFO_LIST: {
- TRACE_(dmfile)(": UNFO list\n");
- do {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
- ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
- /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
- (though strings seem to be valid unicode) */
- case mmioFOURCC('I','N','A','M'):
- case DMUS_FOURCC_UNAM_CHUNK: {
- TRACE_(dmfile)(": name chunk\n");
- pTrack->wzName = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, chunkSize);
- IStream_Read (pStm, pTrack->wzName, chunkSize, NULL);
- break;
- }
- case mmioFOURCC('I','A','R','T'):
- case DMUS_FOURCC_UART_CHUNK: {
- TRACE_(dmfile)(": artist chunk\n");
- pTrack->wzArtist = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, chunkSize);
- IStream_Read (pStm, pTrack->wzArtist, chunkSize, NULL);
- break;
- }
- case mmioFOURCC('I','C','O','P'):
- case DMUS_FOURCC_UCOP_CHUNK: {
- TRACE_(dmfile)(": copyright chunk\n");
- pTrack->wzCopyright = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, chunkSize);
- IStream_Read (pStm, pTrack->wzCopyright, chunkSize, NULL);
- break;
- }
- case mmioFOURCC('I','S','B','J'):
- case DMUS_FOURCC_USBJ_CHUNK: {
- TRACE_(dmfile)(": subject chunk\n");
- pTrack->wzSubject = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, chunkSize);
- IStream_Read (pStm, pTrack->wzSubject, chunkSize, NULL);
- break;
- }
- case mmioFOURCC('I','C','M','T'):
- case DMUS_FOURCC_UCMT_CHUNK: {
- TRACE_(dmfile)(": comment chunk\n");
- pTrack->wzComment = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, chunkSize);
- IStream_Read (pStm, pTrack->wzComment, chunkSize, NULL);
- break;
- }
- default: {
- TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
- break;
- }
- }
- TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
- } while (ListCount[0] < ListSize[0]);
- break;
- }
- case DMUS_FOURCC_BANDS_LIST: {
- TRACE_(dmfile)(": bands list\n");
- do {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
- ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
- case FOURCC_LIST: {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(chunkID));
- ListSize[1] = chunkSize - sizeof(FOURCC);
- ListCount[1] = 0;
- switch (chunkID) {
- case DMUS_FOURCC_BAND_LIST: {
- /* init new band list entry */
- LPDMUS_PRIVATE_BAND pNewBand = (LPDMUS_PRIVATE_BAND) HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(DMUS_PRIVATE_BAND));
- TRACE_(dmfile)(": band list\n");
- do {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
- ListCount[1] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
- case DMUS_FOURCC_BANDITEM_CHUNK: {
- TRACE_(dmfile)(": band item header (v.1) chunk\n");
- IStream_Read (pStm, &tempHeaderV1, chunkSize, NULL);
- /* now transfer data to universal header */
- pNewBand->pBandHeader.dwVersion = 1;
- pNewBand->pBandHeader.lBandTime = tempHeaderV1.lBandTime;
- break;
- }
- case DMUS_FOURCC_BANDITEM_CHUNK2: {
- TRACE_(dmfile)(": band item header (v.2) chunk\n");
- IStream_Read (pStm, &tempHeaderV2, chunkSize, NULL);
- /* now transfer data to universal header */
- pNewBand->pBandHeader.dwVersion = 2;
- pNewBand->pBandHeader.lBandTimeLogical = tempHeaderV2.lBandTimeLogical;
- pNewBand->pBandHeader.lBandTimePhysical = tempHeaderV2.lBandTimePhysical;
- break;
- }
- case FOURCC_RIFF: {
- TRACE_(dmfile)(": RIFF chunk (probably band form)\n");
- liMove.QuadPart = 0;
- liMove.QuadPart -= (sizeof(FOURCC) + sizeof(DWORD)); /* goto the beginning of chunk */
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
- /* perform sacrificial ritual so that loader will load band */
- ZeroMemory ((LPVOID)&ObjDesc, sizeof(DMUS_OBJECTDESC));
- ObjDesc.dwSize = sizeof(DMUS_OBJECTDESC);
- ObjDesc.dwValidData = DMUS_OBJ_CLASS | DMUS_OBJ_STREAM;
- ObjDesc.guidClass = CLSID_DirectMusicBand;
- ObjDesc.pStream = pStm;
- /* now pray... */
- if (SUCCEEDED(IStream_QueryInterface (pStm, &IID_IDirectMusicGetLoader, (LPVOID*)&pGetLoader))) {
- if (SUCCEEDED(IDirectMusicGetLoader_GetLoader (pGetLoader, &pLoader))) {
- IDirectMusicObject* pObject;
- if (SUCCEEDED(IDirectMusicLoader_GetObject (pLoader, &ObjDesc, &IID_IDirectMusicObject, (LPVOID*)&pObject))) {
- /* acquire band from loaded object */
- IDirectMusicObject_QueryInterface (pObject, &IID_IDirectMusicBand, (LPVOID*)&pNewBand->ppBand);
- /*IDirectMusicLoader_Release (pLoader);*/
- } else FIXME(": couldn't get band\n");
- }
- IDirectMusicGetLoader_Release (pGetLoader);
- } else {
- ERR("Could not get IDirectMusicGetLoader... reference will not be loaded :(\n");
- /* E_FAIL */
- }
- /* MSDN states that loader returns stream pointer to it's before-reading position,
- which means that we must skip whole (loaded) chunk */
- liMove.QuadPart = sizeof(FOURCC) + sizeof(DWORD) + chunkID;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
- break;
- }
- default: {
- TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
- break;
- }
- }
- TRACE_(dmfile)(": ListCount[1] = %ld < ListSize[1] = %ld\n", ListCount[1], ListSize[1]);
- } while (ListCount[1] < ListSize[1]);
- list_add_tail (&pTrack->Bands, &pNewBand->entry);
- break;
- }
- default: {
- TRACE_(dmfile)(": unknown (skipping)\n");
- liMove.QuadPart = chunkSize - sizeof(FOURCC);
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
- break;
- }
- }
- break;
- }
- default: {
- TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
- break;
- }
- }
- TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
- } while (ListCount[0] < ListSize[0]);
- break;
- }
- default: {
- TRACE_(dmfile)(": unknown (skipping)\n");
- liMove.QuadPart = chunkSize - sizeof(FOURCC);
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
- break;
- }
- }
- break;
- }
- default: {
- TRACE_(dmfile)(": unknown chunk (skipping)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip this chunk */
- break;
- }
- }
- TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
- } while (StreamCount < StreamSize);
- break;
- }
- default: {
- TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
- liMove.QuadPart = StreamSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
- return E_FAIL;
- }
- }
- TRACE_(dmfile)(": reading finished\n");
- break;
- }
- default: {
- TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
- return E_FAIL;
- }
- }
-
- /* DEBUG: dumps whole band track object tree: */
- if (TRACE_ON(dmband)) {
- int r = 0;
- DMUS_PRIVATE_BAND *tmpEntry;
- struct list *listEntry;
-
- TRACE("*** IDirectMusicBandTrack (%p) ***\n", pTrack);
- if (pTrack->btkHeader) {
- TRACE(" - Band track header:\n");
- TRACE(" - bAutoDownload: %i\n", pTrack->btkHeader->bAutoDownload);
- }
- if (pTrack->guidID)
- TRACE(" - GUID = %s\n", debugstr_guid(pTrack->guidID));
- if (pTrack->vVersion)
- TRACE(" - Version = %i,%i,%i,%i\n", (pTrack->vVersion->dwVersionMS >> 8) && 0x0000FFFF, pTrack->vVersion->dwVersionMS && 0x0000FFFF, \
- (pTrack->vVersion->dwVersionLS >> 8) && 0x0000FFFF, pTrack->vVersion->dwVersionLS && 0x0000FFFF);
- if (pTrack->wzName)
- TRACE(" - Name = %s\n", debugstr_w(pTrack->wzName));
- if (pTrack->wzArtist)
- TRACE(" - Artist = %s\n", debugstr_w(pTrack->wzArtist));
- if (pTrack->wzCopyright)
- TRACE(" - Copyright = %s\n", debugstr_w(pTrack->wzCopyright));
- if (pTrack->wzSubject)
- TRACE(" - Subject = %s\n", debugstr_w(pTrack->wzSubject));
- if (pTrack->wzComment)
- TRACE(" - Comment = %s\n", debugstr_w(pTrack->wzComment));
-
- TRACE(" - Bands:\n");
-
- LIST_FOR_EACH (listEntry, &pTrack->Bands) {
- tmpEntry = LIST_ENTRY( listEntry, DMUS_PRIVATE_BAND, entry );
- TRACE(" - Band[%i]:\n", r);
- TRACE(" - Band header:\n");
- TRACE(" - version = %ld\n", tmpEntry->pBandHeader.dwVersion);
- if (tmpEntry->pBandHeader.dwVersion == 1) {
- TRACE(" - lBandTime = %li\n", tmpEntry->pBandHeader.lBandTime);
- } else if (tmpEntry->pBandHeader.dwVersion == 2) {
- TRACE(" - lBandTimeLogical = %li\n", tmpEntry->pBandHeader.lBandTimeLogical);
- TRACE(" - lBandTimePhysical = %li\n", tmpEntry->pBandHeader.lBandTimePhysical);
- }
- TRACE(" - Band: %p\n", tmpEntry->ppBand);
- r++;
- }
- }
-
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicBandTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicBandTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
- return E_NOTIMPL;
-}
-
-ICOM_VTABLE(IPersistStream) DirectMusicBandTrackStream_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicBandTrackStream_QueryInterface,
- IDirectMusicBandTrackStream_AddRef,
- IDirectMusicBandTrackStream_Release,
- IDirectMusicBandTrackStream_GetClassID,
- IDirectMusicBandTrackStream_IsDirty,
- IDirectMusicBandTrackStream_Load,
- IDirectMusicBandTrackStream_Save,
- IDirectMusicBandTrackStream_GetSizeMax
-};
diff --git a/dlls/dmband/dmband_main.c b/dlls/dmband/dmband_main.c
index 09ba2e4..e1bedf1 100644
--- a/dlls/dmband/dmband_main.c
+++ b/dlls/dmband/dmband_main.c
@@ -1,6 +1,6 @@
/* DirectMusicBand Main
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,8 +21,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(dmband);
-typedef struct
-{
+typedef struct {
/* IUnknown fields */
ICOM_VFIELD(IClassFactory);
DWORD ref;
@@ -32,44 +31,31 @@
* DirectMusicBand ClassFactory
*/
-static HRESULT WINAPI BandCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI BandCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI BandCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI BandCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI BandCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI BandCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI BandCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI BandCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicBand)) {
- return DMUSIC_CreateDirectMusicBand (riid, (LPDIRECTMUSICBAND*) ppobj, pOuter);
- } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
- return DMUSIC_CreateDirectMusicBandObject (riid, (LPDIRECTMUSICOBJECT*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicBandImpl (riid, ppobj, pOuter);
}
-static HRESULT WINAPI BandCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI BandCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -91,43 +77,31 @@
* DirectMusicBandTrack ClassFactory
*/
-static HRESULT WINAPI BandTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI BandTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI BandTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI BandTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI BandTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI BandTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI BandTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI BandTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack)
- || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicBandTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicBandTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI BandTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI BandTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -149,15 +123,11 @@
*
*
*/
-BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
-{
- if (fdwReason == DLL_PROCESS_ATTACH)
- {
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
+ if (fdwReason == DLL_PROCESS_ATTACH) {
DisableThreadLibraryCalls(hinstDLL);
/* FIXME: Initialisation */
- }
- else if (fdwReason == DLL_PROCESS_DETACH)
- {
+ } else if (fdwReason == DLL_PROCESS_DETACH) {
/* FIXME: Cleanup */
}
@@ -170,10 +140,8 @@
*
*
*/
-HRESULT WINAPI DMBAND_DllCanUnloadNow(void)
-{
+HRESULT WINAPI DMBAND_DllCanUnloadNow(void) {
FIXME("(void): stub\n");
-
return S_FALSE;
}
@@ -183,8 +151,7 @@
*
*
*/
-HRESULT WINAPI DMBAND_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
-{
+HRESULT WINAPI DMBAND_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) {
TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
if (IsEqualCLSID (rclsid, &CLSID_DirectMusicBand) && IsEqualIID (riid, &IID_IClassFactory)) {
diff --git a/dlls/dmband/dmband_private.h b/dlls/dmband/dmband_private.h
index 9f56f47..53ea1ca 100644
--- a/dlls/dmband/dmband_private.h
+++ b/dlls/dmband/dmband_private.h
@@ -1,6 +1,6 @@
/* DirectMusicBand Private Include
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,51 +23,45 @@
#include <stdarg.h>
#include "windef.h"
-#include "wine/debug.h"
#include "winbase.h"
#include "winnt.h"
#include "wingdi.h"
-#include "dmusicc.h"
-#include "dmusici.h"
-#include "dmusics.h"
-#include "dmplugin.h"
-#include "dmusicf.h"
-#include "dsound.h"
-#include "wine/list.h"
+#include "winuser.h"
+#include "wine/debug.h"
+#include "wine/list.h"
+#include "wine/unicode.h"
+#include "winreg.h"
+
+#include "dmusici.h"
+#include "dmusicf.h"
+#include "dmusics.h"
/*****************************************************************************
* Interfaces
*/
typedef struct IDirectMusicBandImpl IDirectMusicBandImpl;
-
-typedef struct IDirectMusicBandObject IDirectMusicBandObject;
-typedef struct IDirectMusicBandObjectStream IDirectMusicBandObjectStream;
-
+
typedef struct IDirectMusicBandTrack IDirectMusicBandTrack;
-typedef struct IDirectMusicBandTrackStream IDirectMusicBandTrackStream;
/*****************************************************************************
* Predeclare the interface implementation structures
*/
-extern ICOM_VTABLE(IDirectMusicBand) DirectMusicBand_Vtbl;
+extern ICOM_VTABLE(IUnknown) DirectMusicBand_Uknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicBand) DirectMusicBand_Band_Vtbl;
+extern ICOM_VTABLE(IDirectMusicObject) DirectMusicBand_Object_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicBand_PeristStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicObject) DirectMusicBandObject_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicBandObjectStream_Vtbl;
-
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicBandTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicBandTrackStream_Vtbl;
+extern ICOM_VTABLE(IUnknown) DirectMusicBandTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicBandTrack_DirectMusicTrack_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicBandTrack_PersistStream_Vtbl;
/*****************************************************************************
* ClassFactory
- * can support IID_IDirectMusicBand
- * return always an IDirectMusicBandImpl
*/
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicBand (LPCGUID lpcGUID, LPDIRECTMUSICBAND* ppDMBand, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicBandImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicBandObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter);
-
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicBandTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicBandTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
/*****************************************************************************
@@ -99,165 +93,197 @@
/*****************************************************************************
* IDirectMusicBandImpl implementation structure
*/
-struct IDirectMusicBandImpl
-{
+struct IDirectMusicBandImpl {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicBand);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicBand) *BandVtbl;
+ ICOM_VTABLE(IDirectMusicObject) *ObjectVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicBandImpl fields */
- IDirectMusicBandObject* pObject;
-
- GUID* guidID; /* unique id */
- DMUS_IO_VERSION* vVersion; /* version */
- /* info from UNFO list */
- WCHAR* wzName;
- WCHAR* wzArtist;
- WCHAR* wzCopyright;
- WCHAR* wzSubject;
- WCHAR* wzComment;
-
+ LPDMUS_OBJECTDESC pDesc;
/* data */
struct list Instruments;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicBandImpl_QueryInterface (LPDIRECTMUSICBAND iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicBandImpl_AddRef (LPDIRECTMUSICBAND iface);
-extern ULONG WINAPI IDirectMusicBandImpl_Release (LPDIRECTMUSICBAND iface);
+extern HRESULT WINAPI IDirectMusicBandImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicBandImpl_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicBandImpl_IUnknown_Release (LPUNKNOWN iface);
/* IDirectMusicBand: */
-extern HRESULT WINAPI IDirectMusicBandImpl_CreateSegment (LPDIRECTMUSICBAND iface, IDirectMusicSegment** ppSegment);
-extern HRESULT WINAPI IDirectMusicBandImpl_Download (LPDIRECTMUSICBAND iface, IDirectMusicPerformance* pPerformance);
-extern HRESULT WINAPI IDirectMusicBandImpl_Unload (LPDIRECTMUSICBAND iface, IDirectMusicPerformance* pPerformance);
-
-
-/*****************************************************************************
- * IDirectMusicBandObject implementation structure
- */
-struct IDirectMusicBandObject
-{
- /* IUnknown fields */
- ICOM_VFIELD(IDirectMusicObject);
- DWORD ref;
-
- /* IDirectMusicObjectImpl fields */
- LPDMUS_OBJECTDESC pDesc;
- IDirectMusicBandObjectStream* pStream;
- IDirectMusicBandImpl* pBand;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicBandObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicBandObject_AddRef (LPDIRECTMUSICOBJECT iface);
-extern ULONG WINAPI IDirectMusicBandObject_Release (LPDIRECTMUSICOBJECT iface);
+extern HRESULT WINAPI IDirectMusicBandImpl_IDirectMusicBand_QueryInterface (LPDIRECTMUSICBAND iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicBandImpl_IDirectMusicBand_AddRef (LPDIRECTMUSICBAND iface);
+extern ULONG WINAPI IDirectMusicBandImpl_IDirectMusicBand_Release (LPDIRECTMUSICBAND iface);
+extern HRESULT WINAPI IDirectMusicBandImpl_IDirectMusicBand_CreateSegment (LPDIRECTMUSICBAND iface, IDirectMusicSegment** ppSegment);
+extern HRESULT WINAPI IDirectMusicBandImpl_IDirectMusicBand_Download (LPDIRECTMUSICBAND iface, IDirectMusicPerformance* pPerformance);
+extern HRESULT WINAPI IDirectMusicBandImpl_IDirectMusicBand_Unload (LPDIRECTMUSICBAND iface, IDirectMusicPerformance* pPerformance);
/* IDirectMusicObject: */
-extern HRESULT WINAPI IDirectMusicBandObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicBandObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicBandObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
-
-/*****************************************************************************
- * IDirectMusicBandObjectStream implementation structure
- */
-struct IDirectMusicBandObjectStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicBandObject* pParentObject;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicBandObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicBandObjectStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicBandObjectStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicBandObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicBandImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicBandImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface);
+extern ULONG WINAPI IDirectMusicBandImpl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface);
+extern HRESULT WINAPI IDirectMusicBandImpl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicBandImpl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicBandImpl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicBandObjectStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicBandObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicBandObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicBandObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicBandImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicBandImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicBandImpl_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicBandImpl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicBandImpl_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicBandImpl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicBandImpl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicBandImpl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicBandTrack implementation structure
*/
-struct IDirectMusicBandTrack
-{
+struct IDirectMusicBandTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicBandTrack fields */
- IDirectMusicBandTrackStream* pStream;
- DMUS_IO_BAND_TRACK_HEADER* btkHeader; /* header */
- GUID* guidID; /* unique id */
- DMUS_IO_VERSION* vVersion; /* version */
- /* info from UNFO list */
- WCHAR* wzName;
- WCHAR* wzArtist;
- WCHAR* wzCopyright;
- WCHAR* wzSubject;
- WCHAR* wzComment;
+ LPDMUS_OBJECTDESC pDesc;
+ DMUS_IO_BAND_TRACK_HEADER* pHeader;
/* data */
struct list Bands;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicBandTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicBandTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicBandTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicBandTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicBandTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicBandTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicBandTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicBandTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicBandTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicBandTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicBandTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicBandTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicBandTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicBandTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicBandTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicBandTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicBandTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicBandTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicBandTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicBandTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicBandTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicBandTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicBandTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicBandTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+/* IPersistStream: */
+extern HRESULT WINAPI IDirectMusicBandTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicBandTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicBandTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicBandTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicBandTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicBandTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicBandTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicBandTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+
/*****************************************************************************
- * IDirectMusicBandTrackStream implementation structure
+ * Misc.
*/
-struct IDirectMusicBandTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
+/* for simpler reading */
+typedef struct _DMUS_PRIVATE_CHUNK {
+ FOURCC fccID; /* FOURCC ID of the chunk */
+ DWORD dwSize; /* size of the chunk */
+} DMUS_PRIVATE_CHUNK, *LPDMUS_PRIVATE_CHUNK;
- /* IPersistStreamImpl fields */
- IDirectMusicBandTrack* pParentTrack;
-};
+/* check whether the given DWORD is even (return 0) or odd (return 1) */
+static inline int even_or_odd (DWORD number) {
+ return (number & 0x1); /* basically, check if bit 0 is set ;) */
+}
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicBandTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicBandTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicBandTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicBandTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
-/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicBandTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicBandTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicBandTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicBandTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
-
+/* FOURCC to string conversion for debug messages */
static inline const char *debugstr_fourcc (DWORD fourcc) {
if (!fourcc) return "'null'";
return wine_dbg_sprintf ("\'%c%c%c%c\'",
(char)(fourcc), (char)(fourcc >> 8),
- (char)(fourcc >> 16), (char)(fourcc >> 24));
+ (char)(fourcc >> 16), (char)(fourcc >> 24));
+}
+
+/* DMUS_VERSION struct to string conversion for debug messages */
+static inline const char *debugstr_dmversion (LPDMUS_VERSION version) {
+ if (!version) return "'null'";
+ return wine_dbg_sprintf ("\'%i,%i,%i,%i\'",
+ (int)((version->dwVersionMS && 0xFFFF0000) >> 8), (int)(version->dwVersionMS && 0x0000FFFF),
+ (int)((version->dwVersionLS && 0xFFFF0000) >> 8), (int)(version->dwVersionLS && 0x0000FFFF));
+}
+
+/* used for initialising structs (primarily for DMUS_OBJECTDESC) */
+#define DM_STRUCT_INIT(x) \
+ do { \
+ memset((x), 0, sizeof(*(x))); \
+ (x)->dwSize = sizeof(*x); \
+ } while (0)
+
+
+/* used for generic dumping (copied from ddraw) */
+typedef struct {
+ DWORD val;
+ const char* name;
+} flag_info;
+
+/* generic dump function */
+static inline void DMUSIC_dump_flags_ (DWORD flags, const flag_info* names, size_t num_names, int newline) {
+ unsigned int i;
+
+ for (i=0; i < num_names; i++) {
+ if ((flags & names[i].val) || /* standard flag value */
+ ((!flags) && (!names[i].val))) /* zero value only */
+ DPRINTF("%s ", names[i].name);
+ }
+
+ if (newline) DPRINTF("\n");
+}
+
+#define FE(x) { x, #x }
+#define DMUSIC_dump_flags(flags,names,num_names) DMUSIC_dump_flags_(flags, names, num_names, 1)
+
+static inline void DMUSIC_dump_DMUS_OBJ_FLAGS (DWORD flagmask) {
+ static const flag_info flags[] = {
+ FE(DMUS_OBJ_OBJECT),
+ FE(DMUS_OBJ_CLASS),
+ FE(DMUS_OBJ_NAME),
+ FE(DMUS_OBJ_CATEGORY),
+ FE(DMUS_OBJ_FILENAME),
+ FE(DMUS_OBJ_FULLPATH),
+ FE(DMUS_OBJ_URL),
+ FE(DMUS_OBJ_VERSION),
+ FE(DMUS_OBJ_DATE),
+ FE(DMUS_OBJ_LOADED),
+ FE(DMUS_OBJ_MEMORY),
+ FE(DMUS_OBJ_STREAM)
+ };
+ DMUSIC_dump_flags(flagmask, flags, sizeof(flags)/sizeof(flags[0]));
+}
+
+static inline void DMUSIC_dump_DMUS_OBJECTDESC (LPDMUS_OBJECTDESC pDesc) {
+ if (pDesc) {
+ DPRINTF("DMUS_OBJECTDESC (%p)\n", pDesc);
+ DPRINTF(" - dwSize = %ld\n", pDesc->dwSize);
+ DPRINTF(" - dwValidData = ");
+ DMUSIC_dump_DMUS_OBJ_FLAGS (pDesc->dwValidData);
+ if (pDesc->dwValidData & DMUS_OBJ_CLASS) DPRINTF(" - guidClass = %s\n", debugstr_guid(&pDesc->guidClass));
+ if (pDesc->dwValidData & DMUS_OBJ_OBJECT) DPRINTF(" - guidObject = %s\n", debugstr_guid(&pDesc->guidObject));
+ if (pDesc->dwValidData & DMUS_OBJ_DATE) DPRINTF(" - ftDate = FIXME\n");
+ if (pDesc->dwValidData & DMUS_OBJ_VERSION) DPRINTF(" - vVersion = %s\n", debugstr_dmversion(&pDesc->vVersion));
+ if (pDesc->dwValidData & DMUS_OBJ_NAME) DPRINTF(" - wszName = %s\n", debugstr_w(pDesc->wszName));
+ if (pDesc->dwValidData & DMUS_OBJ_CATEGORY) DPRINTF(" - wszCategory = %s\n", debugstr_w(pDesc->wszCategory));
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME) DPRINTF(" - wszFileName = %s\n", debugstr_w(pDesc->wszFileName));
+ if (pDesc->dwValidData & DMUS_OBJ_MEMORY) DPRINTF(" - llMemLength = %lli\n - pbMemData = %p\n", pDesc->llMemLength, pDesc->pbMemData);
+ if (pDesc->dwValidData & DMUS_OBJ_STREAM) DPRINTF(" - pStream = %p\n", pDesc->pStream);
+ } else {
+ DPRINTF("(NULL)\n");
+ }
}
#endif /* __WINE_DMBAND_PRIVATE_H */
diff --git a/dlls/dmband/regsvr.c b/dlls/dmband/regsvr.c
index 277e178..8afc220 100644
--- a/dlls/dmband/regsvr.c
+++ b/dlls/dmband/regsvr.c
@@ -18,21 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include <stdarg.h>
-#include <string.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winreg.h"
-#include "winerror.h"
-
-#include "dmusics.h"
-#include "dmusici.h"
-#include "dmplugin.h"
-
-#include "wine/debug.h"
+#include "dmband_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmband);
@@ -44,8 +30,7 @@
/***********************************************************************
* interface for self-registering
*/
-struct regsvr_interface
-{
+struct regsvr_interface {
IID const *iid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
IID const *base_iid; /* can be NULL to omit */
@@ -57,8 +42,7 @@
static HRESULT register_interfaces(struct regsvr_interface const *list);
static HRESULT unregister_interfaces(struct regsvr_interface const *list);
-struct regsvr_coclass
-{
+struct regsvr_coclass {
CLSID const *clsid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
LPCSTR ips; /* can be NULL to omit */
@@ -124,8 +108,7 @@
/***********************************************************************
* register_interfaces
*/
-static HRESULT register_interfaces(struct regsvr_interface const *list)
-{
+static HRESULT register_interfaces(struct regsvr_interface const *list) {
LONG res = ERROR_SUCCESS;
HKEY interface_key;
@@ -194,8 +177,7 @@
/***********************************************************************
* unregister_interfaces
*/
-static HRESULT unregister_interfaces(struct regsvr_interface const *list)
-{
+static HRESULT unregister_interfaces(struct regsvr_interface const *list) {
LONG res = ERROR_SUCCESS;
HKEY interface_key;
@@ -219,8 +201,7 @@
/***********************************************************************
* register_coclasses
*/
-static HRESULT register_coclasses(struct regsvr_coclass const *list)
-{
+static HRESULT register_coclasses(struct regsvr_coclass const *list) {
LONG res = ERROR_SUCCESS;
HKEY coclass_key;
@@ -301,8 +282,7 @@
/***********************************************************************
* unregister_coclasses
*/
-static HRESULT unregister_coclasses(struct regsvr_coclass const *list)
-{
+static HRESULT unregister_coclasses(struct regsvr_coclass const *list) {
LONG res = ERROR_SUCCESS;
HKEY coclass_key;
@@ -338,8 +318,7 @@
/***********************************************************************
* regsvr_key_guid
*/
-static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid)
-{
+static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid) {
WCHAR buf[39];
StringFromGUID2(guid, buf, 39);
@@ -352,8 +331,7 @@
static LONG register_key_defvalueW(
HKEY base,
WCHAR const *name,
- WCHAR const *value)
-{
+ WCHAR const *value) {
LONG res;
HKEY key;
@@ -372,8 +350,7 @@
static LONG register_key_defvalueA(
HKEY base,
WCHAR const *name,
- char const *value)
-{
+ char const *value) {
LONG res;
HKEY key;
@@ -394,8 +371,7 @@
char const *progid,
char const *curver_progid,
char const *name,
- char const *extra)
-{
+ char const *extra) {
LONG res;
HKEY progid_key;
@@ -439,8 +415,7 @@
/***********************************************************************
* recursive_delete_key
*/
-static LONG recursive_delete_key(HKEY key)
-{
+static LONG recursive_delete_key(HKEY key) {
LONG res;
WCHAR subkey_name[MAX_PATH];
DWORD cName;
@@ -471,8 +446,7 @@
/***********************************************************************
* recursive_delete_keyA
*/
-static LONG recursive_delete_keyA(HKEY base, char const *name)
-{
+static LONG recursive_delete_keyA(HKEY base, char const *name) {
LONG res;
HKEY key;
@@ -487,8 +461,7 @@
/***********************************************************************
* recursive_delete_keyW
*/
-static LONG recursive_delete_keyW(HKEY base, WCHAR const *name)
-{
+static LONG recursive_delete_keyW(HKEY base, WCHAR const *name) {
LONG res;
HKEY key;
@@ -534,8 +507,7 @@
/***********************************************************************
* DllRegisterServer (DMBAND.3)
*/
-HRESULT WINAPI DMBAND_DllRegisterServer(void)
-{
+HRESULT WINAPI DMBAND_DllRegisterServer(void) {
HRESULT hr;
TRACE("\n");
@@ -549,8 +521,7 @@
/***********************************************************************
* DllUnregisterServer (DMBAND.4)
*/
-HRESULT WINAPI DMBAND_DllUnregisterServer(void)
-{
+HRESULT WINAPI DMBAND_DllUnregisterServer(void) {
HRESULT hr;
TRACE("\n");
diff --git a/dlls/dmband/version.rc b/dlls/dmband/version.rc
index 71c948a..cae25ce 100644
--- a/dlls/dmband/version.rc
+++ b/dlls/dmband/version.rc
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc <rok.mandeljc@gimb.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -18,10 +18,10 @@
#define WINE_FILEDESCRIPTION_STR "Wine DirectMusic Band"
#define WINE_FILENAME_STR "dmband.dll"
-#define WINE_FILEVERSION 4,8,1,881
-#define WINE_FILEVERSION_STR "4.8.1.881"
-#define WINE_PRODUCTVERSION 4,8,1,881
-#define WINE_PRODUCTVERSION_STR "4.8"
+#define WINE_FILEVERSION 4,9,0,900
+#define WINE_FILEVERSION_STR "4.9.0.900"
+#define WINE_PRODUCTVERSION 4,9,0,900
+#define WINE_PRODUCTVERSION_STR "4.9"
#define WINE_PRODUCTNAME_STR "DirectX"
#include "wine/wine_common_ver.rc"
diff --git a/dlls/dmcompos/chordmap.c b/dlls/dmcompos/chordmap.c
index 66c0d6d..537c11d 100644
--- a/dlls/dmcompos/chordmap.c
+++ b/dlls/dmcompos/chordmap.c
@@ -1,6 +1,6 @@
/* IDirectMusicChordMap Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,27 +17,33 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmcompos_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmcompos);
+WINE_DECLARE_DEBUG_CHANNEL(dmfile);
-/* IDirectMusicChordMap IUnknown parts follow: */
-HRESULT WINAPI IDirectMusicChordMapImpl_QueryInterface (LPDIRECTMUSICCHORDMAP iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicChordMapImpl,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicChordMap)) {
- IDirectMusicChordMapImpl_AddRef(iface);
- *ppobj = This;
+/*****************************************************************************
+ * IDirectMusicChordMapImpl implementation
+ */
+/* IDirectMusicChordMapImpl IUnknown part: */
+HRESULT WINAPI IDirectMusicChordMapImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapImpl, UnknownVtbl, iface);
+
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPVOID)&This->UnknownVtbl;
+ IDirectMusicChordMapImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicChordMap)) {
+ *ppobj = (LPVOID)&This->ChordMapVtbl;
+ IDirectMusicChordMapImpl_IDirectMusicChordMap_AddRef ((LPDIRECTMUSICCHORDMAP)&This->ChordMapVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
+ *ppobj = (LPVOID)&This->ObjectVtbl;
+ IDirectMusicChordMapImpl_IDirectMusicObject_AddRef ((LPDIRECTMUSICOBJECT)&This->ObjectVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IPersistStream)) {
+ *ppobj = (LPVOID)&This->PersistStreamVtbl;
+ IDirectMusicChordMapImpl_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
@@ -45,16 +51,14 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicChordMapImpl_AddRef (LPDIRECTMUSICCHORDMAP iface)
-{
- ICOM_THIS(IDirectMusicChordMapImpl,iface);
+ULONG WINAPI IDirectMusicChordMapImpl_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapImpl, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicChordMapImpl_Release (LPDIRECTMUSICCHORDMAP iface)
-{
- ICOM_THIS(IDirectMusicChordMapImpl,iface);
+ULONG WINAPI IDirectMusicChordMapImpl_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapImpl, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -63,235 +67,475 @@
return ref;
}
-/* IDirectMusicChordMap Interface follow: */
-HRESULT WINAPI IDirectMusicChordMapImpl_GetScale (LPDIRECTMUSICCHORDMAP iface, DWORD* pdwScale)
-{
- ICOM_THIS(IDirectMusicChordMapImpl,iface);
+ICOM_VTABLE(IUnknown) DirectMusicChordMap_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicChordMapImpl_IUnknown_QueryInterface,
+ IDirectMusicChordMapImpl_IUnknown_AddRef,
+ IDirectMusicChordMapImpl_IUnknown_Release
+};
- TRACE("(%p, %p)\n", This, pdwScale);
- *pdwScale = This->dwScale;
+/* IDirectMusicChordMapImpl IDirectMusicChordMap part: */
+HRESULT WINAPI IDirectMusicChordMapImpl_IDirectMusicChordMap_QueryInterface (LPDIRECTMUSICCHORDMAP iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapImpl, ChordMapVtbl, iface);
+ return IDirectMusicChordMapImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicChordMapImpl_IDirectMusicChordMap_AddRef (LPDIRECTMUSICCHORDMAP iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapImpl, ChordMapVtbl, iface);
+ return IDirectMusicChordMapImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicChordMapImpl_IDirectMusicChordMap_Release (LPDIRECTMUSICCHORDMAP iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapImpl, ChordMapVtbl, iface);
+ return IDirectMusicChordMapImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicChordMapImpl_IDirectMusicChordMap_GetScale (LPDIRECTMUSICCHORDMAP iface, DWORD* pdwScale) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapImpl, ChordMapVtbl, iface);
+ FIXME("(%p, %p): stub\n", This, pdwScale);
+ return S_OK;
+}
+
+ICOM_VTABLE(IDirectMusicChordMap) DirectMusicChordMap_ChordMap_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicChordMapImpl_IDirectMusicChordMap_QueryInterface,
+ IDirectMusicChordMapImpl_IDirectMusicChordMap_AddRef,
+ IDirectMusicChordMapImpl_IDirectMusicChordMap_Release,
+ IDirectMusicChordMapImpl_IDirectMusicChordMap_GetScale
+};
+
+/* IDirectMusicChordMapImpl IDirectMusicObject part: */
+HRESULT WINAPI IDirectMusicChordMapImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapImpl, ObjectVtbl, iface);
+ return IDirectMusicChordMapImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicChordMapImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapImpl, ObjectVtbl, iface);
+ return IDirectMusicChordMapImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicChordMapImpl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapImpl, ObjectVtbl, iface);
+ return IDirectMusicChordMapImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicChordMapImpl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapImpl, ObjectVtbl, iface);
+ TRACE("(%p, %p)\n", This, pDesc);
+ /* I think we shouldn't return pointer here since then values can be changed; it'd be a mess */
+ memcpy (pDesc, This->pDesc, This->pDesc->dwSize);
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicChordMapImpl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapImpl, ObjectVtbl, iface);
+ TRACE("(%p, %p): setting descriptor:\n", This, pDesc);
+ if (TRACE_ON(dmcompos)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
+ }
+
+ /* According to MSDN, we should copy only given values, not whole struct */
+ if (pDesc->dwValidData & DMUS_OBJ_OBJECT)
+ memcpy (&This->pDesc->guidObject, &pDesc->guidObject, sizeof (pDesc->guidObject));
+ if (pDesc->dwValidData & DMUS_OBJ_CLASS)
+ memcpy (&This->pDesc->guidClass, &pDesc->guidClass, sizeof (pDesc->guidClass));
+ if (pDesc->dwValidData & DMUS_OBJ_NAME)
+ strncpyW (This->pDesc->wszName, pDesc->wszName, DMUS_MAX_NAME);
+ if (pDesc->dwValidData & DMUS_OBJ_CATEGORY)
+ strncpyW (This->pDesc->wszCategory, pDesc->wszCategory, DMUS_MAX_CATEGORY);
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME)
+ strncpyW (This->pDesc->wszFileName, pDesc->wszFileName, DMUS_MAX_FILENAME);
+ if (pDesc->dwValidData & DMUS_OBJ_VERSION)
+ memcpy (&This->pDesc->vVersion, &pDesc->vVersion, sizeof (pDesc->vVersion));
+ if (pDesc->dwValidData & DMUS_OBJ_DATE)
+ memcpy (&This->pDesc->ftDate, &pDesc->ftDate, sizeof (pDesc->ftDate));
+ if (pDesc->dwValidData & DMUS_OBJ_MEMORY) {
+ memcpy (&This->pDesc->llMemLength, &pDesc->llMemLength, sizeof (pDesc->llMemLength));
+ memcpy (This->pDesc->pbMemData, pDesc->pbMemData, sizeof (pDesc->pbMemData));
+ }
+ if (pDesc->dwValidData & DMUS_OBJ_STREAM) {
+ /* according to MSDN, we copy the stream */
+ IStream_Clone (pDesc->pStream, &This->pDesc->pStream);
+ }
+
+ /* add new flags */
+ This->pDesc->dwValidData |= pDesc->dwValidData;
return S_OK;
}
-ICOM_VTABLE(IDirectMusicChordMap) DirectMusicChordMap_Vtbl =
-{
+HRESULT WINAPI IDirectMusicChordMapImpl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc) {
+ DMUS_PRIVATE_CHUNK Chunk;
+ DWORD StreamSize, StreamCount, ListSize[1], ListCount[1];
+ LARGE_INTEGER liMove; /* used when skipping chunks */
+
+ TRACE("(%p, %p)\n", pStream, pDesc);
+
+ /* FIXME: should this be determined from stream? */
+ pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&pDesc->guidClass, &CLSID_DirectMusicChordMap, sizeof(CLSID));
+
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_RIFF: {
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ StreamSize = Chunk.dwSize - sizeof(FOURCC);
+ StreamCount = 0;
+ if (Chunk.fccID == DMUS_FOURCC_CHORDMAP_FORM) {
+ TRACE_(dmfile)(": chord map form\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ StreamCount += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case DMUS_FOURCC_GUID_CHUNK: {
+ TRACE_(dmfile)(": GUID chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read (pStream, &pDesc->guidObject, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_VERSION_CHUNK: {
+ TRACE_(dmfile)(": version chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read (pStream, &pDesc->vVersion, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CATEGORY_CHUNK: {
+ TRACE_(dmfile)(": category chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_CATEGORY;
+ IStream_Read (pStream, pDesc->wszCategory, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[0] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[0] = 0;
+ switch (Chunk.fccID) {
+ /* evil M$ UNFO list, which can (!?) contain INFO elements */
+ case DMUS_FOURCC_UNFO_LIST: {
+ TRACE_(dmfile)(": UNFO list\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
+ (though strings seem to be valid unicode) */
+ case mmioFOURCC('I','N','A','M'):
+ case DMUS_FOURCC_UNAM_CHUNK: {
+ TRACE_(dmfile)(": name chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_NAME;
+ IStream_Read (pStream, pDesc->wszName, Chunk.dwSize, NULL);
+ break;
+ }
+ case mmioFOURCC('I','A','R','T'):
+ case DMUS_FOURCC_UART_CHUNK: {
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','O','P'):
+ case DMUS_FOURCC_UCOP_CHUNK: {
+ TRACE_(dmfile)(": copyright chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','S','B','J'):
+ case DMUS_FOURCC_USBJ_CHUNK: {
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','M','T'):
+ case DMUS_FOURCC_UCMT_CHUNK: {
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
+ } while (StreamCount < StreamSize);
+ break;
+ } else {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = StreamSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+
+ TRACE_(dmfile)(": reading finished\n");
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return DMUS_E_INVALIDFILE;
+ }
+ }
+
+ TRACE(": returning descriptor:\n");
+ if (TRACE_ON(dmcompos)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
+ }
+
+ return S_OK;
+}
+
+ICOM_VTABLE(IDirectMusicObject) DirectMusicChordMap_Object_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicChordMapImpl_QueryInterface,
- IDirectMusicChordMapImpl_AddRef,
- IDirectMusicChordMapImpl_Release,
- IDirectMusicChordMapImpl_GetScale
+ IDirectMusicChordMapImpl_IDirectMusicObject_QueryInterface,
+ IDirectMusicChordMapImpl_IDirectMusicObject_AddRef,
+ IDirectMusicChordMapImpl_IDirectMusicObject_Release,
+ IDirectMusicChordMapImpl_IDirectMusicObject_GetDescriptor,
+ IDirectMusicChordMapImpl_IDirectMusicObject_SetDescriptor,
+ IDirectMusicChordMapImpl_IDirectMusicObject_ParseDescriptor
+};
+
+
+/* IDirectMusicChordMapImpl IPersistStream part: */
+HRESULT WINAPI IDirectMusicChordMapImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapImpl, PersistStreamVtbl, iface);
+ return IDirectMusicChordMapImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicChordMapImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapImpl, PersistStreamVtbl, iface);
+ return IDirectMusicChordMapImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicChordMapImpl_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapImpl, PersistStreamVtbl, iface);
+ return IDirectMusicChordMapImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicChordMapImpl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicChordMapImpl_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicChordMapImpl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapImpl, PersistStreamVtbl, iface);
+
+ FOURCC chunkID;
+ DWORD chunkSize, StreamSize, StreamCount, ListSize[3], ListCount[3];
+ LARGE_INTEGER liMove; /* used when skipping chunks */
+
+ FIXME("(%p, %p): Loading not implemented yet\n", This, pStm);
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ IStream_Read (pStm, &chunkSize, sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
+ switch (chunkID) {
+ case FOURCC_RIFF: {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(chunkID));
+ StreamSize = chunkSize - sizeof(FOURCC);
+ StreamCount = 0;
+ switch (chunkID) {
+ case DMUS_FOURCC_CHORDMAP_FORM: {
+ TRACE_(dmfile)(": chordmap form\n");
+ do {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
+ StreamCount += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
+ switch (chunkID) {
+ case DMUS_FOURCC_GUID_CHUNK: {
+ TRACE_(dmfile)(": GUID chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read (pStm, &This->pDesc->guidObject, chunkSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_VERSION_CHUNK: {
+ TRACE_(dmfile)(": version chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read (pStm, &This->pDesc->vVersion, chunkSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CATEGORY_CHUNK: {
+ TRACE_(dmfile)(": category chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_CATEGORY;
+ IStream_Read (pStm, This->pDesc->wszCategory, chunkSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(chunkID));
+ ListSize[0] = chunkSize - sizeof(FOURCC);
+ ListCount[0] = 0;
+ switch (chunkID) {
+ case DMUS_FOURCC_UNFO_LIST: {
+ TRACE_(dmfile)(": UNFO list\n");
+ do {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
+ switch (chunkID) {
+ /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
+ (though strings seem to be valid unicode) */
+ case mmioFOURCC('I','N','A','M'):
+ case DMUS_FOURCC_UNAM_CHUNK: {
+ TRACE_(dmfile)(": name chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_NAME;
+ IStream_Read (pStm, This->pDesc->wszName, chunkSize, NULL);
+ break;
+ }
+ case mmioFOURCC('I','A','R','T'):
+ case DMUS_FOURCC_UART_CHUNK: {
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','O','P'):
+ case DMUS_FOURCC_UCOP_CHUNK: {
+ TRACE_(dmfile)(": copyright chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','S','B','J'):
+ case DMUS_FOURCC_USBJ_CHUNK: {
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','M','T'):
+ case DMUS_FOURCC_UCMT_CHUNK: {
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = chunkSize - sizeof(FOURCC);
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
+ } while (StreamCount < StreamSize);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = StreamSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+ }
+ TRACE_(dmfile)(": reading finished\n");
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+ }
+
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicChordMapImpl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicChordMapImpl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
+ return E_NOTIMPL;
+}
+
+ICOM_VTABLE(IPersistStream) DirectMusicChordMap_PersistStream_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicChordMapImpl_IPersistStream_QueryInterface,
+ IDirectMusicChordMapImpl_IPersistStream_AddRef,
+ IDirectMusicChordMapImpl_IPersistStream_Release,
+ IDirectMusicChordMapImpl_IPersistStream_GetClassID,
+ IDirectMusicChordMapImpl_IPersistStream_IsDirty,
+ IDirectMusicChordMapImpl_IPersistStream_Load,
+ IDirectMusicChordMapImpl_IPersistStream_Save,
+ IDirectMusicChordMapImpl_IPersistStream_GetSizeMax
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicChordMap (LPCGUID lpcGUID, LPDIRECTMUSICCHORDMAP* ppDMCM, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicChordMapImpl* dmchordmap;
+HRESULT WINAPI DMUSIC_CreateDirectMusicChordMapImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicChordMapImpl* obj;
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicChordMap)) {
- dmchordmap = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicChordMapImpl));
- if (NULL == dmchordmap) {
- *ppDMCM = (LPDIRECTMUSICCHORDMAP) NULL;
- return E_OUTOFMEMORY;
- }
- dmchordmap->lpVtbl = &DirectMusicChordMap_Vtbl;
- dmchordmap->ref = 1;
- *ppDMCM = (LPDIRECTMUSICCHORDMAP) dmchordmap;
- return S_OK;
+ obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicChordMapImpl));
+ if (NULL == obj) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
}
- WARN("No interface found\n");
+ obj->UnknownVtbl = &DirectMusicChordMap_Unknown_Vtbl;
+ obj->ChordMapVtbl = &DirectMusicChordMap_ChordMap_Vtbl;
+ obj->ObjectVtbl = &DirectMusicChordMap_Object_Vtbl;
+ obj->PersistStreamVtbl = &DirectMusicChordMap_PersistStream_Vtbl;
+ obj->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(obj->pDesc);
+ obj->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&obj->pDesc->guidClass, &CLSID_DirectMusicChordMap, sizeof (CLSID));
+ obj->ref = 0; /* will be inited by QueryInterface */
- return E_NOINTERFACE;
+ return IDirectMusicChordMapImpl_IUnknown_QueryInterface ((LPUNKNOWN)&obj->UnknownVtbl, lpcGUID, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicChordMapObject implementation
- */
-/* IDirectMusicChordMapObject IUnknown part: */
-HRESULT WINAPI IDirectMusicChordMapObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicChordMapObject,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IDirectMusicObject)) {
- IDirectMusicChordMapObject_AddRef(iface);
- *ppobj = This;
- return S_OK;
- } else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IPersistStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = (LPPERSISTSTREAM)This->pStream;
- return S_OK;
- } else if (IsEqualIID (riid, &IID_IDirectMusicChordMap)) {
- IDirectMusicChordMap_AddRef ((LPDIRECTMUSICCHORDMAP)This->pChordMap);
- *ppobj = (LPDIRECTMUSICCHORDMAP)This->pChordMap;
- return S_OK;
- }
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicChordMapObject_AddRef (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicChordMapObject,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicChordMapObject_Release (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicChordMapObject,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicChordMapObject IDirectMusicObject part: */
-HRESULT WINAPI IDirectMusicChordMapObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicChordMapObject,iface);
-
- TRACE("(%p, %p)\n", This, pDesc);
- pDesc = This->pDesc;
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicChordMapObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicChordMapObject,iface);
-
- TRACE("(%p, %p)\n", This, pDesc);
- This->pDesc = pDesc;
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicChordMapObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicChordMapObject,iface);
-
- FIXME("(%p, %p, %p): stub\n", This, pStream, pDesc);
-
- return S_OK;
-}
-
-ICOM_VTABLE(IDirectMusicObject) DirectMusicChordMapObject_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicChordMapObject_QueryInterface,
- IDirectMusicChordMapObject_AddRef,
- IDirectMusicChordMapObject_Release,
- IDirectMusicChordMapObject_GetDescriptor,
- IDirectMusicChordMapObject_SetDescriptor,
- IDirectMusicChordMapObject_ParseDescriptor
-};
-
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicChordMapObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicChordMapObject *obj;
-
- TRACE("(%p,%p,%p)\n", lpcGUID, ppObject, pUnkOuter);
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicObject)) {
- obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicChordMapObject));
- if (NULL == obj) {
- *ppObject = (LPDIRECTMUSICOBJECT) NULL;
- return E_OUTOFMEMORY;
- }
- obj->lpVtbl = &DirectMusicChordMapObject_Vtbl;
- obj->ref = 1;
- /* prepare IPersistStream */
- obj->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicChordMapObjectStream));
- obj->pStream->lpVtbl = &DirectMusicChordMapObjectStream_Vtbl;
- obj->pStream->ref = 1;
- obj->pStream->pParentObject = obj;
- /* prepare IDirectMusiChordMap */
- DMUSIC_CreateDirectMusicChordMap (&IID_IDirectMusicChordMap, (LPDIRECTMUSICCHORDMAP*)&obj->pChordMap, NULL);
- obj->pChordMap->pObject = obj;
- *ppObject = (LPDIRECTMUSICOBJECT) obj;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
-}
-
-/*****************************************************************************
- * IDirectMusicChordMapObjectStream implementation
- */
-/* IDirectMusicChordMapObjectStream IUnknown part: */
-HRESULT WINAPI IDirectMusicChordMapObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicChordMapObjectStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicChordMapObjectStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicChordMapObjectStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicChordMapObjectStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicChordMapObjectStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicChordMapObjectStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicChordMapObjectStream IPersist part: */
-HRESULT WINAPI IDirectMusicChordMapObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- return E_NOTIMPL;
-}
-
-/* IDirectMusicChordMapObjectStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicChordMapObjectStream_IsDirty (LPPERSISTSTREAM iface)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicChordMapObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
- FIXME(": Loading not implemented yet\n");
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicChordMapObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicChordMapObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
- return E_NOTIMPL;
-}
-
-ICOM_VTABLE(IPersistStream) DirectMusicChordMapObjectStream_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicChordMapObjectStream_QueryInterface,
- IDirectMusicChordMapObjectStream_AddRef,
- IDirectMusicChordMapObjectStream_Release,
- IDirectMusicChordMapObjectStream_GetClassID,
- IDirectMusicChordMapObjectStream_IsDirty,
- IDirectMusicChordMapObjectStream_Load,
- IDirectMusicChordMapObjectStream_Save,
- IDirectMusicChordMapObjectStream_GetSizeMax
-};
diff --git a/dlls/dmcompos/chordmaptrack.c b/dlls/dmcompos/chordmaptrack.c
index 8a95ce4..efeb078 100644
--- a/dlls/dmcompos/chordmaptrack.c
+++ b/dlls/dmcompos/chordmaptrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicChordMapTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmcompos_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmcompos);
@@ -34,35 +26,36 @@
* IDirectMusicChordMapTrack implementation
*/
/* IDirectMusicChordMapTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicChordMapTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicChordMapTrack,iface);
+HRESULT WINAPI IDirectMusicChordMapTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicChordMapTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicChordMapTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicChordMapTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicChordMapTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicChordMapTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
+
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicChordMapTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicChordMapTrack,iface);
+ULONG WINAPI IDirectMusicChordMapTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicChordMapTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicChordMapTrack,iface);
+ULONG WINAPI IDirectMusicChordMapTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -71,271 +64,213 @@
return ref;
}
-/* IDirectMusicChordMapTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicChordMapTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicChordMapTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicChordMapTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicChordMapTrack_IUnknown_QueryInterface,
+ IDirectMusicChordMapTrack_IUnknown_AddRef,
+ IDirectMusicChordMapTrack_IUnknown_Release
+};
+/* IDirectMusicChordMapTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface);
+ return IDirectMusicChordMapTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface);
+ return IDirectMusicChordMapTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface);
+ return IDirectMusicChordMapTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordMapTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicChordMapTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordMapTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
-{
- ICOM_THIS(IDirectMusicChordMapTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordMapTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicChordMapTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordMapTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicChordMapTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordMapTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicChordMapTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordMapTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicChordMapTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
if (IsEqualGUID (rguidType, &GUID_IDirectMusicChordMap)) {
TRACE("param supported\n");
return S_OK;
- }
-
+ }
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicChordMapTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicChordMapTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordMapTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicChordMapTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordMapTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicChordMapTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicChordMapTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicChordMapTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicChordMapTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordMapTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicChordMapTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordMapTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicChordMapTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordMapTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicChordMapTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordMapTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicChordMapTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicChordMapTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicChordMapTrack_Track_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicChordMapTrack_QueryInterface,
- IDirectMusicChordMapTrack_AddRef,
- IDirectMusicChordMapTrack_Release,
- IDirectMusicChordMapTrack_Init,
- IDirectMusicChordMapTrack_InitPlay,
- IDirectMusicChordMapTrack_EndPlay,
- IDirectMusicChordMapTrack_Play,
- IDirectMusicChordMapTrack_GetParam,
- IDirectMusicChordMapTrack_SetParam,
- IDirectMusicChordMapTrack_IsParamSupported,
- IDirectMusicChordMapTrack_AddNotificationType,
- IDirectMusicChordMapTrack_RemoveNotificationType,
- IDirectMusicChordMapTrack_Clone,
- IDirectMusicChordMapTrack_PlayEx,
- IDirectMusicChordMapTrack_GetParamEx,
- IDirectMusicChordMapTrack_SetParamEx,
- IDirectMusicChordMapTrack_Compose,
- IDirectMusicChordMapTrack_Join
+ IDirectMusicChordMapTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicChordMapTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicChordMapTrack_IDirectMusicTrack_Release,
+ IDirectMusicChordMapTrack_IDirectMusicTrack_Init,
+ IDirectMusicChordMapTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicChordMapTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicChordMapTrack_IDirectMusicTrack_Play,
+ IDirectMusicChordMapTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicChordMapTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicChordMapTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicChordMapTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicChordMapTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicChordMapTrack_IDirectMusicTrack_Clone,
+ IDirectMusicChordMapTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicChordMapTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicChordMapTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicChordMapTrack_IDirectMusicTrack_Compose,
+ IDirectMusicChordMapTrack_IDirectMusicTrack_Join
+};
+
+/* IDirectMusicChordMapTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicChordMapTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, PersistStreamVtbl, iface);
+ return IDirectMusicChordMapTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicChordMapTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, PersistStreamVtbl, iface);
+ return IDirectMusicChordMapTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicChordMapTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, PersistStreamVtbl, iface);
+ return IDirectMusicChordMapTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicChordMapTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicChordMapTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicChordMapTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
+ ICOM_THIS_MULTI(IDirectMusicChordMapTrack, PersistStreamVtbl, iface);
+ FIXME("(%p, %p): Loading not implemented yet\n", This, pStm);
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicChordMapTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicChordMapTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
+ return E_NOTIMPL;
+}
+
+ICOM_VTABLE(IPersistStream) DirectMusicChordMapTrack_PersistStream_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicChordMapTrack_IPersistStream_QueryInterface,
+ IDirectMusicChordMapTrack_IPersistStream_AddRef,
+ IDirectMusicChordMapTrack_IPersistStream_Release,
+ IDirectMusicChordMapTrack_IPersistStream_GetClassID,
+ IDirectMusicChordMapTrack_IPersistStream_IsDirty,
+ IDirectMusicChordMapTrack_IPersistStream_Load,
+ IDirectMusicChordMapTrack_IPersistStream_Save,
+ IDirectMusicChordMapTrack_IPersistStream_GetSizeMax
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicChordMapTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
+HRESULT WINAPI DMUSIC_CreateDirectMusicChordMapTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
IDirectMusicChordMapTrack* track;
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicChordMapTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicChordMapTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicChordMapTrackStream));
- track->pStream->lpVtbl = &DirectMusicChordMapTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicChordMapTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
}
- WARN("No interface found\n");
+ track->UnknownVtbl = &DirectMusicChordMapTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicChordMapTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicChordMapTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicChordMapTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
- return E_NOINTERFACE;
+ return IDirectMusicChordMapTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
}
-
-
-/*****************************************************************************
- * IDirectMusicChordMapTrackStream implementation
- */
-/* IDirectMusicChordMapTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicChordMapTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicChordMapTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicChordMapTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicChordMapTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicChordMapTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicChordMapTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicChordMapTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicChordMapTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicChordMapTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- return E_NOTIMPL;
-}
-
-/* IDirectMusicChordMapTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicChordMapTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicChordMapTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
- FIXME(": Loading not implemented yet\n");
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicChordMapTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicChordMapTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
- return E_NOTIMPL;
-}
-
-ICOM_VTABLE(IPersistStream) DirectMusicChordMapTrackStream_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicChordMapTrackStream_QueryInterface,
- IDirectMusicChordMapTrackStream_AddRef,
- IDirectMusicChordMapTrackStream_Release,
- IDirectMusicChordMapTrackStream_GetClassID,
- IDirectMusicChordMapTrackStream_IsDirty,
- IDirectMusicChordMapTrackStream_Load,
- IDirectMusicChordMapTrackStream_Save,
- IDirectMusicChordMapTrackStream_GetSizeMax
-};
diff --git a/dlls/dmcompos/composer.c b/dlls/dmcompos/composer.c
index 8c50d7b..13e8cd5 100644
--- a/dlls/dmcompos/composer.c
+++ b/dlls/dmcompos/composer.c
@@ -1,6 +1,6 @@
/* IDirectMusicComposer
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,21 +17,12 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmcompos_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmcompos);
-/* IDirectMusicComposer IUnknown parts follow: */
-HRESULT WINAPI IDirectMusicComposerImpl_QueryInterface (LPDIRECTMUSICCOMPOSER iface, REFIID riid, LPVOID *ppobj)
-{
+/* IDirectMusicComposerImpl IUnknown part: */
+HRESULT WINAPI IDirectMusicComposerImpl_QueryInterface (LPDIRECTMUSICCOMPOSER iface, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IDirectMusicComposerImpl,iface);
if (IsEqualIID (riid, &IID_IUnknown) ||
@@ -44,15 +35,13 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicComposerImpl_AddRef (LPDIRECTMUSICCOMPOSER iface)
-{
+ULONG WINAPI IDirectMusicComposerImpl_AddRef (LPDIRECTMUSICCOMPOSER iface) {
ICOM_THIS(IDirectMusicComposerImpl,iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicComposerImpl_Release (LPDIRECTMUSICCOMPOSER iface)
-{
+ULONG WINAPI IDirectMusicComposerImpl_Release (LPDIRECTMUSICCOMPOSER iface) {
ICOM_THIS(IDirectMusicComposerImpl,iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
@@ -62,63 +51,44 @@
return ref;
}
-/* IDirectMusicComposer Interface follow: */
-HRESULT WINAPI IDirectMusicComposerImpl_ComposeSegmentFromTemplate (LPDIRECTMUSICCOMPOSER iface, IDirectMusicStyle* pStyle, IDirectMusicSegment* pTemplate, WORD wActivity, IDirectMusicChordMap* pChordMap, IDirectMusicSegment** ppSegment)
-{
+/* IDirectMusicComposerImpl IDirectMusicComposer part: */
+HRESULT WINAPI IDirectMusicComposerImpl_ComposeSegmentFromTemplate (LPDIRECTMUSICCOMPOSER iface, IDirectMusicStyle* pStyle, IDirectMusicSegment* pTemplate, WORD wActivity, IDirectMusicChordMap* pChordMap, IDirectMusicSegment** ppSegment) {
ICOM_THIS(IDirectMusicComposerImpl,iface);
-
FIXME("(%p, %p, %p, %d, %p, %p): stub\n", This, pStyle, pTemplate, wActivity, pChordMap, ppSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicComposerImpl_ComposeSegmentFromShape (LPDIRECTMUSICCOMPOSER iface, IDirectMusicStyle* pStyle, WORD wNumMeasures, WORD wShape, WORD wActivity, BOOL fIntro, BOOL fEnd, IDirectMusicChordMap* pChordMap, IDirectMusicSegment** ppSegment)
-{
+HRESULT WINAPI IDirectMusicComposerImpl_ComposeSegmentFromShape (LPDIRECTMUSICCOMPOSER iface, IDirectMusicStyle* pStyle, WORD wNumMeasures, WORD wShape, WORD wActivity, BOOL fIntro, BOOL fEnd, IDirectMusicChordMap* pChordMap, IDirectMusicSegment** ppSegment) {
ICOM_THIS(IDirectMusicComposerImpl,iface);
-
FIXME("(%p, %p, %d, %d, %d, %d, %d, %p, %p): stub\n", This, pStyle, wNumMeasures, wShape, wActivity, fIntro, fEnd, pChordMap, ppSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicComposerImpl_ComposeTransition (LPDIRECTMUSICCOMPOSER iface, IDirectMusicSegment* pFromSeg, IDirectMusicSegment* pToSeg, MUSIC_TIME mtTime, WORD wCommand, DWORD dwFlags, IDirectMusicChordMap* pChordMap, IDirectMusicSegment** ppTransSeg)
-{
+HRESULT WINAPI IDirectMusicComposerImpl_ComposeTransition (LPDIRECTMUSICCOMPOSER iface, IDirectMusicSegment* pFromSeg, IDirectMusicSegment* pToSeg, MUSIC_TIME mtTime, WORD wCommand, DWORD dwFlags, IDirectMusicChordMap* pChordMap, IDirectMusicSegment** ppTransSeg) {
ICOM_THIS(IDirectMusicComposerImpl,iface);
-
FIXME("(%p, %p, %p, %ld, %d, %ld, %p, %p): stub\n", This, pFromSeg, pToSeg, mtTime, wCommand, dwFlags, pChordMap, ppTransSeg);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicComposerImpl_AutoTransition (LPDIRECTMUSICCOMPOSER iface, IDirectMusicPerformance* pPerformance, IDirectMusicSegment* pToSeg, WORD wCommand, DWORD dwFlags, IDirectMusicChordMap* pChordMap, IDirectMusicSegment** ppTransSeg, IDirectMusicSegmentState** ppToSegState, IDirectMusicSegmentState** ppTransSegState)
-{
+HRESULT WINAPI IDirectMusicComposerImpl_AutoTransition (LPDIRECTMUSICCOMPOSER iface, IDirectMusicPerformance* pPerformance, IDirectMusicSegment* pToSeg, WORD wCommand, DWORD dwFlags, IDirectMusicChordMap* pChordMap, IDirectMusicSegment** ppTransSeg, IDirectMusicSegmentState** ppToSegState, IDirectMusicSegmentState** ppTransSegState) {
ICOM_THIS(IDirectMusicComposerImpl,iface);
-
FIXME("(%p, %p, %d, %ld, %p, %p, %p, %p): stub\n", This, pPerformance, wCommand, dwFlags, pChordMap, ppTransSeg, ppToSegState, ppTransSegState);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicComposerImpl_ComposeTemplateFromShape (LPDIRECTMUSICCOMPOSER iface, WORD wNumMeasures, WORD wShape, BOOL fIntro, BOOL fEnd, WORD wEndLength, IDirectMusicSegment** ppTemplate)
-{
+HRESULT WINAPI IDirectMusicComposerImpl_ComposeTemplateFromShape (LPDIRECTMUSICCOMPOSER iface, WORD wNumMeasures, WORD wShape, BOOL fIntro, BOOL fEnd, WORD wEndLength, IDirectMusicSegment** ppTemplate) {
ICOM_THIS(IDirectMusicComposerImpl,iface);
-
FIXME("(%p, %d, %d, %d, %d, %d, %p): stub\n", This, wNumMeasures, wShape, fIntro, fEnd, wEndLength, ppTemplate);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicComposerImpl_ChangeChordMap (LPDIRECTMUSICCOMPOSER iface, IDirectMusicSegment* pSegment, BOOL fTrackScale, IDirectMusicChordMap* pChordMap)
-{
+HRESULT WINAPI IDirectMusicComposerImpl_ChangeChordMap (LPDIRECTMUSICCOMPOSER iface, IDirectMusicSegment* pSegment, BOOL fTrackScale, IDirectMusicChordMap* pChordMap) {
ICOM_THIS(IDirectMusicComposerImpl,iface);
-
FIXME("(%p, %p, %d, %p): stub\n", This, pSegment, fTrackScale, pChordMap);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicComposer) DirectMusicComposer_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicComposer) DirectMusicComposer_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
IDirectMusicComposerImpl_QueryInterface,
IDirectMusicComposerImpl_AddRef,
@@ -132,22 +102,16 @@
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicComposer (LPCGUID lpcGUID, LPDIRECTMUSICCOMPOSER* ppDMCP, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicComposerImpl* dmcompos;
+HRESULT WINAPI DMUSIC_CreateDirectMusicComposerImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicComposerImpl* obj;
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicComposer)) {
- dmcompos = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicComposerImpl));
- if (NULL == dmcompos) {
- *ppDMCP = (LPDIRECTMUSICCOMPOSER) NULL;
- return E_OUTOFMEMORY;
- }
- dmcompos->lpVtbl = &DirectMusicComposer_Vtbl;
- dmcompos->ref = 1;
- *ppDMCP = (LPDIRECTMUSICCOMPOSER) dmcompos;
- return S_OK;
+ obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicComposerImpl));
+ if (NULL == obj) {
+ *ppobj = (LPDIRECTMUSICCOMPOSER) NULL;
+ return E_OUTOFMEMORY;
}
- WARN("No interface found\n");
+ obj->lpVtbl = &DirectMusicComposer_Vtbl;
+ obj->ref = 0; /* will be inited by QueryInterface */
- return E_NOINTERFACE;
+ return IDirectMusicComposerImpl_QueryInterface ((LPDIRECTMUSICCOMPOSER)obj, lpcGUID, ppobj);
}
diff --git a/dlls/dmcompos/dmcompos_main.c b/dlls/dmcompos/dmcompos_main.c
index 75bf4ca..7597174 100644
--- a/dlls/dmcompos/dmcompos_main.c
+++ b/dlls/dmcompos/dmcompos_main.c
@@ -1,6 +1,6 @@
/* DirectMusicComposer Main
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,8 +21,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(dmcompos);
-typedef struct
-{
+typedef struct {
/* IUnknown fields */
ICOM_VFIELD(IClassFactory);
DWORD ref;
@@ -31,44 +30,30 @@
/******************************************************************
* DirectMusicChordMap ClassFactory
*/
-static HRESULT WINAPI ChordMapCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI ChordMapCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI ChordMapCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ChordMapCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI ChordMapCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ChordMapCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI ChordMapCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI ChordMapCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicChordMap)) {
- return DMUSIC_CreateDirectMusicChordMap (riid, (LPDIRECTMUSICCHORDMAP*)ppobj, pOuter);
- } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
- return DMUSIC_CreateDirectMusicChordMapObject (riid, (LPDIRECTMUSICOBJECT*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicChordMapImpl (riid, ppobj, pOuter);
}
-static HRESULT WINAPI ChordMapCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI ChordMapCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -88,42 +73,30 @@
/******************************************************************
* DirectMusicComposer ClassFactory
*/
-static HRESULT WINAPI ComposerCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI ComposerCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI ComposerCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ComposerCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI ComposerCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ComposerCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI ComposerCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI ComposerCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicComposer)) {
- return DMUSIC_CreateDirectMusicComposer (riid, (LPDIRECTMUSICCOMPOSER*)ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicComposerImpl (riid, ppobj, pOuter);
}
-static HRESULT WINAPI ComposerCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI ComposerCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -143,43 +116,30 @@
/******************************************************************
* DirectMusicChordMapTrack ClassFactory
*/
-static HRESULT WINAPI ChordMapTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI ChordMapTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI ChordMapTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ChordMapTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI ChordMapTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ChordMapTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI ChordMapTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI ChordMapTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack)
- || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicChordMapTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicChordMapTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI ChordMapTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI ChordMapTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -199,41 +159,32 @@
/******************************************************************
* DirectMusicTemplate ClassFactory
*/
-static HRESULT WINAPI TemplateCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI TemplateCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI TemplateCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI TemplateCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI TemplateCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI TemplateCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI TemplateCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI TemplateCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
-
/* nothing yet */
-
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-static HRESULT WINAPI TemplateCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI TemplateCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -253,43 +204,30 @@
/******************************************************************
* DirectMusicSignPostTrack ClassFactory
*/
-static HRESULT WINAPI SignPostTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI SignPostTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI SignPostTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI SignPostTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI SignPostTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI SignPostTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI SignPostTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI SignPostTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack)
- || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicSignPostTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicSignPostTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI SignPostTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI SignPostTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -311,15 +249,12 @@
*
*
*/
-BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
-{
- if (fdwReason == DLL_PROCESS_ATTACH)
- {
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
+ if (fdwReason == DLL_PROCESS_ATTACH) {
DisableThreadLibraryCalls(hinstDLL);
/* FIXME: Initialisation */
}
- else if (fdwReason == DLL_PROCESS_DETACH)
- {
+ else if (fdwReason == DLL_PROCESS_DETACH) {
/* FIXME: Cleanup */
}
@@ -332,10 +267,8 @@
*
*
*/
-HRESULT WINAPI DMCOMPOS_DllCanUnloadNow(void)
-{
+HRESULT WINAPI DMCOMPOS_DllCanUnloadNow(void) {
FIXME("(void): stub\n");
-
return S_FALSE;
}
@@ -345,8 +278,7 @@
*
*
*/
-HRESULT WINAPI DMCOMPOS_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
-{
+HRESULT WINAPI DMCOMPOS_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) {
TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
if (IsEqualCLSID (rclsid, &CLSID_DirectMusicChordMap) && IsEqualIID (riid, &IID_IClassFactory)) {
*ppv = (LPVOID) &ChordMap_CF;
diff --git a/dlls/dmcompos/dmcompos_private.h b/dlls/dmcompos/dmcompos_private.h
index 86ab6ca..32ec55b 100644
--- a/dlls/dmcompos/dmcompos_private.h
+++ b/dlls/dmcompos/dmcompos_private.h
@@ -1,6 +1,6 @@
/* DirectMusicComposer Private Include
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,89 +23,100 @@
#include <stdarg.h>
#include "windef.h"
-#include "wine/debug.h"
#include "winbase.h"
#include "winnt.h"
#include "wingdi.h"
-#include "dmusicc.h"
+#include "winuser.h"
+
+#include "wine/debug.h"
+#include "wine/list.h"
+#include "wine/unicode.h"
+#include "winreg.h"
+
#include "dmusici.h"
-#include "dmusics.h"
-#include "dmplugin.h"
#include "dmusicf.h"
-#include "dsound.h"
+#include "dmusics.h"
/*****************************************************************************
* Interfaces
*/
typedef struct IDirectMusicChordMapImpl IDirectMusicChordMapImpl;
typedef struct IDirectMusicComposerImpl IDirectMusicComposerImpl;
-
-typedef struct IDirectMusicChordMapObject IDirectMusicChordMapObject;
-typedef struct IDirectMusicChordMapObjectStream IDirectMusicChordMapObjectStream;
-
typedef struct IDirectMusicChordMapTrack IDirectMusicChordMapTrack;
-typedef struct IDirectMusicChordMapTrackStream IDirectMusicChordMapTrackStream;
typedef struct IDirectMusicSignPostTrack IDirectMusicSignPostTrack;
-typedef struct IDirectMusicSignPostTrackStream IDirectMusicSignPostTrackStream;
/*****************************************************************************
* Predeclare the interface implementation structures
*/
-extern ICOM_VTABLE(IDirectMusicChordMap) DirectMusicChordMap_Vtbl;
+extern ICOM_VTABLE(IUnknown) DirectMusicChordMap_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicChordMap) DirectMusicChordMap_ChordMap_Vtbl;
+extern ICOM_VTABLE(IDirectMusicObject) DirectMusicChordMap_Object_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicChordMap_PersistStream_Vtbl;
+
extern ICOM_VTABLE(IDirectMusicComposer) DirectMusicComposer_Vtbl;
-extern ICOM_VTABLE(IDirectMusicObject) DirectMusicChordMapObject_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicChordMapObjectStream_Vtbl;
+extern ICOM_VTABLE(IUnknown) DirectMusicChordMapTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicChordMapTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicChordMapTrack_PersistStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicChordMapTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicChordMapTrackStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicSignPostTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicSignPostTrackStream_Vtbl;
+extern ICOM_VTABLE(IUnknown) DirectMusicSignPostTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicSignPostTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicSignPostTrack_PersistStream_Vtbl;
/*****************************************************************************
* ClassFactory
*/
-
-/* can support IID_IDirectMusicChordMap
- * return always an IDirectMusicChordMapImpl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicChordMap (LPCGUID lpcGUID, LPDIRECTMUSICCHORDMAP* ppDMCM, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicComposer
- * return always an IDirectMusicComposerImpl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicComposer (LPCGUID lpcGUID, LPDIRECTMUSICCOMPOSER* ppDMCP, LPUNKNOWN pUnkOuter);
-
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicChordMapObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter);
-
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicChordMapTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicSignPostTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicChordMapImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicComposerImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicChordMapTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicSignPostTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
/*****************************************************************************
* IDirectMusicChordMapImpl implementation structure
*/
-struct IDirectMusicChordMapImpl
-{
+struct IDirectMusicChordMapImpl {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicChordMap);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicChordMap) *ChordMapVtbl;
+ ICOM_VTABLE(IDirectMusicObject) *ObjectVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicChordMapImpl fields */
- IDirectMusicChordMapObject* pObject;
- DWORD dwScale;
+ LPDMUS_OBJECTDESC pDesc;
+
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicChordMapImpl_QueryInterface (LPDIRECTMUSICCHORDMAP iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicChordMapImpl_AddRef (LPDIRECTMUSICCHORDMAP iface);
-extern ULONG WINAPI IDirectMusicChordMapImpl_Release (LPDIRECTMUSICCHORDMAP iface);
+extern HRESULT WINAPI IDirectMusicChordMapImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicChordMapImpl_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicChordMapImpl_IUnknown_Release (LPUNKNOWN iface);
/* IDirectMusicChordMap: */
-extern HRESULT WINAPI IDirectMusicChordMapImpl_GetScale (LPDIRECTMUSICCHORDMAP iface, DWORD* pdwScale);
+extern HRESULT WINAPI IDirectMusicChordMapImpl_IDirectMusicChordMap_QueryInterface (LPDIRECTMUSICCHORDMAP iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicChordMapImpl_IDirectMusicChordMap_AddRef (LPDIRECTMUSICCHORDMAP iface);
+extern ULONG WINAPI IDirectMusicChordMapImpl_IDirectMusicChordMap_Release (LPDIRECTMUSICCHORDMAP iface);
+extern HRESULT WINAPI IDirectMusicChordMapImpl_IDirectMusicChordMap_GetScale (LPDIRECTMUSICCHORDMAP iface, DWORD* pdwScale);
+/* IDirectMusicObject: */
+extern HRESULT WINAPI IDirectMusicChordMapImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicChordMapImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface);
+extern ULONG WINAPI IDirectMusicChordMapImpl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface);
+extern HRESULT WINAPI IDirectMusicChordMapImpl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicChordMapImpl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicChordMapImpl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
+/* IPersistStream: */
+extern HRESULT WINAPI IDirectMusicChordMapImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicChordMapImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicChordMapImpl_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicChordMapImpl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicChordMapImpl_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicChordMapImpl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicChordMapImpl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicChordMapImpl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicComposerImpl implementation structure
*/
-struct IDirectMusicComposerImpl
-{
+struct IDirectMusicComposerImpl {
/* IUnknown fields */
ICOM_VFIELD(IDirectMusicComposer);
DWORD ref;
@@ -127,174 +138,197 @@
/*****************************************************************************
- * IDirectMusicChordMapObject implementation structure
- */
-struct IDirectMusicChordMapObject
-{
- /* IUnknown fields */
- ICOM_VFIELD(IDirectMusicObject);
- DWORD ref;
-
- /* IDirectMusicObjectImpl fields */
- LPDMUS_OBJECTDESC pDesc;
- IDirectMusicChordMapObjectStream* pStream;
- IDirectMusicChordMapImpl* pChordMap;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicChordMapObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicChordMapObject_AddRef (LPDIRECTMUSICOBJECT iface);
-extern ULONG WINAPI IDirectMusicChordMapObject_Release (LPDIRECTMUSICOBJECT iface);
-/* IDirectMusicObject: */
-extern HRESULT WINAPI IDirectMusicChordMapObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicChordMapObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicChordMapObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
-
-/*****************************************************************************
- * IDirectMusicChordMapObjectStream implementation structure
- */
-struct IDirectMusicChordMapObjectStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicChordMapObject* pParentObject;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicChordMapObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicChordMapObjectStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicChordMapObjectStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicChordMapObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
-/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicChordMapObjectStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicChordMapObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicChordMapObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicChordMapObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
-
-
-/*****************************************************************************
* IDirectMusicChordMapTrack implementation structure
*/
-struct IDirectMusicChordMapTrack
-{
+struct IDirectMusicChordMapTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicChordMapTrack fields */
- IDirectMusicChordMapTrackStream* pStream;
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicChordMapTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicChordMapTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicChordMapTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicChordMapTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicChordMapTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicChordMapTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicChordMapTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicChordMapTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicChordMapTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicChordMapTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicChordMapTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicChordMapTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicChordMapTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicChordMapTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicChordMapTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicChordMapTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicChordMapTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicChordMapTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-
-/*****************************************************************************
- * IDirectMusicChordMapTrackStream implementation structure
- */
-struct IDirectMusicChordMapTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicChordMapTrack* pParentTrack;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicChordMapTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicChordMapTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicChordMapTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicChordMapTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicChordMapTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicChordMapTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicChordMapTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicChordMapTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicChordMapTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicChordMapTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicChordMapTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicChordMapTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicChordMapTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicSignPostTrack implementation structure
*/
-struct IDirectMusicSignPostTrack
-{
+struct IDirectMusicSignPostTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicSignPostTrack fields */
- IDirectMusicSignPostTrackStream* pStream;
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicSignPostTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicSignPostTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicSignPostTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicSignPostTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicSignPostTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicSignPostTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicSignPostTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicSignPostTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicSignPostTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicSignPostTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicSignPostTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicSignPostTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicSignPostTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicSignPostTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicSignPostTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicSignPostTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicSignPostTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicSignPostTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicSignPostTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicSignPostTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+/* IPersistStream: */
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicSignPostTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicSignPostTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicSignPostTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+
/*****************************************************************************
- * IDirectMusicSignPostTrackStream implementation structure
+ * Misc.
*/
-struct IDirectMusicSignPostTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
+/* for simpler reading */
+typedef struct _DMUS_PRIVATE_CHUNK {
+ FOURCC fccID; /* FOURCC ID of the chunk */
+ DWORD dwSize; /* size of the chunk */
+} DMUS_PRIVATE_CHUNK, *LPDMUS_PRIVATE_CHUNK;
- /* IPersistStreamImpl fields */
- IDirectMusicSignPostTrack* pParentTrack;
-};
+/* check whether the given DWORD is even (return 0) or odd (return 1) */
+static inline int even_or_odd (DWORD number) {
+ return (number & 0x1); /* basically, check if bit 0 is set ;) */
+}
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicSignPostTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicSignPostTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicSignPostTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicSignPostTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
-/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicSignPostTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicSignPostTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicSignPostTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicSignPostTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+/* FOURCC to string conversion for debug messages */
+static inline const char *debugstr_fourcc (DWORD fourcc) {
+ if (!fourcc) return "'null'";
+ return wine_dbg_sprintf ("\'%c%c%c%c\'",
+ (char)(fourcc), (char)(fourcc >> 8),
+ (char)(fourcc >> 16), (char)(fourcc >> 24));
+}
+
+/* DMUS_VERSION struct to string conversion for debug messages */
+static inline const char *debugstr_dmversion (LPDMUS_VERSION version) {
+ if (!version) return "'null'";
+ return wine_dbg_sprintf ("\'%i,%i,%i,%i\'",
+ (int)((version->dwVersionMS && 0xFFFF0000) >> 8), (int)(version->dwVersionMS && 0x0000FFFF),
+ (int)((version->dwVersionLS && 0xFFFF0000) >> 8), (int)(version->dwVersionLS && 0x0000FFFF));
+}
+
+/* used for initialising structs (primarily for DMUS_OBJECTDESC) */
+#define DM_STRUCT_INIT(x) \
+ do { \
+ memset((x), 0, sizeof(*(x))); \
+ (x)->dwSize = sizeof(*x); \
+ } while (0)
+
+
+/* used for generic dumping (copied from ddraw) */
+typedef struct {
+ DWORD val;
+ const char* name;
+} flag_info;
+
+/* generic dump function */
+static inline void DMUSIC_dump_flags_ (DWORD flags, const flag_info* names, size_t num_names, int newline) {
+ unsigned int i;
+
+ for (i=0; i < num_names; i++) {
+ if ((flags & names[i].val) || /* standard flag value */
+ ((!flags) && (!names[i].val))) /* zero value only */
+ DPRINTF("%s ", names[i].name);
+ }
+
+ if (newline) DPRINTF("\n");
+}
+
+#define FE(x) { x, #x }
+#define DMUSIC_dump_flags(flags,names,num_names) DMUSIC_dump_flags_(flags, names, num_names, 1)
+
+static inline void DMUSIC_dump_DMUS_OBJ_FLAGS (DWORD flagmask) {
+ static const flag_info flags[] = {
+ FE(DMUS_OBJ_OBJECT),
+ FE(DMUS_OBJ_CLASS),
+ FE(DMUS_OBJ_NAME),
+ FE(DMUS_OBJ_CATEGORY),
+ FE(DMUS_OBJ_FILENAME),
+ FE(DMUS_OBJ_FULLPATH),
+ FE(DMUS_OBJ_URL),
+ FE(DMUS_OBJ_VERSION),
+ FE(DMUS_OBJ_DATE),
+ FE(DMUS_OBJ_LOADED),
+ FE(DMUS_OBJ_MEMORY),
+ FE(DMUS_OBJ_STREAM)
+ };
+ DMUSIC_dump_flags(flagmask, flags, sizeof(flags)/sizeof(flags[0]));
+}
+
+static inline void DMUSIC_dump_DMUS_OBJECTDESC (LPDMUS_OBJECTDESC pDesc) {
+ if (pDesc) {
+ DPRINTF("DMUS_OBJECTDESC (%p)\n", pDesc);
+ DPRINTF(" - dwSize = %ld\n", pDesc->dwSize);
+ DPRINTF(" - dwValidData = ");
+ DMUSIC_dump_DMUS_OBJ_FLAGS (pDesc->dwValidData);
+ if (pDesc->dwValidData & DMUS_OBJ_CLASS) DPRINTF(" - guidClass = %s\n", debugstr_guid(&pDesc->guidClass));
+ if (pDesc->dwValidData & DMUS_OBJ_OBJECT) DPRINTF(" - guidObject = %s\n", debugstr_guid(&pDesc->guidObject));
+ if (pDesc->dwValidData & DMUS_OBJ_DATE) DPRINTF(" - ftDate = FIXME\n");
+ if (pDesc->dwValidData & DMUS_OBJ_VERSION) DPRINTF(" - vVersion = %s\n", debugstr_dmversion(&pDesc->vVersion));
+ if (pDesc->dwValidData & DMUS_OBJ_NAME) DPRINTF(" - wszName = %s\n", debugstr_w(pDesc->wszName));
+ if (pDesc->dwValidData & DMUS_OBJ_CATEGORY) DPRINTF(" - wszCategory = %s\n", debugstr_w(pDesc->wszCategory));
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME) DPRINTF(" - wszFileName = %s\n", debugstr_w(pDesc->wszFileName));
+ if (pDesc->dwValidData & DMUS_OBJ_MEMORY) DPRINTF(" - llMemLength = %lli\n - pbMemData = %p\n", pDesc->llMemLength, pDesc->pbMemData);
+ if (pDesc->dwValidData & DMUS_OBJ_STREAM) DPRINTF(" - pStream = %p\n", pDesc->pStream);
+ } else {
+ DPRINTF("(NULL)\n");
+ }
+}
#endif /* __WINE_DMCOMPOS_PRIVATE_H */
diff --git a/dlls/dmcompos/regsvr.c b/dlls/dmcompos/regsvr.c
index 76cc768..16f8b37 100644
--- a/dlls/dmcompos/regsvr.c
+++ b/dlls/dmcompos/regsvr.c
@@ -18,21 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include <stdarg.h>
-#include <string.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winreg.h"
-#include "winerror.h"
-
-#include "dmusics.h"
-#include "dmusici.h"
-#include "dmplugin.h"
-
-#include "wine/debug.h"
+#include "dmcompos_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmcompos);
@@ -44,8 +30,7 @@
/***********************************************************************
* interface for self-registering
*/
-struct regsvr_interface
-{
+struct regsvr_interface {
IID const *iid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
IID const *base_iid; /* can be NULL to omit */
@@ -57,8 +42,7 @@
static HRESULT register_interfaces(struct regsvr_interface const *list);
static HRESULT unregister_interfaces(struct regsvr_interface const *list);
-struct regsvr_coclass
-{
+struct regsvr_coclass {
CLSID const *clsid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
LPCSTR ips; /* can be NULL to omit */
@@ -124,8 +108,7 @@
/***********************************************************************
* register_interfaces
*/
-static HRESULT register_interfaces(struct regsvr_interface const *list)
-{
+static HRESULT register_interfaces(struct regsvr_interface const *list) {
LONG res = ERROR_SUCCESS;
HKEY interface_key;
@@ -194,8 +177,7 @@
/***********************************************************************
* unregister_interfaces
*/
-static HRESULT unregister_interfaces(struct regsvr_interface const *list)
-{
+static HRESULT unregister_interfaces(struct regsvr_interface const *list) {
LONG res = ERROR_SUCCESS;
HKEY interface_key;
@@ -219,8 +201,7 @@
/***********************************************************************
* register_coclasses
*/
-static HRESULT register_coclasses(struct regsvr_coclass const *list)
-{
+static HRESULT register_coclasses(struct regsvr_coclass const *list) {
LONG res = ERROR_SUCCESS;
HKEY coclass_key;
@@ -301,8 +282,7 @@
/***********************************************************************
* unregister_coclasses
*/
-static HRESULT unregister_coclasses(struct regsvr_coclass const *list)
-{
+static HRESULT unregister_coclasses(struct regsvr_coclass const *list) {
LONG res = ERROR_SUCCESS;
HKEY coclass_key;
@@ -338,8 +318,7 @@
/***********************************************************************
* regsvr_key_guid
*/
-static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid)
-{
+static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid) {
WCHAR buf[39];
StringFromGUID2(guid, buf, 39);
@@ -352,8 +331,7 @@
static LONG register_key_defvalueW(
HKEY base,
WCHAR const *name,
- WCHAR const *value)
-{
+ WCHAR const *value) {
LONG res;
HKEY key;
@@ -372,8 +350,7 @@
static LONG register_key_defvalueA(
HKEY base,
WCHAR const *name,
- char const *value)
-{
+ char const *value) {
LONG res;
HKEY key;
@@ -394,8 +371,7 @@
char const *progid,
char const *curver_progid,
char const *name,
- char const *extra)
-{
+ char const *extra) {
LONG res;
HKEY progid_key;
@@ -439,8 +415,7 @@
/***********************************************************************
* recursive_delete_key
*/
-static LONG recursive_delete_key(HKEY key)
-{
+static LONG recursive_delete_key(HKEY key) {
LONG res;
WCHAR subkey_name[MAX_PATH];
DWORD cName;
@@ -471,8 +446,7 @@
/***********************************************************************
* recursive_delete_keyA
*/
-static LONG recursive_delete_keyA(HKEY base, char const *name)
-{
+static LONG recursive_delete_keyA(HKEY base, char const *name) {
LONG res;
HKEY key;
@@ -487,8 +461,7 @@
/***********************************************************************
* recursive_delete_keyW
*/
-static LONG recursive_delete_keyW(HKEY base, WCHAR const *name)
-{
+static LONG recursive_delete_keyW(HKEY base, WCHAR const *name) {
LONG res;
HKEY key;
@@ -558,8 +531,7 @@
/***********************************************************************
* DllRegisterServer (DMCOMPOS.3)
*/
-HRESULT WINAPI DMCOMPOS_DllRegisterServer(void)
-{
+HRESULT WINAPI DMCOMPOS_DllRegisterServer(void) {
HRESULT hr;
TRACE("\n");
@@ -573,8 +545,7 @@
/***********************************************************************
* DllUnregisterServer (DMCOMPOS.4)
*/
-HRESULT WINAPI DMCOMPOS_DllUnregisterServer(void)
-{
+HRESULT WINAPI DMCOMPOS_DllUnregisterServer(void) {
HRESULT hr;
TRACE("\n");
diff --git a/dlls/dmcompos/signposttrack.c b/dlls/dmcompos/signposttrack.c
index d508cf2..2219623 100644
--- a/dlls/dmcompos/signposttrack.c
+++ b/dlls/dmcompos/signposttrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicSignPostTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmcompos_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmcompos);
@@ -34,19 +26,21 @@
* IDirectMusicSignPostTrack implementation
*/
/* IDirectMusicSignPostTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicSignPostTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicSignPostTrack,iface);
+HRESULT WINAPI IDirectMusicSignPostTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicSignPostTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicSignPostTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicSignPostTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicSignPostTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicSignPostTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
@@ -54,16 +48,14 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicSignPostTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicSignPostTrack,iface);
+ULONG WINAPI IDirectMusicSignPostTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicSignPostTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicSignPostTrack,iface);
+ULONG WINAPI IDirectMusicSignPostTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -72,269 +64,211 @@
return ref;
}
-/* IDirectMusicSignPostTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicSignPostTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicSignPostTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicSignPostTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicSignPostTrack_IUnknown_QueryInterface,
+ IDirectMusicSignPostTrack_IUnknown_AddRef,
+ IDirectMusicSignPostTrack_IUnknown_Release
+};
+/* IDirectMusicSignPostTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface);
+ return IDirectMusicSignPostTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface);
+ return IDirectMusicSignPostTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface);
+ return IDirectMusicSignPostTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSignPostTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicSignPostTrack,iface);
-
+HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSignPostTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
-{
- ICOM_THIS(IDirectMusicSignPostTrack,iface);
-
+HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSignPostTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
+HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
ICOM_THIS(IDirectMusicSignPostTrack,iface);
-
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSignPostTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicSignPostTrack,iface);
-
+HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSignPostTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicSignPostTrack,iface);
-
+HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSignPostTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicSignPostTrack,iface);
-
+HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
/* didn't find any params */
-
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicSignPostTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicSignPostTrack,iface);
-
+HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSignPostTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicSignPostTrack,iface);
-
+HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSignPostTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicSignPostTrack,iface);
-
+HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicSignPostTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicSignPostTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicSignPostTrack,iface);
-
+HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSignPostTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicSignPostTrack,iface);
-
+HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSignPostTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicSignPostTrack,iface);
-
+HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSignPostTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
+HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
ICOM_THIS(IDirectMusicSignPostTrack,iface);
-
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSignPostTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicSignPostTrack,iface);
-
+HRESULT WINAPI IDirectMusicSignPostTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicSignPostTrack_Vtbl =
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicSignPostTrack_Track_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicSignPostTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicSignPostTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicSignPostTrack_IDirectMusicTrack_Release,
+ IDirectMusicSignPostTrack_IDirectMusicTrack_Init,
+ IDirectMusicSignPostTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicSignPostTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicSignPostTrack_IDirectMusicTrack_Play,
+ IDirectMusicSignPostTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicSignPostTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicSignPostTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicSignPostTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicSignPostTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicSignPostTrack_IDirectMusicTrack_Clone,
+ IDirectMusicSignPostTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicSignPostTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicSignPostTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicSignPostTrack_IDirectMusicTrack_Compose,
+ IDirectMusicSignPostTrack_IDirectMusicTrack_Join
+};
+
+/* IDirectMusicSignPostTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicSignPostTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, PersistStreamVtbl, iface);
+ return IDirectMusicSignPostTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicSignPostTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, PersistStreamVtbl, iface);
+ return IDirectMusicSignPostTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicSignPostTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, PersistStreamVtbl, iface);
+ return IDirectMusicSignPostTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicSignPostTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicSignPostTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicSignPostTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
+ ICOM_THIS_MULTI(IDirectMusicSignPostTrack, PersistStreamVtbl, iface);
+ FIXME("(%p, %p): Loading not implemented yet\n", This, pStm);
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicSignPostTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicSignPostTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
+ return E_NOTIMPL;
+}
+
+ICOM_VTABLE(IPersistStream) DirectMusicSignPostTrack_PersistStream_Vtbl =
{
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicSignPostTrack_QueryInterface,
- IDirectMusicSignPostTrack_AddRef,
- IDirectMusicSignPostTrack_Release,
- IDirectMusicSignPostTrack_Init,
- IDirectMusicSignPostTrack_InitPlay,
- IDirectMusicSignPostTrack_EndPlay,
- IDirectMusicSignPostTrack_Play,
- IDirectMusicSignPostTrack_GetParam,
- IDirectMusicSignPostTrack_SetParam,
- IDirectMusicSignPostTrack_IsParamSupported,
- IDirectMusicSignPostTrack_AddNotificationType,
- IDirectMusicSignPostTrack_RemoveNotificationType,
- IDirectMusicSignPostTrack_Clone,
- IDirectMusicSignPostTrack_PlayEx,
- IDirectMusicSignPostTrack_GetParamEx,
- IDirectMusicSignPostTrack_SetParamEx,
- IDirectMusicSignPostTrack_Compose,
- IDirectMusicSignPostTrack_Join
+ IDirectMusicSignPostTrack_IPersistStream_QueryInterface,
+ IDirectMusicSignPostTrack_IPersistStream_AddRef,
+ IDirectMusicSignPostTrack_IPersistStream_Release,
+ IDirectMusicSignPostTrack_IPersistStream_GetClassID,
+ IDirectMusicSignPostTrack_IPersistStream_IsDirty,
+ IDirectMusicSignPostTrack_IPersistStream_Load,
+ IDirectMusicSignPostTrack_IPersistStream_Save,
+ IDirectMusicSignPostTrack_IPersistStream_GetSizeMax
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicSignPostTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
+HRESULT WINAPI DMUSIC_CreateDirectMusicSignPostTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
IDirectMusicSignPostTrack* track;
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSignPostTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicSignPostTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSignPostTrackStream));
- track->pStream->lpVtbl = &DirectMusicSignPostTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSignPostTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
}
+ track->UnknownVtbl = &DirectMusicSignPostTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicSignPostTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicSignPostTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicSignPostTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
- WARN("No interface found\n");
- return E_NOINTERFACE;
+ return IDirectMusicSignPostTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
}
-
-
-/*****************************************************************************
- * IDirectMusicSignPostTrackStream implementation
- */
-/* IDirectMusicSignPostTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicSignPostTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicSignPostTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicSignPostTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicSignPostTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicSignPostTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicSignPostTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicSignPostTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicSignPostTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicSignPostTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- return E_NOTIMPL;
-}
-
-/* IDirectMusicSignPostTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicSignPostTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicSignPostTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
- FIXME(": Loading not implemented yet\n");
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicSignPostTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicSignPostTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
- return E_NOTIMPL;
-}
-
-ICOM_VTABLE(IPersistStream) DirectMusicSignPostTrackStream_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicSignPostTrackStream_QueryInterface,
- IDirectMusicSignPostTrackStream_AddRef,
- IDirectMusicSignPostTrackStream_Release,
- IDirectMusicSignPostTrackStream_GetClassID,
- IDirectMusicSignPostTrackStream_IsDirty,
- IDirectMusicSignPostTrackStream_Load,
- IDirectMusicSignPostTrackStream_Save,
- IDirectMusicSignPostTrackStream_GetSizeMax
-};
diff --git a/dlls/dmcompos/version.rc b/dlls/dmcompos/version.rc
index 162e6f8..c095d32 100644
--- a/dlls/dmcompos/version.rc
+++ b/dlls/dmcompos/version.rc
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc <rok.mandeljc@gimb.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -18,10 +18,10 @@
#define WINE_FILEDESCRIPTION_STR "Wine DirectMusic Composer"
#define WINE_FILENAME_STR "dmcompos.dll"
-#define WINE_FILEVERSION 4,8,1,881
-#define WINE_FILEVERSION_STR "4.8.1.881"
-#define WINE_PRODUCTVERSION 4,8,1,881
-#define WINE_PRODUCTVERSION_STR "4.8"
+#define WINE_FILEVERSION 4,9,0,900
+#define WINE_FILEVERSION_STR "4.9.0.900"
+#define WINE_PRODUCTVERSION 4,9,0,900
+#define WINE_PRODUCTVERSION_STR "4.9"
#define WINE_PRODUCTNAME_STR "DirectX"
#include "wine/wine_common_ver.rc"
diff --git a/dlls/dmime/Makefile.in b/dlls/dmime/Makefile.in
index 2d102ce..3af42a0 100644
--- a/dlls/dmime/Makefile.in
+++ b/dlls/dmime/Makefile.in
@@ -20,7 +20,6 @@
segmentstate.c \
segtriggertrack.c \
seqtrack.c \
- song.c \
sysextrack.c \
tempotrack.c \
timesigtrack.c \
diff --git a/dlls/dmime/audiopath.c b/dlls/dmime/audiopath.c
index e6f1dec..c540f32 100644
--- a/dlls/dmime/audiopath.c
+++ b/dlls/dmime/audiopath.c
@@ -1,6 +1,6 @@
/* IDirectMusicAudioPath Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,27 +17,33 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmime_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
+WINE_DECLARE_DEBUG_CHANNEL(dmfile);
+/*****************************************************************************
+ * IDirectMusicAudioPathImpl implementation
+ */
/* IDirectMusicAudioPath IUnknown part: */
-HRESULT WINAPI IDirectMusicAudioPathImpl_QueryInterface (LPDIRECTMUSICAUDIOPATH iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicAudioPathImpl,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicAudioPath)) {
- IDirectMusicAudioPathImpl_AddRef(iface);
- *ppobj = This;
+HRESULT WINAPI IDirectMusicAudioPathImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, UnknownVtbl, iface);
+
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPVOID)&This->UnknownVtbl;
+ IDirectMusicAudioPathImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicAudioPath)) {
+ *ppobj = (LPVOID)&This->AudioPathVtbl;
+ IDirectMusicAudioPathImpl_IDirectMusicAudioPath_AddRef ((LPDIRECTMUSICAUDIOPATH)&This->AudioPathVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
+ *ppobj = (LPVOID)&This->ObjectVtbl;
+ IDirectMusicAudioPathImpl_IDirectMusicObject_AddRef ((LPDIRECTMUSICOBJECT)&This->ObjectVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IPersistStream)) {
+ *ppobj = (LPVOID)&This->PersistStreamVtbl;
+ IDirectMusicAudioPathImpl_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
@@ -45,16 +51,14 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicAudioPathImpl_AddRef (LPDIRECTMUSICAUDIOPATH iface)
-{
- ICOM_THIS(IDirectMusicAudioPathImpl,iface);
+ULONG WINAPI IDirectMusicAudioPathImpl_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicAudioPathImpl_Release (LPDIRECTMUSICAUDIOPATH iface)
-{
- ICOM_THIS(IDirectMusicAudioPathImpl,iface);
+ULONG WINAPI IDirectMusicAudioPathImpl_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -63,10 +67,31 @@
return ref;
}
-/* IDirectMusicAudioPath IDirectMusicAudioPath part: */
-HRESULT WINAPI IDirectMusicAudioPathImpl_GetObjectInPath (LPDIRECTMUSICAUDIOPATH iface, DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, WORD dwIndex, REFGUID iidInterface, void** ppObject)
-{
- ICOM_THIS(IDirectMusicAudioPathImpl,iface);
+ICOM_VTABLE(IUnknown) DirectMusicAudioPath_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicAudioPathImpl_IUnknown_QueryInterface,
+ IDirectMusicAudioPathImpl_IUnknown_AddRef,
+ IDirectMusicAudioPathImpl_IUnknown_Release
+};
+
+/* IDirectMusicAudioPathImpl IDirectMusicAudioPath part: */
+HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicAudioPath_QueryInterface (LPDIRECTMUSICAUDIOPATH iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, AudioPathVtbl, iface);
+ return IDirectMusicAudioPathImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicAudioPathImpl_IDirectMusicAudioPath_AddRef (LPDIRECTMUSICAUDIOPATH iface) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, AudioPathVtbl, iface);
+ return IDirectMusicAudioPathImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicAudioPathImpl_IDirectMusicAudioPath_Release (LPDIRECTMUSICAUDIOPATH iface) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, AudioPathVtbl, iface);
+ return IDirectMusicAudioPathImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicAudioPath_GetObjectInPath (LPDIRECTMUSICAUDIOPATH iface, DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, WORD dwIndex, REFGUID iidInterface, void** ppObject) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, AudioPathVtbl, iface);
FIXME("(%p, %ld, %ld, %ld, %s, %d, %s, %p): stub\n", This, dwPChannel, dwStage, dwBuffer, debugstr_guid(guidObject), dwIndex, debugstr_guid(iidInterface), ppObject);
@@ -102,13 +127,11 @@
if (IsEqualIID (iidInterface, &IID_IDirectMusicGraph)) {
if (NULL == This->pToolGraph) {
IDirectMusicGraphImpl* pGraph;
- pGraph = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicGraphImpl));
- pGraph->lpVtbl = &DirectMusicGraph_Vtbl;
- pGraph->ref = 1;
+ DMUSIC_CreateDirectMusicGraphImpl (&IID_IDirectMusicGraph, (LPVOID*)&pGraph, NULL);
This->pToolGraph = (IDirectMusicGraph*) pGraph;
}
*ppObject = (LPDIRECTMUSICGRAPH) This->pToolGraph;
- IDirectMusicGraphImpl_AddRef((LPDIRECTMUSICGRAPH) *ppObject);
+ IDirectMusicGraph_AddRef((LPDIRECTMUSICGRAPH) *ppObject);
return S_OK;
}
}
@@ -135,12 +158,10 @@
IDirectMusicPerformance8Impl_GetGraph((LPDIRECTMUSICPERFORMANCE8) This->pPerf, &pPerfoGraph);
if (NULL == pPerfoGraph) {
IDirectMusicGraphImpl* pGraph = NULL;
- pGraph = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicGraphImpl));
- pGraph->lpVtbl = &DirectMusicGraph_Vtbl;
- pGraph->ref = 1;
+ DMUSIC_CreateDirectMusicGraphImpl (&IID_IDirectMusicGraph, (LPVOID*)&pGraph, NULL);
IDirectMusicPerformance8Impl_SetGraph((LPDIRECTMUSICPERFORMANCE8) This->pPerf, (IDirectMusicGraph*) pGraph);
/* we need release as SetGraph do an AddRef */
- IDirectMusicGraphImpl_Release((LPDIRECTMUSICGRAPH) pGraph);
+ IDirectMusicGraph_Release((LPDIRECTMUSICGRAPH) pGraph);
pPerfoGraph = (LPDIRECTMUSICGRAPH) pGraph;
}
*ppObject = (LPDIRECTMUSICGRAPH) pPerfoGraph;
@@ -157,256 +178,467 @@
return E_INVALIDARG;
}
-HRESULT WINAPI IDirectMusicAudioPathImpl_Activate (LPDIRECTMUSICAUDIOPATH iface, BOOL fActivate)
-{
- ICOM_THIS(IDirectMusicAudioPathImpl,iface);
-
+HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicAudioPath_Activate (LPDIRECTMUSICAUDIOPATH iface, BOOL fActivate) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, AudioPathVtbl, iface);
FIXME("(%p, %d): stub\n", This, fActivate);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicAudioPathImpl_SetVolume (LPDIRECTMUSICAUDIOPATH iface, long lVolume, DWORD dwDuration)
-{
- ICOM_THIS(IDirectMusicAudioPathImpl,iface);
-
+HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicAudioPath_SetVolume (LPDIRECTMUSICAUDIOPATH iface, long lVolume, DWORD dwDuration) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, AudioPathVtbl, iface);
FIXME("(%p, %li, %ld): stub\n", This, lVolume, dwDuration);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicAudioPathImpl_ConvertPChannel (LPDIRECTMUSICAUDIOPATH iface, DWORD dwPChannelIn, DWORD* pdwPChannelOut)
-{
- ICOM_THIS(IDirectMusicAudioPathImpl,iface);
-
+HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicAudioPath_ConvertPChannel (LPDIRECTMUSICAUDIOPATH iface, DWORD dwPChannelIn, DWORD* pdwPChannelOut) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, AudioPathVtbl, iface);
FIXME("(%p, %ld, %p): stub\n", This, dwPChannelIn, pdwPChannelOut);
+ return S_OK;
+}
+
+ICOM_VTABLE(IDirectMusicAudioPath) DirectMusicAudioPath_AudioPath_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicAudioPathImpl_IDirectMusicAudioPath_QueryInterface,
+ IDirectMusicAudioPathImpl_IDirectMusicAudioPath_AddRef,
+ IDirectMusicAudioPathImpl_IDirectMusicAudioPath_Release,
+ IDirectMusicAudioPathImpl_IDirectMusicAudioPath_GetObjectInPath,
+ IDirectMusicAudioPathImpl_IDirectMusicAudioPath_Activate,
+ IDirectMusicAudioPathImpl_IDirectMusicAudioPath_SetVolume,
+ IDirectMusicAudioPathImpl_IDirectMusicAudioPath_ConvertPChannel
+};
+
+/* IDirectMusicAudioPathImpl IDirectMusicObject part: */
+HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, ObjectVtbl, iface);
+ return IDirectMusicAudioPathImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicAudioPathImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, ObjectVtbl, iface);
+ return IDirectMusicAudioPathImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicAudioPathImpl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, ObjectVtbl, iface);
+ return IDirectMusicAudioPathImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, ObjectVtbl, iface);
+ TRACE("(%p, %p)\n", This, pDesc);
+ /* I think we shouldn't return pointer here since then values can be changed; it'd be a mess */
+ memcpy (pDesc, This->pDesc, This->pDesc->dwSize);
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, ObjectVtbl, iface);
+ TRACE("(%p, %p): setting descriptor:\n", This, pDesc);
+ if (TRACE_ON(dmime)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
+ }
+
+ /* According to MSDN, we should copy only given values, not whole struct */
+ if (pDesc->dwValidData & DMUS_OBJ_OBJECT)
+ memcpy (&This->pDesc->guidObject, &pDesc->guidObject, sizeof (pDesc->guidObject));
+ if (pDesc->dwValidData & DMUS_OBJ_CLASS)
+ memcpy (&This->pDesc->guidClass, &pDesc->guidClass, sizeof (pDesc->guidClass));
+ if (pDesc->dwValidData & DMUS_OBJ_NAME)
+ strncpyW (This->pDesc->wszName, pDesc->wszName, DMUS_MAX_NAME);
+ if (pDesc->dwValidData & DMUS_OBJ_CATEGORY)
+ strncpyW (This->pDesc->wszCategory, pDesc->wszCategory, DMUS_MAX_CATEGORY);
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME)
+ strncpyW (This->pDesc->wszFileName, pDesc->wszFileName, DMUS_MAX_FILENAME);
+ if (pDesc->dwValidData & DMUS_OBJ_VERSION)
+ memcpy (&This->pDesc->vVersion, &pDesc->vVersion, sizeof (pDesc->vVersion));
+ if (pDesc->dwValidData & DMUS_OBJ_DATE)
+ memcpy (&This->pDesc->ftDate, &pDesc->ftDate, sizeof (pDesc->ftDate));
+ if (pDesc->dwValidData & DMUS_OBJ_MEMORY) {
+ memcpy (&This->pDesc->llMemLength, &pDesc->llMemLength, sizeof (pDesc->llMemLength));
+ memcpy (This->pDesc->pbMemData, pDesc->pbMemData, sizeof (pDesc->pbMemData));
+ }
+ if (pDesc->dwValidData & DMUS_OBJ_STREAM) {
+ /* according to MSDN, we copy the stream */
+ IStream_Clone (pDesc->pStream, &This->pDesc->pStream);
+ }
+
+ /* add new flags */
+ This->pDesc->dwValidData |= pDesc->dwValidData;
return S_OK;
}
-ICOM_VTABLE(IDirectMusicAudioPath) DirectMusicAudioPath_Vtbl =
-{
+HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, ObjectVtbl, iface);
+ DMUS_PRIVATE_CHUNK Chunk;
+ DWORD StreamSize, StreamCount, ListSize[1], ListCount[1];
+ LARGE_INTEGER liMove; /* used when skipping chunks */
+
+ TRACE("(%p, %p, %p)\n", This, pStream, pDesc);
+
+ /* FIXME: should this be determined from stream? */
+ pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&pDesc->guidClass, &CLSID_DirectMusicAudioPath, sizeof(CLSID));
+
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_RIFF: {
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ StreamSize = Chunk.dwSize - sizeof(FOURCC);
+ StreamCount = 0;
+ if (Chunk.fccID == DMUS_FOURCC_AUDIOPATH_FORM) {
+ TRACE_(dmfile)(": audio path form\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ StreamCount += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case DMUS_FOURCC_GUID_CHUNK: {
+ TRACE_(dmfile)(": GUID chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read (pStream, &pDesc->guidObject, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_VERSION_CHUNK: {
+ TRACE_(dmfile)(": version chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read (pStream, &pDesc->vVersion, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CATEGORY_CHUNK: {
+ TRACE_(dmfile)(": category chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_CATEGORY;
+ IStream_Read (pStream, pDesc->wszCategory, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[0] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[0] = 0;
+ switch (Chunk.fccID) {
+ /* evil M$ UNFO list, which can (!?) contain INFO elements */
+ case DMUS_FOURCC_UNFO_LIST: {
+ TRACE_(dmfile)(": UNFO list\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
+ (though strings seem to be valid unicode) */
+ case mmioFOURCC('I','N','A','M'):
+ case DMUS_FOURCC_UNAM_CHUNK: {
+ TRACE_(dmfile)(": name chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_NAME;
+ IStream_Read (pStream, pDesc->wszName, Chunk.dwSize, NULL);
+ break;
+ }
+ case mmioFOURCC('I','A','R','T'):
+ case DMUS_FOURCC_UART_CHUNK: {
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','O','P'):
+ case DMUS_FOURCC_UCOP_CHUNK: {
+ TRACE_(dmfile)(": copyright chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','S','B','J'):
+ case DMUS_FOURCC_USBJ_CHUNK: {
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','M','T'):
+ case DMUS_FOURCC_UCMT_CHUNK: {
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
+ } while (StreamCount < StreamSize);
+ break;
+ } else {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = StreamSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+
+ TRACE_(dmfile)(": reading finished\n");
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return DMUS_E_INVALIDFILE;
+ }
+ }
+
+ TRACE(": returning descriptor:\n");
+ if (TRACE_ON(dmime)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
+ }
+
+ return S_OK;
+}
+
+ICOM_VTABLE(IDirectMusicObject) DirectMusicAudioPath_Object_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicAudioPathImpl_QueryInterface,
- IDirectMusicAudioPathImpl_AddRef,
- IDirectMusicAudioPathImpl_Release,
- IDirectMusicAudioPathImpl_GetObjectInPath,
- IDirectMusicAudioPathImpl_Activate,
- IDirectMusicAudioPathImpl_SetVolume,
- IDirectMusicAudioPathImpl_ConvertPChannel
+ IDirectMusicAudioPathImpl_IDirectMusicObject_QueryInterface,
+ IDirectMusicAudioPathImpl_IDirectMusicObject_AddRef,
+ IDirectMusicAudioPathImpl_IDirectMusicObject_Release,
+ IDirectMusicAudioPathImpl_IDirectMusicObject_GetDescriptor,
+ IDirectMusicAudioPathImpl_IDirectMusicObject_SetDescriptor,
+ IDirectMusicAudioPathImpl_IDirectMusicObject_ParseDescriptor
+};
+
+/* IDirectMusicAudioPathImpl IPersistStream part: */
+HRESULT WINAPI IDirectMusicAudioPathImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, PersistStreamVtbl, iface);
+ return IDirectMusicAudioPathImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicAudioPathImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, PersistStreamVtbl, iface);
+ return IDirectMusicAudioPathImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicAudioPathImpl_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, PersistStreamVtbl, iface);
+ return IDirectMusicAudioPathImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicAudioPathImpl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicAudioPathImpl_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicAudioPathImpl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
+ ICOM_THIS_MULTI(IDirectMusicAudioPathImpl, PersistStreamVtbl, iface);
+
+ FOURCC chunkID;
+ DWORD chunkSize, StreamSize, StreamCount, ListSize[3], ListCount[3];
+ LARGE_INTEGER liMove; /* used when skipping chunks */
+
+ FIXME("(%p, %p): Loading not implemented yet\n", This, pStm);
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ IStream_Read (pStm, &chunkSize, sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
+ switch (chunkID) {
+ case FOURCC_RIFF: {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(chunkID));
+ StreamSize = chunkSize - sizeof(FOURCC);
+ StreamCount = 0;
+ switch (chunkID) {
+ case DMUS_FOURCC_AUDIOPATH_FORM: {
+ TRACE_(dmfile)(": audio path form\n");
+ do {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
+ StreamCount += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
+ switch (chunkID) {
+ case DMUS_FOURCC_GUID_CHUNK: {
+ TRACE_(dmfile)(": GUID chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read (pStm, &This->pDesc->guidObject, chunkSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_VERSION_CHUNK: {
+ TRACE_(dmfile)(": version chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read (pStm, &This->pDesc->vVersion, chunkSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CATEGORY_CHUNK: {
+ TRACE_(dmfile)(": category chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_CATEGORY;
+ IStream_Read (pStm, This->pDesc->wszCategory, chunkSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(chunkID));
+ ListSize[0] = chunkSize - sizeof(FOURCC);
+ ListCount[0] = 0;
+ switch (chunkID) {
+ case DMUS_FOURCC_UNFO_LIST: {
+ TRACE_(dmfile)(": UNFO list\n");
+ do {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
+ switch (chunkID) {
+ /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
+ (though strings seem to be valid unicode) */
+ case mmioFOURCC('I','N','A','M'):
+ case DMUS_FOURCC_UNAM_CHUNK: {
+ TRACE_(dmfile)(": name chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_NAME;
+ IStream_Read (pStm, This->pDesc->wszName, chunkSize, NULL);
+ break;
+ }
+ case mmioFOURCC('I','A','R','T'):
+ case DMUS_FOURCC_UART_CHUNK: {
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','O','P'):
+ case DMUS_FOURCC_UCOP_CHUNK: {
+ TRACE_(dmfile)(": copyright chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','S','B','J'):
+ case DMUS_FOURCC_USBJ_CHUNK: {
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','M','T'):
+ case DMUS_FOURCC_UCMT_CHUNK: {
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = chunkSize - sizeof(FOURCC);
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
+ } while (StreamCount < StreamSize);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = StreamSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+ }
+ TRACE_(dmfile)(": reading finished\n");
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+ }
+
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicAudioPathImpl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicAudioPathImpl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
+ return E_NOTIMPL;
+}
+
+ICOM_VTABLE(IPersistStream) DirectMusicAudioPath_PersistStream_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicAudioPathImpl_IPersistStream_QueryInterface,
+ IDirectMusicAudioPathImpl_IPersistStream_AddRef,
+ IDirectMusicAudioPathImpl_IPersistStream_Release,
+ IDirectMusicAudioPathImpl_IPersistStream_GetClassID,
+ IDirectMusicAudioPathImpl_IPersistStream_IsDirty,
+ IDirectMusicAudioPathImpl_IPersistStream_Load,
+ IDirectMusicAudioPathImpl_IPersistStream_Save,
+ IDirectMusicAudioPathImpl_IPersistStream_GetSizeMax
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicAudioPath (LPCGUID lpcGUID, LPDIRECTMUSICAUDIOPATH* ppDMCAPath, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicAudioPathImpl* path;
+HRESULT WINAPI DMUSIC_CreateDirectMusicAudioPathImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicAudioPathImpl* obj;
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicAudioPath)) {
- path = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicAudioPathImpl));
- if (NULL == path) {
- *ppDMCAPath = (LPDIRECTMUSICAUDIOPATH) NULL;
- return E_OUTOFMEMORY;
- }
- path->lpVtbl = &DirectMusicAudioPath_Vtbl;
- path->ref = 1;
- *ppDMCAPath = (LPDIRECTMUSICAUDIOPATH) path;
- return S_OK;
+ obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicAudioPathImpl));
+ if (NULL == obj) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
}
+ obj->UnknownVtbl = &DirectMusicAudioPath_Unknown_Vtbl;
+ obj->AudioPathVtbl = &DirectMusicAudioPath_AudioPath_Vtbl;
+ obj->ObjectVtbl = &DirectMusicAudioPath_Object_Vtbl;
+ obj->PersistStreamVtbl = &DirectMusicAudioPath_PersistStream_Vtbl;
+ obj->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(obj->pDesc);
+ obj->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&obj->pDesc->guidClass, &CLSID_DirectMusicAudioPath, sizeof (CLSID));
+ obj->ref = 0; /* will be inited by QueryInterface */
- WARN("No interface found\n");
- return E_NOINTERFACE;
+ return IDirectMusicAudioPathImpl_IUnknown_QueryInterface ((LPUNKNOWN)&obj->UnknownVtbl, lpcGUID, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicAudioPathObject implementation
- */
-/* IDirectMusicAudioPathObject IUnknown part: */
-HRESULT WINAPI IDirectMusicAudioPathObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicAudioPathObject,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IDirectMusicObject)) {
- IDirectMusicAudioPathObject_AddRef(iface);
- *ppobj = This;
- return S_OK;
- } else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IPersistStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = (LPPERSISTSTREAM)This->pStream;
- return S_OK;
- } else if (IsEqualIID (riid, &IID_IDirectMusicAudioPath)) {
- IDirectMusicAudioPath_AddRef ((LPDIRECTMUSICAUDIOPATH)This->pAudioPath);
- *ppobj = (LPDIRECTMUSICAUDIOPATH)This->pAudioPath;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicAudioPathObject_AddRef (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicAudioPathObject,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicAudioPathObject_Release (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicAudioPathObject,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicAudioPathObject IDirectMusicObject part: */
-HRESULT WINAPI IDirectMusicAudioPathObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicAudioPathObject,iface);
-
- TRACE("(%p, %p)\n", This, pDesc);
- pDesc = This->pDesc;
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicAudioPathObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicAudioPathObject,iface);
-
- TRACE("(%p, %p)\n", This, pDesc);
- This->pDesc = pDesc;
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicAudioPathObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicAudioPathObject,iface);
-
- FIXME("(%p, %p, %p): stub\n", This, pStream, pDesc);
-
- return S_OK;
-}
-
-ICOM_VTABLE(IDirectMusicObject) DirectMusicAudioPathObject_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicAudioPathObject_QueryInterface,
- IDirectMusicAudioPathObject_AddRef,
- IDirectMusicAudioPathObject_Release,
- IDirectMusicAudioPathObject_GetDescriptor,
- IDirectMusicAudioPathObject_SetDescriptor,
- IDirectMusicAudioPathObject_ParseDescriptor
-};
-
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicAudioPathObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicAudioPathObject *obj;
-
- TRACE("(%p,%p,%p)\n", lpcGUID, ppObject, pUnkOuter);
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicObject)) {
- obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicAudioPathObject));
- if (NULL == obj) {
- *ppObject = (LPDIRECTMUSICOBJECT) NULL;
- return E_OUTOFMEMORY;
- }
- obj->lpVtbl = &DirectMusicAudioPathObject_Vtbl;
- obj->ref = 1;
- /* prepare IPersistStream */
- obj->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicAudioPathObjectStream));
- obj->pStream->lpVtbl = &DirectMusicAudioPathObjectStream_Vtbl;
- obj->pStream->ref = 1;
- obj->pStream->pParentObject = obj;
- /* prepare IDirectMusicAudioPath */
- DMUSIC_CreateDirectMusicAudioPath (&IID_IDirectMusicAudioPath, (LPDIRECTMUSICAUDIOPATH*)&obj->pAudioPath, NULL);
- obj->pAudioPath->pObject = obj;
- *ppObject = (LPDIRECTMUSICOBJECT) obj;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
-}
-
-/*****************************************************************************
- * IDirectMusicAudioPathObjectStream implementation
- */
-/* IDirectMusicAudioPathObjectStream IUnknown part: */
-HRESULT WINAPI IDirectMusicAudioPathObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicAudioPathObjectStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicAudioPathObjectStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicAudioPathObjectStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicAudioPathObjectStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicAudioPathObjectStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicAudioPathObjectStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicAudioPathObjectStream IPersist part: */
-HRESULT WINAPI IDirectMusicAudioPathObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- return E_NOTIMPL;
-}
-
-/* IDirectMusicAudioPathObjectStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicAudioPathObjectStream_IsDirty (LPPERSISTSTREAM iface)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicAudioPathObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
- FIXME(": Loading not implemented yet\n");
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicAudioPathObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicAudioPathObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
- return E_NOTIMPL;
-}
-
-ICOM_VTABLE(IPersistStream) DirectMusicAudioPathObjectStream_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicAudioPathObjectStream_QueryInterface,
- IDirectMusicAudioPathObjectStream_AddRef,
- IDirectMusicAudioPathObjectStream_Release,
- IDirectMusicAudioPathObjectStream_GetClassID,
- IDirectMusicAudioPathObjectStream_IsDirty,
- IDirectMusicAudioPathObjectStream_Load,
- IDirectMusicAudioPathObjectStream_Save,
- IDirectMusicAudioPathObjectStream_GetSizeMax
-};
diff --git a/dlls/dmime/dmime_main.c b/dlls/dmime/dmime_main.c
index edb5f02..79163c1 100644
--- a/dlls/dmime/dmime_main.c
+++ b/dlls/dmime/dmime_main.c
@@ -1,6 +1,6 @@
/* DirectMusicInteractiveEngine Main
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,8 +21,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
-typedef struct
-{
+typedef struct {
/* IUnknown fields */
ICOM_VFIELD(IClassFactory);
DWORD ref;
@@ -31,43 +30,30 @@
/******************************************************************
* DirectMusicPerformance ClassFactory
*/
-static HRESULT WINAPI PerformanceCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI PerformanceCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI PerformanceCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI PerformanceCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI PerformanceCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI PerformanceCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI PerformanceCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI PerformanceCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicPerformance) ||
- IsEqualIID (riid, &IID_IDirectMusicPerformance8)) {
- return DMUSIC_CreateDirectMusicPerformance (riid, (LPDIRECTMUSICPERFORMANCE8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicPerformanceImpl (riid, ppobj, pOuter);
}
-static HRESULT WINAPI PerformanceCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI PerformanceCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -87,45 +73,30 @@
/******************************************************************
* DirectMusicSegment ClassFactory
*/
-static HRESULT WINAPI SegmentCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI SegmentCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI SegmentCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI SegmentCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI SegmentCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI SegmentCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI SegmentCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI SegmentCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicSegment) ||
- IsEqualIID (riid, &IID_IDirectMusicSegment8)) {
- return DMUSIC_CreateDirectMusicSegment (riid, (LPDIRECTMUSICSEGMENT8*) ppobj, pOuter);
- } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
- return DMUSIC_CreateDirectMusicSegmentObject (riid, (LPDIRECTMUSICOBJECT*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicSegmentImpl (riid, ppobj, pOuter);
}
-static HRESULT WINAPI SegmentCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI SegmentCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -145,43 +116,30 @@
/******************************************************************
* DirectMusicSegmentState ClassFactory
*/
-static HRESULT WINAPI SegmentStateCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI SegmentStateCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI SegmentStateCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI SegmentStateCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI SegmentStateCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI SegmentStateCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI SegmentStateCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI SegmentStateCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicSegmentState) ||
- IsEqualIID (riid, &IID_IDirectMusicSegmentState8)) {
- return DMUSIC_CreateDirectMusicSegmentState (riid, (LPDIRECTMUSICSEGMENTSTATE8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicSegmentStateImpl (riid, ppobj, pOuter);
}
-static HRESULT WINAPI SegmentStateCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI SegmentStateCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -201,44 +159,30 @@
/******************************************************************
* DirectMusicGraph ClassFactory
*/
-static HRESULT WINAPI GraphCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI GraphCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI GraphCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI GraphCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI GraphCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI GraphCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI GraphCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI GraphCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicGraph)) {
- return DMUSIC_CreateDirectMusicGraph (riid, (LPDIRECTMUSICGRAPH*) ppobj, pOuter);
- } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
- return DMUSIC_CreateDirectMusicGraphObject (riid, (LPDIRECTMUSICOBJECT*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicGraphImpl (riid, ppobj, pOuter);
}
-static HRESULT WINAPI GraphCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI GraphCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -258,43 +202,30 @@
/******************************************************************
* DirectMusicTempoTrack ClassFactory
*/
-static HRESULT WINAPI TempoTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI TempoTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI TempoTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI TempoTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI TempoTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI TempoTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI TempoTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI TempoTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicTempoTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicTempoTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI TempoTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI TempoTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -314,43 +245,30 @@
/******************************************************************
* DirectMusicSeqTrack ClassFactory
*/
-static HRESULT WINAPI SeqTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI SeqTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI SeqTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI SeqTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI SeqTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI SeqTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI SeqTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI SeqTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicSeqTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicSeqTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI SeqTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI SeqTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -370,43 +288,30 @@
/******************************************************************
* DirectMusicSysExTrack ClassFactory
*/
-static HRESULT WINAPI SysExTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI SysExTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI SysExTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI SysExTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI SysExTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI SysExTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI SysExTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI SysExTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicSysExTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicSysExTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI SysExTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI SysExTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -426,43 +331,30 @@
/******************************************************************
* DirectMusicTimeSigTrack ClassFactory
*/
-static HRESULT WINAPI TimeSigTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI TimeSigTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI TimeSigTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI TimeSigTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI TimeSigTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI TimeSigTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI TimeSigTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI TimeSigTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicTimeSigTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicTimeSigTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI TimeSigTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI TimeSigTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -482,43 +374,30 @@
/******************************************************************
* DirectMusicParamControlTrack ClassFactory
*/
-static HRESULT WINAPI ParamControlTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI ParamControlTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI ParamControlTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ParamControlTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI ParamControlTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ParamControlTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI ParamControlTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI ParamControlTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicParamControlTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicParamControlTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI ParamControlTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI ParamControlTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -538,43 +417,30 @@
/******************************************************************
* DirectMusicMarkerTrack ClassFactory
*/
-static HRESULT WINAPI MarkerTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI MarkerTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI MarkerTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI MarkerTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI MarkerTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI MarkerTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI MarkerTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI MarkerTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicMarkerTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicMarkerTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI MarkerTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI MarkerTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -594,43 +460,30 @@
/******************************************************************
* DirectMusicLyricsTrack ClassFactory
*/
-static HRESULT WINAPI LyricsTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI LyricsTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI LyricsTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI LyricsTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI LyricsTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI LyricsTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI LyricsTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI LyricsTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicLyricsTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicLyricsTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI LyricsTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI LyricsTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -647,103 +500,34 @@
static IClassFactoryImpl LyricsTrack_CF = {&LyricsTrackCF_Vtbl, 1 };
-/******************************************************************
- * DirectMusicSong ClassFactory
- */
-static HRESULT WINAPI SongCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
- ICOM_THIS(IClassFactoryImpl,iface);
-
- FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-static ULONG WINAPI SongCF_AddRef(LPCLASSFACTORY iface)
-{
- ICOM_THIS(IClassFactoryImpl,iface);
- return ++(This->ref);
-}
-
-static ULONG WINAPI SongCF_Release(LPCLASSFACTORY iface)
-{
- ICOM_THIS(IClassFactoryImpl,iface);
- /* static class, won't be freed */
- return --(This->ref);
-}
-
-static HRESULT WINAPI SongCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IClassFactoryImpl,iface);
-
- TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicSong)) {
- return DMUSIC_CreateDirectMusicPerformance (riid, (LPDIRECTMUSICPERFORMANCE8*) ppobj, pOuter);
- } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
- return DMUSIC_CreateDirectMusicSongObject (riid, (LPDIRECTMUSICOBJECT*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
-}
-
-static HRESULT WINAPI SongCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
- ICOM_THIS(IClassFactoryImpl,iface);
- FIXME("(%p)->(%d),stub!\n", This, dolock);
- return S_OK;
-}
-
-static ICOM_VTABLE(IClassFactory) SongCF_Vtbl = {
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- SongCF_QueryInterface,
- SongCF_AddRef,
- SongCF_Release,
- SongCF_CreateInstance,
- SongCF_LockServer
-};
-
-static IClassFactoryImpl Song_CF = {&SongCF_Vtbl, 1 };
/******************************************************************
* DirectMusicSegTriggerTrack ClassFactory
*/
-static HRESULT WINAPI SegTriggerTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI SegTriggerTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI SegTriggerTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI SegTriggerTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI SegTriggerTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI SegTriggerTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI SegTriggerTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI SegTriggerTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicSegTriggerTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicSegTriggerTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI SegTriggerTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI SegTriggerTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -760,50 +544,33 @@
static IClassFactoryImpl SegTriggerTrack_CF = {&SegTriggerTrackCF_Vtbl, 1 };
-
-
-
/******************************************************************
* DirectMusicAudioPath ClassFactory
*/
-static HRESULT WINAPI AudioPathCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI AudioPathCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI AudioPathCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI AudioPathCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI AudioPathCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI AudioPathCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI AudioPathCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI AudioPathCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicAudioPath)) {
- return DMUSIC_CreateDirectMusicAudioPath (riid, (LPDIRECTMUSICAUDIOPATH*) ppobj, pOuter);
- } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
- return DMUSIC_CreateDirectMusicAudioPathObject (riid, (LPDIRECTMUSICOBJECT*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicAudioPathImpl (riid, ppobj, pOuter);
}
-static HRESULT WINAPI AudioPathCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI AudioPathCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -823,43 +590,30 @@
/******************************************************************
* DirectMusicWaveTrack ClassFactory
*/
-static HRESULT WINAPI WaveTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI WaveTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI WaveTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI WaveTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI WaveTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI WaveTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI WaveTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI WaveTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicWaveTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicWaveTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI WaveTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI WaveTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -881,15 +635,12 @@
*
*
*/
-BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
-{
- if (fdwReason == DLL_PROCESS_ATTACH)
- {
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
+ if (fdwReason == DLL_PROCESS_ATTACH) {
DisableThreadLibraryCalls(hinstDLL);
/* FIXME: Initialisation */
}
- else if (fdwReason == DLL_PROCESS_DETACH)
- {
+ else if (fdwReason == DLL_PROCESS_DETACH) {
/* FIXME: Cleanup */
}
@@ -902,10 +653,8 @@
*
*
*/
-HRESULT WINAPI DMIME_DllCanUnloadNow(void)
-{
+HRESULT WINAPI DMIME_DllCanUnloadNow(void) {
FIXME("(void): stub\n");
-
return S_FALSE;
}
@@ -962,10 +711,6 @@
*ppv = (LPVOID) &LyricsTrack_CF;
IClassFactory_AddRef((IClassFactory*)*ppv);
return S_OK;
- } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSong) && IsEqualIID (riid, &IID_IClassFactory)) {
- *ppv = (LPVOID) &Song_CF;
- IClassFactory_AddRef((IClassFactory*)*ppv);
- return S_OK;
} else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSegTriggerTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
*ppv = (LPVOID) &SegTriggerTrack_CF;
IClassFactory_AddRef((IClassFactory*)*ppv);
diff --git a/dlls/dmime/dmime_private.h b/dlls/dmime/dmime_private.h
index dd6d06d..f025883 100644
--- a/dlls/dmime/dmime_private.h
+++ b/dlls/dmime/dmime_private.h
@@ -1,6 +1,6 @@
/* DirectMusicInteractiveEngine Private Include
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,16 +23,19 @@
#include <stdarg.h>
#include "windef.h"
-#include "wine/debug.h"
#include "winbase.h"
#include "winnt.h"
#include "wingdi.h"
-#include "dmusicc.h"
+#include "winuser.h"
+
+#include "wine/debug.h"
+#include "wine/list.h"
+#include "wine/unicode.h"
+#include "winreg.h"
+
#include "dmusici.h"
-#include "dmusics.h"
-#include "dmplugin.h"
#include "dmusicf.h"
-#include "dsound.h"
+#include "dmusics.h"
/*****************************************************************************
* Interfaces
@@ -41,146 +44,119 @@
typedef struct IDirectMusicSegment8Impl IDirectMusicSegment8Impl;
typedef struct IDirectMusicSegmentState8Impl IDirectMusicSegmentState8Impl;
typedef struct IDirectMusicGraphImpl IDirectMusicGraphImpl;
-typedef struct IDirectMusicSongImpl IDirectMusicSongImpl;
typedef struct IDirectMusicAudioPathImpl IDirectMusicAudioPathImpl;
typedef struct IDirectMusicTool8Impl IDirectMusicTool8Impl;
typedef struct IDirectMusicPatternTrackImpl IDirectMusicPatternTrackImpl;
-typedef struct IDirectMusicSegmentObject IDirectMusicSegmentObject;
-typedef struct IDirectMusicSegmentObjectStream IDirectMusicSegmentObjectStream;
-typedef struct IDirectMusicSongObject IDirectMusicSongObject;
-typedef struct IDirectMusicSongObjectStream IDirectMusicSongObjectStream;
-typedef struct IDirectMusicAudioPathObject IDirectMusicAudioPathObject;
-typedef struct IDirectMusicAudioPathObjectStream IDirectMusicAudioPathObjectStream;
-typedef struct IDirectMusicGraphObject IDirectMusicGraphObject;
-typedef struct IDirectMusicGraphObjectStream IDirectMusicGraphObjectStream;
-
typedef struct IDirectMusicLyricsTrack IDirectMusicLyricsTrack;
-typedef struct IDirectMusicLyricsTrackStream IDirectMusicLyricsTrackStream;
typedef struct IDirectMusicMarkerTrack IDirectMusicMarkerTrack;
-typedef struct IDirectMusicMarkerTrackStream IDirectMusicMarkerTrackStream;
typedef struct IDirectMusicParamControlTrack IDirectMusicParamControlTrack;
-typedef struct IDirectMusicParamControlTrackStream IDirectMusicParamControlTrackStream;
typedef struct IDirectMusicSegTriggerTrack IDirectMusicSegTriggerTrack;
-typedef struct IDirectMusicSegTriggerTrackStream IDirectMusicSegTriggerTrackStream;
typedef struct IDirectMusicSeqTrack IDirectMusicSeqTrack;
-typedef struct IDirectMusicSeqTrackStream IDirectMusicSeqTrackStream;
typedef struct IDirectMusicSysExTrack IDirectMusicSysExTrack;
-typedef struct IDirectMusicSysExTrackStream IDirectMusicSysExTrackStream;
typedef struct IDirectMusicTempoTrack IDirectMusicTempoTrack;
-typedef struct IDirectMusicTempoTrackStream IDirectMusicTempoTrackStream;
typedef struct IDirectMusicTimeSigTrack IDirectMusicTimeSigTrack;
-typedef struct IDirectMusicTimeSigTrackStream IDirectMusicTimeSigTrackStream;
typedef struct IDirectMusicWaveTrack IDirectMusicWaveTrack;
-typedef struct IDirectMusicWaveTrackStream IDirectMusicWaveTrackStream;
/*****************************************************************************
* Predeclare the interface implementation structures
*/
extern ICOM_VTABLE(IDirectMusicPerformance8) DirectMusicPerformance8_Vtbl;
-extern ICOM_VTABLE(IDirectMusicSegment8) DirectMusicSegment8_Vtbl;
+
+extern ICOM_VTABLE(IUnknown) DirectMusicSegment8_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicSegment8) DirectMusicSegment8_Segment_Vtbl;
+extern ICOM_VTABLE(IDirectMusicObject) DirectMusicSegment8_Object_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicSegment8_PersistStream_Vtbl;
+
extern ICOM_VTABLE(IDirectMusicSegmentState8) DirectMusicSegmentState8_Vtbl;
-extern ICOM_VTABLE(IDirectMusicGraph) DirectMusicGraph_Vtbl;
-extern ICOM_VTABLE(IDirectMusicSong) DirectMusicSong_Vtbl;
-extern ICOM_VTABLE(IDirectMusicAudioPath) DirectMusicAudioPath_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTool8) DirectMusicTool8_Vtbl;
-extern ICOM_VTABLE(IDirectMusicPatternTrack) DirectMusicPatternTrack_Vtbl;
-extern ICOM_VTABLE(IDirectMusicObject) DirectMusicSegmentObject_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicSegmentObjectStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicObject) DirectMusicSongObject_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicSongObjectStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicObject) DirectMusicAudioPathObject_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicAudioPathObjectStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicObject) DirectMusicGraphObject_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicGraphObjectStream_Vtbl;
+extern ICOM_VTABLE(IUnknown) DirectMusicGraph_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicGraph) DirectMusicGraph_Gtaph_Vtbl;
+extern ICOM_VTABLE(IDirectMusicObject) DirectMusicGraph_Object_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicGraph_PersistStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicLyricsTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicLyricsTrackStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicMarkerTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicMarkerTrackStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicParamControlTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicParamControlTrackStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicSegTriggerTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicSegTriggerTrackStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicSeqTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicSeqTrackStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicSysExTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicSysExTrackStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicTempoTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicTempoTrackStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicTimeSigTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicTimeSigTrackStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicWaveTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicWaveTrackStream_Vtbl;
+extern ICOM_VTABLE(IUnknown) DirectMusicAudioPath_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicAudioPath) DirectMusicAudioPath_AudioPath_Vtbl;
+extern ICOM_VTABLE(IDirectMusicObject) DirectMusicAudioPath_Object_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicAudioPath_Persist_Stream_Vtbl;
+
+extern ICOM_VTABLE(IDirectMusicTool8) DirectMusicTool8_Vtbl;
+
+extern ICOM_VTABLE(IDirectMusicPatternTrack) DirectMusicPatternTrack_Vtbl;
+
+extern ICOM_VTABLE(IUnknown) DirectMusicLyricsTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicLyricsTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicLyricsTrack_PersistStream_Vtbl;
+
+extern ICOM_VTABLE(IUnknown) DirectMusicMarkerTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicMarkerTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicMarkerTrack_PersistStream_Vtbl;
+
+extern ICOM_VTABLE(IUnknown) DirectMusicParamControlTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicParamControlTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicParamControlTrack_PersistStream_Vtbl;
+
+extern ICOM_VTABLE(IUnknown) DirectMusicSegTriggerTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicSegTriggerTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicSegTriggerTrack_PersistStream_Vtbl;
+
+extern ICOM_VTABLE(IUnknown) DirectMusicSeqTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicSeqTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicSeqTrack_PersistStream_Vtbl;
+
+extern ICOM_VTABLE(IUnknown) DirectMusicSysExTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicSysExTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicSysExTrack_PersistStream_Vtbl;
+
+extern ICOM_VTABLE(IUnknown) DirectMusicTempoTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicTempoTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicTempoTrack_PersistStream_Vtbl;
+
+extern ICOM_VTABLE(IUnknown) DirectMusicTimeSigTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicTimeSigTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicTimeSigTrack_PersistStream_Vtbl;
+
+extern ICOM_VTABLE(IUnknown) DirectMusicWaveTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicWaveTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicWaveTrack_PersistStream_Vtbl;
/*****************************************************************************
* ClassFactory
*/
-/* can support IID_IDirectMusicPerformance and IID_IDirectMusicPerformance8
- * return always an IDirectMusicPerformance8Impl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicPerformance (LPCGUID lpcGUID, LPDIRECTMUSICPERFORMANCE8 *ppDMPerf, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicSegment and IID_IDirectMusicSegment8
- * return always an IDirectMusicSegment8Impl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicSegment (LPCGUID lpcGUID, LPDIRECTMUSICSEGMENT8 *ppDMSeg, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicSegmentState and IID_IDirectMusicSegmentState8
- * return always an IDirectMusicSegmentState8Impl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicSegmentState (LPCGUID lpcGUID, LPDIRECTMUSICSEGMENTSTATE8 *ppDMSeg, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicSegmentgraph
- * return always an IDirectMusicGraphImpl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicGraph (LPCGUID lpcGUID, LPDIRECTMUSICGRAPH *ppDMGrph, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicSong
- * return always an IDirectMusicSong
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicSong (LPCGUID lpcGUID, LPDIRECTMUSICSONG *ppDMSng, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicAudioPath
- * return always an IDirectMusicAudioPathImpl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicAudioPath (LPCGUID lpcGUID, LPDIRECTMUSICAUDIOPATH *ppDMApath, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicTool and IID_IDirectMusicTool8
- * return always an IDirectMusicTool8Impl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicTool (LPCGUID lpcGUID, LPDIRECTMUSICTOOL8 *ppDMTool, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicPatternTrack
- * return always an IDirectMusicPatternTrackImpl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicPatternTrack (LPCGUID lpcGUID, LPDIRECTMUSICPATTERNTRACK *ppDMPtrnTrack, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicPerformanceImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicSegmentImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicSegmentStateImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicGraphImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicAudioPathImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicToolImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicPatternTrackImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicSegmentObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT *ppObject, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicSongObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT *ppObject, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicAudioPathObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT *ppObject, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicGraphObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT *ppObject, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicLyricsTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicMarkerTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicParamControlTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicSegTriggerTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicSeqTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicSysExTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicTempoTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicTimeSigTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicWaveTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicLyricsTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicMarkerTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicParamControlTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicSegTriggerTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicSeqTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicSysExTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicTempoTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicTimeSigTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicWaveTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
/* some sort of aux. performance channel: as far as i can understand, these are
used to represent a particular midi channel in particular group at particular
group; so all we need to do is to fill it with parent port, group and midi
channel ? */
-typedef struct DMUSIC_PRIVATE_PCHANNEL_
-{
+typedef struct DMUSIC_PRIVATE_PCHANNEL_ {
DWORD channel; /* map to this channel... */
DWORD group; /* ... in this group ... */
IDirectMusicPort *port; /* ... at this port */
} DMUSIC_PRIVATE_PCHANNEL, *LPDMUSIC_PRIVATE_PCHANNEL;
+
/*****************************************************************************
* IDirectMusicPerformance8Impl implementation structure
*/
-struct IDirectMusicPerformance8Impl
-{
+struct IDirectMusicPerformance8Impl {
/* IUnknown fields */
ICOM_VFIELD(IDirectMusicPerformance8);
DWORD ref;
@@ -260,75 +236,79 @@
extern HRESULT WINAPI IDirectMusicPerformance8ImplSetDefaultAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicAudioPath* pAudioPath);
extern HRESULT WINAPI IDirectMusicPerformance8ImplGetDefaultAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicAudioPath** ppAudioPath);
extern HRESULT WINAPI IDirectMusicPerformance8ImplGetParamEx (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, DWORD dwTrackID, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-/* ClassFactory */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicPerformance8 (LPCGUID lpcGUID, LPDIRECTMUSICPERFORMANCE8 *ppDMPerf8, LPUNKNOWN pUnkOuter);
/*****************************************************************************
* IDirectMusicSegment8Impl implementation structure
*/
-struct IDirectMusicSegment8Impl
-{
+struct IDirectMusicSegment8Impl {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicSegment8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicSegment8) *SegmentVtbl;
+ ICOM_VTABLE(IDirectMusicObject) *ObjectVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicSegment8Impl fields */
- IDirectMusicSegmentObject* pObject;
-
- DMUS_IO_SEGMENT_HEADER segHeader; /* header */
- GUID guidID; /* unique id */
- DMUS_IO_VERSION vVersion; /* version */
- /* info from UNFO list */
- WCHAR* wszName;
- WCHAR* wszArtist;
- WCHAR* wszCopyright;
- WCHAR* wszSubject;
- WCHAR* wszComment;
- /* tracks */
- DWORD dwTracks;
- LPDIRECTMUSICTRACK8 ppTracks[255];
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicSegment8Impl_QueryInterface (LPDIRECTMUSICSEGMENT8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicSegment8Impl_AddRef (LPDIRECTMUSICSEGMENT8 iface);
-extern ULONG WINAPI IDirectMusicSegment8Impl_Release (LPDIRECTMUSICSEGMENT8 iface);
-/* IDirectMusicSegment: */
-extern HRESULT WINAPI IDirectMusicSegment8Impl_GetLength (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME* pmtLength);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_SetLength (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtLength);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_GetRepeats (LPDIRECTMUSICSEGMENT8 iface, DWORD* pdwRepeats);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_SetRepeats (LPDIRECTMUSICSEGMENT8 iface, DWORD dwRepeats);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_GetDefaultResolution (LPDIRECTMUSICSEGMENT8 iface, DWORD* pdwResolution);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_SetDefaultResolution (LPDIRECTMUSICSEGMENT8 iface, DWORD dwResolution);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_GetTrack (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack** ppTrack);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_GetTrackGroup (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicTrack* pTrack, DWORD* pdwGroupBits);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_InsertTrack (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicTrack* pTrack, DWORD dwGroupBits);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_RemoveTrack (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicTrack* pTrack);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_InitPlay (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicSegmentState** ppSegState, IDirectMusicPerformance* pPerformance, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_GetGraph (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicGraph** ppGraph);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_SetGraph (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicGraph* pGraph);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_AddNotificationType (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_RemoveNotificationType (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_GetParam (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_SetParam (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_Clone (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicSegment** ppSegment);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_SetStartPoint (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtStart);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_GetStartPoint (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME* pmtStart);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_SetLoopPoints (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_GetLoopPoints (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME* pmtStart, MUSIC_TIME* pmtEnd);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_SetPChannelsUsed (LPDIRECTMUSICSEGMENT8 iface, DWORD dwNumPChannels, DWORD* paPChannels);
-/* IDirectMusicSegment8: */
-extern HRESULT WINAPI IDirectMusicSegment8Impl_SetTrackConfig (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_GetAudioPathConfig (LPDIRECTMUSICSEGMENT8 iface, IUnknown** ppAudioPathConfig);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_Compose (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtTime, IDirectMusicSegment* pFromSegment, IDirectMusicSegment* pToSegment, IDirectMusicSegment** ppComposedSegment);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_Download (LPDIRECTMUSICSEGMENT8 iface, IUnknown *pAudioPath);
-extern HRESULT WINAPI IDirectMusicSegment8Impl_Unload (LPDIRECTMUSICSEGMENT8 iface, IUnknown *pAudioPath);
-
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicSegment8Impl_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicSegment8Impl_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicSegment(8): */
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_QueryInterface (LPDIRECTMUSICSEGMENT8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_AddRef (LPDIRECTMUSICSEGMENT8 iface);
+extern ULONG WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_Release (LPDIRECTMUSICSEGMENT8 iface);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetLength (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME* pmtLength);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_SetLength (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtLength);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetRepeats (LPDIRECTMUSICSEGMENT8 iface, DWORD* pdwRepeats);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_SetRepeats (LPDIRECTMUSICSEGMENT8 iface, DWORD dwRepeats);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetDefaultResolution (LPDIRECTMUSICSEGMENT8 iface, DWORD* pdwResolution);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_SetDefaultResolution (LPDIRECTMUSICSEGMENT8 iface, DWORD dwResolution);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetTrack (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetTrackGroup (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicTrack* pTrack, DWORD* pdwGroupBits);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_InsertTrack (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicTrack* pTrack, DWORD dwGroupBits);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_RemoveTrack (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicTrack* pTrack);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_InitPlay (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicSegmentState** ppSegState, IDirectMusicPerformance* pPerformance, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetGraph (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicGraph** ppGraph);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_SetGraph (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicGraph* pGraph);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_AddNotificationType (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_RemoveNotificationType (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetParam (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_SetParam (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_Clone (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicSegment** ppSegment);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_SetStartPoint (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtStart);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetStartPoint (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME* pmtStart);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_SetLoopPoints (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetLoopPoints (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME* pmtStart, MUSIC_TIME* pmtEnd);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_SetPChannelsUsed (LPDIRECTMUSICSEGMENT8 iface, DWORD dwNumPChannels, DWORD* paPChannels);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_SetTrackConfig (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetAudioPathConfig (LPDIRECTMUSICSEGMENT8 iface, IUnknown** ppAudioPathConfig);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_Compose (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtTime, IDirectMusicSegment* pFromSegment, IDirectMusicSegment* pToSegment, IDirectMusicSegment** ppComposedSegment);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_Download (LPDIRECTMUSICSEGMENT8 iface, IUnknown *pAudioPath);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_Unload (LPDIRECTMUSICSEGMENT8 iface, IUnknown *pAudioPath);
+/* IDirectMusicObject: */
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicSegment8Impl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface);
+extern ULONG WINAPI IDirectMusicSegment8Impl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
+/* IPersistStream: */
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicSegment8Impl_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicSegment8Impl_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+
/*****************************************************************************
* IDirectMusicSegmentState8Impl implementation structure
*/
-struct IDirectMusicSegmentState8Impl
-{
+struct IDirectMusicSegmentState8Impl {
/* IUnknown fields */
ICOM_VFIELD(IDirectMusicSegmentState8);
DWORD ref;
@@ -340,79 +320,74 @@
extern HRESULT WINAPI IDirectMusicSegmentState8Impl_QueryInterface (LPDIRECTMUSICSEGMENTSTATE8 iface, REFIID riid, LPVOID *ppobj);
extern ULONG WINAPI IDirectMusicSegmentState8Impl_AddRef (LPDIRECTMUSICSEGMENTSTATE8 iface);
extern ULONG WINAPI IDirectMusicSegmentState8Impl_Release (LPDIRECTMUSICSEGMENTSTATE8 iface);
-/* IDirectMusicSegmentState: */
+/* IDirectMusicSegmentState(8): */
extern HRESULT WINAPI IDirectMusicSegmentState8Impl_GetRepeats (LPDIRECTMUSICSEGMENTSTATE8 iface, DWORD* pdwRepeats);
extern HRESULT WINAPI IDirectMusicSegmentState8Impl_GetSegment (LPDIRECTMUSICSEGMENTSTATE8 iface, IDirectMusicSegment** ppSegment);
extern HRESULT WINAPI IDirectMusicSegmentState8Impl_GetStartTime (LPDIRECTMUSICSEGMENTSTATE8 iface, MUSIC_TIME* pmtStart);
extern HRESULT WINAPI IDirectMusicSegmentState8Impl_GetSeek (LPDIRECTMUSICSEGMENTSTATE8 iface, MUSIC_TIME* pmtSeek);
extern HRESULT WINAPI IDirectMusicSegmentState8Impl_GetStartPoint (LPDIRECTMUSICSEGMENTSTATE8 iface, MUSIC_TIME* pmtStart);
-/* IDirectMusicSegmentState8: */
extern HRESULT WINAPI IDirectMusicSegmentState8Impl_SetTrackConfig (LPDIRECTMUSICSEGMENTSTATE8 iface, REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff);
extern HRESULT WINAPI IDirectMusicSegmentState8Impl_GetObjectInPath (LPDIRECTMUSICSEGMENTSTATE8 iface, DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, DWORD dwIndex, REFGUID iidInterface, void** ppObject);
/*****************************************************************************
* IDirectMusicGraphImpl implementation structure
*/
-struct IDirectMusicGraphImpl
-{
+struct IDirectMusicGraphImpl {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicGraph);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicGraph) *GraphVtbl;
+ ICOM_VTABLE(IDirectMusicObject) *ObjectVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicGraphImpl fields */
- IDirectMusicGraphObject* pObject;
+ LPDMUS_OBJECTDESC pDesc;
IDirectMusicTool8Impl* pFirst;
IDirectMusicTool8Impl* pLast;
WORD num_tools;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicGraphImpl_QueryInterface (LPDIRECTMUSICGRAPH iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicGraphImpl_AddRef (LPDIRECTMUSICGRAPH iface);
-extern ULONG WINAPI IDirectMusicGraphImpl_Release (LPDIRECTMUSICGRAPH iface);
+extern HRESULT WINAPI IDirectMusicGraphImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicGraphImpl_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicGraphImpl_IUnknown_Release (LPUNKNOWN iface);
/* IDirectMusicGraph: */
-extern HRESULT WINAPI IDirectMusicGraphImpl_StampPMsg (LPDIRECTMUSICGRAPH iface, DMUS_PMSG* pPMSG);
-extern HRESULT WINAPI IDirectMusicGraphImpl_InsertTool (LPDIRECTMUSICGRAPH iface, IDirectMusicTool* pTool, DWORD* pdwPChannels, DWORD cPChannels, LONG lIndex);
-extern HRESULT WINAPI IDirectMusicGraphImpl_GetTool (LPDIRECTMUSICGRAPH iface, DWORD dwIndex, IDirectMusicTool** ppTool);
-extern HRESULT WINAPI IDirectMusicGraphImpl_RemoveTool (LPDIRECTMUSICGRAPH iface, IDirectMusicTool* pTool);
-
-/*****************************************************************************
- * IDirectMusicSongImpl implementation structure
- */
-struct IDirectMusicSongImpl
-{
- /* IUnknown fields */
- ICOM_VFIELD(IDirectMusicSong);
- DWORD ref;
-
- /* IDirectMusicSongImpl fields */
- IDirectMusicSongObject* pObject;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicSongImpl_QueryInterface (LPDIRECTMUSICSONG iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicSongImpl_AddRef (LPDIRECTMUSICSONG iface);
-extern ULONG WINAPI IDirectMusicSongImpll_Release (LPDIRECTMUSICSONG iface);
-/* IDirectMusicContainer: */
-extern HRESULT WINAPI IDirectMusicSongImpl_Compose (LPDIRECTMUSICSONG iface);
-extern HRESULT WINAPI IDirectMusicSongImpl_GetParam (LPDIRECTMUSICSONG iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicSongImpl_GetSegment (LPDIRECTMUSICSONG iface, WCHAR* pwzName, IDirectMusicSegment** ppSegment);
-extern HRESULT WINAPI IDirectMusicSongImpl_GetAudioPathConfig (LPDIRECTMUSICSONG iface, IUnknown** ppAudioPathConfig);
-extern HRESULT WINAPI IDirectMusicSongImpl_Download (LPDIRECTMUSICSONG iface, IUnknown* pAudioPath);
-extern HRESULT WINAPI IDirectMusicSongImpl_Unload (LPDIRECTMUSICSONG iface, IUnknown* pAudioPath);
-extern HRESULT WINAPI IDirectMusicSongImpl_EnumSegment (LPDIRECTMUSICSONG iface, DWORD dwIndex, IDirectMusicSegment** ppSegment);
+extern HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicGraph_QueryInterface (LPDIRECTMUSICGRAPH iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicGraphImpl_IDirectMusicGraph_AddRef (LPDIRECTMUSICGRAPH iface);
+extern ULONG WINAPI IDirectMusicGraphImpl_IDirectMusicGraph_Release (LPDIRECTMUSICGRAPH iface);extern HRESULT WINAPI IDirectMusicGraphImpl_StampPMsg (LPDIRECTMUSICGRAPH iface, DMUS_PMSG* pPMSG);
+extern HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicGraph_InsertTool (LPDIRECTMUSICGRAPH iface, IDirectMusicTool* pTool, DWORD* pdwPChannels, DWORD cPChannels, LONG lIndex);
+extern HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicGraph_GetTool (LPDIRECTMUSICGRAPH iface, DWORD dwIndex, IDirectMusicTool** ppTool);
+extern HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicGraph_RemoveTool (LPDIRECTMUSICGRAPH iface, IDirectMusicTool* pTool);
+/* IDirectMusicObject: */
+extern HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicGraphImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface);
+extern ULONG WINAPI IDirectMusicGraphImpl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface);
+extern HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
+/* IPersistStream: */
+extern HRESULT WINAPI IDirectMusicGraphImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicGraphImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicGraphImpl_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicGraphImpl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicGraphImpl_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicGraphImpl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicGraphImpl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicGraphImpl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicAudioPathImpl implementation structure
*/
-struct IDirectMusicAudioPathImpl
-{
+struct IDirectMusicAudioPathImpl {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicAudioPath);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicAudioPath) *AudioPathVtbl;
+ ICOM_VTABLE(IDirectMusicObject) *ObjectVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicAudioPathImpl fields */
- IDirectMusicAudioPathObject* pObject;
+ LPDMUS_OBJECTDESC pDesc;
IDirectMusicPerformance8* pPerf;
IDirectMusicGraph* pToolGraph;
@@ -421,20 +396,38 @@
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicAudioPathImpl_QueryInterface (LPDIRECTMUSICAUDIOPATH iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicAudioPathImpl_AddRef (LPDIRECTMUSICAUDIOPATH iface);
-extern ULONG WINAPI IDirectMusicAudioPathImpl_Release (LPDIRECTMUSICAUDIOPATH iface);
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicAudioPathImpl_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicAudioPathImpl_IUnknown_Release (LPUNKNOWN iface);
/* IDirectMusicAudioPath: */
-extern HRESULT WINAPI IDirectMusicAudioPathImpl_GetObjectInPath (LPDIRECTMUSICAUDIOPATH iface, DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, WORD dwIndex, REFGUID iidInterface, void** ppObject);
-extern HRESULT WINAPI IDirectMusicAudioPathImpl_Activate (LPDIRECTMUSICAUDIOPATH iface, BOOL fActivate);
-extern HRESULT WINAPI IDirectMusicAudioPathImpl_SetVolume (LPDIRECTMUSICAUDIOPATH iface, long lVolume, DWORD dwDuration);
-extern HRESULT WINAPI IDirectMusicAudioPathImpl_ConvertPChannel (LPDIRECTMUSICAUDIOPATH iface, DWORD dwPChannelIn, DWORD* pdwPChannelOut);
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicAudioPath_QueryInterface (LPDIRECTMUSICAUDIOPATH iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicAudioPathImpl_IDirectMusicAudioPath_AddRef (LPDIRECTMUSICAUDIOPATH iface);
+extern ULONG WINAPI IDirectMusicAudioPathImpl_IDirectMusicAudioPath_Release (LPDIRECTMUSICAUDIOPATH iface);
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicAudioPath_GetObjectInPath (LPDIRECTMUSICAUDIOPATH iface, DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, WORD dwIndex, REFGUID iidInterface, void** ppObject);
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicAudioPath_Activate (LPDIRECTMUSICAUDIOPATH iface, BOOL fActivate);
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicAudioPath_SetVolume (LPDIRECTMUSICAUDIOPATH iface, long lVolume, DWORD dwDuration);
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicAudioPath_ConvertPChannel (LPDIRECTMUSICAUDIOPATH iface, DWORD dwPChannelIn, DWORD* pdwPChannelOut);
+/* IDirectMusicObject: */
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicAudioPathImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface);
+extern ULONG WINAPI IDirectMusicAudioPathImpl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface);
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
+/* IPersistStream: */
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicAudioPathImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicAudioPathImpl_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicTool8Impl implementation structure
*/
-struct IDirectMusicTool8Impl
-{
+struct IDirectMusicTool8Impl {
/* IUnknown fields */
ICOM_VFIELD(IDirectMusicTool8);
DWORD ref;
@@ -448,21 +441,19 @@
extern HRESULT WINAPI IDirectMusicTool8Impl_QueryInterface (LPDIRECTMUSICTOOL8 iface, REFIID riid, LPVOID *ppobj);
extern ULONG WINAPI IDirectMusicTool8Impl_AddRef (LPDIRECTMUSICTOOL8 iface);
extern ULONG WINAPI IDirectMusicTool8Impl_Release (LPDIRECTMUSICTOOL8 iface);
-/* IDirectMusicTool8Impl: */
+/* IDirectMusicTool(8): */
extern HRESULT WINAPI IDirectMusicTool8Impl_Init (LPDIRECTMUSICTOOL8 iface, IDirectMusicGraph* pGraph);
extern HRESULT WINAPI IDirectMusicTool8Impl_GetMsgDeliveryType (LPDIRECTMUSICTOOL8 iface, DWORD* pdwDeliveryType);
extern HRESULT WINAPI IDirectMusicTool8Impl_GetMediaTypeArraySize (LPDIRECTMUSICTOOL8 iface, DWORD* pdwNumElements);
extern HRESULT WINAPI IDirectMusicTool8Impl_GetMediaTypes (LPDIRECTMUSICTOOL8 iface, DWORD** padwMediaTypes, DWORD dwNumElements);
extern HRESULT WINAPI IDirectMusicTool8Impl_ProcessPMsg (LPDIRECTMUSICTOOL8 iface, IDirectMusicPerformance* pPerf, DMUS_PMSG* pPMSG);
extern HRESULT WINAPI IDirectMusicTool8Impl_Flush (LPDIRECTMUSICTOOL8 iface, IDirectMusicPerformance* pPerf, DMUS_PMSG* pPMSG, REFERENCE_TIME rtTime);
-/* IDirectMusicToolImpl8: */
extern HRESULT WINAPI IDirectMusicTool8Impl_Clone (LPDIRECTMUSICTOOL8 iface, IDirectMusicTool** ppTool);
/*****************************************************************************
* IDirectMusicPatternTrackImpl implementation structure
*/
-struct IDirectMusicPatternTrackImpl
-{
+struct IDirectMusicPatternTrackImpl {
/* IUnknown fields */
ICOM_VFIELD(IDirectMusicPatternTrack);
DWORD ref;
@@ -479,751 +470,527 @@
extern HRESULT WINAPI IDirectMusicPatternTrackImpl_SetVariation (LPDIRECTMUSICPATTERNTRACK iface, IDirectMusicSegmentState* pSegState, DWORD dwVariationFlags, DWORD dwPart);
extern HRESULT WINAPI IDirectMusicPatternTrackImpl_SetPatternByName (LPDIRECTMUSICPATTERNTRACK iface, IDirectMusicSegmentState* pSegState, WCHAR* wszName, IDirectMusicStyle* pStyle, DWORD dwPatternType, DWORD* pdwLength);
-
-/*****************************************************************************
- * IDirectMusicSegmentObject implementation structure
- */
-struct IDirectMusicSegmentObject
-{
- /* IUnknown fields */
- ICOM_VFIELD (IDirectMusicObject);
- DWORD ref;
-
- /* IDirectMusicObjectImpl fields */
- LPDMUS_OBJECTDESC pDesc;
- IDirectMusicSegmentObjectStream* pStream;
- IDirectMusicSegment8Impl* pSegment;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicSegmentObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicSegmentObject_AddRef (LPDIRECTMUSICOBJECT iface);
-extern ULONG WINAPI IDirectMusicSegmentObject_Release (LPDIRECTMUSICOBJECT iface);
-/* IDirectMusicObject: */
-extern HRESULT WINAPI IDirectMusicSegmentObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicSegmentObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicSegmentObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
-
-/*****************************************************************************
- * IDirectMusicSegmentObjectStream implementation structure
- */
-struct IDirectMusicSegmentObjectStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicSegmentObject* pParentObject;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicSegmentObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicSegmentObjectStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicSegmentObjectStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicSegmentObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
-/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicSegmentObjectStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicSegmentObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicSegmentObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicSegmentObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
-
-
-/*****************************************************************************
- * IDirectMusicSongObject implementation structure
- */
-struct IDirectMusicSongObject
-{
- /* IUnknown fields */
- ICOM_VFIELD (IDirectMusicObject);
- DWORD ref;
-
- /* IDirectMusicObjectImpl fields */
- LPDMUS_OBJECTDESC pDesc;
- IDirectMusicSongObjectStream* pStream;
- IDirectMusicSongImpl* pSong;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicSongObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicSongObject_AddRef (LPDIRECTMUSICOBJECT iface);
-extern ULONG WINAPI IDirectMusicSongObject_Release (LPDIRECTMUSICOBJECT iface);
-/* IDirectMusicObject: */
-extern HRESULT WINAPI IDirectMusicSongObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicSongObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicSongObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
-
-/*****************************************************************************
- * IDirectMusicSongObjectStream implementation structure
- */
-struct IDirectMusicSongObjectStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicSongObject* pParentObject;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicSongObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicSongObjectStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicSongObjectStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicSongObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
-/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicSongObjectStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicSongObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicSongObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicSongObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
-
-/*****************************************************************************
- * IDirectMusicAudioPathObject implementation structure
- */
-struct IDirectMusicAudioPathObject
-{
- /* IUnknown fields */
- ICOM_VFIELD (IDirectMusicObject);
- DWORD ref;
-
- /* IDirectMusicObjectImpl fields */
- LPDMUS_OBJECTDESC pDesc;
- IDirectMusicAudioPathObjectStream* pStream;
- IDirectMusicAudioPathImpl* pAudioPath;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicAudioPathObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicAudioPathObject_AddRef (LPDIRECTMUSICOBJECT iface);
-extern ULONG WINAPI IDirectMusicAudioPathObject_Release (LPDIRECTMUSICOBJECT iface);
-/* IDirectMusicObject: */
-extern HRESULT WINAPI IDirectMusicAudioPathObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicAudioPathObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicAudioPathObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
-
-/*****************************************************************************
- * IDirectMusicAudioPathObjectStream implementation structure
- */
-struct IDirectMusicAudioPathObjectStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicAudioPathObject* pParentObject;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicAudioPathObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicAudioPathObjectStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicAudioPathObjectStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicAudioPathObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
-/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicAudioPathObjectStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicAudioPathObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicAudioPathObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicAudioPathObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
-
-/*****************************************************************************
- * IDirectMusicGraphObject implementation structure
- */
-struct IDirectMusicGraphObject
-{
- /* IUnknown fields */
- ICOM_VFIELD (IDirectMusicObject);
- DWORD ref;
-
- /* IDirectMusicObjectImpl fields */
- LPDMUS_OBJECTDESC pDesc;
- IDirectMusicGraphObjectStream* pStream;
- IDirectMusicGraphImpl* pGraph;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicGraphObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicGraphObject_AddRef (LPDIRECTMUSICOBJECT iface);
-extern ULONG WINAPI IDirectMusicGraphObject_Release (LPDIRECTMUSICOBJECT iface);
-/* IDirectMusicObject: */
-extern HRESULT WINAPI IDirectMusicGraphObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicGraphObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicGraphObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
-
-/*****************************************************************************
- * IDirectMusicGraphObjectStream implementation structure
- */
-struct IDirectMusicGraphObjectStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicGraphObject* pParentObject;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicGraphObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicGraphObjectStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicGraphObjectStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicGraphObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
-/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicGraphObjectStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicGraphObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicGraphObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicGraphObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
-
-
/*****************************************************************************
* IDirectMusicLyricsTrack implementation structure
*/
struct IDirectMusicLyricsTrack
{
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicLyricsTrack fields */
- IDirectMusicLyricsTrackStream* pStream;
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicLyricsTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicLyricsTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicLyricsTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicLyricsTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicLyricsTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicLyricsTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicLyricsTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicLyricsTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicLyricsTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicLyricsTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicLyricsTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicLyricsTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicLyricsTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicLyricsTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicLyricsTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicLyricsTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicLyricsTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicLyricsTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-
-/*****************************************************************************
- * IDirectMusicLyricsTrackStream implementation structure
- */
-struct IDirectMusicLyricsTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicLyricsTrack* pParentTrack;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicLyricsTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicLyricsTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicLyricsTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicLyricsTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicLyricsTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicLyricsTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicLyricsTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicLyricsTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicLyricsTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicLyricsTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicLyricsTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicLyricsTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicMarkerTrack implementation structure
*/
-struct IDirectMusicMarkerTrack
-{
+struct IDirectMusicMarkerTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicMarkerTrack fields */
- IDirectMusicMarkerTrackStream* pStream;
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicMarkerTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicMarkerTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicMarkerTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicMarkerTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicMarkerTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicMarkerTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicMarkerTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicMarkerTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicMarkerTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicMarkerTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicMarkerTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicMarkerTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicMarkerTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicMarkerTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicMarkerTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicMarkerTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicMarkerTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicMarkerTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-
-/*****************************************************************************
- * IDirectMusicMarkerTrackStream implementation structure
- */
-struct IDirectMusicMarkerTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicMarkerTrack* pParentTrack;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicMarkerTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicMarkerTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicMarkerTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicMarkerTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicMarkerTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicMarkerTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicMarkerTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicMarkerTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicMarkerTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicMarkerTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicMarkerTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicMarkerTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicParamControlTrack implementation structure
*/
-struct IDirectMusicParamControlTrack
-{
+struct IDirectMusicParamControlTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicParamControlTrack fields */
- IDirectMusicParamControlTrackStream* pStream;
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicParamControlTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicParamControlTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicParamControlTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicParamControlTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicParamControlTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicParamControlTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicParamControlTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicParamControlTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicParamControlTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicParamControlTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicParamControlTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicParamControlTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicParamControlTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicParamControlTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicParamControlTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicParamControlTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicParamControlTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicParamControlTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-
-/*****************************************************************************
- * IDirectMusicParamControlTrackStream implementation structure
- */
-struct IDirectMusicParamControlTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicParamControlTrack* pParentTrack;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicParamControlTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicParamControlTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicParamControlTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicParamControlTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicParamControlTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicParamControlTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicParamControlTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicParamControlTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicParamControlTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicParamControlTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicParamControlTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicParamControlTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicSegTriggerTrack implementation structure
*/
-struct IDirectMusicSegTriggerTrack
-{
+struct IDirectMusicSegTriggerTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicSegTriggerTrack fields */
- IDirectMusicSegTriggerTrackStream* pStream;
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicSegTriggerTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicSegTriggerTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicSegTriggerTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicSegTriggerTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicSegTriggerTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicSegTriggerTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicSegTriggerTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicSegTriggerTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicSegTriggerTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicSegTriggerTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicSegTriggerTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicSegTriggerTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicSegTriggerTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicSegTriggerTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicSegTriggerTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicSegTriggerTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicSegTriggerTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-
-/*****************************************************************************
- * IDirectMusicSegTriggerTrackStream implementation structure
- */
-struct IDirectMusicSegTriggerTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicSegTriggerTrack* pParentTrack;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicSegTriggerTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicSegTriggerTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicSegTriggerTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicSegTriggerTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicSegTriggerTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicSegTriggerTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicSegTriggerTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicSegTriggerTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicSegTriggerTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicSegTriggerTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicSegTriggerTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicSegTriggerTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicSeqTrack implementation structure
*/
-struct IDirectMusicSeqTrack
-{
+struct IDirectMusicSeqTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicSeqTrack fields */
- IDirectMusicSeqTrackStream* pStream;
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicSeqTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicSeqTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicSeqTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicSeqTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicSeqTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicSeqTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicSeqTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicSeqTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicSeqTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicSeqTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicSeqTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicSeqTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicSeqTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicSeqTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicSeqTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicSeqTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicSeqTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicSeqTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-
-/*****************************************************************************
- * IDirectMusicSeqTrackStream implementation structure
- */
-struct IDirectMusicSeqTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicSeqTrack* pParentTrack;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicSeqTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicSeqTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicSeqTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicSeqTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicSeqTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicSeqTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicSeqTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicSeqTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicSeqTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicSeqTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicSeqTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicSeqTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicSysExTrack implementation structure
*/
-struct IDirectMusicSysExTrack
-{
+struct IDirectMusicSysExTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicSysExTrack fields */
- IDirectMusicSysExTrackStream* pStream;
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicSysExTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicSysExTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicSysExTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicSysExTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicSysExTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicSysExTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicSysExTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicSysExTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicSysExTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicSysExTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicSysExTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicSysExTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicSysExTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicSysExTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicSysExTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicSysExTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicSysExTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicSysExTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-
-/*****************************************************************************
- * IDirectMusicSysExTrackStream implementation structure
- */
-struct IDirectMusicSysExTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicSysExTrack* pParentTrack;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicSysExTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicSysExTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicSysExTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicSysExTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicSysExTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicSysExTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicSysExTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicSysExTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicSysExTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicSysExTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicSysExTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicSysExTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicTempoTrack implementation structure
*/
-struct IDirectMusicTempoTrack
-{
+struct IDirectMusicTempoTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicTempoTrack fields */
- IDirectMusicTempoTrackStream* pStream;
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicTempoTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicTempoTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicTempoTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicTempoTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicTempoTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicTempoTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicTempoTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicTempoTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicTempoTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicTempoTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicTempoTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicTempoTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicTempoTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicTempoTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicTempoTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicTempoTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicTempoTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicTempoTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-
-/*****************************************************************************
- * IDirectMusicTempoTrackStream implementation structure
- */
-struct IDirectMusicTempoTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicTempoTrack* pParentTrack;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicTempoTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicTempoTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicTempoTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicTempoTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicTempoTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicTempoTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicTempoTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicTempoTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicTempoTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicTempoTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicTempoTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicTempoTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicTimeSigTrack implementation structure
*/
-struct IDirectMusicTimeSigTrack
-{
+struct IDirectMusicTimeSigTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicTimeSigTrack fields */
- IDirectMusicTimeSigTrackStream* pStream;
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicTimeSigTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicTimeSigTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicTimeSigTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicTimeSigTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicTimeSigTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicTimeSigTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicTimeSigTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicTimeSigTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicTimeSigTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicTimeSigTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicTimeSigTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicTimeSigTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicTimeSigTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicTimeSigTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicTimeSigTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicTimeSigTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicTimeSigTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicTimeSigTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-
-/*****************************************************************************
- * IDirectMusicTimeSigTrackStream implementation structure
- */
-struct IDirectMusicTimeSigTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicTimeSigTrack* pParentTrack;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicTimeSigTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicTimeSigTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicTimeSigTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicTimeSigTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicTimeSigTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicTimeSigTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicTimeSigTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicTimeSigTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicTimeSigTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicTimeSigTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicTimeSigTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicTimeSigTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicWaveTrack implementation structure
*/
-struct IDirectMusicWaveTrack
-{
+struct IDirectMusicWaveTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicWaveTrack fields */
- IDirectMusicWaveTrackStream* pStream;
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicWaveTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicWaveTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicWaveTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicWaveTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicWaveTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicWaveTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicWaveTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicWaveTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicWaveTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicWaveTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicWaveTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicWaveTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicWaveTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicWaveTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicWaveTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicWaveTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicWaveTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicWaveTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicWaveTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicWaveTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+/* IPersistStream: */
+extern HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicWaveTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicWaveTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+
/*****************************************************************************
- * IDirectMusicWaveTrackStream implementation structure
+ * Misc.
*/
-struct IDirectMusicWaveTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
+/* for simpler reading */
+typedef struct _DMUS_PRIVATE_CHUNK {
+ FOURCC fccID; /* FOURCC ID of the chunk */
+ DWORD dwSize; /* size of the chunk */
+} DMUS_PRIVATE_CHUNK, *LPDMUS_PRIVATE_CHUNK;
- /* IPersistStreamImpl fields */
- IDirectMusicWaveTrack* pParentTrack;
-};
+/* check whether the given DWORD is even (return 0) or odd (return 1) */
+static inline int even_or_odd (DWORD number) {
+ return (number & 0x1); /* basically, check if bit 0 is set ;) */
+}
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicWaveTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicWaveTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicWaveTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicWaveTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
-/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicWaveTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicWaveTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicWaveTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicWaveTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
-
-static inline const char *debugstr_fourcc( DWORD fourcc )
-{
+/* FOURCC to string conversion for debug messages */
+static inline const char *debugstr_fourcc (DWORD fourcc) {
if (!fourcc) return "'null'";
- return wine_dbg_sprintf( "\'%c%c%c%c\'",
- (char)(fourcc), (char)(fourcc >> 8),
- (char)(fourcc >> 16), (char)(fourcc >> 24) );
+ return wine_dbg_sprintf ("\'%c%c%c%c\'",
+ (char)(fourcc), (char)(fourcc >> 8),
+ (char)(fourcc >> 16), (char)(fourcc >> 24));
+}
+
+/* DMUS_VERSION struct to string conversion for debug messages */
+static inline const char *debugstr_dmversion (LPDMUS_VERSION version) {
+ if (!version) return "'null'";
+ return wine_dbg_sprintf ("\'%i,%i,%i,%i\'",
+ (int)((version->dwVersionMS && 0xFFFF0000) >> 8), (int)(version->dwVersionMS && 0x0000FFFF),
+ (int)((version->dwVersionLS && 0xFFFF0000) >> 8), (int)(version->dwVersionLS && 0x0000FFFF));
+}
+
+/* used for initialising structs (primarily for DMUS_OBJECTDESC) */
+#define DM_STRUCT_INIT(x) \
+ do { \
+ memset((x), 0, sizeof(*(x))); \
+ (x)->dwSize = sizeof(*x); \
+ } while (0)
+
+
+/* used for generic dumping (copied from ddraw) */
+typedef struct {
+ DWORD val;
+ const char* name;
+} flag_info;
+
+/* generic dump function */
+static inline void DMUSIC_dump_flags_ (DWORD flags, const flag_info* names, size_t num_names, int newline) {
+ unsigned int i;
+
+ for (i=0; i < num_names; i++) {
+ if ((flags & names[i].val) || /* standard flag value */
+ ((!flags) && (!names[i].val))) /* zero value only */
+ DPRINTF("%s ", names[i].name);
+ }
+
+ if (newline) DPRINTF("\n");
+}
+
+#define FE(x) { x, #x }
+#define DMUSIC_dump_flags(flags,names,num_names) DMUSIC_dump_flags_(flags, names, num_names, 1)
+
+static inline void DMUSIC_dump_DMUS_OBJ_FLAGS (DWORD flagmask) {
+ static const flag_info flags[] = {
+ FE(DMUS_OBJ_OBJECT),
+ FE(DMUS_OBJ_CLASS),
+ FE(DMUS_OBJ_NAME),
+ FE(DMUS_OBJ_CATEGORY),
+ FE(DMUS_OBJ_FILENAME),
+ FE(DMUS_OBJ_FULLPATH),
+ FE(DMUS_OBJ_URL),
+ FE(DMUS_OBJ_VERSION),
+ FE(DMUS_OBJ_DATE),
+ FE(DMUS_OBJ_LOADED),
+ FE(DMUS_OBJ_MEMORY),
+ FE(DMUS_OBJ_STREAM)
+ };
+ DMUSIC_dump_flags(flagmask, flags, sizeof(flags)/sizeof(flags[0]));
+}
+
+static inline void DMUSIC_dump_DMUS_OBJECTDESC (LPDMUS_OBJECTDESC pDesc) {
+ if (pDesc) {
+ DPRINTF("DMUS_OBJECTDESC (%p)\n", pDesc);
+ DPRINTF(" - dwSize = %ld\n", pDesc->dwSize);
+ DPRINTF(" - dwValidData = ");
+ DMUSIC_dump_DMUS_OBJ_FLAGS (pDesc->dwValidData);
+ if (pDesc->dwValidData & DMUS_OBJ_CLASS) DPRINTF(" - guidClass = %s\n", debugstr_guid(&pDesc->guidClass));
+ if (pDesc->dwValidData & DMUS_OBJ_OBJECT) DPRINTF(" - guidObject = %s\n", debugstr_guid(&pDesc->guidObject));
+ if (pDesc->dwValidData & DMUS_OBJ_DATE) DPRINTF(" - ftDate = FIXME\n");
+ if (pDesc->dwValidData & DMUS_OBJ_VERSION) DPRINTF(" - vVersion = %s\n", debugstr_dmversion(&pDesc->vVersion));
+ if (pDesc->dwValidData & DMUS_OBJ_NAME) DPRINTF(" - wszName = %s\n", debugstr_w(pDesc->wszName));
+ if (pDesc->dwValidData & DMUS_OBJ_CATEGORY) DPRINTF(" - wszCategory = %s\n", debugstr_w(pDesc->wszCategory));
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME) DPRINTF(" - wszFileName = %s\n", debugstr_w(pDesc->wszFileName));
+ if (pDesc->dwValidData & DMUS_OBJ_MEMORY) DPRINTF(" - llMemLength = %lli\n - pbMemData = %p\n", pDesc->llMemLength, pDesc->pbMemData);
+ if (pDesc->dwValidData & DMUS_OBJ_STREAM) DPRINTF(" - pStream = %p\n", pDesc->pStream);
+ } else {
+ DPRINTF("(NULL)\n");
+ }
}
#endif /* __WINE_DMIME_PRIVATE_H */
diff --git a/dlls/dmime/graph.c b/dlls/dmime/graph.c
index 4842999..0a1743c 100644
--- a/dlls/dmime/graph.c
+++ b/dlls/dmime/graph.c
@@ -1,6 +1,6 @@
/* IDirectMusicGraph
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,44 +17,48 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmime_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
+WINE_DECLARE_DEBUG_CHANNEL(dmfile);
-/* IDirectMusicGraph IUnknown part: */
-HRESULT WINAPI IDirectMusicGraphImpl_QueryInterface (LPDIRECTMUSICGRAPH iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicGraphImpl,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicGraph)) {
- IDirectMusicGraphImpl_AddRef(iface);
- *ppobj = This;
+/*****************************************************************************
+ * IDirectMusicGraphImpl implementation
+ */
+/* IDirectMusicGraphImpl IUnknown part: */
+HRESULT WINAPI IDirectMusicGraphImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, UnknownVtbl, iface);
+
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPVOID)&This->UnknownVtbl;
+ IDirectMusicGraphImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicGraph)) {
+ *ppobj = (LPVOID)&This->GraphVtbl;
+ IDirectMusicGraphImpl_IDirectMusicGraph_AddRef ((LPDIRECTMUSICGRAPH)&This->GraphVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
+ *ppobj = (LPVOID)&This->ObjectVtbl;
+ IDirectMusicGraphImpl_IDirectMusicObject_AddRef ((LPDIRECTMUSICOBJECT)&This->ObjectVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IPersistStream)) {
+ *ppobj = (LPVOID)&This->PersistStreamVtbl;
+ IDirectMusicGraphImpl_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+ WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicGraphImpl_AddRef (LPDIRECTMUSICGRAPH iface)
-{
- ICOM_THIS(IDirectMusicGraphImpl,iface);
+ULONG WINAPI IDirectMusicGraphImpl_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicGraphImpl_Release (LPDIRECTMUSICGRAPH iface)
-{
- ICOM_THIS(IDirectMusicGraphImpl,iface);
+ULONG WINAPI IDirectMusicGraphImpl_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -63,22 +67,40 @@
return ref;
}
-/* IDirectMusicGraph IDirectMusicGraph part: */
-HRESULT WINAPI IDirectMusicGraphImpl_StampPMsg (LPDIRECTMUSICGRAPH iface, DMUS_PMSG* pPMSG)
-{
- ICOM_THIS(IDirectMusicGraphImpl,iface);
+ICOM_VTABLE(IUnknown) DirectMusicGraph_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicGraphImpl_IUnknown_QueryInterface,
+ IDirectMusicGraphImpl_IUnknown_AddRef,
+ IDirectMusicGraphImpl_IUnknown_Release
+};
+/* IDirectMusicGraphImpl IDirectMusicGraph part: */
+HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicGraph_QueryInterface (LPDIRECTMUSICGRAPH iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, GraphVtbl, iface);
+ return IDirectMusicGraphImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicGraphImpl_IDirectMusicGraph_AddRef (LPDIRECTMUSICGRAPH iface) {
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, GraphVtbl, iface);
+ return IDirectMusicGraphImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicGraphImpl_IDirectMusicGraph_Release (LPDIRECTMUSICGRAPH iface) {
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, GraphVtbl, iface);
+ return IDirectMusicGraphImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicGraph_StampPMsg (LPDIRECTMUSICGRAPH iface, DMUS_PMSG* pPMSG) {
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, GraphVtbl, iface);
FIXME("(%p, %p): stub\n", This, pPMSG);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicGraphImpl_InsertTool (LPDIRECTMUSICGRAPH iface, IDirectMusicTool* pTool, DWORD* pdwPChannels, DWORD cPChannels, LONG lIndex)
-{
+HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicGraph_InsertTool (LPDIRECTMUSICGRAPH iface, IDirectMusicTool* pTool, DWORD* pdwPChannels, DWORD cPChannels, LONG lIndex) {
int i;
IDirectMusicTool8Impl* p;
IDirectMusicTool8Impl* toAdd = (IDirectMusicTool8Impl*) pTool;
- ICOM_THIS(IDirectMusicGraphImpl,iface);
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, GraphVtbl, iface);
FIXME("(%p, %p, %p, %ld, %li): use of pdwPChannels\n", This, pTool, pdwPChannels, cPChannels, lIndex);
@@ -118,11 +140,10 @@
return DS_OK;
}
-HRESULT WINAPI IDirectMusicGraphImpl_GetTool (LPDIRECTMUSICGRAPH iface, DWORD dwIndex, IDirectMusicTool** ppTool)
-{
+HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicGraph_GetTool (LPDIRECTMUSICGRAPH iface, DWORD dwIndex, IDirectMusicTool** ppTool) {
int i;
IDirectMusicTool8Impl* p = NULL;
- ICOM_THIS(IDirectMusicGraphImpl,iface);
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, GraphVtbl, iface);
FIXME("(%p, %ld, %p): stub\n", This, dwIndex, ppTool);
@@ -134,241 +155,458 @@
if (NULL != *ppTool) {
IDirectMusicTool8Impl_AddRef((LPDIRECTMUSICTOOL8) *ppTool);
}
- return DS_OK;
+ return S_OK;
}
-HRESULT WINAPI IDirectMusicGraphImpl_RemoveTool (LPDIRECTMUSICGRAPH iface, IDirectMusicTool* pTool)
-{
- ICOM_THIS(IDirectMusicGraphImpl,iface);
-
+HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicGraph_RemoveTool (LPDIRECTMUSICGRAPH iface, IDirectMusicTool* pTool) {
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, GraphVtbl, iface);
FIXME("(%p, %p): stub\n", This, pTool);
+ return S_OK;
+}
+
+ICOM_VTABLE(IDirectMusicGraph) DirectMusicGraph_Graph_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicGraphImpl_IDirectMusicGraph_QueryInterface,
+ IDirectMusicGraphImpl_IDirectMusicGraph_AddRef,
+ IDirectMusicGraphImpl_IDirectMusicGraph_Release,
+ IDirectMusicGraphImpl_IDirectMusicGraph_StampPMsg,
+ IDirectMusicGraphImpl_IDirectMusicGraph_InsertTool,
+ IDirectMusicGraphImpl_IDirectMusicGraph_GetTool,
+ IDirectMusicGraphImpl_IDirectMusicGraph_RemoveTool
+};
+
+
+/* IDirectMusicGraphImpl IDirectMusicObject part: */
+HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, ObjectVtbl, iface);
+ return IDirectMusicGraphImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicGraphImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, ObjectVtbl, iface);
+ return IDirectMusicGraphImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicGraphImpl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, ObjectVtbl, iface);
+ return IDirectMusicGraphImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, ObjectVtbl, iface);
+ TRACE("(%p, %p)\n", This, pDesc);
+ /* I think we shouldn't return pointer here since then values can be changed; it'd be a mess */
+ memcpy (pDesc, This->pDesc, This->pDesc->dwSize);
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, ObjectVtbl, iface);
+ TRACE("(%p, %p): setting descriptor:\n", This, pDesc);
+ if (TRACE_ON(dmime)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
+ }
+
+ /* According to MSDN, we should copy only given values, not whole struct */
+ if (pDesc->dwValidData & DMUS_OBJ_OBJECT)
+ memcpy (&This->pDesc->guidObject, &pDesc->guidObject, sizeof (pDesc->guidObject));
+ if (pDesc->dwValidData & DMUS_OBJ_CLASS)
+ memcpy (&This->pDesc->guidClass, &pDesc->guidClass, sizeof (pDesc->guidClass));
+ if (pDesc->dwValidData & DMUS_OBJ_NAME)
+ strncpyW (This->pDesc->wszName, pDesc->wszName, DMUS_MAX_NAME);
+ if (pDesc->dwValidData & DMUS_OBJ_CATEGORY)
+ strncpyW (This->pDesc->wszCategory, pDesc->wszCategory, DMUS_MAX_CATEGORY);
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME)
+ strncpyW (This->pDesc->wszFileName, pDesc->wszFileName, DMUS_MAX_FILENAME);
+ if (pDesc->dwValidData & DMUS_OBJ_VERSION)
+ memcpy (&This->pDesc->vVersion, &pDesc->vVersion, sizeof (pDesc->vVersion));
+ if (pDesc->dwValidData & DMUS_OBJ_DATE)
+ memcpy (&This->pDesc->ftDate, &pDesc->ftDate, sizeof (pDesc->ftDate));
+ if (pDesc->dwValidData & DMUS_OBJ_MEMORY) {
+ memcpy (&This->pDesc->llMemLength, &pDesc->llMemLength, sizeof (pDesc->llMemLength));
+ memcpy (This->pDesc->pbMemData, pDesc->pbMemData, sizeof (pDesc->pbMemData));
+ }
+ if (pDesc->dwValidData & DMUS_OBJ_STREAM) {
+ /* according to MSDN, we copy the stream */
+ IStream_Clone (pDesc->pStream, &This->pDesc->pStream);
+ }
+
+ /* add new flags */
+ This->pDesc->dwValidData |= pDesc->dwValidData;
return S_OK;
}
-ICOM_VTABLE(IDirectMusicGraph) DirectMusicGraph_Vtbl =
-{
+HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, ObjectVtbl, iface);
+ DMUS_PRIVATE_CHUNK Chunk;
+ DWORD StreamSize, StreamCount, ListSize[1], ListCount[1];
+ LARGE_INTEGER liMove; /* used when skipping chunks */
+
+ TRACE("(%p, %p, %p)\n", This, pStream, pDesc);
+
+ /* FIXME: should this be determined from stream? */
+ pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&pDesc->guidClass, &CLSID_DirectMusicGraph, sizeof(CLSID));
+
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_RIFF: {
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ StreamSize = Chunk.dwSize - sizeof(FOURCC);
+ StreamCount = 0;
+ if (Chunk.fccID == DMUS_FOURCC_TOOLGRAPH_FORM) {
+ TRACE_(dmfile)(": graph form\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ StreamCount += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case DMUS_FOURCC_GUID_CHUNK: {
+ TRACE_(dmfile)(": GUID chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read (pStream, &pDesc->guidObject, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_VERSION_CHUNK: {
+ TRACE_(dmfile)(": version chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read (pStream, &pDesc->vVersion, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CATEGORY_CHUNK: {
+ TRACE_(dmfile)(": category chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_CATEGORY;
+ IStream_Read (pStream, pDesc->wszCategory, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[0] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[0] = 0;
+ switch (Chunk.fccID) {
+ /* evil M$ UNFO list, which can (!?) contain INFO elements */
+ case DMUS_FOURCC_UNFO_LIST: {
+ TRACE_(dmfile)(": UNFO list\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
+ (though strings seem to be valid unicode) */
+ case mmioFOURCC('I','N','A','M'):
+ case DMUS_FOURCC_UNAM_CHUNK: {
+ TRACE_(dmfile)(": name chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_NAME;
+ IStream_Read (pStream, pDesc->wszName, Chunk.dwSize, NULL);
+ break;
+ }
+ case mmioFOURCC('I','A','R','T'):
+ case DMUS_FOURCC_UART_CHUNK: {
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','O','P'):
+ case DMUS_FOURCC_UCOP_CHUNK: {
+ TRACE_(dmfile)(": copyright chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','S','B','J'):
+ case DMUS_FOURCC_USBJ_CHUNK: {
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','M','T'):
+ case DMUS_FOURCC_UCMT_CHUNK: {
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
+ } while (StreamCount < StreamSize);
+ break;
+ } else {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = StreamSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+
+ TRACE_(dmfile)(": reading finished\n");
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return DMUS_E_INVALIDFILE;
+ }
+ }
+
+ TRACE(": returning descriptor:\n");
+ if (TRACE_ON(dmime)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
+ }
+
+ return S_OK;
+}
+
+ICOM_VTABLE(IDirectMusicObject) DirectMusicGraph_Object_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicGraphImpl_QueryInterface,
- IDirectMusicGraphImpl_AddRef,
- IDirectMusicGraphImpl_Release,
- IDirectMusicGraphImpl_StampPMsg,
- IDirectMusicGraphImpl_InsertTool,
- IDirectMusicGraphImpl_GetTool,
- IDirectMusicGraphImpl_RemoveTool
+ IDirectMusicGraphImpl_IDirectMusicObject_QueryInterface,
+ IDirectMusicGraphImpl_IDirectMusicObject_AddRef,
+ IDirectMusicGraphImpl_IDirectMusicObject_Release,
+ IDirectMusicGraphImpl_IDirectMusicObject_GetDescriptor,
+ IDirectMusicGraphImpl_IDirectMusicObject_SetDescriptor,
+ IDirectMusicGraphImpl_IDirectMusicObject_ParseDescriptor
+};
+
+/* IDirectMusicGraphImpl IPersistStream part: */
+HRESULT WINAPI IDirectMusicGraphImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, PersistStreamVtbl, iface);
+ return IDirectMusicGraphImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicGraphImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, PersistStreamVtbl, iface);
+ return IDirectMusicGraphImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicGraphImpl_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, PersistStreamVtbl, iface);
+ return IDirectMusicGraphImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicGraphImpl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicGraphImpl_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicGraphImpl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
+ ICOM_THIS_MULTI(IDirectMusicGraphImpl, PersistStreamVtbl, iface);
+ FOURCC chunkID;
+ DWORD chunkSize, StreamSize, StreamCount, ListSize[3], ListCount[3];
+ LARGE_INTEGER liMove; /* used when skipping chunks */
+
+ FIXME("(%p, %p): Loading not implemented yet\n", This, pStm);
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ IStream_Read (pStm, &chunkSize, sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
+ switch (chunkID) {
+ case FOURCC_RIFF: {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(chunkID));
+ StreamSize = chunkSize - sizeof(FOURCC);
+ StreamCount = 0;
+ switch (chunkID) {
+ case DMUS_FOURCC_TOOLGRAPH_FORM: {
+ TRACE_(dmfile)(": graph form\n");
+ do {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
+ StreamCount += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
+ switch (chunkID) {
+ case DMUS_FOURCC_GUID_CHUNK: {
+ TRACE_(dmfile)(": GUID chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read (pStm, &This->pDesc->guidObject, chunkSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_VERSION_CHUNK: {
+ TRACE_(dmfile)(": version chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read (pStm, &This->pDesc->vVersion, chunkSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CATEGORY_CHUNK: {
+ TRACE_(dmfile)(": category chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_CATEGORY;
+ IStream_Read (pStm, This->pDesc->wszCategory, chunkSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(chunkID));
+ ListSize[0] = chunkSize - sizeof(FOURCC);
+ ListCount[0] = 0;
+ switch (chunkID) {
+ case DMUS_FOURCC_UNFO_LIST: {
+ TRACE_(dmfile)(": UNFO list\n");
+ do {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
+ switch (chunkID) {
+ /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
+ (though strings seem to be valid unicode) */
+ case mmioFOURCC('I','N','A','M'):
+ case DMUS_FOURCC_UNAM_CHUNK: {
+ TRACE_(dmfile)(": name chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_NAME;
+ IStream_Read (pStm, This->pDesc->wszName, chunkSize, NULL);
+ break;
+ }
+ case mmioFOURCC('I','A','R','T'):
+ case DMUS_FOURCC_UART_CHUNK: {
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','O','P'):
+ case DMUS_FOURCC_UCOP_CHUNK: {
+ TRACE_(dmfile)(": copyright chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','S','B','J'):
+ case DMUS_FOURCC_USBJ_CHUNK: {
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','M','T'):
+ case DMUS_FOURCC_UCMT_CHUNK: {
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = chunkSize - sizeof(FOURCC);
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
+ } while (StreamCount < StreamSize);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = StreamSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+ }
+ TRACE_(dmfile)(": reading finished\n");
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+ }
+
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicGraphImpl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicGraphImpl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
+ return E_NOTIMPL;
+}
+
+ICOM_VTABLE(IPersistStream) DirectMusicGraph_PersistStream_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicGraphImpl_IPersistStream_QueryInterface,
+ IDirectMusicGraphImpl_IPersistStream_AddRef,
+ IDirectMusicGraphImpl_IPersistStream_Release,
+ IDirectMusicGraphImpl_IPersistStream_GetClassID,
+ IDirectMusicGraphImpl_IPersistStream_IsDirty,
+ IDirectMusicGraphImpl_IPersistStream_Load,
+ IDirectMusicGraphImpl_IPersistStream_Save,
+ IDirectMusicGraphImpl_IPersistStream_GetSizeMax
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicGraph (LPCGUID lpcGUID, LPDIRECTMUSICGRAPH *ppDMGrph, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicGraphImpl* dmgraph;
+HRESULT WINAPI DMUSIC_CreateDirectMusicGraphImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicGraphImpl* obj;
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicGraph)) {
- dmgraph = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicGraphImpl));
- if (NULL == dmgraph) {
- *ppDMGrph = (LPDIRECTMUSICGRAPH) NULL;
- return E_OUTOFMEMORY;
- }
- dmgraph->lpVtbl = &DirectMusicGraph_Vtbl;
- dmgraph->ref = 1;
- *ppDMGrph = (LPDIRECTMUSICGRAPH) dmgraph;
- return S_OK;
+ obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicGraphImpl));
+ if (NULL == obj) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
}
- WARN("No interface found\n");
+ obj->UnknownVtbl = &DirectMusicGraph_Unknown_Vtbl;
+ obj->GraphVtbl = &DirectMusicGraph_Graph_Vtbl;
+ obj->ObjectVtbl = &DirectMusicGraph_Object_Vtbl;
+ obj->PersistStreamVtbl = &DirectMusicGraph_PersistStream_Vtbl;
+ obj->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(obj->pDesc);
+ obj->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&obj->pDesc->guidClass, &CLSID_DirectMusicGraph, sizeof (CLSID));
+ obj->ref = 0; /* will be inited by QueryInterface */
- return E_NOINTERFACE;
+ return IDirectMusicGraphImpl_IUnknown_QueryInterface ((LPUNKNOWN)&obj->UnknownVtbl, lpcGUID, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicGraphObject implementation
- */
-/* IDirectMusicGraphObject IUnknown part: */
-HRESULT WINAPI IDirectMusicGraphObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicGraphObject,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IDirectMusicObject)) {
- IDirectMusicGraphObject_AddRef(iface);
- *ppobj = This;
- return S_OK;
- } else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IPersistStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = (LPPERSISTSTREAM)This->pStream;
- return S_OK;
- } else if (IsEqualIID (riid, &IID_IDirectMusicGraph)) {
- IDirectMusicGraph_AddRef ((LPDIRECTMUSICGRAPH)This->pGraph);
- *ppobj = (LPDIRECTMUSICGRAPH)This->pGraph;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicGraphObject_AddRef (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicGraphObject,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicGraphObject_Release (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicGraphObject,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicGraphObject IDirectMusicObject part: */
-HRESULT WINAPI IDirectMusicGraphObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicGraphObject,iface);
-
- TRACE("(%p, %p)\n", This, pDesc);
- pDesc = This->pDesc;
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicGraphObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicGraphObject,iface);
-
- TRACE("(%p, %p)\n", This, pDesc);
- This->pDesc = pDesc;
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicGraphObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicGraphObject,iface);
-
- FIXME("(%p, %p, %p): stub\n", This, pStream, pDesc);
-
- return S_OK;
-}
-
-ICOM_VTABLE(IDirectMusicObject) DirectMusicGraphObject_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicGraphObject_QueryInterface,
- IDirectMusicGraphObject_AddRef,
- IDirectMusicGraphObject_Release,
- IDirectMusicGraphObject_GetDescriptor,
- IDirectMusicGraphObject_SetDescriptor,
- IDirectMusicGraphObject_ParseDescriptor
-};
-
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicGraphObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicGraphObject *obj;
-
- TRACE("(%p,%p,%p)\n", lpcGUID, ppObject, pUnkOuter);
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicObject)) {
- obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicGraphObject));
- if (NULL == obj) {
- *ppObject = (LPDIRECTMUSICOBJECT) NULL;
- return E_OUTOFMEMORY;
- }
- obj->lpVtbl = &DirectMusicGraphObject_Vtbl;
- obj->ref = 1;
- /* prepare IPersistStream */
- obj->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicGraphObjectStream));
- obj->pStream->lpVtbl = &DirectMusicGraphObjectStream_Vtbl;
- obj->pStream->ref = 1;
- obj->pStream->pParentObject = obj;
- /* prepare IDirectMusicGraph */
- DMUSIC_CreateDirectMusicGraph (&IID_IDirectMusicGraph, (LPDIRECTMUSICGRAPH*)&obj->pGraph, NULL);
- obj->pGraph->pObject = obj;
- *ppObject = (LPDIRECTMUSICOBJECT) obj;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
-}
-
-/*****************************************************************************
- * IDirectMusicGraphObjectStream implementation
- */
-/* IDirectMusicGraphObjectStream IUnknown part: */
-HRESULT WINAPI IDirectMusicGraphObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicGraphObjectStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicGraphObjectStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicGraphObjectStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicGraphObjectStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicGraphObjectStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicGraphObjectStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicGraphObjectStream IPersist part: */
-HRESULT WINAPI IDirectMusicGraphObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- return E_NOTIMPL;
-}
-
-/* IDirectMusicGraphObjectStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicGraphObjectStream_IsDirty (LPPERSISTSTREAM iface)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicGraphObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
- FIXME(": Loading not implemented yet\n");
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicGraphObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicGraphObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
- return E_NOTIMPL;
-}
-
-ICOM_VTABLE(IPersistStream) DirectMusicGraphObjectStream_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicGraphObjectStream_QueryInterface,
- IDirectMusicGraphObjectStream_AddRef,
- IDirectMusicGraphObjectStream_Release,
- IDirectMusicGraphObjectStream_GetClassID,
- IDirectMusicGraphObjectStream_IsDirty,
- IDirectMusicGraphObjectStream_Load,
- IDirectMusicGraphObjectStream_Save,
- IDirectMusicGraphObjectStream_GetSizeMax
-};
diff --git a/dlls/dmime/lyricstrack.c b/dlls/dmime/lyricstrack.c
index 11caeb2..0658f2e 100644
--- a/dlls/dmime/lyricstrack.c
+++ b/dlls/dmime/lyricstrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicLyricsTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmime_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
@@ -34,35 +26,36 @@
* IDirectMusicLyricsTrack implementation
*/
/* IDirectMusicLyricsTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicLyricsTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicLyricsTrack,iface);
+HRESULT WINAPI IDirectMusicLyricsTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicLyricsTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicLyricsTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicLyricsTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicLyricsTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicLyricsTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
+
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicLyricsTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicLyricsTrack,iface);
+ULONG WINAPI IDirectMusicLyricsTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicLyricsTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicLyricsTrack,iface);
+ULONG WINAPI IDirectMusicLyricsTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -71,269 +64,214 @@
return ref;
}
-/* IDirectMusicLyricsTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicLyricsTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicLyricsTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicLyricsTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicLyricsTrack_IUnknown_QueryInterface,
+ IDirectMusicLyricsTrack_IUnknown_AddRef,
+ IDirectMusicLyricsTrack_IUnknown_Release
+};
+/* IDirectMusicLyricsTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface);
+ return IDirectMusicLyricsTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface);
+ return IDirectMusicLyricsTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface);
+ return IDirectMusicLyricsTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
+{
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLyricsTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
+HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
{
- ICOM_THIS(IDirectMusicLyricsTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLyricsTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
+HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
{
- ICOM_THIS(IDirectMusicLyricsTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLyricsTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
{
- ICOM_THIS(IDirectMusicLyricsTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLyricsTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicLyricsTrack,iface);
-
+HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLyricsTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicLyricsTrack,iface);
-
+HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLyricsTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicLyricsTrack,iface);
+HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
/* didn't find any params */
-
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicLyricsTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicLyricsTrack,iface);
-
+HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLyricsTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicLyricsTrack,iface);
-
+HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLyricsTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicLyricsTrack,iface);
-
+HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicLyricsTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicLyricsTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicLyricsTrack,iface);
-
+HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLyricsTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicLyricsTrack,iface);
-
+HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLyricsTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicLyricsTrack,iface);
-
+HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLyricsTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicLyricsTrack,iface);
-
+HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLyricsTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicLyricsTrack,iface);
-
+HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicLyricsTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicLyricsTrack_Track_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicLyricsTrack_QueryInterface,
- IDirectMusicLyricsTrack_AddRef,
- IDirectMusicLyricsTrack_Release,
- IDirectMusicLyricsTrack_Init,
- IDirectMusicLyricsTrack_InitPlay,
- IDirectMusicLyricsTrack_EndPlay,
- IDirectMusicLyricsTrack_Play,
- IDirectMusicLyricsTrack_GetParam,
- IDirectMusicLyricsTrack_SetParam,
- IDirectMusicLyricsTrack_IsParamSupported,
- IDirectMusicLyricsTrack_AddNotificationType,
- IDirectMusicLyricsTrack_RemoveNotificationType,
- IDirectMusicLyricsTrack_Clone,
- IDirectMusicLyricsTrack_PlayEx,
- IDirectMusicLyricsTrack_GetParamEx,
- IDirectMusicLyricsTrack_SetParamEx,
- IDirectMusicLyricsTrack_Compose,
- IDirectMusicLyricsTrack_Join
+ IDirectMusicLyricsTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicLyricsTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicLyricsTrack_IDirectMusicTrack_Release,
+ IDirectMusicLyricsTrack_IDirectMusicTrack_Init,
+ IDirectMusicLyricsTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicLyricsTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicLyricsTrack_IDirectMusicTrack_Play,
+ IDirectMusicLyricsTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicLyricsTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicLyricsTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicLyricsTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicLyricsTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicLyricsTrack_IDirectMusicTrack_Clone,
+ IDirectMusicLyricsTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicLyricsTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicLyricsTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicLyricsTrack_IDirectMusicTrack_Compose,
+ IDirectMusicLyricsTrack_IDirectMusicTrack_Join
};
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicLyricsTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicLyricsTrack* track;
-
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicLyricsTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicLyricsTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicLyricsTrackStream));
- track->pStream->lpVtbl = &DirectMusicLyricsTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
- }
-
- WARN("No interface found\n");
- return E_NOINTERFACE;
+/* IDirectMusicLyricsTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, PersistStreamVtbl, iface);
+ return IDirectMusicLyricsTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicLyricsTrackStream implementation
- */
-/* IDirectMusicLyricsTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicLyricsTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicLyricsTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicLyricsTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
+ULONG WINAPI IDirectMusicLyricsTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, PersistStreamVtbl, iface);
+ return IDirectMusicLyricsTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicLyricsTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicLyricsTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
+ULONG WINAPI IDirectMusicLyricsTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicLyricsTrack, PersistStreamVtbl, iface);
+ return IDirectMusicLyricsTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicLyricsTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicLyricsTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicLyricsTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicLyricsTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
+HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
return E_NOTIMPL;
}
-/* IDirectMusicLyricsTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicLyricsTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
+HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicLyricsTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
+HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
FIXME(": Loading not implemented yet\n");
return S_OK;
}
-HRESULT WINAPI IDirectMusicLyricsTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
+HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicLyricsTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
+HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
return E_NOTIMPL;
}
-ICOM_VTABLE(IPersistStream) DirectMusicLyricsTrackStream_Vtbl =
-{
+ICOM_VTABLE(IPersistStream) DirectMusicLyricsTrack_PersistStream_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicLyricsTrackStream_QueryInterface,
- IDirectMusicLyricsTrackStream_AddRef,
- IDirectMusicLyricsTrackStream_Release,
- IDirectMusicLyricsTrackStream_GetClassID,
- IDirectMusicLyricsTrackStream_IsDirty,
- IDirectMusicLyricsTrackStream_Load,
- IDirectMusicLyricsTrackStream_Save,
- IDirectMusicLyricsTrackStream_GetSizeMax
+ IDirectMusicLyricsTrack_IPersistStream_QueryInterface,
+ IDirectMusicLyricsTrack_IPersistStream_AddRef,
+ IDirectMusicLyricsTrack_IPersistStream_Release,
+ IDirectMusicLyricsTrack_IPersistStream_GetClassID,
+ IDirectMusicLyricsTrack_IPersistStream_IsDirty,
+ IDirectMusicLyricsTrack_IPersistStream_Load,
+ IDirectMusicLyricsTrack_IPersistStream_Save,
+ IDirectMusicLyricsTrack_IPersistStream_GetSizeMax
};
+
+/* for ClassFactory */
+HRESULT WINAPI DMUSIC_CreateDirectMusicLyricsTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicLyricsTrack* track;
+
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicLyricsTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ track->UnknownVtbl = &DirectMusicLyricsTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicLyricsTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicLyricsTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicLyricsTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicLyricsTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
+}
diff --git a/dlls/dmime/markertrack.c b/dlls/dmime/markertrack.c
index 7985f13..593c00f 100644
--- a/dlls/dmime/markertrack.c
+++ b/dlls/dmime/markertrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicMarkerTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmime_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
@@ -34,19 +26,21 @@
* IDirectMusicMarkerTrack implementation
*/
/* IDirectMusicMarkerTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicMarkerTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicMarkerTrack,iface);
+HRESULT WINAPI IDirectMusicMarkerTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicMarkerTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicMarkerTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicMarkerTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicMarkerTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicMarkerTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
@@ -54,16 +48,14 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicMarkerTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicMarkerTrack,iface);
+ULONG WINAPI IDirectMusicMarkerTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicMarkerTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicMarkerTrack,iface);
+ULONG WINAPI IDirectMusicMarkerTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -72,273 +64,214 @@
return ref;
}
-/* IDirectMusicMarkerTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicMarkerTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicMarkerTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicMarkerTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicMarkerTrack_IUnknown_QueryInterface,
+ IDirectMusicMarkerTrack_IUnknown_AddRef,
+ IDirectMusicMarkerTrack_IUnknown_Release
+};
+/* IDirectMusicMarkerTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface);
+ return IDirectMusicMarkerTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface);
+ return IDirectMusicMarkerTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface);
+ return IDirectMusicMarkerTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMarkerTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicMarkerTrack,iface);
-
+HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMarkerTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
-{
- ICOM_THIS(IDirectMusicMarkerTrack,iface);
-
+HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMarkerTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicMarkerTrack,iface);
-
+HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMarkerTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicMarkerTrack,iface);
-
+HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMarkerTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicMarkerTrack,iface);
-
+HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMarkerTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicMarkerTrack,iface);
+HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
if (IsEqualGUID (rguidType, &GUID_Play_Marker)
|| IsEqualGUID (rguidType, &GUID_Valid_Start_Time)) {
TRACE("param supported\n");
return S_OK;
- }
-
+ }
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicMarkerTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicMarkerTrack,iface);
-
+HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMarkerTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicMarkerTrack,iface);
-
+HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMarkerTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicMarkerTrack,iface);
-
+HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicMarkerTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicMarkerTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicMarkerTrack,iface);
-
+HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMarkerTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicMarkerTrack,iface);
-
+HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMarkerTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicMarkerTrack,iface);
-
+HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMarkerTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicMarkerTrack,iface);
-
+HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMarkerTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicMarkerTrack,iface);
-
+HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicMarkerTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicMarkerTrack_Track_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicMarkerTrack_QueryInterface,
- IDirectMusicMarkerTrack_AddRef,
- IDirectMusicMarkerTrack_Release,
- IDirectMusicMarkerTrack_Init,
- IDirectMusicMarkerTrack_InitPlay,
- IDirectMusicMarkerTrack_EndPlay,
- IDirectMusicMarkerTrack_Play,
- IDirectMusicMarkerTrack_GetParam,
- IDirectMusicMarkerTrack_SetParam,
- IDirectMusicMarkerTrack_IsParamSupported,
- IDirectMusicMarkerTrack_AddNotificationType,
- IDirectMusicMarkerTrack_RemoveNotificationType,
- IDirectMusicMarkerTrack_Clone,
- IDirectMusicMarkerTrack_PlayEx,
- IDirectMusicMarkerTrack_GetParamEx,
- IDirectMusicMarkerTrack_SetParamEx,
- IDirectMusicMarkerTrack_Compose,
- IDirectMusicMarkerTrack_Join
+ IDirectMusicMarkerTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicMarkerTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicMarkerTrack_IDirectMusicTrack_Release,
+ IDirectMusicMarkerTrack_IDirectMusicTrack_Init,
+ IDirectMusicMarkerTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicMarkerTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicMarkerTrack_IDirectMusicTrack_Play,
+ IDirectMusicMarkerTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicMarkerTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicMarkerTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicMarkerTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicMarkerTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicMarkerTrack_IDirectMusicTrack_Clone,
+ IDirectMusicMarkerTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicMarkerTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicMarkerTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicMarkerTrack_IDirectMusicTrack_Compose,
+ IDirectMusicMarkerTrack_IDirectMusicTrack_Join
};
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicMarkerTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicMarkerTrack* track;
-
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicMarkerTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicMarkerTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicMarkerTrackStream));
- track->pStream->lpVtbl = &DirectMusicMarkerTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
+/* IDirectMusicMarkerTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, PersistStreamVtbl, iface);
+ return IDirectMusicMarkerTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicMarkerTrackStream implementation
- */
-/* IDirectMusicMarkerTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicMarkerTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicMarkerTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicMarkerTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
+ULONG WINAPI IDirectMusicMarkerTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, PersistStreamVtbl, iface);
+ return IDirectMusicMarkerTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicMarkerTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicMarkerTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
+ULONG WINAPI IDirectMusicMarkerTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicMarkerTrack, PersistStreamVtbl, iface);
+ return IDirectMusicMarkerTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicMarkerTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicMarkerTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicMarkerTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicMarkerTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
+HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
return E_NOTIMPL;
}
-/* IDirectMusicMarkerTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicMarkerTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
+HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicMarkerTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
+HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
FIXME(": Loading not implemented yet\n");
return S_OK;
}
-HRESULT WINAPI IDirectMusicMarkerTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
+HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicMarkerTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
+HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
return E_NOTIMPL;
}
-ICOM_VTABLE(IPersistStream) DirectMusicMarkerTrackStream_Vtbl =
-{
+ICOM_VTABLE(IPersistStream) DirectMusicMarkerTrack_PersistStream_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicMarkerTrackStream_QueryInterface,
- IDirectMusicMarkerTrackStream_AddRef,
- IDirectMusicMarkerTrackStream_Release,
- IDirectMusicMarkerTrackStream_GetClassID,
- IDirectMusicMarkerTrackStream_IsDirty,
- IDirectMusicMarkerTrackStream_Load,
- IDirectMusicMarkerTrackStream_Save,
- IDirectMusicMarkerTrackStream_GetSizeMax
+ IDirectMusicMarkerTrack_IPersistStream_QueryInterface,
+ IDirectMusicMarkerTrack_IPersistStream_AddRef,
+ IDirectMusicMarkerTrack_IPersistStream_Release,
+ IDirectMusicMarkerTrack_IPersistStream_GetClassID,
+ IDirectMusicMarkerTrack_IPersistStream_IsDirty,
+ IDirectMusicMarkerTrack_IPersistStream_Load,
+ IDirectMusicMarkerTrack_IPersistStream_Save,
+ IDirectMusicMarkerTrack_IPersistStream_GetSizeMax
};
+
+/* for ClassFactory */
+HRESULT WINAPI DMUSIC_CreateDirectMusicMarkerTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicMarkerTrack* track;
+
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicMarkerTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ track->UnknownVtbl = &DirectMusicMarkerTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicMarkerTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicMarkerTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicMarkerTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicMarkerTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
+}
diff --git a/dlls/dmime/paramcontroltrack.c b/dlls/dmime/paramcontroltrack.c
index ad00600..4d98154 100644
--- a/dlls/dmime/paramcontroltrack.c
+++ b/dlls/dmime/paramcontroltrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicParamControlTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmime_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
@@ -34,35 +26,36 @@
* IDirectMusicParamControlTrack implementation
*/
/* IDirectMusicParamControlTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicParamControlTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicParamControlTrack,iface);
+HRESULT WINAPI IDirectMusicParamControlTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicParamControlTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicParamControlTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicParamControlTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicParamControlTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicParamControlTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
+
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicParamControlTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicParamControlTrack,iface);
+ULONG WINAPI IDirectMusicParamControlTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicParamControlTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicParamControlTrack,iface);
+ULONG WINAPI IDirectMusicParamControlTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -71,268 +64,214 @@
return ref;
}
-/* IDirectMusicParamControlTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicParamControlTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicParamControlTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicParamControlTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicParamControlTrack_IUnknown_QueryInterface,
+ IDirectMusicParamControlTrack_IUnknown_AddRef,
+ IDirectMusicParamControlTrack_IUnknown_Release
+};
+/* IDirectMusicParamControlTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface);
+ return IDirectMusicParamControlTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface);
+ return IDirectMusicParamControlTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface);
+ return IDirectMusicParamControlTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
+{
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicParamControlTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
+HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
{
- ICOM_THIS(IDirectMusicParamControlTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicParamControlTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
+HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
{
- ICOM_THIS(IDirectMusicParamControlTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicParamControlTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
{
- ICOM_THIS(IDirectMusicParamControlTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicParamControlTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicParamControlTrack,iface);
-
+HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicParamControlTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicParamControlTrack,iface);
-
+HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicParamControlTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicParamControlTrack,iface);
+HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
/* didn't find any params */
-
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicParamControlTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicParamControlTrack,iface);
-
+HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicParamControlTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicParamControlTrack,iface);
-
+HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicParamControlTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicParamControlTrack,iface);
-
+HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicParamControlTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicParamControlTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicParamControlTrack,iface);
-
+HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicParamControlTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicParamControlTrack,iface);
-
+HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicParamControlTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicParamControlTrack,iface);
-
+HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicParamControlTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicParamControlTrack,iface);
-
+HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicParamControlTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicParamControlTrack,iface);
-
+HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicParamControlTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicParamControlTrack_Track_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicParamControlTrack_QueryInterface,
- IDirectMusicParamControlTrack_AddRef,
- IDirectMusicParamControlTrack_Release,
- IDirectMusicParamControlTrack_Init,
- IDirectMusicParamControlTrack_InitPlay,
- IDirectMusicParamControlTrack_EndPlay,
- IDirectMusicParamControlTrack_Play,
- IDirectMusicParamControlTrack_GetParam,
- IDirectMusicParamControlTrack_SetParam,
- IDirectMusicParamControlTrack_IsParamSupported,
- IDirectMusicParamControlTrack_AddNotificationType,
- IDirectMusicParamControlTrack_RemoveNotificationType,
- IDirectMusicParamControlTrack_Clone,
- IDirectMusicParamControlTrack_PlayEx,
- IDirectMusicParamControlTrack_GetParamEx,
- IDirectMusicParamControlTrack_SetParamEx,
- IDirectMusicParamControlTrack_Compose,
- IDirectMusicParamControlTrack_Join
+ IDirectMusicParamControlTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicParamControlTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicParamControlTrack_IDirectMusicTrack_Release,
+ IDirectMusicParamControlTrack_IDirectMusicTrack_Init,
+ IDirectMusicParamControlTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicParamControlTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicParamControlTrack_IDirectMusicTrack_Play,
+ IDirectMusicParamControlTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicParamControlTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicParamControlTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicParamControlTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicParamControlTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicParamControlTrack_IDirectMusicTrack_Clone,
+ IDirectMusicParamControlTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicParamControlTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicParamControlTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicParamControlTrack_IDirectMusicTrack_Compose,
+ IDirectMusicParamControlTrack_IDirectMusicTrack_Join
};
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicParamControlTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicParamControlTrack* track;
-
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicParamControlTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicParamControlTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicParamControlTrackStream));
- track->pStream->lpVtbl = &DirectMusicParamControlTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
+/* IDirectMusicParamControlTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, PersistStreamVtbl, iface);
+ return IDirectMusicParamControlTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicParamControlTrackStream implementation
- */
-/* IDirectMusicParamControlTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicParamControlTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicParamControlTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicParamControlTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
+ULONG WINAPI IDirectMusicParamControlTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, PersistStreamVtbl, iface);
+ return IDirectMusicParamControlTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicParamControlTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicParamControlTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
+ULONG WINAPI IDirectMusicParamControlTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicParamControlTrack, PersistStreamVtbl, iface);
+ return IDirectMusicParamControlTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicParamControlTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicParamControlTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicParamControlTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicParamControlTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
+HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
return E_NOTIMPL;
}
-/* IDirectMusicParamControlTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicParamControlTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
+HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicParamControlTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
+HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
FIXME(": Loading not implemented yet\n");
return S_OK;
}
-HRESULT WINAPI IDirectMusicParamControlTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
+HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicParamControlTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
+HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
return E_NOTIMPL;
}
-ICOM_VTABLE(IPersistStream) DirectMusicParamControlTrackStream_Vtbl =
-{
+ICOM_VTABLE(IPersistStream) DirectMusicParamControlTrack_PersistStream_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicParamControlTrackStream_QueryInterface,
- IDirectMusicParamControlTrackStream_AddRef,
- IDirectMusicParamControlTrackStream_Release,
- IDirectMusicParamControlTrackStream_GetClassID,
- IDirectMusicParamControlTrackStream_IsDirty,
- IDirectMusicParamControlTrackStream_Load,
- IDirectMusicParamControlTrackStream_Save,
- IDirectMusicParamControlTrackStream_GetSizeMax
+ IDirectMusicParamControlTrack_IPersistStream_QueryInterface,
+ IDirectMusicParamControlTrack_IPersistStream_AddRef,
+ IDirectMusicParamControlTrack_IPersistStream_Release,
+ IDirectMusicParamControlTrack_IPersistStream_GetClassID,
+ IDirectMusicParamControlTrack_IPersistStream_IsDirty,
+ IDirectMusicParamControlTrack_IPersistStream_Load,
+ IDirectMusicParamControlTrack_IPersistStream_Save,
+ IDirectMusicParamControlTrack_IPersistStream_GetSizeMax
};
+
+/* for ClassFactory */
+HRESULT WINAPI DMUSIC_CreateDirectMusicParamControlTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicParamControlTrack* track;
+
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicParamControlTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ track->UnknownVtbl = &DirectMusicParamControlTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicParamControlTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicParamControlTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicParamControlTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicParamControlTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
+}
diff --git a/dlls/dmime/patterntrack.c b/dlls/dmime/patterntrack.c
index 03fc1b4..e91c4ac 100644
--- a/dlls/dmime/patterntrack.c
+++ b/dlls/dmime/patterntrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicPatternTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,21 +17,12 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmime_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
/* IDirectMusicPatternTrack IUnknown parts follow: */
-HRESULT WINAPI IDirectMusicPatternTrackImpl_QueryInterface (LPDIRECTMUSICPATTERNTRACK iface, REFIID riid, LPVOID *ppobj)
-{
+HRESULT WINAPI IDirectMusicPatternTrackImpl_QueryInterface (LPDIRECTMUSICPATTERNTRACK iface, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IDirectMusicPatternTrackImpl,iface);
if (IsEqualIID (riid, &IID_IUnknown) ||
@@ -45,15 +36,13 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicPatternTrackImpl_AddRef (LPDIRECTMUSICPATTERNTRACK iface)
-{
+ULONG WINAPI IDirectMusicPatternTrackImpl_AddRef (LPDIRECTMUSICPATTERNTRACK iface) {
ICOM_THIS(IDirectMusicPatternTrackImpl,iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicPatternTrackImpl_Release (LPDIRECTMUSICPATTERNTRACK iface)
-{
+ULONG WINAPI IDirectMusicPatternTrackImpl_Release (LPDIRECTMUSICPATTERNTRACK iface) {
ICOM_THIS(IDirectMusicPatternTrackImpl,iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
@@ -64,35 +53,25 @@
}
/* IDirectMusicPatternTrack Interface follow: */
-HRESULT WINAPI IDirectMusicPatternTrackImpl_CreateSegment (LPDIRECTMUSICPATTERNTRACK iface, IDirectMusicStyle* pStyle, IDirectMusicSegment** ppSegment)
-{
+HRESULT WINAPI IDirectMusicPatternTrackImpl_CreateSegment (LPDIRECTMUSICPATTERNTRACK iface, IDirectMusicStyle* pStyle, IDirectMusicSegment** ppSegment) {
ICOM_THIS(IDirectMusicPatternTrackImpl,iface);
-
FIXME("(%p, %p, %p): stub\n", This, pStyle, ppSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPatternTrackImpl_SetVariation (LPDIRECTMUSICPATTERNTRACK iface, IDirectMusicSegmentState* pSegState, DWORD dwVariationFlags, DWORD dwPart)
-{
+HRESULT WINAPI IDirectMusicPatternTrackImpl_SetVariation (LPDIRECTMUSICPATTERNTRACK iface, IDirectMusicSegmentState* pSegState, DWORD dwVariationFlags, DWORD dwPart) {
ICOM_THIS(IDirectMusicPatternTrackImpl,iface);
-
FIXME("(%p, %p, %ld, %ld): stub\n", This, pSegState, dwVariationFlags, dwPart);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPatternTrackImpl_SetPatternByName (LPDIRECTMUSICPATTERNTRACK iface, IDirectMusicSegmentState* pSegState, WCHAR* wszName, IDirectMusicStyle* pStyle, DWORD dwPatternType, DWORD* pdwLength)
-{
+HRESULT WINAPI IDirectMusicPatternTrackImpl_SetPatternByName (LPDIRECTMUSICPATTERNTRACK iface, IDirectMusicSegmentState* pSegState, WCHAR* wszName, IDirectMusicStyle* pStyle, DWORD dwPatternType, DWORD* pdwLength) {
ICOM_THIS(IDirectMusicPatternTrackImpl,iface);
-
FIXME("(%p, %p, %p, %p, %ld, %p): stub\n", This, pSegState, wszName, pStyle, dwPatternType, pdwLength);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicPatternTrack) DirectMusicPatternTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicPatternTrack) DirectMusicPatternTrack_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
IDirectMusicPatternTrackImpl_QueryInterface,
IDirectMusicPatternTrackImpl_AddRef,
@@ -103,14 +82,16 @@
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicPatternTrack (LPCGUID lpcGUID, LPDIRECTMUSICPATTERNTRACK *ppDMPtrnTrack, LPUNKNOWN pUnkOuter)
-{
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicComposer))
- {
- FIXME("Not yet\n");
- return E_NOINTERFACE;
- }
+HRESULT WINAPI DMUSIC_CreateDirectMusicPatternTrackImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicPatternTrackImpl* track;
- WARN("No interface found\n");
- return E_NOINTERFACE;
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicPatternTrackImpl));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ track->lpVtbl = &DirectMusicPatternTrack_Vtbl;
+ track->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicPatternTrackImpl_QueryInterface ((LPDIRECTMUSICPATTERNTRACK)track, lpcGUID, ppobj);
}
diff --git a/dlls/dmime/performance.c b/dlls/dmime/performance.c
index bbb075e..7e01a9a 100644
--- a/dlls/dmime/performance.c
+++ b/dlls/dmime/performance.c
@@ -1,6 +1,6 @@
/* IDirectMusicPerformance Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,21 +17,12 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmime_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
/* IDirectMusicPerformance8 IUnknown part: */
-HRESULT WINAPI IDirectMusicPerformance8Impl_QueryInterface (LPDIRECTMUSICPERFORMANCE8 iface, REFIID riid, LPVOID *ppobj)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_QueryInterface (LPDIRECTMUSICPERFORMANCE8 iface, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
if (IsEqualIID (riid, &IID_IUnknown) ||
@@ -46,15 +37,13 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicPerformance8Impl_AddRef (LPDIRECTMUSICPERFORMANCE8 iface)
-{
+ULONG WINAPI IDirectMusicPerformance8Impl_AddRef (LPDIRECTMUSICPERFORMANCE8 iface) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicPerformance8Impl_Release (LPDIRECTMUSICPERFORMANCE8 iface)
-{
+ULONG WINAPI IDirectMusicPerformance8Impl_Release (LPDIRECTMUSICPERFORMANCE8 iface) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
@@ -64,9 +53,8 @@
return ref;
}
-/* IDirectMusicPerformance8 IDirectMusicPerformance Interface part: */
-HRESULT WINAPI IDirectMusicPerformance8Impl_Init (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusic** ppDirectMusic, LPDIRECTSOUND pDirectSound, HWND hWnd)
-{
+/* IDirectMusicPerformanceImpl IDirectMusicPerformance Interface part: */
+HRESULT WINAPI IDirectMusicPerformance8Impl_Init (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusic** ppDirectMusic, LPDIRECTSOUND pDirectSound, HWND hWnd) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
FIXME("(iface = %p, dmusic = %p, dsound = %p, hwnd = %p)\n", This, ppDirectMusic, pDirectSound, hWnd);
@@ -109,220 +97,155 @@
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_PlaySegment (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicSegment* pSegment, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState** ppSegmentState)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_PlaySegment (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicSegment* pSegment, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState** ppSegmentState) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p, %ld, %lli, %p): stub\n", This, pSegment, dwFlags, i64StartTime, ppSegmentState);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_Stop (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicSegment* pSegment, IDirectMusicSegmentState* pSegmentState, MUSIC_TIME mtTime, DWORD dwFlags)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_Stop (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicSegment* pSegment, IDirectMusicSegmentState* pSegmentState, MUSIC_TIME mtTime, DWORD dwFlags) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p, %p, %ld, %ld): stub\n", This, pSegment, pSegmentState, mtTime, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_GetSegmentState (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicSegmentState** ppSegmentState, MUSIC_TIME mtTime)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetSegmentState (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicSegmentState** ppSegmentState, MUSIC_TIME mtTime) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p,%p, %ld): stub\n", This, ppSegmentState, mtTime);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_SetPrepareTime (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwMilliSeconds)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_SetPrepareTime (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwMilliSeconds) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %ld): stub\n", This, dwMilliSeconds);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_GetPrepareTime (LPDIRECTMUSICPERFORMANCE8 iface, DWORD* pdwMilliSeconds)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetPrepareTime (LPDIRECTMUSICPERFORMANCE8 iface, DWORD* pdwMilliSeconds) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pdwMilliSeconds);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_SetBumperLength (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwMilliSeconds)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_SetBumperLength (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwMilliSeconds) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %ld): stub\n", This, dwMilliSeconds);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_GetBumperLength (LPDIRECTMUSICPERFORMANCE8 iface, DWORD* pdwMilliSeconds)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetBumperLength (LPDIRECTMUSICPERFORMANCE8 iface, DWORD* pdwMilliSeconds) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pdwMilliSeconds);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_SendPMsg (LPDIRECTMUSICPERFORMANCE8 iface, DMUS_PMSG* pPMSG)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_SendPMsg (LPDIRECTMUSICPERFORMANCE8 iface, DMUS_PMSG* pPMSG) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pPMSG);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_MusicToReferenceTime (LPDIRECTMUSICPERFORMANCE8 iface, MUSIC_TIME mtTime, REFERENCE_TIME* prtTime)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_MusicToReferenceTime (LPDIRECTMUSICPERFORMANCE8 iface, MUSIC_TIME mtTime, REFERENCE_TIME* prtTime) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %ld, %p): stub\n", This, mtTime, prtTime);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_ReferenceToMusicTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME rtTime, MUSIC_TIME* pmtTime)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_ReferenceToMusicTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME rtTime, MUSIC_TIME* pmtTime) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %lli, %p): stub\n", This, rtTime, pmtTime);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_IsPlaying (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicSegment* pSegment, IDirectMusicSegmentState* pSegState)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_IsPlaying (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicSegment* pSegment, IDirectMusicSegmentState* pSegState) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p, %p): stub\n", This, pSegment, pSegState);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_GetTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME* prtNow, MUSIC_TIME* pmtNow)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME* prtNow, MUSIC_TIME* pmtNow) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p, %p): stub\n", This, prtNow, pmtNow);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_AllocPMsg (LPDIRECTMUSICPERFORMANCE8 iface, ULONG cb, DMUS_PMSG** ppPMSG)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_AllocPMsg (LPDIRECTMUSICPERFORMANCE8 iface, ULONG cb, DMUS_PMSG** ppPMSG) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %ld, %p): stub\n", This, cb, ppPMSG);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_FreePMsg (LPDIRECTMUSICPERFORMANCE8 iface, DMUS_PMSG* pPMSG)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_FreePMsg (LPDIRECTMUSICPERFORMANCE8 iface, DMUS_PMSG* pPMSG) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pPMSG);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_GetGraph (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicGraph** ppGraph)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetGraph (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicGraph** ppGraph) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p): to check\n", This, ppGraph);
-
if (NULL != This->pToolGraph) {
*ppGraph = (LPDIRECTMUSICGRAPH) This->pToolGraph;
- IDirectMusicGraphImpl_AddRef((LPDIRECTMUSICGRAPH) *ppGraph);
+ IDirectMusicGraph_AddRef((LPDIRECTMUSICGRAPH) *ppGraph);
}
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_SetGraph (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicGraph* pGraph)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_SetGraph (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicGraph* pGraph) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
FIXME("(%p, %p): to check\n", This, pGraph);
if (NULL != This->pToolGraph) {
/* Todo clean buffers and tools before */
- IDirectMusicGraphImpl_Release((LPDIRECTMUSICGRAPH) This->pToolGraph);
+ IDirectMusicGraph_Release((LPDIRECTMUSICGRAPH) This->pToolGraph);
}
This->pToolGraph = pGraph;
if (NULL != This->pToolGraph) {
- IDirectMusicGraphImpl_AddRef((LPDIRECTMUSICGRAPH) This->pToolGraph);
+ IDirectMusicGraph_AddRef((LPDIRECTMUSICGRAPH) This->pToolGraph);
}
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_SetNotificationHandle (LPDIRECTMUSICPERFORMANCE8 iface, HANDLE hNotification, REFERENCE_TIME rtMinimum)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_SetNotificationHandle (LPDIRECTMUSICPERFORMANCE8 iface, HANDLE hNotification, REFERENCE_TIME rtMinimum) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p, %lli): stub\n", This, hNotification, rtMinimum);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_GetNotificationPMsg (LPDIRECTMUSICPERFORMANCE8 iface, DMUS_NOTIFICATION_PMSG** ppNotificationPMsg)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetNotificationPMsg (LPDIRECTMUSICPERFORMANCE8 iface, DMUS_NOTIFICATION_PMSG** ppNotificationPMsg) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, ppNotificationPMsg);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_AddNotificationType (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidNotificationType)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_AddNotificationType (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidNotificationType) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_RemoveNotificationType (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidNotificationType)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_RemoveNotificationType (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidNotificationType) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_AddPort (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicPort* pPort)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_AddPort (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicPort* pPort) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pPort);
IDirectMusicPort_AddRef (pPort);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_RemovePort (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicPort* pPort)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_RemovePort (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicPort* pPort) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pPort);
IDirectMusicPort_Release (pPort);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_AssignPChannelBlock (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwBlockNum, IDirectMusicPort* pPort, DWORD dwGroup)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_AssignPChannelBlock (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwBlockNum, IDirectMusicPort* pPort, DWORD dwGroup) {
int i, j, range /* min value in range */;
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
@@ -341,8 +264,7 @@
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_AssignPChannel (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwPChannel, IDirectMusicPort* pPort, DWORD dwGroup, DWORD dwMChannel)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_AssignPChannel (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwPChannel, IDirectMusicPort* pPort, DWORD dwGroup, DWORD dwMChannel) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
TRACE("(%p, %ld, %p, %ld, %ld)\n", This, dwPChannel, pPort, dwGroup, dwMChannel);
@@ -353,53 +275,37 @@
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_PChannelInfo (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwPChannel, IDirectMusicPort** ppPort, DWORD* pdwGroup, DWORD* pdwMChannel)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_PChannelInfo (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwPChannel, IDirectMusicPort** ppPort, DWORD* pdwGroup, DWORD* pdwMChannel) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %ld, %p, %p, %p): stub\n", This, dwPChannel, ppPort, pdwGroup, pdwMChannel);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_DownloadInstrument (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicInstrument* pInst, DWORD dwPChannel, IDirectMusicDownloadedInstrument** ppDownInst, DMUS_NOTERANGE* pNoteRanges, DWORD dwNumNoteRanges, IDirectMusicPort** ppPort, DWORD* pdwGroup, DWORD* pdwMChannel)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_DownloadInstrument (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicInstrument* pInst, DWORD dwPChannel, IDirectMusicDownloadedInstrument** ppDownInst, DMUS_NOTERANGE* pNoteRanges, DWORD dwNumNoteRanges, IDirectMusicPort** ppPort, DWORD* pdwGroup, DWORD* pdwMChannel) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p, %ld, %p, %p, %ld, %p, %p, %p): stub\n", This, pInst, dwPChannel, ppDownInst, pNoteRanges, dwNumNoteRanges, ppPort, pdwGroup, pdwMChannel);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_Invalidate (LPDIRECTMUSICPERFORMANCE8 iface, MUSIC_TIME mtTime, DWORD dwFlags)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_Invalidate (LPDIRECTMUSICPERFORMANCE8 iface, MUSIC_TIME mtTime, DWORD dwFlags) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %ld, %ld): stub\n", This, mtTime, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_GetParam (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetParam (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %s, %ld, %ld, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), dwGroupBits, dwIndex, mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_SetParam (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void* pParam)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_SetParam (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void* pParam) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %s, %ld, %ld, %ld, %p): stub\n", This, debugstr_guid(rguidType), dwGroupBits, dwIndex, mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_GetGlobalParam (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, void* pParam, DWORD dwSize)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetGlobalParam (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, void* pParam, DWORD dwSize) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
TRACE("(%p, %s, %p, %ld): stub\n", This, debugstr_guid(rguidType), pParam, dwSize);
@@ -416,8 +322,7 @@
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_SetGlobalParam (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, void* pParam, DWORD dwSize)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_SetGlobalParam (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, void* pParam, DWORD dwSize) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
TRACE("(%p, %s, %p, %ld)\n", This, debugstr_guid(rguidType), pParam, dwSize);
@@ -442,84 +347,57 @@
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_GetLatencyTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME* prtTime)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetLatencyTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME* prtTime) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, prtTime);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_GetQueueTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME* prtTime)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetQueueTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME* prtTime) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, prtTime);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_AdjustTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME rtAmount)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_AdjustTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME rtAmount) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %lli): stub\n", This, rtAmount);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_CloseDown (LPDIRECTMUSICPERFORMANCE8 iface)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_CloseDown (LPDIRECTMUSICPERFORMANCE8 iface) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p): stub\n", This);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_GetResolvedTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME rtTime, REFERENCE_TIME* prtResolved, DWORD dwTimeResolveFlags)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetResolvedTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME rtTime, REFERENCE_TIME* prtResolved, DWORD dwTimeResolveFlags) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %lli, %p, %ld): stub\n", This, rtTime, prtResolved, dwTimeResolveFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_MIDIToMusic (LPDIRECTMUSICPERFORMANCE8 iface, BYTE bMIDIValue, DMUS_CHORD_KEY* pChord, BYTE bPlayMode, BYTE bChordLevel, WORD* pwMusicValue)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_MIDIToMusic (LPDIRECTMUSICPERFORMANCE8 iface, BYTE bMIDIValue, DMUS_CHORD_KEY* pChord, BYTE bPlayMode, BYTE bChordLevel, WORD* pwMusicValue) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %d, %p, %d, %d, %p): stub\n", This, bMIDIValue, pChord, bPlayMode, bChordLevel, pwMusicValue);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_MusicToMIDI (LPDIRECTMUSICPERFORMANCE8 iface, WORD wMusicValue, DMUS_CHORD_KEY* pChord, BYTE bPlayMode, BYTE bChordLevel, BYTE* pbMIDIValue)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_MusicToMIDI (LPDIRECTMUSICPERFORMANCE8 iface, WORD wMusicValue, DMUS_CHORD_KEY* pChord, BYTE bPlayMode, BYTE bChordLevel, BYTE* pbMIDIValue) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %d, %p, %d, %d, %p): stub\n", This, wMusicValue, pChord, bPlayMode, bChordLevel, pbMIDIValue);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_TimeToRhythm (LPDIRECTMUSICPERFORMANCE8 iface, MUSIC_TIME mtTime, DMUS_TIMESIGNATURE* pTimeSig, WORD* pwMeasure, BYTE* pbBeat, BYTE* pbGrid, short* pnOffset)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_TimeToRhythm (LPDIRECTMUSICPERFORMANCE8 iface, MUSIC_TIME mtTime, DMUS_TIMESIGNATURE* pTimeSig, WORD* pwMeasure, BYTE* pbBeat, BYTE* pbGrid, short* pnOffset) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %ld, %p, %p, %p, %p, %p): stub\n", This, mtTime, pTimeSig, pwMeasure, pbBeat, pbGrid, pnOffset);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8Impl_RhythmToTime (LPDIRECTMUSICPERFORMANCE8 iface, WORD wMeasure, BYTE bBeat, BYTE bGrid, short nOffset, DMUS_TIMESIGNATURE* pTimeSig, MUSIC_TIME* pmtTime)
-{
+HRESULT WINAPI IDirectMusicPerformance8Impl_RhythmToTime (LPDIRECTMUSICPERFORMANCE8 iface, WORD wMeasure, BYTE bBeat, BYTE bGrid, short nOffset, DMUS_TIMESIGNATURE* pTimeSig, MUSIC_TIME* pmtTime) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %d, %d, %d, %i, %p, %p): stub\n", This, wMeasure, bBeat, bGrid, nOffset, pTimeSig, pmtTime);
-
return S_OK;
}
@@ -531,8 +409,7 @@
DWORD dwDefaultPathType,
DWORD dwPChannelCount,
DWORD dwFlags,
- DMUS_AUDIOPARAMS* pParams)
-{
+ DMUS_AUDIOPARAMS* pParams) {
IDirectSound* dsound;
HRESULT hr = S_OK;
@@ -579,47 +456,34 @@
return hr;
}
-HRESULT WINAPI IDirectMusicPerformance8ImplPlaySegmentEx (LPDIRECTMUSICPERFORMANCE8 iface, IUnknown* pSource, WCHAR* pwzSegmentName, IUnknown* pTransition, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState** ppSegmentState, IUnknown* pFrom, IUnknown* pAudioPath)
-{
+HRESULT WINAPI IDirectMusicPerformance8ImplPlaySegmentEx (LPDIRECTMUSICPERFORMANCE8 iface, IUnknown* pSource, WCHAR* pwzSegmentName, IUnknown* pTransition, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState** ppSegmentState, IUnknown* pFrom, IUnknown* pAudioPath) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p, %p, %p, %ld, %lli, %p, %p, %p): stub\n", This, pSource, pwzSegmentName, pTransition, dwFlags, i64StartTime, ppSegmentState, pFrom, pAudioPath);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8ImplStopEx (LPDIRECTMUSICPERFORMANCE8 iface, IUnknown* pObjectToStop, __int64 i64StopTime, DWORD dwFlags)
-{
+HRESULT WINAPI IDirectMusicPerformance8ImplStopEx (LPDIRECTMUSICPERFORMANCE8 iface, IUnknown* pObjectToStop, __int64 i64StopTime, DWORD dwFlags) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p, %lli, %ld): stub\n", This, pObjectToStop, i64StopTime, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8ImplClonePMsg (LPDIRECTMUSICPERFORMANCE8 iface, DMUS_PMSG* pSourcePMSG, DMUS_PMSG** ppCopyPMSG)
-{
+HRESULT WINAPI IDirectMusicPerformance8ImplClonePMsg (LPDIRECTMUSICPERFORMANCE8 iface, DMUS_PMSG* pSourcePMSG, DMUS_PMSG** ppCopyPMSG) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p, %p): stub\n", This, pSourcePMSG, ppCopyPMSG);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8ImplCreateAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, IUnknown* pSourceConfig, BOOL fActivate, IDirectMusicAudioPath** ppNewPath)
-{
+HRESULT WINAPI IDirectMusicPerformance8ImplCreateAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, IUnknown* pSourceConfig, BOOL fActivate, IDirectMusicAudioPath** ppNewPath) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
-
FIXME("(%p, %p, %d, %p): stub\n", This, pSourceConfig, fActivate, ppNewPath);
-
return S_OK;
}
/**
* see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directX/htm/standardaudiopaths.asp
*/
-HRESULT WINAPI IDirectMusicPerformance8ImplCreateStandardAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwType, DWORD dwPChannelCount, BOOL fActivate, IDirectMusicAudioPath** ppNewPath)
-{
+HRESULT WINAPI IDirectMusicPerformance8ImplCreateStandardAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwType, DWORD dwPChannelCount, BOOL fActivate, IDirectMusicAudioPath** ppNewPath) {
IDirectMusicAudioPathImpl *default_path;
DSBUFFERDESC desc;
WAVEFORMATEX format;
@@ -633,13 +497,8 @@
if (NULL == ppNewPath) {
return E_POINTER;
}
- default_path = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicAudioPathImpl));
- if (NULL == default_path) {
- *ppNewPath = (LPDIRECTMUSICAUDIOPATH) NULL;
- return E_OUTOFMEMORY;
- }
- default_path->lpVtbl = &DirectMusicAudioPath_Vtbl;
- default_path->ref = 1;
+
+ DMUSIC_CreateDirectMusicAudioPathImpl (&IID_IDirectMusicAudioPath, (LPVOID*)&default_path, NULL);
default_path->pPerf = (IDirectMusicPerformance8*) This;
/* Secondary buffer description */
@@ -712,42 +571,39 @@
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8ImplSetDefaultAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicAudioPath* pAudioPath)
-{
+HRESULT WINAPI IDirectMusicPerformance8ImplSetDefaultAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicAudioPath* pAudioPath) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
FIXME("(%p, %p): semi-stub\n", This, pAudioPath);
if (NULL != This->pDefaultPath) {
- IDirectMusicAudioPathImpl_Release((LPDIRECTMUSICAUDIOPATH) This->pDefaultPath);
+ IDirectMusicAudioPath_Release((LPDIRECTMUSICAUDIOPATH) This->pDefaultPath);
((IDirectMusicAudioPathImpl*) This->pDefaultPath)->pPerf = NULL;
This->pDefaultPath = NULL;
}
This->pDefaultPath = pAudioPath;
if (NULL != This->pDefaultPath) {
- IDirectMusicAudioPathImpl_AddRef((LPDIRECTMUSICAUDIOPATH) This->pDefaultPath);
+ IDirectMusicAudioPath_AddRef((LPDIRECTMUSICAUDIOPATH) This->pDefaultPath);
((IDirectMusicAudioPathImpl*) This->pDefaultPath)->pPerf = (IDirectMusicPerformance8*) This;
}
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8ImplGetDefaultAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicAudioPath** ppAudioPath)
-{
+HRESULT WINAPI IDirectMusicPerformance8ImplGetDefaultAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicAudioPath** ppAudioPath) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
FIXME("(%p, %p): semi-stub\n", This, ppAudioPath);
if (NULL != This->pDefaultPath) {
*ppAudioPath = (LPDIRECTMUSICAUDIOPATH) This->pDefaultPath;
- IDirectMusicAudioPathImpl_AddRef(*ppAudioPath);
+ IDirectMusicAudioPath_AddRef(*ppAudioPath);
} else {
*ppAudioPath = NULL;
}
return S_OK;
}
-HRESULT WINAPI IDirectMusicPerformance8ImplGetParamEx (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, DWORD dwTrackID, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
+HRESULT WINAPI IDirectMusicPerformance8ImplGetParamEx (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, DWORD dwTrackID, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
FIXME("(%p, %s, %ld, %ld, %ld, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), dwTrackID, dwGroupBits, dwIndex, mtTime, pmtNext, pParam);
@@ -755,8 +611,7 @@
return S_OK;
}
-ICOM_VTABLE(IDirectMusicPerformance8) DirectMusicPerformance8_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicPerformance8) DirectMusicPerformance8_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
IDirectMusicPerformance8Impl_QueryInterface,
IDirectMusicPerformance8Impl_AddRef,
@@ -814,29 +669,21 @@
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicPerformance (LPCGUID lpcGUID, LPDIRECTMUSICPERFORMANCE8 *ppDMPerf, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicPerformance8Impl *pPerf;
+HRESULT WINAPI DMUSIC_CreateDirectMusicPerformanceImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicPerformance8Impl *obj;
- TRACE("(%p,%p,%p)\n",lpcGUID, ppDMPerf, pUnkOuter);
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicPerformance) ||
- IsEqualIID (lpcGUID, &IID_IDirectMusicPerformance8)) {
- pPerf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicPerformance8Impl));
- if (NULL == pPerf)
- {
- *ppDMPerf = (LPDIRECTMUSICPERFORMANCE8)NULL;
- return E_OUTOFMEMORY;
- }
- pPerf->lpVtbl = &DirectMusicPerformance8_Vtbl;
- pPerf->ref = 1;
- pPerf->pDirectMusic = NULL;
- pPerf->pDirectSound = NULL;
- pPerf->pDefaultPath = NULL;
-
- *ppDMPerf = (LPDIRECTMUSICPERFORMANCE8) pPerf;
- return S_OK;
+ TRACE("(%p,%p,%p)\n", lpcGUID, ppobj, pUnkOuter);
+
+ obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicPerformance8Impl));
+ if (NULL == obj) {
+ *ppobj = (LPDIRECTMUSICPERFORMANCE8)NULL;
+ return E_OUTOFMEMORY;
}
- WARN("No interface found\n");
+ obj->lpVtbl = &DirectMusicPerformance8_Vtbl;
+ obj->ref = 1;
+ obj->pDirectMusic = NULL;
+ obj->pDirectSound = NULL;
+ obj->pDefaultPath = NULL;
- return E_NOINTERFACE;
+ return IDirectMusicPerformance8Impl_QueryInterface ((LPDIRECTMUSICPERFORMANCE8)obj, lpcGUID, ppobj);
}
diff --git a/dlls/dmime/regsvr.c b/dlls/dmime/regsvr.c
index e5e8061..31cf18e 100644
--- a/dlls/dmime/regsvr.c
+++ b/dlls/dmime/regsvr.c
@@ -18,21 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include <stdarg.h>
-#include <string.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winreg.h"
-#include "winerror.h"
-
-#include "dmusics.h"
-#include "dmusici.h"
-#include "dmplugin.h"
-
-#include "wine/debug.h"
+#include "dmime_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
@@ -44,8 +30,7 @@
/***********************************************************************
* interface for self-registering
*/
-struct regsvr_interface
-{
+struct regsvr_interface {
IID const *iid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
IID const *base_iid; /* can be NULL to omit */
@@ -57,8 +42,7 @@
static HRESULT register_interfaces(struct regsvr_interface const *list);
static HRESULT unregister_interfaces(struct regsvr_interface const *list);
-struct regsvr_coclass
-{
+struct regsvr_coclass {
CLSID const *clsid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
LPCSTR ips; /* can be NULL to omit */
@@ -124,8 +108,7 @@
/***********************************************************************
* register_interfaces
*/
-static HRESULT register_interfaces(struct regsvr_interface const *list)
-{
+static HRESULT register_interfaces(struct regsvr_interface const *list) {
LONG res = ERROR_SUCCESS;
HKEY interface_key;
@@ -194,8 +177,7 @@
/***********************************************************************
* unregister_interfaces
*/
-static HRESULT unregister_interfaces(struct regsvr_interface const *list)
-{
+static HRESULT unregister_interfaces(struct regsvr_interface const *list) {
LONG res = ERROR_SUCCESS;
HKEY interface_key;
@@ -219,8 +201,7 @@
/***********************************************************************
* register_coclasses
*/
-static HRESULT register_coclasses(struct regsvr_coclass const *list)
-{
+static HRESULT register_coclasses(struct regsvr_coclass const *list) {
LONG res = ERROR_SUCCESS;
HKEY coclass_key;
@@ -301,8 +282,7 @@
/***********************************************************************
* unregister_coclasses
*/
-static HRESULT unregister_coclasses(struct regsvr_coclass const *list)
-{
+static HRESULT unregister_coclasses(struct regsvr_coclass const *list) {
LONG res = ERROR_SUCCESS;
HKEY coclass_key;
@@ -338,8 +318,7 @@
/***********************************************************************
* regsvr_key_guid
*/
-static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid)
-{
+static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid) {
WCHAR buf[39];
StringFromGUID2(guid, buf, 39);
@@ -352,8 +331,7 @@
static LONG register_key_defvalueW(
HKEY base,
WCHAR const *name,
- WCHAR const *value)
-{
+ WCHAR const *value) {
LONG res;
HKEY key;
@@ -372,8 +350,7 @@
static LONG register_key_defvalueA(
HKEY base,
WCHAR const *name,
- char const *value)
-{
+ char const *value) {
LONG res;
HKEY key;
@@ -394,8 +371,7 @@
char const *progid,
char const *curver_progid,
char const *name,
- char const *extra)
-{
+ char const *extra) {
LONG res;
HKEY progid_key;
@@ -439,8 +415,7 @@
/***********************************************************************
* recursive_delete_key
*/
-static LONG recursive_delete_key(HKEY key)
-{
+static LONG recursive_delete_key(HKEY key) {
LONG res;
WCHAR subkey_name[MAX_PATH];
DWORD cName;
@@ -471,8 +446,7 @@
/***********************************************************************
* recursive_delete_keyA
*/
-static LONG recursive_delete_keyA(HKEY base, char const *name)
-{
+static LONG recursive_delete_keyA(HKEY base, char const *name) {
LONG res;
HKEY key;
@@ -487,8 +461,7 @@
/***********************************************************************
* recursive_delete_keyW
*/
-static LONG recursive_delete_keyW(HKEY base, WCHAR const *name)
-{
+static LONG recursive_delete_keyW(HKEY base, WCHAR const *name) {
LONG res;
HKEY key;
@@ -592,14 +565,6 @@
"Microsoft.DirectMusicLyricsTrack.1",
"Microsoft.DirectMusicLyricsTrack"
},
- { &CLSID_DirectMusicSong,
- "DirectMusicSong",
- NULL,
- "dmime.dll",
- "Both",
- "Microsoft.DirectMusicSong.1",
- "Microsoft.DirectMusicSong"
- },
{ &CLSID_DirectMusicSegTriggerTrack,
"DirectMusicSegTriggerTrack",
NULL,
@@ -638,8 +603,7 @@
/***********************************************************************
* DllRegisterServer (DMIME.3)
*/
-HRESULT WINAPI DMIME_DllRegisterServer(void)
-{
+HRESULT WINAPI DMIME_DllRegisterServer(void) {
HRESULT hr;
TRACE("\n");
@@ -653,8 +617,7 @@
/***********************************************************************
* DllUnregisterServer (DMIME.4)
*/
-HRESULT WINAPI DMIME_DllUnregisterServer(void)
-{
+HRESULT WINAPI DMIME_DllUnregisterServer(void) {
HRESULT hr;
TRACE("\n");
diff --git a/dlls/dmime/segment.c b/dlls/dmime/segment.c
index 39d6326..8f463b2 100644
--- a/dlls/dmime/segment.c
+++ b/dlls/dmime/segment.c
@@ -1,6 +1,6 @@
/* IDirectMusicSegment8 Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,32 +17,35 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmime_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
WINE_DECLARE_DEBUG_CHANNEL(dmfile);
/*****************************************************************************
- * IDirectMusicSegment8Impl implementation
+ * IDirectMusicSegmentImpl implementation
*/
-/* IDirectMusicSegment8 IUnknown part: */
-HRESULT WINAPI IDirectMusicSegment8Impl_QueryInterface (LPDIRECTMUSICSEGMENT8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicSegment) ||
- IsEqualIID (riid, &IID_IDirectMusicSegment8)) {
- IDirectMusicSegment8Impl_AddRef(iface);
- *ppobj = This;
+/* IDirectMusicSegment IUnknown part: */
+HRESULT WINAPI IDirectMusicSegment8Impl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, UnknownVtbl, iface);
+
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPVOID)&This->UnknownVtbl;
+ IDirectMusicSegment8Impl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicSegment)
+ || IsEqualIID (riid, &IID_IDirectMusicSegment2)
+ || IsEqualIID (riid, &IID_IDirectMusicSegment8)) {
+ *ppobj = (LPVOID)&This->SegmentVtbl;
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_AddRef ((LPDIRECTMUSICSEGMENT8)&This->SegmentVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
+ *ppobj = (LPVOID)&This->ObjectVtbl;
+ IDirectMusicSegment8Impl_IDirectMusicObject_AddRef ((LPDIRECTMUSICOBJECT)&This->ObjectVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IPersistStream)) {
+ *ppobj = (LPVOID)&This->PersistStreamVtbl;
+ IDirectMusicSegment8Impl_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
@@ -50,16 +53,14 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicSegment8Impl_AddRef (LPDIRECTMUSICSEGMENT8 iface)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
+ULONG WINAPI IDirectMusicSegment8Impl_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicSegment8Impl_Release (LPDIRECTMUSICSEGMENT8 iface)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
+ULONG WINAPI IDirectMusicSegment8Impl_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -68,542 +69,521 @@
return ref;
}
-/* IDirectMusicSegment8 IDirectMusicSegment part: */
-HRESULT WINAPI IDirectMusicSegment8Impl_GetLength (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME* pmtLength)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
+ICOM_VTABLE(IUnknown) DirectMusicSegment8_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicSegment8Impl_IUnknown_QueryInterface,
+ IDirectMusicSegment8Impl_IUnknown_AddRef,
+ IDirectMusicSegment8Impl_IUnknown_Release
+};
- TRACE("(%p, %p)\n", This, pmtLength);
- *pmtLength = This->segHeader.mtLength;
+/* IDirectMusicSegmentImpl IDirectMusicSegment part: */
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_QueryInterface (LPDIRECTMUSICSEGMENT8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
+ return IDirectMusicSegment8Impl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+ULONG WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_AddRef (LPDIRECTMUSICSEGMENT8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
+ return IDirectMusicSegment8Impl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_Release (LPDIRECTMUSICSEGMENT8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
+ return IDirectMusicSegment8Impl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetLength (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME* pmtLength) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
+ FIXME("(%p, %p): stub\n", This, pmtLength);
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_SetLength (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtLength)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
- TRACE("(%p, %ld)\n", This, mtLength);
- This->segHeader.mtLength = mtLength;
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_SetLength (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtLength) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
+ FIXME("(%p, %ld): stub\n", This, mtLength);
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_GetRepeats (LPDIRECTMUSICSEGMENT8 iface, DWORD* pdwRepeats)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
- TRACE("(%p, %p)\n", This, pdwRepeats);
- *pdwRepeats = This->segHeader.dwRepeats;
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetRepeats (LPDIRECTMUSICSEGMENT8 iface, DWORD* pdwRepeats) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
+ FIXME("(%p, %p): stub\n", This, pdwRepeats);
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_SetRepeats (LPDIRECTMUSICSEGMENT8 iface, DWORD dwRepeats)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
- TRACE("(%p, %ld)\n", This, dwRepeats);
- This->segHeader.dwRepeats = dwRepeats;
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_SetRepeats (LPDIRECTMUSICSEGMENT8 iface, DWORD dwRepeats) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
+ FIXME("(%p, %ld): stub\n", This, dwRepeats);
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_GetDefaultResolution (LPDIRECTMUSICSEGMENT8 iface, DWORD* pdwResolution)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
- TRACE("(%p, %p)\n", This, pdwResolution);
- *pdwResolution = This->segHeader.dwResolution;
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetDefaultResolution (LPDIRECTMUSICSEGMENT8 iface, DWORD* pdwResolution) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
+ FIXME("(%p, %p): stub\n", This, pdwResolution);
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_SetDefaultResolution (LPDIRECTMUSICSEGMENT8 iface, DWORD dwResolution)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
- TRACE("(%p, %ld)\n", This, dwResolution);
- This->segHeader.dwResolution = dwResolution;
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_SetDefaultResolution (LPDIRECTMUSICSEGMENT8 iface, DWORD dwResolution) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
+ FIXME("(%p, %ld): stub\n", This, dwResolution);
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_GetTrack (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetTrack (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
FIXME("(%p, %s, %ld, %ld, %p): stub\n", This, debugstr_guid(rguidType), dwGroupBits, dwIndex, ppTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_GetTrackGroup (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicTrack* pTrack, DWORD* pdwGroupBits)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetTrackGroup (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicTrack* pTrack, DWORD* pdwGroupBits) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
FIXME("(%p, %p, %p): stub\n", This, pTrack, pdwGroupBits);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_InsertTrack (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicTrack* pTrack, DWORD dwGroupBits)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_InsertTrack (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicTrack* pTrack, DWORD dwGroupBits) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
FIXME("(%p, %p, %ld): stub\n", This, pTrack, dwGroupBits);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_RemoveTrack (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicTrack* pTrack)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_RemoveTrack (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicTrack* pTrack) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
FIXME("(%p, %p): stub\n", This, pTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_InitPlay (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicSegmentState** ppSegState, IDirectMusicPerformance* pPerformance, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_InitPlay (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicSegmentState** ppSegState, IDirectMusicPerformance* pPerformance, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
FIXME("(%p, %p, %p, %ld): stub\n", This, ppSegState, pPerformance, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_GetGraph (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicGraph** ppGraph)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetGraph (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicGraph** ppGraph) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
FIXME("(%p, %p): stub\n", This, ppGraph);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_SetGraph (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicGraph* pGraph)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_SetGraph (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicGraph* pGraph) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
FIXME("(%p, %p): stub\n", This, pGraph);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_AddNotificationType (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_AddNotificationType (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_RemoveNotificationType (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_RemoveNotificationType (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_GetParam (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetParam (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
FIXME("(%p, %s, %ld, %ld, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), dwGroupBits, dwIndex, mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_SetParam (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_SetParam (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
FIXME("(%p, %s, %ld, %ld, %ld, %p): stub\n", This, debugstr_guid(rguidType), dwGroupBits, dwIndex, mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_Clone (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicSegment** ppSegment)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_Clone (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicSegment** ppSegment) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_SetStartPoint (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtStart)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
- TRACE("(%p, %ld): stub\n", This, mtStart);
- This->segHeader.mtPlayStart = mtStart;
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_SetStartPoint (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtStart) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
+ FIXME("(%p, %ld): stub\n", This, mtStart);
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_GetStartPoint (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME* pmtStart)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
- TRACE("(%p, %p): stub\n", This, pmtStart);
- *pmtStart = This->segHeader.mtPlayStart;
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetStartPoint (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME* pmtStart) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
+ FIXME("(%p, %p): stub\n", This, pmtStart);
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_SetLoopPoints (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
- TRACE("(%p, %ld, %ld): stub\n", This, mtStart, mtEnd);
- This->segHeader.mtLoopStart = mtStart;
- This->segHeader.mtLoopEnd = mtEnd;
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_SetLoopPoints (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
+ FIXME("(%p, %ld, %ld): stub\n", This, mtStart, mtEnd);
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_GetLoopPoints (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME* pmtStart, MUSIC_TIME* pmtEnd)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
- TRACE("(%p, %p, %p): stub\n", This, pmtStart, pmtEnd);
- *pmtStart = This->segHeader.mtLoopStart;
- *pmtEnd = This->segHeader.mtLoopEnd;
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetLoopPoints (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME* pmtStart, MUSIC_TIME* pmtEnd) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
+ FIXME("(%p, %p, %p): stub\n", This, pmtStart, pmtEnd);
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_SetPChannelsUsed (LPDIRECTMUSICSEGMENT8 iface, DWORD dwNumPChannels, DWORD* paPChannels)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_SetPChannelsUsed (LPDIRECTMUSICSEGMENT8 iface, DWORD dwNumPChannels, DWORD* paPChannels) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
FIXME("(%p, %ld, %p): stub\n", This, dwNumPChannels, paPChannels);
-
return S_OK;
}
-/* IDirectMusicSegment8 IDirectMusicSegment8 part: */
-HRESULT WINAPI IDirectMusicSegment8Impl_SetTrackConfig (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_SetTrackConfig (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
FIXME("(%p, %s, %ld, %ld, %ld, %ld): stub\n", This, debugstr_guid(rguidTrackClassID), dwGroupBits, dwIndex, dwFlagsOn, dwFlagsOff);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_GetAudioPathConfig (LPDIRECTMUSICSEGMENT8 iface, IUnknown** ppAudioPathConfig)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_GetAudioPathConfig (LPDIRECTMUSICSEGMENT8 iface, IUnknown** ppAudioPathConfig){
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
FIXME("(%p, %p): stub\n", This, ppAudioPathConfig);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_Compose (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtTime, IDirectMusicSegment* pFromSegment, IDirectMusicSegment* pToSegment, IDirectMusicSegment** ppComposedSegment)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_Compose (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtTime, IDirectMusicSegment* pFromSegment, IDirectMusicSegment* pToSegment, IDirectMusicSegment** ppComposedSegment) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
FIXME("(%p, %ld, %p, %p, %p): stub\n", This, mtTime, pFromSegment, pToSegment, ppComposedSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_Download (LPDIRECTMUSICSEGMENT8 iface, IUnknown *pAudioPath)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_Download (LPDIRECTMUSICSEGMENT8 iface, IUnknown *pAudioPath) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
FIXME("(%p, %p): stub\n", This, pAudioPath);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegment8Impl_Unload (LPDIRECTMUSICSEGMENT8 iface, IUnknown *pAudioPath)
-{
- ICOM_THIS(IDirectMusicSegment8Impl,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_Unload (LPDIRECTMUSICSEGMENT8 iface, IUnknown *pAudioPath) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, SegmentVtbl, iface);
FIXME("(%p, %p): stub\n", This, pAudioPath);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicSegment8) DirectMusicSegment8_Vtbl =
+ICOM_VTABLE(IDirectMusicSegment8) DirectMusicSegment8_Segment_Vtbl =
{
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicSegment8Impl_QueryInterface,
- IDirectMusicSegment8Impl_AddRef,
- IDirectMusicSegment8Impl_Release,
- IDirectMusicSegment8Impl_GetLength,
- IDirectMusicSegment8Impl_SetLength,
- IDirectMusicSegment8Impl_GetRepeats,
- IDirectMusicSegment8Impl_SetRepeats,
- IDirectMusicSegment8Impl_GetDefaultResolution,
- IDirectMusicSegment8Impl_SetDefaultResolution,
- IDirectMusicSegment8Impl_GetTrack,
- IDirectMusicSegment8Impl_GetTrackGroup,
- IDirectMusicSegment8Impl_InsertTrack,
- IDirectMusicSegment8Impl_RemoveTrack,
- IDirectMusicSegment8Impl_InitPlay,
- IDirectMusicSegment8Impl_GetGraph,
- IDirectMusicSegment8Impl_SetGraph,
- IDirectMusicSegment8Impl_AddNotificationType,
- IDirectMusicSegment8Impl_RemoveNotificationType,
- IDirectMusicSegment8Impl_GetParam,
- IDirectMusicSegment8Impl_SetParam,
- IDirectMusicSegment8Impl_Clone,
- IDirectMusicSegment8Impl_SetStartPoint,
- IDirectMusicSegment8Impl_GetStartPoint,
- IDirectMusicSegment8Impl_SetLoopPoints,
- IDirectMusicSegment8Impl_GetLoopPoints,
- IDirectMusicSegment8Impl_SetPChannelsUsed,
- IDirectMusicSegment8Impl_SetTrackConfig,
- IDirectMusicSegment8Impl_GetAudioPathConfig,
- IDirectMusicSegment8Impl_Compose,
- IDirectMusicSegment8Impl_Download,
- IDirectMusicSegment8Impl_Unload
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_QueryInterface,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_AddRef,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_Release,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_GetLength,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_SetLength,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_GetRepeats,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_SetRepeats,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_GetDefaultResolution,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_SetDefaultResolution,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_GetTrack,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_GetTrackGroup,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_InsertTrack,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_RemoveTrack,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_InitPlay,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_GetGraph,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_SetGraph,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_AddNotificationType,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_RemoveNotificationType,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_GetParam,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_SetParam,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_Clone,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_SetStartPoint,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_GetStartPoint,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_SetLoopPoints,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_GetLoopPoints,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_SetPChannelsUsed,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_SetTrackConfig,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_GetAudioPathConfig,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_Compose,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_Download,
+ IDirectMusicSegment8Impl_IDirectMusicSegment8_Unload
};
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicSegment (LPCGUID lpcGUID, LPDIRECTMUSICSEGMENT8 *ppDMSeg, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicSegment8Impl *segment;
-
- TRACE("(%p,%p,%p)\n", lpcGUID, ppDMSeg, pUnkOuter);
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicSegment)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicSegment2)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicSegment8)) {
- segment = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSegment8Impl));
- if (NULL == segment) {
- *ppDMSeg = (LPDIRECTMUSICSEGMENT8) NULL;
- return E_OUTOFMEMORY;
- }
- segment->lpVtbl = &DirectMusicSegment8_Vtbl;
- segment->ref = 1;
- *ppDMSeg = (LPDIRECTMUSICSEGMENT8) segment;
- return S_OK;
- }
-
- WARN("No interface found\n");
- return E_NOINTERFACE;
+/* IDirectMusicSegment8Impl IDirectMusicObject part: */
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, ObjectVtbl, iface);
+ return IDirectMusicSegment8Impl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicSegmentObject implementation
- */
-/* IDirectMusicSegmentObject IUnknown part: */
-HRESULT WINAPI IDirectMusicSegmentObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicSegmentObject,iface);
-
- if (IsEqualGUID(riid, &IID_IUnknown)
- || IsEqualGUID(riid, &IID_IDirectMusicObject)) {
- IDirectMusicSegmentObject_AddRef(iface);
- *ppobj = This;
- return S_OK;
- } else if (IsEqualGUID (riid, &IID_IPersistStream)) {
- IDirectMusicSegmentObjectStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
- return S_OK;
- } else if (IsEqualGUID (riid, &IID_IDirectMusicSegment)
- || IsEqualGUID (riid, &IID_IDirectMusicSegment8)) {
- IDirectMusicSegment8Impl_AddRef ((LPDIRECTMUSICSEGMENT8)This->pSegment);
- *ppobj = This->pSegment;
- return S_OK;
- }
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
+ULONG WINAPI IDirectMusicSegment8Impl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, ObjectVtbl, iface);
+ return IDirectMusicSegment8Impl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicSegmentObject_AddRef (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicSegmentObject,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
+ULONG WINAPI IDirectMusicSegment8Impl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, ObjectVtbl, iface);
+ return IDirectMusicSegment8Impl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicSegmentObject_Release (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicSegmentObject,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0)
- {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicSegmentObject IDirectMusicObject part: */
-HRESULT WINAPI IDirectMusicSegmentObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicSegmentObject,iface);
-
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, ObjectVtbl, iface);
TRACE("(%p, %p)\n", This, pDesc);
- pDesc = This->pDesc;
-
+ /* I think we shouldn't return pointer here since then values can be changed; it'd be a mess */
+ memcpy (pDesc, This->pDesc, This->pDesc->dwSize);
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegmentObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicSegmentObject,iface);
-
- TRACE("(%p, %p)\n", This, pDesc);
- This->pDesc = pDesc;
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, ObjectVtbl, iface);
+ TRACE("(%p, %p): setting descriptor:\n", This, pDesc);
+ if (TRACE_ON(dmime)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
+ }
+
+ /* According to MSDN, we should copy only given values, not whole struct */
+ if (pDesc->dwValidData & DMUS_OBJ_OBJECT)
+ memcpy (&This->pDesc->guidObject, &pDesc->guidObject, sizeof (pDesc->guidObject));
+ if (pDesc->dwValidData & DMUS_OBJ_CLASS)
+ memcpy (&This->pDesc->guidClass, &pDesc->guidClass, sizeof (pDesc->guidClass));
+ if (pDesc->dwValidData & DMUS_OBJ_NAME)
+ strncpyW (This->pDesc->wszName, pDesc->wszName, DMUS_MAX_NAME);
+ if (pDesc->dwValidData & DMUS_OBJ_CATEGORY)
+ strncpyW (This->pDesc->wszCategory, pDesc->wszCategory, DMUS_MAX_CATEGORY);
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME)
+ strncpyW (This->pDesc->wszFileName, pDesc->wszFileName, DMUS_MAX_FILENAME);
+ if (pDesc->dwValidData & DMUS_OBJ_VERSION)
+ memcpy (&This->pDesc->vVersion, &pDesc->vVersion, sizeof (pDesc->vVersion));
+ if (pDesc->dwValidData & DMUS_OBJ_DATE)
+ memcpy (&This->pDesc->ftDate, &pDesc->ftDate, sizeof (pDesc->ftDate));
+ if (pDesc->dwValidData & DMUS_OBJ_MEMORY) {
+ memcpy (&This->pDesc->llMemLength, &pDesc->llMemLength, sizeof (pDesc->llMemLength));
+ memcpy (This->pDesc->pbMemData, pDesc->pbMemData, sizeof (pDesc->pbMemData));
+ }
+ if (pDesc->dwValidData & DMUS_OBJ_STREAM) {
+ /* according to MSDN, we copy the stream */
+ IStream_Clone (pDesc->pStream, &This->pDesc->pStream);
+ }
+
+ /* add new flags */
+ This->pDesc->dwValidData |= pDesc->dwValidData;
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegmentObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicSegmentObject,iface);
-
- FIXME("(%p, %p, %p): stub\n", This, pStream, pDesc);
-
- return S_OK;
-}
-
-ICOM_VTABLE(IDirectMusicObject) DirectMusicSegmentObject_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicSegmentObject_QueryInterface,
- IDirectMusicSegmentObject_AddRef,
- IDirectMusicSegmentObject_Release,
- IDirectMusicSegmentObject_GetDescriptor,
- IDirectMusicSegmentObject_SetDescriptor,
- IDirectMusicSegmentObject_ParseDescriptor
-};
-
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicSegmentObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicSegmentObject *obj;
-
- TRACE("(%p,%p,%p)\n", lpcGUID, ppObject, pUnkOuter);
- if (IsEqualGUID (lpcGUID, &IID_IDirectMusicObject)) {
- obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSegmentObject));
- if (NULL == obj) {
- *ppObject = (LPDIRECTMUSICOBJECT) NULL;
- return E_OUTOFMEMORY;
- }
- obj->lpVtbl = &DirectMusicSegmentObject_Vtbl;
- obj->ref = 1;
- /* prepare IPersistStream */
- obj->pStream = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSegmentObjectStream));
- obj->pStream->lpVtbl = &DirectMusicSegmentObjectStream_Vtbl;
- obj->pStream->ref = 1;
- obj->pStream->pParentObject = obj;
- /* prepare IDirectMusicSegment8 */
- DMUSIC_CreateDirectMusicSegment (&IID_IDirectMusicSegment8, (LPDIRECTMUSICSEGMENT8*)&obj->pSegment, NULL);
- obj->pSegment->pObject = obj;
- *ppObject = (LPDIRECTMUSICOBJECT) obj;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
-}
-
-/*****************************************************************************
- * IDirectMusicSegmentObjectStream implementation
- */
-/* IDirectMusicSegmentObjectStream IUnknown part: */
-HRESULT WINAPI IDirectMusicSegmentObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicSegmentObjectStream,iface);
-
- if (IsEqualGUID(riid, &IID_IUnknown)
- || IsEqualGUID(riid, &IID_IPersistStream)) {
- IDirectMusicSegmentObjectStream_AddRef (iface);
- *ppobj = This;
- return S_OK;
- }
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicSegmentObjectStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicSegmentObjectStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicSegmentObjectStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicSegmentObjectStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0)
- {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicSegmentObjectStream IPersist part: */
-HRESULT WINAPI IDirectMusicSegmentObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- return E_NOTIMPL;
-}
-
-/* IDirectMusicSegmentObjectStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicSegmentObjectStream_IsDirty (LPPERSISTSTREAM iface)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicSegmentObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
- ICOM_THIS(IDirectMusicSegmentObjectStream,iface);
- FOURCC chunkID;
- DWORD chunkSize, StreamSize, StreamCount, ListSize[10], ListCount[10];
+HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, ObjectVtbl, iface);
+ DMUS_PRIVATE_CHUNK Chunk;
+ DWORD StreamSize, StreamCount, ListSize[1], ListCount[1];
LARGE_INTEGER liMove; /* used when skipping chunks */
- IDirectMusicSegment8Impl* pSegment = This->pParentObject->pSegment; /* that's where we load data */
- DMUS_IO_TRACK_HEADER tempHeader;
- DMUS_IO_TRACK_EXTRAS_HEADER tempXHeader;
+
+ TRACE("(%p,%p, %p)\n", This, pStream, pDesc);
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID)
- {
+ /* FIXME: should this be determined from stream? */
+ pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&pDesc->guidClass, &CLSID_DirectMusicSegment, sizeof(CLSID));
+
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
case FOURCC_RIFF: {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- TRACE_(dmfile)(": RIFF chunk containing %s", debugstr_fourcc (chunkID));
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ StreamSize = Chunk.dwSize - sizeof(FOURCC);
+ StreamCount = 0;
+ if (Chunk.fccID == DMUS_FOURCC_SEGMENT_FORM) {
+ TRACE_(dmfile)(": segment form\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ StreamCount += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case DMUS_FOURCC_GUID_CHUNK: {
+ TRACE_(dmfile)(": GUID chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read (pStream, &pDesc->guidObject, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_VERSION_CHUNK: {
+ TRACE_(dmfile)(": version chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read (pStream, &pDesc->vVersion, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CATEGORY_CHUNK: {
+ TRACE_(dmfile)(": category chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_CATEGORY;
+ IStream_Read (pStream, pDesc->wszCategory, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[0] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[0] = 0;
+ switch (Chunk.fccID) {
+ /* evil M$ UNFO list, which can (!?) contain INFO elements */
+ case DMUS_FOURCC_UNFO_LIST: {
+ TRACE_(dmfile)(": UNFO list\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
+ (though strings seem to be valid unicode) */
+ case mmioFOURCC('I','N','A','M'):
+ case DMUS_FOURCC_UNAM_CHUNK: {
+ TRACE_(dmfile)(": name chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_NAME;
+ IStream_Read (pStream, pDesc->wszName, Chunk.dwSize, NULL);
+ break;
+ }
+ case mmioFOURCC('I','A','R','T'):
+ case DMUS_FOURCC_UART_CHUNK: {
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','O','P'):
+ case DMUS_FOURCC_UCOP_CHUNK: {
+ TRACE_(dmfile)(": copyright chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','S','B','J'):
+ case DMUS_FOURCC_USBJ_CHUNK: {
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','M','T'):
+ case DMUS_FOURCC_UCMT_CHUNK: {
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
+ } while (StreamCount < StreamSize);
+ break;
+ } else {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = StreamSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+
+ TRACE_(dmfile)(": reading finished\n");
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return DMUS_E_INVALIDFILE;
+ }
+ }
+
+ TRACE(": returning descriptor:\n");
+ if (TRACE_ON(dmime)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
+ }
+
+ return S_OK;
+}
+
+ICOM_VTABLE(IDirectMusicObject) DirectMusicSegment8_Object_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicSegment8Impl_IDirectMusicObject_QueryInterface,
+ IDirectMusicSegment8Impl_IDirectMusicObject_AddRef,
+ IDirectMusicSegment8Impl_IDirectMusicObject_Release,
+ IDirectMusicSegment8Impl_IDirectMusicObject_GetDescriptor,
+ IDirectMusicSegment8Impl_IDirectMusicObject_SetDescriptor,
+ IDirectMusicSegment8Impl_IDirectMusicObject_ParseDescriptor
+};
+
+/* IDirectMusicSegment8Impl IPersistStream part: */
+HRESULT WINAPI IDirectMusicSegment8Impl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, PersistStreamVtbl, iface);
+ return IDirectMusicSegment8Impl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicSegment8Impl_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, PersistStreamVtbl, iface);
+ return IDirectMusicSegment8Impl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicSegment8Impl_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, PersistStreamVtbl, iface);
+ return IDirectMusicSegment8Impl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
+ ICOM_THIS_MULTI(IDirectMusicSegment8Impl, PersistStreamVtbl, iface);
+ FOURCC chunkID;
+ DWORD chunkSize, StreamSize, StreamCount, ListSize[3], ListCount[3];
+ LARGE_INTEGER liMove; /* used when skipping chunks */
+
+ FIXME("(%p, %p): Loading not implemented yet\n", This, pStm);
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ IStream_Read (pStm, &chunkSize, sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
+ switch (chunkID) {
+ case FOURCC_RIFF: {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(chunkID));
StreamSize = chunkSize - sizeof(FOURCC);
StreamCount = 0;
- switch (chunkID)
- {
+ switch (chunkID) {
case DMUS_FOURCC_SEGMENT_FORM: {
TRACE_(dmfile)(": segment form\n");
do {
IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
- StreamCount += sizeof (FOURCC) + sizeof (DWORD) + chunkSize;
+ StreamCount += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
switch (chunkID) {
- case DMUS_FOURCC_SEGMENT_CHUNK: {
- TRACE_(dmfile)(": segment header chunk\n");
- IStream_Read (pStm, &pSegment->segHeader, chunkSize, NULL);
- break;
- }
case DMUS_FOURCC_GUID_CHUNK: {
TRACE_(dmfile)(": GUID chunk\n");
- IStream_Read (pStm, &pSegment->vVersion, chunkSize, NULL);
+ This->pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read (pStm, &This->pDesc->guidObject, chunkSize, NULL);
break;
}
case DMUS_FOURCC_VERSION_CHUNK: {
TRACE_(dmfile)(": version chunk\n");
- IStream_Read (pStm, &pSegment->guidID, chunkSize, NULL);
+ This->pDesc->dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read (pStm, &This->pDesc->vVersion, chunkSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CATEGORY_CHUNK: {
+ TRACE_(dmfile)(": category chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_CATEGORY;
+ IStream_Read (pStm, This->pDesc->wszCategory, chunkSize, NULL);
break;
}
case FOURCC_LIST: {
@@ -620,34 +600,41 @@
ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
switch (chunkID) {
+ /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
+ (though strings seem to be valid unicode) */
+ case mmioFOURCC('I','N','A','M'):
case DMUS_FOURCC_UNAM_CHUNK: {
TRACE_(dmfile)(": name chunk\n");
- pSegment->wszName = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, chunkSize);
- IStream_Read (pStm, pSegment->wszName, chunkSize, NULL);
+ This->pDesc->dwValidData |= DMUS_OBJ_NAME;
+ IStream_Read (pStm, This->pDesc->wszName, chunkSize, NULL);
break;
}
+ case mmioFOURCC('I','A','R','T'):
case DMUS_FOURCC_UART_CHUNK: {
- TRACE_(dmfile)(": artist chunk\n");
- pSegment->wszArtist = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, chunkSize);
- IStream_Read (pStm, pSegment->wszArtist, chunkSize, NULL);
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
break;
}
+ case mmioFOURCC('I','C','O','P'):
case DMUS_FOURCC_UCOP_CHUNK: {
- TRACE_(dmfile)(": copyright chunk\n");
- pSegment->wszCopyright = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, chunkSize);
- IStream_Read (pStm, pSegment->wszCopyright, chunkSize, NULL);
+ TRACE_(dmfile)(": copyright chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
break;
}
+ case mmioFOURCC('I','S','B','J'):
case DMUS_FOURCC_USBJ_CHUNK: {
- TRACE_(dmfile)(": subject chunk\n");
- pSegment->wszSubject = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, chunkSize);
- IStream_Read (pStm, pSegment->wszSubject, chunkSize, NULL);
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
break;
}
+ case mmioFOURCC('I','C','M','T'):
case DMUS_FOURCC_UCMT_CHUNK: {
- TRACE_(dmfile)(": comment chunk\n");
- pSegment->wszComment = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, chunkSize);
- IStream_Read (pStm, pSegment->wszComment, chunkSize, NULL);
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
break;
}
default: {
@@ -655,95 +642,6 @@
liMove.QuadPart = chunkSize;
IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
break;
- }
- }
- TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
- } while (ListCount[0] < ListSize[0]);
- break;
- }
- case DMUS_FOURCC_TRACK_LIST: {
- TRACE_(dmfile)(": track list\n");
- do {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
- ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID)
- {
- case FOURCC_RIFF: {
- TRACE_(dmfile)(": RIFF chunk");
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- switch (chunkID)
- {
- case DMUS_FOURCC_TRACK_FORM: {
- TRACE_(dmfile)(": containing %s: track form\n", debugstr_fourcc(chunkID));
- ListSize[1] = chunkSize - sizeof(FOURCC);
- ListCount[1] = 0;
- do {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
- ListCount[1] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
- case DMUS_FOURCC_TRACK_CHUNK: {
- TRACE_(dmfile)(": track header chunk\n");
- IStream_Read (pStm, &tempHeader, chunkSize, NULL);
- break;
- }
- case DMUS_FOURCC_TRACK_EXTRAS_CHUNK: {
- TRACE_(dmfile)(": track extra header chunk\n");
- IStream_Read (pStm, &tempXHeader, chunkSize, NULL);
- break;
- }
- /* add other stuff (look at note below) */
- default: {
- TRACE_(dmfile)(": unknown chunk (skipping)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
- break;
- }
- }
- TRACE_(dmfile)(": ListCount[1] = %ld < ListSize[1] = %ld\n", ListCount[1], ListSize[1]);
- } while (ListCount[1] < ListSize[1]);
- FIXME(": loading tracks not supported yet\n");
- /* sigh... now comes track creation... currently I have some problems with implementing
- this one because my test are contradicting:
- - tracks are not loaded by loader (at least my dxdiag test with native dmime doesn't show it)
- therefore i guess they're created with CoCreateInstance with CLSID specified in header and
- IID_IDirectMusicTrack(8). Tracks are then probably passed to IDirectMusicSegment_Insert
- (not quite sure, but behaviour complies with the one described in MSDN (about calling IDirectMusicTrack_Init)
- - but on the other hand, track's stream implementation gets only <data> chunk (look in MSDN for more info)
- (tested with native dmime and builtin dmband and dmstyle) => this means that all info about track (header, extra header
- UNFO, GUID and version are read by segment's stream... now, how the hell is all this info set on track?!
- => I believe successful approach would be to create structure like this:
- _DMUSIC_PRIVATE_TRACK_ENTRY {
- DMUS_IO_TRACK_HEADER trkHeader;
- DMUS_IO_TRACK_EXTRAS_HEADER trkXHeader;
- WCHAR* name, ...;
- GUID guidID;
- DMUS_VERSION vVersion;
- ...
- IDirectMusicTrack* pTrack;
- } DMUSIC_PRIVATE_TRACK_ENTRY;
- and then load all stuff into it
- => anyway, I'll try to implement it when I find some time again, but this note is here for anyone that wants to give it a try :)
- */
- break;
- }
- default: {
- TRACE_(dmfile)(": unknown chunk (only DMTK expected; skipping)\n");
- liMove.QuadPart = chunkSize - sizeof(FOURCC);
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
- break;
- }
- }
- break;
- }
- default: {
- TRACE_(dmfile)("(unexpected) non-RIFF chunk (skipping, but expect errors)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
- break;
}
}
TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
@@ -755,21 +653,21 @@
liMove.QuadPart = chunkSize - sizeof(FOURCC);
IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
break;
- }
+ }
}
- break;
- }
+ break;
+ }
default: {
- TRACE_(dmfile)(": unknown chunk (skipping)\n");
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
liMove.QuadPart = chunkSize;
IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
break;
- }
+ }
}
- TRACE_(dmfile)(": StreamCount = %ld < StreamSize = %ld\n", StreamCount, StreamSize);
+ TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
} while (StreamCount < StreamSize);
break;
- }
+ }
default: {
TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
liMove.QuadPart = StreamSize;
@@ -787,29 +685,48 @@
return E_FAIL;
}
}
-
+
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegmentObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
+HRESULT WINAPI IDirectMusicSegment8Impl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicSegmentObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
+HRESULT WINAPI IDirectMusicSegment8Impl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
return E_NOTIMPL;
}
-ICOM_VTABLE(IPersistStream) DirectMusicSegmentObjectStream_Vtbl =
-{
+ICOM_VTABLE(IPersistStream) DirectMusicSegment8_PersistStream_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicSegmentObjectStream_QueryInterface,
- IDirectMusicSegmentObjectStream_AddRef,
- IDirectMusicSegmentObjectStream_Release,
- IDirectMusicSegmentObjectStream_GetClassID,
- IDirectMusicSegmentObjectStream_IsDirty,
- IDirectMusicSegmentObjectStream_Load,
- IDirectMusicSegmentObjectStream_Save,
- IDirectMusicSegmentObjectStream_GetSizeMax
+ IDirectMusicSegment8Impl_IPersistStream_QueryInterface,
+ IDirectMusicSegment8Impl_IPersistStream_AddRef,
+ IDirectMusicSegment8Impl_IPersistStream_Release,
+ IDirectMusicSegment8Impl_IPersistStream_GetClassID,
+ IDirectMusicSegment8Impl_IPersistStream_IsDirty,
+ IDirectMusicSegment8Impl_IPersistStream_Load,
+ IDirectMusicSegment8Impl_IPersistStream_Save,
+ IDirectMusicSegment8Impl_IPersistStream_GetSizeMax
};
+
+/* for ClassFactory */
+HRESULT WINAPI DMUSIC_CreateDirectMusicSegmentImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicSegment8Impl* obj;
+
+ obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSegment8Impl));
+ if (NULL == obj) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ obj->UnknownVtbl = &DirectMusicSegment8_Unknown_Vtbl;
+ obj->SegmentVtbl = &DirectMusicSegment8_Segment_Vtbl;
+ obj->ObjectVtbl = &DirectMusicSegment8_Object_Vtbl;
+ obj->PersistStreamVtbl = &DirectMusicSegment8_PersistStream_Vtbl;
+ obj->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(obj->pDesc);
+ obj->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&obj->pDesc->guidClass, &CLSID_DirectMusicSegment, sizeof (CLSID));
+ obj->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicSegment8Impl_IUnknown_QueryInterface ((LPUNKNOWN)&obj->UnknownVtbl, lpcGUID, ppobj);
+}
diff --git a/dlls/dmime/segmentstate.c b/dlls/dmime/segmentstate.c
index acf6711..5f81b9e 100644
--- a/dlls/dmime/segmentstate.c
+++ b/dlls/dmime/segmentstate.c
@@ -1,6 +1,6 @@
/* IDirectMusicSegmentState8 Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,22 +17,12 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmime_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
-
-/* IDirectMusicSegmentState8 IUnknown part: */
-HRESULT WINAPI IDirectMusicSegmentState8Impl_QueryInterface (LPDIRECTMUSICSEGMENTSTATE8 iface, REFIID riid, LPVOID *ppobj)
-{
+/* IDirectMusicSegmentState8Impl IUnknown part: */
+HRESULT WINAPI IDirectMusicSegmentState8Impl_QueryInterface (LPDIRECTMUSICSEGMENTSTATE8 iface, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IDirectMusicSegmentState8Impl,iface);
if (IsEqualIID(riid, &IID_IUnknown) ||
@@ -46,15 +36,13 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicSegmentState8Impl_AddRef (LPDIRECTMUSICSEGMENTSTATE8 iface)
-{
+ULONG WINAPI IDirectMusicSegmentState8Impl_AddRef (LPDIRECTMUSICSEGMENTSTATE8 iface) {
ICOM_THIS(IDirectMusicSegmentState8Impl,iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicSegmentState8Impl_Release (LPDIRECTMUSICSEGMENTSTATE8 iface)
-{
+ULONG WINAPI IDirectMusicSegmentState8Impl_Release (LPDIRECTMUSICSEGMENTSTATE8 iface) {
ICOM_THIS(IDirectMusicSegmentState8Impl,iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
@@ -64,73 +52,51 @@
return ref;
}
-/* IDirectMusicSegmentState8 IDirectMusicSegmentState part: */
-HRESULT WINAPI IDirectMusicSegmentState8Impl_GetRepeats (LPDIRECTMUSICSEGMENTSTATE8 iface, DWORD* pdwRepeats)
-{
+/* IDirectMusicSegmentState8Impl IDirectMusicSegmentState part: */
+HRESULT WINAPI IDirectMusicSegmentState8Impl_GetRepeats (LPDIRECTMUSICSEGMENTSTATE8 iface, DWORD* pdwRepeats) {
ICOM_THIS(IDirectMusicSegmentState8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pdwRepeats);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegmentState8Impl_GetSegment (LPDIRECTMUSICSEGMENTSTATE8 iface, IDirectMusicSegment** ppSegment)
-{
+HRESULT WINAPI IDirectMusicSegmentState8Impl_GetSegment (LPDIRECTMUSICSEGMENTSTATE8 iface, IDirectMusicSegment** ppSegment) {
ICOM_THIS(IDirectMusicSegmentState8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, ppSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegmentState8Impl_GetStartTime (LPDIRECTMUSICSEGMENTSTATE8 iface, MUSIC_TIME* pmtStart)
-{
+HRESULT WINAPI IDirectMusicSegmentState8Impl_GetStartTime (LPDIRECTMUSICSEGMENTSTATE8 iface, MUSIC_TIME* pmtStart) {
ICOM_THIS(IDirectMusicSegmentState8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pmtStart);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegmentState8Impl_GetSeek (LPDIRECTMUSICSEGMENTSTATE8 iface, MUSIC_TIME* pmtSeek)
-{
+HRESULT WINAPI IDirectMusicSegmentState8Impl_GetSeek (LPDIRECTMUSICSEGMENTSTATE8 iface, MUSIC_TIME* pmtSeek) {
ICOM_THIS(IDirectMusicSegmentState8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pmtSeek);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegmentState8Impl_GetStartPoint (LPDIRECTMUSICSEGMENTSTATE8 iface, MUSIC_TIME* pmtStart)
-{
+HRESULT WINAPI IDirectMusicSegmentState8Impl_GetStartPoint (LPDIRECTMUSICSEGMENTSTATE8 iface, MUSIC_TIME* pmtStart) {
ICOM_THIS(IDirectMusicSegmentState8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pmtStart);
-
return S_OK;
}
-/* IDirectMusicSegmentState8 IDirectMusicSegmentState8 part: */
-HRESULT WINAPI IDirectMusicSegmentState8Impl_SetTrackConfig (LPDIRECTMUSICSEGMENTSTATE8 iface, REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff)
-{
+/* IDirectMusicSegmentState8Impl IDirectMusicSegmentState8 part: */
+HRESULT WINAPI IDirectMusicSegmentState8Impl_SetTrackConfig (LPDIRECTMUSICSEGMENTSTATE8 iface, REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff) {
ICOM_THIS(IDirectMusicSegmentState8Impl,iface);
-
FIXME("(%p, %s, %ld, %ld, %ld, %ld): stub\n", This, debugstr_guid(rguidTrackClassID), dwGroupBits, dwIndex, dwFlagsOn, dwFlagsOff);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegmentState8Impl_GetObjectInPath (LPDIRECTMUSICSEGMENTSTATE8 iface, DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, DWORD dwIndex, REFGUID iidInterface, void** ppObject)
-{
+HRESULT WINAPI IDirectMusicSegmentState8Impl_GetObjectInPath (LPDIRECTMUSICSEGMENTSTATE8 iface, DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, DWORD dwIndex, REFGUID iidInterface, void** ppObject) {
ICOM_THIS(IDirectMusicSegmentState8Impl,iface);
-
FIXME("(%p, %ld, %ld, %ld, %s, %ld, %s, %p): stub\n", This, dwPChannel, dwStage, dwBuffer, debugstr_guid(guidObject), dwIndex, debugstr_guid(iidInterface), ppObject);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicSegmentState8) DirectMusicSegmentState8_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicSegmentState8) DirectMusicSegmentState8_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
IDirectMusicSegmentState8Impl_QueryInterface,
IDirectMusicSegmentState8Impl_AddRef,
@@ -145,14 +111,16 @@
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicSegmentState (LPCGUID lpcGUID, LPDIRECTMUSICSEGMENTSTATE8 *ppDMSeg, LPUNKNOWN pUnkOuter)
-{
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicSegmentState)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicSegmentState8)) {
- FIXME("Not yet\n");
- return E_NOINTERFACE;
- }
- WARN("No interface found\n");
+HRESULT WINAPI DMUSIC_CreateDirectMusicSegmentStateImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicSegmentState8Impl* obj;
- return E_NOINTERFACE;
+ obj = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSegmentState8Impl));
+ if (NULL == obj) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ obj->lpVtbl = &DirectMusicSegmentState8_Vtbl;
+ obj->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicSegmentState8Impl_QueryInterface ((LPDIRECTMUSICSEGMENTSTATE8)obj, lpcGUID, ppobj);
}
diff --git a/dlls/dmime/segtriggertrack.c b/dlls/dmime/segtriggertrack.c
index 9a25746..7db28f2 100644
--- a/dlls/dmime/segtriggertrack.c
+++ b/dlls/dmime/segtriggertrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicSegTriggerTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmime_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
@@ -34,19 +26,21 @@
* IDirectMusicSegTriggerTrack implementation
*/
/* IDirectMusicSegTriggerTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicSegTriggerTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicSegTriggerTrack,iface);
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicSegTriggerTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicSegTriggerTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicSegTriggerTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicSegTriggerTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
@@ -54,16 +48,14 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicSegTriggerTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicSegTriggerTrack,iface);
+ULONG WINAPI IDirectMusicSegTriggerTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicSegTriggerTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicSegTriggerTrack,iface);
+ULONG WINAPI IDirectMusicSegTriggerTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -72,269 +64,214 @@
return ref;
}
-/* IDirectMusicSegTriggerTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicSegTriggerTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicSegTriggerTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicSegTriggerTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicSegTriggerTrack_IUnknown_QueryInterface,
+ IDirectMusicSegTriggerTrack_IUnknown_AddRef,
+ IDirectMusicSegTriggerTrack_IUnknown_Release
+};
+/* IDirectMusicSegTriggerTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface);
+ return IDirectMusicSegTriggerTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface);
+ return IDirectMusicSegTriggerTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface);
+ return IDirectMusicSegTriggerTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
+{
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegTriggerTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
{
- ICOM_THIS(IDirectMusicSegTriggerTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegTriggerTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
{
- ICOM_THIS(IDirectMusicSegTriggerTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegTriggerTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
{
- ICOM_THIS(IDirectMusicSegTriggerTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegTriggerTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicSegTriggerTrack,iface);
-
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegTriggerTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicSegTriggerTrack,iface);
-
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegTriggerTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicSegTriggerTrack,iface);
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
/* didn't find any params */
-
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicSegTriggerTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicSegTriggerTrack,iface);
-
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegTriggerTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicSegTriggerTrack,iface);
-
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegTriggerTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicSegTriggerTrack,iface);
-
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicSegTriggerTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicSegTriggerTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicSegTriggerTrack,iface);
-
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegTriggerTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicSegTriggerTrack,iface);
-
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegTriggerTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicSegTriggerTrack,iface);
-
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegTriggerTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicSegTriggerTrack,iface);
-
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegTriggerTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicSegTriggerTrack,iface);
-
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicSegTriggerTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicSegTriggerTrack_Track_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicSegTriggerTrack_QueryInterface,
- IDirectMusicSegTriggerTrack_AddRef,
- IDirectMusicSegTriggerTrack_Release,
- IDirectMusicSegTriggerTrack_Init,
- IDirectMusicSegTriggerTrack_InitPlay,
- IDirectMusicSegTriggerTrack_EndPlay,
- IDirectMusicSegTriggerTrack_Play,
- IDirectMusicSegTriggerTrack_GetParam,
- IDirectMusicSegTriggerTrack_SetParam,
- IDirectMusicSegTriggerTrack_IsParamSupported,
- IDirectMusicSegTriggerTrack_AddNotificationType,
- IDirectMusicSegTriggerTrack_RemoveNotificationType,
- IDirectMusicSegTriggerTrack_Clone,
- IDirectMusicSegTriggerTrack_PlayEx,
- IDirectMusicSegTriggerTrack_GetParamEx,
- IDirectMusicSegTriggerTrack_SetParamEx,
- IDirectMusicSegTriggerTrack_Compose,
- IDirectMusicSegTriggerTrack_Join
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_Release,
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_Init,
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_Play,
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_Clone,
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_Compose,
+ IDirectMusicSegTriggerTrack_IDirectMusicTrack_Join
};
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicSegTriggerTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicSegTriggerTrack* track;
-
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSegTriggerTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicSegTriggerTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSegTriggerTrackStream));
- track->pStream->lpVtbl = &DirectMusicSegTriggerTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
+/* IDirectMusicSegTriggerTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, PersistStreamVtbl, iface);
+ return IDirectMusicSegTriggerTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicSegTriggerTrackStream implementation
- */
-/* IDirectMusicSegTriggerTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicSegTriggerTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicSegTriggerTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicSegTriggerTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
+ULONG WINAPI IDirectMusicSegTriggerTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, PersistStreamVtbl, iface);
+ return IDirectMusicSegTriggerTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicSegTriggerTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicSegTriggerTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
+ULONG WINAPI IDirectMusicSegTriggerTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicSegTriggerTrack, PersistStreamVtbl, iface);
+ return IDirectMusicSegTriggerTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicSegTriggerTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicSegTriggerTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicSegTriggerTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicSegTriggerTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
return E_NOTIMPL;
}
-/* IDirectMusicSegTriggerTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicSegTriggerTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicSegTriggerTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
FIXME(": Loading not implemented yet\n");
return S_OK;
}
-HRESULT WINAPI IDirectMusicSegTriggerTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicSegTriggerTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
+HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
return E_NOTIMPL;
}
-ICOM_VTABLE(IPersistStream) DirectMusicSegTriggerTrackStream_Vtbl =
-{
+ICOM_VTABLE(IPersistStream) DirectMusicSegTriggerTrack_PersistStream_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicSegTriggerTrackStream_QueryInterface,
- IDirectMusicSegTriggerTrackStream_AddRef,
- IDirectMusicSegTriggerTrackStream_Release,
- IDirectMusicSegTriggerTrackStream_GetClassID,
- IDirectMusicSegTriggerTrackStream_IsDirty,
- IDirectMusicSegTriggerTrackStream_Load,
- IDirectMusicSegTriggerTrackStream_Save,
- IDirectMusicSegTriggerTrackStream_GetSizeMax
+ IDirectMusicSegTriggerTrack_IPersistStream_QueryInterface,
+ IDirectMusicSegTriggerTrack_IPersistStream_AddRef,
+ IDirectMusicSegTriggerTrack_IPersistStream_Release,
+ IDirectMusicSegTriggerTrack_IPersistStream_GetClassID,
+ IDirectMusicSegTriggerTrack_IPersistStream_IsDirty,
+ IDirectMusicSegTriggerTrack_IPersistStream_Load,
+ IDirectMusicSegTriggerTrack_IPersistStream_Save,
+ IDirectMusicSegTriggerTrack_IPersistStream_GetSizeMax
};
+
+/* for ClassFactory */
+HRESULT WINAPI DMUSIC_CreateDirectMusicSegTriggerTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicSegTriggerTrack* track;
+
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSegTriggerTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ track->UnknownVtbl = &DirectMusicSegTriggerTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicSegTriggerTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicSegTriggerTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicSegTriggerTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicSegTriggerTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
+}
diff --git a/dlls/dmime/seqtrack.c b/dlls/dmime/seqtrack.c
index 3a4d3d7..a9bbe94 100644
--- a/dlls/dmime/seqtrack.c
+++ b/dlls/dmime/seqtrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicSeqTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmime_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
@@ -34,19 +26,21 @@
* IDirectMusicSeqTrack implementation
*/
/* IDirectMusicSeqTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicSeqTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicSeqTrack,iface);
+HRESULT WINAPI IDirectMusicSeqTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicSeqTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicSeqTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicSeqTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicSeqTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicSeqTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
@@ -54,16 +48,14 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicSeqTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicSeqTrack,iface);
+ULONG WINAPI IDirectMusicSeqTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicSeqTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicSeqTrack,iface);
+ULONG WINAPI IDirectMusicSeqTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -72,269 +64,214 @@
return ref;
}
-/* IDirectMusicSeqTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicSeqTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicSeqTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicSeqTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicSeqTrack_IUnknown_QueryInterface,
+ IDirectMusicSeqTrack_IUnknown_AddRef,
+ IDirectMusicSeqTrack_IUnknown_Release
+};
+/* IDirectMusicSeqTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface);
+ return IDirectMusicSeqTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface);
+ return IDirectMusicSeqTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface);
+ return IDirectMusicSeqTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
+{
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSeqTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
+HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
{
- ICOM_THIS(IDirectMusicSeqTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSeqTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
+HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
{
- ICOM_THIS(IDirectMusicSeqTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSeqTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
{
- ICOM_THIS(IDirectMusicSeqTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSeqTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicSeqTrack,iface);
-
+HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSeqTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicSeqTrack,iface);
-
+HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSeqTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicSeqTrack,iface);
+HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
/* didn't find any params */
-
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicSeqTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicSeqTrack,iface);
-
+HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSeqTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicSeqTrack,iface);
-
+HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSeqTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicSeqTrack,iface);
-
+HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicSeqTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicSeqTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicSeqTrack,iface);
-
+HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSeqTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicSeqTrack,iface);
-
+HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSeqTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicSeqTrack,iface);
-
+HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSeqTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicSeqTrack,iface);
-
+HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSeqTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicSeqTrack,iface);
-
+HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicSeqTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicSeqTrack_Track_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicSeqTrack_QueryInterface,
- IDirectMusicSeqTrack_AddRef,
- IDirectMusicSeqTrack_Release,
- IDirectMusicSeqTrack_Init,
- IDirectMusicSeqTrack_InitPlay,
- IDirectMusicSeqTrack_EndPlay,
- IDirectMusicSeqTrack_Play,
- IDirectMusicSeqTrack_GetParam,
- IDirectMusicSeqTrack_SetParam,
- IDirectMusicSeqTrack_IsParamSupported,
- IDirectMusicSeqTrack_AddNotificationType,
- IDirectMusicSeqTrack_RemoveNotificationType,
- IDirectMusicSeqTrack_Clone,
- IDirectMusicSeqTrack_PlayEx,
- IDirectMusicSeqTrack_GetParamEx,
- IDirectMusicSeqTrack_SetParamEx,
- IDirectMusicSeqTrack_Compose,
- IDirectMusicSeqTrack_Join
+ IDirectMusicSeqTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicSeqTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicSeqTrack_IDirectMusicTrack_Release,
+ IDirectMusicSeqTrack_IDirectMusicTrack_Init,
+ IDirectMusicSeqTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicSeqTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicSeqTrack_IDirectMusicTrack_Play,
+ IDirectMusicSeqTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicSeqTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicSeqTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicSeqTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicSeqTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicSeqTrack_IDirectMusicTrack_Clone,
+ IDirectMusicSeqTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicSeqTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicSeqTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicSeqTrack_IDirectMusicTrack_Compose,
+ IDirectMusicSeqTrack_IDirectMusicTrack_Join
};
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicSeqTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicSeqTrack* track;
-
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSeqTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicSeqTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSeqTrackStream));
- track->pStream->lpVtbl = &DirectMusicSeqTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
- }
-
- WARN("No interface found\n");
- return E_NOINTERFACE;
+/* IDirectMusicSeqTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, PersistStreamVtbl, iface);
+ return IDirectMusicSeqTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicSeqTrackStream implementation
- */
-/* IDirectMusicSeqTrackStream IUnknown part: */
-HRESULT WINAPI IDirectMusicSeqTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicSeqTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicSeqTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
+ULONG WINAPI IDirectMusicSeqTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, PersistStreamVtbl, iface);
+ return IDirectMusicSeqTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicSeqTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicSeqTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
+ULONG WINAPI IDirectMusicSeqTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicSeqTrack, PersistStreamVtbl, iface);
+ return IDirectMusicSeqTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicSeqTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicSeqTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicSeqTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicSeqTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
+HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
return E_NOTIMPL;
}
-/* IDirectMusicSeqTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicSeqTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
+HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicSeqTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
+HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
FIXME(": Loading not implemented yet\n");
return S_OK;
}
-HRESULT WINAPI IDirectMusicSeqTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
+HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicSeqTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
+HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
return E_NOTIMPL;
}
-ICOM_VTABLE(IPersistStream) DirectMusicSeqTrackStream_Vtbl =
-{
+ICOM_VTABLE(IPersistStream) DirectMusicSeqTrack_PersistStream_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicSeqTrackStream_QueryInterface,
- IDirectMusicSeqTrackStream_AddRef,
- IDirectMusicSeqTrackStream_Release,
- IDirectMusicSeqTrackStream_GetClassID,
- IDirectMusicSeqTrackStream_IsDirty,
- IDirectMusicSeqTrackStream_Load,
- IDirectMusicSeqTrackStream_Save,
- IDirectMusicSeqTrackStream_GetSizeMax
+ IDirectMusicSeqTrack_IPersistStream_QueryInterface,
+ IDirectMusicSeqTrack_IPersistStream_AddRef,
+ IDirectMusicSeqTrack_IPersistStream_Release,
+ IDirectMusicSeqTrack_IPersistStream_GetClassID,
+ IDirectMusicSeqTrack_IPersistStream_IsDirty,
+ IDirectMusicSeqTrack_IPersistStream_Load,
+ IDirectMusicSeqTrack_IPersistStream_Save,
+ IDirectMusicSeqTrack_IPersistStream_GetSizeMax
};
+
+/* for ClassFactory */
+HRESULT WINAPI DMUSIC_CreateDirectMusicSeqTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicSeqTrack* track;
+
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSeqTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ track->UnknownVtbl = &DirectMusicSeqTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicSeqTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicSeqTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicSeqTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicSeqTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
+}
diff --git a/dlls/dmime/song.c b/dlls/dmime/song.c
deleted file mode 100644
index dbcb17d..0000000
--- a/dlls/dmime/song.c
+++ /dev/null
@@ -1,356 +0,0 @@
-/* IDirectMusicSong Implementation
- *
- * Copyright (C) 2003 Rok Mandeljc
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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 Library General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
-#include "dmime_private.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(dmime);
-
-/* IDirectMusicSong IUnknown part: */
-HRESULT WINAPI IDirectMusicSongImpl_QueryInterface (LPDIRECTMUSICSONG iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicSongImpl,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicSong)) {
- IDirectMusicSongImpl_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicSongImpl_AddRef (LPDIRECTMUSICSONG iface)
-{
- ICOM_THIS(IDirectMusicSongImpl,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicSongImpl_Release (LPDIRECTMUSICSONG iface)
-{
- ICOM_THIS(IDirectMusicSongImpl,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicSong IDirectMusicSong part: */
-HRESULT WINAPI IDirectMusicSongImpl_Compose (LPDIRECTMUSICSONG iface)
-{
- ICOM_THIS(IDirectMusicSongImpl,iface);
-
- FIXME("(%p): stub\n", This);
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicSongImpl_GetParam (LPDIRECTMUSICSONG iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicSongImpl,iface);
-
- FIXME("(%p, %s, %ld, %ld, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), dwGroupBits, dwIndex, mtTime, pmtNext, pParam);
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicSongImpl_GetSegment (LPDIRECTMUSICSONG iface, WCHAR* pwzName, IDirectMusicSegment** ppSegment)
-{
- ICOM_THIS(IDirectMusicSongImpl,iface);
-
- FIXME("(%p, %p, %p): stub\n", This, pwzName, ppSegment);
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicSongImpl_GetAudioPathConfig (LPDIRECTMUSICSONG iface, IUnknown** ppAudioPathConfig)
-{
- ICOM_THIS(IDirectMusicSongImpl,iface);
-
- FIXME("(%p, %p): stub\n", This, ppAudioPathConfig);
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicSongImpl_Download (LPDIRECTMUSICSONG iface, IUnknown* pAudioPath)
-{
- ICOM_THIS(IDirectMusicSongImpl,iface);
-
- FIXME("(%p, %p): stub\n", This, pAudioPath);
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicSongImpl_Unload (LPDIRECTMUSICSONG iface, IUnknown* pAudioPath)
-{
- ICOM_THIS(IDirectMusicSongImpl,iface);
-
- FIXME("(%p, %p): stub\n", This, pAudioPath);
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicSongImpl_EnumSegment (LPDIRECTMUSICSONG iface, DWORD dwIndex, IDirectMusicSegment** ppSegment)
-{
- ICOM_THIS(IDirectMusicSongImpl,iface);
-
- FIXME("(%p, %ld, %p): stub\n", This, dwIndex, ppSegment);
-
- return S_OK;
-}
-
-ICOM_VTABLE(IDirectMusicSong) DirectMusicSong_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicSongImpl_QueryInterface,
- IDirectMusicSongImpl_AddRef,
- IDirectMusicSongImpl_Release,
- IDirectMusicSongImpl_Compose,
- IDirectMusicSongImpl_GetParam,
- IDirectMusicSongImpl_GetSegment,
- IDirectMusicSongImpl_GetAudioPathConfig,
- IDirectMusicSongImpl_Download,
- IDirectMusicSongImpl_Unload,
- IDirectMusicSongImpl_EnumSegment
-};
-
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicSong (LPCGUID lpcGUID, LPDIRECTMUSICSONG *ppDMSng, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicSongImpl* dmsong;
-
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicSong)) {
- dmsong = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSongImpl));
- if (NULL == dmsong) {
- *ppDMSng = (LPDIRECTMUSICSONG) NULL;
- return E_OUTOFMEMORY;
- }
- dmsong->lpVtbl = &DirectMusicSong_Vtbl;
- dmsong->ref = 1;
- *ppDMSng = (LPDIRECTMUSICSONG) dmsong;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
-}
-
-/*****************************************************************************
- * IDirectMusicSongObject implementation
- */
-/* IDirectMusicSongObject IUnknown part: */
-HRESULT WINAPI IDirectMusicSongObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicSongObject,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IDirectMusicObject)) {
- IDirectMusicSongObject_AddRef(iface);
- *ppobj = This;
- return S_OK;
- } else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IPersistStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = (LPPERSISTSTREAM)This->pStream;
- return S_OK;
- } else if (IsEqualIID (riid, &IID_IDirectMusicSong)) {
- IDirectMusicSong_AddRef ((LPDIRECTMUSICSONG)This->pSong);
- *ppobj = (LPDIRECTMUSICSONG)This->pSong;
- return S_OK;
- }
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicSongObject_AddRef (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicSongObject,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicSongObject_Release (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicSongObject,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicSongObject IDirectMusicObject part: */
-HRESULT WINAPI IDirectMusicSongObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicSongObject,iface);
-
- TRACE("(%p, %p)\n", This, pDesc);
- pDesc = This->pDesc;
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicSongObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicSongObject,iface);
-
- TRACE("(%p, %p)\n", This, pDesc);
- This->pDesc = pDesc;
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicSongObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicSongObject,iface);
-
- FIXME("(%p, %p, %p): stub\n", This, pStream, pDesc);
-
- return S_OK;
-}
-
-ICOM_VTABLE(IDirectMusicObject) DirectMusicSongObject_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicSongObject_QueryInterface,
- IDirectMusicSongObject_AddRef,
- IDirectMusicSongObject_Release,
- IDirectMusicSongObject_GetDescriptor,
- IDirectMusicSongObject_SetDescriptor,
- IDirectMusicSongObject_ParseDescriptor
-};
-
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicSongObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicSongObject *obj;
-
- TRACE("(%p,%p,%p)\n", lpcGUID, ppObject, pUnkOuter);
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicObject)) {
- obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSongObject));
- if (NULL == obj) {
- *ppObject = (LPDIRECTMUSICOBJECT) NULL;
- return E_OUTOFMEMORY;
- }
- obj->lpVtbl = &DirectMusicSongObject_Vtbl;
- obj->ref = 1;
- /* prepare IPersistStream */
- obj->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSongObjectStream));
- obj->pStream->lpVtbl = &DirectMusicSongObjectStream_Vtbl;
- obj->pStream->ref = 1;
- obj->pStream->pParentObject = obj;
- /* prepare IDirectMusicSong */
- DMUSIC_CreateDirectMusicSong (&IID_IDirectMusicSong, (LPDIRECTMUSICSONG*)&obj->pSong, NULL);
- obj->pSong->pObject = obj;
- *ppObject = (LPDIRECTMUSICOBJECT) obj;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
-}
-
-/*****************************************************************************
- * IDirectMusicSongObjectStream implementation
- */
-/* IDirectMusicSongObjectStream IUnknown part: */
-HRESULT WINAPI IDirectMusicSongObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicSongObjectStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicSongObjectStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicSongObjectStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicSongObjectStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicSongObjectStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicSongObjectStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicSongObjectStream IPersist part: */
-HRESULT WINAPI IDirectMusicSongObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- return E_NOTIMPL;
-}
-
-/* IDirectMusicSongObjectStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicSongObjectStream_IsDirty (LPPERSISTSTREAM iface)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicSongObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
- FIXME(": Loading not implemented yet\n");
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicSongObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicSongObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
- return E_NOTIMPL;
-}
-
-ICOM_VTABLE(IPersistStream) DirectMusicSongObjectStream_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicSongObjectStream_QueryInterface,
- IDirectMusicSongObjectStream_AddRef,
- IDirectMusicSongObjectStream_Release,
- IDirectMusicSongObjectStream_GetClassID,
- IDirectMusicSongObjectStream_IsDirty,
- IDirectMusicSongObjectStream_Load,
- IDirectMusicSongObjectStream_Save,
- IDirectMusicSongObjectStream_GetSizeMax
-};
diff --git a/dlls/dmime/sysextrack.c b/dlls/dmime/sysextrack.c
index ecdf12d..e41dd2e 100644
--- a/dlls/dmime/sysextrack.c
+++ b/dlls/dmime/sysextrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicSysExTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmime_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
@@ -34,35 +26,36 @@
* IDirectMusicSysExTrack implementation
*/
/* IDirectMusicSysExTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicSysExTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicSysExTrack,iface);
+HRESULT WINAPI IDirectMusicSysExTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicSysExTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicSysExTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicSysExTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicSysExTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicSysExTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
+
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicSysExTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicSysExTrack,iface);
+ULONG WINAPI IDirectMusicSysExTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicSysExTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicSysExTrack,iface);
+ULONG WINAPI IDirectMusicSysExTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -71,269 +64,214 @@
return ref;
}
-/* IDirectMusicSysExTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicSysExTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicSysExTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicSysExTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicSysExTrack_IUnknown_QueryInterface,
+ IDirectMusicSysExTrack_IUnknown_AddRef,
+ IDirectMusicSysExTrack_IUnknown_Release
+};
+/* IDirectMusicSysExTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface);
+ return IDirectMusicSysExTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface);
+ return IDirectMusicSysExTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface);
+ return IDirectMusicSysExTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
+{
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSysExTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
+HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
{
- ICOM_THIS(IDirectMusicSysExTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSysExTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
+HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
{
- ICOM_THIS(IDirectMusicSysExTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSysExTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
{
- ICOM_THIS(IDirectMusicSysExTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSysExTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicSysExTrack,iface);
-
+HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSysExTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicSysExTrack,iface);
-
+HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSysExTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicSysExTrack,iface);
+HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
/* didn't find any params */
-
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicSysExTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicSysExTrack,iface);
-
+HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSysExTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicSysExTrack,iface);
-
+HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSysExTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicSysExTrack,iface);
-
+HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicSysExTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicSysExTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicSysExTrack,iface);
-
+HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSysExTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicSysExTrack,iface);
-
+HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSysExTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicSysExTrack,iface);
-
+HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSysExTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicSysExTrack,iface);
-
+HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSysExTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicSysExTrack,iface);
-
+HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicSysExTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicSysExTrack_Track_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicSysExTrack_QueryInterface,
- IDirectMusicSysExTrack_AddRef,
- IDirectMusicSysExTrack_Release,
- IDirectMusicSysExTrack_Init,
- IDirectMusicSysExTrack_InitPlay,
- IDirectMusicSysExTrack_EndPlay,
- IDirectMusicSysExTrack_Play,
- IDirectMusicSysExTrack_GetParam,
- IDirectMusicSysExTrack_SetParam,
- IDirectMusicSysExTrack_IsParamSupported,
- IDirectMusicSysExTrack_AddNotificationType,
- IDirectMusicSysExTrack_RemoveNotificationType,
- IDirectMusicSysExTrack_Clone,
- IDirectMusicSysExTrack_PlayEx,
- IDirectMusicSysExTrack_GetParamEx,
- IDirectMusicSysExTrack_SetParamEx,
- IDirectMusicSysExTrack_Compose,
- IDirectMusicSysExTrack_Join
+ IDirectMusicSysExTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicSysExTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicSysExTrack_IDirectMusicTrack_Release,
+ IDirectMusicSysExTrack_IDirectMusicTrack_Init,
+ IDirectMusicSysExTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicSysExTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicSysExTrack_IDirectMusicTrack_Play,
+ IDirectMusicSysExTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicSysExTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicSysExTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicSysExTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicSysExTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicSysExTrack_IDirectMusicTrack_Clone,
+ IDirectMusicSysExTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicSysExTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicSysExTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicSysExTrack_IDirectMusicTrack_Compose,
+ IDirectMusicSysExTrack_IDirectMusicTrack_Join
};
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicSysExTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicSysExTrack* track;
-
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSysExTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicSysExTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSysExTrackStream));
- track->pStream->lpVtbl = &DirectMusicSysExTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
+/* IDirectMusicSysExTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, PersistStreamVtbl, iface);
+ return IDirectMusicSysExTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicSysExTrackStream implementation
- */
-/* IDirectMusicSysExTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicSysExTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicSysExTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicSysExTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
+ULONG WINAPI IDirectMusicSysExTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, PersistStreamVtbl, iface);
+ return IDirectMusicSysExTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicSysExTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicSysExTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
+ULONG WINAPI IDirectMusicSysExTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicSysExTrack, PersistStreamVtbl, iface);
+ return IDirectMusicSysExTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicSysExTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicSysExTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicSysExTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicSysExTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
+HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
return E_NOTIMPL;
}
-/* IDirectMusicSysExTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicSysExTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
+HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicSysExTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
+HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
FIXME(": Loading not implemented yet\n");
return S_OK;
}
-HRESULT WINAPI IDirectMusicSysExTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
+HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicSysExTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
+HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
return E_NOTIMPL;
}
-ICOM_VTABLE(IPersistStream) DirectMusicSysExTrackStream_Vtbl =
-{
+ICOM_VTABLE(IPersistStream) DirectMusicSysExTrack_PersistStream_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicSysExTrackStream_QueryInterface,
- IDirectMusicSysExTrackStream_AddRef,
- IDirectMusicSysExTrackStream_Release,
- IDirectMusicSysExTrackStream_GetClassID,
- IDirectMusicSysExTrackStream_IsDirty,
- IDirectMusicSysExTrackStream_Load,
- IDirectMusicSysExTrackStream_Save,
- IDirectMusicSysExTrackStream_GetSizeMax
+ IDirectMusicSysExTrack_IPersistStream_QueryInterface,
+ IDirectMusicSysExTrack_IPersistStream_AddRef,
+ IDirectMusicSysExTrack_IPersistStream_Release,
+ IDirectMusicSysExTrack_IPersistStream_GetClassID,
+ IDirectMusicSysExTrack_IPersistStream_IsDirty,
+ IDirectMusicSysExTrack_IPersistStream_Load,
+ IDirectMusicSysExTrack_IPersistStream_Save,
+ IDirectMusicSysExTrack_IPersistStream_GetSizeMax
};
+
+/* for ClassFactory */
+HRESULT WINAPI DMUSIC_CreateDirectMusicSysExTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicSysExTrack* track;
+
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSysExTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ track->UnknownVtbl = &DirectMusicSysExTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicSysExTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicSysExTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicSysExTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicSysExTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
+}
diff --git a/dlls/dmime/tempotrack.c b/dlls/dmime/tempotrack.c
index e357a7a..997c472 100644
--- a/dlls/dmime/tempotrack.c
+++ b/dlls/dmime/tempotrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicTempoTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmime_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
@@ -34,19 +26,21 @@
* IDirectMusicTempoTrack implementation
*/
/* IDirectMusicTempoTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicTempoTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicTempoTrack,iface);
+HRESULT WINAPI IDirectMusicTempoTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicTempoTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicTempoTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicTempoTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicTempoTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicTempoTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
@@ -54,16 +48,14 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicTempoTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicTempoTrack,iface);
+ULONG WINAPI IDirectMusicTempoTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicTempoTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicTempoTrack,iface);
+ULONG WINAPI IDirectMusicTempoTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -72,64 +64,71 @@
return ref;
}
-/* IDirectMusicTempoTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicTempoTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicTempoTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicTempoTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicTempoTrack_IUnknown_QueryInterface,
+ IDirectMusicTempoTrack_IUnknown_AddRef,
+ IDirectMusicTempoTrack_IUnknown_Release
+};
+/* IDirectMusicTempoTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface);
+ return IDirectMusicTempoTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface);
+ return IDirectMusicTempoTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface);
+ return IDirectMusicTempoTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
+{
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTempoTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
+HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
{
- ICOM_THIS(IDirectMusicTempoTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTempoTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
+HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
{
- ICOM_THIS(IDirectMusicTempoTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTempoTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
{
- ICOM_THIS(IDirectMusicTempoTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTempoTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicTempoTrack,iface);
-
+HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTempoTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicTempoTrack,iface);
-
+HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTempoTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicTempoTrack,iface);
+HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
if (IsEqualGUID (rguidType, &GUID_DisableTempo)
@@ -137,208 +136,147 @@
|| IsEqualGUID (rguidType, &GUID_TempoParam)) {
TRACE("param supported\n");
return S_OK;
- }
-
+ }
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicTempoTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicTempoTrack,iface);
-
+HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTempoTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicTempoTrack,iface);
-
+HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTempoTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicTempoTrack,iface);
-
+HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicTempoTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicTempoTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicTempoTrack,iface);
-
+HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTempoTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicTempoTrack,iface);
-
+HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTempoTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicTempoTrack,iface);
-
+HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTempoTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicTempoTrack,iface);
-
+HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTempoTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicTempoTrack,iface);
-
+HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicTempoTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicTempoTrack_Track_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicTempoTrack_QueryInterface,
- IDirectMusicTempoTrack_AddRef,
- IDirectMusicTempoTrack_Release,
- IDirectMusicTempoTrack_Init,
- IDirectMusicTempoTrack_InitPlay,
- IDirectMusicTempoTrack_EndPlay,
- IDirectMusicTempoTrack_Play,
- IDirectMusicTempoTrack_GetParam,
- IDirectMusicTempoTrack_SetParam,
- IDirectMusicTempoTrack_IsParamSupported,
- IDirectMusicTempoTrack_AddNotificationType,
- IDirectMusicTempoTrack_RemoveNotificationType,
- IDirectMusicTempoTrack_Clone,
- IDirectMusicTempoTrack_PlayEx,
- IDirectMusicTempoTrack_GetParamEx,
- IDirectMusicTempoTrack_SetParamEx,
- IDirectMusicTempoTrack_Compose,
- IDirectMusicTempoTrack_Join
+ IDirectMusicTempoTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicTempoTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicTempoTrack_IDirectMusicTrack_Release,
+ IDirectMusicTempoTrack_IDirectMusicTrack_Init,
+ IDirectMusicTempoTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicTempoTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicTempoTrack_IDirectMusicTrack_Play,
+ IDirectMusicTempoTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicTempoTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicTempoTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicTempoTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicTempoTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicTempoTrack_IDirectMusicTrack_Clone,
+ IDirectMusicTempoTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicTempoTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicTempoTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicTempoTrack_IDirectMusicTrack_Compose,
+ IDirectMusicTempoTrack_IDirectMusicTrack_Join
};
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicTempoTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicTempoTrack* track;
-
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicTempoTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicTempoTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicTempoTrackStream));
- track->pStream->lpVtbl = &DirectMusicTempoTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
+/* IDirectMusicTempoTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, PersistStreamVtbl, iface);
+ return IDirectMusicTempoTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicTempoTrackStream implementation
- */
-/* IDirectMusicTempoTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicTempoTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicTempoTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicTempoTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
+ULONG WINAPI IDirectMusicTempoTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, PersistStreamVtbl, iface);
+ return IDirectMusicTempoTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicTempoTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicTempoTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
+ULONG WINAPI IDirectMusicTempoTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicTempoTrack, PersistStreamVtbl, iface);
+ return IDirectMusicTempoTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicTempoTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicTempoTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicTempoTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicTempoTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
+HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
return E_NOTIMPL;
}
-/* IDirectMusicTempoTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicTempoTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
+HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicTempoTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
+HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
FIXME(": Loading not implemented yet\n");
return S_OK;
}
-HRESULT WINAPI IDirectMusicTempoTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
+HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicTempoTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
+HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
return E_NOTIMPL;
}
-ICOM_VTABLE(IPersistStream) DirectMusicTempoTrackStream_Vtbl =
-{
+ICOM_VTABLE(IPersistStream) DirectMusicTempoTrack_PersistStream_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicTempoTrackStream_QueryInterface,
- IDirectMusicTempoTrackStream_AddRef,
- IDirectMusicTempoTrackStream_Release,
- IDirectMusicTempoTrackStream_GetClassID,
- IDirectMusicTempoTrackStream_IsDirty,
- IDirectMusicTempoTrackStream_Load,
- IDirectMusicTempoTrackStream_Save,
- IDirectMusicTempoTrackStream_GetSizeMax
+ IDirectMusicTempoTrack_IPersistStream_QueryInterface,
+ IDirectMusicTempoTrack_IPersistStream_AddRef,
+ IDirectMusicTempoTrack_IPersistStream_Release,
+ IDirectMusicTempoTrack_IPersistStream_GetClassID,
+ IDirectMusicTempoTrack_IPersistStream_IsDirty,
+ IDirectMusicTempoTrack_IPersistStream_Load,
+ IDirectMusicTempoTrack_IPersistStream_Save,
+ IDirectMusicTempoTrack_IPersistStream_GetSizeMax
};
+
+/* for ClassFactory */
+HRESULT WINAPI DMUSIC_CreateDirectMusicTempoTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicTempoTrack* track;
+
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicTempoTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ track->UnknownVtbl = &DirectMusicTempoTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicTempoTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicTempoTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicTempoTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicTempoTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
+}
diff --git a/dlls/dmime/timesigtrack.c b/dlls/dmime/timesigtrack.c
index d3b1678..9e3238e 100644
--- a/dlls/dmime/timesigtrack.c
+++ b/dlls/dmime/timesigtrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicTimeSigTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmime_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
@@ -34,35 +26,36 @@
* IDirectMusicTimeSigTrack implementation
*/
/* IDirectMusicTimeSigTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicTimeSigTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicTimeSigTrack,iface);
+HRESULT WINAPI IDirectMusicTimeSigTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicTimeSigTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicTimeSigTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicTimeSigTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicTimeSigTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
+
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicTimeSigTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicTimeSigTrack,iface);
+ULONG WINAPI IDirectMusicTimeSigTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicTimeSigTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicTimeSigTrack,iface);
+ULONG WINAPI IDirectMusicTimeSigTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -71,64 +64,71 @@
return ref;
}
-/* IDirectMusicTimeSigTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicTimeSigTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicTimeSigTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicTimeSigTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicTimeSigTrack_IUnknown_QueryInterface,
+ IDirectMusicTimeSigTrack_IUnknown_AddRef,
+ IDirectMusicTimeSigTrack_IUnknown_Release
+};
+/* IDirectMusicTimeSigTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface);
+ return IDirectMusicTimeSigTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface);
+ return IDirectMusicTimeSigTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface);
+ return IDirectMusicTimeSigTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
+{
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTimeSigTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
+HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
{
- ICOM_THIS(IDirectMusicTimeSigTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTimeSigTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
+HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
{
- ICOM_THIS(IDirectMusicTimeSigTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTimeSigTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
{
- ICOM_THIS(IDirectMusicTimeSigTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTimeSigTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicTimeSigTrack,iface);
-
+HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTimeSigTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicTimeSigTrack,iface);
-
+HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTimeSigTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicTimeSigTrack,iface);
+HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
if (IsEqualGUID (rguidType, &GUID_DisableTimeSig)
@@ -136,208 +136,147 @@
|| IsEqualGUID (rguidType, &GUID_TimeSignature)) {
TRACE("param supported\n");
return S_OK;
- }
-
+ }
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicTimeSigTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicTimeSigTrack,iface);
-
+HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTimeSigTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicTimeSigTrack,iface);
-
+HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTimeSigTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicTimeSigTrack,iface);
-
+HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicTimeSigTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicTimeSigTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicTimeSigTrack,iface);
-
+HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTimeSigTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicTimeSigTrack,iface);
-
+HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTimeSigTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicTimeSigTrack,iface);
-
+HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTimeSigTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicTimeSigTrack,iface);
-
+HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTimeSigTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicTimeSigTrack,iface);
-
+HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicTimeSigTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicTimeSigTrack_Track_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicTimeSigTrack_QueryInterface,
- IDirectMusicTimeSigTrack_AddRef,
- IDirectMusicTimeSigTrack_Release,
- IDirectMusicTimeSigTrack_Init,
- IDirectMusicTimeSigTrack_InitPlay,
- IDirectMusicTimeSigTrack_EndPlay,
- IDirectMusicTimeSigTrack_Play,
- IDirectMusicTimeSigTrack_GetParam,
- IDirectMusicTimeSigTrack_SetParam,
- IDirectMusicTimeSigTrack_IsParamSupported,
- IDirectMusicTimeSigTrack_AddNotificationType,
- IDirectMusicTimeSigTrack_RemoveNotificationType,
- IDirectMusicTimeSigTrack_Clone,
- IDirectMusicTimeSigTrack_PlayEx,
- IDirectMusicTimeSigTrack_GetParamEx,
- IDirectMusicTimeSigTrack_SetParamEx,
- IDirectMusicTimeSigTrack_Compose,
- IDirectMusicTimeSigTrack_Join
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_Release,
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_Init,
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_Play,
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_Clone,
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_Compose,
+ IDirectMusicTimeSigTrack_IDirectMusicTrack_Join
};
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicTimeSigTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicTimeSigTrack* track;
-
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicTimeSigTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicTimeSigTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicTimeSigTrackStream));
- track->pStream->lpVtbl = &DirectMusicTimeSigTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
+/* IDirectMusicTimeSigTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, PersistStreamVtbl, iface);
+ return IDirectMusicTimeSigTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicTimeSigTrackStream implementation
- */
-/* IDirectMusicTimeSigTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicTimeSigTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicTimeSigTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicTimeSigTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
+ULONG WINAPI IDirectMusicTimeSigTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, PersistStreamVtbl, iface);
+ return IDirectMusicTimeSigTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicTimeSigTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicTimeSigTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
+ULONG WINAPI IDirectMusicTimeSigTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicTimeSigTrack, PersistStreamVtbl, iface);
+ return IDirectMusicTimeSigTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicTimeSigTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicTimeSigTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicTimeSigTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicTimeSigTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
+HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
return E_NOTIMPL;
}
-/* IDirectMusicTimeSigTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicTimeSigTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
+HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicTimeSigTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
+HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
FIXME(": Loading not implemented yet\n");
return S_OK;
}
-HRESULT WINAPI IDirectMusicTimeSigTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
+HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicTimeSigTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
+HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
return E_NOTIMPL;
}
-ICOM_VTABLE(IPersistStream) DirectMusicTimeSigTrackStream_Vtbl =
-{
+ICOM_VTABLE(IPersistStream) DirectMusicTimeSigTrack_PersistStream_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicTimeSigTrackStream_QueryInterface,
- IDirectMusicTimeSigTrackStream_AddRef,
- IDirectMusicTimeSigTrackStream_Release,
- IDirectMusicTimeSigTrackStream_GetClassID,
- IDirectMusicTimeSigTrackStream_IsDirty,
- IDirectMusicTimeSigTrackStream_Load,
- IDirectMusicTimeSigTrackStream_Save,
- IDirectMusicTimeSigTrackStream_GetSizeMax
+ IDirectMusicTimeSigTrack_IPersistStream_QueryInterface,
+ IDirectMusicTimeSigTrack_IPersistStream_AddRef,
+ IDirectMusicTimeSigTrack_IPersistStream_Release,
+ IDirectMusicTimeSigTrack_IPersistStream_GetClassID,
+ IDirectMusicTimeSigTrack_IPersistStream_IsDirty,
+ IDirectMusicTimeSigTrack_IPersistStream_Load,
+ IDirectMusicTimeSigTrack_IPersistStream_Save,
+ IDirectMusicTimeSigTrack_IPersistStream_GetSizeMax
};
+
+/* for ClassFactory */
+HRESULT WINAPI DMUSIC_CreateDirectMusicTimeSigTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicTimeSigTrack* track;
+
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicTimeSigTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ track->UnknownVtbl = &DirectMusicTimeSigTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicTimeSigTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicTimeSigTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicTimeSigTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicTimeSigTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
+}
diff --git a/dlls/dmime/tool.c b/dlls/dmime/tool.c
index e97ca98..cc2c980 100644
--- a/dlls/dmime/tool.c
+++ b/dlls/dmime/tool.c
@@ -1,6 +1,6 @@
/* IDirectMusicTool8 Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,24 +17,13 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmime_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
-
-/* IDirectMusicTool8 IUnknown part: */
-HRESULT WINAPI IDirectMusicTool8Impl_QueryInterface (LPDIRECTMUSICTOOL8 iface, REFIID riid, LPVOID *ppobj)
-{
+/* IDirectMusicTool8Impl IUnknown part: */
+HRESULT WINAPI IDirectMusicTool8Impl_QueryInterface (LPDIRECTMUSICTOOL8 iface, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IDirectMusicTool8Impl,iface);
-
if (IsEqualIID (riid, &IID_IUnknown) ||
IsEqualIID (riid, &IID_IDirectMusicTool) ||
IsEqualIID (riid, &IID_IDirectMusicTool8)) {
@@ -46,15 +35,13 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicTool8Impl_AddRef (LPDIRECTMUSICTOOL8 iface)
-{
+ULONG WINAPI IDirectMusicTool8Impl_AddRef (LPDIRECTMUSICTOOL8 iface) {
ICOM_THIS(IDirectMusicTool8Impl,iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicTool8Impl_Release (LPDIRECTMUSICTOOL8 iface)
-{
+ULONG WINAPI IDirectMusicTool8Impl_Release (LPDIRECTMUSICTOOL8 iface) {
ICOM_THIS(IDirectMusicTool8Impl,iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
@@ -64,73 +51,51 @@
return ref;
}
-/* IDirectMusicTool8 IDirectMusicTool part: */
-HRESULT WINAPI IDirectMusicTool8Impl_Init (LPDIRECTMUSICTOOL8 iface, IDirectMusicGraph* pGraph)
-{
+/* IDirectMusicTool8Impl IDirectMusicTool part: */
+HRESULT WINAPI IDirectMusicTool8Impl_Init (LPDIRECTMUSICTOOL8 iface, IDirectMusicGraph* pGraph) {
ICOM_THIS(IDirectMusicTool8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pGraph);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTool8Impl_GetMsgDeliveryType (LPDIRECTMUSICTOOL8 iface, DWORD* pdwDeliveryType)
-{
+HRESULT WINAPI IDirectMusicTool8Impl_GetMsgDeliveryType (LPDIRECTMUSICTOOL8 iface, DWORD* pdwDeliveryType) {
ICOM_THIS(IDirectMusicTool8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pdwDeliveryType);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTool8Impl_GetMediaTypeArraySize (LPDIRECTMUSICTOOL8 iface, DWORD* pdwNumElements)
-{
+HRESULT WINAPI IDirectMusicTool8Impl_GetMediaTypeArraySize (LPDIRECTMUSICTOOL8 iface, DWORD* pdwNumElements) {
ICOM_THIS(IDirectMusicTool8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pdwNumElements);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTool8Impl_GetMediaTypes (LPDIRECTMUSICTOOL8 iface, DWORD** padwMediaTypes, DWORD dwNumElements)
-{
+HRESULT WINAPI IDirectMusicTool8Impl_GetMediaTypes (LPDIRECTMUSICTOOL8 iface, DWORD** padwMediaTypes, DWORD dwNumElements) {
ICOM_THIS(IDirectMusicTool8Impl,iface);
-
FIXME("(%p, %p, %ld): stub\n", This, padwMediaTypes, dwNumElements);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTool8Impl_ProcessPMsg (LPDIRECTMUSICTOOL8 iface, IDirectMusicPerformance* pPerf, DMUS_PMSG* pPMSG)
-{
+HRESULT WINAPI IDirectMusicTool8Impl_ProcessPMsg (LPDIRECTMUSICTOOL8 iface, IDirectMusicPerformance* pPerf, DMUS_PMSG* pPMSG) {
ICOM_THIS(IDirectMusicTool8Impl,iface);
-
FIXME("(%p, %p, %p): stub\n", This, pPerf, pPMSG);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicTool8Impl_Flush (LPDIRECTMUSICTOOL8 iface, IDirectMusicPerformance* pPerf, DMUS_PMSG* pPMSG, REFERENCE_TIME rtTime)
-{
+HRESULT WINAPI IDirectMusicTool8Impl_Flush (LPDIRECTMUSICTOOL8 iface, IDirectMusicPerformance* pPerf, DMUS_PMSG* pPMSG, REFERENCE_TIME rtTime) {
ICOM_THIS(IDirectMusicTool8Impl,iface);
-
FIXME("(%p, %p, %p, %lli): stub\n", This, pPerf, pPMSG, rtTime);
-
return S_OK;
}
-/* IDirectMusicTool8 IDirectMusicTool8 part: */
-HRESULT WINAPI IDirectMusicTool8Impl_Clone (LPDIRECTMUSICTOOL8 iface, IDirectMusicTool** ppTool)
-{
+/* IDirectMusicTool8Impl IDirectMusicTool8 part: */
+HRESULT WINAPI IDirectMusicTool8Impl_Clone (LPDIRECTMUSICTOOL8 iface, IDirectMusicTool** ppTool) {
ICOM_THIS(IDirectMusicTool8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, ppTool);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTool8) DirectMusicTool8_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTool8) DirectMusicTool8_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
IDirectMusicTool8Impl_QueryInterface,
IDirectMusicTool8Impl_AddRef,
@@ -145,13 +110,16 @@
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicTool (LPCGUID lpcGUID, LPDIRECTMUSICTOOL8 *ppDMTool, LPUNKNOWN pUnkOuter)
-{
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicComposer)) {
- FIXME("Not yet\n");
- return E_NOINTERFACE;
- }
- WARN("No interface found\n");
+HRESULT WINAPI DMUSIC_CreateDirectMusicobjImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicTool8Impl* obj;
- return E_NOINTERFACE;
+ obj = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicTool8Impl));
+ if (NULL == obj) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ obj->lpVtbl = &DirectMusicTool8_Vtbl;
+ obj->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicTool8Impl_QueryInterface ((LPDIRECTMUSICTOOL8)obj, lpcGUID, ppobj);
}
diff --git a/dlls/dmime/version.rc b/dlls/dmime/version.rc
index a885e99..65d5c2f 100644
--- a/dlls/dmime/version.rc
+++ b/dlls/dmime/version.rc
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc <rok.mandeljc@gimb.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -18,10 +18,10 @@
#define WINE_FILEDESCRIPTION_STR "Wine DirectMusic Interactive Engine"
#define WINE_FILENAME_STR "dmime.dll"
-#define WINE_FILEVERSION 4,8,1,881
-#define WINE_FILEVERSION_STR "4.8.1.881"
-#define WINE_PRODUCTVERSION 4,8,1,881
-#define WINE_PRODUCTVERSION_STR "4.8"
+#define WINE_FILEVERSION 4,9,0,900
+#define WINE_FILEVERSION_STR "4.9.0.900"
+#define WINE_PRODUCTVERSION 4,9,0,900
+#define WINE_PRODUCTVERSION_STR "4.9"
#define WINE_PRODUCTNAME_STR "DirectX"
#include "wine/wine_common_ver.rc"
diff --git a/dlls/dmime/wavetrack.c b/dlls/dmime/wavetrack.c
index 59a352e..2018c77 100644
--- a/dlls/dmime/wavetrack.c
+++ b/dlls/dmime/wavetrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicWaveTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmime_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
@@ -34,19 +26,21 @@
* IDirectMusicWaveTrack implementation
*/
/* IDirectMusicWaveTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicWaveTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicWaveTrack,iface);
+HRESULT WINAPI IDirectMusicWaveTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicWaveTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicWaveTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicWaveTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicWaveTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicWaveTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
@@ -54,16 +48,14 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicWaveTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicWaveTrack,iface);
+ULONG WINAPI IDirectMusicWaveTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicWaveTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicWaveTrack,iface);
+ULONG WINAPI IDirectMusicWaveTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -72,64 +64,71 @@
return ref;
}
-/* IDirectMusicWaveTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicWaveTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicWaveTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicWaveTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicWaveTrack_IUnknown_QueryInterface,
+ IDirectMusicWaveTrack_IUnknown_AddRef,
+ IDirectMusicWaveTrack_IUnknown_Release
+};
+/* IDirectMusicWaveTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface);
+ return IDirectMusicWaveTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface);
+ return IDirectMusicWaveTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface);
+ return IDirectMusicWaveTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
+{
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicWaveTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
+HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
{
- ICOM_THIS(IDirectMusicWaveTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicWaveTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
+HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
{
- ICOM_THIS(IDirectMusicWaveTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicWaveTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
{
- ICOM_THIS(IDirectMusicWaveTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicWaveTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicWaveTrack,iface);
-
+HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicWaveTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicWaveTrack,iface);
-
+HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicWaveTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicWaveTrack,iface);
+HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
if (IsEqualGUID (rguidType, &GUID_Disable_Auto_Download)
@@ -138,208 +137,147 @@
|| IsEqualGUID (rguidType, &GUID_Enable_Auto_Download)) {
TRACE("param supported\n");
return S_OK;
- }
-
+ }
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicWaveTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicWaveTrack,iface);
-
+HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicWaveTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicWaveTrack,iface);
-
+HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicWaveTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicWaveTrack,iface);
-
+HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicWaveTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicWaveTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicWaveTrack,iface);
-
+HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicWaveTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicWaveTrack,iface);
-
+HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicWaveTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicWaveTrack,iface);
-
+HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicWaveTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicWaveTrack,iface);
-
+HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicWaveTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicWaveTrack,iface);
-
+HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicWaveTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicWaveTrack_Track_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicWaveTrack_QueryInterface,
- IDirectMusicWaveTrack_AddRef,
- IDirectMusicWaveTrack_Release,
- IDirectMusicWaveTrack_Init,
- IDirectMusicWaveTrack_InitPlay,
- IDirectMusicWaveTrack_EndPlay,
- IDirectMusicWaveTrack_Play,
- IDirectMusicWaveTrack_GetParam,
- IDirectMusicWaveTrack_SetParam,
- IDirectMusicWaveTrack_IsParamSupported,
- IDirectMusicWaveTrack_AddNotificationType,
- IDirectMusicWaveTrack_RemoveNotificationType,
- IDirectMusicWaveTrack_Clone,
- IDirectMusicWaveTrack_PlayEx,
- IDirectMusicWaveTrack_GetParamEx,
- IDirectMusicWaveTrack_SetParamEx,
- IDirectMusicWaveTrack_Compose,
- IDirectMusicWaveTrack_Join
+ IDirectMusicWaveTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicWaveTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicWaveTrack_IDirectMusicTrack_Release,
+ IDirectMusicWaveTrack_IDirectMusicTrack_Init,
+ IDirectMusicWaveTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicWaveTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicWaveTrack_IDirectMusicTrack_Play,
+ IDirectMusicWaveTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicWaveTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicWaveTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicWaveTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicWaveTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicWaveTrack_IDirectMusicTrack_Clone,
+ IDirectMusicWaveTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicWaveTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicWaveTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicWaveTrack_IDirectMusicTrack_Compose,
+ IDirectMusicWaveTrack_IDirectMusicTrack_Join
};
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicWaveTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicWaveTrack* track;
-
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicWaveTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicWaveTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicWaveTrackStream));
- track->pStream->lpVtbl = &DirectMusicWaveTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
+/* IDirectMusicWaveTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, PersistStreamVtbl, iface);
+ return IDirectMusicWaveTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicWaveTrackStream implementation
- */
-/* IDirectMusicWaveTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicWaveTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicWaveTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicWaveTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
+ULONG WINAPI IDirectMusicWaveTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, PersistStreamVtbl, iface);
+ return IDirectMusicWaveTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicWaveTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicWaveTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
+ULONG WINAPI IDirectMusicWaveTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicWaveTrack, PersistStreamVtbl, iface);
+ return IDirectMusicWaveTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicWaveTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicWaveTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicWaveTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicWaveTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
+HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
return E_NOTIMPL;
}
-/* IDirectMusicWaveTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicWaveTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
+HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicWaveTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
+HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
FIXME(": Loading not implemented yet\n");
return S_OK;
}
-HRESULT WINAPI IDirectMusicWaveTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
+HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicWaveTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
+HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
return E_NOTIMPL;
}
-ICOM_VTABLE(IPersistStream) DirectMusicWaveTrackStream_Vtbl =
-{
+ICOM_VTABLE(IPersistStream) DirectMusicWaveTrack_PersistStream_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicWaveTrackStream_QueryInterface,
- IDirectMusicWaveTrackStream_AddRef,
- IDirectMusicWaveTrackStream_Release,
- IDirectMusicWaveTrackStream_GetClassID,
- IDirectMusicWaveTrackStream_IsDirty,
- IDirectMusicWaveTrackStream_Load,
- IDirectMusicWaveTrackStream_Save,
- IDirectMusicWaveTrackStream_GetSizeMax
+ IDirectMusicWaveTrack_IPersistStream_QueryInterface,
+ IDirectMusicWaveTrack_IPersistStream_AddRef,
+ IDirectMusicWaveTrack_IPersistStream_Release,
+ IDirectMusicWaveTrack_IPersistStream_GetClassID,
+ IDirectMusicWaveTrack_IPersistStream_IsDirty,
+ IDirectMusicWaveTrack_IPersistStream_Load,
+ IDirectMusicWaveTrack_IPersistStream_Save,
+ IDirectMusicWaveTrack_IPersistStream_GetSizeMax
};
+
+/* for ClassFactory */
+HRESULT WINAPI DMUSIC_CreateDirectMusicWaveTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicWaveTrack* track;
+
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicWaveTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ track->UnknownVtbl = &DirectMusicWaveTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicWaveTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicWaveTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicWaveTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicWaveTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
+}
diff --git a/dlls/dmloader/container.c b/dlls/dmloader/container.c
index 9fd1438..af3e0c2 100644
--- a/dlls/dmloader/container.c
+++ b/dlls/dmloader/container.c
@@ -1,6 +1,6 @@
/* IDirectMusicContainer
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,43 +17,49 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmloader_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmloader);
+WINE_DECLARE_DEBUG_CHANNEL(dmfile);
-/* IDirectMusicContainer IUnknown parts follow: */
-HRESULT WINAPI IDirectMusicContainerImpl_QueryInterface (LPDIRECTMUSICCONTAINER iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicContainerImpl,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicContainer)) {
- IDirectMusicContainerImpl_AddRef(iface);
- *ppobj = This;
+/*****************************************************************************
+ * IDirectMusicContainerImpl implementation
+ */
+/* IDirectMusicContainerImpl IUnknown part: */
+HRESULT WINAPI IDirectMusicContainerImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicContainerImpl, UnknownVtbl, iface);
+
+ TRACE("(%p, %s, %p)\n", This, debugstr_guid(riid), ppobj);
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPVOID)&This->UnknownVtbl;
+ IDirectMusicContainerImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicContainer)) {
+ *ppobj = (LPVOID)&This->ContainerVtbl;
+ IDirectMusicContainerImpl_IDirectMusicContainer_AddRef ((LPDIRECTMUSICCONTAINER)&This->ContainerVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
+ *ppobj = (LPVOID)&This->ObjectVtbl;
+ IDirectMusicContainerImpl_IDirectMusicObject_AddRef ((LPDIRECTMUSICOBJECT)&This->ObjectVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IPersistStream)) {
+ *ppobj = (LPVOID)&This->PersistStreamVtbl;
+ IDirectMusicContainerImpl_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
+
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicContainerImpl_AddRef (LPDIRECTMUSICCONTAINER iface)
-{
- ICOM_THIS(IDirectMusicContainerImpl,iface);
+ULONG WINAPI IDirectMusicContainerImpl_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicContainerImpl, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicContainerImpl_Release (LPDIRECTMUSICCONTAINER iface)
-{
- ICOM_THIS(IDirectMusicContainerImpl,iface);
+ULONG WINAPI IDirectMusicContainerImpl_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicContainerImpl, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -62,235 +68,749 @@
return ref;
}
+ICOM_VTABLE(IUnknown) DirectMusicContainer_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicContainerImpl_IUnknown_QueryInterface,
+ IDirectMusicContainerImpl_IUnknown_AddRef,
+ IDirectMusicContainerImpl_IUnknown_Release
+};
+
/* IDirectMusicContainer Interface follow: */
-HRESULT WINAPI IDirectMusicContainerImpl_EnumObject (LPDIRECTMUSICCONTAINER iface, REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc, WCHAR* pwszAlias)
-{
- ICOM_THIS(IDirectMusicContainerImpl,iface);
+HRESULT WINAPI IDirectMusicContainerImpl_IDirectMusicContainer_QueryInterface (LPDIRECTMUSICCONTAINER iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicContainerImpl, ContainerVtbl, iface);
+ return IDirectMusicContainerImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
- FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidClass), dwIndex, pDesc, pwszAlias);
+ULONG WINAPI IDirectMusicContainerImpl_IDirectMusicContainer_AddRef (LPDIRECTMUSICCONTAINER iface) {
+ ICOM_THIS_MULTI(IDirectMusicContainerImpl, ContainerVtbl, iface);
+ return IDirectMusicContainerImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicContainerImpl_IDirectMusicContainer_Release (LPDIRECTMUSICCONTAINER iface) {
+ ICOM_THIS_MULTI(IDirectMusicContainerImpl, ContainerVtbl, iface);
+ return IDirectMusicContainerImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicContainerImpl_IDirectMusicContainer_EnumObject (LPDIRECTMUSICCONTAINER iface, REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc, WCHAR* pwszAlias) {
+ ICOM_THIS_MULTI(IDirectMusicContainerImpl, ContainerVtbl, iface);
+ DWORD i = -1; /* index ;) ... must be -1 since dwIndex can be 0 */
+ struct list *listEntry;
+ LPDMUS_PRIVATE_CONTAINED_OBJECT_ENTRY objectEntry;
+
+ TRACE("(%p, %s, %ld, %p, %p)\n", This, debugstr_guid(rguidClass), dwIndex, pDesc, pwszAlias);
+ LIST_FOR_EACH (listEntry, &This->ObjectsList) {
+ objectEntry = LIST_ENTRY(listEntry, DMUS_PRIVATE_CONTAINED_OBJECT_ENTRY, entry);
+ if (IsEqualGUID(rguidClass, &GUID_DirectMusicAllTypes)) i++;
+ else if (IsEqualGUID(rguidClass, &objectEntry->pDesc->guidClass)) i++;
+
+ if (i == dwIndex) {
+ if (pDesc)
+ memcpy (pDesc, objectEntry->pDesc, sizeof(DMUS_OBJECTDESC));
+ if (pwszAlias && objectEntry->wszAlias) {
+ strncpyW (pwszAlias, objectEntry->wszAlias, DMUS_MAX_NAME);
+ if (strlenW (objectEntry->wszAlias) > DMUS_MAX_NAME)
+ return DMUS_S_STRING_TRUNCATED;
+ }
+
+ return S_OK;
+ }
+ }
+
+ return S_FALSE;
+}
+
+ICOM_VTABLE(IDirectMusicContainer) DirectMusicContainer_Container_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicContainerImpl_IDirectMusicContainer_QueryInterface,
+ IDirectMusicContainerImpl_IDirectMusicContainer_AddRef,
+ IDirectMusicContainerImpl_IDirectMusicContainer_Release,
+ IDirectMusicContainerImpl_IDirectMusicContainer_EnumObject
+};
+
+/* IDirectMusicContainerImpl IDirectMusicObject part: */
+HRESULT WINAPI IDirectMusicContainerImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicContainerImpl, ObjectVtbl, iface);
+ return IDirectMusicContainerImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicContainerImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicContainerImpl, ObjectVtbl, iface);
+ return IDirectMusicContainerImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicContainerImpl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicContainerImpl, ObjectVtbl, iface);
+ return IDirectMusicContainerImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicContainerImpl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicContainerImpl, ObjectVtbl, iface);
+ TRACE("(%p, %p)\n", This, pDesc);
+ /* I think we shouldn't return pointer here since then values can be changed; it'd be a mess */
+ memcpy (pDesc, This->pDesc, This->pDesc->dwSize);
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicContainerImpl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicContainerImpl, ObjectVtbl, iface);
+ TRACE("(%p, %p): setting descriptor:\n", This, pDesc);
+ if (TRACE_ON(dmloader)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
+ }
+
+ /* According to MSDN, we should copy only given values, not whole struct */
+ if (pDesc->dwValidData & DMUS_OBJ_OBJECT)
+ memcpy (&This->pDesc->guidObject, &pDesc->guidObject, sizeof (pDesc->guidObject));
+ if (pDesc->dwValidData & DMUS_OBJ_CLASS)
+ memcpy (&This->pDesc->guidClass, &pDesc->guidClass, sizeof (pDesc->guidClass));
+ if (pDesc->dwValidData & DMUS_OBJ_NAME)
+ strncpyW (This->pDesc->wszName, pDesc->wszName, DMUS_MAX_NAME);
+ if (pDesc->dwValidData & DMUS_OBJ_CATEGORY)
+ strncpyW (This->pDesc->wszCategory, pDesc->wszCategory, DMUS_MAX_CATEGORY);
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME)
+ strncpyW (This->pDesc->wszFileName, pDesc->wszFileName, DMUS_MAX_FILENAME);
+ if (pDesc->dwValidData & DMUS_OBJ_VERSION)
+ memcpy (&This->pDesc->vVersion, &pDesc->vVersion, sizeof (pDesc->vVersion));
+ if (pDesc->dwValidData & DMUS_OBJ_DATE)
+ memcpy (&This->pDesc->ftDate, &pDesc->ftDate, sizeof (pDesc->ftDate));
+ if (pDesc->dwValidData & DMUS_OBJ_MEMORY) {
+ memcpy (&This->pDesc->llMemLength, &pDesc->llMemLength, sizeof (pDesc->llMemLength));
+ memcpy (This->pDesc->pbMemData, pDesc->pbMemData, sizeof (pDesc->pbMemData));
+ }
+ if (pDesc->dwValidData & DMUS_OBJ_STREAM) {
+ /* according to MSDN, we copy the stream */
+ IStream_Clone (pDesc->pStream, &This->pDesc->pStream);
+ }
+
+ /* add new flags */
+ This->pDesc->dwValidData |= pDesc->dwValidData;
return S_OK;
}
-ICOM_VTABLE(IDirectMusicContainer) DirectMusicContainer_Vtbl =
-{
+HRESULT WINAPI IDirectMusicContainerImpl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicContainerImpl, ObjectVtbl, iface);
+ DMUS_PRIVATE_CHUNK Chunk;
+ DWORD StreamSize, StreamCount, ListSize[1], ListCount[1];
+ LARGE_INTEGER liMove; /* used when skipping chunks */
+
+ TRACE("(%p, %p, %p)\n", This, pStream, pDesc);
+
+ /* FIXME: should this be determined from stream? */
+ pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&pDesc->guidClass, &CLSID_DirectMusicContainer, sizeof(CLSID));
+
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_RIFF: {
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ StreamSize = Chunk.dwSize - sizeof(FOURCC);
+ StreamCount = 0;
+ if (Chunk.fccID == DMUS_FOURCC_CONTAINER_FORM) {
+ TRACE_(dmfile)(": container form\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ StreamCount += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case DMUS_FOURCC_GUID_CHUNK: {
+ TRACE_(dmfile)(": GUID chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read (pStream, &pDesc->guidObject, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_VERSION_CHUNK: {
+ TRACE_(dmfile)(": version chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read (pStream, &pDesc->vVersion, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CATEGORY_CHUNK: {
+ TRACE_(dmfile)(": category chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_CATEGORY;
+ IStream_Read (pStream, pDesc->wszCategory, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[0] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[0] = 0;
+ switch (Chunk.fccID) {
+ /* evil M$ UNFO list, which can (!?) contain INFO elements */
+ case DMUS_FOURCC_UNFO_LIST: {
+ TRACE_(dmfile)(": UNFO list\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
+ (though strings seem to be valid unicode) */
+ case mmioFOURCC('I','N','A','M'):
+ case DMUS_FOURCC_UNAM_CHUNK: {
+ TRACE_(dmfile)(": name chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_NAME;
+ IStream_Read (pStream, pDesc->wszName, Chunk.dwSize, NULL);
+ break;
+ }
+ case mmioFOURCC('I','A','R','T'):
+ case DMUS_FOURCC_UART_CHUNK: {
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','O','P'):
+ case DMUS_FOURCC_UCOP_CHUNK: {
+ TRACE_(dmfile)(": copyright chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','S','B','J'):
+ case DMUS_FOURCC_USBJ_CHUNK: {
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','M','T'):
+ case DMUS_FOURCC_UCMT_CHUNK: {
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
+ } while (StreamCount < StreamSize);
+ break;
+ } else {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = StreamSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+
+ TRACE_(dmfile)(": reading finished\n");
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return DMUS_E_INVALIDFILE;
+ }
+ }
+
+ TRACE(": returning descriptor:\n");
+ if (TRACE_ON(dmloader)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
+ }
+
+ return S_OK;
+}
+
+ICOM_VTABLE(IDirectMusicObject) DirectMusicContainer_Object_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicContainerImpl_QueryInterface,
- IDirectMusicContainerImpl_AddRef,
- IDirectMusicContainerImpl_Release,
- IDirectMusicContainerImpl_EnumObject
+ IDirectMusicContainerImpl_IDirectMusicObject_QueryInterface,
+ IDirectMusicContainerImpl_IDirectMusicObject_AddRef,
+ IDirectMusicContainerImpl_IDirectMusicObject_Release,
+ IDirectMusicContainerImpl_IDirectMusicObject_GetDescriptor,
+ IDirectMusicContainerImpl_IDirectMusicObject_SetDescriptor,
+ IDirectMusicContainerImpl_IDirectMusicObject_ParseDescriptor
+};
+
+/* IDirectMusicContainerImpl IPersistStream part: */
+HRESULT WINAPI IDirectMusicContainerImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicContainerImpl, PersistStreamVtbl, iface);
+ return IDirectMusicContainerImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicContainerImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicContainerImpl, PersistStreamVtbl, iface);
+ return IDirectMusicContainerImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicContainerImpl_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicContainerImpl, PersistStreamVtbl, iface);
+ return IDirectMusicContainerImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicContainerImpl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicContainerImpl_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicContainerImpl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
+ ICOM_THIS_MULTI(IDirectMusicContainerImpl, PersistStreamVtbl, iface);
+
+ DMUS_PRIVATE_CHUNK Chunk;
+ DWORD StreamSize, StreamCount, ListSize[3], ListCount[3];
+ LARGE_INTEGER liMove; /* used when skipping chunks */
+ ULARGE_INTEGER uliPos; /* needed when dealing with RIFF chunks */
+ LPDIRECTMUSICGETLOADER pGetLoader;
+ LPDIRECTMUSICLOADER pLoader;
+
+ /* get loader since it will be needed later */
+ IStream_QueryInterface (pStm, &IID_IDirectMusicGetLoader, (LPVOID*)&pGetLoader);
+ IDirectMusicGetLoader_GetLoader (pGetLoader, &pLoader);
+ IDirectMusicGetLoader_Release (pGetLoader);
+
+ IStream_AddRef (pStm); /* add count for later references */
+
+ IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_RIFF: {
+ IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ StreamSize = Chunk.dwSize - sizeof(FOURCC);
+ StreamCount = 0;
+ switch (Chunk.fccID) {
+ case DMUS_FOURCC_CONTAINER_FORM: {
+ TRACE_(dmfile)(": container form\n");
+ do {
+ IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ StreamCount += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case DMUS_FOURCC_CONTAINER_CHUNK: {
+ TRACE_(dmfile)(": container header chunk\n");
+ This->pHeader = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, Chunk.dwSize);
+ IStream_Read (pStm, This->pHeader, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_GUID_CHUNK: {
+ TRACE_(dmfile)(": GUID chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read (pStm, &This->pDesc->guidObject, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_VERSION_CHUNK: {
+ TRACE_(dmfile)(": version chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read (pStm, &This->pDesc->vVersion, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CATEGORY_CHUNK: {
+ TRACE_(dmfile)(": category chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_CATEGORY;
+ IStream_Read (pStm, This->pDesc->wszCategory, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[0] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[0] = 0;
+ switch (Chunk.fccID) {
+ case DMUS_FOURCC_UNFO_LIST: {
+ TRACE_(dmfile)(": UNFO list\n");
+ do {
+ IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
+ (though strings seem to be valid unicode) */
+ case mmioFOURCC('I','N','A','M'):
+ case DMUS_FOURCC_UNAM_CHUNK: {
+ TRACE_(dmfile)(": name chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_NAME;
+ IStream_Read (pStm, This->pDesc->wszName, Chunk.dwSize, NULL);
+ break;
+ }
+ case mmioFOURCC('I','A','R','T'):
+ case DMUS_FOURCC_UART_CHUNK: {
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','O','P'):
+ case DMUS_FOURCC_UCOP_CHUNK: {
+ TRACE_(dmfile)(": copyright chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','S','B','J'):
+ case DMUS_FOURCC_USBJ_CHUNK: {
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','M','T'):
+ case DMUS_FOURCC_UCMT_CHUNK: {
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ case DMUS_FOURCC_CONTAINED_OBJECTS_LIST: {
+ TRACE_(dmfile)(": contained objects list\n");
+ do {
+ IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_LIST: {
+ IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[1] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[1] = 0;
+ switch (Chunk.fccID) {
+ case DMUS_FOURCC_CONTAINED_OBJECT_LIST: {
+ DMUS_IO_CONTAINED_OBJECT_HEADER tmpObjectHeader; /* temporary structure */
+ LPDMUS_PRIVATE_CONTAINED_OBJECT_ENTRY newEntry;
+ TRACE_(dmfile)(": contained object list\n");
+ memset (&tmpObjectHeader, 0, sizeof(DMUS_IO_CONTAINED_OBJECT_HEADER));
+ newEntry = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(DMUS_PRIVATE_CONTAINED_OBJECT_ENTRY));
+ newEntry->pDesc = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(newEntry->pDesc);
+ do {
+ IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[1] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case DMUS_FOURCC_CONTAINED_ALIAS_CHUNK: {
+ TRACE_(dmfile)(": alias chunk\n");
+ newEntry->wszAlias = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, Chunk.dwSize);
+ IStream_Read (pStm, newEntry->wszAlias, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CONTAINED_OBJECT_CHUNK: {
+ TRACE_(dmfile)(": contained object header chunk\n");
+ IStream_Read (pStm, &tmpObjectHeader, Chunk.dwSize, NULL);
+ /* copy guidClass */
+ newEntry->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&newEntry->pDesc->guidClass, &tmpObjectHeader.guidClassID, sizeof(GUID));
+ break;
+ }
+ /* now read data... it may be safe to read everything after object header chunk,
+ but I'm not comfortable with MSDN's "the header is *normally* followed by ..." */
+ case FOURCC_LIST: {
+ IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[2] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[2] = 0;
+ switch (Chunk.fccID) {
+ case DMUS_FOURCC_REF_LIST: {
+ DMUS_IO_REFERENCE tmpReferenceHeader; /* temporary structure */
+ TRACE_(dmfile)(": reference list\n");
+ memset (&tmpReferenceHeader, 0, sizeof(DMUS_IO_REFERENCE));
+ do {
+ IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[2] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case DMUS_FOURCC_REF_CHUNK: {
+ TRACE_(dmfile)(": reference header chunk\n");
+ IStream_Read (pStm, &tmpReferenceHeader, Chunk.dwSize, NULL);
+ /* copy retrieved data to DMUS_OBJECTDESC */
+ if (!IsEqualCLSID (&newEntry->pDesc->guidClass, &tmpReferenceHeader.guidClassID)) ERR(": object header declares different CLSID than reference header\n");
+ /* no need since it's already there */
+ /*memcpy (&newEntry->pDesc->guidClass, &tempReferenceHeader.guidClassID, sizeof(GUID)); */
+ newEntry->pDesc->dwValidData = tmpReferenceHeader.dwValidData;
+ break;
+ }
+ case DMUS_FOURCC_GUID_CHUNK: {
+ TRACE_(dmfile)(": guid chunk\n");
+ /* no need to set flags since they were copied from reference header */
+ IStream_Read (pStm, &newEntry->pDesc->guidObject, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_DATE_CHUNK: {
+ TRACE_(dmfile)(": file date chunk\n");
+ /* no need to set flags since they were copied from reference header */
+ IStream_Read (pStm, &newEntry->pDesc->ftDate, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_NAME_CHUNK: {
+ TRACE_(dmfile)(": name chunk\n");
+ /* no need to set flags since they were copied from reference header */
+ IStream_Read (pStm, newEntry->pDesc->wszName, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_FILE_CHUNK: {
+ TRACE_(dmfile)(": file name chunk\n");
+ /* no need to set flags since they were copied from reference header */
+ IStream_Read (pStm, newEntry->pDesc->wszFileName, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CATEGORY_CHUNK: {
+ TRACE_(dmfile)(": category chunk\n");
+ /* no need to set flags since they were copied from reference header */
+ IStream_Read (pStm, newEntry->pDesc->wszCategory, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_VERSION_CHUNK: {
+ TRACE_(dmfile)(": version chunk\n");
+ /* no need to set flags since they were copied from reference header */
+ IStream_Read (pStm, &newEntry->pDesc->vVersion, Chunk.dwSize, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip this chunk */
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[2] = %ld < ListSize[2] = %ld\n", ListCount[2], ListSize[2]);
+ } while (ListCount[2] < ListSize[2]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ return E_FAIL;
+ }
+ }
+ break;
+ }
+ case FOURCC_RIFF: {
+ IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ if (IS_VALID_DMFORM (Chunk.fccID)) {
+ TRACE_(dmfile)(": valid DMUSIC form\n");
+ /* we'll have to skip whole RIFF chunk after SetObject call */
+ #define RIFF_LOADING /* effective hack ;) */
+ liMove.QuadPart = 0;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, &uliPos);
+ uliPos.QuadPart += (Chunk.dwSize - sizeof(FOURCC)); /* set uliPos at the end of RIFF chunk */
+ /* move at the beginning of RIFF chunk */
+ liMove.QuadPart = 0;
+ liMove.QuadPart -= (sizeof(FOURCC)+sizeof(DWORD)+sizeof(FOURCC));
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ /* put pointer to stream in descriptor */
+ newEntry->pDesc->dwValidData |= DMUS_OBJ_STREAM;
+ /* this is not how M$ does it (according to my tests), but
+ who says their way is better? */
+ /* *newEntry->pDesc->pStream = pStm; */
+ /* *IStream_AddRef (pStm); */ /* reference increased */
+ IStream_Clone (pStm, &newEntry->pDesc->pStream);
+ /* wait till we get on the end of object list */
+ } else {
+ TRACE_(dmfile)(": invalid DMUSIC form (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ /* FIXME: should we return E_FAIL? */
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[1] = %ld < ListSize[1] = %ld\n", ListCount[1], ListSize[1]);
+ } while (ListCount[1] < ListSize[1]);
+ /* SetObject: this will fill descriptor with additional info
+ and add alias in loader's cache */
+ IDirectMusicLoader_SetObject (pLoader, newEntry->pDesc);
+ /* my tests show tha we shouldn't return any info on stream when calling EnumObject... sigh... which
+ means we have to clear these fields to be M$ compliant; but funny thing is, we return filename
+ when loading from reference... M$ sux */
+ /* FIXME: test what happens when we load with DMUS_OBJ_MEMORY */
+ /* if we have loaded through RIFF chunk, skip it and clear stream flag */
+ #ifdef RIFF_LOADING
+ liMove.QuadPart = uliPos.QuadPart;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_SET, NULL);
+ newEntry->pDesc->dwValidData &= ~DMUS_OBJ_STREAM; /* clear flag */
+ newEntry->pDesc->pStream = NULL;
+ #undef RIFF_LOADING
+ #endif
+ /* add entry to list of objects */
+ list_add_tail (&This->ObjectsList, &newEntry->entry);
+
+ /* now, if DMUS_CONTAINER_NOLOADS is not set, we are supposed to load contained objects;
+ so when we call GetObject later, they'll already be in cache */
+ if (!(This->pHeader->dwFlags & DMUS_CONTAINER_NOLOADS)) {
+ IDirectMusicObject* pObject;
+ TRACE_(dmfile)(": DMUS_CONTAINER_NOLOADS not set\n");
+ /* native container and builtin loader show that we use IDirectMusicObject here */
+ if (SUCCEEDED(IDirectMusicLoader_GetObject (pLoader, newEntry->pDesc, &IID_IDirectMusicObject, (LPVOID*)&pObject)))
+ IDirectMusicObject_Release (pObject);
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
+ } while (StreamCount < StreamSize);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = StreamSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+ }
+ TRACE_(dmfile)(": reading finished\n");
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+ }
+
+ IDirectMusicLoader_Release (pLoader); /* release loader */
+
+#if 0
+ /* DEBUG: dumps whole container object tree: */
+ if (TRACE_ON(dmloader)) {
+ int r = 0;
+ DMUS_PRIVATE_CONTAINED_OBJECT_ENTRY *tmpEntry;
+ struct list *listEntry;
+
+ TRACE("*** IDirectMusicContainer (%p) ***\n", This->ContainerVtbl);
+ TRACE(" - Object descriptor:\n");
+ DMUSIC_dump_DMUS_OBJECTDESC (This->pDesc);
+ TRACE(" - Header:\n");
+ TRACE(" - dwFlags: ");
+ DMUSIC_dump_DMUS_CONTAINER_FLAGS (This->pHeader->dwFlags);
+
+ TRACE(" - Objects:\n");
+
+ LIST_FOR_EACH (listEntry, &This->ObjectsList) {
+ tmpEntry = LIST_ENTRY( listEntry, DMUS_PRIVATE_CONTAINED_OBJECT_ENTRY, entry );
+ TRACE(" - Object[%i]:\n", r);
+ TRACE(" - wszAlias: %s\n", debugstr_w(tmpEntry->wszAlias));
+ TRACE(" - Object descriptor:\n");
+ DMUSIC_dump_DMUS_OBJECTDESC(tmpEntry->pDesc);
+ r++;
+ }
+ }
+#endif
+
+
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicContainerImpl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicContainerImpl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
+ return E_NOTIMPL;
+}
+
+ICOM_VTABLE(IPersistStream) DirectMusicContainer_PersistStream_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicContainerImpl_IPersistStream_QueryInterface,
+ IDirectMusicContainerImpl_IPersistStream_AddRef,
+ IDirectMusicContainerImpl_IPersistStream_Release,
+ IDirectMusicContainerImpl_IPersistStream_GetClassID,
+ IDirectMusicContainerImpl_IPersistStream_IsDirty,
+ IDirectMusicContainerImpl_IPersistStream_Load,
+ IDirectMusicContainerImpl_IPersistStream_Save,
+ IDirectMusicContainerImpl_IPersistStream_GetSizeMax
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicContainer (LPCGUID lpcGUID, LPDIRECTMUSICCONTAINER *ppDMCon, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicContainerImpl* dmcon;
+HRESULT WINAPI DMUSIC_CreateDirectMusicContainerImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicContainerImpl* obj;
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicContainer)) {
- dmcon = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicContainerImpl));
- if (NULL == dmcon) {
- *ppDMCon = (LPDIRECTMUSICCONTAINER) NULL;
- return E_OUTOFMEMORY;
- }
- dmcon->lpVtbl = &DirectMusicContainer_Vtbl;
- dmcon->ref = 1;
- *ppDMCon = (LPDIRECTMUSICCONTAINER) dmcon;
- return S_OK;
+ obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicContainerImpl));
+ if (NULL == obj) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
}
- WARN("No interface found\n");
+ obj->UnknownVtbl = &DirectMusicContainer_Unknown_Vtbl;
+ obj->ContainerVtbl = &DirectMusicContainer_Container_Vtbl;
+ obj->ObjectVtbl = &DirectMusicContainer_Object_Vtbl;
+ obj->PersistStreamVtbl = &DirectMusicContainer_PersistStream_Vtbl;
+ obj->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(obj->pDesc);
+ obj->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&obj->pDesc->guidClass, &CLSID_DirectMusicContainer, sizeof (CLSID));
+ obj->ref = 0; /* will be inited by QueryInterface */
+ list_init (&obj->ObjectsList);
- return E_NOINTERFACE;
+ return IDirectMusicContainerImpl_IUnknown_QueryInterface ((LPUNKNOWN)&obj->UnknownVtbl, lpcGUID, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicContainerObject implementation
- */
-/* IDirectMusicContainerObject IUnknown part: */
-HRESULT WINAPI IDirectMusicContainerObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicContainerObject,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IDirectMusicObject)) {
- IDirectMusicContainerObject_AddRef(iface);
- *ppobj = This;
- return S_OK;
- } else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IPersistStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = (LPPERSISTSTREAM)This->pStream;
- return S_OK;
- } else if (IsEqualIID (riid, &IID_IDirectMusicContainer)) {
- IDirectMusicContainer_AddRef ((LPDIRECTMUSICCONTAINER)This->pContainer);
- *ppobj = (LPDIRECTMUSICCONTAINER)This->pContainer;
- return S_OK;
- }
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicContainerObject_AddRef (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicContainerObject,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicContainerObject_Release (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicContainerObject,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicContainerObject IDirectMusicObject part: */
-HRESULT WINAPI IDirectMusicContainerObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicContainerObject,iface);
-
- TRACE("(%p, %p)\n", This, pDesc);
- pDesc = This->pDesc;
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicContainerObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicContainerObject,iface);
-
- TRACE("(%p, %p)\n", This, pDesc);
- This->pDesc = pDesc;
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicContainerObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicContainerObject,iface);
-
- FIXME("(%p, %p, %p): stub\n", This, pStream, pDesc);
-
- return S_OK;
-}
-
-ICOM_VTABLE(IDirectMusicObject) DirectMusicContainerObject_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicContainerObject_QueryInterface,
- IDirectMusicContainerObject_AddRef,
- IDirectMusicContainerObject_Release,
- IDirectMusicContainerObject_GetDescriptor,
- IDirectMusicContainerObject_SetDescriptor,
- IDirectMusicContainerObject_ParseDescriptor
-};
-
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicContainerObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicContainerObject *obj;
-
- TRACE("(%p,%p,%p)\n", lpcGUID, ppObject, pUnkOuter);
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicObject)) {
- obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicContainerObject));
- if (NULL == obj) {
- *ppObject = (LPDIRECTMUSICOBJECT) NULL;
- return E_OUTOFMEMORY;
- }
- obj->lpVtbl = &DirectMusicContainerObject_Vtbl;
- obj->ref = 1;
- /* prepare IPersistStream */
- obj->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicContainerObjectStream));
- obj->pStream->lpVtbl = &DirectMusicContainerObjectStream_Vtbl;
- obj->pStream->ref = 1;
- obj->pStream->pParentObject = obj;
- /* prepare IDirectMusicContainer */
- DMUSIC_CreateDirectMusicContainer (&IID_IDirectMusicContainer, (LPDIRECTMUSICCONTAINER*)&obj->pContainer, NULL);
- obj->pContainer->pObject = obj;
- *ppObject = (LPDIRECTMUSICOBJECT) obj;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
-}
-
-/*****************************************************************************
- * IDirectMusicContainerObjectStream implementation
- */
-/* IDirectMusicContainerObjectStream IUnknown part: */
-HRESULT WINAPI IDirectMusicContainerObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicContainerObjectStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicContainerObjectStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicContainerObjectStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicContainerObjectStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicContainerObjectStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicContainerObjectStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicContainerObjectStream IPersist part: */
-HRESULT WINAPI IDirectMusicContainerObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- return E_NOTIMPL;
-}
-
-/* IDirectMusicContainerObjectStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicContainerObjectStream_IsDirty (LPPERSISTSTREAM iface)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicContainerObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
- FIXME(": Loading not implemented yet\n");
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicContainerObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicContainerObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
- return E_NOTIMPL;
-}
-
-ICOM_VTABLE(IPersistStream) DirectMusicContainerObjectStream_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicContainerObjectStream_QueryInterface,
- IDirectMusicContainerObjectStream_AddRef,
- IDirectMusicContainerObjectStream_Release,
- IDirectMusicContainerObjectStream_GetClassID,
- IDirectMusicContainerObjectStream_IsDirty,
- IDirectMusicContainerObjectStream_Load,
- IDirectMusicContainerObjectStream_Save,
- IDirectMusicContainerObjectStream_GetSizeMax
-};
diff --git a/dlls/dmloader/dmloader_main.c b/dlls/dmloader/dmloader_main.c
index e95d12a..eee9059 100644
--- a/dlls/dmloader/dmloader_main.c
+++ b/dlls/dmloader/dmloader_main.c
@@ -1,6 +1,6 @@
/* DirectMusicLoader Main
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,8 +21,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(dmloader);
-typedef struct
-{
+typedef struct {
/* IUnknown fields */
ICOM_VFIELD(IClassFactory);
DWORD ref;
@@ -31,43 +30,30 @@
/******************************************************************
* DirectMusicLoader ClassFactory
*/
-static HRESULT WINAPI LoaderCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI LoaderCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI LoaderCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI LoaderCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI LoaderCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI LoaderCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI LoaderCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI LoaderCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (&IID_IDirectMusicLoader, riid) ||
- IsEqualIID (&IID_IDirectMusicLoader8, riid)) {
- return DMUSIC_CreateDirectMusicLoader(riid, (LPDIRECTMUSICLOADER8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicLoaderImpl (riid, (LPVOID*) ppobj, pOuter);
}
-static HRESULT WINAPI LoaderCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI LoaderCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -87,44 +73,30 @@
/******************************************************************
* DirectMusicContainer ClassFactory
*/
-static HRESULT WINAPI ContainerCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI ContainerCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI ContainerCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ContainerCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI ContainerCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ContainerCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI ContainerCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI ContainerCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicContainer)) {
- return DMUSIC_CreateDirectMusicContainer (riid, (LPDIRECTMUSICCONTAINER*) ppobj, pOuter);
- } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
- return DMUSIC_CreateDirectMusicContainerObject (riid, (LPDIRECTMUSICOBJECT*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicContainerImpl (riid, (LPVOID*) ppobj, pOuter);
}
-static HRESULT WINAPI ContainerCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI ContainerCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -146,18 +118,14 @@
*
*
*/
-BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
-{
- if (fdwReason == DLL_PROCESS_ATTACH)
- {
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
+ if (fdwReason == DLL_PROCESS_ATTACH) {
DisableThreadLibraryCalls(hinstDLL);
/* FIXME: Initialisation */
}
- else if (fdwReason == DLL_PROCESS_DETACH)
- {
+ else if (fdwReason == DLL_PROCESS_DETACH) {
/* FIXME: Cleanup */
}
-
return TRUE;
}
@@ -167,10 +135,8 @@
*
*
*/
-HRESULT WINAPI DMLOADER_DllCanUnloadNow(void)
-{
+HRESULT WINAPI DMLOADER_DllCanUnloadNow(void) {
FIXME("(void): stub\n");
-
return S_FALSE;
}
@@ -180,8 +146,7 @@
*
*
*/
-HRESULT WINAPI DMLOADER_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
-{
+HRESULT WINAPI DMLOADER_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) {
TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
if (IsEqualCLSID (rclsid, &CLSID_DirectMusicLoader) && IsEqualIID (riid, &IID_IClassFactory)) {
*ppv = (LPVOID) &Loader_CF;
diff --git a/dlls/dmloader/dmloader_private.h b/dlls/dmloader/dmloader_private.h
index e705156..8f170ea 100644
--- a/dlls/dmloader/dmloader_private.h
+++ b/dlls/dmloader/dmloader_private.h
@@ -1,6 +1,6 @@
/* DirectMusicLoader Private Include
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,30 +23,42 @@
#include <stdarg.h>
#include "windef.h"
-#include "wine/debug.h"
#include "winbase.h"
#include "winnt.h"
#include "wingdi.h"
-#include "dmusicc.h"
-#include "dmusici.h"
-#include "dmusics.h"
-#include "dmplugin.h"
-#include "dmusicf.h"
-#include "dsound.h"
-#include "wine/list.h"
+#include "winuser.h"
+#include "wine/debug.h"
+#include "wine/list.h"
+#include "wine/unicode.h"
+#include "winreg.h"
+
+#include "dmusici.h"
+#include "dmusicf.h"
+#include "dmusics.h"
/*****************************************************************************
* Auxiliary definitions
*/
+/* cache entry */
typedef struct _DMUS_PRIVATE_CACHE_ENTRY {
struct list entry; /* for listing elements */
- GUID guidObject;
- WCHAR wzFileName[MAX_PATH];
- WCHAR wzName[256];
- IDirectMusicObject* pObject;
+ BOOL bIsFaultyDLS; /* my workaround for enabling caching of "faulty" dls collections */
+ LPDIRECTMUSICOBJECT pObject; /* pointer to object */
} DMUS_PRIVATE_CACHE_ENTRY, *LPDMUS_PRIVATE_CACHE_ENTRY;
+/* alias entry */
+typedef struct _DMUS_PRIVATE_ALIAS_ENTRY {
+ struct list entry; /* for listing elements */
+ LPDMUS_OBJECTDESC pDesc; /* descriptor, containing info */
+} DMUS_PRIVATE_ALIAS_ENTRY, *LPDMUS_PRIVATE_ALIAS_ENTRY;
+
+/* contained object entry */
+typedef struct _DMUS_PRIVATE_CONTAINED_OBJECT_ENTRY {
+ struct list entry; /* for listing elements */
+ WCHAR* wszAlias;
+ LPDMUS_OBJECTDESC pDesc;
+} DMUS_PRIVATE_CONTAINED_OBJECT_ENTRY, *LPDMUS_PRIVATE_CONTAINED_OBJECT_ENTRY;
/*****************************************************************************
* Interfaces
@@ -54,19 +66,17 @@
typedef struct IDirectMusicLoader8Impl IDirectMusicLoader8Impl;
typedef struct IDirectMusicContainerImpl IDirectMusicContainerImpl;
-typedef struct IDirectMusicContainerObject IDirectMusicContainerObject;
-typedef struct IDirectMusicContainerObjectStream IDirectMusicContainerObjectStream;
-
typedef struct ILoaderStream ILoaderStream;
/*****************************************************************************
* Predeclare the interface implementation structures
*/
extern ICOM_VTABLE(IDirectMusicLoader8) DirectMusicLoader8_Vtbl;
-extern ICOM_VTABLE(IDirectMusicContainer) DirectMusicContainer_Vtbl;
-extern ICOM_VTABLE(IDirectMusicObject) DirectMusicContainerObject_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicContainerObjectStream_Vtbl;
+extern ICOM_VTABLE(IUnknown) DirectMusicContainer_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicContainer) DirectMusicContainer_Container_Vtbl;
+extern ICOM_VTABLE(IDirectMusicObject) DirectMusicContainer_Object_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicContainer_PersistStream_Vtbl;
extern ICOM_VTABLE(IUnknown) LoaderStream_Unknown_Vtbl;
extern ICOM_VTABLE(IStream) LoaderStream_Stream_Vtbl;
@@ -75,24 +85,15 @@
/*****************************************************************************
* ClassFactory
*/
-/* can support IID_IDirectMusicLoader and IID_IDirectMusicLoader8
- * return always an IDirectMusicLoader8Impl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicLoader (LPCGUID lpcGUID, LPDIRECTMUSICLOADER8 *ppDMLoad, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicContainer
- * return always an IDirectMusicContainerImpl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicContainer (LPCGUID lpcGUID, LPDIRECTMUSICCONTAINER *ppDMCon, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicLoaderImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicContainerImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicContainerObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter);
-
-extern HRESULT WINAPI DMUSIC_CreateLoaderStream (LPSTREAM *ppStream);
+extern HRESULT WINAPI DMUSIC_CreateLoaderStream (LPVOID *ppobj);
/*****************************************************************************
* IDirectMusicLoader8Impl implementation structure
*/
-struct IDirectMusicLoader8Impl
-{
+struct IDirectMusicLoader8Impl {
/* IUnknown fields */
ICOM_VFIELD(IDirectMusicLoader8);
DWORD ref;
@@ -102,6 +103,7 @@
/* simple cache (linked list) */
struct list CacheList;
+ struct list AliasList;
};
/* IUnknown: */
@@ -126,80 +128,56 @@
/*****************************************************************************
* IDirectMusicContainerImpl implementation structure
*/
-struct IDirectMusicContainerImpl
-{
+struct IDirectMusicContainerImpl {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicContainer);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicContainer) *ContainerVtbl;
+ ICOM_VTABLE(IDirectMusicObject) *ObjectVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicContainerImpl fields */
- IDirectMusicContainerObject* pObject;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicContainerImpl_QueryInterface (LPDIRECTMUSICCONTAINER iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicContainerImpl_AddRef (LPDIRECTMUSICCONTAINER iface);
-extern ULONG WINAPI IDirectMusicContainerImpl_Release (LPDIRECTMUSICCONTAINER iface);
-/* IDirectMusicContainer: */
-extern HRESULT WINAPI IDirectMusicContainerImpl_EnumObject (LPDIRECTMUSICCONTAINER iface, REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc, WCHAR* pwszAlias);
-
-
-/*****************************************************************************
- * IDirectMusicContainerObject implementation structure
- */
-struct IDirectMusicContainerObject
-{
- /* IUnknown fields */
- ICOM_VFIELD(IDirectMusicObject);
- DWORD ref;
-
- /* IDirectMusicObjectImpl fields */
LPDMUS_OBJECTDESC pDesc;
- IDirectMusicContainerObjectStream* pStream;
- IDirectMusicContainerImpl* pContainer;
+ DMUS_IO_CONTAINER_HEADER* pHeader;
+
+ /* list of objects */
+ struct list ObjectsList;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicContainerObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicContainerObject_AddRef (LPDIRECTMUSICOBJECT iface);
-extern ULONG WINAPI IDirectMusicContainerObject_Release (LPDIRECTMUSICOBJECT iface);
+extern HRESULT WINAPI IDirectMusicContainerImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicContainerImpl_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicContainerImpl_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicContainer: */
+extern HRESULT WINAPI IDirectMusicContainerImpl_IDirectMusicContainer_QueryInterface (LPDIRECTMUSICCONTAINER iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicContainerImpl_IDirectMusicContainer_AddRef (LPDIRECTMUSICCONTAINER iface);
+extern ULONG WINAPI IDirectMusicContainerImpl_IDirectMusicContainer_Release (LPDIRECTMUSICCONTAINER iface);
+extern HRESULT WINAPI IDirectMusicContainerImpl_IDirectMusicContainer_EnumObject (LPDIRECTMUSICCONTAINER iface, REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc, WCHAR* pwszAlias);
/* IDirectMusicObject: */
-extern HRESULT WINAPI IDirectMusicContainerObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicContainerObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicContainerObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicContainerImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicContainerImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface);
+extern ULONG WINAPI IDirectMusicContainerImpl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface);
+extern HRESULT WINAPI IDirectMusicContainerImpl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicContainerImpl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicContainerImpl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
-/*****************************************************************************
- * IDirectMusicContainerObjectStream implementation structure
- */
-struct IDirectMusicContainerObjectStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicContainerObject* pParentObject;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicContainerObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicContainerObjectStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicContainerObjectStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicContainerObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicContainerObjectStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicContainerObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicContainerObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicContainerObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicContainerImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicContainerImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicContainerImpl_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicContainerImpl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicContainerImpl_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicContainerImpl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicContainerImpl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicContainerImpl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* ILoaderStream implementation structure
*/
-struct ILoaderStream
-{
+struct ILoaderStream {
/* IUnknown fields */
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
ICOM_VTABLE(IStream) *StreamVtbl;
ICOM_VTABLE(IDirectMusicGetLoader) *GetLoaderVtbl;
DWORD ref;
@@ -211,17 +189,21 @@
};
/* Custom: */
-extern HRESULT WINAPI ILoaderStream_Attach (ILoaderStream* iface, LPCWSTR wzFile, IDirectMusicLoader *pLoader);
-extern void WINAPI ILoaderStream_Detach (ILoaderStream* iface);
+extern HRESULT WINAPI ILoaderStream_Attach (LPSTREAM iface, LPCWSTR wzFile, IDirectMusicLoader *pLoader);
+extern void WINAPI ILoaderStream_Detach (LPSTREAM iface);
+/* IUnknown: */
+extern HRESULT WINAPI ILoaderStream_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, void** ppobj);
+extern ULONG WINAPI ILoaderStream_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI ILoaderStream_IUnknown_Release (LPUNKNOWN iface);
/* IDirectMusicGetLoader: */
extern HRESULT WINAPI ILoaderStream_IDirectMusicGetLoader_QueryInterface (LPDIRECTMUSICGETLOADER iface, REFIID riid, void** ppobj);
-extern ULONG WINAPI ILoaderStream_IDirectMusicGetLoader_AddRef (LPDIRECTMUSICGETLOADER iface);
-extern ULONG WINAPI ILoaderStream_IDirectMusicGetLoader_Release (LPDIRECTMUSICGETLOADER iface);
+extern ULONG WINAPI ILoaderStream_IDirectMusicGetLoader_AddRef (LPDIRECTMUSICGETLOADER iface);
+extern ULONG WINAPI ILoaderStream_IDirectMusicGetLoader_Release (LPDIRECTMUSICGETLOADER iface);
extern HRESULT WINAPI ILoaderStream_IDirectMusicGetLoader_GetLoader (LPDIRECTMUSICGETLOADER iface, IDirectMusicLoader **ppLoader);
/* IStream: */
extern HRESULT WINAPI ILoaderStream_IStream_QueryInterface (LPSTREAM iface, REFIID riid, void** ppobj);
-extern ULONG WINAPI ILoaderStream_IStream_AddRef (LPSTREAM iface);
-extern ULONG WINAPI ILoaderStream_IStream_Release (LPSTREAM iface);extern HRESULT WINAPI ILoaderStream_IStream_Read (IStream* iface, void* pv, ULONG cb, ULONG* pcbRead);
+extern ULONG WINAPI ILoaderStream_IStream_AddRef (LPSTREAM iface);
+extern ULONG WINAPI ILoaderStream_IStream_Release (LPSTREAM iface);extern HRESULT WINAPI ILoaderStream_IStream_Read (IStream* iface, void* pv, ULONG cb, ULONG* pcbRead);
extern HRESULT WINAPI ILoaderStream_IStream_Write (LPSTREAM iface, const void* pv, ULONG cb, ULONG* pcbWritten);
extern HRESULT WINAPI ILoaderStream_IStream_Seek (LPSTREAM iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition);
extern HRESULT WINAPI ILoaderStream_IStream_SetSize (LPSTREAM iface, ULARGE_INTEGER libNewSize);
@@ -233,4 +215,133 @@
extern HRESULT WINAPI ILoaderStream_IStream_Stat (LPSTREAM iface, STATSTG* pstatstg, DWORD grfStatFlag);
extern HRESULT WINAPI ILoaderStream_IStream_Clone (LPSTREAM iface, IStream** ppstm);
+
+/*****************************************************************************
+ * Misc.
+ */
+/* for simpler reading */
+typedef struct _DMUS_PRIVATE_CHUNK {
+ FOURCC fccID; /* FOURCC ID of the chunk */
+ DWORD dwSize; /* size of the chunk */
+} DMUS_PRIVATE_CHUNK, *LPDMUS_PRIVATE_CHUNK;
+
+/* check whether the given DWORD is even (return 0) or odd (return 1) */
+static inline int even_or_odd (DWORD number) {
+ return (number & 0x1); /* basically, check if bit 0 is set ;) */
+}
+
+/* translate STREAM_SEEK flag to string */
+static inline const char *resolve_STREAM_SEEK (DWORD flag) {
+ switch (flag) {
+ case STREAM_SEEK_SET:
+ return wine_dbg_sprintf ("STREAM_SEEK_SET");
+ case STREAM_SEEK_CUR:
+ return wine_dbg_sprintf ("STREAM_SEEK_CUR");
+ case STREAM_SEEK_END:
+ return wine_dbg_sprintf ("STREAM_SEEK_END");
+ default:
+ return wine_dbg_sprintf ("()");
+ }
+}
+
+/* FOURCC to string conversion for debug messages */
+static inline const char *debugstr_fourcc (DWORD fourcc) {
+ if (!fourcc) return "'null'";
+ return wine_dbg_sprintf ("\'%c%c%c%c\'",
+ (char)(fourcc), (char)(fourcc >> 8),
+ (char)(fourcc >> 16), (char)(fourcc >> 24));
+}
+
+/* DMUS_VERSION struct to string conversion for debug messages */
+static inline const char *debugstr_dmversion (LPDMUS_VERSION version) {
+ if (!version) return "'null'";
+ return wine_dbg_sprintf ("\'%i,%i,%i,%i\'",
+ (int)((version->dwVersionMS && 0xFFFF0000) >> 8), (int)(version->dwVersionMS && 0x0000FFFF),
+ (int)((version->dwVersionLS && 0xFFFF0000) >> 8), (int)(version->dwVersionLS && 0x0000FFFF));
+}
+
+/* used for initialising structs (primarily for DMUS_OBJECTDESC) */
+#define DM_STRUCT_INIT(x) \
+ do { \
+ memset((x), 0, sizeof(*(x))); \
+ (x)->dwSize = sizeof(*x); \
+ } while (0)
+
+
+/* used for generic dumping (copied from ddraw) */
+typedef struct {
+ DWORD val;
+ const char* name;
+} flag_info;
+
+#define FE(x) { x, #x }
+#define DMUSIC_dump_flags(flags,names,num_names) DMUSIC_dump_flags_(flags, names, num_names, 1)
+
+/* generic dump function */
+static inline void DMUSIC_dump_flags_ (DWORD flags, const flag_info* names, size_t num_names, int newline) {
+ unsigned int i;
+
+ for (i=0; i < num_names; i++) {
+ if ((flags & names[i].val) || /* standard flag value */
+ ((!flags) && (!names[i].val))) /* zero value only */
+ DPRINTF("%s ", names[i].name);
+ }
+
+ if (newline) DPRINTF("\n");
+}
+
+static inline void DMUSIC_dump_DMUS_OBJ_FLAGS (DWORD flagmask) {
+ static const flag_info flags[] = {
+ FE(DMUS_OBJ_OBJECT),
+ FE(DMUS_OBJ_CLASS),
+ FE(DMUS_OBJ_NAME),
+ FE(DMUS_OBJ_CATEGORY),
+ FE(DMUS_OBJ_FILENAME),
+ FE(DMUS_OBJ_FULLPATH),
+ FE(DMUS_OBJ_URL),
+ FE(DMUS_OBJ_VERSION),
+ FE(DMUS_OBJ_DATE),
+ FE(DMUS_OBJ_LOADED),
+ FE(DMUS_OBJ_MEMORY),
+ FE(DMUS_OBJ_STREAM)
+ };
+ DMUSIC_dump_flags(flagmask, flags, sizeof(flags)/sizeof(flags[0]));
+}
+
+static inline void DMUSIC_dump_DMUS_CONTAINER_FLAGS (DWORD flagmask) {
+ static const flag_info flags[] = {
+ FE(DMUS_CONTAINER_NOLOADS)
+ };
+ DMUSIC_dump_flags(flagmask, flags, sizeof(flags)/sizeof(flags[0]));
+}
+
+static inline void DMUSIC_dump_DMUS_OBJECTDESC (LPDMUS_OBJECTDESC pDesc) {
+ if (pDesc) {
+ DPRINTF("DMUS_OBJECTDESC (%p)\n", pDesc);
+ DPRINTF(" - dwSize = %ld\n", pDesc->dwSize);
+ DPRINTF(" - dwValidData = ");
+ DMUSIC_dump_DMUS_OBJ_FLAGS (pDesc->dwValidData);
+ if (pDesc->dwValidData & DMUS_OBJ_CLASS) DPRINTF(" - guidClass = %s\n", debugstr_guid(&pDesc->guidClass));
+ if (pDesc->dwValidData & DMUS_OBJ_OBJECT) DPRINTF(" - guidObject = %s\n", debugstr_guid(&pDesc->guidObject));
+ if (pDesc->dwValidData & DMUS_OBJ_DATE) DPRINTF(" - ftDate = FIXME\n");
+ if (pDesc->dwValidData & DMUS_OBJ_VERSION) DPRINTF(" - vVersion = %s\n", debugstr_dmversion(&pDesc->vVersion));
+ if (pDesc->dwValidData & DMUS_OBJ_NAME) DPRINTF(" - wszName = %s\n", debugstr_w(pDesc->wszName));
+ if (pDesc->dwValidData & DMUS_OBJ_CATEGORY) DPRINTF(" - wszCategory = %s\n", debugstr_w(pDesc->wszCategory));
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME) DPRINTF(" - wszFileName = %s\n", debugstr_w(pDesc->wszFileName));
+ if (pDesc->dwValidData & DMUS_OBJ_MEMORY) DPRINTF(" - llMemLength = %lli\n - pbMemData = %p\n", pDesc->llMemLength, pDesc->pbMemData);
+ if (pDesc->dwValidData & DMUS_OBJ_STREAM) DPRINTF(" - pStream = %p\n", pDesc->pStream);
+ } else {
+ DPRINTF("(NULL)\n");
+ }
+}
+
+/* check whether chunkID is valid dmobject form chunk */
+static inline BOOL IS_VALID_DMFORM(chunkID) {
+ if ((chunkID == DMUS_FOURCC_AUDIOPATH_FORM) || (chunkID == DMUS_FOURCC_BAND_FORM) || (chunkID == DMUS_FOURCC_CHORDMAP_FORM)
+ || (chunkID == DMUS_FOURCC_CONTAINER_FORM) || (chunkID == FOURCC_DLS) || (chunkID == DMUS_FOURCC_SCRIPT_FORM)
+ || (chunkID == DMUS_FOURCC_SEGMENT_FORM) || (chunkID == DMUS_FOURCC_STYLE_FORM) || (chunkID == DMUS_FOURCC_TOOLGRAPH_FORM)
+ || (chunkID == DMUS_FOURCC_TRACK_FORM) || (chunkID == mmioFOURCC('W','A','V','E'))) return TRUE;
+ else return FALSE;
+}
+
#endif /* __WINE_DMLOADER_PRIVATE_H */
diff --git a/dlls/dmloader/loader.c b/dlls/dmloader/loader.c
index 733e9fe..bdece6f 100644
--- a/dlls/dmloader/loader.c
+++ b/dlls/dmloader/loader.c
@@ -1,6 +1,6 @@
/* IDirectMusicLoader8 Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,16 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-#include "wine/unicode.h"
-#include "winreg.h"
-
#include "dmloader_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmloader);
@@ -34,8 +24,7 @@
HRESULT WINAPI DMUSIC_GetDefaultGMPath (WCHAR wszPath[MAX_PATH]);
/* IDirectMusicLoader8 IUnknown part: */
-HRESULT WINAPI IDirectMusicLoader8Impl_QueryInterface (LPDIRECTMUSICLOADER8 iface, REFIID riid, LPVOID *ppobj)
-{
+HRESULT WINAPI IDirectMusicLoader8Impl_QueryInterface (LPDIRECTMUSICLOADER8 iface, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IDirectMusicLoader8Impl,iface);
if (IsEqualIID (riid, &IID_IUnknown) ||
@@ -50,15 +39,13 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicLoader8Impl_AddRef (LPDIRECTMUSICLOADER8 iface)
-{
+ULONG WINAPI IDirectMusicLoader8Impl_AddRef (LPDIRECTMUSICLOADER8 iface) {
ICOM_THIS(IDirectMusicLoader8Impl,iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicLoader8Impl_Release (LPDIRECTMUSICLOADER8 iface)
-{
+ULONG WINAPI IDirectMusicLoader8Impl_Release (LPDIRECTMUSICLOADER8 iface) {
ICOM_THIS(IDirectMusicLoader8Impl,iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
@@ -69,91 +56,163 @@
}
/* IDirectMusicLoader8 IDirectMusicLoader part: */
-HRESULT WINAPI IDirectMusicLoader8Impl_GetObject (LPDIRECTMUSICLOADER8 iface, LPDMUS_OBJECTDESC pDesc, REFIID riid, LPVOID* ppv)
-{
- IDirectMusicObject* pObject;
+HRESULT WINAPI IDirectMusicLoader8Impl_GetObject (LPDIRECTMUSICLOADER8 iface, LPDMUS_OBJECTDESC pDesc, REFIID riid, LPVOID* ppv) {
ICOM_THIS(IDirectMusicLoader8Impl,iface);
- HRESULT result;
+ HRESULT result = 0;
struct list *listEntry;
+ LPDMUS_PRIVATE_ALIAS_ENTRY aliasEntry;
DMUS_PRIVATE_CACHE_ENTRY *cacheEntry;
+ DMUS_OBJECTDESC CacheDesc;
+ IDirectMusicObject* pObject;
LPDMUS_PRIVATE_CACHE_ENTRY newEntry;
- TRACE("(%p, %p(dwValidData:0x%08lx), %s, %p)\n", This, pDesc, pDesc->dwValidData, debugstr_guid(riid), ppv);
-
- TRACE("looking up cache...\n");
-
+ TRACE("(%p, %p, %s, %p): pDesc:\n", This, pDesc, debugstr_guid(riid), ppv);
+ if (TRACE_ON(dmloader))
+ DMUSIC_dump_DMUS_OBJECTDESC(pDesc);
+
+ /* if I understand correctly, SetObject makes sort of aliases for entries in cache;
+ therefore I created alias list, which is similiar to cache list, and is used as resolver
+ (it maps let's say GUID to filename) */
+ TRACE(": looking for alias\n");
+ LIST_FOR_EACH (listEntry, &This->AliasList) {
+ aliasEntry = LIST_ENTRY(listEntry, DMUS_PRIVATE_ALIAS_ENTRY, entry);
+ /* for the time being, we support only GUID/name mapping */
+ if ((aliasEntry->pDesc->dwValidData & DMUS_OBJ_OBJECT) && (pDesc->dwValidData & DMUS_OBJ_OBJECT)
+ && IsEqualGUID (&aliasEntry->pDesc->guidObject, &pDesc->guidObject)) {
+ TRACE(": found alias by GUID (%s)... mapping:\n", debugstr_guid(&aliasEntry->pDesc->guidObject));
+ if ((aliasEntry->pDesc->dwValidData & DMUS_OBJ_FILENAME) && !(pDesc->dwValidData & DMUS_OBJ_FILENAME)) {
+ TRACE(": - to filename (%s)\n", debugstr_w(aliasEntry->pDesc->wszFileName));
+ pDesc->dwValidData |= DMUS_OBJ_FILENAME;
+ pDesc->dwValidData |= (aliasEntry->pDesc->dwValidData & DMUS_OBJ_FULLPATH);
+ strncpyW (pDesc->wszFileName, aliasEntry->pDesc->wszFileName, DMUS_MAX_FILENAME);
+ }
+ if ((aliasEntry->pDesc->dwValidData & DMUS_OBJ_NAME) && !(pDesc->dwValidData & DMUS_OBJ_NAME)) {
+ TRACE(": - to name (%s)\n", debugstr_w(aliasEntry->pDesc->wszName));
+ pDesc->dwValidData |= DMUS_OBJ_NAME;
+ strncpyW (pDesc->wszName, aliasEntry->pDesc->wszName, DMUS_MAX_NAME);
+ }
+ if ((aliasEntry->pDesc->dwValidData & DMUS_OBJ_MEMORY) && !(pDesc->dwValidData & DMUS_OBJ_MEMORY)) {
+ TRACE(": - to memory location\n");
+ pDesc->dwValidData |= DMUS_OBJ_MEMORY;
+ /* FIXME: is this correct? */
+ pDesc->pbMemData = aliasEntry->pDesc->pbMemData;
+ pDesc->llMemLength = aliasEntry->pDesc->llMemLength;
+ }
+ if ((aliasEntry->pDesc->dwValidData & DMUS_OBJ_STREAM) && !(pDesc->dwValidData & DMUS_OBJ_STREAM)) {
+ TRACE(": - to stream\n");
+ pDesc->dwValidData |= DMUS_OBJ_STREAM;
+ IStream_Clone (aliasEntry->pDesc->pStream, &pDesc->pStream);
+ }
+ }
+ else if ((aliasEntry->pDesc->dwValidData & DMUS_OBJ_NAME) && (pDesc->dwValidData & DMUS_OBJ_NAME)
+ && !strncmpW (aliasEntry->pDesc->wszName, pDesc->wszName, DMUS_MAX_NAME)) {
+ TRACE(": found alias by name (%s)... mapping:\n", debugstr_w(aliasEntry->pDesc->wszName));
+ if ((aliasEntry->pDesc->dwValidData & DMUS_OBJ_FILENAME) && !(pDesc->dwValidData & DMUS_OBJ_FILENAME)) {
+ TRACE(": - to filename (%s)\n", debugstr_w(aliasEntry->pDesc->wszFileName));
+ pDesc->dwValidData |= DMUS_OBJ_FILENAME;
+ pDesc->dwValidData |= (aliasEntry->pDesc->dwValidData & DMUS_OBJ_FULLPATH);
+ strncpyW (pDesc->wszFileName, aliasEntry->pDesc->wszFileName, DMUS_MAX_FILENAME);
+ }
+ if ((aliasEntry->pDesc->dwValidData & DMUS_OBJ_OBJECT) && !(pDesc->dwValidData & DMUS_OBJ_OBJECT)) {
+ TRACE(": - to object GUID (%s)\n", debugstr_guid(&aliasEntry->pDesc->guidObject));
+ pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ memcpy (&pDesc->guidObject, &aliasEntry->pDesc->guidObject, sizeof(GUID));
+ }
+ if ((aliasEntry->pDesc->dwValidData & DMUS_OBJ_MEMORY) && !(pDesc->dwValidData & DMUS_OBJ_MEMORY)) {
+ TRACE(": - to memory location\n");
+ pDesc->dwValidData |= DMUS_OBJ_MEMORY;
+ /* FIXME: is this correct? */
+ pDesc->pbMemData = aliasEntry->pDesc->pbMemData;
+ pDesc->llMemLength = aliasEntry->pDesc->llMemLength;
+ }
+ if ((aliasEntry->pDesc->dwValidData & DMUS_OBJ_STREAM) && !(pDesc->dwValidData & DMUS_OBJ_STREAM)) {
+ TRACE(": - to stream\n");
+ pDesc->dwValidData |= DMUS_OBJ_STREAM;
+ IStream_Clone (aliasEntry->pDesc->pStream, &pDesc->pStream);
+ }
+ }
+ /*else FIXME(": implement other types of mapping\n"); */
+ }
+
+ /* iterate through cache and check whether object has already been loaded */
+ TRACE(": looking up cache...\n");
+ DM_STRUCT_INIT(&CacheDesc);
LIST_FOR_EACH (listEntry, &This->CacheList) {
- cacheEntry = LIST_ENTRY( listEntry, DMUS_PRIVATE_CACHE_ENTRY, entry );
-
- if ((pDesc->dwValidData & DMUS_OBJ_OBJECT) || (pDesc->dwValidData & DMUS_OBJ_FILENAME)) {
- if (pDesc->dwValidData & DMUS_OBJ_OBJECT) {
- if (IsEqualGUID (&cacheEntry->guidObject, &pDesc->guidObject)) {
- TRACE(": found it by GUID\n");
- if (cacheEntry->pObject)
- return IDirectMusicObject_QueryInterface ((LPDIRECTMUSICOBJECT) cacheEntry->pObject, riid, ppv);
- }
+ cacheEntry = LIST_ENTRY(listEntry, DMUS_PRIVATE_CACHE_ENTRY, entry);
+ /* first check whether cached object is "faulty" default dls collection;
+ * I don't think it's recongised by object descriptor, since it contains no
+ * data; it's not very elegant way, but it works :)
+ */
+ if (cacheEntry->bIsFaultyDLS == TRUE) {
+ if ((pDesc->dwValidData & DMUS_OBJ_OBJECT) && IsEqualGUID (&GUID_DefaultGMCollection, &pDesc->guidObject)) {
+ TRACE(": found faulty default DLS collection... enabling M$ compliant behaviour\n");
+ return DMUS_E_LOADER_NOFILENAME;
}
- if (pDesc->dwValidData & DMUS_OBJ_FILENAME) {
- if (cacheEntry->wzFileName && !strncmpW (pDesc->wszFileName, cacheEntry->wzFileName, MAX_PATH)) {
- TRACE(": found it by FileName\n");
- if (cacheEntry->pObject)
- return IDirectMusicObject_QueryInterface ((LPDIRECTMUSICOBJECT) cacheEntry->pObject, riid, ppv);
- }
+ }
+ /* I think it shouldn't happen that pObject is NULL, but better be safe */
+ if (cacheEntry->pObject) {
+ DM_STRUCT_INIT(&CacheDesc); /* prepare desc for reuse */
+ IDirectMusicObject_GetDescriptor (cacheEntry->pObject, &CacheDesc);
+ /* according to MSDN, search order is:
+ 1. DMUS_OBJ_OBJECT
+ 2. DMUS_OBJ_MEMORY (FIXME)
+ 3. DMUS_OBJ_FILENAME & DMUS_OBJ_FULLPATH
+ 4. DMUS_OBJ_NAME & DMUS_OBJ_CATEGORY
+ 5. DMUS_OBJ_NAME
+ 6. DMUS_OBJ_FILENAME */
+ if ((pDesc->dwValidData & DMUS_OBJ_OBJECT) && (CacheDesc.dwValidData & DMUS_OBJ_OBJECT)
+ && IsEqualGUID (&pDesc->guidObject, &CacheDesc.guidObject)) {
+ TRACE(": found it by object GUID\n");
+ return IDirectMusicObject_QueryInterface (cacheEntry->pObject, riid, ppv);
}
- } else if (pDesc->dwValidData & DMUS_OBJ_NAME) {
- /**
- * Usually search by name (for example main procedure name for scripts) after containers loading
- * TODO: container loading code
- */
- TRACE(" comparing %s with cached %s (file:%s)\n", debugstr_w (pDesc->wszName), debugstr_w (cacheEntry->wzName), debugstr_w(cacheEntry->wzFileName));
- if (cacheEntry->wzName && !strncmpW (pDesc->wszName, cacheEntry->wzName, 256)) {
- TRACE(": found it by Name\n");
- if (NULL != cacheEntry->pObject)
- return IDirectMusicObject_QueryInterface ((LPDIRECTMUSICOBJECT) cacheEntry->pObject, riid, ppv);
- }
+ if ((pDesc->dwValidData & DMUS_OBJ_MEMORY) && (CacheDesc.dwValidData & DMUS_OBJ_MEMORY)) {
+ FIXME(": DMUS_OBJ_MEMORY not supported yet\n");
+ }
+ if ((pDesc->dwValidData & DMUS_OBJ_FILENAME) && (pDesc->dwValidData & DMUS_OBJ_FULLPATH)
+ && (CacheDesc.dwValidData & DMUS_OBJ_FILENAME) && (CacheDesc.dwValidData & DMUS_OBJ_FULLPATH)
+ && !strncmpW (pDesc->wszFileName, CacheDesc.wszFileName, DMUS_MAX_FILENAME)) {
+ TRACE(": found it by fullpath filename\n");
+ return IDirectMusicObject_QueryInterface (cacheEntry->pObject, riid, ppv);
+ }
+ if ((pDesc->dwValidData & DMUS_OBJ_NAME) && (pDesc->dwValidData & DMUS_OBJ_CATEGORY)
+ && (CacheDesc.dwValidData & DMUS_OBJ_NAME) && (CacheDesc.dwValidData & DMUS_OBJ_CATEGORY)
+ && !strncmpW (pDesc->wszName, CacheDesc.wszName, DMUS_MAX_NAME)
+ && !strncmpW (pDesc->wszCategory, CacheDesc.wszCategory, DMUS_MAX_CATEGORY)) {
+ TRACE(": found it by name and category\n");
+ return IDirectMusicObject_QueryInterface (cacheEntry->pObject, riid, ppv);
+ }
+ if ((pDesc->dwValidData & DMUS_OBJ_NAME) && (CacheDesc.dwValidData & DMUS_OBJ_NAME)
+ && !strncmpW (pDesc->wszName, CacheDesc.wszName, DMUS_MAX_NAME)) {
+ TRACE(": found it by name\n");
+ return IDirectMusicObject_QueryInterface (cacheEntry->pObject, riid, ppv);
+ }
+ if ((pDesc->dwValidData & DMUS_OBJ_FILENAME) && (CacheDesc.dwValidData & DMUS_OBJ_FILENAME)
+ && !strncmpW (pDesc->wszFileName, CacheDesc.wszFileName, DMUS_MAX_FILENAME)) {
+ TRACE(": found it by filename\n");
+ return IDirectMusicObject_QueryInterface (cacheEntry->pObject, riid, ppv);
+ }
}
}
/* object doesn't exist in cache... guess we'll have to load it */
TRACE(": object does not exist in cache\n");
- if (pDesc->dwValidData & DMUS_OBJ_LOADED) {
- ERR("Wanted a on-memory (cached) entry, but not found. Active Hack (waiting for Load code)\n");
- /* ugly hack waiting for Load impl */
- result = CoCreateInstance (&pDesc->guidClass, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicObject, (LPVOID*) &pObject);
- if (SUCCEEDED(result)) {
- /* add object to cache */
- result = IDirectMusicObject_QueryInterface (pObject, riid, ppv);
- if (SUCCEEDED(result)) {
- newEntry = (LPDMUS_PRIVATE_CACHE_ENTRY) HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(DMUS_PRIVATE_CACHE_ENTRY));
- if (pDesc->dwValidData & DMUS_OBJ_NAME)
- strncpyW (newEntry->wzName, pDesc->wszName, 256);
- newEntry->pObject = pObject;
- list_add_tail (&This->CacheList, &newEntry->entry);
- TRACE(": filled in cache entry\n");
- } else {
- IDirectMusicObject_Release(pObject);
- }
- }
- return result;
- /*
- * Normal code
- *ppv = NULL;
- return E_FAIL;
- */
- }
+
+ /* sometimes it happens that guidClass is missing */
if (!(pDesc->dwValidData & DMUS_OBJ_CLASS)) {
- WARN("guidClass not valid but needed. What they want to do ?\n");
+ ERR(": guidClass not valid but needed\n");
*ppv = NULL;
return DMUS_E_LOADER_NOCLASSID;
}
- result = CoCreateInstance (&pDesc->guidClass, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicObject, (LPVOID*) &pObject);
- if (FAILED(result)) return result;
+
if (pDesc->dwValidData & DMUS_OBJ_FILENAME) {
/* load object from file */
+ /* generate filename; if it's full path, don't add search
+ directory path, otherwise do */
WCHAR wzFileName[MAX_PATH];
- ILoaderStream* pStream;
- IPersistStream* pPersistStream = NULL;
- /* if it's full path, don't add search directory path, otherwise do */
+ DMUS_OBJECTDESC GotDesc;
+ LPSTREAM pStream;
+ IPersistStream* pPersistStream = NULL;
+
if (pDesc->dwValidData & DMUS_OBJ_FULLPATH) {
lstrcpyW(wzFileName, pDesc->wszFileName);
} else {
@@ -164,61 +223,229 @@
strcpyW(p, pDesc->wszFileName);
}
TRACE(": loading from file (%s)\n", debugstr_w(wzFileName));
-
- result = DMUSIC_CreateLoaderStream ((LPSTREAM*) &pStream);
- if (FAILED(result)) return result;
-
- result = ILoaderStream_Attach (pStream, wzFileName, (LPDIRECTMUSICLOADER) iface);
- if (FAILED(result)) return result;
-
- result = IDirectMusicObject_QueryInterface (pObject, &IID_IPersistStream, (LPVOID*) &pPersistStream);
- if (FAILED(result)) return result;
-
- result = IPersistStream_Load (pPersistStream, (LPSTREAM) pStream);
- if (FAILED(result)) return result;
-
- ILoaderStream_IStream_Release ((LPSTREAM) pStream);
- IPersistStream_Release (pPersistStream);
- } else if (pDesc->dwValidData & DMUS_OBJ_STREAM) {
- /* load object from stream */
- IStream* pClonedStream = NULL;
+ /* create stream and associate it with dls collection file */
+ result = DMUSIC_CreateLoaderStream ((LPVOID*)&pStream);
+ if (FAILED(result)) {
+ ERR(": could not create loader stream\n");
+ return result;
+ }
+ result = ILoaderStream_Attach (pStream, wzFileName, (LPDIRECTMUSICLOADER)iface);
+ if (FAILED(result)) {
+ ERR(": could not attach stream to file\n");
+ return result;
+ }
+ /* create object */
+ result = CoCreateInstance (&pDesc->guidClass, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicObject, (LPVOID*)&pObject);
+ if (FAILED(result)) {
+ ERR(": could not create object\n");
+ return result;
+ }
+ /* acquire PersistStream interface */
+ result = IDirectMusicObject_QueryInterface (pObject, &IID_IPersistStream, (LPVOID*)&pPersistStream);
+ if (FAILED(result)) {
+ ERR("failed to Query\n");
+ return result;
+ }
+ /* load */
+ result = IPersistStream_Load (pPersistStream, pStream);
+ if (FAILED(result)) {
+ ERR(": failed to load object\n");
+ return result;
+ }
+ /* get descriptor */
+ DM_STRUCT_INIT(&GotDesc);
+ result = IDirectMusicObject_GetDescriptor (pObject, &GotDesc);
+ if (FAILED(result)) {
+ ERR(": failed to get descriptor\n");
+ return result;
+ }
+ /* now set the "missing" info (check comment at "Loading default DLS collection") */
+ GotDesc.dwValidData |= (DMUS_OBJ_FILENAME | DMUS_OBJ_LOADED); /* this time only these are missing */
+ strncpyW (GotDesc.wszFileName, pDesc->wszFileName, DMUS_MAX_FILENAME); /* set wszFileName, even if futile */
+ /* set descriptor */
+ IDirectMusicObject_SetDescriptor (pObject, &GotDesc);
+ /* release all loading related stuff */
+ IStream_Release (pStream);
+ IPersistStream_Release (pPersistStream);
+ }
+ else if (pDesc->dwValidData & DMUS_OBJ_STREAM) {
+ LPSTREAM pClonedStream = NULL;
IPersistStream* pPersistStream = NULL;
-
+ DMUS_OBJECTDESC GotDesc;
+ /* load object from stream */
TRACE(": loading from stream\n");
- result = IDirectMusicObject_QueryInterface (pObject, &IID_IPersistStream, (LPVOID*) &pPersistStream);
- if (FAILED(result)) return result;
-
- result = IStream_Clone (pDesc->pStream, &pClonedStream);
- if (FAILED(result)) return result;
-
- result = IPersistStream_Load (pPersistStream, pClonedStream);
- if (FAILED(result)) return result;
-
+ /* clone stream, given in pDesc */
+ result = IStream_Clone (pDesc->pStream, &pClonedStream);
+ if (FAILED(result)) {
+ ERR(": failed to clone stream\n");
+ return result;
+ }
+ /* create object */
+ result = CoCreateInstance (&pDesc->guidClass, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicObject, (LPVOID*)&pObject);
+ if (FAILED(result)) {
+ ERR(": could not create object\n");
+ return result;
+ }
+ /* acquire PersistStream interface */
+ result = IDirectMusicObject_QueryInterface (pObject, &IID_IPersistStream, (LPVOID*)&pPersistStream);
+ if (FAILED(result)) {
+ ERR(": could not acquire IPersistStream\n");
+ return result;
+ }
+ /* load */
+ result = IPersistStream_Load (pPersistStream, pClonedStream);
+ if (FAILED(result)) {
+ ERR(": failed to load object\n");
+ return result;
+ }
+ /* get descriptor */
+ DM_STRUCT_INIT(&GotDesc);
+ result = IDirectMusicObject_GetDescriptor (pObject, &GotDesc);
+ if (FAILED(result)) {
+ ERR(": failed to get descriptor\n");
+ return result;
+ }
+ /* now set the "missing" info */
+ GotDesc.dwValidData |= DMUS_OBJ_LOADED; /* only missing data with streams */
+ /* set descriptor */
+ IDirectMusicObject_SetDescriptor (pObject, &GotDesc);
+ /* release all loading-related stuff */
IPersistStream_Release (pPersistStream);
IStream_Release (pClonedStream);
- } else if (pDesc->dwValidData & DMUS_OBJ_OBJECT) {
+ }
+ else if (pDesc->dwValidData & DMUS_OBJ_OBJECT) {
/* load object by GUID */
TRACE(": loading by GUID (only default DLS supported)\n");
if (IsEqualGUID (&pDesc->guidObject, &GUID_DefaultGMCollection)) {
- WCHAR wzFileName[MAX_PATH];
+ /* Loading default DLS collection: *dirty* secret (TM)
+ * By mixing native and builtin loader and collection and
+ * various .dls files, I found out following undocumented
+ * behaviour:
+ * - loader creates two instances of collection object
+ * - it calls ParseDescriptor on first, then releases it
+ * - then it checks returned descriptor; I'm not sure, but
+ * it seems that DMUS_OBJ_OBJECT is not present if DLS
+ * collection is indeed *real* one (gm.dls)
+ * - if above mentioned flag is not set, it creates another
+ * instance and loads it; it also gets descriptor and adds
+ * guidObject and wszFileName (even though this one cannot be
+ * set on native collection, or so it seems)
+ * => it seems to be sort of check whether given 'default
+ * DLS collection' is really one shipped with DX before
+ * actually loading it
+ * -cheers, Rok
+ */
+ WCHAR wzFileName[DMUS_MAX_FILENAME];
+ LPSTREAM pStream;
+ LPSTREAM pProbeStream;
+ IDirectMusicObject *pProbeObject;
+ DMUS_OBJECTDESC ProbeDesc;
+ DMUS_OBJECTDESC GotDesc;
IPersistStream *pPersistStream = NULL;
- ILoaderStream* pStream;
- if (FAILED(DMUSIC_GetDefaultGMPath (wzFileName)))
+
+ /* get the path for default collection */
+ TRACE(": getting default DLS collection path...\n");
+ if (FAILED(DMUSIC_GetDefaultGMPath (wzFileName))) {
+ ERR(": could not get default collection path\n");
return E_FAIL;
- /* load object from file */
- result = DMUSIC_CreateLoaderStream ((LPSTREAM*) &pStream);
- if (FAILED(result)) return result;
-
- result = ILoaderStream_Attach (pStream, wzFileName, (LPDIRECTMUSICLOADER) iface);
- if (FAILED(result)) return result;
-
+ }
+ /* create stream and associate it with dls collection file */
+ TRACE(": creating stream...\n");
+ result = DMUSIC_CreateLoaderStream ((LPVOID*) &pStream);
+ if (FAILED(result)) {
+ ERR(": could not create loader stream\n");
+ return result;
+ }
+ TRACE(": attaching stream...\n");
+ result = ILoaderStream_Attach (pStream, wzFileName, (LPDIRECTMUSICLOADER)iface);
+ if (FAILED(result)) {
+ ERR(": could not attach stream to file\n");
+ return result;
+ }
+ /* now create a clone of stream for "probe" */
+ TRACE(": cloning stream (for probing)...\n");
+ result = IStream_Clone (pStream, &pProbeStream);
+ if (FAILED(result)) {
+ ERR(": could not clone stream\n");
+ return result;
+ }
+ /* create object for "probing" */
+ TRACE(": creating IDirectMusicObject (for probing)...\n");
+ result = CoCreateInstance (&pDesc->guidClass, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicObject, (LPVOID*) &pProbeObject);
+ if (FAILED(result)) {
+ ERR(": could not create object (for probing)\n");
+ return result;
+ }
+ /* get descriptor from stream */
+ TRACE(": parsing descriptor on probe stream...\n");
+ DM_STRUCT_INIT(&ProbeDesc);
+ result = IDirectMusicObject_ParseDescriptor (pProbeObject, pProbeStream, &ProbeDesc);
+ if (FAILED(result)) {
+ ERR(": could not parse descriptor\n");
+ return result;
+ }
+ /* release all probing-related stuff */
+ TRACE(": releasing probing-related stuff...\n");
+ IStream_Release (pProbeStream);
+ IDirectMusicObject_Release (pProbeObject);
+ /* now, if it happens by any chance that dls collection isn't *the one*
+ * TODO: - check if the way below is the appropriate one
+ */
+ if (ProbeDesc.dwValidData & DMUS_OBJ_OBJECT) {
+ LPDMUS_PRIVATE_CACHE_ENTRY newEntry;
+ WARN(": the default DLS collection is not the one shipped with DX\n");
+ /* my tests show that we return pointer to something or NULL, depending on + how
+ * input object was defined (therefore we probably don't return anything for object)
+ * and DMUS_E_LOADER_NOFILENAME as error code
+ * (I'd personally rather return DMUS_S_PARTIALLOAD, but I don't set rules)
+ */
+ newEntry = (LPDMUS_PRIVATE_CACHE_ENTRY) HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(DMUS_PRIVATE_CACHE_ENTRY));
+ newEntry->pObject = NULL;
+ newEntry->bIsFaultyDLS = TRUE; /* so that cache won't try to get descriptor */
+ list_add_tail (&This->CacheList, &newEntry->entry);
+ TRACE(": filled in cache entry\n");
+ return DMUS_E_LOADER_NOFILENAME;
+ }
+ /* now the real loading... create object */
+ TRACE(": creating IDirectMusicObject (for loading)\n");
+ result = CoCreateInstance (&pDesc->guidClass, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicObject, (LPVOID*) &pObject);
+ if (FAILED(result)) {
+ ERR(": could not create object (for loading)\n");
+ return result;
+ }
+ /* acquire PersistStream interface */
+ TRACE(": getting IPersistStream on object...\n");
result = IDirectMusicObject_QueryInterface (pObject, &IID_IPersistStream, (LPVOID*) &pPersistStream);
- if (FAILED(result)) return result;
-
- result = IPersistStream_Load (pPersistStream, (LPSTREAM) pStream);
- if (FAILED(result)) return result;
-
- ILoaderStream_IStream_Release ((LPSTREAM) pStream);
+ if (FAILED(result)) {
+ ERR(": could not acquire IPersistStream\n");
+ return result;
+ }
+ /* load */
+ TRACE(": loading object..\n");
+ result = IPersistStream_Load (pPersistStream, pStream);
+ if (FAILED(result)) {
+ ERR(": failed to load object\n");
+ return result;
+ }
+ /* get descriptor */
+ TRACE(": getting descriptor of loaded object...\n");
+ DM_STRUCT_INIT(&GotDesc);
+ result = IDirectMusicObject_GetDescriptor (pObject, &GotDesc);
+ if (FAILED(result)) {
+ ERR(": failed to get descriptor\n");
+ return result;
+ }
+ /* now set the "missing" info */
+ TRACE(": adding \"missing\" info...\n");
+ GotDesc.dwValidData |= (DMUS_OBJ_OBJECT | DMUS_OBJ_FILENAME | DMUS_OBJ_FULLPATH | DMUS_OBJ_LOADED);
+ memcpy (&GotDesc.guidObject, &pDesc->guidObject, sizeof(GUID)); /* set guidObject */
+ strncpyW (GotDesc.wszFileName, wzFileName, DMUS_MAX_FILENAME); /* set wszFileName, even if futile */
+ /* set descriptor */
+ TRACE(": setting descriptor\n");
+ IDirectMusicObject_SetDescriptor (pObject, &GotDesc);
+ /* release all loading related stuff */
+ TRACE(": releasing all loading-related stuff\n");
+ IStream_Release (pStream);
IPersistStream_Release (pPersistStream);
} else {
return E_FAIL;
@@ -228,129 +455,187 @@
FIXME(": unknown/unsupported way of loading\n");
return E_FAIL;
}
+
/* add object to cache */
newEntry = (LPDMUS_PRIVATE_CACHE_ENTRY) HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(DMUS_PRIVATE_CACHE_ENTRY));
- if (pDesc->dwValidData & DMUS_OBJ_OBJECT)
- memcpy (&newEntry->guidObject, &pDesc->guidObject, sizeof (pDesc->guidObject));
- if (pDesc->dwValidData & DMUS_OBJ_FILENAME)
- strncpyW (newEntry->wzFileName, pDesc->wszFileName, MAX_PATH);
- if (pObject)
+ if (pObject) {
newEntry->pObject = pObject;
+ newEntry->bIsFaultyDLS = FALSE;
+ }
list_add_tail (&This->CacheList, &newEntry->entry);
TRACE(": filled in cache entry\n");
-
- /* for debug purposes (e.g. to check if all files are cached) */
+
#if 0
+ /* for debug purposes (e.g. to check if all files are cached) */
+ TRACE("*** Loader's cache ***\n");
int i = 0;
LIST_FOR_EACH (listEntry, &This->CacheList) {
i++;
- cacheEntry = LIST_ENTRY( listEntry, DMUS_PRIVATE_CACHE_ENTRY, entry );
- TRACE("Entry nr. %i: GUID = %s, FileName = %s\n", i, debugstr_guid (&cacheEntry->guidObject), debugstr_w (cacheEntry->wzFileName));
+ TRACE("Entry nr. %i:\n", i);
+ cacheEntry = LIST_ENTRY(listEntry, DMUS_PRIVATE_CACHE_ENTRY, entry);
+ if (cacheEntry->bIsFaultyDLS == FALSE) {
+ DM_STRUCT_INIT(&CacheDesc); /* prepare desc for reuse */
+ IDirectMusicObject_GetDescriptor (cacheEntry->pObject, &CacheDesc);
+ DMUSIC_dump_DMUS_OBJECTDESC(&CacheDesc);
+ } else {
+ DPRINTF("faulty DLS collection\n");
+ }
}
#endif
return IDirectMusicObject_QueryInterface (pObject, riid, ppv);
}
-HRESULT WINAPI IDirectMusicLoader8Impl_SetObject (LPDIRECTMUSICLOADER8 iface, LPDMUS_OBJECTDESC pDesc)
-{
+HRESULT WINAPI IDirectMusicLoader8Impl_SetObject (LPDIRECTMUSICLOADER8 iface, LPDMUS_OBJECTDESC pDesc) {
ICOM_THIS(IDirectMusicLoader8Impl,iface);
+ DMUS_PRIVATE_ALIAS_ENTRY *newEntry;
+ DMUS_OBJECTDESC Desc;
+
+ TRACE("(%p, %p): pDesc:\n", This, pDesc);
+ if (TRACE_ON(dmloader))
+ DMUSIC_dump_DMUS_OBJECTDESC(pDesc);
+
+ /* create stream and load additional info from it */
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME) {
+ /* generate filename; if it's full path, don't add search
+ directory path, otherwise do */
+ WCHAR wzFileName[MAX_PATH];
+ LPSTREAM pStream;
+ IDirectMusicObject* pObject;
- FIXME("(%p, %p): stub\n", This, pDesc);
+ if (pDesc->dwValidData & DMUS_OBJ_FULLPATH) {
+ lstrcpyW(wzFileName, pDesc->wszFileName);
+ } else {
+ WCHAR *p;
+ lstrcpyW(wzFileName, This->wzSearchPath);
+ p = wzFileName + lstrlenW(wzFileName);
+ if (p > wzFileName && p[-1] != '\\') *p++ = '\\';
+ strcpyW(p, pDesc->wszFileName);
+ }
+ /* create stream */
+ DMUSIC_CreateLoaderStream ((LPVOID*) &pStream);
+ /* attach stream */
+ ILoaderStream_Attach (pStream, wzFileName, (LPDIRECTMUSICLOADER)iface);
+ /* create object */
+ CoCreateInstance (&pDesc->guidClass, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicObject, (LPVOID*)&pObject);
+ /* parse descriptor */
+ DM_STRUCT_INIT(&Desc);
+ IDirectMusicObject_ParseDescriptor (pObject, pStream, &Desc);
+ /* release everything */
+ IDirectMusicObject_Release (pObject);
+ IStream_Release (pStream);
+ }
+ else if (pDesc->dwValidData & DMUS_OBJ_STREAM) {
+ /* clone stream */
+ LPSTREAM pStream = NULL;
+ IDirectMusicObject* pObject;
+ IStream_Clone (pDesc->pStream, &pStream);
+ /* create object */
+ CoCreateInstance (&pDesc->guidClass, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicObject, (LPVOID*)&pObject);
+ /* parse descriptor */
+ DM_STRUCT_INIT(&Desc);
+ IDirectMusicObject_ParseDescriptor (pObject, pStream, &Desc);
+ /* release everything */
+ IDirectMusicObject_Release (pObject);
+ IStream_Release (pStream);
+ }
+ else {
+ WARN(": no way to get additional info\n");
+ }
+
+ /* now set additional info... my tests show that existing fields should be overwritten */
+ if (Desc.dwValidData & DMUS_OBJ_OBJECT)
+ memcpy (&pDesc->guidObject, &Desc.guidObject, sizeof(Desc.guidObject));
+ if (Desc.dwValidData & DMUS_OBJ_CLASS)
+ memcpy (&pDesc->guidClass, &Desc.guidClass, sizeof(Desc.guidClass));
+ if (Desc.dwValidData & DMUS_OBJ_NAME)
+ strncpyW (pDesc->wszName, Desc.wszName, DMUS_MAX_NAME);
+ if (Desc.dwValidData & DMUS_OBJ_CATEGORY)
+ strncpyW (pDesc->wszCategory, Desc.wszCategory, DMUS_MAX_CATEGORY);
+ if (Desc.dwValidData & DMUS_OBJ_FILENAME)
+ strncpyW (pDesc->wszFileName, Desc.wszFileName, DMUS_MAX_FILENAME);
+ if (Desc.dwValidData & DMUS_OBJ_VERSION)
+ memcpy (&pDesc->vVersion, &Desc.vVersion, sizeof(Desc.vVersion));
+ if (Desc.dwValidData & DMUS_OBJ_DATE)
+ memcpy (&pDesc->ftDate, &Desc.ftDate, sizeof(Desc.ftDate));
+ pDesc->dwValidData |= Desc.dwValidData; /* add new flags */
+
+ /* add new entry */
+ TRACE(": adding alias entry with following info:\n");
+ if (TRACE_ON(dmloader))
+ DMUSIC_dump_DMUS_OBJECTDESC(pDesc);
+ newEntry = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(DMUS_PRIVATE_ALIAS_ENTRY));
+ newEntry->pDesc = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ memcpy (newEntry->pDesc, pDesc, sizeof(DMUS_OBJECTDESC));
+ list_add_tail (&This->AliasList, &newEntry->entry);
+
return S_OK;
}
-HRESULT WINAPI IDirectMusicLoader8Impl_SetSearchDirectory (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass, WCHAR* pwzPath, BOOL fClear)
-{
+HRESULT WINAPI IDirectMusicLoader8Impl_SetSearchDirectory (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass, WCHAR* pwzPath, BOOL fClear) {
ICOM_THIS(IDirectMusicLoader8Impl,iface);
-
TRACE("(%p, %s, %s, %d)\n", This, debugstr_guid(rguidClass), debugstr_w(pwzPath), fClear);
if (0 == strncmpW(This->wzSearchPath, pwzPath, MAX_PATH)) {
return S_FALSE;
}
strncpyW(This->wzSearchPath, pwzPath, MAX_PATH);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLoader8Impl_ScanDirectory (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass, WCHAR* pwzFileExtension, WCHAR* pwzScanFileName)
-{
+HRESULT WINAPI IDirectMusicLoader8Impl_ScanDirectory (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass, WCHAR* pwzFileExtension, WCHAR* pwzScanFileName) {
ICOM_THIS(IDirectMusicLoader8Impl,iface);
-
FIXME("(%p, %s, %p, %p): stub\n", This, debugstr_guid(rguidClass), pwzFileExtension, pwzScanFileName);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLoader8Impl_CacheObject (LPDIRECTMUSICLOADER8 iface, IDirectMusicObject* pObject)
-{
+HRESULT WINAPI IDirectMusicLoader8Impl_CacheObject (LPDIRECTMUSICLOADER8 iface, IDirectMusicObject* pObject) {
ICOM_THIS(IDirectMusicLoader8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pObject);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLoader8Impl_ReleaseObject (LPDIRECTMUSICLOADER8 iface, IDirectMusicObject* pObject)
-{
+HRESULT WINAPI IDirectMusicLoader8Impl_ReleaseObject (LPDIRECTMUSICLOADER8 iface, IDirectMusicObject* pObject) {
ICOM_THIS(IDirectMusicLoader8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pObject);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLoader8Impl_ClearCache (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass)
-{
+HRESULT WINAPI IDirectMusicLoader8Impl_ClearCache (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass) {
ICOM_THIS(IDirectMusicLoader8Impl,iface);
-
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidClass));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLoader8Impl_EnableCache (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass, BOOL fEnable)
-{
+HRESULT WINAPI IDirectMusicLoader8Impl_EnableCache (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass, BOOL fEnable) {
ICOM_THIS(IDirectMusicLoader8Impl,iface);
-
FIXME("(%p, %s, %d): stub\n", This, debugstr_guid(rguidClass), fEnable);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLoader8Impl_EnumObject (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc)
-{
+HRESULT WINAPI IDirectMusicLoader8Impl_EnumObject (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc) {
ICOM_THIS(IDirectMusicLoader8Impl,iface);
-
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidClass), dwIndex, pDesc);
-
return S_OK;
}
/* IDirectMusicLoader8 Interface part follow: */
-void WINAPI IDirectMusicLoader8Impl_CollectGarbage (LPDIRECTMUSICLOADER8 iface)
-{
+void WINAPI IDirectMusicLoader8Impl_CollectGarbage (LPDIRECTMUSICLOADER8 iface) {
ICOM_THIS(IDirectMusicLoader8Impl,iface);
-
FIXME("(%p): stub\n", This);
}
-HRESULT WINAPI IDirectMusicLoader8Impl_ReleaseObjectByUnknown (LPDIRECTMUSICLOADER8 iface, IUnknown* pObject)
-{
+HRESULT WINAPI IDirectMusicLoader8Impl_ReleaseObjectByUnknown (LPDIRECTMUSICLOADER8 iface, IUnknown* pObject) {
ICOM_THIS(IDirectMusicLoader8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pObject);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicLoader8Impl_LoadObjectFromFile (LPDIRECTMUSICLOADER8 iface,
+HRESULT WINAPI IDirectMusicLoader8Impl_LoadObjectFromFile (LPDIRECTMUSICLOADER8 iface,
REFGUID rguidClassID,
REFIID iidInterfaceID,
WCHAR* pwzFilePath,
- void** ppObject)
-{
+ void** ppObject) {
ICOM_THIS(IDirectMusicLoader8Impl,iface);
DMUS_OBJECTDESC ObjDesc;
@@ -381,8 +666,7 @@
return IDirectMusicLoader8Impl_GetObject (iface, &ObjDesc, iidInterfaceID, ppObject);
}
-ICOM_VTABLE(IDirectMusicLoader8) DirectMusicLoader8_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicLoader8) DirectMusicLoader8_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
IDirectMusicLoader8Impl_QueryInterface,
IDirectMusicLoader8Impl_AddRef,
@@ -402,33 +686,26 @@
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicLoader (LPCGUID lpcGUID, LPDIRECTMUSICLOADER8 *ppDMLoad, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicLoader8Impl *dmloader;
+HRESULT WINAPI DMUSIC_CreateDirectMusicLoaderImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicLoader8Impl *obj;
- TRACE("(%p,%p,%p)\n",lpcGUID, ppDMLoad, pUnkOuter);
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicLoader) ||
- IsEqualIID (lpcGUID, &IID_IDirectMusicLoader8)) {
- dmloader = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicLoader8Impl));
- if (NULL == dmloader) {
- *ppDMLoad = (LPDIRECTMUSICLOADER8)NULL;
- return E_OUTOFMEMORY;
- }
- dmloader->lpVtbl = &DirectMusicLoader8_Vtbl;
- dmloader->ref = 1;
- MultiByteToWideChar (CP_ACP, 0, ".\\", -1, dmloader->wzSearchPath, MAX_PATH);
- list_init (&dmloader->CacheList);
- *ppDMLoad = (LPDIRECTMUSICLOADER8)dmloader;
- return S_OK;
+ TRACE("(%p,%p,%p)\n",lpcGUID, ppobj, pUnkOuter);
+ obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicLoader8Impl));
+ if (NULL == obj) {
+ *ppobj = (LPDIRECTMUSICLOADER8)NULL;
+ return E_OUTOFMEMORY;
}
-
- WARN("No interface found\n");
- return E_NOINTERFACE;
+ obj->lpVtbl = &DirectMusicLoader8_Vtbl;
+ obj->ref = 0; /* will be inited with QueryInterface */
+ MultiByteToWideChar (CP_ACP, 0, ".\\", -1, obj->wzSearchPath, MAX_PATH);
+ list_init (&obj->CacheList);
+ list_init (&obj->AliasList);
+
+ return IDirectMusicLoader8Impl_QueryInterface ((LPDIRECTMUSICLOADER8)obj, lpcGUID, ppobj);
}
/* help function for IDirectMusicLoader8Impl_GetObject */
-HRESULT WINAPI DMUSIC_GetDefaultGMPath (WCHAR wszPath[MAX_PATH])
-{
+HRESULT WINAPI DMUSIC_GetDefaultGMPath (WCHAR wszPath[MAX_PATH]) {
HKEY hkDM;
DWORD returnType, sizeOfReturnBuffer = MAX_PATH;
char szPath[MAX_PATH];
diff --git a/dlls/dmloader/loaderstream.c b/dlls/dmloader/loaderstream.c
index 397baeb..bf6c683 100644
--- a/dlls/dmloader/loaderstream.c
+++ b/dlls/dmloader/loaderstream.c
@@ -1,6 +1,6 @@
/* ILoaderStream Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -19,30 +19,23 @@
#define NONAMELESSUNION
#define NONAMELESSSTRUCT
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-#include "wine/unicode.h"
#include "dmloader_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmloader);
+WINE_DECLARE_DEBUG_CHANNEL(dmfileraw);
/*****************************************************************************
* Custom functions:
*/
-HRESULT WINAPI ILoaderStream_Attach (ILoaderStream* This, LPCWSTR wzFile, IDirectMusicLoader *pLoader)
-{
+HRESULT WINAPI ILoaderStream_Attach (LPSTREAM iface, LPCWSTR wzFile, IDirectMusicLoader *pLoader) {
+ ICOM_THIS_MULTI(ILoaderStream, StreamVtbl, iface);
TRACE("(%p, %s, %p)\n", This, debugstr_w(wzFile), pLoader);
- ILoaderStream_Detach (This);
+ ILoaderStream_Detach (iface);
This->hFile = CreateFileW (wzFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (This->hFile == INVALID_HANDLE_VALUE) {
TRACE(": failed\n");
- return E_FAIL;
+ return DMUS_E_LOADER_FAILEDOPEN;
}
/* create IDirectMusicGetLoader */
(LPDIRECTMUSICLOADER) This->pLoader = pLoader;
@@ -51,8 +44,8 @@
return S_OK;
}
-void WINAPI ILoaderStream_Detach (ILoaderStream* This)
-{
+void WINAPI ILoaderStream_Detach (LPSTREAM iface) {
+ ICOM_THIS_MULTI(ILoaderStream, StreamVtbl, iface);
if (This->hFile != INVALID_HANDLE_VALUE) {
CloseHandle(This->hFile);
}
@@ -60,20 +53,24 @@
}
/*****************************************************************************
- * ILoaderStream IStream:
+ * ILoaderStream implementation
*/
-HRESULT WINAPI ILoaderStream_IStream_QueryInterface (LPSTREAM iface, REFIID riid, void** ppobj)
-{
- ICOM_THIS_MULTI(ILoaderStream, StreamVtbl, iface);
+/* ILoaderStream IUnknown part: */
+HRESULT WINAPI ILoaderStream_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, void** ppobj) {
+ ICOM_THIS_MULTI(ILoaderStream, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IStream)) {
+ TRACE("(%p, %s, %p)\n", This, debugstr_guid(riid), ppobj);
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPVOID)&This->UnknownVtbl;
+ ILoaderStream_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IStream)) {
*ppobj = (LPVOID)&This->StreamVtbl;
- ILoaderStream_IStream_AddRef (iface);
+ ILoaderStream_IStream_AddRef ((LPSTREAM)&This->StreamVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IDirectMusicGetLoader)) {
*ppobj = (LPVOID)&This->GetLoaderVtbl;
- ILoaderStream_IStream_AddRef (iface);
+ ILoaderStream_IDirectMusicGetLoader_AddRef ((LPDIRECTMUSICGETLOADER)&This->GetLoaderVtbl);
return S_OK;
}
@@ -81,16 +78,14 @@
return E_NOINTERFACE;
}
-ULONG WINAPI ILoaderStream_IStream_AddRef (LPSTREAM iface)
-{
- ICOM_THIS_MULTI(ILoaderStream, StreamVtbl, iface);
+ULONG WINAPI ILoaderStream_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(ILoaderStream, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI ILoaderStream_IStream_Release (LPSTREAM iface)
-{
- ICOM_THIS_MULTI(ILoaderStream, StreamVtbl, iface);
+ULONG WINAPI ILoaderStream_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(ILoaderStream, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -99,22 +94,45 @@
return ref;
}
-HRESULT WINAPI ILoaderStream_IStream_Read (LPSTREAM iface, void* pv, ULONG cb, ULONG* pcbRead)
-{
+ICOM_VTABLE(IUnknown) LoaderStream_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ ILoaderStream_IUnknown_QueryInterface,
+ ILoaderStream_IUnknown_AddRef,
+ ILoaderStream_IUnknown_Release
+};
+
+/* ILoaderStream IStream part: */
+HRESULT WINAPI ILoaderStream_IStream_QueryInterface (LPSTREAM iface, REFIID riid, void** ppobj) {
+ ICOM_THIS_MULTI(ILoaderStream, StreamVtbl, iface);
+ return ILoaderStream_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI ILoaderStream_IStream_AddRef (LPSTREAM iface) {
+ ICOM_THIS_MULTI(ILoaderStream, StreamVtbl, iface);
+ return ILoaderStream_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI ILoaderStream_IStream_Release (LPSTREAM iface) {
+ ICOM_THIS_MULTI(ILoaderStream, StreamVtbl, iface);
+ return ILoaderStream_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI ILoaderStream_IStream_Read (LPSTREAM iface, void* pv, ULONG cb, ULONG* pcbRead) {
ICOM_THIS_MULTI(ILoaderStream, StreamVtbl, iface);
ULONG cbRead;
-
+ TRACE_(dmfileraw)("(%p, %p, 0x%04lx, %p)\n", This, pv, cb, pcbRead);
if (This->hFile == INVALID_HANDLE_VALUE) return E_FAIL;
if (pcbRead == NULL) pcbRead = &cbRead;
if (!ReadFile (This->hFile, pv, cb, pcbRead, NULL) || *pcbRead != cb) return E_FAIL;
-
+ TRACE_(dmfileraw)(": data (size = 0x%04lx): '%s'\n", *pcbRead, debugstr_an(pv, *pcbRead));
return S_OK;
}
-HRESULT WINAPI ILoaderStream_IStream_Seek (LPSTREAM iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition)
-{
+HRESULT WINAPI ILoaderStream_IStream_Seek (LPSTREAM iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition) {
ICOM_THIS_MULTI(ILoaderStream, StreamVtbl, iface);
LARGE_INTEGER liNewPos;
+
+ TRACE_(dmfileraw)("(%p, 0x%04llx, %s, %p)\n", This, dlibMove.QuadPart, resolve_STREAM_SEEK(dwOrigin), plibNewPosition);
if (This->hFile == INVALID_HANDLE_VALUE) return E_FAIL;
@@ -127,14 +145,13 @@
return S_OK;
}
-HRESULT WINAPI ILoaderStream_IStream_Clone (LPSTREAM iface, IStream** ppstm)
-{
+HRESULT WINAPI ILoaderStream_IStream_Clone (LPSTREAM iface, IStream** ppstm) {
ICOM_THIS_MULTI(ILoaderStream, StreamVtbl, iface);
- ILoaderStream* pOther = NULL;
+ LPSTREAM pOther = NULL;
HRESULT result;
TRACE("(%p, %p)\n", iface, ppstm);
- result = DMUSIC_CreateLoaderStream ((LPSTREAM*)&pOther);
+ result = DMUSIC_CreateLoaderStream ((LPVOID*)&pOther);
if (FAILED(result)) return result;
if (This->hFile != INVALID_HANDLE_VALUE) {
ULARGE_INTEGER ullCurrentPosition;
@@ -160,57 +177,47 @@
return S_OK;
}
-/* not needed*/
-HRESULT WINAPI ILoaderStream_IStream_Write (LPSTREAM iface, const void* pv, ULONG cb, ULONG* pcbWritten)
-{
+HRESULT WINAPI ILoaderStream_IStream_Write (LPSTREAM iface, const void* pv, ULONG cb, ULONG* pcbWritten) {
ERR(": should not be needed\n");
return E_NOTIMPL;
}
-HRESULT WINAPI ILoaderStream_IStream_SetSize (LPSTREAM iface, ULARGE_INTEGER libNewSize)
-{
+HRESULT WINAPI ILoaderStream_IStream_SetSize (LPSTREAM iface, ULARGE_INTEGER libNewSize) {
ERR(": should not be needed\n");
return E_NOTIMPL;
}
-HRESULT WINAPI ILoaderStream_IStream_CopyTo (LPSTREAM iface, IStream* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten)
-{
+HRESULT WINAPI ILoaderStream_IStream_CopyTo (LPSTREAM iface, IStream* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten) {
ERR(": should not be needed\n");
return E_NOTIMPL;
}
-HRESULT WINAPI ILoaderStream_IStream_Commit (LPSTREAM iface, DWORD grfCommitFlags)
-{
+HRESULT WINAPI ILoaderStream_IStream_Commit (LPSTREAM iface, DWORD grfCommitFlags) {
ERR(": should not be needed\n");
return E_NOTIMPL;
}
-HRESULT WINAPI ILoaderStream_IStream_Revert (LPSTREAM iface)
-{
+HRESULT WINAPI ILoaderStream_IStream_Revert (LPSTREAM iface) {
ERR(": should not be needed\n");
return E_NOTIMPL;
}
-HRESULT WINAPI ILoaderStream_IStream_LockRegion (LPSTREAM iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType)
-{
+HRESULT WINAPI ILoaderStream_IStream_LockRegion (LPSTREAM iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) {
ERR(": should not be needed\n");
return E_NOTIMPL;
}
-HRESULT WINAPI ILoaderStream_IStream_UnlockRegion (LPSTREAM iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType)
-{
+HRESULT WINAPI ILoaderStream_IStream_UnlockRegion (LPSTREAM iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType) {
ERR(": should not be needed\n");
return E_NOTIMPL;
}
-HRESULT WINAPI ILoaderStream_IStream_Stat (LPSTREAM iface, STATSTG* pstatstg, DWORD grfStatFlag)
-{
+HRESULT WINAPI ILoaderStream_IStream_Stat (LPSTREAM iface, STATSTG* pstatstg, DWORD grfStatFlag) {
ERR(": should not be needed\n");
return E_NOTIMPL;
}
-ICOM_VTABLE(IStream) LoaderStream_Stream_Vtbl =
-{
+ICOM_VTABLE(IStream) LoaderStream_Stream_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
ILoaderStream_IStream_QueryInterface,
ILoaderStream_IStream_AddRef,
@@ -229,28 +236,24 @@
};
/*****************************************************************************
- * ILoaderStream IDirectMusicGetLoader:
+ * ILoaderStream IDirectMusicGetLoader part:
*/
-HRESULT WINAPI ILoaderStream_IDirectMusicGetLoader_QueryInterface (LPDIRECTMUSICGETLOADER iface, REFIID riid, void** ppobj)
-{
+HRESULT WINAPI ILoaderStream_IDirectMusicGetLoader_QueryInterface (LPDIRECTMUSICGETLOADER iface, REFIID riid, void** ppobj) {
ICOM_THIS_MULTI(ILoaderStream, GetLoaderVtbl, iface);
- return ILoaderStream_IStream_QueryInterface ((LPSTREAM)&This->StreamVtbl, riid, ppobj);
+ return ILoaderStream_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
}
-ULONG WINAPI ILoaderStream_IDirectMusicGetLoader_AddRef (LPDIRECTMUSICGETLOADER iface)
-{
+ULONG WINAPI ILoaderStream_IDirectMusicGetLoader_AddRef (LPDIRECTMUSICGETLOADER iface) {
ICOM_THIS_MULTI(ILoaderStream, GetLoaderVtbl, iface);
- return ILoaderStream_IStream_AddRef ((LPSTREAM)&This->StreamVtbl);
+ return ILoaderStream_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI ILoaderStream_IDirectMusicGetLoader_Release (LPDIRECTMUSICGETLOADER iface)
-{
+ULONG WINAPI ILoaderStream_IDirectMusicGetLoader_Release (LPDIRECTMUSICGETLOADER iface) {
ICOM_THIS_MULTI(ILoaderStream, GetLoaderVtbl, iface);
- return ILoaderStream_IStream_Release ((LPSTREAM)&This->StreamVtbl);
+ return ILoaderStream_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
}
-HRESULT WINAPI ILoaderStream_IDirectMusicGetLoader_GetLoader (LPDIRECTMUSICGETLOADER iface, IDirectMusicLoader **ppLoader)
-{
+HRESULT WINAPI ILoaderStream_IDirectMusicGetLoader_GetLoader (LPDIRECTMUSICGETLOADER iface, IDirectMusicLoader **ppLoader) {
ICOM_THIS_MULTI(ILoaderStream, GetLoaderVtbl, iface);
TRACE("(%p, %p)\n", This, ppLoader);
@@ -260,8 +263,7 @@
return S_OK;
}
-ICOM_VTABLE(IDirectMusicGetLoader) LoaderStream_GetLoader_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicGetLoader) LoaderStream_GetLoader_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
ILoaderStream_IDirectMusicGetLoader_QueryInterface,
ILoaderStream_IDirectMusicGetLoader_AddRef,
@@ -269,22 +271,19 @@
ILoaderStream_IDirectMusicGetLoader_GetLoader
};
-
-HRESULT WINAPI DMUSIC_CreateLoaderStream (LPSTREAM* ppStream)
-{
+HRESULT WINAPI DMUSIC_CreateLoaderStream (LPVOID* ppobj) {
ILoaderStream *pStream;
- TRACE("(%p)\n", ppStream);
-
+ TRACE("(%p)\n", ppobj);
pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(ILoaderStream));
if (NULL == pStream) {
- *ppStream = (LPSTREAM)NULL;
+ *ppobj = (LPVOID) NULL;
return E_OUTOFMEMORY;
}
+ pStream->UnknownVtbl = &LoaderStream_Unknown_Vtbl;
pStream->StreamVtbl = &LoaderStream_Stream_Vtbl;
pStream->GetLoaderVtbl = &LoaderStream_GetLoader_Vtbl;
- pStream->ref = 1;
-
- *ppStream = (LPSTREAM)pStream;
- return S_OK;
+ pStream->ref = 0; /* will be inited with QueryInterface */
+
+ return ILoaderStream_IUnknown_QueryInterface ((LPUNKNOWN)&pStream->UnknownVtbl, &IID_IStream, ppobj);
}
diff --git a/dlls/dmloader/regsvr.c b/dlls/dmloader/regsvr.c
index 698542b..9e8fefa 100644
--- a/dlls/dmloader/regsvr.c
+++ b/dlls/dmloader/regsvr.c
@@ -18,21 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include <stdarg.h>
-#include <string.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winreg.h"
-#include "winerror.h"
-
-#include "dmusics.h"
-#include "dmusici.h"
-#include "dmplugin.h"
-
-#include "wine/debug.h"
+#include "dmloader_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmloader);
@@ -44,8 +30,7 @@
/***********************************************************************
* interface for self-registering
*/
-struct regsvr_interface
-{
+struct regsvr_interface {
IID const *iid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
IID const *base_iid; /* can be NULL to omit */
@@ -57,8 +42,7 @@
static HRESULT register_interfaces(struct regsvr_interface const *list);
static HRESULT unregister_interfaces(struct regsvr_interface const *list);
-struct regsvr_coclass
-{
+struct regsvr_coclass {
CLSID const *clsid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
LPCSTR ips; /* can be NULL to omit */
@@ -124,8 +108,7 @@
/***********************************************************************
* register_interfaces
*/
-static HRESULT register_interfaces(struct regsvr_interface const *list)
-{
+static HRESULT register_interfaces(struct regsvr_interface const *list) {
LONG res = ERROR_SUCCESS;
HKEY interface_key;
@@ -194,8 +177,7 @@
/***********************************************************************
* unregister_interfaces
*/
-static HRESULT unregister_interfaces(struct regsvr_interface const *list)
-{
+static HRESULT unregister_interfaces(struct regsvr_interface const *list) {
LONG res = ERROR_SUCCESS;
HKEY interface_key;
@@ -219,8 +201,7 @@
/***********************************************************************
* register_coclasses
*/
-static HRESULT register_coclasses(struct regsvr_coclass const *list)
-{
+static HRESULT register_coclasses(struct regsvr_coclass const *list) {
LONG res = ERROR_SUCCESS;
HKEY coclass_key;
@@ -301,8 +282,7 @@
/***********************************************************************
* unregister_coclasses
*/
-static HRESULT unregister_coclasses(struct regsvr_coclass const *list)
-{
+static HRESULT unregister_coclasses(struct regsvr_coclass const *list) {
LONG res = ERROR_SUCCESS;
HKEY coclass_key;
@@ -338,8 +318,7 @@
/***********************************************************************
* regsvr_key_guid
*/
-static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid)
-{
+static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid) {
WCHAR buf[39];
StringFromGUID2(guid, buf, 39);
@@ -352,8 +331,7 @@
static LONG register_key_defvalueW(
HKEY base,
WCHAR const *name,
- WCHAR const *value)
-{
+ WCHAR const *value) {
LONG res;
HKEY key;
@@ -372,8 +350,7 @@
static LONG register_key_defvalueA(
HKEY base,
WCHAR const *name,
- char const *value)
-{
+ char const *value) {
LONG res;
HKEY key;
@@ -394,8 +371,7 @@
char const *progid,
char const *curver_progid,
char const *name,
- char const *extra)
-{
+ char const *extra) {
LONG res;
HKEY progid_key;
@@ -439,8 +415,7 @@
/***********************************************************************
* recursive_delete_key
*/
-static LONG recursive_delete_key(HKEY key)
-{
+static LONG recursive_delete_key(HKEY key) {
LONG res;
WCHAR subkey_name[MAX_PATH];
DWORD cName;
@@ -471,8 +446,7 @@
/***********************************************************************
* recursive_delete_keyA
*/
-static LONG recursive_delete_keyA(HKEY base, char const *name)
-{
+static LONG recursive_delete_keyA(HKEY base, char const *name) {
LONG res;
HKEY key;
@@ -487,8 +461,7 @@
/***********************************************************************
* recursive_delete_keyW
*/
-static LONG recursive_delete_keyW(HKEY base, WCHAR const *name)
-{
+static LONG recursive_delete_keyW(HKEY base, WCHAR const *name) {
LONG res;
HKEY key;
@@ -534,8 +507,7 @@
/***********************************************************************
* DllRegisterServer (DMLOADER.3)
*/
-HRESULT WINAPI DMLOADER_DllRegisterServer(void)
-{
+HRESULT WINAPI DMLOADER_DllRegisterServer(void) {
HRESULT hr;
TRACE("\n");
@@ -549,8 +521,7 @@
/***********************************************************************
* DllUnregisterServer (DMLOADER.4)
*/
-HRESULT WINAPI DMLOADER_DllUnregisterServer(void)
-{
+HRESULT WINAPI DMLOADER_DllUnregisterServer(void) {
HRESULT hr;
TRACE("\n");
diff --git a/dlls/dmloader/version.rc b/dlls/dmloader/version.rc
index 43d1044..a7565c4 100644
--- a/dlls/dmloader/version.rc
+++ b/dlls/dmloader/version.rc
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc <rok.mandeljc@gimb.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -18,10 +18,10 @@
#define WINE_FILEDESCRIPTION_STR "Wine DirectMusic Loader"
#define WINE_FILENAME_STR "dmloader.dll"
-#define WINE_FILEVERSION 4,8,1,881
-#define WINE_FILEVERSION_STR "4.8.1.881"
-#define WINE_PRODUCTVERSION 4,8,1,881
-#define WINE_PRODUCTVERSION_STR "4.8"
+#define WINE_FILEVERSION 4,9,0,900
+#define WINE_FILEVERSION_STR "4.9.0.900"
+#define WINE_PRODUCTVERSION 4,9,0,900
+#define WINE_PRODUCTVERSION_STR "4.9"
#define WINE_PRODUCTNAME_STR "DirectX"
#include "wine/wine_common_ver.rc"
diff --git a/dlls/dmscript/dmscript_main.c b/dlls/dmscript/dmscript_main.c
index df9b2dd..ab8f3a3 100644
--- a/dlls/dmscript/dmscript_main.c
+++ b/dlls/dmscript/dmscript_main.c
@@ -1,6 +1,6 @@
/* DirectMusicScript Main
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,8 +21,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(dmscript);
-typedef struct
-{
+typedef struct {
/* IUnknown fields */
ICOM_VFIELD(IClassFactory);
DWORD ref;
@@ -31,41 +30,32 @@
/******************************************************************
* DirectMusicScriptAutoImplSegment ClassFactory
*/
-static HRESULT WINAPI ScriptAutoImplSegmentCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI ScriptAutoImplSegmentCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI ScriptAutoImplSegmentCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ScriptAutoImplSegmentCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI ScriptAutoImplSegmentCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ScriptAutoImplSegmentCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI ScriptAutoImplSegmentCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI ScriptAutoImplSegmentCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
-
- /* nothing here yet */
-
+ /* nothing here yet */
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-static HRESULT WINAPI ScriptAutoImplSegmentCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI ScriptAutoImplSegmentCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -85,44 +75,30 @@
/******************************************************************
* DirectMusicScriptTrack ClassFactory
*/
-static HRESULT WINAPI ScriptTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI ScriptTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI ScriptTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ScriptTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI ScriptTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ScriptTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI ScriptTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI ScriptTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
-
- if (IsEqualIID (riid, &IID_IDirectMusicTrack)
- || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicScriptTrack (riid, (LPDIRECTMUSICTRACK8*)ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicScriptTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI ScriptTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI ScriptTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -142,41 +118,32 @@
/******************************************************************
* DirectMusicAudioVBScript ClassFactory
*/
-static HRESULT WINAPI AudioVBScriptCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI AudioVBScriptCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI AudioVBScriptCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI AudioVBScriptCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI AudioVBScriptCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI AudioVBScriptCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI AudioVBScriptCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI AudioVBScriptCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
-
/* nothing here yet */
-
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-static HRESULT WINAPI AudioVBScriptCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI AudioVBScriptCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -196,44 +163,30 @@
/******************************************************************
* DirectMusicScript ClassFactory
*/
-static HRESULT WINAPI ScriptCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI ScriptCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI ScriptCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ScriptCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI ScriptCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ScriptCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI ScriptCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI ScriptCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicScript)) {
- return DMUSIC_CreateDirectMusicScript (riid, (LPDIRECTMUSICSCRIPT*)ppobj, pOuter);
- } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
- return DMUSIC_CreateDirectMusicScriptObject (riid, (LPDIRECTMUSICOBJECT*)ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicScriptImpl (riid, ppobj, pOuter);
}
-static HRESULT WINAPI ScriptCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI ScriptCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -253,41 +206,32 @@
/******************************************************************
* DirectMusicScriptAutoImplPerformance ClassFactory
*/
-static HRESULT WINAPI ScriptAutoImplPerformanceCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI ScriptAutoImplPerformanceCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI ScriptAutoImplPerformanceCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ScriptAutoImplPerformanceCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI ScriptAutoImplPerformanceCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ScriptAutoImplPerformanceCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI ScriptAutoImplPerformanceCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI ScriptAutoImplPerformanceCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
-
/* nothing here yet */
-
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-static HRESULT WINAPI ScriptAutoImplPerformanceCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI ScriptAutoImplPerformanceCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -307,41 +251,32 @@
/******************************************************************
* DirectMusicScriptSourceCodeLoader ClassFactory
*/
-static HRESULT WINAPI ScriptSourceCodeLoaderCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI ScriptSourceCodeLoaderCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI ScriptSourceCodeLoaderCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ScriptSourceCodeLoaderCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI ScriptSourceCodeLoaderCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ScriptSourceCodeLoaderCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI ScriptSourceCodeLoaderCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI ScriptSourceCodeLoaderCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
-
/* nothing here yet */
-
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-static HRESULT WINAPI ScriptSourceCodeLoaderCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI ScriptSourceCodeLoaderCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -361,41 +296,32 @@
/******************************************************************
* DirectMusicScriptAutoImplSegmentState ClassFactory
*/
-static HRESULT WINAPI ScriptAutoImplSegmentStateCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI ScriptAutoImplSegmentStateCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI ScriptAutoImplSegmentStateCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ScriptAutoImplSegmentStateCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI ScriptAutoImplSegmentStateCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ScriptAutoImplSegmentStateCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI ScriptAutoImplSegmentStateCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI ScriptAutoImplSegmentStateCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
-
/* nothing here yet */
-
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-static HRESULT WINAPI ScriptAutoImplSegmentStateCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI ScriptAutoImplSegmentStateCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -415,41 +341,32 @@
/******************************************************************
* DirectMusicScriptAutoImplAudioPathConfig ClassFactory
*/
-static HRESULT WINAPI ScriptAutoImplAudioPathConfigCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI ScriptAutoImplAudioPathConfigCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI ScriptAutoImplAudioPathConfigCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ScriptAutoImplAudioPathConfigCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI ScriptAutoImplAudioPathConfigCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ScriptAutoImplAudioPathConfigCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI ScriptAutoImplAudioPathConfigCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI ScriptAutoImplAudioPathConfigCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
-
/* nothing here yet */
-
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-static HRESULT WINAPI ScriptAutoImplAudioPathConfigCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI ScriptAutoImplAudioPathConfigCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -469,41 +386,32 @@
/******************************************************************
* DirectMusicScriptAutoImplAudioPath ClassFactory
*/
-static HRESULT WINAPI ScriptAutoImplAudioPathCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI ScriptAutoImplAudioPathCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI ScriptAutoImplAudioPathCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ScriptAutoImplAudioPathCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI ScriptAutoImplAudioPathCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ScriptAutoImplAudioPathCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI ScriptAutoImplAudioPathCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI ScriptAutoImplAudioPathCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
-
/* nothing here yet */
-
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-static HRESULT WINAPI ScriptAutoImplAudioPathCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI ScriptAutoImplAudioPathCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -523,41 +431,32 @@
/******************************************************************
* DirectMusicScriptAutoImplSong ClassFactory
*/
-static HRESULT WINAPI ScriptAutoImplSongCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI ScriptAutoImplSongCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI ScriptAutoImplSongCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ScriptAutoImplSongCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI ScriptAutoImplSongCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ScriptAutoImplSongCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI ScriptAutoImplSongCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI ScriptAutoImplSongCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
-
/* nothing here yet */
-
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-static HRESULT WINAPI ScriptAutoImplSongCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI ScriptAutoImplSongCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -579,15 +478,11 @@
*
*
*/
-BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
-{
- if (fdwReason == DLL_PROCESS_ATTACH)
- {
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
+ if (fdwReason == DLL_PROCESS_ATTACH) {
DisableThreadLibraryCalls(hinstDLL);
/* FIXME: Initialisation */
- }
- else if (fdwReason == DLL_PROCESS_DETACH)
- {
+ } else if (fdwReason == DLL_PROCESS_DETACH) {
/* FIXME: Cleanup */
}
@@ -600,10 +495,8 @@
*
*
*/
-HRESULT WINAPI DMSCRIPT_DllCanUnloadNow(void)
-{
+HRESULT WINAPI DMSCRIPT_DllCanUnloadNow(void) {
FIXME("(void): stub\n");
-
return S_FALSE;
}
@@ -613,8 +506,7 @@
*
*
*/
-HRESULT WINAPI DMSCRIPT_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
-{
+HRESULT WINAPI DMSCRIPT_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) {
TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScriptAutoImpSegment) && IsEqualIID (riid, &IID_IClassFactory)) {
*ppv = (LPVOID) &ScriptAutoImplSegment_CF;
diff --git a/dlls/dmscript/dmscript_private.h b/dlls/dmscript/dmscript_private.h
index 7d0466a..bfb8ff8 100644
--- a/dlls/dmscript/dmscript_private.h
+++ b/dlls/dmscript/dmscript_private.h
@@ -1,6 +1,6 @@
/* DirectMusicScript Private Include
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,189 +23,240 @@
#include <stdarg.h>
#include "windef.h"
-#include "wine/debug.h"
#include "winbase.h"
#include "winnt.h"
#include "wingdi.h"
-#include "dmusicc.h"
+#include "winuser.h"
+
+#include "wine/debug.h"
+#include "wine/list.h"
+#include "wine/unicode.h"
+#include "winreg.h"
+
#include "dmusici.h"
-#include "dmusics.h"
-#include "dmplugin.h"
#include "dmusicf.h"
-#include "dsound.h"
+#include "dmusics.h"
/*****************************************************************************
* Interfaces
*/
typedef struct IDirectMusicScriptImpl IDirectMusicScriptImpl;
-typedef struct IDirectMusicScriptObject IDirectMusicScriptObject;
-typedef struct IDirectMusicScriptObjectStream IDirectMusicScriptObjectStream;
-
typedef struct IDirectMusicScriptTrack IDirectMusicScriptTrack;
-typedef struct IDirectMusicScriptTrackStream IDirectMusicScriptTrackStream;
/*****************************************************************************
* Predeclare the interface implementation structures
*/
-extern ICOM_VTABLE(IDirectMusicScript) DirectMusicScript_Vtbl;
+extern ICOM_VTABLE(IUnknown) DirectMusicScript_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicScript) DirectMusicScript_Script_Vtbl;
+extern ICOM_VTABLE(IDirectMusicObject) DirectMusicScript_Object_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicScript_PersistStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicObject) DirectMusicScriptObject_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicScriptObjectStream_Vtbl;
-
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicScriptTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicScriptTrackStream_Vtbl;
+extern ICOM_VTABLE(IUnknown) DirectMusicScriptTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicScriptTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicScriptTrack_PersistStream_Vtbl;
/*****************************************************************************
* ClassFactory
- *
- * can support IID_IDirectMusicScript
- * return always an IDirectMusicScriptImpl
*/
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicScript (LPCGUID lpcGUID, LPDIRECTMUSICSCRIPT* ppDMScript, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicScriptImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicScriptObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter);
-
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicScriptTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicScriptTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
/*****************************************************************************
* IDirectMusicScriptImpl implementation structure
*/
-struct IDirectMusicScriptImpl
-{
+struct IDirectMusicScriptImpl {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicScript);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicScript) *ScriptVtbl;
+ ICOM_VTABLE(IDirectMusicObject) *ObjectVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicScriptImpl fields */
- IDirectMusicScriptObject* pObject;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicScriptImpl_QueryInterface (LPDIRECTMUSICSCRIPT iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicScriptImpl_AddRef (LPDIRECTMUSICSCRIPT iface);
-extern ULONG WINAPI IDirectMusicScriptImpl_Release (LPDIRECTMUSICSCRIPT iface);
-/* IDirectMusicScript: */
-extern HRESULT WINAPI IDirectMusicScriptImpl_Init (LPDIRECTMUSICSCRIPT iface, IDirectMusicPerformance* pPerformance, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
-extern HRESULT WINAPI IDirectMusicScriptImpl_CallRoutine (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszRoutineName, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
-extern HRESULT WINAPI IDirectMusicScriptImpl_SetVariableVariant (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, VARIANT varValue, BOOL fSetRef, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
-extern HRESULT WINAPI IDirectMusicScriptImpl_GetVariableVariant (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, VARIANT* pvarValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
-extern HRESULT WINAPI IDirectMusicScriptImpl_SetVariableNumber (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, LONG lValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
-extern HRESULT WINAPI IDirectMusicScriptImpl_GetVariableNumber (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, LONG* plValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
-extern HRESULT WINAPI IDirectMusicScriptImpl_SetVariableObject (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, IUnknown* punkValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
-extern HRESULT WINAPI IDirectMusicScriptImpl_GetVariableObject (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, REFIID riid, LPVOID* ppv, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
-extern HRESULT WINAPI IDirectMusicScriptImpl_EnumRoutine (LPDIRECTMUSICSCRIPT iface, DWORD dwIndex, WCHAR* pwszName);
-extern HRESULT WINAPI IDirectMusicScriptImpl_EnumVariable (LPDIRECTMUSICSCRIPT iface, DWORD dwIndex, WCHAR* pwszName);
-
-
-/*****************************************************************************
- * IDirectMusicScriptObject implementation structure
- */
-struct IDirectMusicScriptObject
-{
- /* IUnknown fields */
- ICOM_VFIELD(IDirectMusicObject);
- DWORD ref;
-
- /* IDirectMusicObjectImpl fields */
LPDMUS_OBJECTDESC pDesc;
- IDirectMusicScriptObjectStream* pStream;
- IDirectMusicScriptImpl* pScript;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicScriptObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicScriptObject_AddRef (LPDIRECTMUSICOBJECT iface);
-extern ULONG WINAPI IDirectMusicScriptObject_Release (LPDIRECTMUSICOBJECT iface);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicScriptImpl_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicScriptImpl_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicScript: */
+extern HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_QueryInterface (LPDIRECTMUSICSCRIPT iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicScriptImpl_IDirectMusicScript_AddRef (LPDIRECTMUSICSCRIPT iface);
+extern ULONG WINAPI IDirectMusicScriptImpl_IDirectMusicScript_Release (LPDIRECTMUSICSCRIPT iface);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_Init (LPDIRECTMUSICSCRIPT iface, IDirectMusicPerformance* pPerformance, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_CallRoutine (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszRoutineName, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_SetVariableVariant (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, VARIANT varValue, BOOL fSetRef, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_GetVariableVariant (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, VARIANT* pvarValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_SetVariableNumber (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, LONG lValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_GetVariableNumber (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, LONG* plValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_SetVariableObject (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, IUnknown* punkValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_GetVariableObject (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, REFIID riid, LPVOID* ppv, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_EnumRoutine (LPDIRECTMUSICSCRIPT iface, DWORD dwIndex, WCHAR* pwszName);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_EnumVariable (LPDIRECTMUSICSCRIPT iface, DWORD dwIndex, WCHAR* pwszName);
/* IDirectMusicObject: */
-extern HRESULT WINAPI IDirectMusicScriptObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicScriptObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicScriptObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
-
-/*****************************************************************************
- * IDirectMusicScriptObjectStream implementation structure
- */
-struct IDirectMusicScriptObjectStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicScriptObject* pParentObject;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicScriptObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicScriptObjectStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicScriptObjectStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicScriptObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicScriptImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface);
+extern ULONG WINAPI IDirectMusicScriptImpl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicScriptObjectStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicScriptObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicScriptObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicScriptObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
-
+extern HRESULT WINAPI IDirectMusicScriptImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicScriptImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicScriptImpl_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicScriptImpl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicScriptTrack implementation structure
*/
-struct IDirectMusicScriptTrack
-{
+struct IDirectMusicScriptTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicScriptTrack fields */
- IDirectMusicScriptTrackStream* pStream;
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicScriptTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicScriptTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicScriptTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicScriptTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicScriptTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicScriptTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicScriptTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicScriptTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicScriptTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicScriptTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicScriptTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicScriptTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicScriptTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicScriptTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicScriptTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicScriptTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicScriptTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicScriptTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicScriptTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicScriptTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+/* IPersistStream: */
+extern HRESULT WINAPI IDirectMusicScriptTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicScriptTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicScriptTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicScriptTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+
/*****************************************************************************
- * IDirectMusicScriptTrackStream implementation structure
+ * Misc.
*/
-struct IDirectMusicScriptTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
+/* for simpler reading */
+typedef struct _DMUS_PRIVATE_CHUNK {
+ FOURCC fccID; /* FOURCC ID of the chunk */
+ DWORD dwSize; /* size of the chunk */
+} DMUS_PRIVATE_CHUNK, *LPDMUS_PRIVATE_CHUNK;
- /* IPersistStreamImpl fields */
- IDirectMusicScriptTrack* pParentTrack;
-};
+/* check whether the given DWORD is even (return 0) or odd (return 1) */
+static inline int even_or_odd (DWORD number) {
+ return (number & 0x1); /* basically, check if bit 0 is set ;) */
+}
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicScriptTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicScriptTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicScriptTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicScriptTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
-/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicScriptTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicScriptTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicScriptTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicScriptTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+/* FOURCC to string conversion for debug messages */
+static inline const char *debugstr_fourcc (DWORD fourcc) {
+ if (!fourcc) return "'null'";
+ return wine_dbg_sprintf ("\'%c%c%c%c\'",
+ (char)(fourcc), (char)(fourcc >> 8),
+ (char)(fourcc >> 16), (char)(fourcc >> 24));
+}
+
+/* DMUS_VERSION struct to string conversion for debug messages */
+static inline const char *debugstr_dmversion (LPDMUS_VERSION version) {
+ if (!version) return "'null'";
+ return wine_dbg_sprintf ("\'%i,%i,%i,%i\'",
+ (int)((version->dwVersionMS && 0xFFFF0000) >> 8), (int)(version->dwVersionMS && 0x0000FFFF),
+ (int)((version->dwVersionLS && 0xFFFF0000) >> 8), (int)(version->dwVersionLS && 0x0000FFFF));
+}
+
+/* used for initialising structs (primarily for DMUS_OBJECTDESC) */
+#define DM_STRUCT_INIT(x) \
+ do { \
+ memset((x), 0, sizeof(*(x))); \
+ (x)->dwSize = sizeof(*x); \
+ } while (0)
+
+
+/* used for generic dumping (copied from ddraw) */
+typedef struct {
+ DWORD val;
+ const char* name;
+} flag_info;
+
+#define FE(x) { x, #x }
+#define DMUSIC_dump_flags(flags,names,num_names) DMUSIC_dump_flags_(flags, names, num_names, 1)
+
+/* generic dump function */
+static inline void DMUSIC_dump_flags_ (DWORD flags, const flag_info* names, size_t num_names, int newline) {
+ unsigned int i;
+
+ for (i=0; i < num_names; i++) {
+ if ((flags & names[i].val) || /* standard flag value */
+ ((!flags) && (!names[i].val))) /* zero value only */
+ DPRINTF("%s ", names[i].name);
+ }
+
+ if (newline) DPRINTF("\n");
+}
+
+static inline void DMUSIC_dump_DMUS_OBJ_FLAGS (DWORD flagmask) {
+ static const flag_info flags[] = {
+ FE(DMUS_OBJ_OBJECT),
+ FE(DMUS_OBJ_CLASS),
+ FE(DMUS_OBJ_NAME),
+ FE(DMUS_OBJ_CATEGORY),
+ FE(DMUS_OBJ_FILENAME),
+ FE(DMUS_OBJ_FULLPATH),
+ FE(DMUS_OBJ_URL),
+ FE(DMUS_OBJ_VERSION),
+ FE(DMUS_OBJ_DATE),
+ FE(DMUS_OBJ_LOADED),
+ FE(DMUS_OBJ_MEMORY),
+ FE(DMUS_OBJ_STREAM)
+ };
+ DMUSIC_dump_flags(flagmask, flags, sizeof(flags)/sizeof(flags[0]));
+}
+
+static inline void DMUSIC_dump_DMUS_OBJECTDESC (LPDMUS_OBJECTDESC pDesc) {
+ if (pDesc) {
+ DPRINTF("DMUS_OBJECTDESC (%p)\n", pDesc);
+ DPRINTF(" - dwSize = %ld\n", pDesc->dwSize);
+ DPRINTF(" - dwValidData = ");
+ DMUSIC_dump_DMUS_OBJ_FLAGS (pDesc->dwValidData);
+ if (pDesc->dwValidData & DMUS_OBJ_CLASS) DPRINTF(" - guidClass = %s\n", debugstr_guid(&pDesc->guidClass));
+ if (pDesc->dwValidData & DMUS_OBJ_OBJECT) DPRINTF(" - guidObject = %s\n", debugstr_guid(&pDesc->guidObject));
+ if (pDesc->dwValidData & DMUS_OBJ_DATE) DPRINTF(" - ftDate = FIXME\n");
+ if (pDesc->dwValidData & DMUS_OBJ_VERSION) DPRINTF(" - vVersion = %s\n", debugstr_dmversion(&pDesc->vVersion));
+ if (pDesc->dwValidData & DMUS_OBJ_NAME) DPRINTF(" - wszName = %s\n", debugstr_w(pDesc->wszName));
+ if (pDesc->dwValidData & DMUS_OBJ_CATEGORY) DPRINTF(" - wszCategory = %s\n", debugstr_w(pDesc->wszCategory));
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME) DPRINTF(" - wszFileName = %s\n", debugstr_w(pDesc->wszFileName));
+ if (pDesc->dwValidData & DMUS_OBJ_MEMORY) DPRINTF(" - llMemLength = %lli\n - pbMemData = %p\n", pDesc->llMemLength, pDesc->pbMemData);
+ if (pDesc->dwValidData & DMUS_OBJ_STREAM) DPRINTF(" - pStream = %p\n", pDesc->pStream);
+ } else {
+ DPRINTF("(NULL)\n");
+ }
+}
#endif /* __WINE_DMSCRIPT_PRIVATE_H */
diff --git a/dlls/dmscript/regsvr.c b/dlls/dmscript/regsvr.c
index 2b6f994..f1c29f0 100644
--- a/dlls/dmscript/regsvr.c
+++ b/dlls/dmscript/regsvr.c
@@ -18,21 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include <stdarg.h>
-#include <string.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winreg.h"
-#include "winerror.h"
-
-#include "dmusics.h"
-#include "dmusici.h"
-#include "dmplugin.h"
-
-#include "wine/debug.h"
+#include "dmscript_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmscript);
@@ -44,8 +30,7 @@
/***********************************************************************
* interface for self-registering
*/
-struct regsvr_interface
-{
+struct regsvr_interface {
IID const *iid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
IID const *base_iid; /* can be NULL to omit */
@@ -57,8 +42,7 @@
static HRESULT register_interfaces(struct regsvr_interface const *list);
static HRESULT unregister_interfaces(struct regsvr_interface const *list);
-struct regsvr_coclass
-{
+struct regsvr_coclass {
CLSID const *clsid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
LPCSTR ips; /* can be NULL to omit */
@@ -124,8 +108,7 @@
/***********************************************************************
* register_interfaces
*/
-static HRESULT register_interfaces(struct regsvr_interface const *list)
-{
+static HRESULT register_interfaces(struct regsvr_interface const *list) {
LONG res = ERROR_SUCCESS;
HKEY interface_key;
@@ -194,8 +177,7 @@
/***********************************************************************
* unregister_interfaces
*/
-static HRESULT unregister_interfaces(struct regsvr_interface const *list)
-{
+static HRESULT unregister_interfaces(struct regsvr_interface const *list) {
LONG res = ERROR_SUCCESS;
HKEY interface_key;
@@ -219,8 +201,7 @@
/***********************************************************************
* register_coclasses
*/
-static HRESULT register_coclasses(struct regsvr_coclass const *list)
-{
+static HRESULT register_coclasses(struct regsvr_coclass const *list) {
LONG res = ERROR_SUCCESS;
HKEY coclass_key;
@@ -301,8 +282,7 @@
/***********************************************************************
* unregister_coclasses
*/
-static HRESULT unregister_coclasses(struct regsvr_coclass const *list)
-{
+static HRESULT unregister_coclasses(struct regsvr_coclass const *list) {
LONG res = ERROR_SUCCESS;
HKEY coclass_key;
@@ -338,8 +318,7 @@
/***********************************************************************
* regsvr_key_guid
*/
-static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid)
-{
+static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid) {
WCHAR buf[39];
StringFromGUID2(guid, buf, 39);
@@ -352,8 +331,7 @@
static LONG register_key_defvalueW(
HKEY base,
WCHAR const *name,
- WCHAR const *value)
-{
+ WCHAR const *value) {
LONG res;
HKEY key;
@@ -372,8 +350,7 @@
static LONG register_key_defvalueA(
HKEY base,
WCHAR const *name,
- char const *value)
-{
+ char const *value) {
LONG res;
HKEY key;
@@ -394,8 +371,7 @@
char const *progid,
char const *curver_progid,
char const *name,
- char const *extra)
-{
+ char const *extra) {
LONG res;
HKEY progid_key;
@@ -439,8 +415,7 @@
/***********************************************************************
* recursive_delete_key
*/
-static LONG recursive_delete_key(HKEY key)
-{
+static LONG recursive_delete_key(HKEY key) {
LONG res;
WCHAR subkey_name[MAX_PATH];
DWORD cName;
@@ -471,8 +446,7 @@
/***********************************************************************
* recursive_delete_keyA
*/
-static LONG recursive_delete_keyA(HKEY base, char const *name)
-{
+static LONG recursive_delete_keyA(HKEY base, char const *name) {
LONG res;
HKEY key;
@@ -487,8 +461,7 @@
/***********************************************************************
* recursive_delete_keyW
*/
-static LONG recursive_delete_keyW(HKEY base, WCHAR const *name)
-{
+static LONG recursive_delete_keyW(HKEY base, WCHAR const *name) {
LONG res;
HKEY key;
@@ -599,8 +572,7 @@
/***********************************************************************
* DllRegisterServer (DMSCRIPT.3)
*/
-HRESULT WINAPI DMSCRIPT_DllRegisterServer(void)
-{
+HRESULT WINAPI DMSCRIPT_DllRegisterServer(void) {
HRESULT hr;
TRACE("\n");
@@ -614,8 +586,7 @@
/***********************************************************************
* DllUnregisterServer (DMSCRIPT.4)
*/
-HRESULT WINAPI DMSCRIPT_DllUnregisterServer(void)
-{
+HRESULT WINAPI DMSCRIPT_DllUnregisterServer(void) {
HRESULT hr;
TRACE("\n");
diff --git a/dlls/dmscript/script.c b/dlls/dmscript/script.c
index c2116ca..a3e0443 100644
--- a/dlls/dmscript/script.c
+++ b/dlls/dmscript/script.c
@@ -1,6 +1,6 @@
/* IDirectMusicScript
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,27 +17,33 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmscript_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmscript);
+WINE_DECLARE_DEBUG_CHANNEL(dmfile);
-/* IDirectMusicScript IUnknown part: */
-HRESULT WINAPI IDirectMusicScriptImpl_QueryInterface (LPDIRECTMUSICSCRIPT iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicScriptImpl,iface);
-
- if (IsEqualIID(riid, &IID_IUnknown) ||
- IsEqualIID(riid, &IID_IDirectMusicScript)) {
- IDirectMusicScriptImpl_AddRef(iface);
- *ppobj = This;
+/*****************************************************************************
+ * IDirectMusicScriptImpl implementation
+ */
+/* IDirectMusicScriptImpl IUnknown part: */
+HRESULT WINAPI IDirectMusicScriptImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, UnknownVtbl, iface);
+
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPVOID)&This->UnknownVtbl;
+ IDirectMusicScriptImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicScript)) {
+ *ppobj = (LPVOID)&This->ScriptVtbl;
+ IDirectMusicScriptImpl_IDirectMusicScript_AddRef ((LPDIRECTMUSICSCRIPT)&This->ScriptVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
+ *ppobj = (LPVOID)&This->ObjectVtbl;
+ IDirectMusicScriptImpl_IDirectMusicObject_AddRef ((LPDIRECTMUSICOBJECT)&This->ObjectVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IPersistStream)) {
+ *ppobj = (LPVOID)&This->PersistStreamVtbl;
+ IDirectMusicScriptImpl_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
@@ -45,16 +51,14 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicScriptImpl_AddRef (LPDIRECTMUSICSCRIPT iface)
-{
- ICOM_THIS(IDirectMusicScriptImpl,iface);
+ULONG WINAPI IDirectMusicScriptImpl_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicScriptImpl_Release (LPDIRECTMUSICSCRIPT iface)
-{
- ICOM_THIS(IDirectMusicScriptImpl,iface);
+ULONG WINAPI IDirectMusicScriptImpl_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -63,328 +67,538 @@
return ref;
}
-/* IDirectMusicScript IDirectMusicScript part: */
-HRESULT WINAPI IDirectMusicScriptImpl_Init (LPDIRECTMUSICSCRIPT iface, IDirectMusicPerformance* pPerformance, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
-{
- ICOM_THIS(IDirectMusicScriptImpl,iface);
+ICOM_VTABLE(IUnknown) DirectMusicScript_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicScriptImpl_IUnknown_QueryInterface,
+ IDirectMusicScriptImpl_IUnknown_AddRef,
+ IDirectMusicScriptImpl_IUnknown_Release
+};
+/* IDirectMusicScriptImpl IDirectMusicScript part: */
+HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_QueryInterface (LPDIRECTMUSICSCRIPT iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ScriptVtbl, iface);
+ return IDirectMusicScriptImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicScriptImpl_IDirectMusicScript_AddRef (LPDIRECTMUSICSCRIPT iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ScriptVtbl, iface);
+ return IDirectMusicScriptImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicScriptImpl_IDirectMusicScript_Release (LPDIRECTMUSICSCRIPT iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ScriptVtbl, iface);
+ return IDirectMusicScriptImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_Init (LPDIRECTMUSICSCRIPT iface, IDirectMusicPerformance* pPerformance, DMUS_SCRIPT_ERRORINFO* pErrorInfo) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ScriptVtbl, iface);
FIXME("(%p, %p, %p): stub\n", This, pPerformance, pErrorInfo);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptImpl_CallRoutine (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszRoutineName, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
-{
- ICOM_THIS(IDirectMusicScriptImpl,iface);
-
+HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_CallRoutine (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszRoutineName, DMUS_SCRIPT_ERRORINFO* pErrorInfo) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ScriptVtbl, iface);
FIXME("(%p, %s, %p): stub\n", This, debugstr_w(pwszRoutineName), pErrorInfo);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptImpl_SetVariableVariant (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, VARIANT varValue, BOOL fSetRef, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
-{
- ICOM_THIS(IDirectMusicScriptImpl,iface);
-
+HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_SetVariableVariant (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, VARIANT varValue, BOOL fSetRef, DMUS_SCRIPT_ERRORINFO* pErrorInfo) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ScriptVtbl, iface);
FIXME("(%p, %p, FIXME, %d, %p): stub\n", This, pwszVariableName,/* varValue,*/ fSetRef, pErrorInfo);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptImpl_GetVariableVariant (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, VARIANT* pvarValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
-{
- ICOM_THIS(IDirectMusicScriptImpl,iface);
-
+HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_GetVariableVariant (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, VARIANT* pvarValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ScriptVtbl, iface);
FIXME("(%p, %p, %p, %p): stub\n", This, pwszVariableName, pvarValue, pErrorInfo);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptImpl_SetVariableNumber (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, LONG lValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
-{
- ICOM_THIS(IDirectMusicScriptImpl,iface);
-
+HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_SetVariableNumber (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, LONG lValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ScriptVtbl, iface);
FIXME("(%p, %p, %li, %p): stub\n", This, pwszVariableName, lValue, pErrorInfo);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptImpl_GetVariableNumber (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, LONG* plValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
-{
- ICOM_THIS(IDirectMusicScriptImpl,iface);
-
+HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_GetVariableNumber (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, LONG* plValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ScriptVtbl, iface);
FIXME("(%p, %p, %p, %p): stub\n", This, pwszVariableName, plValue, pErrorInfo);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptImpl_SetVariableObject (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, IUnknown* punkValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
-{
- ICOM_THIS(IDirectMusicScriptImpl,iface);
-
+HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_SetVariableObject (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, IUnknown* punkValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ScriptVtbl, iface);
FIXME("(%p, %p, %p, %p): stub\n", This, pwszVariableName, punkValue, pErrorInfo);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptImpl_GetVariableObject (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, REFIID riid, LPVOID* ppv, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
-{
- ICOM_THIS(IDirectMusicScriptImpl,iface);
-
+HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_GetVariableObject (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, REFIID riid, LPVOID* ppv, DMUS_SCRIPT_ERRORINFO* pErrorInfo) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ScriptVtbl, iface);
FIXME("(%p, %p, %s, %p, %p): stub\n", This, pwszVariableName, debugstr_guid(riid), ppv, pErrorInfo);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptImpl_EnumRoutine (LPDIRECTMUSICSCRIPT iface, DWORD dwIndex, WCHAR* pwszName)
-{
- ICOM_THIS(IDirectMusicScriptImpl,iface);
-
+HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_EnumRoutine (LPDIRECTMUSICSCRIPT iface, DWORD dwIndex, WCHAR* pwszName) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ScriptVtbl, iface);
FIXME("(%p, %ld, %p): stub\n", This, dwIndex, pwszName);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptImpl_EnumVariable (LPDIRECTMUSICSCRIPT iface, DWORD dwIndex, WCHAR* pwszName)
-{
- ICOM_THIS(IDirectMusicScriptImpl,iface);
-
+HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicScript_EnumVariable (LPDIRECTMUSICSCRIPT iface, DWORD dwIndex, WCHAR* pwszName) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ScriptVtbl, iface);
FIXME("(%p, %ld, %p): stub\n", This, dwIndex, pwszName);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicScript) DirectMusicScript_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicScript) DirectMusicScript_Script_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicScriptImpl_QueryInterface,
- IDirectMusicScriptImpl_AddRef,
- IDirectMusicScriptImpl_Release,
- IDirectMusicScriptImpl_Init,
- IDirectMusicScriptImpl_CallRoutine,
- IDirectMusicScriptImpl_SetVariableVariant,
- IDirectMusicScriptImpl_GetVariableVariant,
- IDirectMusicScriptImpl_SetVariableNumber,
- IDirectMusicScriptImpl_GetVariableNumber,
- IDirectMusicScriptImpl_SetVariableObject,
- IDirectMusicScriptImpl_GetVariableObject,
- IDirectMusicScriptImpl_EnumRoutine,
- IDirectMusicScriptImpl_EnumVariable
+ IDirectMusicScriptImpl_IDirectMusicScript_QueryInterface,
+ IDirectMusicScriptImpl_IDirectMusicScript_AddRef,
+ IDirectMusicScriptImpl_IDirectMusicScript_Release,
+ IDirectMusicScriptImpl_IDirectMusicScript_Init,
+ IDirectMusicScriptImpl_IDirectMusicScript_CallRoutine,
+ IDirectMusicScriptImpl_IDirectMusicScript_SetVariableVariant,
+ IDirectMusicScriptImpl_IDirectMusicScript_GetVariableVariant,
+ IDirectMusicScriptImpl_IDirectMusicScript_SetVariableNumber,
+ IDirectMusicScriptImpl_IDirectMusicScript_GetVariableNumber,
+ IDirectMusicScriptImpl_IDirectMusicScript_SetVariableObject,
+ IDirectMusicScriptImpl_IDirectMusicScript_GetVariableObject,
+ IDirectMusicScriptImpl_IDirectMusicScript_EnumRoutine,
+ IDirectMusicScriptImpl_IDirectMusicScript_EnumVariable
+};
+
+/* IDirectMusicScriptImpl IDirectMusicObject part: */
+HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ObjectVtbl, iface);
+ return IDirectMusicScriptImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicScriptImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ObjectVtbl, iface);
+ return IDirectMusicScriptImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicScriptImpl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ObjectVtbl, iface);
+ return IDirectMusicScriptImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ObjectVtbl, iface);
+ TRACE("(%p, %p)\n", This, pDesc);
+ /* I think we shouldn't return pointer here since then values can be changed; it'd be a mess */
+ memcpy (pDesc, This->pDesc, This->pDesc->dwSize);
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ObjectVtbl, iface);
+ TRACE("(%p, %p): setting descriptor:\n", This, pDesc);
+ if (TRACE_ON(dmscript)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
+ }
+
+ /* According to MSDN, we should copy only given values, not whole struct */
+ if (pDesc->dwValidData & DMUS_OBJ_OBJECT)
+ memcpy (&This->pDesc->guidObject, &pDesc->guidObject, sizeof (pDesc->guidObject));
+ if (pDesc->dwValidData & DMUS_OBJ_CLASS)
+ memcpy (&This->pDesc->guidClass, &pDesc->guidClass, sizeof (pDesc->guidClass));
+ if (pDesc->dwValidData & DMUS_OBJ_NAME)
+ strncpyW (This->pDesc->wszName, pDesc->wszName, DMUS_MAX_NAME);
+ if (pDesc->dwValidData & DMUS_OBJ_CATEGORY)
+ strncpyW (This->pDesc->wszCategory, pDesc->wszCategory, DMUS_MAX_CATEGORY);
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME)
+ strncpyW (This->pDesc->wszFileName, pDesc->wszFileName, DMUS_MAX_FILENAME);
+ if (pDesc->dwValidData & DMUS_OBJ_VERSION)
+ memcpy (&This->pDesc->vVersion, &pDesc->vVersion, sizeof (pDesc->vVersion));
+ if (pDesc->dwValidData & DMUS_OBJ_DATE)
+ memcpy (&This->pDesc->ftDate, &pDesc->ftDate, sizeof (pDesc->ftDate));
+ if (pDesc->dwValidData & DMUS_OBJ_MEMORY) {
+ memcpy (&This->pDesc->llMemLength, &pDesc->llMemLength, sizeof (pDesc->llMemLength));
+ memcpy (This->pDesc->pbMemData, pDesc->pbMemData, sizeof (pDesc->pbMemData));
+ }
+ if (pDesc->dwValidData & DMUS_OBJ_STREAM) {
+ /* according to MSDN, we copy the stream */
+ IStream_Clone (pDesc->pStream, &This->pDesc->pStream);
+ }
+
+ /* add new flags */
+ This->pDesc->dwValidData |= pDesc->dwValidData;
+
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicScriptImpl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, ObjectVtbl, iface);
+ DMUS_PRIVATE_CHUNK Chunk;
+ DWORD StreamSize, StreamCount, ListSize[1], ListCount[1];
+ LARGE_INTEGER liMove; /* used when skipping chunks */
+
+ TRACE("(%p, %p, %p)\n", This, pStream, pDesc);
+
+ /* FIXME: should this be determined from stream? */
+ pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&pDesc->guidClass, &CLSID_DirectMusicScript, sizeof(CLSID));
+
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_RIFF: {
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ StreamSize = Chunk.dwSize - sizeof(FOURCC);
+ StreamCount = 0;
+ if (Chunk.fccID == DMUS_FOURCC_SCRIPT_FORM) {
+ TRACE_(dmfile)(": script form\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ StreamCount += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case DMUS_FOURCC_GUID_CHUNK: {
+ TRACE_(dmfile)(": GUID chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read (pStream, &pDesc->guidObject, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_VERSION_CHUNK: {
+ TRACE_(dmfile)(": version chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read (pStream, &pDesc->vVersion, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CATEGORY_CHUNK: {
+ TRACE_(dmfile)(": category chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_CATEGORY;
+ IStream_Read (pStream, pDesc->wszCategory, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[0] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[0] = 0;
+ switch (Chunk.fccID) {
+ /* evil M$ UNFO list, which can (!?) contain INFO elements */
+ case DMUS_FOURCC_UNFO_LIST: {
+ TRACE_(dmfile)(": UNFO list\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
+ (though strings seem to be valid unicode) */
+ case mmioFOURCC('I','N','A','M'):
+ case DMUS_FOURCC_UNAM_CHUNK: {
+ TRACE_(dmfile)(": name chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_NAME;
+ IStream_Read (pStream, pDesc->wszName, Chunk.dwSize, NULL);
+ break;
+ }
+ case mmioFOURCC('I','A','R','T'):
+ case DMUS_FOURCC_UART_CHUNK: {
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','O','P'):
+ case DMUS_FOURCC_UCOP_CHUNK: {
+ TRACE_(dmfile)(": copyright chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','S','B','J'):
+ case DMUS_FOURCC_USBJ_CHUNK: {
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','M','T'):
+ case DMUS_FOURCC_UCMT_CHUNK: {
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
+ } while (StreamCount < StreamSize);
+ break;
+ } else {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = StreamSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+
+ TRACE_(dmfile)(": reading finished\n");
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return DMUS_E_INVALIDFILE;
+ }
+ }
+
+ TRACE(": returning descriptor:\n");
+ if (TRACE_ON(dmscript)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
+ }
+
+ return S_OK;
+}
+
+ICOM_VTABLE(IDirectMusicObject) DirectMusicScript_Object_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicScriptImpl_IDirectMusicObject_QueryInterface,
+ IDirectMusicScriptImpl_IDirectMusicObject_AddRef,
+ IDirectMusicScriptImpl_IDirectMusicObject_Release,
+ IDirectMusicScriptImpl_IDirectMusicObject_GetDescriptor,
+ IDirectMusicScriptImpl_IDirectMusicObject_SetDescriptor,
+ IDirectMusicScriptImpl_IDirectMusicObject_ParseDescriptor
+};
+
+/* IDirectMusicScriptImpl IPersistStream part: */
+HRESULT WINAPI IDirectMusicScriptImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, PersistStreamVtbl, iface);
+ return IDirectMusicScriptImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicScriptImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, PersistStreamVtbl, iface);
+ return IDirectMusicScriptImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicScriptImpl_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, PersistStreamVtbl, iface);
+ return IDirectMusicScriptImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicScriptImpl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicScriptImpl_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicScriptImpl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
+ ICOM_THIS_MULTI(IDirectMusicScriptImpl, PersistStreamVtbl, iface);
+
+ FOURCC chunkID;
+ DWORD chunkSize, StreamSize, StreamCount, ListSize[3], ListCount[3];
+ LARGE_INTEGER liMove; /* used when skipping chunks */
+
+ FIXME("(%p, %p): Loading not implemented yet\n", This, pStm);
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ IStream_Read (pStm, &chunkSize, sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
+ switch (chunkID) {
+ case FOURCC_RIFF: {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(chunkID));
+ StreamSize = chunkSize - sizeof(FOURCC);
+ StreamCount = 0;
+ switch (chunkID) {
+ case DMUS_FOURCC_SCRIPT_FORM: {
+ TRACE_(dmfile)(": script form\n");
+ do {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
+ StreamCount += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
+ switch (chunkID) {
+ case DMUS_FOURCC_GUID_CHUNK: {
+ TRACE_(dmfile)(": GUID chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read (pStm, &This->pDesc->guidObject, chunkSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_VERSION_CHUNK: {
+ TRACE_(dmfile)(": version chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read (pStm, &This->pDesc->vVersion, chunkSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CATEGORY_CHUNK: {
+ TRACE_(dmfile)(": category chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_CATEGORY;
+ IStream_Read (pStm, This->pDesc->wszCategory, chunkSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(chunkID));
+ ListSize[0] = chunkSize - sizeof(FOURCC);
+ ListCount[0] = 0;
+ switch (chunkID) {
+ case DMUS_FOURCC_UNFO_LIST: {
+ TRACE_(dmfile)(": UNFO list\n");
+ do {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
+ switch (chunkID) {
+ /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
+ (though strings seem to be valid unicode) */
+ case mmioFOURCC('I','N','A','M'):
+ case DMUS_FOURCC_UNAM_CHUNK: {
+ TRACE_(dmfile)(": name chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_NAME;
+ IStream_Read (pStm, This->pDesc->wszName, chunkSize, NULL);
+ break;
+ }
+ case mmioFOURCC('I','A','R','T'):
+ case DMUS_FOURCC_UART_CHUNK: {
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','O','P'):
+ case DMUS_FOURCC_UCOP_CHUNK: {
+ TRACE_(dmfile)(": copyright chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','S','B','J'):
+ case DMUS_FOURCC_USBJ_CHUNK: {
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','M','T'):
+ case DMUS_FOURCC_UCMT_CHUNK: {
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = chunkSize - sizeof(FOURCC);
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
+ } while (StreamCount < StreamSize);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = StreamSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+ }
+ TRACE_(dmfile)(": reading finished\n");
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+ }
+
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicScriptImpl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicScriptImpl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
+ return E_NOTIMPL;
+}
+
+ICOM_VTABLE(IPersistStream) DirectMusicScript_PersistStream_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicScriptImpl_IPersistStream_QueryInterface,
+ IDirectMusicScriptImpl_IPersistStream_AddRef,
+ IDirectMusicScriptImpl_IPersistStream_Release,
+ IDirectMusicScriptImpl_IPersistStream_GetClassID,
+ IDirectMusicScriptImpl_IPersistStream_IsDirty,
+ IDirectMusicScriptImpl_IPersistStream_Load,
+ IDirectMusicScriptImpl_IPersistStream_Save,
+ IDirectMusicScriptImpl_IPersistStream_GetSizeMax
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicScript (LPCGUID lpcGUID, LPDIRECTMUSICSCRIPT* ppDMScript, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicScriptImpl* dmscript;
+HRESULT WINAPI DMUSIC_CreateDirectMusicScriptImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicScriptImpl* obj;
- TRACE("(%p,%p,%p)\n",lpcGUID, ppDMScript, pUnkOuter);
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicScript)) {
- dmscript = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicScriptImpl));
- if (NULL == dmscript) {
- *ppDMScript = (LPDIRECTMUSICSCRIPT) NULL;
- return E_OUTOFMEMORY;
- }
- dmscript->lpVtbl = &DirectMusicScript_Vtbl;
- dmscript->ref = 1;
- *ppDMScript = (LPDIRECTMUSICSCRIPT) dmscript;
- return S_OK;
+ obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicScriptImpl));
+ if (NULL == obj) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
}
+ obj->UnknownVtbl = &DirectMusicScript_Unknown_Vtbl;
+ obj->ScriptVtbl = &DirectMusicScript_Script_Vtbl;
+ obj->ObjectVtbl = &DirectMusicScript_Object_Vtbl;
+ obj->PersistStreamVtbl = &DirectMusicScript_PersistStream_Vtbl;
+ obj->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(obj->pDesc);
+ obj->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&obj->pDesc->guidClass, &CLSID_DirectMusicScript, sizeof (CLSID));
+ obj->ref = 0; /* will be inited by QueryInterface */
- WARN("No interface found\n");
- return E_NOINTERFACE;
+ return IDirectMusicScriptImpl_IUnknown_QueryInterface ((LPUNKNOWN)&obj->UnknownVtbl, lpcGUID, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicScriptObject implementation
- */
-/* IDirectMusicScriptObject IUnknown part: */
-HRESULT WINAPI IDirectMusicScriptObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicScriptObject,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID(riid, &IID_IDirectMusicObject)) {
- IDirectMusicScriptObject_AddRef(iface);
- *ppobj = This;
- return S_OK;
- } else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IPersistStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = (LPPERSISTSTREAM)This->pStream;
- return S_OK;
- } else if (IsEqualIID (riid, &IID_IDirectMusicScript)) {
- IDirectMusicScript_AddRef ((LPDIRECTMUSICSCRIPT)This->pScript);
- *ppobj = (LPDIRECTMUSICSCRIPT)This->pScript;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicScriptObject_AddRef (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicScriptObject,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicScriptObject_Release (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicScriptObject,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicScriptObject IDirectMusicObject part: */
-HRESULT WINAPI IDirectMusicScriptObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicScriptObject,iface);
-
- TRACE("(%p, %p)\n", This, pDesc);
- pDesc = This->pDesc;
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicScriptObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicScriptObject,iface);
-
- TRACE("(%p, %p)\n", This, pDesc);
- This->pDesc = pDesc;
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicScriptObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicScriptObject,iface);
-
- FIXME("(%p, %p, %p): stub\n", This, pStream, pDesc);
-
- return S_OK;
-}
-
-ICOM_VTABLE(IDirectMusicObject) DirectMusicScriptObject_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicScriptObject_QueryInterface,
- IDirectMusicScriptObject_AddRef,
- IDirectMusicScriptObject_Release,
- IDirectMusicScriptObject_GetDescriptor,
- IDirectMusicScriptObject_SetDescriptor,
- IDirectMusicScriptObject_ParseDescriptor
-};
-
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicScriptObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicScriptObject *obj;
-
- TRACE("(%p,%p,%p)\n", lpcGUID, ppObject, pUnkOuter);
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicObject)) {
- obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicScriptObject));
- if (NULL == obj) {
- *ppObject = (LPDIRECTMUSICOBJECT) NULL;
- return E_OUTOFMEMORY;
- }
- obj->lpVtbl = &DirectMusicScriptObject_Vtbl;
- obj->ref = 1;
- /* prepare IPersistStream */
- obj->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicScriptObjectStream));
- obj->pStream->lpVtbl = &DirectMusicScriptObjectStream_Vtbl;
- obj->pStream->ref = 1;
- obj->pStream->pParentObject = obj;
- /* prepare IDirectMusicScript */
- DMUSIC_CreateDirectMusicScript (&IID_IDirectMusicScript, (LPDIRECTMUSICSCRIPT*)&obj->pScript, NULL);
- obj->pScript->pObject = obj;
- *ppObject = (LPDIRECTMUSICOBJECT) obj;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
-}
-
-/*****************************************************************************
- * IDirectMusicScriptObjectStream implementation
- */
-/* IDirectMusicScriptObjectStream IUnknown part: */
-HRESULT WINAPI IDirectMusicScriptObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicScriptObjectStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicScriptObjectStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicScriptObjectStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicScriptObjectStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicScriptObjectStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicScriptObjectStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicScriptObjectStream IPersist part: */
-HRESULT WINAPI IDirectMusicScriptObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- *pClassID = CLSID_DirectMusicScript;
- return S_OK;
-}
-
-/* IDirectMusicScriptObjectStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicScriptObjectStream_IsDirty (LPPERSISTSTREAM iface)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicScriptObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
- FIXME(": Loading not implemented yet\n");
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicScriptObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicScriptObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
- return E_NOTIMPL;
-}
-
-ICOM_VTABLE(IPersistStream) DirectMusicScriptObjectStream_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicScriptObjectStream_QueryInterface,
- IDirectMusicScriptObjectStream_AddRef,
- IDirectMusicScriptObjectStream_Release,
- IDirectMusicScriptObjectStream_GetClassID,
- IDirectMusicScriptObjectStream_IsDirty,
- IDirectMusicScriptObjectStream_Load,
- IDirectMusicScriptObjectStream_Save,
- IDirectMusicScriptObjectStream_GetSizeMax
-};
diff --git a/dlls/dmscript/scripttrack.c b/dlls/dmscript/scripttrack.c
index 3c47d4b..f28c1c5 100644
--- a/dlls/dmscript/scripttrack.c
+++ b/dlls/dmscript/scripttrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicScriptTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmscript_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmscript);
@@ -34,19 +26,21 @@
* IDirectMusicScriptTrack implementation
*/
/* IDirectMusicScriptTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicScriptTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
+HRESULT WINAPI IDirectMusicScriptTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicScriptTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicScriptTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicScriptTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicScriptTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicScriptTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
@@ -54,16 +48,14 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicScriptTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
+ULONG WINAPI IDirectMusicScriptTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicScriptTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
+ULONG WINAPI IDirectMusicScriptTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -72,270 +64,214 @@
return ref;
}
-/* IDirectMusicScriptTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicScriptTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicScriptTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicScriptTrack_IUnknown_QueryInterface,
+ IDirectMusicScriptTrack_IUnknown_AddRef,
+ IDirectMusicScriptTrack_IUnknown_Release
+};
+/* IDirectMusicScriptTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+ return IDirectMusicScriptTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+ return IDirectMusicScriptTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
+ return IDirectMusicScriptTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
+{
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
/* didn't find any params */
-
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicScriptTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicScriptTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicScriptTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicScriptTrack,iface);
-
+HRESULT WINAPI IDirectMusicScriptTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicScriptTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicScriptTrack_Track_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicScriptTrack_QueryInterface,
- IDirectMusicScriptTrack_AddRef,
- IDirectMusicScriptTrack_Release,
- IDirectMusicScriptTrack_Init,
- IDirectMusicScriptTrack_InitPlay,
- IDirectMusicScriptTrack_EndPlay,
- IDirectMusicScriptTrack_Play,
- IDirectMusicScriptTrack_GetParam,
- IDirectMusicScriptTrack_SetParam,
- IDirectMusicScriptTrack_IsParamSupported,
- IDirectMusicScriptTrack_AddNotificationType,
- IDirectMusicScriptTrack_RemoveNotificationType,
- IDirectMusicScriptTrack_Clone,
- IDirectMusicScriptTrack_PlayEx,
- IDirectMusicScriptTrack_GetParamEx,
- IDirectMusicScriptTrack_SetParamEx,
- IDirectMusicScriptTrack_Compose,
- IDirectMusicScriptTrack_Join
+ IDirectMusicScriptTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicScriptTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicScriptTrack_IDirectMusicTrack_Release,
+ IDirectMusicScriptTrack_IDirectMusicTrack_Init,
+ IDirectMusicScriptTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicScriptTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicScriptTrack_IDirectMusicTrack_Play,
+ IDirectMusicScriptTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicScriptTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicScriptTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicScriptTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicScriptTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicScriptTrack_IDirectMusicTrack_Clone,
+ IDirectMusicScriptTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicScriptTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicScriptTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicScriptTrack_IDirectMusicTrack_Compose,
+ IDirectMusicScriptTrack_IDirectMusicTrack_Join
};
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicScriptTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicScriptTrack* track;
-
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicScriptTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicScriptTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicScriptTrackStream));
- track->pStream->lpVtbl = &DirectMusicScriptTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
- }
-
- WARN("No interface found\n");
- return E_NOINTERFACE;
+/* IDirectMusicScriptTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicScriptTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, PersistStreamVtbl, iface);
+ return IDirectMusicScriptTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicScriptTrackStream implementation
- */
-/* IDirectMusicScriptTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicScriptTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicScriptTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicScriptTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
+ULONG WINAPI IDirectMusicScriptTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, PersistStreamVtbl, iface);
+ return IDirectMusicScriptTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicScriptTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicScriptTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
+ULONG WINAPI IDirectMusicScriptTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicScriptTrack, PersistStreamVtbl, iface);
+ return IDirectMusicScriptTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicScriptTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicScriptTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicScriptTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicScriptTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- *pClassID = CLSID_DirectMusicScriptTrack;
- return S_OK;
-}
-
-/* IDirectMusicScriptTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicScriptTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
+HRESULT WINAPI IDirectMusicScriptTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicScriptTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
+HRESULT WINAPI IDirectMusicScriptTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicScriptTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
FIXME(": Loading not implemented yet\n");
return S_OK;
}
-HRESULT WINAPI IDirectMusicScriptTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
+HRESULT WINAPI IDirectMusicScriptTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicScriptTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
+HRESULT WINAPI IDirectMusicScriptTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
return E_NOTIMPL;
}
-ICOM_VTABLE(IPersistStream) DirectMusicScriptTrackStream_Vtbl =
-{
+ICOM_VTABLE(IPersistStream) DirectMusicScriptTrack_PersistStream_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicScriptTrackStream_QueryInterface,
- IDirectMusicScriptTrackStream_AddRef,
- IDirectMusicScriptTrackStream_Release,
- IDirectMusicScriptTrackStream_GetClassID,
- IDirectMusicScriptTrackStream_IsDirty,
- IDirectMusicScriptTrackStream_Load,
- IDirectMusicScriptTrackStream_Save,
- IDirectMusicScriptTrackStream_GetSizeMax
+ IDirectMusicScriptTrack_IPersistStream_QueryInterface,
+ IDirectMusicScriptTrack_IPersistStream_AddRef,
+ IDirectMusicScriptTrack_IPersistStream_Release,
+ IDirectMusicScriptTrack_IPersistStream_GetClassID,
+ IDirectMusicScriptTrack_IPersistStream_IsDirty,
+ IDirectMusicScriptTrack_IPersistStream_Load,
+ IDirectMusicScriptTrack_IPersistStream_Save,
+ IDirectMusicScriptTrack_IPersistStream_GetSizeMax
};
+
+/* for ClassFactory */
+HRESULT WINAPI DMUSIC_CreateDirectMusicScriptTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicScriptTrack* track;
+
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicScriptTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ track->UnknownVtbl = &DirectMusicScriptTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicScriptTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicScriptTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicScriptTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicScriptTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
+}
diff --git a/dlls/dmscript/version.rc b/dlls/dmscript/version.rc
index a0b3222..bc1b1da 100644
--- a/dlls/dmscript/version.rc
+++ b/dlls/dmscript/version.rc
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc <rok.mandeljc@gimb.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -18,10 +18,10 @@
#define WINE_FILEDESCRIPTION_STR "Wine DirectMusic Scripting"
#define WINE_FILENAME_STR "dmscript.dll"
-#define WINE_FILEVERSION 4,8,1,881
-#define WINE_FILEVERSION_STR "4.8.1.881"
-#define WINE_PRODUCTVERSION 4,8,1,881
-#define WINE_PRODUCTVERSION_STR "4.8"
+#define WINE_FILEVERSION 4,9,0,900
+#define WINE_FILEVERSION_STR "4.9.0.900"
+#define WINE_PRODUCTVERSION 4,9,0,900
+#define WINE_PRODUCTVERSION_STR "4.9"
#define WINE_PRODUCTNAME_STR "DirectX"
#include "wine/wine_common_ver.rc"
diff --git a/dlls/dmstyle/Makefile.in b/dlls/dmstyle/Makefile.in
index 5a5696c..0cb36cc 100644
--- a/dlls/dmstyle/Makefile.in
+++ b/dlls/dmstyle/Makefile.in
@@ -11,7 +11,6 @@
chordtrack.c \
commandtrack.c \
dmstyle_main.c \
- melodyformulationtrack.c \
motiftrack.c \
mutetrack.c \
regsvr.c \
diff --git a/dlls/dmstyle/auditiontrack.c b/dlls/dmstyle/auditiontrack.c
index ac25cf2..80ab4d3 100644
--- a/dlls/dmstyle/auditiontrack.c
+++ b/dlls/dmstyle/auditiontrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicAuditionTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmstyle_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmstyle);
@@ -34,36 +26,36 @@
* IDirectMusicAuditionTrack implementation
*/
/* IDirectMusicAuditionTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicAuditionTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicAuditionTrack,iface);
+HRESULT WINAPI IDirectMusicAuditionTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicAuditionTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicAuditionTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicAuditionTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicAuditionTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicAuditionTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
-
+
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicAuditionTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicAuditionTrack,iface);
+ULONG WINAPI IDirectMusicAuditionTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicAuditionTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicAuditionTrack,iface);
+ULONG WINAPI IDirectMusicAuditionTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -72,269 +64,214 @@
return ref;
}
-/* IDirectMusicAuditionTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicAuditionTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicAuditionTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicAuditionTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicAuditionTrack_IUnknown_QueryInterface,
+ IDirectMusicAuditionTrack_IUnknown_AddRef,
+ IDirectMusicAuditionTrack_IUnknown_Release
+};
+/* IDirectMusicAuditionTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface);
+ return IDirectMusicAuditionTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface);
+ return IDirectMusicAuditionTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface);
+ return IDirectMusicAuditionTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
+{
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicAuditionTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
+HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
{
- ICOM_THIS(IDirectMusicAuditionTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicAuditionTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
+HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
{
- ICOM_THIS(IDirectMusicAuditionTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicAuditionTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
{
- ICOM_THIS(IDirectMusicAuditionTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicAuditionTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicAuditionTrack,iface);
-
+HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicAuditionTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicAuditionTrack,iface);
-
+HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicAuditionTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicAuditionTrack,iface);
+HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
/* didn't find any params */
-
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicAuditionTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicAuditionTrack,iface);
-
+HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicAuditionTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicAuditionTrack,iface);
-
+HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicAuditionTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicAuditionTrack,iface);
-
+HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicAuditionTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicAuditionTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicAuditionTrack,iface);
-
+HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicAuditionTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicAuditionTrack,iface);
-
+HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicAuditionTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicAuditionTrack,iface);
-
+HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicAuditionTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicAuditionTrack,iface);
-
+HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicAuditionTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicAuditionTrack,iface);
-
+HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicAuditionTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicAuditionTrack_Track_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicAuditionTrack_QueryInterface,
- IDirectMusicAuditionTrack_AddRef,
- IDirectMusicAuditionTrack_Release,
- IDirectMusicAuditionTrack_Init,
- IDirectMusicAuditionTrack_InitPlay,
- IDirectMusicAuditionTrack_EndPlay,
- IDirectMusicAuditionTrack_Play,
- IDirectMusicAuditionTrack_GetParam,
- IDirectMusicAuditionTrack_SetParam,
- IDirectMusicAuditionTrack_IsParamSupported,
- IDirectMusicAuditionTrack_AddNotificationType,
- IDirectMusicAuditionTrack_RemoveNotificationType,
- IDirectMusicAuditionTrack_Clone,
- IDirectMusicAuditionTrack_PlayEx,
- IDirectMusicAuditionTrack_GetParamEx,
- IDirectMusicAuditionTrack_SetParamEx,
- IDirectMusicAuditionTrack_Compose,
- IDirectMusicAuditionTrack_Join
+ IDirectMusicAuditionTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicAuditionTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicAuditionTrack_IDirectMusicTrack_Release,
+ IDirectMusicAuditionTrack_IDirectMusicTrack_Init,
+ IDirectMusicAuditionTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicAuditionTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicAuditionTrack_IDirectMusicTrack_Play,
+ IDirectMusicAuditionTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicAuditionTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicAuditionTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicAuditionTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicAuditionTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicAuditionTrack_IDirectMusicTrack_Clone,
+ IDirectMusicAuditionTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicAuditionTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicAuditionTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicAuditionTrack_IDirectMusicTrack_Compose,
+ IDirectMusicAuditionTrack_IDirectMusicTrack_Join
};
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicAuditionTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicAuditionTrack* track;
-
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicAuditionTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicAuditionTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicAuditionTrackStream));
- track->pStream->lpVtbl = &DirectMusicAuditionTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
- }
-
- WARN("No interface found\n");
- return E_NOINTERFACE;
+/* IDirectMusicAuditionTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, PersistStreamVtbl, iface);
+ return IDirectMusicAuditionTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicAuditionTrackStream implementation
- */
-/* IDirectMusicAuditionTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicAuditionTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicAuditionTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicAuditionTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
+ULONG WINAPI IDirectMusicAuditionTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, PersistStreamVtbl, iface);
+ return IDirectMusicAuditionTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicAuditionTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicAuditionTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
+ULONG WINAPI IDirectMusicAuditionTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicAuditionTrack, PersistStreamVtbl, iface);
+ return IDirectMusicAuditionTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicAuditionTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicAuditionTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicAuditionTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicAuditionTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
+HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
return E_NOTIMPL;
}
-/* IDirectMusicAuditionTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicAuditionTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
+HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicAuditionTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
+HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
FIXME(": Loading not implemented yet\n");
return S_OK;
}
-HRESULT WINAPI IDirectMusicAuditionTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
+HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicAuditionTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
+HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
return E_NOTIMPL;
}
-ICOM_VTABLE(IPersistStream) DirectMusicAuditionTrackStream_Vtbl =
-{
+ICOM_VTABLE(IPersistStream) DirectMusicAuditionTrack_PersistStream_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicAuditionTrackStream_QueryInterface,
- IDirectMusicAuditionTrackStream_AddRef,
- IDirectMusicAuditionTrackStream_Release,
- IDirectMusicAuditionTrackStream_GetClassID,
- IDirectMusicAuditionTrackStream_IsDirty,
- IDirectMusicAuditionTrackStream_Load,
- IDirectMusicAuditionTrackStream_Save,
- IDirectMusicAuditionTrackStream_GetSizeMax
+ IDirectMusicAuditionTrack_IPersistStream_QueryInterface,
+ IDirectMusicAuditionTrack_IPersistStream_AddRef,
+ IDirectMusicAuditionTrack_IPersistStream_Release,
+ IDirectMusicAuditionTrack_IPersistStream_GetClassID,
+ IDirectMusicAuditionTrack_IPersistStream_IsDirty,
+ IDirectMusicAuditionTrack_IPersistStream_Load,
+ IDirectMusicAuditionTrack_IPersistStream_Save,
+ IDirectMusicAuditionTrack_IPersistStream_GetSizeMax
};
+
+/* for ClassFactory */
+HRESULT WINAPI DMUSIC_CreateDirectMusicAuditionTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicAuditionTrack* track;
+
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicAuditionTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ track->UnknownVtbl = &DirectMusicAuditionTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicAuditionTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicAuditionTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicAuditionTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicAuditionTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
+}
diff --git a/dlls/dmstyle/chordtrack.c b/dlls/dmstyle/chordtrack.c
index 7c2c3c0..0834250 100644
--- a/dlls/dmstyle/chordtrack.c
+++ b/dlls/dmstyle/chordtrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicChordTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,15 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-#include "wine/unicode.h"
-
#include "dmstyle_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmstyle);
@@ -35,36 +26,36 @@
* IDirectMusicChordTrack implementation
*/
/* IDirectMusicChordTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicChordTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicChordTrack,iface);
+HRESULT WINAPI IDirectMusicChordTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicChordTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicChordTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicChordTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicChordTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicChordTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
-
+
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicChordTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicChordTrack,iface);
+ULONG WINAPI IDirectMusicChordTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicChordTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicChordTrack,iface);
+ULONG WINAPI IDirectMusicChordTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -73,64 +64,71 @@
return ref;
}
-/* IDirectMusicChordTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicChordTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicChordTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicChordTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicChordTrack_IUnknown_QueryInterface,
+ IDirectMusicChordTrack_IUnknown_AddRef,
+ IDirectMusicChordTrack_IUnknown_Release
+};
+/* IDirectMusicChordTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+ return IDirectMusicChordTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicChordTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+ return IDirectMusicChordTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
+ return IDirectMusicChordTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
+{
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
+HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
{
- ICOM_THIS(IDirectMusicChordTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
+HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
{
- ICOM_THIS(IDirectMusicChordTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
{
- ICOM_THIS(IDirectMusicChordTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicChordTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicChordTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicChordTrack,iface);
+HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
if (IsEqualGUID (rguidType, &GUID_BandParam)
@@ -138,330 +136,147 @@
|| IsEqualGUID (rguidType, &GUID_RhythmParam)) {
TRACE("param supported\n");
return S_OK;
- }
-
+ }
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicChordTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicChordTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicChordTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicChordTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicChordTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicChordTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicChordTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicChordTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicChordTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicChordTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicChordTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicChordTrack,iface);
-
+HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicChordTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicChordTrack_Track_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicChordTrack_QueryInterface,
- IDirectMusicChordTrack_AddRef,
- IDirectMusicChordTrack_Release,
- IDirectMusicChordTrack_Init,
- IDirectMusicChordTrack_InitPlay,
- IDirectMusicChordTrack_EndPlay,
- IDirectMusicChordTrack_Play,
- IDirectMusicChordTrack_GetParam,
- IDirectMusicChordTrack_SetParam,
- IDirectMusicChordTrack_IsParamSupported,
- IDirectMusicChordTrack_AddNotificationType,
- IDirectMusicChordTrack_RemoveNotificationType,
- IDirectMusicChordTrack_Clone,
- IDirectMusicChordTrack_PlayEx,
- IDirectMusicChordTrack_GetParamEx,
- IDirectMusicChordTrack_SetParamEx,
- IDirectMusicChordTrack_Compose,
- IDirectMusicChordTrack_Join
+ IDirectMusicChordTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicChordTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicChordTrack_IDirectMusicTrack_Release,
+ IDirectMusicChordTrack_IDirectMusicTrack_Init,
+ IDirectMusicChordTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicChordTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicChordTrack_IDirectMusicTrack_Play,
+ IDirectMusicChordTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicChordTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicChordTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicChordTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicChordTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicChordTrack_IDirectMusicTrack_Clone,
+ IDirectMusicChordTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicChordTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicChordTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicChordTrack_IDirectMusicTrack_Compose,
+ IDirectMusicChordTrack_IDirectMusicTrack_Join
+};
+
+/* IDirectMusicChordTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface);
+ return IDirectMusicChordTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicChordTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface);
+ return IDirectMusicChordTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicChordTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicChordTrack, PersistStreamVtbl, iface);
+ return IDirectMusicChordTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
+ FIXME(": Loading not implemented yet\n");
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
+ return E_NOTIMPL;
+}
+
+ICOM_VTABLE(IPersistStream) DirectMusicChordTrack_PersistStream_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicChordTrack_IPersistStream_QueryInterface,
+ IDirectMusicChordTrack_IPersistStream_AddRef,
+ IDirectMusicChordTrack_IPersistStream_Release,
+ IDirectMusicChordTrack_IPersistStream_GetClassID,
+ IDirectMusicChordTrack_IPersistStream_IsDirty,
+ IDirectMusicChordTrack_IPersistStream_Load,
+ IDirectMusicChordTrack_IPersistStream_Save,
+ IDirectMusicChordTrack_IPersistStream_GetSizeMax
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicChordTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
+HRESULT WINAPI DMUSIC_CreateDirectMusicChordTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
IDirectMusicChordTrack* track;
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicChordTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicChordTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicChordTrackStream));
- track->pStream->lpVtbl = &DirectMusicChordTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicChordTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
}
+ track->UnknownVtbl = &DirectMusicChordTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicChordTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicChordTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicChordTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
- WARN("No interface found\n");
- return E_NOINTERFACE;
+ return IDirectMusicChordTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
}
-
-
-/*****************************************************************************
- * IDirectMusicChordTrackStream implementation
- */
-/* IDirectMusicChordTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicChordTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicChordTrackStream,iface);
-
- if (IsEqualGUID(riid, &IID_IUnknown)
- || IsEqualGUID(riid, &IID_IPersistStream)) {
- IDirectMusicChordTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicChordTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicChordTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicChordTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicChordTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicChordTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicChordTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- return E_NOTIMPL;
-}
-
-/* IDirectMusicChordTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicChordTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicChordTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
- ICOM_THIS(IDirectMusicChordTrackStream,iface);
- FOURCC chunkID;
- DWORD chunkSize, dwSizeOfStruct, ListSize[1], ListCount[1];
- LARGE_INTEGER liMove; /* used when skipping chunks */
- IDirectMusicChordTrack* pTrack = This->pParentTrack; /* that's where we load data to */
- DMUS_IO_CHORD tempChord; /* temporary, used for reading data */
- DWORD tempSubChords;
-
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(DWORD), NULL);
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
- case FOURCC_LIST: {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(chunkID));
- ListSize[0] = chunkSize - sizeof(FOURCC);
- ListCount[0] = 0;
- switch (chunkID) {
- case DMUS_FOURCC_CHORDTRACK_LIST: {
- TRACE_(dmfile)(": chord track list\n");
- do {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
- ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
- case DMUS_FOURCC_CHORDTRACKHEADER_CHUNK: {
- TRACE_(dmfile)(": chord track header chunk\n");
- IStream_Read (pStm, &pTrack->dwHeader, chunkSize, NULL);
- TRACE_(dmfile)(": (READ): header: chord root = %i; chord scale = %i\n", (pTrack->dwHeader && 0xFF000000) >> 24, pTrack->dwHeader && 0x00FFFFFF);
- break;
- }
- case DMUS_FOURCC_CHORDTRACKBODY_CHUNK: {
- TRACE_(dmfile)(": chord track body chunk\n");
- /* make space for one more structure */
- /* pTrack->dwChordKeys++; */ /* moved at the end for correct counting */
- /* FIXME: scheme with HeapReAlloc doesn't work so.. */
- /* pTrack->pChordKeys = HeapReAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, pTrack->pChordKeys, sizeof(DMUS_CHORD_KEY) * pTrack->dwChordKeys); */
- /* pTrack->pChordKeysTime = HeapReAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, pTrack->pChordKeysTime, sizeof(MUSIC_TIME) *pTrack->dwChordKeys); */
- /* load size of DMUS_IO_CHORD */
- IStream_Read (pStm, &dwSizeOfStruct, sizeof(DWORD), NULL);
- if (dwSizeOfStruct != sizeof(DMUS_IO_CHORD)) {
- TRACE_(dmfile)(": declared size of struct (=%ld) != actual size (=%i); loading failed\n", dwSizeOfStruct, sizeof(DMUS_IO_CHORD));
- return E_FAIL;
- }
- /* reset temporary storage and fill it with data */
- ZeroMemory (&tempChord, sizeof(DMUS_IO_CHORD));
- IStream_Read (pStm, &tempChord, dwSizeOfStruct, NULL);
- /* copy data to final destination */
- strncpyW (pTrack->pChordKeys[pTrack->dwChordKeys].wszName, tempChord.wszName, 16);
- /*pTrack->pChordKeys[pTrack->dwChordKeys].wszName = tempChord.wszName; */
- pTrack->pChordKeys[pTrack->dwChordKeys].wMeasure = tempChord.wMeasure;
- pTrack->pChordKeys[pTrack->dwChordKeys].bBeat = tempChord.bBeat;
- pTrack->pChordKeys[pTrack->dwChordKeys].bFlags = tempChord.bFlags;
- /* this one is my invention */
- pTrack->pChordKeysTime[pTrack->dwChordKeys] = tempChord.mtTime;
- /* FIXME: are these two are derived from header? */
- pTrack->pChordKeys[pTrack->dwChordKeys].dwScale = pTrack->dwHeader && 0x00FFFFFF;
- pTrack->pChordKeys[pTrack->dwChordKeys].bKey = (pTrack->dwHeader && 0xFF000000) >> 24;
- /* now here comes number of subchords */
- IStream_Read (pStm, &tempSubChords, sizeof(DWORD), NULL);
- pTrack->pChordKeys[pTrack->dwChordKeys].bSubChordCount = tempSubChords;
- /* load size of DMUS_IO_SUBCHORD */
- IStream_Read (pStm, &dwSizeOfStruct, sizeof(DWORD), NULL);
- if (dwSizeOfStruct != sizeof(DMUS_IO_SUBCHORD)) {
- TRACE_(dmfile)(": declared size of struct (=%ld) != actual size (=%i); loading failed\n", dwSizeOfStruct, sizeof(DMUS_IO_SUBCHORD));
- return E_FAIL;
- }
- IStream_Read (pStm, pTrack->pChordKeys[pTrack->dwChordKeys].SubChordList, dwSizeOfStruct * tempSubChords, NULL);
- /* well, this should be it :) */
- pTrack->dwChordKeys++;
- break;
- }
- default: {
- TRACE_(dmfile)(": unknown chunk (skipping)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip this chunk */
- break;
- }
- }
- TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
- } while (ListCount[0] < ListSize[0]);
- break;
- }
- default: {
- TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
- liMove.QuadPart = ListSize[0];
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
- return E_FAIL;
- }
- }
- /* in the end, let's see what we got */
- TRACE_(dmfile)(": reading finished\n");
- if (TRACE_ON(dmfile)) {
- int i,j;
- TRACE_(dmfile)(": (READ): number of chord keys in track = %ld\n", pTrack->dwChordKeys);
- for (i = 0; i < pTrack->dwChordKeys; i++) {
- TRACE_(dmfile)(": (READ): chord key[%i]: associated mtTime = %li\n", i, pTrack->pChordKeysTime[i]);
- TRACE_(dmfile)(": (READ): chord key[%i]: wszName = %s; wMeasure = %d; bBeat = %i; dwScale = %ld; \
-bKey = %i; bFlags = %i; bSubChordCount = %i\n", i, debugstr_w (pTrack->pChordKeys[i].wszName), \
- pTrack->pChordKeys[i].wMeasure, pTrack->pChordKeys[i].bBeat, pTrack->pChordKeys[i].dwScale, \
- pTrack->pChordKeys[i].bKey, pTrack->pChordKeys[i].bFlags, pTrack->pChordKeys[i].bSubChordCount);
- for (j = 0; j < pTrack->pChordKeys[i].bSubChordCount; j++) {
- TRACE_(dmfile)(": (READ): chord key[%i]: subchord[%i]: dwChordPattern = %ld; \
-dwScalePattern = %ld; dwInversionPoints = %ld; dwLevels = %ld; bChordRoot = %i; \
-bScaleRoot = %i\n", i, j, pTrack->pChordKeys[i].SubChordList[j].dwChordPattern, \
- pTrack->pChordKeys[i].SubChordList[j].dwScalePattern, pTrack->pChordKeys[i].SubChordList[j].dwInversionPoints, \
- pTrack->pChordKeys[i].SubChordList[j].dwLevels, pTrack->pChordKeys[i].SubChordList[j].bChordRoot, \
- pTrack->pChordKeys[i].SubChordList[j].bScaleRoot);
- }
- }
- }
- break;
- }
- default: {
- TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
- return E_FAIL;
- }
- }
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicChordTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicChordTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
- return E_NOTIMPL;
-}
-
-ICOM_VTABLE(IPersistStream) DirectMusicChordTrackStream_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicChordTrackStream_QueryInterface,
- IDirectMusicChordTrackStream_AddRef,
- IDirectMusicChordTrackStream_Release,
- IDirectMusicChordTrackStream_GetClassID,
- IDirectMusicChordTrackStream_IsDirty,
- IDirectMusicChordTrackStream_Load,
- IDirectMusicChordTrackStream_Save,
- IDirectMusicChordTrackStream_GetSizeMax
-};
diff --git a/dlls/dmstyle/commandtrack.c b/dlls/dmstyle/commandtrack.c
index ad3fd91..6ff568c 100644
--- a/dlls/dmstyle/commandtrack.c
+++ b/dlls/dmstyle/commandtrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicCommandTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmstyle_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmstyle);
@@ -34,36 +26,36 @@
* IDirectMusicCommandTrack implementation
*/
/* IDirectMusicCommandTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicCommandTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicCommandTrack,iface);
+HRESULT WINAPI IDirectMusicCommandTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicCommandTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicCommandTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicCommandTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicCommandTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicCommandTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
-
+
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicCommandTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicCommandTrack,iface);
+ULONG WINAPI IDirectMusicCommandTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicCommandTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicCommandTrack,iface);
+ULONG WINAPI IDirectMusicCommandTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -72,64 +64,71 @@
return ref;
}
-/* IDirectMusicCommandTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicCommandTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicCommandTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicCommandTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicCommandTrack_IUnknown_QueryInterface,
+ IDirectMusicCommandTrack_IUnknown_AddRef,
+ IDirectMusicCommandTrack_IUnknown_Release
+};
+/* IDirectMusicCommandTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface);
+ return IDirectMusicCommandTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface);
+ return IDirectMusicCommandTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface);
+ return IDirectMusicCommandTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
+{
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicCommandTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
+HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
{
- ICOM_THIS(IDirectMusicCommandTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicCommandTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
+HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
{
- ICOM_THIS(IDirectMusicCommandTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicCommandTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
{
- ICOM_THIS(IDirectMusicCommandTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicCommandTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicCommandTrack,iface);
-
+HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicCommandTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicCommandTrack,iface);
-
+HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicCommandTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicCommandTrack,iface);
+HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
if (IsEqualGUID (rguidType, &GUID_CommandParam)
@@ -137,223 +136,135 @@
|| IsEqualGUID (rguidType, &GUID_CommandParamNext)) {
TRACE("param supported\n");
return S_OK;
- }
-
+ }
+
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicCommandTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicCommandTrack,iface);
-
+HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicCommandTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicCommandTrack,iface);
-
+HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicCommandTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicCommandTrack,iface);
-
+HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicCommandTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicCommandTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicCommandTrack,iface);
-
+HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
- /* implement code for sending PMsgs */
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicCommandTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicCommandTrack,iface);
-
+HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicCommandTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicCommandTrack,iface);
-
+HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicCommandTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicCommandTrack,iface);
-
+HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicCommandTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicCommandTrack,iface);
-
+HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicCommandTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicCommandTrack_Track_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicCommandTrack_QueryInterface,
- IDirectMusicCommandTrack_AddRef,
- IDirectMusicCommandTrack_Release,
- IDirectMusicCommandTrack_Init,
- IDirectMusicCommandTrack_InitPlay,
- IDirectMusicCommandTrack_EndPlay,
- IDirectMusicCommandTrack_Play,
- IDirectMusicCommandTrack_GetParam,
- IDirectMusicCommandTrack_SetParam,
- IDirectMusicCommandTrack_IsParamSupported,
- IDirectMusicCommandTrack_AddNotificationType,
- IDirectMusicCommandTrack_RemoveNotificationType,
- IDirectMusicCommandTrack_Clone,
- IDirectMusicCommandTrack_PlayEx,
- IDirectMusicCommandTrack_GetParamEx,
- IDirectMusicCommandTrack_SetParamEx,
- IDirectMusicCommandTrack_Compose,
- IDirectMusicCommandTrack_Join
+ IDirectMusicCommandTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicCommandTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicCommandTrack_IDirectMusicTrack_Release,
+ IDirectMusicCommandTrack_IDirectMusicTrack_Init,
+ IDirectMusicCommandTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicCommandTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicCommandTrack_IDirectMusicTrack_Play,
+ IDirectMusicCommandTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicCommandTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicCommandTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicCommandTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicCommandTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicCommandTrack_IDirectMusicTrack_Clone,
+ IDirectMusicCommandTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicCommandTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicCommandTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicCommandTrack_IDirectMusicTrack_Compose,
+ IDirectMusicCommandTrack_IDirectMusicTrack_Join
};
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicCommandTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicCommandTrack* track;
-
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicCommandTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicCommandTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicCommandTrackStream));
- track->pStream->lpVtbl = &DirectMusicCommandTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
+/* IDirectMusicCommandTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, PersistStreamVtbl, iface);
+ return IDirectMusicCommandTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicCommandTrackStream implementation
- */
-/* IDirectMusicCommandTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicCommandTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicCommandTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicCommandTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
+ULONG WINAPI IDirectMusicCommandTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, PersistStreamVtbl, iface);
+ return IDirectMusicCommandTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicCommandTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicCommandTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
+ULONG WINAPI IDirectMusicCommandTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, PersistStreamVtbl, iface);
+ return IDirectMusicCommandTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicCommandTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicCommandTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicCommandTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicCommandTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
+HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
return E_NOTIMPL;
}
-/* IDirectMusicCommandTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicCommandTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
+HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicCommandTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
- ICOM_THIS(IDirectMusicCommandTrackStream,iface);
+HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
+ ICOM_THIS_MULTI(IDirectMusicCommandTrack, PersistStreamVtbl, iface);
FOURCC chunkID;
- DWORD chunkSize, dwSizeOfStruct;
+ DWORD chunkSize, dwSizeOfStruct, nrCommands;
LARGE_INTEGER liMove; /* used when skipping chunks */
- IDirectMusicCommandTrack* pTrack = This->pParentTrack; /* that's where we load data to */
IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
IStream_Read (pStm, &chunkSize, sizeof(DWORD), NULL);
TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
switch (chunkID) {
case DMUS_FOURCC_COMMANDTRACK_CHUNK: {
+ int count;
TRACE_(dmfile)(": command track chunk\n");
IStream_Read (pStm, &dwSizeOfStruct, sizeof(DWORD), NULL);
if (dwSizeOfStruct != sizeof(DMUS_IO_COMMAND)) {
- TRACE_(dmfile)(": declared size of struct (=%ld) != actual size (=%i); loading failed\n", dwSizeOfStruct, sizeof(DMUS_IO_COMMAND));
- liMove.QuadPart = chunkSize - sizeof(DWORD);
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
- return E_FAIL;
+ TRACE_(dmfile)(": declared size of struct (=%ld) != actual size (=%i); indicates older direct music version\n", dwSizeOfStruct, sizeof(DMUS_IO_COMMAND));
}
chunkSize -= sizeof(DWORD); /* now chunk size is one DWORD shorter */
- pTrack->pCommands = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, chunkSize);
- IStream_Read (pStm, pTrack->pCommands, chunkSize, NULL);
- pTrack->dwCommands = chunkSize/dwSizeOfStruct;
- /* in the end, let's see what we got */
- TRACE_(dmfile)(": reading finished\n");
- if (TRACE_ON(dmfile)) {
- int i;
- TRACE_(dmfile)(": (READ): number of commands in track = %ld\n", pTrack->dwCommands);
- for (i = 0; i < pTrack->dwCommands; i++) {
- TRACE_(dmfile)(": (READ): command[%i]: mtTime = %li; wMeasure = %d; bBeat = %i; bCommand = %i; bGrooveLevel = %i; bGrooveRange = %i; bRepeatMode = %i\n", \
- i, pTrack->pCommands[i].mtTime, pTrack->pCommands[i].wMeasure, pTrack->pCommands[i].bBeat, pTrack->pCommands[i].bCommand, \
- pTrack->pCommands[i].bGrooveLevel, pTrack->pCommands[i].bGrooveRange, pTrack->pCommands[i].bRepeatMode);
- }
+ nrCommands = chunkSize/dwSizeOfStruct; /* and this is the number of commands */
+ /* load each command seperately in new entry */
+ for (count = 0; count < nrCommands; count++) {
+ LPDMUS_PRIVATE_COMMAND pNewCommand = (LPDMUS_PRIVATE_COMMAND) HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(DMUS_PRIVATE_COMMAND));
+ IStream_Read (pStm, &pNewCommand->pCommand, dwSizeOfStruct, NULL);
+ list_add_tail (&This->Commands, &pNewCommand->entry);
}
- }
- break;
+ TRACE_(dmfile)(": reading finished\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_LOADED;
+ break;
+ }
default: {
TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
liMove.QuadPart = chunkSize;
@@ -361,29 +272,69 @@
return E_FAIL;
}
}
-
+
+ /* DEBUG: dumps whole band track object tree: */
+ if (TRACE_ON(dmstyle)) {
+ int r = 0;
+ DMUS_PRIVATE_COMMAND *tmpEntry;
+ struct list *listEntry;
+ TRACE("*** IDirectMusicCommandTrack (%p) ***\n", (LPDIRECTMUSICTRACK8)This->TrackVtbl);
+ TRACE(" - Commands:\n");
+ LIST_FOR_EACH (listEntry, &This->Commands) {
+ tmpEntry = LIST_ENTRY (listEntry, DMUS_PRIVATE_COMMAND, entry);
+ TRACE(" - Command[%i]:\n", r);
+ TRACE(" - mtTime = %li\n", tmpEntry->pCommand.mtTime);
+ TRACE(" - wMeasure = %d\n", tmpEntry->pCommand.wMeasure);
+ TRACE(" - bBeat = %i\n", tmpEntry->pCommand.bBeat);
+ TRACE(" - bCommand = %i\n", tmpEntry->pCommand.bCommand);
+ TRACE(" - bGrooveLevel = %i\n", tmpEntry->pCommand.bGrooveLevel);
+ TRACE(" - bGrooveRange = %i\n", tmpEntry->pCommand.bGrooveRange);
+ TRACE(" - bRepeatMode = %i\n", tmpEntry->pCommand.bRepeatMode);
+ r++;
+ }
+ }
+
return S_OK;
}
-HRESULT WINAPI IDirectMusicCommandTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
+HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicCommandTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
+HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
return E_NOTIMPL;
}
-ICOM_VTABLE(IPersistStream) DirectMusicCommandTrackStream_Vtbl =
-{
+ICOM_VTABLE(IPersistStream) DirectMusicCommandTrack_PersistStream_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicCommandTrackStream_QueryInterface,
- IDirectMusicCommandTrackStream_AddRef,
- IDirectMusicCommandTrackStream_Release,
- IDirectMusicCommandTrackStream_GetClassID,
- IDirectMusicCommandTrackStream_IsDirty,
- IDirectMusicCommandTrackStream_Load,
- IDirectMusicCommandTrackStream_Save,
- IDirectMusicCommandTrackStream_GetSizeMax
+ IDirectMusicCommandTrack_IPersistStream_QueryInterface,
+ IDirectMusicCommandTrack_IPersistStream_AddRef,
+ IDirectMusicCommandTrack_IPersistStream_Release,
+ IDirectMusicCommandTrack_IPersistStream_GetClassID,
+ IDirectMusicCommandTrack_IPersistStream_IsDirty,
+ IDirectMusicCommandTrack_IPersistStream_Load,
+ IDirectMusicCommandTrack_IPersistStream_Save,
+ IDirectMusicCommandTrack_IPersistStream_GetSizeMax
};
+
+/* for ClassFactory */
+HRESULT WINAPI DMUSIC_CreateDirectMusicCommandTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicCommandTrack* track;
+
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicCommandTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ track->UnknownVtbl = &DirectMusicCommandTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicCommandTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicCommandTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicCommandTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
+ list_init (&track->Commands);
+
+ return IDirectMusicCommandTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
+}
diff --git a/dlls/dmstyle/dmstyle_main.c b/dlls/dmstyle/dmstyle_main.c
index d85c7d5..920b50c 100644
--- a/dlls/dmstyle/dmstyle_main.c
+++ b/dlls/dmstyle/dmstyle_main.c
@@ -1,6 +1,6 @@
/* DirectMusicStyle Main
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,8 +21,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(dmstyle);
-typedef struct
-{
+typedef struct {
/* IUnknown fields */
ICOM_VFIELD(IClassFactory);
DWORD ref;
@@ -31,41 +30,32 @@
/******************************************************************
* DirectMusicSection ClassFactory
*/
-static HRESULT WINAPI SectionCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI SectionCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI SectionCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI SectionCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI SectionCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI SectionCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI SectionCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI SectionCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
-
/* nothing here yet */
-
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-static HRESULT WINAPI SectionCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI SectionCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -85,45 +75,30 @@
/******************************************************************
* DirectMusicStyle ClassFactory
*/
-static HRESULT WINAPI StyleCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI StyleCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI StyleCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI StyleCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI StyleCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI StyleCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI StyleCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI StyleCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicStyle) ||
- IsEqualIID (riid, &IID_IDirectMusicStyle8)) {
- return DMUSIC_CreateDirectMusicStyle (riid, (LPDIRECTMUSICSTYLE8*)ppobj, pOuter);
- } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
- return DMUSIC_CreateDirectMusicStyleObject (riid, (LPDIRECTMUSICOBJECT*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicStyleImpl (riid, ppobj, pOuter);
}
-static HRESULT WINAPI StyleCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI StyleCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -143,43 +118,30 @@
/******************************************************************
* DirectMusicChordTrack ClassFactory
*/
-static HRESULT WINAPI ChordTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI ChordTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI ChordTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ChordTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI ChordTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI ChordTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI ChordTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI ChordTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack)
- || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicChordTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicChordTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI ChordTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI ChordTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -199,43 +161,30 @@
/******************************************************************
* DirectMusicCommandTrack ClassFactory
*/
-static HRESULT WINAPI CommandTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI CommandTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI CommandTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI CommandTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI CommandTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI CommandTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI CommandTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI CommandTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack)
- || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicCommandTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicCommandTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI CommandTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI CommandTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -255,43 +204,30 @@
/******************************************************************
* DirectMusicStyleTrack ClassFactory
*/
-static HRESULT WINAPI StyleTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI StyleTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI StyleTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI StyleTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI StyleTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI StyleTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI StyleTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI StyleTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack)
- || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicStyleTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicStyleTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI StyleTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI StyleTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -311,43 +247,30 @@
/******************************************************************
* DirectMusicMotifTrack ClassFactory
*/
-static HRESULT WINAPI MotifTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI MotifTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI MotifTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI MotifTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI MotifTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI MotifTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI MotifTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI MotifTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack)
- || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicMotifTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicMotifTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI MotifTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI MotifTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -367,43 +290,30 @@
/******************************************************************
* DirectMusicAuditionTrack ClassFactory
*/
-static HRESULT WINAPI AuditionTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI AuditionTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI AuditionTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI AuditionTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI AuditionTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI AuditionTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI AuditionTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI AuditionTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack)
- || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicAuditionTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicAuditionTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI AuditionTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI AuditionTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -423,43 +333,30 @@
/******************************************************************
* DirectMusicMuteTrack ClassFactory
*/
-static HRESULT WINAPI MuteTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI MuteTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI MuteTrackCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI MuteTrackCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI MuteTrackCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI MuteTrackCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI MuteTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI MuteTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack)
- || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicMuteTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicMuteTrack (riid, ppobj, pOuter);
}
-static HRESULT WINAPI MuteTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI MuteTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -477,75 +374,15 @@
static IClassFactoryImpl MuteTrack_CF = {&MuteTrackCF_Vtbl, 1 };
/******************************************************************
- * DirectMusicMelodyFormulationTrack ClassFactory
- */
-static HRESULT WINAPI MelodyFormulationTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
- ICOM_THIS(IClassFactoryImpl,iface);
-
- FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-static ULONG WINAPI MelodyFormulationTrackCF_AddRef(LPCLASSFACTORY iface)
-{
- ICOM_THIS(IClassFactoryImpl,iface);
- return ++(This->ref);
-}
-
-static ULONG WINAPI MelodyFormulationTrackCF_Release(LPCLASSFACTORY iface)
-{
- ICOM_THIS(IClassFactoryImpl,iface);
- /* static class, won't be freed */
- return --(This->ref);
-}
-
-static HRESULT WINAPI MelodyFormulationTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IClassFactoryImpl,iface);
-
- TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicTrack)
- || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- return DMUSIC_CreateDirectMusicMelodyFormulationTrack (riid, (LPDIRECTMUSICTRACK8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
-}
-
-static HRESULT WINAPI MelodyFormulationTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
- ICOM_THIS(IClassFactoryImpl,iface);
- FIXME("(%p)->(%d),stub!\n", This, dolock);
- return S_OK;
-}
-
-static ICOM_VTABLE(IClassFactory) MelodyFormulationTrackCF_Vtbl = {
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- MelodyFormulationTrackCF_QueryInterface,
- MelodyFormulationTrackCF_AddRef,
- MelodyFormulationTrackCF_Release,
- MelodyFormulationTrackCF_CreateInstance,
- MelodyFormulationTrackCF_LockServer
-};
-
-static IClassFactoryImpl MelodyFormulationTrack_CF = {&MelodyFormulationTrackCF_Vtbl, 1 };
-
-/******************************************************************
* DllMain
*
*
*/
-BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
-{
- if (fdwReason == DLL_PROCESS_ATTACH)
- {
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
+ if (fdwReason == DLL_PROCESS_ATTACH) {
DisableThreadLibraryCalls(hinstDLL);
/* FIXME: Initialisation */
- }
- else if (fdwReason == DLL_PROCESS_DETACH)
- {
+ } else if (fdwReason == DLL_PROCESS_DETACH) {
/* FIXME: Cleanup */
}
@@ -558,10 +395,8 @@
*
*
*/
-HRESULT WINAPI DMSTYLE_DllCanUnloadNow(void)
-{
+HRESULT WINAPI DMSTYLE_DllCanUnloadNow(void) {
FIXME("(void): stub\n");
-
return S_FALSE;
}
@@ -571,8 +406,7 @@
*
*
*/
-HRESULT WINAPI DMSTYLE_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
-{
+HRESULT WINAPI DMSTYLE_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) {
TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSection) && IsEqualIID (riid, &IID_IClassFactory)) {
@@ -607,11 +441,7 @@
*ppv = (LPVOID) &MuteTrack_CF;
IClassFactory_AddRef((IClassFactory*)*ppv);
return S_OK;
- } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicMelodyFormulationTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
- *ppv = (LPVOID) &MelodyFormulationTrack_CF;
- IClassFactory_AddRef((IClassFactory*)*ppv);
- return S_OK;
- }
+ }
WARN("(%p,%p,%p): no interface found.\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
return CLASS_E_CLASSNOTAVAILABLE;
diff --git a/dlls/dmstyle/dmstyle_private.h b/dlls/dmstyle/dmstyle_private.h
index c664947..a607915 100644
--- a/dlls/dmstyle/dmstyle_private.h
+++ b/dlls/dmstyle/dmstyle_private.h
@@ -1,6 +1,6 @@
/* DirectMusicStyle Private Include
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,614 +23,574 @@
#include <stdarg.h>
#include "windef.h"
-#include "wine/debug.h"
#include "winbase.h"
#include "winnt.h"
#include "wingdi.h"
-#include "dmusicc.h"
+#include "winuser.h"
+
+#include "wine/debug.h"
+#include "wine/list.h"
+#include "wine/unicode.h"
+#include "winreg.h"
+
#include "dmusici.h"
-#include "dmusics.h"
-#include "dmplugin.h"
#include "dmusicf.h"
-#include "dsound.h"
+#include "dmusics.h"
/*****************************************************************************
* Interfaces
*/
typedef struct IDirectMusicStyle8Impl IDirectMusicStyle8Impl;
-typedef struct IDirectMusicStyleObject IDirectMusicStyleObject;
-typedef struct IDirectMusicStyleObjectStream IDirectMusicStyleObjectStream;
-
typedef struct IDirectMusicAuditionTrack IDirectMusicAuditionTrack;
-typedef struct IDirectMusicAuditionTrackStream IDirectMusicAuditionTrackStream;
typedef struct IDirectMusicChordTrack IDirectMusicChordTrack;
-typedef struct IDirectMusicChordTrackStream IDirectMusicChordTrackStream;
typedef struct IDirectMusicCommandTrack IDirectMusicCommandTrack;
-typedef struct IDirectMusicCommandTrackStream IDirectMusicCommandTrackStream;
typedef struct IDirectMusicMelodyFormulationTrack IDirectMusicMelodyFormulationTrack;
-typedef struct IDirectMusicMelodyFormulationTrackStream IDirectMusicMelodyFormulationTrackStream;
typedef struct IDirectMusicMotifTrack IDirectMusicMotifTrack;
-typedef struct IDirectMusicMotifTrackStream IDirectMusicMotifTrackStream;
typedef struct IDirectMusicMuteTrack IDirectMusicMuteTrack;
-typedef struct IDirectMusicMuteTrackStream IDirectMusicMuteTrackStream;
typedef struct IDirectMusicStyleTrack IDirectMusicStyleTrack;
-typedef struct IDirectMusicStyleTrackStream IDirectMusicStyleTrackStream;
/*****************************************************************************
* Predeclare the interface implementation structures
*/
-extern ICOM_VTABLE(IDirectMusicStyle8) DirectMusicStyle8_Vtbl;
+extern ICOM_VTABLE(IUnknown) DirectMusicStyle8_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicStyle8) DirectMusicStyle8_Style_Vtbl;
+extern ICOM_VTABLE(IDirectMusicObject) DirectMusicStyle8_Object_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicStyle8_IPersistStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicObject) DirectMusicStyleObject_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicStyleObjectStream_Vtbl;
+extern ICOM_VTABLE(IUnknown) DirectMusicAuditionTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicAuditionTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicAuditionTrack_PersistStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicAuditionTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicAuditionTrackStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicChordTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicChordTrackStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicCommandTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicCommandTrackStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicMelodyFormulationTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicMelodyFormulationTrackStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicMotifTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicMotifTrackStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicMuteTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicMuteTrackStream_Vtbl;
-extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicStyleTrack_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicStyleTrackStream_Vtbl;
+extern ICOM_VTABLE(IUnknown) DirectMusicChordTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicChordTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicChordTrack_PersistStream_Vtbl;
+
+extern ICOM_VTABLE(IUnknown) DirectMusicCommandTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicCommandTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicCommandTrack_PersistStream_Vtbl;
+
+extern ICOM_VTABLE(IUnknown) DirectMusicMelodyFormulationTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicMelodyFormulationTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicMelodyFormulationTrack_PersistStream_Vtbl;
+
+extern ICOM_VTABLE(IUnknown) DirectMusicMotifTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicMotifTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicMotifTrack_PersistStream_Vtbl;
+
+extern ICOM_VTABLE(IUnknown) DirectMusicMuteTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicMuteTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicMuteTrack_PersistStream_Vtbl;
+
+extern ICOM_VTABLE(IUnknown) DirectMusicStyleTrack_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicStyleTrack_Track_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicStyleTrack_PersistStream_Vtbl;
/*****************************************************************************
* ClassFactory
- *
- * can support IID_IDirectMusicStyle and IID_IDirectMusicStyle8
- * return always an IDirectMusicStyle8Impl
*/
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicStyle (LPCGUID lpcGUID, LPDIRECTMUSICSTYLE8* ppDMStyle, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicStyleImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicStyleObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter);
-
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicAuditionTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicChordTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicCommandTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicMelodyFormulationTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicMotifTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicMuteTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicStyleTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicAuditionTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicChordTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicCommandTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicMelodyFormulationTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicMotifTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicMuteTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicStyleTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
/*****************************************************************************
* IDirectMusicStyle8Impl implementation structure
*/
-struct IDirectMusicStyle8Impl
-{
+struct IDirectMusicStyle8Impl {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicStyle8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicStyle8) *StyleVtbl;
+ ICOM_VTABLE(IDirectMusicObject) *ObjectVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicStyle8Impl fields */
- IDirectMusicStyleObject* pObject;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicStyle8Impl_QueryInterface (LPDIRECTMUSICSTYLE8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicStyle8Impl_AddRef (LPDIRECTMUSICSTYLE8 iface);
-extern ULONG WINAPI IDirectMusicStyle8Impl_Release (LPDIRECTMUSICSTYLE8 iface);
-/* IDirectMusicStyle: */
-extern HRESULT WINAPI IDirectMusicStyle8Impl_GetBand (LPDIRECTMUSICSTYLE8 iface, WCHAR* pwszName, IDirectMusicBand** ppBand);
-extern HRESULT WINAPI IDirectMusicStyle8Impl_EnumBand (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, WCHAR* pwszName);
-extern HRESULT WINAPI IDirectMusicStyle8Impl_GetDefaultBand (LPDIRECTMUSICSTYLE8 iface, IDirectMusicBand** ppBand);
-extern HRESULT WINAPI IDirectMusicStyle8Impl_EnumMotif (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, WCHAR* pwszName);
-extern HRESULT WINAPI IDirectMusicStyle8Impl_GetMotif (LPDIRECTMUSICSTYLE8 iface, WCHAR* pwszName, IDirectMusicSegment** ppSegment);
-extern HRESULT WINAPI IDirectMusicStyle8Impl_GetDefaultChordMap (LPDIRECTMUSICSTYLE8 iface, IDirectMusicChordMap** ppChordMap);
-extern HRESULT WINAPI IDirectMusicStyle8Impl_EnumChordMap (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, WCHAR* pwszName);
-extern HRESULT WINAPI IDirectMusicStyle8Impl_GetChordMap (LPDIRECTMUSICSTYLE8 iface, WCHAR* pwszName, IDirectMusicChordMap** ppChordMap);
-extern HRESULT WINAPI IDirectMusicStyle8Impl_GetTimeSignature (LPDIRECTMUSICSTYLE8 iface, DMUS_TIMESIGNATURE* pTimeSig);
-extern HRESULT WINAPI IDirectMusicStyle8Impl_GetEmbellishmentLength (LPDIRECTMUSICSTYLE8 iface, DWORD dwType, DWORD dwLevel, DWORD* pdwMin, DWORD* pdwMax);
-extern HRESULT WINAPI IDirectMusicStyle8Impl_GetTempo (LPDIRECTMUSICSTYLE8 iface, double* pTempo);
-/* IDirectMusicStyle8: */
-extern HRESULT WINAPI IDirectMusicStyle8ImplEnumPattern (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, DWORD dwPatternType, WCHAR* pwszName);
-
-
-/*****************************************************************************
- * IDirectMusicStyleObject implementation structure
- */
-struct IDirectMusicStyleObject
-{
- /* IUnknown fields */
- ICOM_VFIELD(IDirectMusicObject);
- DWORD ref;
-
- /* IDirectMusicObjectImpl fields */
LPDMUS_OBJECTDESC pDesc;
- IDirectMusicStyleObjectStream* pStream;
- IDirectMusicStyle8Impl* pStyle;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicStyleObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicStyleObject_AddRef (LPDIRECTMUSICOBJECT iface);
-extern ULONG WINAPI IDirectMusicStyleObject_Release (LPDIRECTMUSICOBJECT iface);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicStyle8Impl_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicStyle8Impl_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicStyle: */
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_QueryInterface (LPDIRECTMUSICSTYLE8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_AddRef (LPDIRECTMUSICSTYLE8 iface);
+extern ULONG WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_Release (LPDIRECTMUSICSTYLE8 iface);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_GetBand (LPDIRECTMUSICSTYLE8 iface, WCHAR* pwszName, IDirectMusicBand** ppBand);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_EnumBand (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, WCHAR* pwszName);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_GetDefaultBand (LPDIRECTMUSICSTYLE8 iface, IDirectMusicBand** ppBand);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_EnumMotif (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, WCHAR* pwszName);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_GetMotif (LPDIRECTMUSICSTYLE8 iface, WCHAR* pwszName, IDirectMusicSegment** ppSegment);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_GetDefaultChordMap (LPDIRECTMUSICSTYLE8 iface, IDirectMusicChordMap** ppChordMap);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_EnumChordMap (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, WCHAR* pwszName);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_GetChordMap (LPDIRECTMUSICSTYLE8 iface, WCHAR* pwszName, IDirectMusicChordMap** ppChordMap);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_GetTimeSignature (LPDIRECTMUSICSTYLE8 iface, DMUS_TIMESIGNATURE* pTimeSig);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_GetEmbellishmentLength (LPDIRECTMUSICSTYLE8 iface, DWORD dwType, DWORD dwLevel, DWORD* pdwMin, DWORD* pdwMax);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_GetTempo (LPDIRECTMUSICSTYLE8 iface, double* pTempo);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_EnumPattern (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, DWORD dwPatternType, WCHAR* pwszName);
/* IDirectMusicObject: */
-extern HRESULT WINAPI IDirectMusicStyleObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicStyleObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicStyleObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
-
-/*****************************************************************************
- * IDirectMusicStyleObjectStream implementation structure
- */
-struct IDirectMusicStyleObjectStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicStyleObject* pParentObject;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicStyleObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicStyleObjectStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicStyleObjectStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicStyleObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicStyle8Impl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface);
+extern ULONG WINAPI IDirectMusicStyle8Impl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicStyleObjectStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicStyleObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicStyleObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicStyleObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicStyle8Impl_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicStyle8Impl_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicAuditionTrack implementation structure
*/
-struct IDirectMusicAuditionTrack
-{
+struct IDirectMusicAuditionTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicAuditionTrack fields */
- IDirectMusicAuditionTrackStream* pStream;
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicAuditionTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicAuditionTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicAuditionTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicAuditionTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicAuditionTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicAuditionTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicAuditionTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicAuditionTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicAuditionTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicAuditionTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicAuditionTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicAuditionTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicAuditionTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicAuditionTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicAuditionTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicAuditionTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicAuditionTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicAuditionTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-
-/*****************************************************************************
- * IDirectMusicAuditionTrackStream implementation structure
- */
-struct IDirectMusicAuditionTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicAuditionTrack* pParentTrack;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicAuditionTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicAuditionTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicAuditionTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicAuditionTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicAuditionTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicAuditionTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicAuditionTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicAuditionTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicAuditionTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicAuditionTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicAuditionTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicAuditionTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicChordTrack implementation structure
*/
-struct IDirectMusicChordTrack
-{
+struct IDirectMusicChordTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicChordTrack fields */
- IDirectMusicChordTrackStream* pStream;
- DWORD dwHeader;
- /* FIXME: scheme with HeapReAlloc doesn't work so.. */
-/*
- * DMUS_CHORD_KEY* pChordKeys;
- * MUSIC_TIME* pChordKeysTime;
- */
- DMUS_CHORD_KEY pChordKeys[255];
- MUSIC_TIME pChordKeysTime[255];
- DWORD dwChordKeys;
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicChordTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicChordTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicChordTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicChordTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicChordTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicChordTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicChordTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicChordTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicChordTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicChordTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicChordTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicChordTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicChordTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicChordTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicChordTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicChordTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicChordTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicChordTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-
-/*****************************************************************************
- * IDirectMusicChordTrackStream implementation structure
- */
-struct IDirectMusicChordTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicChordTrack* pParentTrack;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicChordTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicChordTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicChordTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicChordTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicChordTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicChordTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicChordTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicChordTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicChordTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicChordTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicChordTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicChordTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicChordTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicChordTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicChordTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicChordTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+typedef struct _DMUS_PRIVATE_COMMAND {
+ struct list entry; /* for listing elements */
+ DMUS_IO_COMMAND pCommand;
+ IDirectMusicCollection* ppReferenceCollection;
+} DMUS_PRIVATE_COMMAND, *LPDMUS_PRIVATE_COMMAND;
/*****************************************************************************
* IDirectMusicCommandTrack implementation structure
*/
-struct IDirectMusicCommandTrack
-{
+struct IDirectMusicCommandTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicCommandTrack fields */
- IDirectMusicCommandTrackStream* pStream;
+ LPDMUS_OBJECTDESC pDesc;
/* track data */
- DMUS_IO_COMMAND* pCommands;
- DWORD dwCommands; /* nr. of DMUS_IO_COMMAND structures in pCommands */
+ struct list Commands;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicCommandTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicCommandTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicCommandTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicCommandTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicCommandTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicCommandTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicCommandTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicCommandTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicCommandTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicCommandTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicCommandTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicCommandTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicCommandTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicCommandTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicCommandTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicCommandTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicCommandTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicCommandTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-
-/*****************************************************************************
- * IDirectMusicCommandTrackStream implementation structure
- */
-struct IDirectMusicCommandTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicCommandTrack* pParentTrack;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicCommandTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicCommandTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicCommandTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicCommandTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicCommandTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicCommandTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicCommandTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicCommandTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicCommandTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicCommandTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicCommandTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicCommandTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicMelodyFormulationTrack implementation structure
*/
-struct IDirectMusicMelodyFormulationTrack
-{
+struct IDirectMusicMelodyFormulationTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicMelodyFormulationTrack fields */
- IDirectMusicMelodyFormulationTrackStream* pStream;
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicMelodyFormulationTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicMelodyFormulationTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-
-/*****************************************************************************
- * IDirectMusicMelodyFormulationTrackStream implementation structure
- */
-struct IDirectMusicMelodyFormulationTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicMelodyFormulationTrack* pParentTrack;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicMelodyFormulationTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicMelodyFormulationTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicMelodyFormulationTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicMelodyFormulationTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicMelodyFormulationTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicMelodyFormulationTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicMelodyFormulationTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicMotifTrack implementation structure
*/
-struct IDirectMusicMotifTrack
-{
+struct IDirectMusicMotifTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicMotifTrack fields */
- IDirectMusicMotifTrackStream* pStream;
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicMotifTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicMotifTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicMotifTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicMotifTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicMotifTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicMotifTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicMotifTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicMotifTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicMotifTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicMotifTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicMotifTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicMotifTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicMotifTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicMotifTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicMotifTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicMotifTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicMotifTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicMotifTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-
-/*****************************************************************************
- * IDirectMusicMotifTrackStream implementation structure
- */
-struct IDirectMusicMotifTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicMotifTrack* pParentTrack;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicMotifTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicMotifTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicMotifTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicMotifTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicMotifTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicMotifTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicMotifTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicMotifTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicMotifTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicMotifTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicMotifTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicMotifTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicMotifTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicMuteTrack implementation structure
*/
-struct IDirectMusicMuteTrack
-{
+struct IDirectMusicMuteTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicMuteTrack fields */
- IDirectMusicMuteTrackStream* pStream;
- DMUS_IO_MUTE* pMutes;
- DWORD dwMutes; /* nr. of DMUS_IO_MUTE structures in pMutes */
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicMuteTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicMuteTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicMuteTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicMuteTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicMuteTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicMuteTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicMuteTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicMuteTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicMuteTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicMuteTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicMuteTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicMuteTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicMuteTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicMuteTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicMuteTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicMuteTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicMuteTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicMuteTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-
-/*****************************************************************************
- * IDirectMusicMuteTrackStream implementation structure
- */
-struct IDirectMusicMuteTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
-
- /* IPersistStreamImpl fields */
- IDirectMusicMuteTrack* pParentTrack;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicMuteTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicMuteTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicMuteTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicMuteTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicMuteTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicMuteTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicMuteTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicMuteTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicMuteTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicMuteTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicMuteTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicMuteTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicMuteTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
/*****************************************************************************
* IDirectMusicStyleTrack implementation structure
*/
-struct IDirectMusicStyleTrack
-{
+struct IDirectMusicStyleTrack {
/* IUnknown fields */
- ICOM_VFIELD(IDirectMusicTrack8);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicTrack8) *TrackVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
/* IDirectMusicStyleTrack fields */
- IDirectMusicStyleTrackStream* pStream;
- /* FIXME: implement it with HeapReAlloc */
- DWORD pStampTimes[255]; /* stamp times for styles */
- IDirectMusicStyle8Impl* ppStyles[255];
- DWORD dwStyles; /* nr. of IDirectMusicStyle8Impl* and DWORD */
+ LPDMUS_OBJECTDESC pDesc;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicStyleTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicStyleTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
-extern ULONG WINAPI IDirectMusicStyleTrack_Release (LPDIRECTMUSICTRACK8 iface);
-/* IDirectMusicTrack: */
-extern HRESULT WINAPI IDirectMusicStyleTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
-extern HRESULT WINAPI IDirectMusicStyleTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicStyleTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
-extern HRESULT WINAPI IDirectMusicStyleTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicStyleTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
-extern HRESULT WINAPI IDirectMusicStyleTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
-extern HRESULT WINAPI IDirectMusicStyleTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
-extern HRESULT WINAPI IDirectMusicStyleTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicStyleTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
-extern HRESULT WINAPI IDirectMusicStyleTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
-/* IDirectMusicTrack8: */
-extern HRESULT WINAPI IDirectMusicStyleTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
-extern HRESULT WINAPI IDirectMusicStyleTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicStyleTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
-extern HRESULT WINAPI IDirectMusicStyleTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
-extern HRESULT WINAPI IDirectMusicStyleTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicStyleTrack_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicStyleTrack_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicTrack(8): */
+extern HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+/* IPersistStream: */
+extern HRESULT WINAPI IDirectMusicStyleTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicStyleTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicStyleTrack_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicStyleTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+
/*****************************************************************************
- * IDirectMusicStyleTrackStream implementation structure
+ * Misc.
*/
-struct IDirectMusicStyleTrackStream
-{
- /* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
- DWORD ref;
+/* for simpler reading */
+typedef struct _DMUS_PRIVATE_CHUNK {
+ FOURCC fccID; /* FOURCC ID of the chunk */
+ DWORD dwSize; /* size of the chunk */
+} DMUS_PRIVATE_CHUNK, *LPDMUS_PRIVATE_CHUNK;
- /* IPersistStreamImpl fields */
- IDirectMusicStyleTrack* pParentTrack;
-};
+/* check whether the given DWORD is even (return 0) or odd (return 1) */
+static inline int even_or_odd (DWORD number) {
+ return (number & 0x1); /* basically, check if bit 0 is set ;) */
+}
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicStyleTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicStyleTrackStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicStyleTrackStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicStyleTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
-/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicStyleTrackStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicStyleTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicStyleTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicStyleTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
-
-static inline const char *debugstr_fourcc( DWORD fourcc )
-{
+/* FOURCC to string conversion for debug messages */
+static inline const char *debugstr_fourcc (DWORD fourcc) {
if (!fourcc) return "'null'";
- return wine_dbg_sprintf( "\'%c%c%c%c\'",
- (char)(fourcc), (char)(fourcc >> 8),
- (char)(fourcc >> 16), (char)(fourcc >> 24) );
+ return wine_dbg_sprintf ("\'%c%c%c%c\'",
+ (char)(fourcc), (char)(fourcc >> 8),
+ (char)(fourcc >> 16), (char)(fourcc >> 24));
+}
+
+/* DMUS_VERSION struct to string conversion for debug messages */
+static inline const char *debugstr_dmversion (LPDMUS_VERSION version) {
+ if (!version) return "'null'";
+ return wine_dbg_sprintf ("\'%i,%i,%i,%i\'",
+ (int)((version->dwVersionMS && 0xFFFF0000) >> 8), (int)(version->dwVersionMS && 0x0000FFFF),
+ (int)((version->dwVersionLS && 0xFFFF0000) >> 8), (int)(version->dwVersionLS && 0x0000FFFF));
+}
+
+/* used for initialising structs (primarily for DMUS_OBJECTDESC) */
+#define DM_STRUCT_INIT(x) \
+ do { \
+ memset((x), 0, sizeof(*(x))); \
+ (x)->dwSize = sizeof(*x); \
+ } while (0)
+
+
+/* used for generic dumping (copied from ddraw) */
+typedef struct {
+ DWORD val;
+ const char* name;
+} flag_info;
+
+#define FE(x) { x, #x }
+#define DMUSIC_dump_flags(flags,names,num_names) DMUSIC_dump_flags_(flags, names, num_names, 1)
+
+/* generic dump function */
+static inline void DMUSIC_dump_flags_ (DWORD flags, const flag_info* names, size_t num_names, int newline) {
+ unsigned int i;
+
+ for (i=0; i < num_names; i++) {
+ if ((flags & names[i].val) || /* standard flag value */
+ ((!flags) && (!names[i].val))) /* zero value only */
+ DPRINTF("%s ", names[i].name);
+ }
+
+ if (newline) DPRINTF("\n");
+}
+
+static inline void DMUSIC_dump_DMUS_OBJ_FLAGS (DWORD flagmask) {
+ static const flag_info flags[] = {
+ FE(DMUS_OBJ_OBJECT),
+ FE(DMUS_OBJ_CLASS),
+ FE(DMUS_OBJ_NAME),
+ FE(DMUS_OBJ_CATEGORY),
+ FE(DMUS_OBJ_FILENAME),
+ FE(DMUS_OBJ_FULLPATH),
+ FE(DMUS_OBJ_URL),
+ FE(DMUS_OBJ_VERSION),
+ FE(DMUS_OBJ_DATE),
+ FE(DMUS_OBJ_LOADED),
+ FE(DMUS_OBJ_MEMORY),
+ FE(DMUS_OBJ_STREAM)
+ };
+ DMUSIC_dump_flags(flagmask, flags, sizeof(flags)/sizeof(flags[0]));
+}
+
+static inline void DMUSIC_dump_DMUS_OBJECTDESC (LPDMUS_OBJECTDESC pDesc) {
+ if (pDesc) {
+ DPRINTF("DMUS_OBJECTDESC (%p)\n", pDesc);
+ DPRINTF(" - dwSize = %ld\n", pDesc->dwSize);
+ DPRINTF(" - dwValidData = ");
+ DMUSIC_dump_DMUS_OBJ_FLAGS (pDesc->dwValidData);
+ if (pDesc->dwValidData & DMUS_OBJ_CLASS) DPRINTF(" - guidClass = %s\n", debugstr_guid(&pDesc->guidClass));
+ if (pDesc->dwValidData & DMUS_OBJ_OBJECT) DPRINTF(" - guidObject = %s\n", debugstr_guid(&pDesc->guidObject));
+ if (pDesc->dwValidData & DMUS_OBJ_DATE) DPRINTF(" - ftDate = FIXME\n");
+ if (pDesc->dwValidData & DMUS_OBJ_VERSION) DPRINTF(" - vVersion = %s\n", debugstr_dmversion(&pDesc->vVersion));
+ if (pDesc->dwValidData & DMUS_OBJ_NAME) DPRINTF(" - wszName = %s\n", debugstr_w(pDesc->wszName));
+ if (pDesc->dwValidData & DMUS_OBJ_CATEGORY) DPRINTF(" - wszCategory = %s\n", debugstr_w(pDesc->wszCategory));
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME) DPRINTF(" - wszFileName = %s\n", debugstr_w(pDesc->wszFileName));
+ if (pDesc->dwValidData & DMUS_OBJ_MEMORY) DPRINTF(" - llMemLength = %lli\n - pbMemData = %p\n", pDesc->llMemLength, pDesc->pbMemData);
+ if (pDesc->dwValidData & DMUS_OBJ_STREAM) DPRINTF(" - pStream = %p\n", pDesc->pStream);
+ } else {
+ DPRINTF("(NULL)\n");
+ }
}
#endif /* __WINE_DMSTYLE_PRIVATE_H */
diff --git a/dlls/dmstyle/melodyformulationtrack.c b/dlls/dmstyle/melodyformulationtrack.c
deleted file mode 100644
index 8326cea..0000000
--- a/dlls/dmstyle/melodyformulationtrack.c
+++ /dev/null
@@ -1,345 +0,0 @@
-/* IDirectMusicMelodyFormulationTrack Implementation
- *
- * Copyright (C) 2003 Rok Mandeljc
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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 Library General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
-#include "dmstyle_private.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(dmstyle);
-WINE_DECLARE_DEBUG_CHANNEL(dmfile);
-
-/*****************************************************************************
- * IDirectMusicMelodyFormulationTrack implementation
- */
-/* IDirectMusicMelodyFormulationTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicMelodyFormulationTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrack,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicMelodyFormulationTrack_AddRef(iface);
- *ppobj = This;
- return S_OK;
- } else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicMelodyFormulationTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicMelodyFormulationTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrack,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicMelodyFormulationTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrack,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicMelodyFormulationTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicMelodyFormulationTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrack,iface);
-
- FIXME("(%p, %p): stub\n", This, pSegment);
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicMelodyFormulationTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrack,iface);
-
- FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicMelodyFormulationTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrack,iface);
-
- FIXME("(%p, %p): stub\n", This, pStateData);
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicMelodyFormulationTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrack,iface);
-
- FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicMelodyFormulationTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrack,iface);
-
- FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicMelodyFormulationTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrack,iface);
-
- FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicMelodyFormulationTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrack,iface);
-
- TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
- if (IsEqualGUID (rguidType, &GUID_BandParam)
- || IsEqualGUID (rguidType, &GUID_Clear_All_MelodyFragments)
- || IsEqualGUID (rguidType, &GUID_MelodyFragment)) {
- TRACE("param supported\n");
- return S_OK;
- }
-
- TRACE("param unsupported\n");
- return DMUS_E_TYPE_UNSUPPORTED;
-}
-
-HRESULT WINAPI IDirectMusicMelodyFormulationTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrack,iface);
-
- FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicMelodyFormulationTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrack,iface);
-
- FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicMelodyFormulationTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrack,iface);
-
- FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
- return S_OK;
-}
-
-/* IDirectMusicMelodyFormulationTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicMelodyFormulationTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrack,iface);
-
- FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicMelodyFormulationTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrack,iface);
-
- FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicMelodyFormulationTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrack,iface);
-
- FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicMelodyFormulationTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrack,iface);
-
- FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicMelodyFormulationTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrack,iface);
-
- FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
- return S_OK;
-}
-
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicMelodyFormulationTrack_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicMelodyFormulationTrack_QueryInterface,
- IDirectMusicMelodyFormulationTrack_AddRef,
- IDirectMusicMelodyFormulationTrack_Release,
- IDirectMusicMelodyFormulationTrack_Init,
- IDirectMusicMelodyFormulationTrack_InitPlay,
- IDirectMusicMelodyFormulationTrack_EndPlay,
- IDirectMusicMelodyFormulationTrack_Play,
- IDirectMusicMelodyFormulationTrack_GetParam,
- IDirectMusicMelodyFormulationTrack_SetParam,
- IDirectMusicMelodyFormulationTrack_IsParamSupported,
- IDirectMusicMelodyFormulationTrack_AddNotificationType,
- IDirectMusicMelodyFormulationTrack_RemoveNotificationType,
- IDirectMusicMelodyFormulationTrack_Clone,
- IDirectMusicMelodyFormulationTrack_PlayEx,
- IDirectMusicMelodyFormulationTrack_GetParamEx,
- IDirectMusicMelodyFormulationTrack_SetParamEx,
- IDirectMusicMelodyFormulationTrack_Compose,
- IDirectMusicMelodyFormulationTrack_Join
-};
-
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicMelodyFormulationTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicMelodyFormulationTrack* track;
-
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicMelodyFormulationTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicMelodyFormulationTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicMelodyFormulationTrackStream));
- track->pStream->lpVtbl = &DirectMusicMelodyFormulationTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
- }
-
- WARN("No interface found\n");
- return E_NOINTERFACE;
-}
-
-
-/*****************************************************************************
- * IDirectMusicMelodyFormulationTrackStream implementation
- */
-/* IDirectMusicMelodyFormulationTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicMelodyFormulationTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrackStream,iface);
-
- if (IsEqualIID(riid, &IID_IUnknown)
- || IsEqualIID(riid, &IID_IPersistStream)) {
- IDirectMusicMelodyFormulationTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicMelodyFormulationTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicMelodyFormulationTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicMelodyFormulationTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicMelodyFormulationTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicMelodyFormulationTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- return E_NOTIMPL;
-}
-
-/* IDirectMusicMelodyFormulationTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicMelodyFormulationTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicMelodyFormulationTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
- FIXME(": Loading not implemented yet\n");
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicMelodyFormulationTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicMelodyFormulationTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
- return E_NOTIMPL;
-}
-
-ICOM_VTABLE(IPersistStream) DirectMusicMelodyFormulationTrackStream_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicMelodyFormulationTrackStream_QueryInterface,
- IDirectMusicMelodyFormulationTrackStream_AddRef,
- IDirectMusicMelodyFormulationTrackStream_Release,
- IDirectMusicMelodyFormulationTrackStream_GetClassID,
- IDirectMusicMelodyFormulationTrackStream_IsDirty,
- IDirectMusicMelodyFormulationTrackStream_Load,
- IDirectMusicMelodyFormulationTrackStream_Save,
- IDirectMusicMelodyFormulationTrackStream_GetSizeMax
-};
diff --git a/dlls/dmstyle/motiftrack.c b/dlls/dmstyle/motiftrack.c
index e87522a..058c25e 100644
--- a/dlls/dmstyle/motiftrack.c
+++ b/dlls/dmstyle/motiftrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicMotifTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmstyle_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmstyle);
@@ -34,36 +26,36 @@
* IDirectMusicMotifTrack implementation
*/
/* IDirectMusicMotifTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicMotifTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicMotifTrack,iface);
+HRESULT WINAPI IDirectMusicMotifTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicMotifTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicMotifTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicMotifTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicMotifTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicMotifTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
-
+
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicMotifTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicMotifTrack,iface);
+ULONG WINAPI IDirectMusicMotifTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicMotifTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicMotifTrack,iface);
+ULONG WINAPI IDirectMusicMotifTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -72,64 +64,71 @@
return ref;
}
-/* IDirectMusicMotifTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicMotifTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicMotifTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicMotifTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicMotifTrack_IUnknown_QueryInterface,
+ IDirectMusicMotifTrack_IUnknown_AddRef,
+ IDirectMusicMotifTrack_IUnknown_Release
+};
+/* IDirectMusicMotifTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface);
+ return IDirectMusicMotifTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface);
+ return IDirectMusicMotifTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface);
+ return IDirectMusicMotifTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
+{
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMotifTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
+HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
{
- ICOM_THIS(IDirectMusicMotifTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMotifTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
+HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
{
- ICOM_THIS(IDirectMusicMotifTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMotifTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
{
- ICOM_THIS(IDirectMusicMotifTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMotifTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicMotifTrack,iface);
-
+HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMotifTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicMotifTrack,iface);
-
+HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMotifTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicMotifTrack,iface);
+HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
if (IsEqualGUID (rguidType, &GUID_DisableTimeSig)
@@ -138,209 +137,147 @@
|| IsEqualGUID (rguidType, &GUID_Valid_Start_Time)) {
TRACE("param supported\n");
return S_OK;
- }
-
+ }
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicMotifTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicMotifTrack,iface);
-
+HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMotifTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicMotifTrack,iface);
-
+HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMotifTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicMotifTrack,iface);
-
+HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicMotifTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicMotifTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicMotifTrack,iface);
-
+HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMotifTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicMotifTrack,iface);
-
+HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMotifTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicMotifTrack,iface);
-
+HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMotifTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicMotifTrack,iface);
-
+HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMotifTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicMotifTrack,iface);
-
+HRESULT WINAPI IDirectMusicMotifTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicMotifTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicMotifTrack_Track_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicMotifTrack_QueryInterface,
- IDirectMusicMotifTrack_AddRef,
- IDirectMusicMotifTrack_Release,
- IDirectMusicMotifTrack_Init,
- IDirectMusicMotifTrack_InitPlay,
- IDirectMusicMotifTrack_EndPlay,
- IDirectMusicMotifTrack_Play,
- IDirectMusicMotifTrack_GetParam,
- IDirectMusicMotifTrack_SetParam,
- IDirectMusicMotifTrack_IsParamSupported,
- IDirectMusicMotifTrack_AddNotificationType,
- IDirectMusicMotifTrack_RemoveNotificationType,
- IDirectMusicMotifTrack_Clone,
- IDirectMusicMotifTrack_PlayEx,
- IDirectMusicMotifTrack_GetParamEx,
- IDirectMusicMotifTrack_SetParamEx,
- IDirectMusicMotifTrack_Compose,
- IDirectMusicMotifTrack_Join
+ IDirectMusicMotifTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicMotifTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicMotifTrack_IDirectMusicTrack_Release,
+ IDirectMusicMotifTrack_IDirectMusicTrack_Init,
+ IDirectMusicMotifTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicMotifTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicMotifTrack_IDirectMusicTrack_Play,
+ IDirectMusicMotifTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicMotifTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicMotifTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicMotifTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicMotifTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicMotifTrack_IDirectMusicTrack_Clone,
+ IDirectMusicMotifTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicMotifTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicMotifTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicMotifTrack_IDirectMusicTrack_Compose,
+ IDirectMusicMotifTrack_IDirectMusicTrack_Join
};
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicMotifTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicMotifTrack* track;
-
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicMotifTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicMotifTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicMotifTrackStream));
- track->pStream->lpVtbl = &DirectMusicMotifTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
- }
-
- WARN("No interface found\n");
- return E_NOINTERFACE;
+/* IDirectMusicMotifTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicMotifTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, PersistStreamVtbl, iface);
+ return IDirectMusicMotifTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
}
-
-/*****************************************************************************
- * IDirectMusicMotifTrackStream implementation
- */
-/* IDirectMusicMotifTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicMotifTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicMotifTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicMotifTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
+ULONG WINAPI IDirectMusicMotifTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, PersistStreamVtbl, iface);
+ return IDirectMusicMotifTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicMotifTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicMotifTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
+ULONG WINAPI IDirectMusicMotifTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicMotifTrack, PersistStreamVtbl, iface);
+ return IDirectMusicMotifTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
}
-ULONG WINAPI IDirectMusicMotifTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicMotifTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicMotifTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicMotifTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
+HRESULT WINAPI IDirectMusicMotifTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
return E_NOTIMPL;
}
-/* IDirectMusicMotifTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicMotifTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
+HRESULT WINAPI IDirectMusicMotifTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicMotifTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
+HRESULT WINAPI IDirectMusicMotifTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
FIXME(": Loading not implemented yet\n");
return S_OK;
}
-HRESULT WINAPI IDirectMusicMotifTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
+HRESULT WINAPI IDirectMusicMotifTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
return E_NOTIMPL;
}
-HRESULT WINAPI IDirectMusicMotifTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
+HRESULT WINAPI IDirectMusicMotifTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
return E_NOTIMPL;
}
-ICOM_VTABLE(IPersistStream) DirectMusicMotifTrackStream_Vtbl =
-{
+ICOM_VTABLE(IPersistStream) DirectMusicMotifTrack_PersistStream_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicMotifTrackStream_QueryInterface,
- IDirectMusicMotifTrackStream_AddRef,
- IDirectMusicMotifTrackStream_Release,
- IDirectMusicMotifTrackStream_GetClassID,
- IDirectMusicMotifTrackStream_IsDirty,
- IDirectMusicMotifTrackStream_Load,
- IDirectMusicMotifTrackStream_Save,
- IDirectMusicMotifTrackStream_GetSizeMax
+ IDirectMusicMotifTrack_IPersistStream_QueryInterface,
+ IDirectMusicMotifTrack_IPersistStream_AddRef,
+ IDirectMusicMotifTrack_IPersistStream_Release,
+ IDirectMusicMotifTrack_IPersistStream_GetClassID,
+ IDirectMusicMotifTrack_IPersistStream_IsDirty,
+ IDirectMusicMotifTrack_IPersistStream_Load,
+ IDirectMusicMotifTrack_IPersistStream_Save,
+ IDirectMusicMotifTrack_IPersistStream_GetSizeMax
};
+
+/* for ClassFactory */
+HRESULT WINAPI DMUSIC_CreateDirectMusicMotifTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicMotifTrack* track;
+
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicMotifTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ track->UnknownVtbl = &DirectMusicMotifTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicMotifTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicMotifTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicMotifTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicMotifTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
+}
diff --git a/dlls/dmstyle/mutetrack.c b/dlls/dmstyle/mutetrack.c
index c580fe0..c262285 100644
--- a/dlls/dmstyle/mutetrack.c
+++ b/dlls/dmstyle/mutetrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicMuteTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmstyle_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmstyle);
@@ -34,36 +26,36 @@
* IDirectMusicMuteTrack implementation
*/
/* IDirectMusicMuteTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicMuteTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicMuteTrack,iface);
+HRESULT WINAPI IDirectMusicMuteTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicMuteTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicMuteTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicMuteTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicMuteTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicMuteTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
-
+
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicMuteTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicMuteTrack,iface);
+ULONG WINAPI IDirectMusicMuteTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicMuteTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicMuteTrack,iface);
+ULONG WINAPI IDirectMusicMuteTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -72,315 +64,217 @@
return ref;
}
-/* IDirectMusicMuteTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicMuteTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicMuteTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicMuteTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicMuteTrack_IUnknown_QueryInterface,
+ IDirectMusicMuteTrack_IUnknown_AddRef,
+ IDirectMusicMuteTrack_IUnknown_Release
+};
+/* IDirectMusicMuteTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface);
+ return IDirectMusicMuteTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface);
+ return IDirectMusicMuteTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface);
+ return IDirectMusicMuteTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
+{
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMuteTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
+HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
{
- ICOM_THIS(IDirectMusicMuteTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMuteTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
+HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
{
- ICOM_THIS(IDirectMusicMuteTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMuteTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
{
- ICOM_THIS(IDirectMusicMuteTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMuteTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicMuteTrack,iface);
-
+HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMuteTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicMuteTrack,iface);
-
+HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMuteTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicMuteTrack,iface);
+HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
if (IsEqualGUID (rguidType, &GUID_MuteParam)) {
TRACE("param supported\n");
return S_OK;
- }
-
+ }
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicMuteTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicMuteTrack,iface);
-
+HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMuteTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicMuteTrack,iface);
-
+HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMuteTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicMuteTrack,iface);
-
+HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicMuteTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicMuteTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicMuteTrack,iface);
-
+HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMuteTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicMuteTrack,iface);
-
+HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMuteTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicMuteTrack,iface);
-
+HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMuteTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicMuteTrack,iface);
-
+HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicMuteTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicMuteTrack,iface);
-
+HRESULT WINAPI IDirectMusicMuteTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicMuteTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicMuteTrack_Track_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicMuteTrack_QueryInterface,
- IDirectMusicMuteTrack_AddRef,
- IDirectMusicMuteTrack_Release,
- IDirectMusicMuteTrack_Init,
- IDirectMusicMuteTrack_InitPlay,
- IDirectMusicMuteTrack_EndPlay,
- IDirectMusicMuteTrack_Play,
- IDirectMusicMuteTrack_GetParam,
- IDirectMusicMuteTrack_SetParam,
- IDirectMusicMuteTrack_IsParamSupported,
- IDirectMusicMuteTrack_AddNotificationType,
- IDirectMusicMuteTrack_RemoveNotificationType,
- IDirectMusicMuteTrack_Clone,
- IDirectMusicMuteTrack_PlayEx,
- IDirectMusicMuteTrack_GetParamEx,
- IDirectMusicMuteTrack_SetParamEx,
- IDirectMusicMuteTrack_Compose,
- IDirectMusicMuteTrack_Join
+ IDirectMusicMuteTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicMuteTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicMuteTrack_IDirectMusicTrack_Release,
+ IDirectMusicMuteTrack_IDirectMusicTrack_Init,
+ IDirectMusicMuteTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicMuteTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicMuteTrack_IDirectMusicTrack_Play,
+ IDirectMusicMuteTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicMuteTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicMuteTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicMuteTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicMuteTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicMuteTrack_IDirectMusicTrack_Clone,
+ IDirectMusicMuteTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicMuteTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicMuteTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicMuteTrack_IDirectMusicTrack_Compose,
+ IDirectMusicMuteTrack_IDirectMusicTrack_Join
+};
+
+/* IDirectMusicMuteTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicMuteTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, PersistStreamVtbl, iface);
+ return IDirectMusicMuteTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicMuteTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, PersistStreamVtbl, iface);
+ return IDirectMusicMuteTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicMuteTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicMuteTrack, PersistStreamVtbl, iface);
+ return IDirectMusicMuteTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicMuteTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicMuteTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicMuteTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
+ FIXME(": Loading not implemented yet\n");
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicMuteTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicMuteTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
+ return E_NOTIMPL;
+}
+
+ICOM_VTABLE(IPersistStream) DirectMusicMuteTrack_PersistStream_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicMuteTrack_IPersistStream_QueryInterface,
+ IDirectMusicMuteTrack_IPersistStream_AddRef,
+ IDirectMusicMuteTrack_IPersistStream_Release,
+ IDirectMusicMuteTrack_IPersistStream_GetClassID,
+ IDirectMusicMuteTrack_IPersistStream_IsDirty,
+ IDirectMusicMuteTrack_IPersistStream_Load,
+ IDirectMusicMuteTrack_IPersistStream_Save,
+ IDirectMusicMuteTrack_IPersistStream_GetSizeMax
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicMuteTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
+HRESULT WINAPI DMUSIC_CreateDirectMusicMuteTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
IDirectMusicMuteTrack* track;
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicMuteTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicMuteTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicMuteTrackStream));
- track->pStream->lpVtbl = &DirectMusicMuteTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicMuteTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
}
- WARN("No interface found\n");
+ track->UnknownVtbl = &DirectMusicMuteTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicMuteTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicMuteTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicMuteTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
- return E_NOINTERFACE;
+ return IDirectMusicMuteTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
}
-
-
-/*****************************************************************************
- * IDirectMusicMuteTrackStream implementation
- */
-/* IDirectMusicMuteTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicMuteTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicMuteTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicMuteTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicMuteTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicMuteTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicMuteTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicMuteTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicMuteTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicMuteTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- return E_NOTIMPL;
-}
-
-/* IDirectMusicMuteTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicMuteTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicMuteTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
- ICOM_THIS(IDirectMusicMuteTrackStream,iface);
- FOURCC chunkID;
- DWORD chunkSize, dwSizeOfStruct;
- LARGE_INTEGER liMove; /* used when skipping chunks */
- IDirectMusicMuteTrack* pTrack = This->pParentTrack; /* that's where we load data to */
-
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(DWORD), NULL);
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
- case DMUS_FOURCC_MUTE_CHUNK: {
- TRACE_(dmfile)(": mute track chunk\n");
- IStream_Read (pStm, &dwSizeOfStruct, sizeof(DWORD), NULL);
- if (dwSizeOfStruct != sizeof(DMUS_IO_MUTE)) {
- TRACE_(dmfile)(": declared size of struct (=%ld) != actual size (=%i); loading failed\n", dwSizeOfStruct, sizeof(DMUS_IO_MUTE));
- liMove.QuadPart = chunkSize - sizeof(DWORD);
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
- return E_FAIL;
- }
- chunkSize -= sizeof(DWORD); /* now chunk size is one DWORD shorter */
- pTrack->pMutes = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, chunkSize);
- IStream_Read (pStm, pTrack->pMutes, chunkSize, NULL);
- pTrack->dwMutes = chunkSize/dwSizeOfStruct;
- /* in the end, let's see what we got */
- TRACE_(dmfile)(": reading finished\n");
- if (TRACE_ON(dmfile)) {
- int i;
- TRACE_(dmfile)(": (READ): number of mutes in track = %ld\n", pTrack->dwMutes);
- for (i = 0; i < pTrack->dwMutes; i++) {
- TRACE_(dmfile)(": (READ): mute[%i]: mtTime = %li; dwPChannel = %ld; dwPChannelMap = %ld\n", \
- i, pTrack->pMutes[i].mtTime, pTrack->pMutes[i].dwPChannel, pTrack->pMutes[i].dwPChannelMap);
- }
- }
- }
- TRACE_(dmfile)(": reading finished\n");
- break;
- default: {
- TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
- return E_FAIL;
- }
- }
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicMuteTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicMuteTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
- return E_NOTIMPL;
-}
-
-ICOM_VTABLE(IPersistStream) DirectMusicMuteTrackStream_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicMuteTrackStream_QueryInterface,
- IDirectMusicMuteTrackStream_AddRef,
- IDirectMusicMuteTrackStream_Release,
- IDirectMusicMuteTrackStream_GetClassID,
- IDirectMusicMuteTrackStream_IsDirty,
- IDirectMusicMuteTrackStream_Load,
- IDirectMusicMuteTrackStream_Save,
- IDirectMusicMuteTrackStream_GetSizeMax
-};
diff --git a/dlls/dmstyle/regsvr.c b/dlls/dmstyle/regsvr.c
index 1b98a7e..184fb64 100644
--- a/dlls/dmstyle/regsvr.c
+++ b/dlls/dmstyle/regsvr.c
@@ -18,21 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include <stdarg.h>
-#include <string.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winreg.h"
-#include "winerror.h"
-
-#include "dmusics.h"
-#include "dmusici.h"
-#include "dmplugin.h"
-
-#include "wine/debug.h"
+#include "dmstyle_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmstyle);
@@ -44,8 +30,7 @@
/***********************************************************************
* interface for self-registering
*/
-struct regsvr_interface
-{
+struct regsvr_interface {
IID const *iid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
IID const *base_iid; /* can be NULL to omit */
@@ -57,8 +42,7 @@
static HRESULT register_interfaces(struct regsvr_interface const *list);
static HRESULT unregister_interfaces(struct regsvr_interface const *list);
-struct regsvr_coclass
-{
+struct regsvr_coclass {
CLSID const *clsid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
LPCSTR ips; /* can be NULL to omit */
@@ -124,8 +108,7 @@
/***********************************************************************
* register_interfaces
*/
-static HRESULT register_interfaces(struct regsvr_interface const *list)
-{
+static HRESULT register_interfaces(struct regsvr_interface const *list) {
LONG res = ERROR_SUCCESS;
HKEY interface_key;
@@ -194,8 +177,7 @@
/***********************************************************************
* unregister_interfaces
*/
-static HRESULT unregister_interfaces(struct regsvr_interface const *list)
-{
+static HRESULT unregister_interfaces(struct regsvr_interface const *list) {
LONG res = ERROR_SUCCESS;
HKEY interface_key;
@@ -219,8 +201,7 @@
/***********************************************************************
* register_coclasses
*/
-static HRESULT register_coclasses(struct regsvr_coclass const *list)
-{
+static HRESULT register_coclasses(struct regsvr_coclass const *list) {
LONG res = ERROR_SUCCESS;
HKEY coclass_key;
@@ -301,8 +282,7 @@
/***********************************************************************
* unregister_coclasses
*/
-static HRESULT unregister_coclasses(struct regsvr_coclass const *list)
-{
+static HRESULT unregister_coclasses(struct regsvr_coclass const *list) {
LONG res = ERROR_SUCCESS;
HKEY coclass_key;
@@ -338,8 +318,7 @@
/***********************************************************************
* regsvr_key_guid
*/
-static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid)
-{
+static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid) {
WCHAR buf[39];
StringFromGUID2(guid, buf, 39);
@@ -352,8 +331,7 @@
static LONG register_key_defvalueW(
HKEY base,
WCHAR const *name,
- WCHAR const *value)
-{
+ WCHAR const *value) {
LONG res;
HKEY key;
@@ -372,8 +350,7 @@
static LONG register_key_defvalueA(
HKEY base,
WCHAR const *name,
- char const *value)
-{
+ char const *value) {
LONG res;
HKEY key;
@@ -394,8 +371,7 @@
char const *progid,
char const *curver_progid,
char const *name,
- char const *extra)
-{
+ char const *extra) {
LONG res;
HKEY progid_key;
@@ -439,8 +415,7 @@
/***********************************************************************
* recursive_delete_key
*/
-static LONG recursive_delete_key(HKEY key)
-{
+static LONG recursive_delete_key(HKEY key) {
LONG res;
WCHAR subkey_name[MAX_PATH];
DWORD cName;
@@ -471,8 +446,7 @@
/***********************************************************************
* recursive_delete_keyA
*/
-static LONG recursive_delete_keyA(HKEY base, char const *name)
-{
+static LONG recursive_delete_keyA(HKEY base, char const *name) {
LONG res;
HKEY key;
@@ -487,8 +461,7 @@
/***********************************************************************
* recursive_delete_keyW
*/
-static LONG recursive_delete_keyW(HKEY base, WCHAR const *name)
-{
+static LONG recursive_delete_keyW(HKEY base, WCHAR const *name) {
LONG res;
HKEY key;
@@ -568,14 +541,6 @@
"Microsoft.DirectMusicMuteTrack.1",
"Microsoft.DirectMusicMuteTrack"
},
- { &CLSID_DirectMusicMelodyFormulationTrack,
- "DirectMusicMelodyFormulationTrack",
- NULL,
- "dmstyle.dll",
- "Both",
- "Microsoft.DirectMusicMelodyFormulationTrack.1",
- "Microsoft.DirectMusicMelodyFormulationTrack"
- },
{ NULL } /* list terminator */
};
@@ -590,8 +555,7 @@
/***********************************************************************
* DllRegisterServer (DMSTYLE.3)
*/
-HRESULT WINAPI DMSTYLE_DllRegisterServer()
-{
+HRESULT WINAPI DMSTYLE_DllRegisterServer() {
HRESULT hr;
TRACE("\n");
@@ -605,8 +569,7 @@
/***********************************************************************
* DllUnregisterServer (DMSTYLE.4)
*/
-HRESULT WINAPI DMSTYLE_DllUnregisterServer()
-{
+HRESULT WINAPI DMSTYLE_DllUnregisterServer() {
HRESULT hr;
TRACE("\n");
diff --git a/dlls/dmstyle/style.c b/dlls/dmstyle/style.c
index 7b64912..575fe87 100644
--- a/dlls/dmstyle/style.c
+++ b/dlls/dmstyle/style.c
@@ -1,6 +1,6 @@
/* IDirectMusicStyle8 Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,45 +17,48 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmstyle_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmstyle);
+WINE_DECLARE_DEBUG_CHANNEL(dmfile);
-/* IDirectMusicStyle8 IUnknown part: */
-HRESULT WINAPI IDirectMusicStyle8Impl_QueryInterface (LPDIRECTMUSICSTYLE8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicStyle8Impl,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicStyle) ||
- IsEqualIID (riid, &IID_IDirectMusicStyle8)) {
- IDirectMusicStyle8Impl_AddRef(iface);
- *ppobj = This;
+/*****************************************************************************
+ * IDirectMusicStyleImpl implementation
+ */
+/* IDirectMusicStyleImpl IUnknown part: */
+HRESULT WINAPI IDirectMusicStyle8Impl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, UnknownVtbl, iface);
+
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPVOID)&This->UnknownVtbl;
+ IDirectMusicStyle8Impl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicStyle)) {
+ *ppobj = (LPVOID)&This->StyleVtbl;
+ IDirectMusicStyle8Impl_IDirectMusicStyle8_AddRef ((LPDIRECTMUSICSTYLE8)&This->StyleVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
+ *ppobj = (LPVOID)&This->ObjectVtbl;
+ IDirectMusicStyle8Impl_IDirectMusicObject_AddRef ((LPDIRECTMUSICOBJECT)&This->ObjectVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IPersistStream)) {
+ *ppobj = (LPVOID)&This->PersistStreamVtbl;
+ IDirectMusicStyle8Impl_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
-
+
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicStyle8Impl_AddRef (LPDIRECTMUSICSTYLE8 iface)
-{
- ICOM_THIS(IDirectMusicStyle8Impl,iface);
+ULONG WINAPI IDirectMusicStyle8Impl_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicStyle8Impl_Release (LPDIRECTMUSICSTYLE8 iface)
-{
- ICOM_THIS(IDirectMusicStyle8Impl,iface);
+ULONG WINAPI IDirectMusicStyle8Impl_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -64,350 +67,553 @@
return ref;
}
-/* IDirectMusicStyle8 IDirectMusicStyle part: */
-HRESULT WINAPI IDirectMusicStyle8Impl_GetBand (LPDIRECTMUSICSTYLE8 iface, WCHAR* pwszName, IDirectMusicBand** ppBand)
-{
- ICOM_THIS(IDirectMusicStyle8Impl,iface);
+ICOM_VTABLE(IUnknown) DirectMusicStyle8_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicStyle8Impl_IUnknown_QueryInterface,
+ IDirectMusicStyle8Impl_IUnknown_AddRef,
+ IDirectMusicStyle8Impl_IUnknown_Release
+};
+/* IDirectMusicStyle8Impl IDirectMusicStyle8 part: */
+HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_QueryInterface (LPDIRECTMUSICSTYLE8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, StyleVtbl, iface);
+ return IDirectMusicStyle8Impl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_AddRef (LPDIRECTMUSICSTYLE8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, StyleVtbl, iface);
+ return IDirectMusicStyle8Impl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_Release (LPDIRECTMUSICSTYLE8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, StyleVtbl, iface);
+ return IDirectMusicStyle8Impl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+/* IDirectMusicStyle8Impl IDirectMusicStyle(8) part: */
+HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_GetBand (LPDIRECTMUSICSTYLE8 iface, WCHAR* pwszName, IDirectMusicBand** ppBand) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, StyleVtbl, iface);
FIXME("(%p, %p, %p): stub\n", This, pwszName, ppBand);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyle8Impl_EnumBand (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, WCHAR* pwszName)
-{
- ICOM_THIS(IDirectMusicStyle8Impl,iface);
-
+HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_EnumBand (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, WCHAR* pwszName) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, StyleVtbl, iface);
FIXME("(%p, %ld, %p): stub\n", This, dwIndex, pwszName);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyle8Impl_GetDefaultBand (LPDIRECTMUSICSTYLE8 iface, IDirectMusicBand** ppBand)
-{
- ICOM_THIS(IDirectMusicStyle8Impl,iface);
-
+HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_GetDefaultBand (LPDIRECTMUSICSTYLE8 iface, IDirectMusicBand** ppBand) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, StyleVtbl, iface);
FIXME("(%p, %p): stub\n", This, ppBand);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyle8Impl_EnumMotif (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, WCHAR* pwszName)
-{
- ICOM_THIS(IDirectMusicStyle8Impl,iface);
-
+HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_EnumMotif (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, WCHAR* pwszName) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, StyleVtbl, iface);
FIXME("(%p, %ld, %p): stub\n", This, dwIndex, pwszName);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyle8Impl_GetMotif (LPDIRECTMUSICSTYLE8 iface, WCHAR* pwszName, IDirectMusicSegment** ppSegment)
-{
- ICOM_THIS(IDirectMusicStyle8Impl,iface);
-
+HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_GetMotif (LPDIRECTMUSICSTYLE8 iface, WCHAR* pwszName, IDirectMusicSegment** ppSegment) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, StyleVtbl, iface);
FIXME("(%p, %p, %p): stub\n", This, pwszName, ppSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyle8Impl_GetDefaultChordMap (LPDIRECTMUSICSTYLE8 iface, IDirectMusicChordMap** ppChordMap)
-{
- ICOM_THIS(IDirectMusicStyle8Impl,iface);
-
+HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_GetDefaultChordMap (LPDIRECTMUSICSTYLE8 iface, IDirectMusicChordMap** ppChordMap) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, StyleVtbl, iface);
FIXME("(%p, %p): stub\n", This, ppChordMap);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyle8Impl_EnumChordMap (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, WCHAR* pwszName)
-{
- ICOM_THIS(IDirectMusicStyle8Impl,iface);
-
+HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_EnumChordMap (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, WCHAR* pwszName) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, StyleVtbl, iface);
FIXME("(%p, %ld, %p): stub\n", This, dwIndex, pwszName);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyle8Impl_GetChordMap (LPDIRECTMUSICSTYLE8 iface, WCHAR* pwszName, IDirectMusicChordMap** ppChordMap)
-{
- ICOM_THIS(IDirectMusicStyle8Impl,iface);
-
+HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_GetChordMap (LPDIRECTMUSICSTYLE8 iface, WCHAR* pwszName, IDirectMusicChordMap** ppChordMap) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, StyleVtbl, iface);
FIXME("(%p, %p, %p): stub\n", This, pwszName, ppChordMap);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyle8Impl_GetTimeSignature (LPDIRECTMUSICSTYLE8 iface, DMUS_TIMESIGNATURE* pTimeSig)
-{
- ICOM_THIS(IDirectMusicStyle8Impl,iface);
-
+HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_GetTimeSignature (LPDIRECTMUSICSTYLE8 iface, DMUS_TIMESIGNATURE* pTimeSig) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, StyleVtbl, iface);
FIXME("(%p, %p): stub\n", This, pTimeSig);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyle8Impl_GetEmbellishmentLength (LPDIRECTMUSICSTYLE8 iface, DWORD dwType, DWORD dwLevel, DWORD* pdwMin, DWORD* pdwMax)
-{
- ICOM_THIS(IDirectMusicStyle8Impl,iface);
-
+HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_GetEmbellishmentLength (LPDIRECTMUSICSTYLE8 iface, DWORD dwType, DWORD dwLevel, DWORD* pdwMin, DWORD* pdwMax) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, StyleVtbl, iface);
FIXME("(%p, %ld, %ld, %p, %p): stub\n", This, dwType, dwLevel, pdwMin, pdwMax);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyle8Impl_GetTempo (LPDIRECTMUSICSTYLE8 iface, double* pTempo)
-{
- ICOM_THIS(IDirectMusicStyle8Impl,iface);
-
+HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_GetTempo (LPDIRECTMUSICSTYLE8 iface, double* pTempo) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, StyleVtbl, iface);
FIXME("(%p, %p): stub\n", This, pTempo);
-
return S_OK;
}
-/* IDirectMusicStyle8 IDirectMusicStyle8 part: */
-HRESULT WINAPI IDirectMusicStyle8ImplEnumPattern (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, DWORD dwPatternType, WCHAR* pwszName)
-{
- ICOM_THIS(IDirectMusicStyle8Impl,iface);
-
+HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicStyle8_EnumPattern (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, DWORD dwPatternType, WCHAR* pwszName) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, StyleVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, dwIndex, dwPatternType, pwszName);
+ return S_OK;
+}
+
+ICOM_VTABLE(IDirectMusicStyle8) DirectMusicStyle8_Style_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicStyle8Impl_IDirectMusicStyle8_QueryInterface,
+ IDirectMusicStyle8Impl_IDirectMusicStyle8_AddRef,
+ IDirectMusicStyle8Impl_IDirectMusicStyle8_Release,
+ IDirectMusicStyle8Impl_IDirectMusicStyle8_GetBand,
+ IDirectMusicStyle8Impl_IDirectMusicStyle8_EnumBand,
+ IDirectMusicStyle8Impl_IDirectMusicStyle8_GetDefaultBand,
+ IDirectMusicStyle8Impl_IDirectMusicStyle8_EnumMotif,
+ IDirectMusicStyle8Impl_IDirectMusicStyle8_GetMotif,
+ IDirectMusicStyle8Impl_IDirectMusicStyle8_GetDefaultChordMap,
+ IDirectMusicStyle8Impl_IDirectMusicStyle8_EnumChordMap,
+ IDirectMusicStyle8Impl_IDirectMusicStyle8_GetChordMap,
+ IDirectMusicStyle8Impl_IDirectMusicStyle8_GetTimeSignature,
+ IDirectMusicStyle8Impl_IDirectMusicStyle8_GetEmbellishmentLength,
+ IDirectMusicStyle8Impl_IDirectMusicStyle8_GetTempo,
+ IDirectMusicStyle8Impl_IDirectMusicStyle8_EnumPattern
+};
+
+/* IDirectMusicStyle8Impl IDirectMusicObject part: */
+HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, ObjectVtbl, iface);
+ return IDirectMusicStyle8Impl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicStyle8Impl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, ObjectVtbl, iface);
+ return IDirectMusicStyle8Impl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicStyle8Impl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, ObjectVtbl, iface);
+ return IDirectMusicStyle8Impl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, ObjectVtbl, iface);
+ TRACE("(%p, %p)\n", This, pDesc);
+ /* I think we shouldn't return pointer here since then values can be changed; it'd be a mess */
+ memcpy (pDesc, This->pDesc, This->pDesc->dwSize);
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, ObjectVtbl, iface);
+ TRACE("(%p, %p): setting descriptor:\n", This, pDesc);
+ if (TRACE_ON(dmstyle)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
+ }
+
+ /* According to MSDN, we should copy only given values, not whole struct */
+ if (pDesc->dwValidData & DMUS_OBJ_OBJECT)
+ memcpy (&This->pDesc->guidObject, &pDesc->guidObject, sizeof (pDesc->guidObject));
+ if (pDesc->dwValidData & DMUS_OBJ_CLASS)
+ memcpy (&This->pDesc->guidClass, &pDesc->guidClass, sizeof (pDesc->guidClass));
+ if (pDesc->dwValidData & DMUS_OBJ_NAME)
+ strncpyW (This->pDesc->wszName, pDesc->wszName, DMUS_MAX_NAME);
+ if (pDesc->dwValidData & DMUS_OBJ_CATEGORY)
+ strncpyW (This->pDesc->wszCategory, pDesc->wszCategory, DMUS_MAX_CATEGORY);
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME)
+ strncpyW (This->pDesc->wszFileName, pDesc->wszFileName, DMUS_MAX_FILENAME);
+ if (pDesc->dwValidData & DMUS_OBJ_VERSION)
+ memcpy (&This->pDesc->vVersion, &pDesc->vVersion, sizeof (pDesc->vVersion));
+ if (pDesc->dwValidData & DMUS_OBJ_DATE)
+ memcpy (&This->pDesc->ftDate, &pDesc->ftDate, sizeof (pDesc->ftDate));
+ if (pDesc->dwValidData & DMUS_OBJ_MEMORY) {
+ memcpy (&This->pDesc->llMemLength, &pDesc->llMemLength, sizeof (pDesc->llMemLength));
+ memcpy (This->pDesc->pbMemData, pDesc->pbMemData, sizeof (pDesc->pbMemData));
+ }
+ if (pDesc->dwValidData & DMUS_OBJ_STREAM) {
+ /* according to MSDN, we copy the stream */
+ IStream_Clone (pDesc->pStream, &This->pDesc->pStream);
+ }
+
+ /* add new flags */
+ This->pDesc->dwValidData |= pDesc->dwValidData;
return S_OK;
}
-ICOM_VTABLE(IDirectMusicStyle8) DirectMusicStyle8_Vtbl =
-{
+HRESULT WINAPI IDirectMusicStyle8Impl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, ObjectVtbl, iface);
+ DMUS_PRIVATE_CHUNK Chunk;
+ DWORD StreamSize, StreamCount, ListSize[1], ListCount[1];
+ LARGE_INTEGER liMove; /* used when skipping chunks */
+
+ TRACE("(%p, %p, %p)\n", This, pStream, pDesc);
+
+ /* FIXME: should this be determined from stream? */
+ pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&pDesc->guidClass, &CLSID_DirectMusicBand, sizeof(CLSID));
+
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_RIFF: {
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ StreamSize = Chunk.dwSize - sizeof(FOURCC);
+ StreamCount = 0;
+ if (Chunk.fccID == DMUS_FOURCC_BAND_FORM) {
+ TRACE_(dmfile)(": band form\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ StreamCount += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case DMUS_FOURCC_GUID_CHUNK: {
+ TRACE_(dmfile)(": GUID chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read (pStream, &pDesc->guidObject, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_VERSION_CHUNK: {
+ TRACE_(dmfile)(": version chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read (pStream, &pDesc->vVersion, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CATEGORY_CHUNK: {
+ TRACE_(dmfile)(": category chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_CATEGORY;
+ IStream_Read (pStream, pDesc->wszCategory, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[0] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[0] = 0;
+ switch (Chunk.fccID) {
+ /* evil M$ UNFO list, which can (!?) contain INFO elements */
+ case DMUS_FOURCC_UNFO_LIST: {
+ TRACE_(dmfile)(": UNFO list\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
+ (though strings seem to be valid unicode) */
+ case mmioFOURCC('I','N','A','M'):
+ case DMUS_FOURCC_UNAM_CHUNK: {
+ TRACE_(dmfile)(": name chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_NAME;
+ IStream_Read (pStream, pDesc->wszName, Chunk.dwSize, NULL);
+ break;
+ }
+ case mmioFOURCC('I','A','R','T'):
+ case DMUS_FOURCC_UART_CHUNK: {
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','O','P'):
+ case DMUS_FOURCC_UCOP_CHUNK: {
+ TRACE_(dmfile)(": copyright chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','S','B','J'):
+ case DMUS_FOURCC_USBJ_CHUNK: {
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','M','T'):
+ case DMUS_FOURCC_UCMT_CHUNK: {
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
+ } while (StreamCount < StreamSize);
+ break;
+ } else {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = StreamSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+
+ TRACE_(dmfile)(": reading finished\n");
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return DMUS_E_INVALIDFILE;
+ }
+ }
+
+ TRACE(": returning descriptor:\n");
+ if (TRACE_ON(dmstyle)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
+ }
+
+ return S_OK;
+}
+
+ICOM_VTABLE(IDirectMusicObject) DirectMusicStyle8_Object_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicStyle8Impl_QueryInterface,
- IDirectMusicStyle8Impl_AddRef,
- IDirectMusicStyle8Impl_Release,
- IDirectMusicStyle8Impl_GetBand,
- IDirectMusicStyle8Impl_EnumBand,
- IDirectMusicStyle8Impl_GetDefaultBand,
- IDirectMusicStyle8Impl_EnumMotif,
- IDirectMusicStyle8Impl_GetMotif,
- IDirectMusicStyle8Impl_GetDefaultChordMap,
- IDirectMusicStyle8Impl_EnumChordMap,
- IDirectMusicStyle8Impl_GetChordMap,
- IDirectMusicStyle8Impl_GetTimeSignature,
- IDirectMusicStyle8Impl_GetEmbellishmentLength,
- IDirectMusicStyle8Impl_GetTempo,
- IDirectMusicStyle8ImplEnumPattern
+ IDirectMusicStyle8Impl_IDirectMusicObject_QueryInterface,
+ IDirectMusicStyle8Impl_IDirectMusicObject_AddRef,
+ IDirectMusicStyle8Impl_IDirectMusicObject_Release,
+ IDirectMusicStyle8Impl_IDirectMusicObject_GetDescriptor,
+ IDirectMusicStyle8Impl_IDirectMusicObject_SetDescriptor,
+ IDirectMusicStyle8Impl_IDirectMusicObject_ParseDescriptor
+};
+
+/* IDirectMusicStyle8Impl IPersistStream part: */
+HRESULT WINAPI IDirectMusicStyle8Impl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, PersistStreamVtbl, iface);
+ return IDirectMusicStyle8Impl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicStyle8Impl_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, PersistStreamVtbl, iface);
+ return IDirectMusicStyle8Impl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicStyle8Impl_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, PersistStreamVtbl, iface);
+ return IDirectMusicStyle8Impl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicStyle8Impl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicStyle8Impl_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicStyle8Impl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
+ ICOM_THIS_MULTI(IDirectMusicStyle8Impl, PersistStreamVtbl, iface);
+
+ FOURCC chunkID;
+ DWORD chunkSize, StreamSize, StreamCount, ListSize[3], ListCount[3];
+ LARGE_INTEGER liMove; /* used when skipping chunks */
+
+ FIXME("(%p, %p): Loading not implemented yet\n", This, pStm);
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ IStream_Read (pStm, &chunkSize, sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
+ switch (chunkID) {
+ case FOURCC_RIFF: {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(chunkID));
+ StreamSize = chunkSize - sizeof(FOURCC);
+ StreamCount = 0;
+ switch (chunkID) {
+ case DMUS_FOURCC_STYLE_FORM: {
+ TRACE_(dmfile)(": style form\n");
+ do {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
+ StreamCount += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
+ switch (chunkID) {
+ case DMUS_FOURCC_GUID_CHUNK: {
+ TRACE_(dmfile)(": GUID chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read (pStm, &This->pDesc->guidObject, chunkSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_VERSION_CHUNK: {
+ TRACE_(dmfile)(": version chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read (pStm, &This->pDesc->vVersion, chunkSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CATEGORY_CHUNK: {
+ TRACE_(dmfile)(": category chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_CATEGORY;
+ IStream_Read (pStm, This->pDesc->wszCategory, chunkSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(chunkID));
+ ListSize[0] = chunkSize - sizeof(FOURCC);
+ ListCount[0] = 0;
+ switch (chunkID) {
+ case DMUS_FOURCC_UNFO_LIST: {
+ TRACE_(dmfile)(": UNFO list\n");
+ do {
+ IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
+ IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
+ TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
+ switch (chunkID) {
+ /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
+ (though strings seem to be valid unicode) */
+ case mmioFOURCC('I','N','A','M'):
+ case DMUS_FOURCC_UNAM_CHUNK: {
+ TRACE_(dmfile)(": name chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_NAME;
+ IStream_Read (pStm, This->pDesc->wszName, chunkSize, NULL);
+ break;
+ }
+ case mmioFOURCC('I','A','R','T'):
+ case DMUS_FOURCC_UART_CHUNK: {
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','O','P'):
+ case DMUS_FOURCC_UCOP_CHUNK: {
+ TRACE_(dmfile)(": copyright chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','S','B','J'):
+ case DMUS_FOURCC_USBJ_CHUNK: {
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','M','T'):
+ case DMUS_FOURCC_UCMT_CHUNK: {
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = chunkSize - sizeof(FOURCC);
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
+ } while (StreamCount < StreamSize);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = StreamSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+ }
+ TRACE_(dmfile)(": reading finished\n");
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = chunkSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+ }
+
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyle8Impl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicStyle8Impl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
+ return E_NOTIMPL;
+}
+
+ICOM_VTABLE(IPersistStream) DirectMusicStyle8_PersistStream_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicStyle8Impl_IPersistStream_QueryInterface,
+ IDirectMusicStyle8Impl_IPersistStream_AddRef,
+ IDirectMusicStyle8Impl_IPersistStream_Release,
+ IDirectMusicStyle8Impl_IPersistStream_GetClassID,
+ IDirectMusicStyle8Impl_IPersistStream_IsDirty,
+ IDirectMusicStyle8Impl_IPersistStream_Load,
+ IDirectMusicStyle8Impl_IPersistStream_Save,
+ IDirectMusicStyle8Impl_IPersistStream_GetSizeMax
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicStyle (LPCGUID lpcGUID, LPDIRECTMUSICSTYLE8* ppDMStyle, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicStyle8Impl* dmstlye;
+HRESULT WINAPI DMUSIC_CreateDirectMusicStyleImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicStyle8Impl* obj;
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicStyle)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicStyle8)) {
- dmstlye = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicStyle8Impl));
- if (NULL == dmstlye) {
- *ppDMStyle = (LPDIRECTMUSICSTYLE8) NULL;
- return E_OUTOFMEMORY;
- }
- dmstlye->lpVtbl = &DirectMusicStyle8_Vtbl;
- dmstlye->ref = 1;
- *ppDMStyle = (LPDIRECTMUSICSTYLE8) dmstlye;
- return S_OK;
+ obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicStyle8Impl));
+ if (NULL == obj) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
}
+ obj->UnknownVtbl = &DirectMusicStyle8_Unknown_Vtbl;
+ obj->StyleVtbl = &DirectMusicStyle8_Style_Vtbl;
+ obj->ObjectVtbl = &DirectMusicStyle8_Object_Vtbl;
+ obj->PersistStreamVtbl = &DirectMusicStyle8_PersistStream_Vtbl;
+ obj->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(obj->pDesc);
+ obj->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&obj->pDesc->guidClass, &CLSID_DirectMusicStyle, sizeof (CLSID));
+ obj->ref = 0; /* will be inited by QueryInterface */
- WARN("No interface found\n");
- return E_NOINTERFACE;
+ return IDirectMusicStyle8Impl_IUnknown_QueryInterface ((LPUNKNOWN)&obj->UnknownVtbl, lpcGUID, ppobj);
}
-
-
-/*****************************************************************************
- * IDirectMusicStyleObject implementation
- */
-/* IDirectMusicStyleObject IUnknown part: */
-HRESULT WINAPI IDirectMusicStyleObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicStyleObject,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IDirectMusicObject)) {
- IDirectMusicStyleObject_AddRef(iface);
- *ppobj = This;
- return S_OK;
- } else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IPersistStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = (LPPERSISTSTREAM)This->pStream;
- return S_OK;
- } else if (IsEqualIID (riid, &IID_IDirectMusicStyle)
- || IsEqualIID (riid, &IID_IDirectMusicStyle8)) {
- IDirectMusicStyle8_AddRef ((LPDIRECTMUSICSTYLE8)This->pStyle);
- *ppobj = (LPDIRECTMUSICSTYLE8)This->pStyle;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicStyleObject_AddRef (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicStyleObject,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicStyleObject_Release (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicStyleObject,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicStyleObject IDirectMusicObject part: */
-HRESULT WINAPI IDirectMusicStyleObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicStyleObject,iface);
-
- TRACE("(%p, %p)\n", This, pDesc);
- pDesc = This->pDesc;
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicStyleObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicStyleObject,iface);
-
- TRACE("(%p, %p)\n", This, pDesc);
- This->pDesc = pDesc;
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicStyleObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicStyleObject,iface);
-
- FIXME("(%p, %p, %p): stub\n", This, pStream, pDesc);
-
- return S_OK;
-}
-
-ICOM_VTABLE(IDirectMusicObject) DirectMusicStyleObject_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicStyleObject_QueryInterface,
- IDirectMusicStyleObject_AddRef,
- IDirectMusicStyleObject_Release,
- IDirectMusicStyleObject_GetDescriptor,
- IDirectMusicStyleObject_SetDescriptor,
- IDirectMusicStyleObject_ParseDescriptor
-};
-
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicStyleObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicStyleObject *obj;
-
- TRACE("(%p,%p,%p)\n", lpcGUID, ppObject, pUnkOuter);
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicObject)) {
- obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicStyleObject));
- if (NULL == obj) {
- *ppObject = (LPDIRECTMUSICOBJECT) NULL;
- return E_OUTOFMEMORY;
- }
- obj->lpVtbl = &DirectMusicStyleObject_Vtbl;
- obj->ref = 1;
- /* prepare IPersistStream */
- obj->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicStyleObjectStream));
- obj->pStream->lpVtbl = &DirectMusicStyleObjectStream_Vtbl;
- obj->pStream->ref = 1;
- obj->pStream->pParentObject = obj;
- /* prepare IDirectMusicStyle */
- DMUSIC_CreateDirectMusicStyle (&IID_IDirectMusicStyle8, (LPDIRECTMUSICSTYLE8*)&obj->pStyle, NULL);
- obj->pStyle->pObject = obj;
- *ppObject = (LPDIRECTMUSICOBJECT) obj;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
-}
-
-/*****************************************************************************
- * IDirectMusicStyleObjectStream implementation
- */
-/* IDirectMusicStyleObjectStream IUnknown part: */
-HRESULT WINAPI IDirectMusicStyleObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicStyleObjectStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicStyleObjectStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicStyleObjectStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicStyleObjectStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicStyleObjectStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicStyleObjectStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicStyleObjectStream IPersist part: */
-HRESULT WINAPI IDirectMusicStyleObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- return E_NOTIMPL;
-}
-
-/* IDirectMusicStyleObjectStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicStyleObjectStream_IsDirty (LPPERSISTSTREAM iface)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicStyleObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
- FIXME(": Loading not implemented yet\n");
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicStyleObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicStyleObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
- return E_NOTIMPL;
-}
-
-ICOM_VTABLE(IPersistStream) DirectMusicStyleObjectStream_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicStyleObjectStream_QueryInterface,
- IDirectMusicStyleObjectStream_AddRef,
- IDirectMusicStyleObjectStream_Release,
- IDirectMusicStyleObjectStream_GetClassID,
- IDirectMusicStyleObjectStream_IsDirty,
- IDirectMusicStyleObjectStream_Load,
- IDirectMusicStyleObjectStream_Save,
- IDirectMusicStyleObjectStream_GetSizeMax
-};
diff --git a/dlls/dmstyle/styletrack.c b/dlls/dmstyle/styletrack.c
index 8838a15..b3b1db4 100644
--- a/dlls/dmstyle/styletrack.c
+++ b/dlls/dmstyle/styletrack.c
@@ -1,6 +1,6 @@
/* IDirectMusicStyleTrack Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,14 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmstyle_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmstyle);
@@ -34,19 +26,21 @@
* IDirectMusicStyleTrack implementation
*/
/* IDirectMusicStyleTrack IUnknown part: */
-HRESULT WINAPI IDirectMusicStyleTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicStyleTrack,iface);
+HRESULT WINAPI IDirectMusicStyleTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, UnknownVtbl, iface);
- if (IsEqualIID (riid, &IID_IUnknown) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack) ||
- IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
- IDirectMusicStyleTrack_AddRef(iface);
- *ppobj = This;
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPUNKNOWN)&This->UnknownVtbl;
+ IDirectMusicStyleTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicTrack)
+ || IsEqualIID (riid, &IID_IDirectMusicTrack8)) {
+ *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl;
+ IDirectMusicStyleTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl);
return S_OK;
} else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicStyleTrackStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
+ *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl;
+ IDirectMusicStyleTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
@@ -54,16 +48,14 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicStyleTrack_AddRef (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicStyleTrack,iface);
+ULONG WINAPI IDirectMusicStyleTrack_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicStyleTrack_Release (LPDIRECTMUSICTRACK8 iface)
-{
- ICOM_THIS(IDirectMusicStyleTrack,iface);
+ULONG WINAPI IDirectMusicStyleTrack_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -72,64 +64,71 @@
return ref;
}
-/* IDirectMusicStyleTrack IDirectMusicTrack part: */
-HRESULT WINAPI IDirectMusicStyleTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
-{
- ICOM_THIS(IDirectMusicStyleTrack,iface);
+ICOM_VTABLE(IUnknown) DirectMusicStyleTrack_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicStyleTrack_IUnknown_QueryInterface,
+ IDirectMusicStyleTrack_IUnknown_AddRef,
+ IDirectMusicStyleTrack_IUnknown_Release
+};
+/* IDirectMusicStyleTrack IDirectMusicTrack8 part: */
+HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface);
+ return IDirectMusicStyleTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface);
+ return IDirectMusicStyleTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface);
+ return IDirectMusicStyleTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
+{
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pSegment);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyleTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
+HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
{
- ICOM_THIS(IDirectMusicStyleTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface);
FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyleTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
+HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
{
- ICOM_THIS(IDirectMusicStyleTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface);
FIXME("(%p, %p): stub\n", This, pStateData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyleTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
{
- ICOM_THIS(IDirectMusicStyleTrack,iface);
-
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyleTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
-{
- ICOM_THIS(IDirectMusicStyleTrack,iface);
-
+HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pmtNext, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyleTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
-{
- ICOM_THIS(IDirectMusicStyleTrack,iface);
-
+HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface);
FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_guid(rguidType), mtTime, pParam);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyleTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
-{
- ICOM_THIS(IDirectMusicStyleTrack,iface);
+HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface);
TRACE("(%p, %s): ", This, debugstr_guid(rguidType));
if (IsEqualGUID (rguidType, &GUID_DisableTimeSig)
@@ -139,395 +138,147 @@
|| IsEqualGUID (rguidType, &GUID_TimeSignature)) {
TRACE("param supported\n");
return S_OK;
- }
-
+ }
TRACE("param unsupported\n");
return DMUS_E_TYPE_UNSUPPORTED;
}
-HRESULT WINAPI IDirectMusicStyleTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicStyleTrack,iface);
-
+HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyleTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
-{
- ICOM_THIS(IDirectMusicStyleTrack,iface);
-
+HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface);
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyleTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
-{
- ICOM_THIS(IDirectMusicStyleTrack,iface);
-
+HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface);
FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
-
return S_OK;
}
-/* IDirectMusicStyleTrack IDirectMusicTrack8 part: */
-HRESULT WINAPI IDirectMusicStyleTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
-{
- ICOM_THIS(IDirectMusicStyleTrack,iface);
-
+HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface);
FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyleTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicStyleTrack,iface);
-
+HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyleTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
-{
- ICOM_THIS(IDirectMusicStyleTrack,iface);
-
+HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface);
FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_guid(rguidType), rtTime, pParam, pStateData, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyleTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicStyleTrack,iface);
-
+HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicStyleTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
-{
- ICOM_THIS(IDirectMusicStyleTrack,iface);
-
+HRESULT WINAPI IDirectMusicStyleTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, TrackVtbl, iface);
FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicTrack8) DirectMusicStyleTrack_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicStyleTrack_Track_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicStyleTrack_QueryInterface,
- IDirectMusicStyleTrack_AddRef,
- IDirectMusicStyleTrack_Release,
- IDirectMusicStyleTrack_Init,
- IDirectMusicStyleTrack_InitPlay,
- IDirectMusicStyleTrack_EndPlay,
- IDirectMusicStyleTrack_Play,
- IDirectMusicStyleTrack_GetParam,
- IDirectMusicStyleTrack_SetParam,
- IDirectMusicStyleTrack_IsParamSupported,
- IDirectMusicStyleTrack_AddNotificationType,
- IDirectMusicStyleTrack_RemoveNotificationType,
- IDirectMusicStyleTrack_Clone,
- IDirectMusicStyleTrack_PlayEx,
- IDirectMusicStyleTrack_GetParamEx,
- IDirectMusicStyleTrack_SetParamEx,
- IDirectMusicStyleTrack_Compose,
- IDirectMusicStyleTrack_Join
+ IDirectMusicStyleTrack_IDirectMusicTrack_QueryInterface,
+ IDirectMusicStyleTrack_IDirectMusicTrack_AddRef,
+ IDirectMusicStyleTrack_IDirectMusicTrack_Release,
+ IDirectMusicStyleTrack_IDirectMusicTrack_Init,
+ IDirectMusicStyleTrack_IDirectMusicTrack_InitPlay,
+ IDirectMusicStyleTrack_IDirectMusicTrack_EndPlay,
+ IDirectMusicStyleTrack_IDirectMusicTrack_Play,
+ IDirectMusicStyleTrack_IDirectMusicTrack_GetParam,
+ IDirectMusicStyleTrack_IDirectMusicTrack_SetParam,
+ IDirectMusicStyleTrack_IDirectMusicTrack_IsParamSupported,
+ IDirectMusicStyleTrack_IDirectMusicTrack_AddNotificationType,
+ IDirectMusicStyleTrack_IDirectMusicTrack_RemoveNotificationType,
+ IDirectMusicStyleTrack_IDirectMusicTrack_Clone,
+ IDirectMusicStyleTrack_IDirectMusicTrack_PlayEx,
+ IDirectMusicStyleTrack_IDirectMusicTrack_GetParamEx,
+ IDirectMusicStyleTrack_IDirectMusicTrack_SetParamEx,
+ IDirectMusicStyleTrack_IDirectMusicTrack_Compose,
+ IDirectMusicStyleTrack_IDirectMusicTrack_Join
+};
+
+/* IDirectMusicStyleTrack IPersistStream part: */
+HRESULT WINAPI IDirectMusicStyleTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, PersistStreamVtbl, iface);
+ return IDirectMusicStyleTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicStyleTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, PersistStreamVtbl, iface);
+ return IDirectMusicStyleTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicStyleTrack_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicStyleTrack, PersistStreamVtbl, iface);
+ return IDirectMusicStyleTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicStyleTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicStyleTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicStyleTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
+ FIXME(": Loading not implemented yet\n");
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyleTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicStyleTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
+ return E_NOTIMPL;
+}
+
+ICOM_VTABLE(IPersistStream) DirectMusicStyleTrack_PersistStream_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicStyleTrack_IPersistStream_QueryInterface,
+ IDirectMusicStyleTrack_IPersistStream_AddRef,
+ IDirectMusicStyleTrack_IPersistStream_Release,
+ IDirectMusicStyleTrack_IPersistStream_GetClassID,
+ IDirectMusicStyleTrack_IPersistStream_IsDirty,
+ IDirectMusicStyleTrack_IPersistStream_Load,
+ IDirectMusicStyleTrack_IPersistStream_Save,
+ IDirectMusicStyleTrack_IPersistStream_GetSizeMax
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicStyleTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8 *ppTrack, LPUNKNOWN pUnkOuter)
-{
+HRESULT WINAPI DMUSIC_CreateDirectMusicStyleTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
IDirectMusicStyleTrack* track;
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicTrack)
- || IsEqualIID (lpcGUID, &IID_IDirectMusicTrack8)) {
- track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicStyleTrack));
- if (NULL == track) {
- *ppTrack = (LPDIRECTMUSICTRACK8) NULL;
- return E_OUTOFMEMORY;
- }
- track->lpVtbl = &DirectMusicStyleTrack_Vtbl;
- track->ref = 1;
- track->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicStyleTrackStream));
- track->pStream->lpVtbl = &DirectMusicStyleTrackStream_Vtbl;
- track->pStream->ref = 1;
- track->pStream->pParentTrack = track;
- *ppTrack = (LPDIRECTMUSICTRACK8) track;
- return S_OK;
+ track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicStyleTrack));
+ if (NULL == track) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
}
- WARN("No interface found\n");
+ track->UnknownVtbl = &DirectMusicStyleTrack_Unknown_Vtbl;
+ track->TrackVtbl = &DirectMusicStyleTrack_Track_Vtbl;
+ track->PersistStreamVtbl = &DirectMusicStyleTrack_PersistStream_Vtbl;
+ track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(track->pDesc);
+ track->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicStyleTrack, sizeof (CLSID));
+ track->ref = 0; /* will be inited by QueryInterface */
- return E_NOINTERFACE;
+ return IDirectMusicStyleTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj);
}
-
-
-/*****************************************************************************
- * IDirectMusicStyleTrackStream implementation
- */
-/* IDirectMusicStyleTrackStream IUnknown part follow: */
-HRESULT WINAPI IDirectMusicStyleTrackStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicStyleTrackStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicStyleTrackStream_AddRef(iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicStyleTrackStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicStyleTrackStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicStyleTrackStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicStyleTrackStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicStyleTrackStream IPersist part: */
-HRESULT WINAPI IDirectMusicStyleTrackStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- return E_NOTIMPL;
-}
-
-/* IDirectMusicStyleTrackStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicStyleTrackStream_IsDirty (LPPERSISTSTREAM iface)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicStyleTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
- ICOM_THIS(IDirectMusicStyleTrackStream,iface);
- FOURCC chunkID;
- DWORD chunkSize, ListSize[3], ListCount[3];
- LARGE_INTEGER liMove; /* used when skipping chunks */
- DMUS_IO_REFERENCE tempReferenceHeader;
- DMUS_OBJECTDESC ObjDesc;
- IDirectMusicStyleTrack* pTrack = This->pParentTrack; /* that's where we load data to */
- LPDIRECTMUSICLOADER pLoader;
- LPDIRECTMUSICGETLOADER pGetLoader;
-
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(DWORD), NULL);
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
- case FOURCC_LIST: {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(chunkID));
- ListSize[0] = chunkSize - sizeof(FOURCC);
- ListCount[0] = 0;
- switch (chunkID) {
- case DMUS_FOURCC_STYLE_TRACK_LIST: {
- TRACE_(dmfile)(": style track list\n");
- do {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
- ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
- case FOURCC_LIST: {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(chunkID));
- ListSize[1] = chunkSize - sizeof(FOURCC);
- ListCount[1] = 0;
- switch (chunkID) {
- case DMUS_FOURCC_STYLE_REF_LIST: {
- TRACE_(dmfile)(": style reference list\n");
- do {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
- ListCount[1] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
- case DMUS_FOURCC_TIME_STAMP_CHUNK: {
- TRACE_(dmfile)(": time stamp chunk\n");
- IStream_Read (pStm, &pTrack->pStampTimes[pTrack->dwStyles], sizeof(DWORD), NULL);
- TRACE_(dmfile)(": (READ): time stamp = %ld\n", pTrack->pStampTimes[pTrack->dwStyles]);
- break;
- }
- case FOURCC_LIST: {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(chunkID));
- ListSize[2] = chunkSize - sizeof(FOURCC);
- ListCount[2] = 0;
- switch (chunkID) {
- case DMUS_FOURCC_REF_LIST: {
- TRACE_(dmfile)(": reference list\n");
- ZeroMemory ((LPVOID)&ObjDesc, sizeof(DMUS_OBJECTDESC));
- do {
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
- ListCount[2] += sizeof(FOURCC) + sizeof(DWORD) + chunkSize;
- TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (chunkID), chunkSize);
- switch (chunkID) {
- case DMUS_FOURCC_REF_CHUNK: {
- TRACE_(dmfile)(": reference header chunk\n");
- IStream_Read (pStm, &tempReferenceHeader, chunkSize, NULL);
- /* copy retrieved data to DMUS_OBJECTDESC */
- ObjDesc.dwSize = sizeof(DMUS_OBJECTDESC);
- ObjDesc.guidClass = tempReferenceHeader.guidClassID;
- ObjDesc.dwValidData = tempReferenceHeader.dwValidData;
- break;
- }
- case DMUS_FOURCC_GUID_CHUNK: {
- TRACE_(dmfile)(": guid chunk\n");
- IStream_Read (pStm, &ObjDesc.guidObject, chunkSize, NULL);
- break;
- }
- case DMUS_FOURCC_DATE_CHUNK: {
- TRACE_(dmfile)(": file date chunk\n");
- IStream_Read (pStm, &ObjDesc.ftDate, chunkSize, NULL);
- break;
- }
- case DMUS_FOURCC_NAME_CHUNK: {
- TRACE_(dmfile)(": name chunk\n");
- IStream_Read (pStm, &ObjDesc.wszName, chunkSize, NULL);
- break;
- }
- case DMUS_FOURCC_FILE_CHUNK: {
- TRACE_(dmfile)(": file name chunk\n");
- IStream_Read (pStm, &ObjDesc.wszFileName, chunkSize, NULL);
- break;
- }
- case DMUS_FOURCC_CATEGORY_CHUNK: {
- TRACE_(dmfile)(": category chunk\n");
- IStream_Read (pStm, &ObjDesc.wszCategory, chunkSize, NULL);
- break;
- }
- case DMUS_FOURCC_VERSION_CHUNK: {
- TRACE_(dmfile)(": version chunk\n");
- IStream_Read (pStm, &ObjDesc.vVersion, chunkSize, NULL);
- break;
- }
- default: {
- TRACE_(dmfile)(": unknown chunk (skipping)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip this chunk */
- break;
- }
- }
- TRACE_(dmfile)(": ListCount[2] = %ld < ListSize[2] = %ld\n", ListCount[2], ListSize[2]);
- } while (ListCount[2] < ListSize[2]);
- break;
- }
- default: {
- TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
- return E_FAIL;
- }
- }
- break;
- }
- default: {
- TRACE_(dmfile)(": unknown chunk (skipping)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip this chunk */
- break;
- }
- }
- TRACE_(dmfile)(": ListCount[1] = %ld < ListSize[1] = %ld\n", ListCount[1], ListSize[1]);
- } while (ListCount[1] < ListSize[1]);
- /* let's see what we have */
- TRACE_(dmfile)(": (READ): reference: dwSize = %ld; dwValidData = %ld; guidObject = %s; guidClass = %s; \
-vVersion = %08lx,%08lx; wszName = %s; wszCategory = %s; wszFileName = %s\n", ObjDesc.dwSize, ObjDesc.dwValidData, debugstr_guid(&ObjDesc.guidObject), debugstr_guid(&ObjDesc.guidClass), \
-ObjDesc.vVersion.dwVersionMS, ObjDesc.vVersion.dwVersionLS, debugstr_w(ObjDesc.wszName), debugstr_w(ObjDesc.wszCategory), debugstr_w(ObjDesc.wszFileName));
- /* now, let's convience loader to load reference */
- if (IStream_QueryInterface (pStm, &IID_IDirectMusicGetLoader, (LPVOID*)&pGetLoader) == S_OK) {
- if (IDirectMusicGetLoader_GetLoader (pGetLoader, &pLoader) == S_OK) {
- /* load referenced object */
- IDirectMusicObject* pObject;
- IDirectMusicLoader_GetObject (pLoader, &ObjDesc, &IID_IDirectMusicObject, (LPVOID*)&pObject);
- /* acquire style from loaded referenced object */
- IDirectMusicObject_QueryInterface (pObject, &IID_IDirectMusicStyle8, (LPVOID*)&pTrack->ppStyles[pTrack->dwStyles]);
- IDirectMusicLoader_Release (pLoader);
- }
- IDirectMusicGetLoader_Release (pGetLoader);
- } else {
- ERR("Could not get IDirectMusicGetLoader... reference will not be loaded :(\n");
- /* E_FAIL */
- }
- pTrack->dwStyles++; /* add reference count */
- break;
- }
- default: {
- TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
- return E_FAIL;
- }
- }
- break;
- }
- default: {
- TRACE_(dmfile)(": unknown chunk (skipping)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip this chunk */
- break;
- }
- }
- TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
- } while (ListCount[0] < ListSize[0]);
- break;
- }
- default: {
- TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
- liMove.QuadPart = ListSize[0];
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
- return E_FAIL;
- }
- }
- TRACE_(dmfile)(": reading finished\n");
- break;
- }
- default: {
- TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
- liMove.QuadPart = chunkSize;
- IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
- return E_FAIL;
- }
- }
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicStyleTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicStyleTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
- return E_NOTIMPL;
-}
-
-ICOM_VTABLE(IPersistStream) DirectMusicStyleTrackStream_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicStyleTrackStream_QueryInterface,
- IDirectMusicStyleTrackStream_AddRef,
- IDirectMusicStyleTrackStream_Release,
- IDirectMusicStyleTrackStream_GetClassID,
- IDirectMusicStyleTrackStream_IsDirty,
- IDirectMusicStyleTrackStream_Load,
- IDirectMusicStyleTrackStream_Save,
- IDirectMusicStyleTrackStream_GetSizeMax
-};
diff --git a/dlls/dmstyle/version.rc b/dlls/dmstyle/version.rc
index bf7645d..afdea36 100644
--- a/dlls/dmstyle/version.rc
+++ b/dlls/dmstyle/version.rc
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc <rok.mandeljc@gimb.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -18,10 +18,10 @@
#define WINE_FILEDESCRIPTION_STR "Wine DirectMusic Style Engine"
#define WINE_FILENAME_STR "dmstyle.dll"
-#define WINE_FILEVERSION 4,8,1,881
-#define WINE_FILEVERSION_STR "4.8.1.881"
-#define WINE_PRODUCTVERSION 4,8,1,881
-#define WINE_PRODUCTVERSION_STR "4.8"
+#define WINE_FILEVERSION 4,9,0,900
+#define WINE_FILEVERSION_STR "4.9.0.900"
+#define WINE_PRODUCTVERSION 4,9,0,900
+#define WINE_PRODUCTVERSION_STR "4.9"
#define WINE_PRODUCTNAME_STR "DirectX"
#include "wine/wine_common_ver.rc"
diff --git a/dlls/dmsynth/dmsynth_main.c b/dlls/dmsynth/dmsynth_main.c
index c529981..db3f72d 100644
--- a/dlls/dmsynth/dmsynth_main.c
+++ b/dlls/dmsynth/dmsynth_main.c
@@ -1,6 +1,6 @@
/* DirectMusicSynthesizer Main
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,8 +21,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(dmsynth);
-typedef struct
-{
+typedef struct {
/* IUnknown fields */
ICOM_VFIELD(IClassFactory);
DWORD ref;
@@ -31,43 +30,30 @@
/******************************************************************
* DirectMusicSynth ClassFactory
*/
-static HRESULT WINAPI SynthCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI SynthCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI SynthCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI SynthCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI SynthCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI SynthCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI SynthCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI SynthCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicSynth) ||
- IsEqualIID (riid, &IID_IDirectMusicSynth8)) {
- return DMUSIC_CreateDirectMusicSynth (riid, (LPDIRECTMUSICSYNTH8*)ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicSynthImpl (riid, ppobj, pOuter);
}
-static HRESULT WINAPI SynthCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI SynthCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -87,42 +73,30 @@
/******************************************************************
* DirectMusicSynthSink ClassFactory
*/
-static HRESULT WINAPI SynthSinkCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI SynthSinkCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI SynthSinkCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI SynthSinkCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI SynthSinkCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI SynthSinkCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI SynthSinkCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI SynthSinkCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicSynthSink)) {
- return DMUSIC_CreateDirectMusicSynthSink (riid, (LPDIRECTMUSICSYNTHSINK*)ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicSynthSinkImpl (riid, ppobj, pOuter);
}
-static HRESULT WINAPI SynthSinkCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI SynthSinkCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -144,15 +118,11 @@
*
*
*/
-BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
-{
- if (fdwReason == DLL_PROCESS_ATTACH)
- {
- DisableThreadLibraryCalls(hinstDLL);
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
+ if (fdwReason == DLL_PROCESS_ATTACH) {
+ DisableThreadLibraryCalls(hinstDLL);
/* FIXME: Initialisation */
- }
- else if (fdwReason == DLL_PROCESS_DETACH)
- {
+ } else if (fdwReason == DLL_PROCESS_DETACH) {
/* FIXME: Cleanup */
}
@@ -165,10 +135,8 @@
*
*
*/
-HRESULT WINAPI DMSYNTH_DllCanUnloadNow(void)
-{
+HRESULT WINAPI DMSYNTH_DllCanUnloadNow(void) {
FIXME("(void): stub\n");
-
return S_FALSE;
}
@@ -178,8 +146,7 @@
*
*
*/
-HRESULT WINAPI DMSYNTH_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
-{
+HRESULT WINAPI DMSYNTH_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) {
TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSynth) && IsEqualIID (riid, &IID_IClassFactory)) {
*ppv = (LPVOID) &Synth_CF;
diff --git a/dlls/dmsynth/dmsynth_private.h b/dlls/dmsynth/dmsynth_private.h
index 262ab57..f2a4488 100644
--- a/dlls/dmsynth/dmsynth_private.h
+++ b/dlls/dmsynth/dmsynth_private.h
@@ -1,6 +1,6 @@
/* DirectMusicSynthesizer Private Include
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,16 +23,19 @@
#include <stdarg.h>
#include "windef.h"
-#include "wine/debug.h"
#include "winbase.h"
#include "winnt.h"
#include "wingdi.h"
-#include "dmusicc.h"
+#include "winuser.h"
+
+#include "wine/debug.h"
+#include "wine/list.h"
+#include "wine/unicode.h"
+#include "winreg.h"
+
#include "dmusici.h"
-#include "dmusics.h"
-#include "dmplugin.h"
#include "dmusicf.h"
-#include "dsound.h"
+#include "dmusics.h"
/*****************************************************************************
* Interfaces
@@ -49,20 +52,13 @@
/*****************************************************************************
* ClassFactory
*/
-/* can support IID_IDirectMusicSynth and IID_IDirectMusicSynth8
- * return always an IDirectMusicSynthImpl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicSynth (LPCGUID lpcGUID, LPDIRECTMUSICSYNTH8* ppDMSynth, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicSynthSink
- * return always an IDirectMusicSynthSinkImpl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicSynthSink (LPCGUID lpcGUID, LPDIRECTMUSICSYNTHSINK* ppDMSynthSink, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicSynthImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicSynthSinkImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
/*****************************************************************************
* IDirectMusicSynth8Impl implementation structure
*/
-struct IDirectMusicSynth8Impl
-{
+struct IDirectMusicSynth8Impl {
/* IUnknown fields */
ICOM_VFIELD(IDirectMusicSynth8);
DWORD ref;
@@ -106,8 +102,7 @@
/*****************************************************************************
* IDirectMusicSynthSinkImpl implementation structure
*/
-struct IDirectMusicSynthSinkImpl
-{
+struct IDirectMusicSynthSinkImpl {
/* IUnknown fields */
ICOM_VFIELD(IDirectMusicSynthSink);
DWORD ref;
diff --git a/dlls/dmsynth/regsvr.c b/dlls/dmsynth/regsvr.c
index 8e8b96e..401033d 100644
--- a/dlls/dmsynth/regsvr.c
+++ b/dlls/dmsynth/regsvr.c
@@ -18,21 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include <stdarg.h>
-#include <string.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winreg.h"
-#include "winerror.h"
-
-#include "dmusics.h"
-#include "dmusici.h"
-#include "dmplugin.h"
-
-#include "wine/debug.h"
+#include "dmsynth_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmsynth);
@@ -44,8 +30,7 @@
/***********************************************************************
* interface for self-registering
*/
-struct regsvr_interface
-{
+struct regsvr_interface {
IID const *iid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
IID const *base_iid; /* can be NULL to omit */
@@ -57,8 +42,7 @@
static HRESULT register_interfaces(struct regsvr_interface const *list);
static HRESULT unregister_interfaces(struct regsvr_interface const *list);
-struct regsvr_coclass
-{
+struct regsvr_coclass {
CLSID const *clsid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
LPCSTR ips; /* can be NULL to omit */
@@ -124,8 +108,7 @@
/***********************************************************************
* register_interfaces
*/
-static HRESULT register_interfaces(struct regsvr_interface const *list)
-{
+static HRESULT register_interfaces(struct regsvr_interface const *list) {
LONG res = ERROR_SUCCESS;
HKEY interface_key;
@@ -194,8 +177,7 @@
/***********************************************************************
* unregister_interfaces
*/
-static HRESULT unregister_interfaces(struct regsvr_interface const *list)
-{
+static HRESULT unregister_interfaces(struct regsvr_interface const *list) {
LONG res = ERROR_SUCCESS;
HKEY interface_key;
@@ -219,8 +201,7 @@
/***********************************************************************
* register_coclasses
*/
-static HRESULT register_coclasses(struct regsvr_coclass const *list)
-{
+static HRESULT register_coclasses(struct regsvr_coclass const *list) {
LONG res = ERROR_SUCCESS;
HKEY coclass_key;
@@ -301,8 +282,7 @@
/***********************************************************************
* unregister_coclasses
*/
-static HRESULT unregister_coclasses(struct regsvr_coclass const *list)
-{
+static HRESULT unregister_coclasses(struct regsvr_coclass const *list) {
LONG res = ERROR_SUCCESS;
HKEY coclass_key;
@@ -338,8 +318,7 @@
/***********************************************************************
* regsvr_key_guid
*/
-static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid)
-{
+static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid) {
WCHAR buf[39];
StringFromGUID2(guid, buf, 39);
@@ -352,8 +331,7 @@
static LONG register_key_defvalueW(
HKEY base,
WCHAR const *name,
- WCHAR const *value)
-{
+ WCHAR const *value) {
LONG res;
HKEY key;
@@ -372,8 +350,7 @@
static LONG register_key_defvalueA(
HKEY base,
WCHAR const *name,
- char const *value)
-{
+ char const *value) {
LONG res;
HKEY key;
@@ -394,8 +371,7 @@
char const *progid,
char const *curver_progid,
char const *name,
- char const *extra)
-{
+ char const *extra) {
LONG res;
HKEY progid_key;
@@ -439,8 +415,7 @@
/***********************************************************************
* recursive_delete_key
*/
-static LONG recursive_delete_key(HKEY key)
-{
+static LONG recursive_delete_key(HKEY key) {
LONG res;
WCHAR subkey_name[MAX_PATH];
DWORD cName;
@@ -471,8 +446,7 @@
/***********************************************************************
* recursive_delete_keyA
*/
-static LONG recursive_delete_keyA(HKEY base, char const *name)
-{
+static LONG recursive_delete_keyA(HKEY base, char const *name) {
LONG res;
HKEY key;
@@ -487,8 +461,7 @@
/***********************************************************************
* recursive_delete_keyW
*/
-static LONG recursive_delete_keyW(HKEY base, WCHAR const *name)
-{
+static LONG recursive_delete_keyW(HKEY base, WCHAR const *name) {
LONG res;
HKEY key;
@@ -534,8 +507,7 @@
/***********************************************************************
* DllRegisterServer (DMSYNTH.3)
*/
-HRESULT WINAPI DMSYNTH_DllRegisterServer(void)
-{
+HRESULT WINAPI DMSYNTH_DllRegisterServer(void) {
HRESULT hr;
TRACE("\n");
@@ -549,8 +521,7 @@
/***********************************************************************
* DllUnregisterServer (DMSYNTH.4)
*/
-HRESULT WINAPI DMSYNTH_DllUnregisterServer(void)
-{
+HRESULT WINAPI DMSYNTH_DllUnregisterServer(void) {
HRESULT hr;
TRACE("\n");
diff --git a/dlls/dmsynth/synth.c b/dlls/dmsynth/synth.c
index 5b89e66..0658b78 100644
--- a/dlls/dmsynth/synth.c
+++ b/dlls/dmsynth/synth.c
@@ -1,6 +1,6 @@
/* IDirectMusicSynth8 Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,22 +17,12 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-#include "winnls.h"
-
#include "dmsynth_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmsynth);
-/* IDirectMusicSynth8 IUnknown part: */
-HRESULT WINAPI IDirectMusicSynth8Impl_QueryInterface (LPDIRECTMUSICSYNTH8 iface, REFIID riid, LPVOID *ppobj)
-{
+/* IDirectMusicSynth8Impl IUnknown part: */
+HRESULT WINAPI IDirectMusicSynth8Impl_QueryInterface (LPDIRECTMUSICSYNTH8 iface, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
if (IsEqualIID (riid, &IID_IUnknown) ||
@@ -42,20 +32,17 @@
*ppobj = This;
return S_OK;
}
-
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicSynth8Impl_AddRef (LPDIRECTMUSICSYNTH8 iface)
-{
+ULONG WINAPI IDirectMusicSynth8Impl_AddRef (LPDIRECTMUSICSYNTH8 iface) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicSynth8Impl_Release (LPDIRECTMUSICSYNTH8 iface)
-{
+ULONG WINAPI IDirectMusicSynth8Impl_Release (LPDIRECTMUSICSYNTH8 iface) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
@@ -65,213 +52,146 @@
return ref;
}
-/* IDirectMusicSynth8 IDirectMusicSynth part: */
-HRESULT WINAPI IDirectMusicSynth8Impl_Open (LPDIRECTMUSICSYNTH8 iface, LPDMUS_PORTPARAMS pPortParams)
-{
+/* IDirectMusicSynth8Impl IDirectMusicSynth part: */
+HRESULT WINAPI IDirectMusicSynth8Impl_Open (LPDIRECTMUSICSYNTH8 iface, LPDMUS_PORTPARAMS pPortParams) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pPortParams);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_Close (LPDIRECTMUSICSYNTH8 iface)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_Close (LPDIRECTMUSICSYNTH8 iface) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
FIXME("(%p): stub\n", This);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_SetNumChannelGroups (LPDIRECTMUSICSYNTH8 iface, DWORD dwGroups)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_SetNumChannelGroups (LPDIRECTMUSICSYNTH8 iface, DWORD dwGroups) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
FIXME("(%p, %ld): stub\n", This, dwGroups);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_Download (LPDIRECTMUSICSYNTH8 iface, LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_Download (LPDIRECTMUSICSYNTH8 iface, LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
FIXME("(%p, %p, %p, %p): stub\n", This, phDownload, pvData, pbFree);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_Unload (LPDIRECTMUSICSYNTH8 iface, HANDLE hDownload, HRESULT (CALLBACK* lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_Unload (LPDIRECTMUSICSYNTH8 iface, HANDLE hDownload, HRESULT (CALLBACK* lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
FIXME("(%p, %p, %p): stub\n", This, hDownload, hUserData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_PlayBuffer (LPDIRECTMUSICSYNTH8 iface, REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_PlayBuffer (LPDIRECTMUSICSYNTH8 iface, REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
FIXME("(%p, %lli, %p, %ld): stub\n", This, rt, pbBuffer, cbBuffer);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_GetRunningStats (LPDIRECTMUSICSYNTH8 iface, LPDMUS_SYNTHSTATS pStats)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_GetRunningStats (LPDIRECTMUSICSYNTH8 iface, LPDMUS_SYNTHSTATS pStats) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pStats);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_GetPortCaps (LPDIRECTMUSICSYNTH8 iface, LPDMUS_PORTCAPS pCaps)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_GetPortCaps (LPDIRECTMUSICSYNTH8 iface, LPDMUS_PORTCAPS pCaps) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
TRACE("(%p, %p)\n", This, pCaps);
*pCaps = This->pCaps;
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_SetMasterClock (LPDIRECTMUSICSYNTH8 iface, IReferenceClock* pClock)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_SetMasterClock (LPDIRECTMUSICSYNTH8 iface, IReferenceClock* pClock) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pClock);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_GetLatencyClock (LPDIRECTMUSICSYNTH8 iface, IReferenceClock** ppClock)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_GetLatencyClock (LPDIRECTMUSICSYNTH8 iface, IReferenceClock** ppClock) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
TRACE("(%p, %p)\n", This, ppClock);
*ppClock = This->pLatencyClock;
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_Activate (LPDIRECTMUSICSYNTH8 iface, BOOL fEnable)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_Activate (LPDIRECTMUSICSYNTH8 iface, BOOL fEnable) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
TRACE("(%p, %d)\n", This, fEnable);
This->fActive = fEnable;
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_SetSynthSink (LPDIRECTMUSICSYNTH8 iface, IDirectMusicSynthSink* pSynthSink)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_SetSynthSink (LPDIRECTMUSICSYNTH8 iface, IDirectMusicSynthSink* pSynthSink) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
TRACE("(%p, %p)\n", This, pSynthSink);
This->pSynthSink = (IDirectMusicSynthSinkImpl*)pSynthSink;
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_Render (LPDIRECTMUSICSYNTH8 iface, short* pBuffer, DWORD dwLength, LONGLONG llPosition)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_Render (LPDIRECTMUSICSYNTH8 iface, short* pBuffer, DWORD dwLength, LONGLONG llPosition) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
FIXME("(%p, %p, %ld, %lli): stub\n", This, pBuffer, dwLength, llPosition);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_SetChannelPriority (LPDIRECTMUSICSYNTH8 iface, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_SetChannelPriority (LPDIRECTMUSICSYNTH8 iface, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) {
/*ICOM_THIS(IDirectMusicSynth8Impl,iface); */
-
/* silenced because of too many messages - 1000 groups * 16 channels ;=) */
/*FIXME("(%p, %ld, %ld, %ld): stub\n", This, dwChannelGroup, dwChannel, dwPriority); */
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_GetChannelPriority (LPDIRECTMUSICSYNTH8 iface, DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_GetChannelPriority (LPDIRECTMUSICSYNTH8 iface, DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
FIXME("(%p, %ld, %ld, %p): stub\n", This, dwChannelGroup, dwChannel, pdwPriority);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_GetFormat (LPDIRECTMUSICSYNTH8 iface, LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSiz)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_GetFormat (LPDIRECTMUSICSYNTH8 iface, LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSiz) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
FIXME("(%p, %p, %p): stub\n", This, pWaveFormatEx, pdwWaveFormatExSiz);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_GetAppend (LPDIRECTMUSICSYNTH8 iface, DWORD* pdwAppend)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_GetAppend (LPDIRECTMUSICSYNTH8 iface, DWORD* pdwAppend) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pdwAppend);
-
return S_OK;
}
-/* IDirectMusicSynth8 IDirectMusicSynth8 part: */
-HRESULT WINAPI IDirectMusicSynth8Impl_PlayVoice (LPDIRECTMUSICSYNTH8 iface, REFERENCE_TIME rt, DWORD dwVoiceId, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwDLId, long prPitch, long vrVolume, SAMPLE_TIME stVoiceStart, SAMPLE_TIME stLoopStart, SAMPLE_TIME stLoopEnd)
-{
+/* IDirectMusicSynth8Impl IDirectMusicSynth8 part: */
+HRESULT WINAPI IDirectMusicSynth8Impl_PlayVoice (LPDIRECTMUSICSYNTH8 iface, REFERENCE_TIME rt, DWORD dwVoiceId, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwDLId, long prPitch, long vrVolume, SAMPLE_TIME stVoiceStart, SAMPLE_TIME stLoopStart, SAMPLE_TIME stLoopEnd) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
FIXME("(%p, %lli, %ld, %ld, %ld, %ld, %li, %li,%lli, %lli, %lli): stub\n", This, rt, dwVoiceId, dwChannelGroup, dwChannel, dwDLId, prPitch, vrVolume, stVoiceStart, stLoopStart, stLoopEnd);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_StopVoice (LPDIRECTMUSICSYNTH8 iface, REFERENCE_TIME rt, DWORD dwVoiceId)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_StopVoice (LPDIRECTMUSICSYNTH8 iface, REFERENCE_TIME rt, DWORD dwVoiceId) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
FIXME("(%p, %lli, %ld): stub\n", This, rt, dwVoiceId);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_GetVoiceState (LPDIRECTMUSICSYNTH8 iface, DWORD dwVoice[], DWORD cbVoice, DMUS_VOICE_STATE dwVoiceState[])
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_GetVoiceState (LPDIRECTMUSICSYNTH8 iface, DWORD dwVoice[], DWORD cbVoice, DMUS_VOICE_STATE dwVoiceState[]) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
FIXME("(%p, %p, %ld, %p): stub\n", This, dwVoice, cbVoice, dwVoiceState);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_Refresh (LPDIRECTMUSICSYNTH8 iface, DWORD dwDownloadID, DWORD dwFlags)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_Refresh (LPDIRECTMUSICSYNTH8 iface, DWORD dwDownloadID, DWORD dwFlags) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
FIXME("(%p, %ld, %ld): stub\n", This, dwDownloadID, dwFlags);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynth8Impl_AssignChannelToBuses (LPDIRECTMUSICSYNTH8 iface, DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwBuses, DWORD cBuses)
-{
+HRESULT WINAPI IDirectMusicSynth8Impl_AssignChannelToBuses (LPDIRECTMUSICSYNTH8 iface, DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwBuses, DWORD cBuses) {
ICOM_THIS(IDirectMusicSynth8Impl,iface);
-
FIXME("(%p, %ld, %ld, %p, %ld): stub\n", This, dwChannelGroup, dwChannel, pdwBuses, cBuses);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicSynth8) DirectMusicSynth8_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicSynth8) DirectMusicSynth8_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
IDirectMusicSynth8Impl_QueryInterface,
IDirectMusicSynth8Impl_AddRef,
@@ -301,39 +221,31 @@
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicSynth (LPCGUID lpcGUID, LPDIRECTMUSICSYNTH8* ppDMSynth, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicSynth8Impl *dmsynth;
+HRESULT WINAPI DMUSIC_CreateDirectMusicSynthImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicSynth8Impl *obj;
- TRACE("(%p,%p,%p)\n", lpcGUID, ppDMSynth, pUnkOuter);
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicSynth) ||
- IsEqualIID (lpcGUID, &IID_IDirectMusicSynth8)) {
- dmsynth = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSynth8Impl));
- if (NULL == dmsynth) {
- *ppDMSynth = (LPDIRECTMUSICSYNTH8) NULL;
- return E_OUTOFMEMORY;
- }
- dmsynth->lpVtbl = &DirectMusicSynth8_Vtbl;
- dmsynth->ref = 1;
- /* fill in caps */
- dmsynth->pCaps.dwSize = sizeof(DMUS_PORTCAPS);
- dmsynth->pCaps.dwFlags = DMUS_PC_DLS | DMUS_PC_SOFTWARESYNTH | DMUS_PC_DIRECTSOUND | DMUS_PC_DLS2 | DMUS_PC_AUDIOPATH | DMUS_PC_WAVE;
- dmsynth->pCaps.guidPort = CLSID_DirectMusicSynth;
- dmsynth->pCaps.dwClass = DMUS_PC_OUTPUTCLASS;
- dmsynth->pCaps.dwType = DMUS_PORT_WINMM_DRIVER;
- dmsynth->pCaps.dwMemorySize = DMUS_PC_SYSTEMMEMORY;
- dmsynth->pCaps.dwMaxChannelGroups = 1000;
- dmsynth->pCaps.dwMaxVoices = 1000;
- dmsynth->pCaps.dwMaxAudioChannels = -1;
- dmsynth->pCaps.dwEffectFlags = DMUS_EFFECT_REVERB | DMUS_EFFECT_CHORUS | DMUS_EFFECT_DELAY;
- MultiByteToWideChar (CP_ACP, 0, "Microsotf Synthesizer", -1, dmsynth->pCaps.wszDescription, sizeof(dmsynth->pCaps.wszDescription)/sizeof(WCHAR));
- /* assign latency clock */
- /*DMUSIC_CreateReferenceClock (&IID_IReferenceClock, (LPREFERENCECLOCK*)&This->pLatencyClock, NULL); */
-
- *ppDMSynth = (LPDIRECTMUSICSYNTH8) dmsynth;
- return S_OK;
+ TRACE("(%p,%p,%p)\n", lpcGUID, ppobj, pUnkOuter);
+ obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSynth8Impl));
+ if (NULL == obj) {
+ *ppobj = (LPDIRECTMUSICSYNTH8) NULL;
+ return E_OUTOFMEMORY;
}
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
+ obj->lpVtbl = &DirectMusicSynth8_Vtbl;
+ obj->ref = 0;
+ /* fill in caps */
+ obj->pCaps.dwSize = sizeof(DMUS_PORTCAPS);
+ obj->pCaps.dwFlags = DMUS_PC_DLS | DMUS_PC_SOFTWARESYNTH | DMUS_PC_DIRECTSOUND | DMUS_PC_DLS2 | DMUS_PC_AUDIOPATH | DMUS_PC_WAVE;
+ obj->pCaps.guidPort = CLSID_DirectMusicSynth;
+ obj->pCaps.dwClass = DMUS_PC_OUTPUTCLASS;
+ obj->pCaps.dwType = DMUS_PORT_WINMM_DRIVER;
+ obj->pCaps.dwMemorySize = DMUS_PC_SYSTEMMEMORY;
+ obj->pCaps.dwMaxChannelGroups = 1000;
+ obj->pCaps.dwMaxVoices = 1000;
+ obj->pCaps.dwMaxAudioChannels = -1;
+ obj->pCaps.dwEffectFlags = DMUS_EFFECT_REVERB | DMUS_EFFECT_CHORUS | DMUS_EFFECT_DELAY;
+ MultiByteToWideChar (CP_ACP, 0, "Microsotf Synthesizer", -1, obj->pCaps.wszDescription, sizeof(obj->pCaps.wszDescription)/sizeof(WCHAR));
+ /* assign latency clock */
+ /*DMUSIC_CreateReferenceClockImpl (&IID_IReferenceClock, (LPVOID*)&This->pLatencyClock, NULL); */
+
+ return IDirectMusicSynth8Impl_QueryInterface ((LPDIRECTMUSICSYNTH8)obj, lpcGUID, ppobj);
}
diff --git a/dlls/dmsynth/synthsink.c b/dlls/dmsynth/synthsink.c
index fad7de4..49a7077 100644
--- a/dlls/dmsynth/synthsink.c
+++ b/dlls/dmsynth/synthsink.c
@@ -1,6 +1,6 @@
/* IDirectMusicSynthSink Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,21 +17,12 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmsynth_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmsynth);
-/* IDirectMusicSynthSink IUnknown part: */
-HRESULT WINAPI IDirectMusicSynthSinkImpl_QueryInterface (LPDIRECTMUSICSYNTHSINK iface, REFIID riid, LPVOID *ppobj)
-{
+/* IDirectMusicSynthSinkImpl IUnknown part: */
+HRESULT WINAPI IDirectMusicSynthSinkImpl_QueryInterface (LPDIRECTMUSICSYNTHSINK iface, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IDirectMusicSynthSinkImpl,iface);
if (IsEqualIID (riid, &IID_IUnknown) ||
@@ -40,20 +31,17 @@
*ppobj = This;
return S_OK;
}
-
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicSynthSinkImpl_AddRef (LPDIRECTMUSICSYNTHSINK iface)
-{
+ULONG WINAPI IDirectMusicSynthSinkImpl_AddRef (LPDIRECTMUSICSYNTHSINK iface) {
ICOM_THIS(IDirectMusicSynthSinkImpl,iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicSynthSinkImpl_Release (LPDIRECTMUSICSYNTHSINK iface)
-{
+ULONG WINAPI IDirectMusicSynthSinkImpl_Release (LPDIRECTMUSICSYNTHSINK iface) {
ICOM_THIS(IDirectMusicSynthSinkImpl,iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
@@ -63,81 +51,56 @@
return ref;
}
-/* IDirectMusicSynth IDirectMusicSynth part: */
-HRESULT WINAPI IDirectMusicSynthSinkImpl_Init (LPDIRECTMUSICSYNTHSINK iface, IDirectMusicSynth* pSynth)
-{
+/* IDirectMusicSynthSinkImpl IDirectMusicSynthSink part: */
+HRESULT WINAPI IDirectMusicSynthSinkImpl_Init (LPDIRECTMUSICSYNTHSINK iface, IDirectMusicSynth* pSynth) {
ICOM_THIS(IDirectMusicSynthSinkImpl,iface);
-
FIXME("(%p, %p): stub\n", This, pSynth);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynthSinkImpl_SetMasterClock (LPDIRECTMUSICSYNTHSINK iface, IReferenceClock* pClock)
-{
+HRESULT WINAPI IDirectMusicSynthSinkImpl_SetMasterClock (LPDIRECTMUSICSYNTHSINK iface, IReferenceClock* pClock) {
ICOM_THIS(IDirectMusicSynthSinkImpl,iface);
-
FIXME("(%p, %p): stub\n", This, pClock);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynthSinkImpl_GetLatencyClock (LPDIRECTMUSICSYNTHSINK iface, IReferenceClock** ppClock)
-{
+HRESULT WINAPI IDirectMusicSynthSinkImpl_GetLatencyClock (LPDIRECTMUSICSYNTHSINK iface, IReferenceClock** ppClock) {
ICOM_THIS(IDirectMusicSynthSinkImpl,iface);
-
FIXME("(%p, %p): stub\n", This, ppClock);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynthSinkImpl_Activate (LPDIRECTMUSICSYNTHSINK iface, BOOL fEnable)
-{
+HRESULT WINAPI IDirectMusicSynthSinkImpl_Activate (LPDIRECTMUSICSYNTHSINK iface, BOOL fEnable) {
ICOM_THIS(IDirectMusicSynthSinkImpl,iface);
-
FIXME("(%p, %d): stub\n", This, fEnable);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynthSinkImpl_SampleToRefTime (LPDIRECTMUSICSYNTHSINK iface, LONGLONG llSampleTime, REFERENCE_TIME* prfTime)
-{
+HRESULT WINAPI IDirectMusicSynthSinkImpl_SampleToRefTime (LPDIRECTMUSICSYNTHSINK iface, LONGLONG llSampleTime, REFERENCE_TIME* prfTime) {
ICOM_THIS(IDirectMusicSynthSinkImpl,iface);
-
FIXME("(%p, %lli, %p): stub\n", This, llSampleTime, prfTime);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynthSinkImpl_RefTimeToSample (LPDIRECTMUSICSYNTHSINK iface, REFERENCE_TIME rfTime, LONGLONG* pllSampleTime)
-{
+HRESULT WINAPI IDirectMusicSynthSinkImpl_RefTimeToSample (LPDIRECTMUSICSYNTHSINK iface, REFERENCE_TIME rfTime, LONGLONG* pllSampleTime) {
ICOM_THIS(IDirectMusicSynthSinkImpl,iface);
-
FIXME("(%p, %lli, %p): stub\n", This, rfTime, pllSampleTime );
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynthSinkImpl_SetDirectSound (LPDIRECTMUSICSYNTHSINK iface, LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer)
-{
+HRESULT WINAPI IDirectMusicSynthSinkImpl_SetDirectSound (LPDIRECTMUSICSYNTHSINK iface, LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer) {
ICOM_THIS(IDirectMusicSynthSinkImpl,iface);
-
FIXME("(%p, %p, %p): stub\n", This, pDirectSound, pDirectSoundBuffer);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicSynthSinkImpl_GetDesiredBufferSize (LPDIRECTMUSICSYNTHSINK iface, LPDWORD pdwBufferSizeInSamples)
-{
+HRESULT WINAPI IDirectMusicSynthSinkImpl_GetDesiredBufferSize (LPDIRECTMUSICSYNTHSINK iface, LPDWORD pdwBufferSizeInSamples) {
ICOM_THIS(IDirectMusicSynthSinkImpl,iface);
-
FIXME("(%p, %p): stub\n", This, pdwBufferSizeInSamples);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicSynthSink) DirectMusicSynthSink_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicSynthSink) DirectMusicSynthSink_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
IDirectMusicSynthSinkImpl_QueryInterface,
IDirectMusicSynthSinkImpl_AddRef,
@@ -153,23 +116,17 @@
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicSynthSink (LPCGUID lpcGUID, LPDIRECTMUSICSYNTHSINK* ppDMSynthSink, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicSynthSinkImpl *dmsink;
+HRESULT WINAPI DMUSIC_CreateDirectMusicSynthSinkImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicSynthSinkImpl *obj;
- TRACE("(%p,%p,%p)\n", lpcGUID, ppDMSynthSink, pUnkOuter);
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicSynthSink)) {
- dmsink = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSynthSinkImpl));
- if (NULL == dmsink) {
- *ppDMSynthSink = (LPDIRECTMUSICSYNTHSINK) NULL;
- return E_OUTOFMEMORY;
- }
- dmsink->lpVtbl = &DirectMusicSynthSink_Vtbl;
- dmsink->ref = 1;
- *ppDMSynthSink = (LPDIRECTMUSICSYNTHSINK) dmsink;
- return S_OK;
+ TRACE("(%p,%p,%p)\n", lpcGUID, ppobj, pUnkOuter);
+ obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicSynthSinkImpl));
+ if (NULL == obj) {
+ *ppobj = (LPDIRECTMUSICSYNTHSINK) NULL;
+ return E_OUTOFMEMORY;
}
+ obj->lpVtbl = &DirectMusicSynthSink_Vtbl;
+ obj->ref = 0;
- WARN("No interface found\n");
- return E_NOINTERFACE;
+ return IDirectMusicSynthSinkImpl_QueryInterface((LPDIRECTMUSICSYNTHSINK)obj, lpcGUID, ppobj);
}
diff --git a/dlls/dmsynth/version.rc b/dlls/dmsynth/version.rc
index 4ccbc66..5051092 100644
--- a/dlls/dmsynth/version.rc
+++ b/dlls/dmsynth/version.rc
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc <rok.mandeljc@gimb.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -18,10 +18,10 @@
#define WINE_FILEDESCRIPTION_STR "Wine DirectMusic Software Synthesizer"
#define WINE_FILENAME_STR "dmsynth.dll"
-#define WINE_FILEVERSION 4,8,1,881
-#define WINE_FILEVERSION_STR "4.8.1.881"
-#define WINE_PRODUCTVERSION 4,8,1,881
-#define WINE_PRODUCTVERSION_STR "4.8"
+#define WINE_FILEVERSION 4,9,0,900
+#define WINE_FILEVERSION_STR "4.9.0.900"
+#define WINE_PRODUCTVERSION 4,9,0,900
+#define WINE_PRODUCTVERSION_STR "4.9"
#define WINE_PRODUCTNAME_STR "DirectX"
#include "wine/wine_common_ver.rc"
diff --git a/dlls/dmusic/buffer.c b/dlls/dmusic/buffer.c
index 8dd73eb..04af316 100644
--- a/dlls/dmusic/buffer.c
+++ b/dlls/dmusic/buffer.c
@@ -1,6 +1,6 @@
/* IDirectMusicBuffer Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,54 +17,30 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include "config.h"
-
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winreg.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winerror.h"
-#include "mmsystem.h"
-#include "winternl.h"
-#include "mmddk.h"
-#include "wine/windef16.h"
-#include "wine/winbase16.h"
-#include "wine/debug.h"
-#include "dsound.h"
-
#include "dmusic_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmusic);
-/* IDirectMusicBuffer IUnknown parts follow: */
-HRESULT WINAPI IDirectMusicBufferImpl_QueryInterface (LPDIRECTMUSICBUFFER iface, REFIID riid, LPVOID *ppobj)
-{
+/* IDirectMusicBufferImpl IUnknown part: */
+HRESULT WINAPI IDirectMusicBufferImpl_QueryInterface (LPDIRECTMUSICBUFFER iface, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IDirectMusicBufferImpl,iface);
-
if (IsEqualIID (riid, &IID_IUnknown)
|| IsEqualIID (riid, &IID_IDirectMusicBuffer)) {
IDirectMusicBufferImpl_AddRef(iface);
*ppobj = This;
return S_OK;
}
-
WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicBufferImpl_AddRef (LPDIRECTMUSICBUFFER iface)
-{
+ULONG WINAPI IDirectMusicBufferImpl_AddRef (LPDIRECTMUSICBUFFER iface) {
ICOM_THIS(IDirectMusicBufferImpl,iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicBufferImpl_Release (LPDIRECTMUSICBUFFER iface)
-{
+ULONG WINAPI IDirectMusicBufferImpl_Release (LPDIRECTMUSICBUFFER iface) {
ICOM_THIS(IDirectMusicBufferImpl,iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
@@ -74,126 +50,86 @@
return ref;
}
-/* IDirectMusicBuffer Interface follow: */
-HRESULT WINAPI IDirectMusicBufferImpl_Flush (LPDIRECTMUSICBUFFER iface)
-{
+/* IDirectMusicBufferImpl IDirectMusicBuffer part: */
+HRESULT WINAPI IDirectMusicBufferImpl_Flush (LPDIRECTMUSICBUFFER iface) {
ICOM_THIS(IDirectMusicBufferImpl,iface);
-
FIXME("(%p): stub\n", This);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBufferImpl_TotalTime (LPDIRECTMUSICBUFFER iface, LPREFERENCE_TIME prtTime)
-{
+HRESULT WINAPI IDirectMusicBufferImpl_TotalTime (LPDIRECTMUSICBUFFER iface, LPREFERENCE_TIME prtTime) {
ICOM_THIS(IDirectMusicBufferImpl,iface);
-
- FIXME("(%p, %p): stub\n", This, prtTime);
-
+ FIXME("(%p, %p): stub\n", This, prtTime);
return S_OK;
}
-HRESULT WINAPI IDirectMusicBufferImpl_PackStructured (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD dwChannelMessage)
-{
+HRESULT WINAPI IDirectMusicBufferImpl_PackStructured (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD dwChannelMessage) {
ICOM_THIS(IDirectMusicBufferImpl,iface);
-
FIXME("(%p, %lli, %ld, %ld): stub\n", This, rt, dwChannelGroup, dwChannelMessage);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBufferImpl_PackUnstructured (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD cb, LPBYTE lpb)
-{
+HRESULT WINAPI IDirectMusicBufferImpl_PackUnstructured (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD cb, LPBYTE lpb) {
ICOM_THIS(IDirectMusicBufferImpl,iface);
-
FIXME("(%p, %lli, %ld, %ld, %p): stub\n", This, rt, dwChannelGroup, cb, lpb);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBufferImpl_ResetReadPtr (LPDIRECTMUSICBUFFER iface)
-{
+HRESULT WINAPI IDirectMusicBufferImpl_ResetReadPtr (LPDIRECTMUSICBUFFER iface) {
ICOM_THIS(IDirectMusicBufferImpl,iface);
-
FIXME("(%p): stub\n", This);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBufferImpl_GetNextEvent (LPDIRECTMUSICBUFFER iface, LPREFERENCE_TIME prt, LPDWORD pdwChannelGroup, LPDWORD pdwLength, LPBYTE* ppData)
-{
+HRESULT WINAPI IDirectMusicBufferImpl_GetNextEvent (LPDIRECTMUSICBUFFER iface, LPREFERENCE_TIME prt, LPDWORD pdwChannelGroup, LPDWORD pdwLength, LPBYTE* ppData) {
ICOM_THIS(IDirectMusicBufferImpl,iface);
-
FIXME("(%p, %p, %p, %p, %p): stub\n", This, prt, pdwChannelGroup, pdwLength, ppData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBufferImpl_GetRawBufferPtr (LPDIRECTMUSICBUFFER iface, LPBYTE* ppData)
-{
+HRESULT WINAPI IDirectMusicBufferImpl_GetRawBufferPtr (LPDIRECTMUSICBUFFER iface, LPBYTE* ppData) {
ICOM_THIS(IDirectMusicBufferImpl,iface);
-
FIXME("(%p, %p): stub\n", This, ppData);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBufferImpl_GetStartTime (LPDIRECTMUSICBUFFER iface, LPREFERENCE_TIME prt)
-{
+HRESULT WINAPI IDirectMusicBufferImpl_GetStartTime (LPDIRECTMUSICBUFFER iface, LPREFERENCE_TIME prt) {
ICOM_THIS(IDirectMusicBufferImpl,iface);
-
FIXME("(%p, %p): stub\n", This, prt);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBufferImpl_GetUsedBytes (LPDIRECTMUSICBUFFER iface, LPDWORD pcb)
-{
+HRESULT WINAPI IDirectMusicBufferImpl_GetUsedBytes (LPDIRECTMUSICBUFFER iface, LPDWORD pcb) {
ICOM_THIS(IDirectMusicBufferImpl,iface);
-
FIXME("(%p, %p): stub\n", This, pcb);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBufferImpl_GetMaxBytes (LPDIRECTMUSICBUFFER iface, LPDWORD pcb)
-{
+HRESULT WINAPI IDirectMusicBufferImpl_GetMaxBytes (LPDIRECTMUSICBUFFER iface, LPDWORD pcb) {
ICOM_THIS(IDirectMusicBufferImpl,iface);
-
FIXME("(%p, %p): stub\n", This, pcb);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBufferImpl_GetBufferFormat (LPDIRECTMUSICBUFFER iface, LPGUID pGuidFormat)
-{
+HRESULT WINAPI IDirectMusicBufferImpl_GetBufferFormat (LPDIRECTMUSICBUFFER iface, LPGUID pGuidFormat) {
ICOM_THIS(IDirectMusicBufferImpl,iface);
-
FIXME("(%p, %p): stub\n", This, pGuidFormat);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBufferImpl_SetStartTime (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt)
-{
+HRESULT WINAPI IDirectMusicBufferImpl_SetStartTime (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt) {
ICOM_THIS(IDirectMusicBufferImpl,iface);
-
FIXME("(%p, %lli): stub\n", This, rt);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicBufferImpl_SetUsedBytes (LPDIRECTMUSICBUFFER iface, DWORD cb)
-{
+HRESULT WINAPI IDirectMusicBufferImpl_SetUsedBytes (LPDIRECTMUSICBUFFER iface, DWORD cb) {
ICOM_THIS(IDirectMusicBufferImpl,iface);
-
FIXME("(%p, %ld): stub\n", This, cb);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicBuffer) DirectMusicBuffer_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicBuffer) DirectMusicBuffer_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
IDirectMusicBufferImpl_QueryInterface,
IDirectMusicBufferImpl_AddRef,
@@ -214,13 +150,16 @@
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicBuffer (LPCGUID lpcGUID, LPDIRECTMUSICBUFFER* ppDMBuff, LPUNKNOWN pUnkOuter)
-{
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicBuffer)) {
- FIXME("Not yet\n");
- return E_NOINTERFACE;
- }
+HRESULT WINAPI DMUSIC_CreateDirectMusicBufferImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicBufferImpl* dmbuff;
- WARN("No interface found\n");
- return E_NOINTERFACE;
+ dmbuff = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicBufferImpl));
+ if (NULL == dmbuff) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ dmbuff->lpVtbl = &DirectMusicBuffer_Vtbl;
+ dmbuff->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicBufferImpl_QueryInterface ((LPDIRECTMUSICBUFFER)dmbuff, lpcGUID, ppobj);
}
diff --git a/dlls/dmusic/clock.c b/dlls/dmusic/clock.c
index 01914b6..85cea5a 100644
--- a/dlls/dmusic/clock.c
+++ b/dlls/dmusic/clock.c
@@ -1,6 +1,6 @@
/* IReferenceClock Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,21 +17,12 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmusic_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmusic);
-/* IReferenceClock IUnknown parts follow: */
-HRESULT WINAPI IReferenceClockImpl_QueryInterface (IReferenceClock *iface, REFIID riid, LPVOID *ppobj)
-{
+/* IReferenceClockImpl IUnknown part: */
+HRESULT WINAPI IReferenceClockImpl_QueryInterface (IReferenceClock *iface, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IReferenceClockImpl,iface);
if (IsEqualIID (riid, &IID_IUnknown) ||
@@ -40,20 +31,17 @@
*ppobj = This;
return S_OK;
}
-
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IReferenceClockImpl_AddRef (IReferenceClock *iface)
-{
+ULONG WINAPI IReferenceClockImpl_AddRef (IReferenceClock *iface) {
ICOM_THIS(IReferenceClockImpl,iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IReferenceClockImpl_Release (IReferenceClock *iface)
-{
+ULONG WINAPI IReferenceClockImpl_Release (IReferenceClock *iface) {
ICOM_THIS(IReferenceClockImpl,iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
@@ -63,46 +51,33 @@
return ref;
}
-/* IReferenceClock Interface follow: */
-HRESULT WINAPI IReferenceClockImpl_GetTime (IReferenceClock *iface, REFERENCE_TIME* pTime)
-{
+/* IReferenceClockImpl IReferenceClock part: */
+HRESULT WINAPI IReferenceClockImpl_GetTime (IReferenceClock *iface, REFERENCE_TIME* pTime) {
ICOM_THIS(IReferenceClockImpl,iface);
-
TRACE("(%p, %p)\n", This, pTime);
*pTime = This->rtTime;
-
return S_OK;
}
-HRESULT WINAPI IReferenceClockImpl_AdviseTime (IReferenceClock *iface, REFERENCE_TIME baseTime, REFERENCE_TIME streamTime, HANDLE hEvent, DWORD* pdwAdviseCookie)
-{
+HRESULT WINAPI IReferenceClockImpl_AdviseTime (IReferenceClock *iface, REFERENCE_TIME baseTime, REFERENCE_TIME streamTime, HANDLE hEvent, DWORD* pdwAdviseCookie) {
ICOM_THIS(IReferenceClockImpl,iface);
-
FIXME("(%p, %lli, %lli, %p, %p): stub\n", This, baseTime, streamTime, hEvent, pdwAdviseCookie);
-
return S_OK;
}
-HRESULT WINAPI IReferenceClockImpl_AdvisePeriodic (IReferenceClock *iface, REFERENCE_TIME startTime, REFERENCE_TIME periodTime, HANDLE hSemaphore, DWORD* pdwAdviseCookie)
-{
+HRESULT WINAPI IReferenceClockImpl_AdvisePeriodic (IReferenceClock *iface, REFERENCE_TIME startTime, REFERENCE_TIME periodTime, HANDLE hSemaphore, DWORD* pdwAdviseCookie) {
ICOM_THIS(IReferenceClockImpl,iface);
-
FIXME("(%p, %lli, %lli, %p, %p): stub\n", This, startTime, periodTime, hSemaphore, pdwAdviseCookie);
-
return S_OK;
}
-HRESULT WINAPI IReferenceClockImpl_Unadvise (IReferenceClock *iface, DWORD dwAdviseCookie)
-{
+HRESULT WINAPI IReferenceClockImpl_Unadvise (IReferenceClock *iface, DWORD dwAdviseCookie) {
ICOM_THIS(IReferenceClockImpl,iface);
-
FIXME("(%p, %ld): stub\n", This, dwAdviseCookie);
-
return S_OK;
}
-ICOM_VTABLE(IReferenceClock) ReferenceClock_Vtbl =
-{
+ICOM_VTABLE(IReferenceClock) ReferenceClock_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
IReferenceClockImpl_QueryInterface,
IReferenceClockImpl_AddRef,
@@ -114,26 +89,18 @@
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateReferenceClock (LPCGUID lpcGUID, IReferenceClock** ppRC, LPUNKNOWN pUnkOuter)
-{
+HRESULT WINAPI DMUSIC_CreateReferenceClockImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
IReferenceClockImpl* clock;
-
- if (IsEqualIID (lpcGUID, &IID_IReferenceClock))
- {
- clock = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IReferenceClockImpl));
- if (NULL == clock) {
- *ppRC = NULL;
- return E_OUTOFMEMORY;
- }
- clock->lpVtbl = &ReferenceClock_Vtbl;
- clock->ref = 1;
- clock->rtTime = 0;
- clock->pClockInfo.dwSize = sizeof (DMUS_CLOCKINFO);
-
- *ppRC = (IReferenceClock *) clock;
- return S_OK;
+
+ clock = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IReferenceClockImpl));
+ if (NULL == clock) {
+ *ppobj = NULL;
+ return E_OUTOFMEMORY;
}
-
- WARN("No interface found\n");
- return E_NOINTERFACE;
+ clock->lpVtbl = &ReferenceClock_Vtbl;
+ clock->ref = 0; /* will be inited by QueryInterface */
+ clock->rtTime = 0;
+ clock->pClockInfo.dwSize = sizeof (DMUS_CLOCKINFO);
+
+ return IReferenceClockImpl_QueryInterface ((IReferenceClock *)clock, lpcGUID, ppobj);
}
diff --git a/dlls/dmusic/collection.c b/dlls/dmusic/collection.c
index 903a3bb..0550d08 100644
--- a/dlls/dmusic/collection.c
+++ b/dlls/dmusic/collection.c
@@ -1,6 +1,6 @@
/* IDirectMusicCollection Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,44 +17,48 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmusic_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmusic);
+WINE_DECLARE_DEBUG_CHANNEL(dmfile);
-/* IDirectMusicCollection IUnknown parts follow: */
-HRESULT WINAPI IDirectMusicCollectionImpl_QueryInterface (LPDIRECTMUSICCOLLECTION iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicCollectionImpl,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IDirectMusicCollection)) {
- IDirectMusicCollectionImpl_AddRef(iface);
- *ppobj = This;
+/*****************************************************************************
+ * IDirectMusicCollectionImpl implementation
+ */
+/* IDirectMusicCollectionImpl IUnknown part: */
+HRESULT WINAPI IDirectMusicCollectionImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicCollectionImpl, UnknownVtbl, iface);
+
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPVOID)&This->UnknownVtbl;
+ IDirectMusicCollectionImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicCollection)) {
+ *ppobj = (LPVOID)&This->CollectionVtbl;
+ IDirectMusicCollectionImpl_IDirectMusicCollection_AddRef ((LPDIRECTMUSICCOLLECTION)&This->CollectionVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
+ *ppobj = (LPVOID)&This->ObjectVtbl;
+ IDirectMusicCollectionImpl_IDirectMusicObject_AddRef ((LPDIRECTMUSICOBJECT)&This->ObjectVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IPersistStream)) {
+ *ppobj = (LPVOID)&This->PersistStreamVtbl;
+ IDirectMusicCollectionImpl_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
return S_OK;
}
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+
+ WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicCollectionImpl_AddRef (LPDIRECTMUSICCOLLECTION iface)
-{
- ICOM_THIS(IDirectMusicCollectionImpl,iface);
+ULONG WINAPI IDirectMusicCollectionImpl_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicCollectionImpl, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicCollectionImpl_Release (LPDIRECTMUSICCOLLECTION iface)
-{
- ICOM_THIS(IDirectMusicCollectionImpl,iface);
+ULONG WINAPI IDirectMusicCollectionImpl_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicCollectionImpl, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -63,276 +67,703 @@
return ref;
}
+ICOM_VTABLE(IUnknown) DirectMusicCollection_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicCollectionImpl_IUnknown_QueryInterface,
+ IDirectMusicCollectionImpl_IUnknown_AddRef,
+ IDirectMusicCollectionImpl_IUnknown_Release
+};
+
+/* IDirectMusicCollectionImpl IDirectMusicCollection part: */
+HRESULT WINAPI IDirectMusicCollectionImpl_IDirectMusicCollection_QueryInterface (LPDIRECTMUSICCOLLECTION iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicCollectionImpl, CollectionVtbl, iface);
+ return IDirectMusicCollectionImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicCollectionImpl_IDirectMusicCollection_AddRef (LPDIRECTMUSICCOLLECTION iface) {
+ ICOM_THIS_MULTI(IDirectMusicCollectionImpl, CollectionVtbl, iface);
+ return IDirectMusicCollectionImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicCollectionImpl_IDirectMusicCollection_Release (LPDIRECTMUSICCOLLECTION iface) {
+ ICOM_THIS_MULTI(IDirectMusicCollectionImpl, CollectionVtbl, iface);
+ return IDirectMusicCollectionImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
/* IDirectMusicCollection Interface follow: */
-HRESULT WINAPI IDirectMusicCollectionImpl_GetInstrument (LPDIRECTMUSICCOLLECTION iface, DWORD dwPatch, IDirectMusicInstrument** ppInstrument)
-{
- ICOM_THIS(IDirectMusicCollectionImpl,iface);
- int i;
-
+HRESULT WINAPI IDirectMusicCollectionImpl_IDirectMusicCollection_GetInstrument (LPDIRECTMUSICCOLLECTION iface, DWORD dwPatch, IDirectMusicInstrument** ppInstrument) {
+ ICOM_THIS_MULTI(IDirectMusicCollectionImpl, CollectionVtbl, iface);
+ DMUS_PRIVATE_INSTRUMENTENTRY *tmpEntry;
+ struct list *listEntry;
+ DWORD dwInstPatch;
+
TRACE("(%p, %ld, %p)\n", This, dwPatch, ppInstrument);
- for (i = 0; i < This->nrofinstruments; i++) {
- if (This->ppInstruments[i]->dwPatch == dwPatch) {
- *ppInstrument = (LPDIRECTMUSICINSTRUMENT)This->ppInstruments[i];
+
+ LIST_FOR_EACH (listEntry, &This->Instruments) {
+ tmpEntry = LIST_ENTRY(listEntry, DMUS_PRIVATE_INSTRUMENTENTRY, entry);
+ IDirectMusicInstrument_GetPatch (tmpEntry->pInstrument, &dwInstPatch);
+ if (dwPatch == dwInstPatch) {
+ *ppInstrument = (LPDIRECTMUSICINSTRUMENT)tmpEntry->pInstrument;
+ IDirectMusicInstrument_AddRef (tmpEntry->pInstrument);
+ IDirectMusicInstrumentImpl_Custom_Load (tmpEntry->pInstrument, This->pStm); /* load instrument before returning it */
+ TRACE(": returning instrument %p\n", *ppInstrument);
return S_OK;
}
+
}
+ TRACE(": instrument not found\n");
return DMUS_E_INVALIDPATCH;
}
-HRESULT WINAPI IDirectMusicCollectionImpl_EnumInstrument (LPDIRECTMUSICCOLLECTION iface, DWORD dwIndex, DWORD* pdwPatch, LPWSTR pwszName, DWORD dwNameLen)
-{
- ICOM_THIS(IDirectMusicCollectionImpl,iface);
-
+HRESULT WINAPI IDirectMusicCollectionImpl_IDirectMusicCollection_EnumInstrument (LPDIRECTMUSICCOLLECTION iface, DWORD dwIndex, DWORD* pdwPatch, LPWSTR pwszName, DWORD dwNameLen) {
+ ICOM_THIS_MULTI(IDirectMusicCollectionImpl, CollectionVtbl, iface);
+ int r = 0;
+ DMUS_PRIVATE_INSTRUMENTENTRY *tmpEntry;
+ struct list *listEntry;
+
TRACE("(%p, %ld, %p, %p, %ld)\n", This, dwIndex, pdwPatch, pwszName, dwNameLen);
- if (dwIndex > This->nrofinstruments)
- return S_FALSE;
- *pdwPatch = This->ppInstruments[dwIndex]->dwPatch;
- if (pwszName != NULL) {
- /*
- *pwszName = (LPWSTR)This->ppInstruments[dwIndex]->pwszName;
- *dwNameLen = wcslen (This->ppInstruments[dwIndex]->pwszName);
- */
+ LIST_FOR_EACH (listEntry, &This->Instruments) {
+ tmpEntry = LIST_ENTRY(listEntry, DMUS_PRIVATE_INSTRUMENTENTRY, entry);
+ if (r == dwIndex) {
+ ICOM_NAME_MULTI (IDirectMusicInstrumentImpl, InstrumentVtbl, tmpEntry->pInstrument, pInstrument);
+ IDirectMusicInstrument_GetPatch (tmpEntry->pInstrument, pdwPatch);
+ dwNameLen = strlenW (pInstrument->wszName);
+ strncpyW (pwszName, pInstrument->wszName, dwNameLen);
+ return S_OK;
+ }
+ r++;
+ }
+
+ return S_FALSE;
+}
+
+ICOM_VTABLE(IDirectMusicCollection) DirectMusicCollection_Collection_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicCollectionImpl_IDirectMusicCollection_QueryInterface,
+ IDirectMusicCollectionImpl_IDirectMusicCollection_AddRef,
+ IDirectMusicCollectionImpl_IDirectMusicCollection_Release,
+ IDirectMusicCollectionImpl_IDirectMusicCollection_GetInstrument,
+ IDirectMusicCollectionImpl_IDirectMusicCollection_EnumInstrument
+};
+
+/* IDirectMusicCollectionImpl IDirectMusicObject part: */
+HRESULT WINAPI IDirectMusicCollectionImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicCollectionImpl, ObjectVtbl, iface);
+ return IDirectMusicCollectionImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicCollectionImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicCollectionImpl, ObjectVtbl, iface);
+ return IDirectMusicCollectionImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicCollectionImpl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicCollectionImpl, ObjectVtbl, iface);
+ return IDirectMusicCollectionImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicCollectionImpl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicCollectionImpl, ObjectVtbl, iface);
+ TRACE("(%p, %p)\n", This, pDesc);
+ /* I think we shouldn't return pointer here since then values can be changed; it'd be a mess */
+ memcpy (pDesc, This->pDesc, This->pDesc->dwSize);
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicCollectionImpl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicCollectionImpl, ObjectVtbl, iface);
+ TRACE("(%p, %p): setting descriptor:\n", This, pDesc);
+ if (TRACE_ON(dmusic)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
+ }
+
+ /* According to MSDN, we should copy only given values, not whole struct */
+ if (pDesc->dwValidData & DMUS_OBJ_OBJECT)
+ memcpy (&This->pDesc->guidObject, &pDesc->guidObject, sizeof (pDesc->guidObject));
+ if (pDesc->dwValidData & DMUS_OBJ_CLASS)
+ memcpy (&This->pDesc->guidClass, &pDesc->guidClass, sizeof (pDesc->guidClass));
+ if (pDesc->dwValidData & DMUS_OBJ_NAME)
+ strncpyW (This->pDesc->wszName, pDesc->wszName, DMUS_MAX_NAME);
+ if (pDesc->dwValidData & DMUS_OBJ_CATEGORY)
+ strncpyW (This->pDesc->wszCategory, pDesc->wszCategory, DMUS_MAX_CATEGORY);
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME)
+ strncpyW (This->pDesc->wszFileName, pDesc->wszFileName, DMUS_MAX_FILENAME);
+ if (pDesc->dwValidData & DMUS_OBJ_VERSION)
+ memcpy (&This->pDesc->vVersion, &pDesc->vVersion, sizeof (pDesc->vVersion));
+ if (pDesc->dwValidData & DMUS_OBJ_DATE)
+ memcpy (&This->pDesc->ftDate, &pDesc->ftDate, sizeof (pDesc->ftDate));
+ if (pDesc->dwValidData & DMUS_OBJ_MEMORY) {
+ memcpy (&This->pDesc->llMemLength, &pDesc->llMemLength, sizeof (pDesc->llMemLength));
+ memcpy (This->pDesc->pbMemData, pDesc->pbMemData, sizeof (pDesc->pbMemData));
+ }
+ if (pDesc->dwValidData & DMUS_OBJ_STREAM) {
+ /* according to MSDN, we copy the stream */
+ IStream_Clone (pDesc->pStream, &This->pDesc->pStream);
+ }
+
+ /* add new flags */
+ This->pDesc->dwValidData |= pDesc->dwValidData;
+
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicCollectionImpl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicCollectionImpl, ObjectVtbl, iface);
+ DMUS_PRIVATE_CHUNK Chunk;
+ DWORD StreamSize, StreamCount, ListSize[1], ListCount[1];
+ LARGE_INTEGER liMove; /* used when skipping chunks */
+
+ TRACE("(%p, %p, %p)\n", This, pStream, pDesc);
+
+ /* FIXME: should this be determined from stream? */
+ pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&pDesc->guidClass, &CLSID_DirectMusicCollection, sizeof(CLSID));
+
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_RIFF: {
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ StreamSize = Chunk.dwSize - sizeof(FOURCC);
+ StreamCount = 0;
+ if (Chunk.fccID == mmioFOURCC('D','L','S',' ')) {
+ TRACE_(dmfile)(": collection form\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ StreamCount += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_DLID: {
+ TRACE_(dmfile)(": GUID chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read (pStream, &pDesc->guidObject, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_VERSION_CHUNK: {
+ TRACE_(dmfile)(": version chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read (pStream, &pDesc->vVersion, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CATEGORY_CHUNK: {
+ TRACE_(dmfile)(": category chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_CATEGORY;
+ IStream_Read (pStream, pDesc->wszCategory, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[0] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[0] = 0;
+ switch (Chunk.fccID) {
+ /* pure INFO list, such can be found in dls collections */
+ case mmioFOURCC('I','N','F','O'): {
+ TRACE_(dmfile)(": INFO list\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case mmioFOURCC('I','N','A','M'):{
+ CHAR szName[DMUS_MAX_NAME];
+ TRACE_(dmfile)(": name chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_NAME;
+ IStream_Read (pStream, szName, Chunk.dwSize, NULL);
+ MultiByteToWideChar (CP_ACP, 0, szName, -1, pDesc->wszName, DMUS_MAX_NAME);
+ if (even_or_odd(Chunk.dwSize)) {
+ ListCount[0] ++;
+ liMove.QuadPart = 1;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ }
+ break;
+ }
+ case mmioFOURCC('I','A','R','T'): {
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ if (even_or_odd(Chunk.dwSize)) {
+ ListCount[0] ++;
+ Chunk.dwSize++;
+ }
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','O','P'): {
+ TRACE_(dmfile)(": copyright chunk (ignored)\n");
+ if (even_or_odd(Chunk.dwSize)) {
+ ListCount[0] ++;
+ Chunk.dwSize++;
+ }
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','S','B','J'): {
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ if (even_or_odd(Chunk.dwSize)) {
+ ListCount[0] ++;
+ Chunk.dwSize++;
+ }
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','M','T'): {
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ if (even_or_odd(Chunk.dwSize)) {
+ ListCount[0] ++;
+ Chunk.dwSize++;
+ }
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ if (even_or_odd(Chunk.dwSize)) {
+ ListCount[0] ++;
+ Chunk.dwSize++;
+ }
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
+ } while (StreamCount < StreamSize);
+ break;
+ } else {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = StreamSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+
+ TRACE_(dmfile)(": reading finished\n");
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return DMUS_E_INVALIDFILE;
+ }
+ }
+
+ TRACE(": returning descriptor:\n");
+ if (TRACE_ON(dmusic)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
}
return S_OK;
}
-ICOM_VTABLE(IDirectMusicCollection) DirectMusicCollection_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicObject) DirectMusicCollection_Object_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicCollectionImpl_QueryInterface,
- IDirectMusicCollectionImpl_AddRef,
- IDirectMusicCollectionImpl_Release,
- IDirectMusicCollectionImpl_GetInstrument,
- IDirectMusicCollectionImpl_EnumInstrument
+ IDirectMusicCollectionImpl_IDirectMusicObject_QueryInterface,
+ IDirectMusicCollectionImpl_IDirectMusicObject_AddRef,
+ IDirectMusicCollectionImpl_IDirectMusicObject_Release,
+ IDirectMusicCollectionImpl_IDirectMusicObject_GetDescriptor,
+ IDirectMusicCollectionImpl_IDirectMusicObject_SetDescriptor,
+ IDirectMusicCollectionImpl_IDirectMusicObject_ParseDescriptor
};
+/* IDirectMusicCollectionImpl IPersistStream part: */
+HRESULT WINAPI IDirectMusicCollectionImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicCollectionImpl, PersistStreamVtbl, iface);
+ return IDirectMusicCollectionImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicCollectionImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicCollectionImpl, PersistStreamVtbl, iface);
+ return IDirectMusicCollectionImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicCollectionImpl_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicCollectionImpl, PersistStreamVtbl, iface);
+ return IDirectMusicCollectionImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicCollectionImpl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicCollectionImpl_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicCollectionImpl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
+ ICOM_THIS_MULTI(IDirectMusicCollectionImpl, PersistStreamVtbl, iface);
+
+ DMUS_PRIVATE_CHUNK Chunk;
+ DWORD StreamSize, StreamCount, ListSize[3], ListCount[3];
+ LARGE_INTEGER liMove; /* used when skipping chunks */
+ ULARGE_INTEGER dlibCollectionPosition, dlibInstrumentPosition, dlibWavePoolPosition;
+
+ IStream_AddRef (pStm); /* add count for later references */
+ liMove.QuadPart = 0;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, &dlibCollectionPosition); /* store offset, in case it'll be needed later */
+ This->liCollectionPosition.QuadPart = dlibCollectionPosition.QuadPart;
+ This->pStm = pStm;
+
+ IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_RIFF: {
+ IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ StreamSize = Chunk.dwSize - sizeof(FOURCC);
+ StreamCount = 0;
+ switch (Chunk.fccID) {
+ case FOURCC_DLS: {
+ TRACE_(dmfile)(": collection form\n");
+ do {
+ IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ StreamCount += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_COLH: {
+ TRACE_(dmfile)(": collection header chunk\n");
+ This->pHeader = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, Chunk.dwSize);
+ IStream_Read (pStm, This->pHeader, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_DLID: {
+ TRACE_(dmfile)(": DLID (GUID) chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read (pStm, &This->pDesc->guidObject, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_VERS: {
+ TRACE_(dmfile)(": version chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read (pStm, &This->pDesc->vVersion, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_PTBL: {
+ TRACE_(dmfile)(": pool table chunk\n");
+ This->pPoolTable = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(POOLTABLE));
+ IStream_Read (pStm, This->pPoolTable, sizeof(POOLTABLE), NULL);
+ Chunk.dwSize -= sizeof(POOLTABLE);
+ This->pPoolCues = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, This->pPoolTable->cCues*sizeof(POOLCUE));
+ IStream_Read (pStm, This->pPoolCues, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[0] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[0] = 0;
+ switch (Chunk.fccID) {
+ case mmioFOURCC('I','N','F','O'): {
+ TRACE_(dmfile)(": INFO list\n");
+ do {
+ IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case mmioFOURCC('I','N','A','M'): {
+ CHAR szName[DMUS_MAX_NAME];
+ TRACE_(dmfile)(": name chunk\n");
+ This->pDesc->dwValidData |= DMUS_OBJ_NAME;
+ IStream_Read (pStm, szName, Chunk.dwSize, NULL);
+ MultiByteToWideChar (CP_ACP, 0, szName, -1, This->pDesc->wszName, DMUS_MAX_NAME);
+ if (even_or_odd(Chunk.dwSize)) {
+ ListCount[0] ++;
+ liMove.QuadPart = 1;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ }
+ break;
+ }
+ case mmioFOURCC('I','A','R','T'): {
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ if (even_or_odd(Chunk.dwSize)) {
+ ListCount[0] ++;
+ Chunk.dwSize++;
+ }
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','O','P'): {
+ TRACE_(dmfile)(": copyright chunk\n");
+ This->szCopyright = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, Chunk.dwSize);
+ IStream_Read (pStm, This->szCopyright, Chunk.dwSize, NULL);
+ if (even_or_odd(Chunk.dwSize)) {
+ ListCount[0] ++;
+ liMove.QuadPart = 1;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ }
+ break;
+ }
+ case mmioFOURCC('I','S','B','J'): {
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ if (even_or_odd(Chunk.dwSize)) {
+ ListCount[0] ++;
+ Chunk.dwSize++;
+ }
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','M','T'): {
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ if (even_or_odd(Chunk.dwSize)) {
+ ListCount[0] ++;
+ Chunk.dwSize++;
+ }
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ if (even_or_odd(Chunk.dwSize)) {
+ ListCount[0] ++;
+ Chunk.dwSize++;
+ }
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ case FOURCC_WVPL: {
+ TRACE_(dmfile)(": wave pool list (mark & skip)\n");
+ liMove.QuadPart = 0;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, &dlibWavePoolPosition); /* store position */
+ This->liWavePoolTablePosition.QuadPart = dlibWavePoolPosition.QuadPart;
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case FOURCC_LINS: {
+ TRACE_(dmfile)(": instruments list\n");
+ do {
+ IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_LIST: {
+ IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[1] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[1] = 0;
+ switch (Chunk.fccID) {
+ case FOURCC_INS: {
+ LPDMUS_PRIVATE_INSTRUMENTENTRY pNewInstrument = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(DMUS_PRIVATE_INSTRUMENTENTRY));
+ TRACE_(dmfile)(": instrument list\n");
+ DMUSIC_CreateDirectMusicInstrumentImpl (&IID_IDirectMusicInstrument, (LPVOID*)&pNewInstrument->pInstrument, NULL); /* only way to create this one... even M$ does it discretly */
+ {
+ ICOM_NAME_MULTI (IDirectMusicInstrumentImpl, InstrumentVtbl, pNewInstrument->pInstrument, pInstrument);
+ liMove.QuadPart = 0;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, &dlibInstrumentPosition);
+ pInstrument->liInstrumentPosition.QuadPart = dlibInstrumentPosition.QuadPart - (2*sizeof(FOURCC) + sizeof(DWORD)); /* store offset, it'll be needed later */
+
+ do {
+ IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[1] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_INSH: {
+ TRACE_(dmfile)(": instrument header chunk\n");
+ pInstrument->pHeader = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, Chunk.dwSize);
+ IStream_Read (pStm, pInstrument->pHeader, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_DLID: {
+ TRACE_(dmfile)(": DLID (GUID) chunk\n");
+ pInstrument->pInstrumentID = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, Chunk.dwSize);
+ IStream_Read (pStm, pInstrument->pInstrumentID, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[2] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[2] = 0;
+ switch (Chunk.fccID) {
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[1] = %ld < ListSize[1] = %ld\n", ListCount[1], ListSize[1]);
+ } while (ListCount[1] < ListSize[1]);
+ /* DEBUG: dumps whole instrument object tree: */
+ if (TRACE_ON(dmusic)) {
+ TRACE("*** IDirectMusicInstrument (%p) ***\n", pInstrument);
+ if (pInstrument->pInstrumentID)
+ TRACE(" - GUID = %s\n", debugstr_guid(pInstrument->pInstrumentID));
+
+ TRACE(" - Instrument header:\n");
+ TRACE(" - cRegions: %ld\n", pInstrument->pHeader->cRegions);
+ TRACE(" - Locale:\n");
+ TRACE(" - ulBank: %ld\n", pInstrument->pHeader->Locale.ulBank);
+ TRACE(" - ulInstrument: %ld\n", pInstrument->pHeader->Locale.ulInstrument);
+ TRACE(" => dwPatch: %ld\n", MIDILOCALE2Patch(&pInstrument->pHeader->Locale));
+ }
+ list_add_tail (&This->Instruments, &pNewInstrument->entry);
+ }
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": StreamCount = %ld < StreamSize = %ld\n", StreamCount, StreamSize);
+ } while (StreamCount < StreamSize);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = StreamSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+ }
+ TRACE_(dmfile)(": reading finished\n");
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+ }
+
+ /* DEBUG: dumps whole collection object tree: */
+ if (TRACE_ON(dmusic)) {
+ int r = 0;
+ DMUS_PRIVATE_INSTRUMENTENTRY *tmpEntry;
+ struct list *listEntry;
+
+ TRACE("*** IDirectMusicCollection (%p) ***\n", This->CollectionVtbl);
+ if (This->pDesc->dwValidData & DMUS_OBJ_OBJECT)
+ TRACE(" - GUID = %s\n", debugstr_guid(&This->pDesc->guidObject));
+ if (This->pDesc->dwValidData & DMUS_OBJ_VERSION)
+ TRACE(" - Version = %i,%i,%i,%i\n", (This->pDesc->vVersion.dwVersionMS >> 8) && 0x0000FFFF, This->pDesc->vVersion.dwVersionMS && 0x0000FFFF, \
+ (This->pDesc->vVersion.dwVersionLS >> 8) && 0x0000FFFF, This->pDesc->vVersion.dwVersionLS && 0x0000FFFF);
+ if (This->pDesc->dwValidData & DMUS_OBJ_NAME)
+ TRACE(" - Name = %s\n", debugstr_w(This->pDesc->wszName));
+
+ TRACE(" - Collection header:\n");
+ TRACE(" - cInstruments: %ld\n", This->pHeader->cInstruments);
+ TRACE(" - Instruments:\n");
+
+ LIST_FOR_EACH (listEntry, &This->Instruments) {
+ tmpEntry = LIST_ENTRY( listEntry, DMUS_PRIVATE_INSTRUMENTENTRY, entry );
+ TRACE(" - Instrument[%i]: %p\n", r, tmpEntry->pInstrument);
+ r++;
+ }
+ }
+
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicCollectionImpl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicCollectionImpl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
+ return E_NOTIMPL;
+}
+
+ICOM_VTABLE(IPersistStream) DirectMusicCollection_PersistStream_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicCollectionImpl_IPersistStream_QueryInterface,
+ IDirectMusicCollectionImpl_IPersistStream_AddRef,
+ IDirectMusicCollectionImpl_IPersistStream_Release,
+ IDirectMusicCollectionImpl_IPersistStream_GetClassID,
+ IDirectMusicCollectionImpl_IPersistStream_IsDirty,
+ IDirectMusicCollectionImpl_IPersistStream_Load,
+ IDirectMusicCollectionImpl_IPersistStream_Save,
+ IDirectMusicCollectionImpl_IPersistStream_GetSizeMax
+};
+
+
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicCollection (LPCGUID lpcGUID, LPDIRECTMUSICCOLLECTION* ppDMColl, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicCollectionImpl *collection;
+HRESULT WINAPI DMUSIC_CreateDirectMusicCollectionImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicCollectionImpl* obj;
- TRACE("(%p,%p,%p)\n", lpcGUID, ppDMColl, pUnkOuter);
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicCollection)) {
- collection = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicCollectionImpl));
- if (NULL == collection) {
- *ppDMColl = (LPDIRECTMUSICCOLLECTION) NULL;
- return E_OUTOFMEMORY;
- }
- collection->lpVtbl = &DirectMusicCollection_Vtbl;
- collection->ref = 1;
- *ppDMColl = (LPDIRECTMUSICCOLLECTION) collection;
- return S_OK;
+ obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicCollectionImpl));
+ if (NULL == obj) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
}
-
- WARN("No interface found\n");
- return E_NOINTERFACE;
-}
-
-
-/*****************************************************************************
- * IDirectMusicCollectionObject implementation
- */
-/* IDirectMusicCollectionObject IUnknown part: */
-HRESULT WINAPI IDirectMusicCollectionObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicCollectionObject,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IDirectMusicObject)) {
- IDirectMusicCollectionObject_AddRef(iface);
- *ppobj = This;
- return S_OK;
- } else if (IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicCollectionObjectStream_AddRef ((LPPERSISTSTREAM)This->pStream);
- *ppobj = This->pStream;
- return S_OK;
- } else if (IsEqualIID (riid, &IID_IDirectMusicCollection)) {
- IDirectMusicCollectionImpl_AddRef ((LPDIRECTMUSICCOLLECTION)This->pCollection);
- *ppobj = This->pCollection;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicCollectionObject_AddRef (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicCollectionObject,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicCollectionObject_Release (LPDIRECTMUSICOBJECT iface)
-{
- ICOM_THIS(IDirectMusicCollectionObject,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicCollectionObject IDirectMusicObject part: */
-HRESULT WINAPI IDirectMusicCollectionObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicCollectionObject,iface);
-
- TRACE("(%p, %p)\n", This, pDesc);
- pDesc = This->pDesc;
+ obj->UnknownVtbl = &DirectMusicCollection_Unknown_Vtbl;
+ obj->CollectionVtbl = &DirectMusicCollection_Collection_Vtbl;
+ obj->ObjectVtbl = &DirectMusicCollection_Object_Vtbl;
+ obj->PersistStreamVtbl = &DirectMusicCollection_PersistStream_Vtbl;
+ obj->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(obj->pDesc);
+ obj->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&obj->pDesc->guidClass, &CLSID_DirectMusicCollection, sizeof (CLSID));
+ obj->ref = 0; /* will be inited by QueryInterface */
+ list_init (&obj->Instruments);
- return S_OK;
+ return IDirectMusicCollectionImpl_IUnknown_QueryInterface ((LPUNKNOWN)&obj->UnknownVtbl, lpcGUID, ppobj);
}
-
-HRESULT WINAPI IDirectMusicCollectionObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicCollectionObject,iface);
-
- TRACE("(%p, %p)\n", This, pDesc);
- This->pDesc = pDesc;
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicCollectionObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc)
-{
- ICOM_THIS(IDirectMusicCollectionObject,iface);
-
- FIXME("(%p, %p, %p): stub\n", This, pStream, pDesc);
-
- return S_OK;
-}
-
-ICOM_VTABLE(IDirectMusicObject) DirectMusicCollectionObject_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicCollectionObject_QueryInterface,
- IDirectMusicCollectionObject_AddRef,
- IDirectMusicCollectionObject_Release,
- IDirectMusicCollectionObject_GetDescriptor,
- IDirectMusicCollectionObject_SetDescriptor,
- IDirectMusicCollectionObject_ParseDescriptor
-};
-
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicCollectionObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter)
-{
- IDirectMusicCollectionObject *obj;
-
- TRACE("(%p,%p,%p)\n", lpcGUID, ppObject, pUnkOuter);
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicObject)) {
- obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicCollectionObject));
- if (NULL == obj) {
- *ppObject = (LPDIRECTMUSICOBJECT) NULL;
- return E_OUTOFMEMORY;
- }
- obj->lpVtbl = &DirectMusicCollectionObject_Vtbl;
- obj->ref = 1;
- /* prepare IPersistStream */
- obj->pStream = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicCollectionObjectStream));
- obj->pStream->lpVtbl = &DirectMusicCollectionObjectStream_Vtbl;
- obj->pStream->ref = 1;
- obj->pStream->pParentObject = obj;
- /* prepare IDirectMusicCollection */
- DMUSIC_CreateDirectMusicCollection (&IID_IDirectMusicCollection, (LPDIRECTMUSICCOLLECTION*)&obj->pCollection, NULL);
- obj->pCollection->pObject = obj;
- *ppObject = (LPDIRECTMUSICOBJECT) obj;
- return S_OK;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
-}
-
-/*****************************************************************************
- * IDirectMusicCollectionObjectStream implementation
- */
-/* IDirectMusicCollectionObjectStream IUnknown part: */
-HRESULT WINAPI IDirectMusicCollectionObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicCollectionObjectStream,iface);
-
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IPersistStream)) {
- IDirectMusicCollectionObjectStream_AddRef (iface);
- *ppobj = This;
- return S_OK;
- }
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
- return E_NOINTERFACE;
-}
-
-ULONG WINAPI IDirectMusicCollectionObjectStream_AddRef (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicCollectionObjectStream,iface);
- TRACE("(%p) : AddRef from %ld\n", This, This->ref);
- return ++(This->ref);
-}
-
-ULONG WINAPI IDirectMusicCollectionObjectStream_Release (LPPERSISTSTREAM iface)
-{
- ICOM_THIS(IDirectMusicCollectionObjectStream,iface);
- ULONG ref = --This->ref;
- TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
- if (ref == 0) {
- HeapFree(GetProcessHeap(), 0, This);
- }
- return ref;
-}
-
-/* IDirectMusicCollectionObjectStream IPersist part: */
-HRESULT WINAPI IDirectMusicCollectionObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
-{
- return E_NOTIMPL;
-}
-
-/* IDirectMusicCollectionObjectStream IPersistStream part: */
-HRESULT WINAPI IDirectMusicCollectionObjectStream_IsDirty (LPPERSISTSTREAM iface)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicCollectionObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
-{
- FOURCC chunkID;
- DWORD chunkSize;
-
- IStream_Read (pStm, &chunkID, sizeof(FOURCC), NULL);
- IStream_Read (pStm, &chunkSize, sizeof(FOURCC), NULL);
-
- if (chunkID == FOURCC_RIFF) {
- FIXME(": Loading not implemented yet\n");
- } else {
- WARN("Not a RIFF file\n");
- return E_FAIL;
- }
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicCollectionObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
-{
- return E_NOTIMPL;
-}
-
-HRESULT WINAPI IDirectMusicCollectionObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
-{
- return E_NOTIMPL;
-}
-
-ICOM_VTABLE(IPersistStream) DirectMusicCollectionObjectStream_Vtbl =
-{
- ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicCollectionObjectStream_QueryInterface,
- IDirectMusicCollectionObjectStream_AddRef,
- IDirectMusicCollectionObjectStream_Release,
- IDirectMusicCollectionObjectStream_GetClassID,
- IDirectMusicCollectionObjectStream_IsDirty,
- IDirectMusicCollectionObjectStream_Load,
- IDirectMusicCollectionObjectStream_Save,
- IDirectMusicCollectionObjectStream_GetSizeMax
-};
diff --git a/dlls/dmusic/dmusic.c b/dlls/dmusic/dmusic.c
index db3a897..88fd1ef 100644
--- a/dlls/dmusic/dmusic.c
+++ b/dlls/dmusic/dmusic.c
@@ -1,6 +1,6 @@
/* IDirectMusic8 Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,33 +16,16 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winreg.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "winerror.h"
-#include "mmsystem.h"
-#include "winternl.h"
-#include "mmddk.h"
-#include "wine/windef16.h"
-#include "wine/winbase16.h"
-#include "wine/debug.h"
-#include "dsound.h"
-
#include "dmusic_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmusic);
-/* IDirectMusic8 IUnknown parts follow: */
-HRESULT WINAPI IDirectMusic8Impl_QueryInterface (LPDIRECTMUSIC8 iface, REFIID riid, LPVOID *ppobj)
-{
+/* IDirectMusic8Impl IUnknown part: */
+HRESULT WINAPI IDirectMusic8Impl_QueryInterface (LPDIRECTMUSIC8 iface, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IDirectMusic8Impl,iface);
if (IsEqualIID (riid, &IID_IUnknown) ||
+ IsEqualIID (riid, &IID_IDirectMusic) ||
IsEqualIID (riid, &IID_IDirectMusic2) ||
IsEqualIID (riid, &IID_IDirectMusic8)) {
IDirectMusic8Impl_AddRef(iface);
@@ -54,15 +37,13 @@
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusic8Impl_AddRef (LPDIRECTMUSIC8 iface)
-{
+ULONG WINAPI IDirectMusic8Impl_AddRef (LPDIRECTMUSIC8 iface) {
ICOM_THIS(IDirectMusic8Impl,iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusic8Impl_Release (LPDIRECTMUSIC8 iface)
-{
+ULONG WINAPI IDirectMusic8Impl_Release (LPDIRECTMUSIC8 iface) {
ICOM_THIS(IDirectMusic8Impl,iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
@@ -72,9 +53,8 @@
return ref;
}
-/* IDirectMusic8 Interface follow: */
-HRESULT WINAPI IDirectMusic8Impl_EnumPort(LPDIRECTMUSIC8 iface, DWORD dwIndex, LPDMUS_PORTCAPS pPortCaps)
-{
+/* IDirectMusic8Impl IDirectMusic part: */
+HRESULT WINAPI IDirectMusic8Impl_EnumPort(LPDIRECTMUSIC8 iface, DWORD dwIndex, LPDMUS_PORTCAPS pPortCaps) {
ICOM_THIS(IDirectMusic8Impl,iface);
TRACE("(%p, %ld, %p)\n", This, dwIndex, pPortCaps);
@@ -115,17 +95,13 @@
return S_FALSE;
}
-HRESULT WINAPI IDirectMusic8Impl_CreateMusicBuffer (LPDIRECTMUSIC8 iface, LPDMUS_BUFFERDESC pBufferDesc, LPDIRECTMUSICBUFFER** ppBuffer, LPUNKNOWN pUnkOuter)
-{
+HRESULT WINAPI IDirectMusic8Impl_CreateMusicBuffer (LPDIRECTMUSIC8 iface, LPDMUS_BUFFERDESC pBufferDesc, LPDIRECTMUSICBUFFER** ppBuffer, LPUNKNOWN pUnkOuter) {
ICOM_THIS(IDirectMusic8Impl,iface);
-
FIXME("(%p, %p, %p, %p): stub\n", This, pBufferDesc, ppBuffer, pUnkOuter);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusic8Impl_CreatePort (LPDIRECTMUSIC8 iface, REFCLSID rclsidPort, LPDMUS_PORTPARAMS pPortParams, LPDIRECTMUSICPORT* ppPort, LPUNKNOWN pUnkOuter)
-{
+HRESULT WINAPI IDirectMusic8Impl_CreatePort (LPDIRECTMUSIC8 iface, REFCLSID rclsidPort, LPDMUS_PORTPARAMS pPortParams, LPDIRECTMUSICPORT* ppPort, LPUNKNOWN pUnkOuter) {
ICOM_THIS(IDirectMusic8Impl,iface);
int i/*, j*/;
DMUS_PORTCAPS PortCaps;
@@ -145,7 +121,7 @@
This->ppPorts[This->nrofports]->pCaps = &PortCaps;
This->ppPorts[This->nrofports]->pParams = pPortParams; /* this one is here just because there's a funct. which retrieves it back */
This->ppPorts[This->nrofports]->pDirectSound = NULL;
- DMUSIC_CreateReferenceClock (&IID_IReferenceClock, (IReferenceClock**)&This->ppPorts[This->nrofports]->pLatencyClock, NULL);
+ DMUSIC_CreateReferenceClockImpl (&IID_IReferenceClock, (LPVOID*)&This->ppPorts[This->nrofports]->pLatencyClock, NULL);
#if 0
if (pPortParams->dwValidParams & DMUS_PORTPARAMS_CHANNELGROUPS) {
@@ -181,17 +157,13 @@
return E_NOINTERFACE;
}
-HRESULT WINAPI IDirectMusic8Impl_EnumMasterClock (LPDIRECTMUSIC8 iface, DWORD dwIndex, LPDMUS_CLOCKINFO lpClockInfo)
-{
+HRESULT WINAPI IDirectMusic8Impl_EnumMasterClock (LPDIRECTMUSIC8 iface, DWORD dwIndex, LPDMUS_CLOCKINFO lpClockInfo) {
ICOM_THIS(IDirectMusic8Impl,iface);
-
FIXME("(%p, %ld, %p): stub\n", This, dwIndex, lpClockInfo);
-
return S_FALSE;
}
-HRESULT WINAPI IDirectMusic8Impl_GetMasterClock (LPDIRECTMUSIC8 iface, LPGUID pguidClock, IReferenceClock** ppReferenceClock)
-{
+HRESULT WINAPI IDirectMusic8Impl_GetMasterClock (LPDIRECTMUSIC8 iface, LPGUID pguidClock, IReferenceClock** ppReferenceClock) {
ICOM_THIS(IDirectMusic8Impl,iface);
TRACE("(%p, %p, %p)\n", This, pguidClock, ppReferenceClock);
@@ -203,31 +175,25 @@
return S_OK;
}
-HRESULT WINAPI IDirectMusic8Impl_SetMasterClock (LPDIRECTMUSIC8 iface, REFGUID rguidClock)
-{
+HRESULT WINAPI IDirectMusic8Impl_SetMasterClock (LPDIRECTMUSIC8 iface, REFGUID rguidClock) {
ICOM_THIS(IDirectMusic8Impl,iface);
-
FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidClock));
-
return S_OK;
}
-HRESULT WINAPI IDirectMusic8Impl_Activate (LPDIRECTMUSIC8 iface, BOOL fEnable)
-{
+HRESULT WINAPI IDirectMusic8Impl_Activate (LPDIRECTMUSIC8 iface, BOOL fEnable) {
ICOM_THIS(IDirectMusic8Impl,iface);
int i;
FIXME("(%p, %d): stub\n", This, fEnable);
- for (i = 0; i < This->nrofports; i++)
- {
+ for (i = 0; i < This->nrofports; i++) {
This->ppPorts[i]->fActive = fEnable;
}
return S_OK;
}
-HRESULT WINAPI IDirectMusic8Impl_GetDefaultPort (LPDIRECTMUSIC8 iface, LPGUID pguidPort)
-{
+HRESULT WINAPI IDirectMusic8Impl_GetDefaultPort (LPDIRECTMUSIC8 iface, LPGUID pguidPort) {
ICOM_THIS(IDirectMusic8Impl,iface);
HKEY hkGUID;
DWORD returnTypeGUID, sizeOfReturnBuffer = 50;
@@ -251,26 +217,19 @@
return S_OK;
}
-HRESULT WINAPI IDirectMusic8Impl_SetDirectSound (LPDIRECTMUSIC8 iface, LPDIRECTSOUND pDirectSound, HWND hWnd)
-{
+HRESULT WINAPI IDirectMusic8Impl_SetDirectSound (LPDIRECTMUSIC8 iface, LPDIRECTSOUND pDirectSound, HWND hWnd) {
ICOM_THIS(IDirectMusic8Impl,iface);
-
FIXME("(%p, %p, %p): stub\n", This, pDirectSound, hWnd);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusic8Impl_SetExternalMasterClock (LPDIRECTMUSIC8 iface, IReferenceClock* pClock)
-{
+HRESULT WINAPI IDirectMusic8Impl_SetExternalMasterClock (LPDIRECTMUSIC8 iface, IReferenceClock* pClock) {
ICOM_THIS(IDirectMusic8Impl,iface);
-
FIXME("(%p, %p): stub\n", This, pClock);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusic8) DirectMusic8_Vtbl =
-{
+ICOM_VTABLE(IDirectMusic8) DirectMusic8_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
IDirectMusic8Impl_QueryInterface,
IDirectMusic8Impl_AddRef,
@@ -288,8 +247,7 @@
};
/* helper stuff */
-void register_waveport (LPGUID lpGUID, LPCSTR lpszDesc, LPCSTR lpszDrvName, LPVOID lpContext)
-{
+void register_waveport (LPGUID lpGUID, LPCSTR lpszDesc, LPCSTR lpszDrvName, LPVOID lpContext) {
LPDMUS_PORTCAPS pPortCaps = (LPDMUS_PORTCAPS)lpContext;
pPortCaps->dwSize = sizeof(DMUS_PORTCAPS);
@@ -306,30 +264,22 @@
}
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusic (LPCGUID lpcGUID, LPDIRECTMUSIC8 *ppDM, LPUNKNOWN pUnkOuter)
-{
+HRESULT WINAPI DMUSIC_CreateDirectMusicImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
IDirectMusic8Impl *dmusic;
- TRACE("(%p,%p,%p)\n",lpcGUID, ppDM, pUnkOuter);
- if (IsEqualIID (lpcGUID, &IID_IDirectMusic) ||
- IsEqualIID (lpcGUID, &IID_IDirectMusic2) ||
- IsEqualIID (lpcGUID, &IID_IDirectMusic8)) {
- dmusic = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusic8Impl));
- if (NULL == dmusic) {
- *ppDM = (LPDIRECTMUSIC8) NULL;
- return E_OUTOFMEMORY;
- }
- dmusic->lpVtbl = &DirectMusic8_Vtbl;
- dmusic->ref = 1;
- dmusic->pMasterClock = NULL;
- dmusic->ppPorts = NULL;
- dmusic->nrofports = 0;
- DMUSIC_CreateReferenceClock (&IID_IReferenceClock, (IReferenceClock**)&dmusic->pMasterClock, NULL);
-
- *ppDM = (LPDIRECTMUSIC8) dmusic;
- return S_OK;
+ TRACE("(%p,%p,%p)\n",lpcGUID, ppobj, pUnkOuter);
+
+ dmusic = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusic8Impl));
+ if (NULL == dmusic) {
+ *ppobj = (LPDIRECTMUSIC8) NULL;
+ return E_OUTOFMEMORY;
}
+ dmusic->lpVtbl = &DirectMusic8_Vtbl;
+ dmusic->ref = 0; /* will be inited with QueryInterface */
+ dmusic->pMasterClock = NULL;
+ dmusic->ppPorts = NULL;
+ dmusic->nrofports = 0;
+ DMUSIC_CreateReferenceClockImpl (&IID_IReferenceClock, (LPVOID*)&dmusic->pMasterClock, NULL);
- WARN("No interface found\n");
- return E_NOINTERFACE;
+ return IDirectMusic8Impl_QueryInterface ((LPDIRECTMUSIC8)dmusic, lpcGUID, ppobj);
}
diff --git a/dlls/dmusic/dmusic_main.c b/dlls/dmusic/dmusic_main.c
index b258888..53388f3 100644
--- a/dlls/dmusic/dmusic_main.c
+++ b/dlls/dmusic/dmusic_main.c
@@ -1,6 +1,6 @@
/* DirectMusic Main
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,8 +21,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(dmusic);
-typedef struct
-{
+typedef struct {
/* IUnknown fields */
ICOM_VFIELD(IClassFactory);
DWORD ref;
@@ -31,44 +30,30 @@
/******************************************************************
* DirectMusic ClassFactory
*/
-static HRESULT WINAPI DirectMusicCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI DirectMusicCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI DirectMusicCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI DirectMusicCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI DirectMusicCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI DirectMusicCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI DirectMusicCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI DirectMusicCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusic) ||
- IsEqualIID (riid, &IID_IDirectMusic2) ||
- IsEqualIID (riid, &IID_IDirectMusic8)) {
- return DMUSIC_CreateDirectMusic (riid, (LPDIRECTMUSIC8*) ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicImpl (riid, (LPVOID*) ppobj, pOuter);
}
-static HRESULT WINAPI DirectMusicCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI DirectMusicCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -88,44 +73,30 @@
/******************************************************************
* DirectMusicCollection ClassFactory
*/
-static HRESULT WINAPI CollectionCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj)
-{
+static HRESULT WINAPI CollectionCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-static ULONG WINAPI CollectionCF_AddRef(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI CollectionCF_AddRef(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
return ++(This->ref);
}
-static ULONG WINAPI CollectionCF_Release(LPCLASSFACTORY iface)
-{
+static ULONG WINAPI CollectionCF_Release(LPCLASSFACTORY iface) {
ICOM_THIS(IClassFactoryImpl,iface);
/* static class, won't be freed */
return --(This->ref);
}
-static HRESULT WINAPI CollectionCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
+static HRESULT WINAPI CollectionCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IClassFactoryImpl,iface);
-
TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
- if (IsEqualIID (riid, &IID_IDirectMusicCollection)) {
- return DMUSIC_CreateDirectMusicCollection (riid, (LPDIRECTMUSICCOLLECTION*)ppobj, pOuter);
- } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
- return DMUSIC_CreateDirectMusicCollectionObject (riid, (LPDIRECTMUSICOBJECT*)ppobj, pOuter);
- }
-
- WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
- return E_NOINTERFACE;
+ return DMUSIC_CreateDirectMusicCollectionImpl (riid, ppobj, pOuter);
}
-static HRESULT WINAPI CollectionCF_LockServer(LPCLASSFACTORY iface,BOOL dolock)
-{
+static HRESULT WINAPI CollectionCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
ICOM_THIS(IClassFactoryImpl,iface);
FIXME("(%p)->(%d),stub!\n", This, dolock);
return S_OK;
@@ -147,15 +118,11 @@
*
*
*/
-BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
-{
- if (fdwReason == DLL_PROCESS_ATTACH)
- {
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
+ if (fdwReason == DLL_PROCESS_ATTACH) {
DisableThreadLibraryCalls(hinstDLL);
/* FIXME: Initialisation */
- }
- else if (fdwReason == DLL_PROCESS_DETACH)
- {
+ } else if (fdwReason == DLL_PROCESS_DETACH) {
/* FIXME: Cleanup */
}
@@ -168,10 +135,8 @@
*
*
*/
-HRESULT WINAPI DMUSIC_DllCanUnloadNow(void)
-{
+HRESULT WINAPI DMUSIC_DllCanUnloadNow(void) {
FIXME("(void): stub\n");
-
return S_FALSE;
}
@@ -181,8 +146,7 @@
*
*
*/
-HRESULT WINAPI DMUSIC_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
-{
+HRESULT WINAPI DMUSIC_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) {
TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
if (IsEqualCLSID (rclsid, &CLSID_DirectMusic) && IsEqualIID (riid, &IID_IClassFactory)) {
*ppv = (LPVOID) &DirectMusic_CF;
diff --git a/dlls/dmusic/dmusic_private.h b/dlls/dmusic/dmusic_private.h
index 63d1175..04ebcfd 100644
--- a/dlls/dmusic/dmusic_private.h
+++ b/dlls/dmusic/dmusic_private.h
@@ -1,6 +1,6 @@
/* DirectMusic Private Include
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,50 +23,55 @@
#include <stdarg.h>
#include "windef.h"
-#include "wine/debug.h"
#include "winbase.h"
#include "winnt.h"
#include "wingdi.h"
-#include "dmusicc.h"
+#include "winuser.h"
+
+#include "wine/debug.h"
+#include "wine/list.h"
+#include "wine/unicode.h"
+#include "winreg.h"
+
#include "dmusici.h"
-#include "dmusics.h"
-#include "dmplugin.h"
#include "dmusicf.h"
-#include "dsound.h"
+#include "dmusics.h"
/*****************************************************************************
* Interfaces
*/
typedef struct IDirectMusic8Impl IDirectMusic8Impl;
typedef struct IDirectMusicBufferImpl IDirectMusicBufferImpl;
-typedef struct IDirectMusicInstrumentImpl IDirectMusicInstrumentImpl;
typedef struct IDirectMusicDownloadedInstrumentImpl IDirectMusicDownloadedInstrumentImpl;
-typedef struct IDirectMusicCollectionImpl IDirectMusicCollectionImpl;
typedef struct IDirectMusicDownloadImpl IDirectMusicDownloadImpl;
typedef struct IDirectMusicPortDownloadImpl IDirectMusicPortDownloadImpl;
typedef struct IDirectMusicPortImpl IDirectMusicPortImpl;
typedef struct IDirectMusicThruImpl IDirectMusicThruImpl;
typedef struct IReferenceClockImpl IReferenceClockImpl;
-typedef struct IDirectMusicCollectionObject IDirectMusicCollectionObject;
-typedef struct IDirectMusicCollectionObjectStream IDirectMusicCollectionObjectStream;
+typedef struct IDirectMusicCollectionImpl IDirectMusicCollectionImpl;
+typedef struct IDirectMusicInstrumentImpl IDirectMusicInstrumentImpl;
+
/*****************************************************************************
* Predeclare the interface implementation structures
*/
extern ICOM_VTABLE(IDirectMusic8) DirectMusic8_Vtbl;
extern ICOM_VTABLE(IDirectMusicBuffer) DirectMusicBuffer_Vtbl;
-extern ICOM_VTABLE(IDirectMusicInstrument) DirectMusicInstrument_Vtbl;
extern ICOM_VTABLE(IDirectMusicDownloadedInstrument) DirectMusicDownloadedInstrument_Vtbl;
-extern ICOM_VTABLE(IDirectMusicCollection) DirectMusicCollection_Vtbl;
extern ICOM_VTABLE(IDirectMusicDownload) DirectMusicDownload_Vtbl;
extern ICOM_VTABLE(IDirectMusicPortDownload) DirectMusicPortDownload_Vtbl;
extern ICOM_VTABLE(IDirectMusicPort) DirectMusicPort_Vtbl;
extern ICOM_VTABLE(IDirectMusicThru) DirectMusicThru_Vtbl;
extern ICOM_VTABLE(IReferenceClock) ReferenceClock_Vtbl;
-extern ICOM_VTABLE(IDirectMusicObject) DirectMusicCollectionObject_Vtbl;
-extern ICOM_VTABLE(IPersistStream) DirectMusicCollectionObjectStream_Vtbl;
+extern ICOM_VTABLE(IUnknown) DirectMusicCollection_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicCollection) DirectMusicCollection_Collection_Vtbl;
+extern ICOM_VTABLE(IDirectMusicObject) DirectMusicCollection_Object_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicCollection_PersistStream_Vtbl;
+
+extern ICOM_VTABLE(IUnknown) DirectMusicInstrument_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicInstrument) DirectMusicInstrument_Instrument_Vtbl;
/*****************************************************************************
* Some stuff to make my life easier :=)
@@ -74,179 +79,32 @@
/* some sort of aux. midi channel: big fake at the moment; accepts only priority
changes... more coming soon */
-typedef struct DMUSIC_PRIVATE_MCHANNEL_
-{
+typedef struct DMUSIC_PRIVATE_MCHANNEL_ {
DWORD priority;
} DMUSIC_PRIVATE_MCHANNEL, *LPDMUSIC_PRIVATE_MCHANNEL;
/* some sort of aux. channel group: collection of 16 midi channels */
-typedef struct DMUSIC_PRIVATE_CHANNEL_GROUP_
-{
+typedef struct DMUSIC_PRIVATE_CHANNEL_GROUP_ {
DMUSIC_PRIVATE_MCHANNEL channel[16]; /* 16 channels in a group */
} DMUSIC_PRIVATE_CHANNEL_GROUP, *LPDMUSIC_PRIVATE_CHANNEL_GROUP;
-/* used for loading chunks of data from files */
-typedef struct _rawChunk
-{
- FOURCC id; /* FOURCC */
- DWORD size; /* size of chunk_riff */
- /* BYTE* data; */ /* chunk_riff data */
-} rawChunk;
-
-/* struct in which UNFO data is stored */
-typedef struct _UNFO_List
-{
- WCHAR* name;
- WCHAR* artist;
- WCHAR* copyright;
- WCHAR* version;
- WCHAR* subject;
- WCHAR* comment;
-} UNFO_List;
-
-typedef struct _ChordData
-{
- DMUS_IO_CHORD chord;
- DWORD nrofsubchords;
- DMUS_IO_SUBCHORD *subchord;
-} ChordData;
-
-typedef struct _Reference
-{
- DMUS_IO_REFERENCE header;
- GUID guid;
- FILETIME date;
- WCHAR* name;
- WCHAR* file;
- WCHAR* category;
- DMUS_IO_VERSION version;
-} Reference;
-
-typedef struct _BandTrack
-{
- DMUS_IO_BAND_TRACK_HEADER header;
- GUID guid;
- DMUS_IO_VERSION version;
- UNFO_List UNFO;
-
- DMUS_IO_BAND_ITEM_HEADER header1;
- DMUS_IO_BAND_ITEM_HEADER2 header2;
-
- /* IDirectMusicBandImpl **band; */
-
-} BandTrack;
-
-typedef struct _Part
-{
- DMUS_IO_STYLEPART header;
- UNFO_List UNFO;
- DWORD nrofnotes;
- DMUS_IO_STYLENOTE* notes;
- DWORD nrofcurves;
- DMUS_IO_STYLECURVE* curves;
- DWORD nrofmarkers;
- DMUS_IO_STYLEMARKER* markers;
- DWORD nrofresolutions;
- DMUS_IO_STYLERESOLUTION* resolutions;
- DWORD nrofanticipations;
- DMUS_IO_STYLE_ANTICIPATION* anticipations;
-} Part;
-
-typedef struct _Pattern
-{
- DMUS_IO_PATTERN header;
- DWORD nrofrhytms;
- DWORD* rhytms;
- UNFO_List UNFO;
- DMUS_IO_MOTIFSETTINGS motsettings;
- /* IDirectMusicBandImpl band */
- DWORD nrofpartrefs;
- /* FIXME: only in singular form for now */
- UNFO_List partrefUNFO;
- DMUS_IO_PARTREF partref;
-} Pattern;
-
-typedef struct _WaveTrack
-{
- DMUS_IO_WAVE_TRACK_HEADER header;
- /* FIXME: only in singular form now */
- DMUS_IO_WAVE_PART_HEADER partHeader;
- DMUS_IO_WAVE_ITEM_HEADER itemHeader;
- Reference reference;
-} WaveTrack;
-
-typedef struct _SegTriggerTrack
-{
- DMUS_IO_SEGMENT_TRACK_HEADER header;
- /* FIXME: only in singular form now */
- DMUS_IO_SEGMENT_ITEM_HEADER itemHeader;
- Reference reference;
- WCHAR* motifName;
-} SegTriggerTrack;
-
-typedef struct _TimeSigTrack {
- DWORD nrofitems;
- DMUS_IO_TIMESIGNATURE_ITEM* items;
-} TimeSigTrack;
-
-typedef struct _ScriptEvent {
- DMUS_IO_SCRIPTTRACK_EVENTHEADER header;
- Reference reference;
- WCHAR* name;
-} ScriptEvent;
/*****************************************************************************
* ClassFactory
*/
-/* can support IID_IDirectMusic, IID_IDirectMusic2 and IID_IDirectMusic8
- * return always an IDirectMusic8Impl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusic (LPCGUID lpcGUID, LPDIRECTMUSIC8* ppDM, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicBuffer
- * return always an IDirectMusicBufferImpl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicBuffer (LPCGUID lpcGUID, LPDIRECTMUSICBUFFER* ppDMBuff, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicInstrument
- * return always an IDirectMusicInstrumentImpl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicInstrument (LPCGUID lpcGUID, LPDIRECTMUSICINSTRUMENT* ppDMInstr, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicDownloadedInstrument
- * return always an IDirectMusicDownloadedInstrumentImpl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicDownloadedInstrument (LPCGUID lpcGUID, LPDIRECTMUSICDOWNLOADEDINSTRUMENT* ppDMDLInstrument, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicCollection
- * return always an IDirectMusicCollectionImpl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicCollection (LPCGUID lpcGUID, LPDIRECTMUSICCOLLECTION* ppDMColl, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicDownload
- * return always an IDirectMusicDownload
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicDownload (LPCGUID lpcGUID, LPDIRECTMUSICDOWNLOAD* ppDMDL, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicPortDownload
- * return always an IDirectMusicPortDownload
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicPortDownload (LPCGUID lpcGUID, LPDIRECTMUSICPORTDOWNLOAD* ppDMPortDL, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicPort
- * return always an IDirectMusicPortImpl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicPort (LPCGUID lpcGUID, LPDIRECTMUSICPORT* ppDMPort, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicThru
- * return always an IDirectMusicThruImpl
- */
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicThru (LPCGUID lpcGUID, LPDIRECTMUSICTHRU* ppDMThru, LPUNKNOWN pUnkOuter);
-/* can support IID_IDirectMusicObject
- * return always an IDirectMusicObjectImpl
- */
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicBufferImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicDownloadedInstrumentImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicDownloadImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateReferenceClockImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
-extern HRESULT WINAPI DMUSIC_CreateReferenceClock (LPCGUID lpcGUID, IReferenceClock** ppDM, LPUNKNOWN pUnkOuter);
-
-extern HRESULT WINAPI DMUSIC_CreateDirectMusicCollectionObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicCollectionImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicInstrumentImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
/*****************************************************************************
* IDirectMusic8Impl implementation structure
*/
-struct IDirectMusic8Impl
-{
+struct IDirectMusic8Impl {
/* IUnknown fields */
ICOM_VFIELD(IDirectMusic8);
DWORD ref;
@@ -277,8 +135,7 @@
/*****************************************************************************
* IDirectMusicBufferImpl implementation structure
*/
-struct IDirectMusicBufferImpl
-{
+struct IDirectMusicBufferImpl {
/* IUnknown fields */
ICOM_VFIELD(IDirectMusicBuffer);
DWORD ref;
@@ -305,33 +162,11 @@
extern HRESULT WINAPI IDirectMusicBufferImpl_SetStartTime (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt);
extern HRESULT WINAPI IDirectMusicBufferImpl_SetUsedBytes (LPDIRECTMUSICBUFFER iface, DWORD cb);
-/*****************************************************************************
- * IDirectMusicInstrumentImpl implementation structure
- */
-struct IDirectMusicInstrumentImpl
-{
- /* IUnknown fields */
- ICOM_VFIELD(IDirectMusicInstrument);
- DWORD ref;
-
- /* IDirectMusicInstrumentImpl fields */
- DWORD dwPatch;
- LPWSTR pwszName;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicInstrumentImpl_QueryInterface (LPDIRECTMUSICINSTRUMENT iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicInstrumentImpl_AddRef (LPDIRECTMUSICINSTRUMENT iface);
-extern ULONG WINAPI IDirectMusicInstrumentImpl_Release (LPDIRECTMUSICINSTRUMENT iface);
-/* IDirectMusicInstrumentImpl: */
-extern HRESULT WINAPI IDirectMusicInstrumentImpl_GetPatch (LPDIRECTMUSICINSTRUMENT iface, DWORD* pdwPatch);
-extern HRESULT WINAPI IDirectMusicInstrumentImpl_SetPatch (LPDIRECTMUSICINSTRUMENT iface, DWORD dwPatch);
/*****************************************************************************
* IDirectMusicDownloadedInstrumentImpl implementation structure
*/
-struct IDirectMusicDownloadedInstrumentImpl
-{
+struct IDirectMusicDownloadedInstrumentImpl {
/* IUnknown fields */
ICOM_VFIELD(IDirectMusicDownloadedInstrument);
DWORD ref;
@@ -346,34 +181,11 @@
/* IDirectMusicDownloadedInstrumentImpl: */
/* none yet */
-/*****************************************************************************
- * IDirectMusicCollectionImpl implementation structure
- */
-struct IDirectMusicCollectionImpl
-{
- /* IUnknown fields */
- ICOM_VFIELD(IDirectMusicCollection);
- DWORD ref;
-
- /* IDirectMusicCollectionImpl fields */
- IDirectMusicCollectionObject* pObject;
- DWORD nrofinstruments;
- IDirectMusicInstrumentImpl** ppInstruments;
-};
-
-/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicCollectionImpl_QueryInterface (LPDIRECTMUSICCOLLECTION iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicCollectionImpl_AddRef (LPDIRECTMUSICCOLLECTION iface);
-extern ULONG WINAPI IDirectMusicCollectionImpl_Release (LPDIRECTMUSICCOLLECTION iface);
-/* IDirectMusicImpl: */
-HRESULT WINAPI IDirectMusicCollectionImpl_GetInstrument (LPDIRECTMUSICCOLLECTION iface, DWORD dwPatch, IDirectMusicInstrument** ppInstrument);
-HRESULT WINAPI IDirectMusicCollectionImpl_EnumInstrument (LPDIRECTMUSICCOLLECTION iface, DWORD dwIndex, DWORD* pdwPatch, LPWSTR pwszName, DWORD dwNameLen);
/*****************************************************************************
* IDirectMusicDownloadImpl implementation structure
*/
-struct IDirectMusicDownloadImpl
-{
+struct IDirectMusicDownloadImpl {
/* IUnknown fields */
ICOM_VFIELD(IDirectMusicDownload);
DWORD ref;
@@ -392,8 +204,7 @@
/*****************************************************************************
* IDirectMusicPortDownloadImpl implementation structure
*/
-struct IDirectMusicPortDownloadImpl
-{
+struct IDirectMusicPortDownloadImpl {
/* IUnknown fields */
ICOM_VFIELD(IDirectMusicPortDownload);
DWORD ref;
@@ -416,8 +227,7 @@
/*****************************************************************************
* IDirectMusicPortImpl implementation structure
*/
-struct IDirectMusicPortImpl
-{
+struct IDirectMusicPortImpl {
/* IUnknown fields */
ICOM_VFIELD(IDirectMusicPort);
DWORD ref;
@@ -444,6 +254,7 @@
extern HRESULT WINAPI IDirectMusicPortImpl_UnloadInstrument (LPDIRECTMUSICPORT iface, IDirectMusicDownloadedInstrument *pDownloadedInstrument);
extern HRESULT WINAPI IDirectMusicPortImpl_GetLatencyClock (LPDIRECTMUSICPORT iface, IReferenceClock** ppClock);
extern HRESULT WINAPI IDirectMusicPortImpl_GetRunningStats (LPDIRECTMUSICPORT iface, LPDMUS_SYNTHSTATS pStats);
+extern HRESULT WINAPI IDirectMusicPortImpl_Compact (LPDIRECTMUSICPORT iface);
extern HRESULT WINAPI IDirectMusicPortImpl_GetCaps (LPDIRECTMUSICPORT iface, LPDMUS_PORTCAPS pPortCaps);
extern HRESULT WINAPI IDirectMusicPortImpl_DeviceIoControl (LPDIRECTMUSICPORT iface, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
extern HRESULT WINAPI IDirectMusicPortImpl_SetNumChannelGroups (LPDIRECTMUSICPORT iface, DWORD dwChannelGroups);
@@ -457,8 +268,7 @@
/*****************************************************************************
* IDirectMusicThruImpl implementation structure
*/
-struct IDirectMusicThruImpl
-{
+struct IDirectMusicThruImpl {
/* IUnknown fields */
ICOM_VFIELD(IDirectMusicThru);
DWORD ref;
@@ -476,8 +286,7 @@
/*****************************************************************************
* IReferenceClockImpl implementation structure
*/
-struct IReferenceClockImpl
-{
+struct IReferenceClockImpl {
/* IUnknown fields */
ICOM_VFIELD(IReferenceClock);
DWORD ref;
@@ -498,54 +307,97 @@
extern HRESULT WINAPI IReferenceClockImpl_Unadvise (IReferenceClock *iface, DWORD dwAdviseCookie);
+typedef struct _DMUS_PRIVATE_INSTRUMENT_ENTRY {
+ struct list entry; /* for listing elements */
+ IDirectMusicInstrument* pInstrument;
+} DMUS_PRIVATE_INSTRUMENTENTRY, *LPDMUS_PRIVATE_INSTRUMENTENTRY;
+
+typedef struct _DMUS_PRIVATE_POOLCUE {
+ struct list entry; /* for listing elements */
+} DMUS_PRIVATE_POOLCUE, *LPDMUS_PRIVATE_POOLCUE;
+
/*****************************************************************************
- * IDirectMusicCollectionObject implementation structure
+ * IDirectMusicCollectionImpl implementation structure
*/
-struct IDirectMusicCollectionObject
-{
+struct IDirectMusicCollectionImpl {
/* IUnknown fields */
- ICOM_VFIELD (IDirectMusicObject);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicCollection) *CollectionVtbl;
+ ICOM_VTABLE(IDirectMusicObject) *ObjectVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
DWORD ref;
- /* IDirectMusicObjectImpl fields */
+ /* IDirectMusicCollectionImpl fields */
+ IStream *pStm; /* stream from which we load collection and later instruments */
+ LARGE_INTEGER liCollectionPosition; /* offset in a stream where collection was loaded from */
+ LARGE_INTEGER liWavePoolTablePosition; /* offset in a stream where wave pool table can be found */
LPDMUS_OBJECTDESC pDesc;
- IDirectMusicCollectionObjectStream* pStream;
- IDirectMusicCollectionImpl* pCollection;
+ CHAR* szCopyright; /* FIXME: should probably placed somewhere else */
+ LPDLSHEADER pHeader;
+ /* pool table */
+ LPPOOLTABLE pPoolTable;
+ LPPOOLCUE pPoolCues;
+ /* instruments */
+ struct list Instruments;
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicCollectionObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
-extern ULONG WINAPI IDirectMusicCollectionObject_AddRef (LPDIRECTMUSICOBJECT iface);
-extern ULONG WINAPI IDirectMusicCollectionObject_Release (LPDIRECTMUSICOBJECT iface);
+extern HRESULT WINAPI IDirectMusicCollectionImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicCollectionImpl_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicCollectionImpl_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicCollection: */
+extern HRESULT WINAPI IDirectMusicCollectionImpl_IDirectMusicCollection_QueryInterface (LPDIRECTMUSICCOLLECTION iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicCollectionImpl_IDirectMusicCollection_AddRef (LPDIRECTMUSICCOLLECTION iface);
+extern ULONG WINAPI IDirectMusicCollectionImpl_IDirectMusicCollection_Release (LPDIRECTMUSICCOLLECTION iface);
+extern HRESULT WINAPI IDirectMusicCollectionImpl_IDirectMusicCollection_GetInstrument (LPDIRECTMUSICCOLLECTION iface, DWORD dwPatch, IDirectMusicInstrument** ppInstrument);
+extern HRESULT WINAPI IDirectMusicCollectionImpl_IDirectMusicCollection_EnumInstrument (LPDIRECTMUSICCOLLECTION iface, DWORD dwIndex, DWORD* pdwPatch, LPWSTR pwszName, DWORD dwNameLen);
/* IDirectMusicObject: */
-extern HRESULT WINAPI IDirectMusicCollectionObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicCollectionObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
-extern HRESULT WINAPI IDirectMusicCollectionObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicCollectionImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicCollectionImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface);
+extern ULONG WINAPI IDirectMusicCollectionImpl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface);
+extern HRESULT WINAPI IDirectMusicCollectionImpl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicCollectionImpl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicCollectionImpl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
+/* IPersistStream: */
+extern HRESULT WINAPI IDirectMusicCollectionImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicCollectionImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicCollectionImpl_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicCollectionImpl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicCollectionImpl_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicCollectionImpl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicCollectionImpl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicCollectionImpl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+
/*****************************************************************************
- * IDirectMusicCollectionObjectStream implementation structure
+ * IDirectMusicInstrumentImpl implementation structure
*/
-struct IDirectMusicCollectionObjectStream
-{
+struct IDirectMusicInstrumentImpl {
/* IUnknown fields */
- ICOM_VFIELD (IPersistStream);
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicInstrument) *InstrumentVtbl;
DWORD ref;
- /* IPersistStreamImpl fields */
- IDirectMusicCollectionObject* pParentObject;
+ /* IDirectMusicInstrumentImpl fields */
+ LARGE_INTEGER liInstrumentPosition; /* offset in a stream where instrument chunk can be found */
+ LPGUID pInstrumentID;
+ LPINSTHEADER pHeader;
+ WCHAR wszName[DMUS_MAX_NAME];
+ /* instrument data */
};
/* IUnknown: */
-extern HRESULT WINAPI IDirectMusicCollectionObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
-extern ULONG WINAPI IDirectMusicCollectionObjectStream_AddRef (LPPERSISTSTREAM iface);
-extern ULONG WINAPI IDirectMusicCollectionObjectStream_Release (LPPERSISTSTREAM iface);
-/* IPersist: */
-extern HRESULT WINAPI IDirectMusicCollectionObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
-/* IPersistStream: */
-extern HRESULT WINAPI IDirectMusicCollectionObjectStream_IsDirty (LPPERSISTSTREAM iface);
-extern HRESULT WINAPI IDirectMusicCollectionObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
-extern HRESULT WINAPI IDirectMusicCollectionObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
-extern HRESULT WINAPI IDirectMusicCollectionObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+extern HRESULT WINAPI IDirectMusicInstrumentImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicInstrumentImpl_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicInstrumentImpl_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicInstrumentImpl: */
+extern HRESULT WINAPI IDirectMusicInstrumentImpl_IDirectMusicInstrument_QueryInterface (LPDIRECTMUSICINSTRUMENT iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicInstrumentImpl_IDirectMusicInstrument_AddRef (LPDIRECTMUSICINSTRUMENT iface);
+extern ULONG WINAPI IDirectMusicInstrumentImpl_IDirectMusicInstrument_Release (LPDIRECTMUSICINSTRUMENT iface);
+extern HRESULT WINAPI IDirectMusicInstrumentImpl_IDirectMusicInstrument_GetPatch (LPDIRECTMUSICINSTRUMENT iface, DWORD* pdwPatch);
+extern HRESULT WINAPI IDirectMusicInstrumentImpl_IDirectMusicInstrument_SetPatch (LPDIRECTMUSICINSTRUMENT iface, DWORD dwPatch);
+/* custom :) */
+extern HRESULT WINAPI IDirectMusicInstrumentImpl_Custom_Load (LPDIRECTMUSICINSTRUMENT iface, LPSTREAM pStm);
/*****************************************************************************
@@ -553,4 +405,126 @@
*/
void register_waveport (LPGUID lpGUID, LPCSTR lpszDesc, LPCSTR lpszDrvName, LPVOID lpContext);
+
+/*****************************************************************************
+ * Misc.
+ */
+/* my custom ICOM stuff */
+#define ICOM_NAME(impl,iface,name) impl* const name=(impl*)(iface)
+#define ICOM_NAME_MULTI(impl,field,iface,name) impl* const name=(impl*)((char*)(iface) - offsetof(impl,field))
+
+/* for simpler reading */
+typedef struct _DMUS_PRIVATE_CHUNK {
+ FOURCC fccID; /* FOURCC ID of the chunk */
+ DWORD dwSize; /* size of the chunk */
+} DMUS_PRIVATE_CHUNK, *LPDMUS_PRIVATE_CHUNK;
+
+/* check whether the given DWORD is even (return 0) or odd (return 1) */
+static inline int even_or_odd (DWORD number) {
+ return (number & 0x1); /* basically, check if bit 0 is set ;) */
+}
+
+/* FOURCC to string conversion for debug messages */
+static inline const char *debugstr_fourcc (DWORD fourcc) {
+ if (!fourcc) return "'null'";
+ return wine_dbg_sprintf ("\'%c%c%c%c\'",
+ (char)(fourcc), (char)(fourcc >> 8),
+ (char)(fourcc >> 16), (char)(fourcc >> 24));
+}
+
+/* DMUS_VERSION struct to string conversion for debug messages */
+static inline const char *debugstr_dmversion (LPDMUS_VERSION version) {
+ if (!version) return "'null'";
+ return wine_dbg_sprintf ("\'%i,%i,%i,%i\'",
+ (int)((version->dwVersionMS && 0xFFFF0000) >> 8), (int)(version->dwVersionMS && 0x0000FFFF),
+ (int)((version->dwVersionLS && 0xFFFF0000) >> 8), (int)(version->dwVersionLS && 0x0000FFFF));
+}
+
+/* dwPatch from MIDILOCALE */
+static inline DWORD MIDILOCALE2Patch (LPMIDILOCALE pLocale) {
+ DWORD dwPatch = 0;
+ if (!pLocale) return 0;
+ dwPatch |= (pLocale->ulBank & F_INSTRUMENT_DRUMS); /* set drum bit */
+ dwPatch |= ((pLocale->ulBank & 0x00007F7F) << 8); /* set MIDI bank location */
+ dwPatch |= (pLocale->ulInstrument & 0x0000007F); /* set PC value */
+ return dwPatch;
+}
+
+/* MIDILOCALE from dwPatch */
+static inline void Patch2MIDILOCALE (DWORD dwPatch, LPMIDILOCALE pLocale) {
+ memset (pLocale, 0, sizeof(MIDILOCALE));
+
+ pLocale->ulInstrument = (dwPatch & 0x7F); /* get PC value */
+ pLocale->ulBank = ((dwPatch & 0x007F7F00) >> 8); /* get MIDI bank location */
+ pLocale->ulBank |= (dwPatch & F_INSTRUMENT_DRUMS); /* get drum bit */
+}
+
+/* used for initialising structs (primarily for DMUS_OBJECTDESC) */
+#define DM_STRUCT_INIT(x) \
+ do { \
+ memset((x), 0, sizeof(*(x))); \
+ (x)->dwSize = sizeof(*x); \
+ } while (0)
+
+
+/* used for generic dumping (copied from ddraw) */
+typedef struct {
+ DWORD val;
+ const char* name;
+} flag_info;
+
+#define FE(x) { x, #x }
+#define DMUSIC_dump_flags(flags,names,num_names) DMUSIC_dump_flags_(flags, names, num_names, 1)
+
+/* generic dump function */
+static inline void DMUSIC_dump_flags_ (DWORD flags, const flag_info* names, size_t num_names, int newline) {
+ unsigned int i;
+
+ for (i=0; i < num_names; i++) {
+ if ((flags & names[i].val) || /* standard flag value */
+ ((!flags) && (!names[i].val))) /* zero value only */
+ DPRINTF("%s ", names[i].name);
+ }
+
+ if (newline) DPRINTF("\n");
+}
+
+static inline void DMUSIC_dump_DMUS_OBJ_FLAGS (DWORD flagmask) {
+ static const flag_info flags[] = {
+ FE(DMUS_OBJ_OBJECT),
+ FE(DMUS_OBJ_CLASS),
+ FE(DMUS_OBJ_NAME),
+ FE(DMUS_OBJ_CATEGORY),
+ FE(DMUS_OBJ_FILENAME),
+ FE(DMUS_OBJ_FULLPATH),
+ FE(DMUS_OBJ_URL),
+ FE(DMUS_OBJ_VERSION),
+ FE(DMUS_OBJ_DATE),
+ FE(DMUS_OBJ_LOADED),
+ FE(DMUS_OBJ_MEMORY),
+ FE(DMUS_OBJ_STREAM)
+ };
+ DMUSIC_dump_flags(flagmask, flags, sizeof(flags)/sizeof(flags[0]));
+}
+
+static inline void DMUSIC_dump_DMUS_OBJECTDESC (LPDMUS_OBJECTDESC pDesc) {
+ if (pDesc) {
+ DPRINTF("DMUS_OBJECTDESC (%p)\n", pDesc);
+ DPRINTF(" - dwSize = %ld\n", pDesc->dwSize);
+ DPRINTF(" - dwValidData = ");
+ DMUSIC_dump_DMUS_OBJ_FLAGS (pDesc->dwValidData);
+ if (pDesc->dwValidData & DMUS_OBJ_CLASS) DPRINTF(" - guidClass = %s\n", debugstr_guid(&pDesc->guidClass));
+ if (pDesc->dwValidData & DMUS_OBJ_OBJECT) DPRINTF(" - guidObject = %s\n", debugstr_guid(&pDesc->guidObject));
+ if (pDesc->dwValidData & DMUS_OBJ_DATE) DPRINTF(" - ftDate = FIXME\n");
+ if (pDesc->dwValidData & DMUS_OBJ_VERSION) DPRINTF(" - vVersion = %s\n", debugstr_dmversion(&pDesc->vVersion));
+ if (pDesc->dwValidData & DMUS_OBJ_NAME) DPRINTF(" - wszName = %s\n", debugstr_w(pDesc->wszName));
+ if (pDesc->dwValidData & DMUS_OBJ_CATEGORY) DPRINTF(" - wszCategory = %s\n", debugstr_w(pDesc->wszCategory));
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME) DPRINTF(" - wszFileName = %s\n", debugstr_w(pDesc->wszFileName));
+ if (pDesc->dwValidData & DMUS_OBJ_MEMORY) DPRINTF(" - llMemLength = %lli\n - pbMemData = %p\n", pDesc->llMemLength, pDesc->pbMemData);
+ if (pDesc->dwValidData & DMUS_OBJ_STREAM) DPRINTF(" - pStream = %p\n", pDesc->pStream);
+ } else {
+ DPRINTF("(NULL)\n");
+ }
+}
+
#endif /* __WINE_DMUSIC_PRIVATE_H */
diff --git a/dlls/dmusic/download.c b/dlls/dmusic/download.c
index 8c334b4..9a6b9f0 100644
--- a/dlls/dmusic/download.c
+++ b/dlls/dmusic/download.c
@@ -1,6 +1,6 @@
/* IDirectMusicDownload Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,30 +17,12 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winreg.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winerror.h"
-#include "mmsystem.h"
-#include "winternl.h"
-#include "mmddk.h"
-#include "wine/windef16.h"
-#include "wine/winbase16.h"
-#include "wine/debug.h"
-#include "dsound.h"
-
#include "dmusic_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmusic);
-/* IDirectMusicDownload IUnknown parts follow: */
-HRESULT WINAPI IDirectMusicDownloadImpl_QueryInterface (LPDIRECTMUSICDOWNLOAD iface, REFIID riid, LPVOID *ppobj)
-{
+/* IDirectMusicDownloadImpl IUnknown part: */
+HRESULT WINAPI IDirectMusicDownloadImpl_QueryInterface (LPDIRECTMUSICDOWNLOAD iface, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IDirectMusicDownloadImpl,iface);
if (IsEqualIID (riid, &IID_IUnknown)
@@ -49,20 +31,17 @@
*ppobj = This;
return S_OK;
}
-
WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicDownloadImpl_AddRef (LPDIRECTMUSICDOWNLOAD iface)
-{
+ULONG WINAPI IDirectMusicDownloadImpl_AddRef (LPDIRECTMUSICDOWNLOAD iface) {
ICOM_THIS(IDirectMusicDownloadImpl,iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicDownloadImpl_Release (LPDIRECTMUSICDOWNLOAD iface)
-{
+ULONG WINAPI IDirectMusicDownloadImpl_Release (LPDIRECTMUSICDOWNLOAD iface) {
ICOM_THIS(IDirectMusicDownloadImpl,iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
@@ -72,18 +51,14 @@
return ref;
}
-/* IDirectMusicDownload Interface follow: */
-HRESULT WINAPI IDirectMusicDownloadImpl_GetBuffer (LPDIRECTMUSICDOWNLOAD iface, void** ppvBuffer, DWORD* pdwSize)
-{
+/* IDirectMusicDownloadImpl IDirectMusicDownload part: */
+HRESULT WINAPI IDirectMusicDownloadImpl_GetBuffer (LPDIRECTMUSICDOWNLOAD iface, void** ppvBuffer, DWORD* pdwSize) {
ICOM_THIS(IDirectMusicDownloadImpl,iface);
-
FIXME("(%p,%p, %p): stub\n", This, ppvBuffer, pdwSize);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicDownload) DirectMusicDownload_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicDownload) DirectMusicDownload_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
IDirectMusicDownloadImpl_QueryInterface,
IDirectMusicDownloadImpl_AddRef,
@@ -92,13 +67,16 @@
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicDownload (LPCGUID lpcGUID, LPDIRECTMUSICDOWNLOAD* ppDMDL, LPUNKNOWN pUnkOuter)
-{
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicDownload)) {
- FIXME("Not yet\n");
- return E_NOINTERFACE;
- }
+HRESULT WINAPI DMUSIC_CreateDirectMusicDownloadImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicDownloadImpl* dmdl;
- WARN("No interface found\n");
- return E_NOINTERFACE;
+ dmdl = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicDownloadImpl));
+ if (NULL == dmdl) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ dmdl->lpVtbl = &DirectMusicDownload_Vtbl;
+ dmdl->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicDownloadImpl_QueryInterface ((LPDIRECTMUSICDOWNLOAD)dmdl, lpcGUID, ppobj);
}
diff --git a/dlls/dmusic/downloadedinstrument.c b/dlls/dmusic/downloadedinstrument.c
index aeb1bcb..8e2dcc3 100644
--- a/dlls/dmusic/downloadedinstrument.c
+++ b/dlls/dmusic/downloadedinstrument.c
@@ -1,6 +1,6 @@
/* IDirectMusicDownloadedInstrument Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,21 +17,12 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmusic_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmusic);
-/* IDirectMusicDownloadedInstrument IUnknown parts follow: */
-HRESULT WINAPI IDirectMusicDownloadedInstrumentImpl_QueryInterface (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface, REFIID riid, LPVOID *ppobj)
-{
+/* IDirectMusicDownloadedInstrumentImpl IUnknown part: */
+HRESULT WINAPI IDirectMusicDownloadedInstrumentImpl_QueryInterface (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IDirectMusicDownloadedInstrumentImpl,iface);
if (IsEqualIID (riid, &IID_IUnknown)
@@ -40,20 +31,17 @@
*ppobj = This;
return S_OK;
}
-
WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicDownloadedInstrumentImpl_AddRef (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface)
-{
+ULONG WINAPI IDirectMusicDownloadedInstrumentImpl_AddRef (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface) {
ICOM_THIS(IDirectMusicDownloadedInstrumentImpl,iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicDownloadedInstrumentImpl_Release (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface)
-{
+ULONG WINAPI IDirectMusicDownloadedInstrumentImpl_Release (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface) {
ICOM_THIS(IDirectMusicDownloadedInstrumentImpl,iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
@@ -63,11 +51,10 @@
return ref;
}
-/* IDirectMusicDownloadedInstrument Interface follow: */
+/* IDirectMusicDownloadedInstrumentImpl IDirectMusicDownloadedInstrument part: */
/* none at this time */
-ICOM_VTABLE(IDirectMusicDownloadedInstrument) DirectMusicDownloadedInstrument_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicDownloadedInstrument) DirectMusicDownloadedInstrument_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
IDirectMusicDownloadedInstrumentImpl_QueryInterface,
IDirectMusicDownloadedInstrumentImpl_AddRef,
@@ -75,13 +62,16 @@
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicDownloadedInstrument (LPCGUID lpcGUID, LPDIRECTMUSICDOWNLOADEDINSTRUMENT* ppDMDLInstrument, LPUNKNOWN pUnkOuter)
-{
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicDownloadedInstrument)) {
- FIXME("Not yet\n");
- return E_NOINTERFACE;
+HRESULT WINAPI DMUSIC_CreateDirectMusicDownloadedInstrumentImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicDownloadedInstrumentImpl* dmdlinst;
+
+ dmdlinst = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicDownloadedInstrumentImpl));
+ if (NULL == dmdlinst) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
}
-
- WARN("No interface found\n");
- return E_NOINTERFACE;
+ dmdlinst->lpVtbl = &DirectMusicDownloadedInstrument_Vtbl;
+ dmdlinst->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicDownloadedInstrumentImpl_QueryInterface ((LPDIRECTMUSICDOWNLOADEDINSTRUMENT)dmdlinst, lpcGUID, ppobj);
}
diff --git a/dlls/dmusic/helper.c b/dlls/dmusic/helper.c
deleted file mode 100644
index ef2f90f..0000000
--- a/dlls/dmusic/helper.c
+++ /dev/null
@@ -1,1610 +0,0 @@
-/* Helper functions for dmusic file handling
- *
- * Copyright (C) 2003 Rok Mandeljc
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * 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 Library General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-#if 0
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-#include "wine/unicode.h"
-
-#include "dmusic_private.h"
-
-/* used while still in testing */
-WINE_DEFAULT_DEBUG_CHANNEL(dmfile);
-WINE_DECLARE_DEBUG_CHANNEL(dmfiledat);
-
-/******************************************************************************
- * DMUSIC_FillUNFOFromFileHandle:
- * - fills a UNFO_List struct (dmusic_private.h) with data from file handle.
- * - IMPORTANT: it expects a LIST chunk at beginning, so if you are calling it
- * from another DMUSIC_Fill* function, make sure pointer is at
- * correct place!
- */
-HRESULT WINAPI DMUSIC_FillUNFOFromFileHandle (UNFO_List UNFO, HANDLE fd)
-{
- rawChunk chunk;
- DWORD BytesRead, ListCount = 0, ListSize;
-
- TRACE("reading 'LIST' chunk...\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL); /* read 'LIST' */
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read size of 'LIST' chunk */
- if (chunk.id == FOURCC_LIST && ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL) && chunk.id == DMUS_FOURCC_UNFO_LIST) {
- TRACE("'UNFO': UNFO list\n");
- ListSize = chunk.size - sizeof(FOURCC); /* list contents size is same as size of LIST chunk - size of following field ID*/
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL); /* read ID of following field */
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read size of following field */
- ListCount += chunk.size + sizeof(DWORD) + sizeof(FOURCC);
- switch (chunk.id)
- {
- case DMUS_FOURCC_UNAM_CHUNK: {
- TRACE("'UNAM': name\n");
- UNFO.name = (WCHAR*) HeapAlloc (GetProcessHeap (), 0, chunk.size); /* allocate space */
- ReadFile (fd, UNFO.name, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> name = %s\n", debugstr_w(UNFO.name));
- break;
- } case DMUS_FOURCC_UART_CHUNK: {
- TRACE("'UART': artist\n");
- UNFO.artist = (WCHAR*) HeapAlloc (GetProcessHeap (), 0, chunk.size); /* allocate space */
- ReadFile (fd, UNFO.artist, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("artist = %s\n", debugstr_w(UNFO.artist));
- break;
- } case DMUS_FOURCC_UCOP_CHUNK: {
- TRACE("'UCOP': copyright\n");
- UNFO.copyright = (WCHAR*) HeapAlloc (GetProcessHeap (), 0, chunk.size); /* allocate space */
- ReadFile (fd, UNFO.copyright, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> copyright = %s\n", debugstr_w(UNFO.copyright));
- break;
- } case DMUS_FOURCC_USBJ_CHUNK:{
- TRACE("'USBJ': subject\n");
- UNFO.subject = (WCHAR*) HeapAlloc (GetProcessHeap (), 0, chunk.size); /* allocate space */
- ReadFile (fd, UNFO.subject, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> subject = %s\n", debugstr_w(UNFO.subject));
- break;
- } case DMUS_FOURCC_UCMT_CHUNK: {
- TRACE("'UCMT': comment\n");
- UNFO.comment = (WCHAR*) HeapAlloc (GetProcessHeap (), 0, chunk.size); /* allocate space */
- ReadFile (fd, UNFO.comment, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> comment = %s\n", debugstr_w(UNFO.comment));
- break;
- } default: {
- WARN("invalid chunk (only 'UNAM', 'UART', 'UCOP', 'USBJ', 'UCMT' allowed)\n");
- break;
- }
- }
- TRACE("ListCount (%ld) < ListSize(%ld)\n", ListCount, ListSize);
- } while (ListCount < ListSize);
- } else {
- WARN("'UNFO' not found: not an UNFO list\n");
- }
- return S_OK;
-}
-
-/******************************************************************************
- * DMUSIC_FillReferenceFromFileHandle:
- * - fills a Reference struct (dmusic_private.h) with data from file handle.
- * - IMPORTANT: it expects a LIST chunk at beginning, so if you are calling it
- * from another DMUSIC_Fill* function, make sure pointer is at
- * correct place!
- */
-HRESULT WINAPI DMUSIC_FillReferenceFromFileHandle (Reference reference, HANDLE fd)
-{
- rawChunk chunk;
- DWORD BytesRead, ListCount = 0, ListSize;
-
- TRACE("reading 'LIST' chunk...\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL); /* read 'LIST' */
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read size of 'LIST' chunk */
- if (chunk.id == FOURCC_LIST && ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL) && chunk.id == DMUS_FOURCC_REF_LIST) {
- TRACE("'DMRF': reference list\n");
- ListSize = chunk.size - sizeof(FOURCC); /* list contents size is same as size of LIST chunk - size of following field ID*/
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL); /* read ID of following field */
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read size of following field */
- ListCount += chunk.size + sizeof(DWORD) + sizeof(FOURCC);
- switch (chunk.id)
- {
- case DMUS_FOURCC_REF_CHUNK: {
- TRACE("'refh': reference header\n");
- ReadFile (fd, &reference.header, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> guidClassID = %s; dwValidData = %ld\n", debugstr_guid (&reference.header.guidClassID), reference.header.dwValidData);
- break;
- } case DMUS_FOURCC_GUID_CHUNK: {
- TRACE("'guid': GUID\n");
- ReadFile (fd, &reference.guid, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> GUID = %s\n", debugstr_guid (&reference.guid));
- break;
- } case DMUS_FOURCC_DATE_CHUNK: {
- TRACE("'date': file date\n");
- ReadFile (fd, &reference.date, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> file date = %ld%ld\n", reference.date.dwHighDateTime, reference.date.dwLowDateTime);
- break;
- } case DMUS_FOURCC_NAME_CHUNK: {
- TRACE("'name': name\n");
- reference.name = (WCHAR*) HeapAlloc (GetProcessHeap (), 0, chunk.size);
- ReadFile (fd, reference.name, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> name = %s\n", debugstr_w (reference.name));
- break;
- } case DMUS_FOURCC_FILE_CHUNK: {
- TRACE("'file': file name\n");
- reference.file = (WCHAR*) HeapAlloc (GetProcessHeap (), 0, chunk.size);
- ReadFile (fd, reference.file, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> file name = %s\n", debugstr_w (reference.file));
- break;
- } case DMUS_FOURCC_CATEGORY_CHUNK: {
- TRACE("'catg': category\n");
- reference.category = (WCHAR*) HeapAlloc (GetProcessHeap (), 0, chunk.size);
- ReadFile (fd, reference.category, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> category = %s\n", debugstr_w (reference.category));
- break;
- } case DMUS_FOURCC_VERSION_CHUNK: {
- TRACE("'vers': version\n");
- ReadFile (fd, &reference.version, sizeof(DMUS_IO_VERSION), &BytesRead, NULL);
- TRACE_(dmfiledat)("=> version = %ld%ld\n", reference.version.dwVersionMS, reference.version.dwVersionLS);
- break;
- } default: {
- WARN("invalid chunk (only 'refh, 'guid', 'date', 'name', 'file', 'catg', 'vers' allowed\n");
- break;
- }
- }
- TRACE("ListCount (%ld) < ListSize (%ld)\n", ListCount, ListSize);
- } while (ListCount < ListSize);
- }
-
- return S_OK;
-}
-
-/******************************************************************************
- * DMUSIC_FillBandFromFileHandle:
- * - fills a IDirectMusicBandImpl struct with data from file handle.
- * - IMPORTANT: it expects a RIFF chunk at beginning, so if you are calling it
- * from another DMUSIC_Fill* function, make sure pointer is at
- * correct place!
- * - TODO: replace data in function with data in IDirectMusicBandImpl
- */
-HRESULT WINAPI DMUSIC_FillBandFromFileHandle (IDirectMusicBandImpl *band, HANDLE fd)
-{
- rawChunk chunk;
- DWORD BytesRead, ListCount = 0, ListSize, ListCount2 = 0, ListSize2, FileCount = 0, FileSize;
- /* FIXME: Replace stuff located below with the stuff in band */
- UNFO_List UNFO;
- DMUS_IO_VERSION version;
- GUID guid;
- /* only in singular form for time being */
- DMUS_IO_INSTRUMENT header;
- Reference reference;
-
- TRACE("reading 'RIFF' chunk...\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL); /* read 'RIFF' */
- if (chunk.id == FOURCC_RIFF) {
- TRACE("'RIFF': RIFF file\n");
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read size of 'RIFF' chunk */
- FileSize = chunk.size - sizeof(FOURCC); /* file content size = size of 'RIFF' chunk - FOURCC ID of following form */
- TRACE("reading chunks ...\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL); /* read ID of following form */
- if (chunk.id == DMUS_FOURCC_BAND_FORM) {
- TRACE("'DMBD': band form\n");
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- FileCount += chunk.size + sizeof(DWORD) + sizeof(FOURCC);
- switch (chunk.id)
- {
- case DMUS_FOURCC_GUID_CHUNK: {
- TRACE("'guid': GUID\n");
- ReadFile (fd, &guid, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> GUID = %s\n", debugstr_guid(&guid));
- break;
- } case DMUS_FOURCC_VERSION_CHUNK: {
- TRACE("'vers': version\n");
- ReadFile (fd, &version, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> version = %ld%ld\n", version.dwVersionMS, version.dwVersionLS);
- break;
- } case FOURCC_LIST:{
- TRACE("'LIST': list chunk (size = %ld)\n", chunk.size);
- ListSize = chunk.size - sizeof(FOURCC); /* list content size = size of 'LIST' chunk - FOURCC ID of the list */
- ListCount = 0; /* reset */
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL); /* read list ID */
- switch (chunk.id)
- {
- case DMUS_FOURCC_UNFO_LIST: {
- TRACE("'UNFO': UNFO list (content size = %ld)\n", ListSize);
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* set pointer at beginning of list */
- DMUSIC_FillUNFOFromFileHandle (UNFO, fd); /* forward to DMUSIC_FillUNFOFromFileHandle */
- break;
- } case DMUS_FOURCC_INSTRUMENTS_LIST: {
- TRACE("'lbil': instrumets list (content size = %ld)\n", ListSize);
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- if (chunk.id == FOURCC_LIST && ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL) && chunk.id == DMUS_FOURCC_INSTRUMENT_LIST) {
- ListSize2 = chunk.size - sizeof(FOURCC); /* list content size = size of 'LIST' chunk - FOURCC ID of the list */
- ListCount2 = 0; /* reset */
- TRACE("'lbin': instrument (size = %ld)\n", ListSize2);
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount2 += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- switch (chunk.id)
- {
- case DMUS_FOURCC_INSTRUMENT_CHUNK: {
- TRACE("'bins': instrument header\n");
- ReadFile (fd, &header, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> dwPatch = %ld; dwAssignPatch = %ld; dwPChannel = %ld; dwFlags = %ld; bPan = %i; bVolume = %i; nTranspose = %i; dwChannelPriority = %ld; nPitchBendRange = %i", \
- header.dwPatch, header.dwAssignPatch, header.dwPChannel, header.dwFlags, header.bPan, header.bVolume, header.nTranspose, header.dwChannelPriority, header.nPitchBendRange);
- break;
- } case FOURCC_LIST: {
- TRACE("'LIST': list chunk (size = %ld)\n", chunk.size);
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == DMUS_FOURCC_REF_LIST) {
- TRACE("'DMRF': reference list (size = %ld)\n", chunk.size - 4); /* set pointer at beginning of list */
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT);
- DMUSIC_FillReferenceFromFileHandle (reference, fd); /* forward to DMUSIC_FillReferenceFromFileHandle */
- } else WARN("invalid chunk (only 'DMRF' chunk allowed\n");
- break;
- } default: {
- WARN("invalid chunk (only 'bins' and 'LIST' chunks allowed\n");
- break;
- }
- }
- TRACE("ListCount2 (%ld) < ListSize2 (%ld)\n", ListCount2, ListSize2);
- } while (ListCount2 < ListSize2);
- } else WARN("invalid chunk (only 'lbin' chunk allowed)\n");
- TRACE("ListCount (%ld) < ListSize (%ld)\n", ListCount, ListSize);
- } while (ListCount < ListSize);
- break;
- } default: {
- WARN("invalid chunk (only 'UNFO' and 'lbil' chunks allowed\n");
- break;
- }
- }
- break;
- } default: {
- WARN("invalid chunk (only 'guid', 'vers' and 'LIST' chunks allowed)\n");
- break;
- }
- }
- TRACE("FileCount (%ld) < FileSize (%ld)\n", FileCount, FileSize);
- } while (FileCount < FileSize);
- }
- } else {
- WARN("'RIFF' not found: not a RIFF file\n");
- }
-
- return S_OK;
-}
-
-/******************************************************************************
- * DMUSIC_FillTrackFromFileHandle:
- * - fills a IDirectMusicTrack8Impl struct with data from file handle.
- * - IMPORTANT: it expects a RIFF chunk at beginning, so if you are calling it
- * from another DMUSIC_Fill* function, make sure pointer is at
- * correct place!
- * - TODO: replace data in function with data in IDirectMusicTrackImpl
- * implement loading for missing (empty) clauses
- * fix a problem with tempo track loading (look at code)
- */
-HRESULT WINAPI DMUSIC_FillTrackFromFileHandle (IDirectMusicTrack8Impl *segment, HANDLE fd)
-{
- rawChunk chunk;
- DWORD BytesRead, ListCount = 0, ListCount2 = 0, ListCount3 = 0, ListCount4 = 0, \
- ListSize, ListSize2, ListSize3, ListSize4, FileCount = 0, FileSize, FileCount2 = 0, FileSize2 /* *2s, *3s and *4s are for various subchunks */;
- int i;
-
- /* general track info */
- DMUS_IO_TRACK_HEADER header;
- DMUS_IO_TRACK_EXTRAS_HEADER extheader;
- GUID guid;
- DMUS_IO_VERSION version;
- UNFO_List UNFO;
- /* tempo track stuff */
- DMUS_IO_TEMPO_ITEM tempo;
- /* chord track stuff */
- DWORD chordHeader;
- ChordData chordData;
- /* command track stuff */
- DMUS_IO_COMMAND command;
- /* sytle list stuff (support only 1 while still in parse development mode)*/
- DWORD timestamp;
- Reference reference;
- /* band track stuff */
- BandTrack bandTrack;
- /* wave track stuff (only singular) */
- WaveTrack waveTrack;
- /* segment trigger track stuff */
- SegTriggerTrack segTriggerTrack;
- /* time signature track stuff */
- TimeSigTrack timeSigTrack;
- /* script track list stuff */
- ScriptEvent event;
-
- TRACE("reading 'RIFF' chunk...\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == FOURCC_RIFF) {
- TRACE ("'RIFF': RIFF file\n");
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read size of 'RIFF' chunk */
- FileSize = chunk.size - sizeof(FOURCC); /* file content size = size of 'RIFF' chunk - FOURCC ID of following form */
- TRACE("reading chunks ...\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL); /* read ID of following form */
- if (chunk.id == DMUS_FOURCC_TRACK_FORM) {
- TRACE("'DMTK': track form\n");
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- FileCount += chunk.size + sizeof(DWORD) + sizeof(FOURCC);
- switch (chunk.id)
- {
- case DMUS_FOURCC_TRACK_CHUNK: {
- TRACE("'trkh': track header\n");
- ReadFile (fd, &header, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> track guidClassID = %s; dwPosition = %ld; dwGroup = %ld; ckid = %ld; fccType = %ld\n", \
- debugstr_guid (&header.guidClassID), header.dwPosition, header.dwGroup, header.ckid, header.fccType);
- break;
- } case DMUS_FOURCC_TRACK_EXTRAS_CHUNK: {
- TRACE("'trkx': extra track flags\n");
- ReadFile (fd, &extheader, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> dwFlags = %ld; dwPriority = %ld\n", extheader.dwFlags,
- extheader.dwPriority);
- break;
- } case DMUS_FOURCC_GUID_CHUNK: {
- TRACE("'guid': GUID\n");
- ReadFile (fd, &guid, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> GUID = %s\n", debugstr_guid(&guid));
- break;
- } case DMUS_FOURCC_VERSION_CHUNK: {
- TRACE("'vers': version\n");
- ReadFile (fd, &version, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> version = %ld%ld\n", version.dwVersionMS, version.dwVersionLS);
- break;
- } case FOURCC_LIST:{
- TRACE("'LIST': list (size = %ld)\n", chunk.size);
- ListSize = chunk.size - sizeof(FOURCC); /* list content size = size of 'LIST' chunk - FOURCC ID of the list */
- ListCount = 0; /* reset */
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- switch (chunk.id)
- {
- case DMUS_FOURCC_UNFO_LIST: {
- TRACE("'UNFO': UNFO list (forward to DMUSIC_FillUNFOFromFileHandle(...))\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before the 'LIST' chunk */
- DMUSIC_FillUNFOFromFileHandle (UNFO, fd); /* forward to DMUSIC_FillUNFOFromFileHandle */
- break;
- } case DMUS_FOURCC_CHORDTRACK_LIST: {
- TRACE("'cord': chord track list\n");
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- switch (chunk.id)
- {
- case DMUS_FOURCC_CHORDTRACKHEADER_CHUNK: {
- TRACE("'crdh': chord header\n");
- ReadFile (fd, &chordHeader, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> chord root = %i; scale = %i\n", (chordHeader && 0xFF000000) >> 24, chordHeader && 0x00FFFFFF);
- break;
- } case DMUS_FOURCC_CHORDTRACKBODY_CHUNK: {
- TRACE("'crdb': chord body\n");
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read sizeof (DMUS_IO_CHORD) */
- ReadFile (fd, &chordData.chord, chunk.size, &BytesRead, NULL); /* read DMUS_IO_CHORD */
- TRACE_(dmfiledat)("=> wszName[16] = %s; mtTime = %li; chord.wMeasure = %d; chord.bBeat = %i; bFlags = %i\n", \
- debugstr_w (chordData.chord.wszName), chordData.chord.mtTime, chordData.chord.wMeasure, chordData.chord.bBeat, chordData.chord.bFlags);
- ReadFile (fd, &chordData.nrofsubchords, sizeof(DWORD), &BytesRead, NULL); /* read number of subchords */
- TRACE_(dmfiledat)("=> number of subchords = %ld\n", chordData.nrofsubchords);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read sizeof (DMUS_IO_SUBCHORD) */
- chordData.subchord = (DMUS_IO_SUBCHORD*) HeapAlloc (GetProcessHeap (), 0, sizeof(DMUS_IO_SUBCHORD) * chordData.nrofsubchords); /* allocate space */
- for (i = 0; i < chordData.nrofsubchords; i++)
- {
- TRACE_(dmfiledat)("=> subchord[%i]: dwChordPattern = %ld; dwScalePattern = %ld; dwInversionPoints = %ld; dwLevels = %ld; bChordRoot = %i; bScaleRoot = %i\n", \
- i, chordData.subchord[i].dwChordPattern, chordData.subchord[i].dwScalePattern, chordData.subchord[i].dwInversionPoints, chordData.subchord[i].dwLevels, \
- chordData.subchord[i].bChordRoot, chordData.subchord[i].bScaleRoot);
- }
- ReadFile (fd, chordData.subchord, chunk.size*chordData.nrofsubchords, &BytesRead, NULL);
- break;
- } default: {
- WARN("Invalid chunk (only 'crdh' and 'crdb' chunks allowed)\n");
- break;
- }
- }
- TRACE("ListCount (%ld) < ListSize (%ld)\n", ListCount, ListSize);
- } while (ListCount < ListSize);
- break;
- } case DMUS_FOURCC_STYLE_TRACK_LIST: {
- TRACE("'sttr': style track list\n");
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- if (chunk.id == FOURCC_LIST && ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL) && chunk.id == DMUS_FOURCC_STYLE_REF_LIST) {
- ListSize2 = chunk.size - sizeof(FOURCC);
- ListCount2 = 0;
- TRACE("'strf': style reference list (size = %ld)\n", ListSize2);
- do {
-
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount2 += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- switch (chunk.id)
- {
- case DMUS_FOURCC_TIME_STAMP_CHUNK: {
- TRACE("'stmp': time stamp\n");
- ReadFile (fd, ×tamp, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> time stamp = %ld\n", timestamp);
- break;
- } case FOURCC_LIST: {
- TRACE("'LIST': list\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == DMUS_FOURCC_REF_LIST){
- TRACE("'DMRF': reference list (forward to DMUSIC_FillReferenceFromFileHandle(...)\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before 'LIST' chunk */
- DMUSIC_FillReferenceFromFileHandle (reference, fd);
- } else {
- WARN("invalid chunk (only 'DMRF' chunk allwed)\n");
- }
- break;
- } default: {
- WARN("invalid chunk (only 'stmp' and 'LIST' chunk allowed)\n");
- break;
- }
- }
- TRACE("ListCount2 (%ld) < ListSize2 (%ld)\n", ListCount2, ListSize2);
- } while (ListCount2 < ListSize2);
- } else {
- WARN("invalid chunk (only 'strf' allowed)\n");
- }
- TRACE("ListCount (%ld) < ListSize (%ld)\n", ListCount, ListSize);
- } while (ListCount < ListSize);
- break;
- } case DMUS_FOURCC_PERS_TRACK_LIST: {
- FIXME("'pftr': chordmap track list: not supported yet\n");
- break;
- } case DMUS_FOURCC_LYRICSTRACK_LIST: {
- FIXME("'lyrt': lyrics track list: not supported yet\n");
- break;
- } case DMUS_FOURCC_MARKERTRACK_LIST: {
- FIXME("'MARK': marker track list: not supported yet\n");
- break;
- } case DMUS_FOURCC_MELODYFORM_TRACK_LIST: {
- FIXME("'mfrm': melody formulation track list: not supported yet\n");
- break;
- } case DMUS_FOURCC_PARAMCONTROLTRACK_TRACK_LIST: {
- FIXME("'prmt': parameter control track list: not supported yet\n");
- break;
- } case DMUS_FOURCC_SCRIPTTRACK_LIST: {
- TRACE("'scrt': script track list\n");
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- if (chunk.id == FOURCC_LIST && ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL) && chunk.id == DMUS_FOURCC_SCRIPTTRACKEVENTS_LIST) {
- TRACE("'scrl': script events list\n");
- ListSize2 = chunk.size - sizeof(FOURCC); /* list content size = size of 'LIST' chunk - FOURCC ID of the list */
- ListCount2 = 0;
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount2 += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- if (chunk.id == FOURCC_LIST && ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL) && chunk.id == DMUS_FOURCC_SCRIPTTRACKEVENT_LIST) {
- TRACE("'scre': script event list\n");
- ListSize3 = chunk.size - sizeof(FOURCC); /* list content size = size of 'LIST' chunk - FOURCC ID of the list */
- ListCount3 = 0;
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount3 += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- switch (chunk.id)
- {
- case DMUS_FOURCC_SCRIPTTRACKEVENTHEADER_CHUNK: {
- TRACE("'scrh': event header\n");
- ReadFile (fd, &event.header, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> dwFlags = %ld; lTimeLogical = %li; lTimePhysical = %li\n", \
- event.header.dwFlags, event.header.lTimeLogical, event.header.lTimePhysical);
- break;
- } case FOURCC_LIST: {
- TRACE("'LIST': list\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == DMUS_FOURCC_REF_LIST){
- TRACE("'DMRF': reference list (forward to DMUSIC_FillReferenceFromFileHandle(...)\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before 'LIST' chunk */
- DMUSIC_FillReferenceFromFileHandle (event.reference, fd);
- } else {
- WARN("invalid chunk (only 'DMRF' chunk allwed)\n");
- }
- break;
- } case DMUS_FOURCC_SCRIPTTRACKEVENTNAME_CHUNK: {
- TRACE("'scrn': routine name\n");
- event.name = (WCHAR*) HeapAlloc (GetProcessHeap (), 0, chunk.size);
- ReadFile (fd, event.name, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> routine name = %s\n", debugstr_w (event.name));
- break;
- } default: {
- WARN("invalid chunk (only 'scrh', 'scrn' and 'LIST' chunk allowed)\n");
- break;
- }
- }
- TRACE("ListCount3 (%ld) < ListSize3 (%ld)\n", ListCount3, ListSize3);
- } while (ListCount3 < ListSize3);
- } else {
- WARN("invalid chunk (only 'scre' chunk allowed)\n");
- }
- TRACE("ListCount2 (%ld) < ListSize2 (%ld)\n", ListCount2, ListSize2);
- } while (ListCount2 < ListSize2);
- } else {
- WARN("invalid chunk (only 'scrl' chunk allowed)\n");
- }
- TRACE("ListCount (%ld) < ListSize (%ld)\n", ListCount, ListSize);
- } while (ListCount < ListSize);
- break;
- } case DMUS_FOURCC_SEGTRACK_LIST: {
- TRACE("'segt': segment trigger track list\n");
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- switch (chunk.id)
- {
- case DMUS_FOURCC_SEGTRACK_CHUNK: {
- TRACE("'sgth': segment track header\n");
- ReadFile (fd, &segTriggerTrack.header, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> dwFlags = %ld\n", segTriggerTrack.header.dwFlags);
- break;
- } case FOURCC_LIST: {
- TRACE("'LIST': list\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == DMUS_FOURCC_SEGMENTS_LIST) {
- TRACE("'lsgl': segment lists list\n");
- ListSize2 = chunk.size - sizeof(FOURCC); /* list content size = size of 'LIST' chunk - FOURCC ID of the list */
- ListCount2 = 0;
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount2 += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- if (chunk.id == FOURCC_LIST && ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL) && chunk.id == DMUS_FOURCC_SEGMENT_LIST) {
- ListSize3 = chunk.size - sizeof(FOURCC);
- ListCount3 = 0;
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount3 += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- switch (chunk.id)
- {
- case DMUS_FOURCC_SEGMENTITEM_CHUNK: {
- TRACE("'sgih': segment item header\n");
- ReadFile (fd, &segTriggerTrack.itemHeader, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> lTimeLogical = %li; lTimePhysical = %li; dwPlayFlags = %ld; dwFlags = %ld\n", \
- segTriggerTrack.itemHeader.lTimeLogical, segTriggerTrack.itemHeader.lTimePhysical, \
- segTriggerTrack.itemHeader.dwPlayFlags, segTriggerTrack.itemHeader.dwFlags);
- break;
- } case DMUS_FOURCC_SEGMENTITEMNAME_CHUNK: {
- TRACE("'snam': motif name\n");
- segTriggerTrack.motifName = (WCHAR*) HeapAlloc (GetProcessHeap (), 0, chunk.size);
- ReadFile (fd, segTriggerTrack.motifName, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> motif name = %s\n", debugstr_w (segTriggerTrack.motifName));
- break;
- } case FOURCC_LIST: {
- TRACE("'LIST': list\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == DMUS_FOURCC_REF_LIST) {
- TRACE("'DMRF': reference list (forward to DMUSIC_FillReferenceFromFileHandle(...)\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before 'LIST' chunk */
- DMUSIC_FillReferenceFromFileHandle (segTriggerTrack.reference, fd);
- } else {
- WARN("invalid chunk (only 'DMRF' chunk allowed)\n");
- }
- break;
- } default: {
- WARN("invalid chunk (only 'sgih', 'snam' and 'LIST' chunks allowed)\n");
- break;
- }
- }
- TRACE("ListCount3 (%ld) < ListSize3 (%ld)\n", ListCount3, ListSize3);
- } while (ListCount3 < ListSize3);
- } else {
- WARN("invalid chunk (only 'lseg' chunk allowed)\n");
- }
- TRACE("ListCount2 (%ld) < ListSize2 (%ld)\n", ListCount2, ListSize2);
- } while (ListCount2 < ListSize2);
- } else {
- WARN("invalid chunk (only 'lsgl' chunk allowed\n");
- }
- break;
- } default: {
- WARN("invalid chunk (only 'sgth' and 'LIST' chunks allowed)\n");
- break;
- }
- }
- TRACE("ListCount (%ld) < ListSize (%ld)\n", ListCount, ListSize);
- } while (ListCount < ListSize);
- break;
- } case DMUS_FOURCC_TIMESIGTRACK_LIST: {
- TRACE("'TIMS': time signature track list\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == DMUS_FOURCC_TIMESIGNATURE_TRACK) {
- TRACE("'tims': time signatures\n");
- timeSigTrack.nrofitems = chunk.size - sizeof(DWORD);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- if (chunk.size != sizeof(DMUS_IO_TIMESIGNATURE_ITEM))
- WARN("there seem to be a problem: file claims that size of DMUSIC_IO_TEMPO_ITEM is %ld, while real sizeof returns %i\n", chunk.size, sizeof(DMUS_IO_TIMESIGNATURE_ITEM));
- timeSigTrack.nrofitems /= chunk.size;
- TRACE_(dmfiledat)("=> number of items = %ld\n", timeSigTrack.nrofitems);
- timeSigTrack.items = (DMUS_IO_TIMESIGNATURE_ITEM*) HeapAlloc (GetProcessHeap (), 0, chunk.size * timeSigTrack.nrofitems);
- ReadFile(fd, timeSigTrack.items, chunk.size * timeSigTrack.nrofitems, &BytesRead, NULL);
- for (i = 0; i < timeSigTrack.nrofitems; i++)
- {
- TRACE_(dmfiledat)("=> time signature[%i]: lTime = %li; bBeatsPerMeasure = %i; bBeat = %i; wGridsPerBeat = %d\n", \
- i, timeSigTrack.items[i].lTime, timeSigTrack.items[i].bBeatsPerMeasure, timeSigTrack.items[i].bBeat, timeSigTrack.items[i].wGridsPerBeat);
- }
- } else {
- WARN("invalid chunk (only 'tims' chunk allowed)\n");
- }
- break;
- } case DMUS_FOURCC_WAVETRACK_LIST: {
- TRACE("'wavt': wave track list\n");
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- switch (chunk.id)
- {
- case DMUS_FOURCC_WAVETRACK_CHUNK: {
- TRACE("'wath': wave track header\n");
- ReadFile (fd, &waveTrack.header, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> lVolume = %li; dwFlags = %ld\n", waveTrack.header.lVolume, waveTrack.header.dwFlags);
- break;
- } case FOURCC_LIST: {
- TRACE("'LIST': list\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == DMUS_FOURCC_WAVEPART_LIST) {
- TRACE("'wavp': wave parts list\n");
- ListSize2 = chunk.size - sizeof(FOURCC);
- ListCount2 = 0;
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount2 += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- switch (chunk.id)
- {
- case DMUS_FOURCC_WAVEPART_CHUNK: {
- TRACE("'waph': wave part header\n");
- ReadFile (fd, &waveTrack.partHeader, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> lVolume = %li; dwVariations = %ld; dwPChannel = %ld; dwLockToPart = %ld; dwFlags = %ld; dwIndex = %ld\n", \
- waveTrack.partHeader.lVolume, waveTrack.partHeader.dwVariations, waveTrack.partHeader.dwPChannel, \
- waveTrack.partHeader.dwLockToPart, waveTrack.partHeader.dwFlags, waveTrack.partHeader.dwIndex);
- break;
- } case FOURCC_LIST: {
- TRACE("'LIST': list\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == DMUS_FOURCC_WAVEITEM_LIST) {
- TRACE("'wavi': wave items list\n");
- ListSize3 = chunk.size - sizeof(FOURCC);
- ListCount3 = 0;
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount3 += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- if (chunk.id == FOURCC_LIST && ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL) && chunk.id == DMUS_FOURCC_WAVE_LIST) {
- TRACE("'wave': wave item list\n");
- ListSize4 = chunk.size - sizeof(FOURCC); /* list content size = size of 'LIST' chunk - FOURCC ID of the list */
- ListCount4 = 0; /* reset */
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount4 += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- switch (chunk.id)
- {
- case DMUS_FOURCC_WAVEITEM_CHUNK: {
- TRACE("'waih': wave item header\n");
- ReadFile (fd, &waveTrack.itemHeader, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> lVolume = %li; lPitch = %li; dwVariations = %ld; rtTime = FIXME; rtStartOffset = FIXME; rtReserved = FIXME; rtDuration = FIXME; mtLogicalTime = %li; dwLoopStart = %ld; dwLoopEnd = %ld; dwFlags = %ld\n", \
- waveTrack.itemHeader.lVolume, waveTrack.itemHeader.lPitch, waveTrack.itemHeader.dwVariations, /*waveTrack.itemHeader.rtTime, \
- waveTrack.itemHeader.rtStartOffset, waveTrack.itemHeader.rtReserved, waveTrack.itemHeader.rtDuration, */waveTrack.itemHeader.mtLogicalTime, \
- waveTrack.itemHeader.dwLoopStart, waveTrack.itemHeader.dwLoopEnd, waveTrack.itemHeader.dwFlags);
- break;
- } case mmioFOURCC('w','v','c','u'): {
- FIXME("'wvcu': undocumented and unknown chunk type (skipping)\n");
- SetFilePointer (fd, chunk.size, NULL, FILE_CURRENT); /* skip */
- break;
- } case FOURCC_LIST: {
- TRACE("'LIST': list\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == DMUS_FOURCC_REF_LIST) {
- TRACE("'DMRF': reference list (forward to DMUSIC_FillReferenceFromFileHandle(...)\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before 'LIST' chunk */
- DMUSIC_FillReferenceFromFileHandle (waveTrack.reference, fd);
- } else {
- WARN ("invalid chunk (only 'DMRF' chunk allowed\n");
- }
- break;
- } default: {
- WARN("invalid chunk (only 'waih' and 'LIST' (and undocumented 'wvcu') chunks allowed)\n");
- }
- }
- TRACE("ListCount4 (%ld) < ListSize4 (%ld)\n", ListCount4, ListSize4);
- } while (ListCount4 < ListSize4);
- } else {
- WARN("invalid chunk (only 'wave' chunk allowed)\n");
- }
- TRACE("ListCount3 (%ld) < ListSize3 (%ld)\n", ListCount3, ListSize3);
- } while (ListCount3 < ListSize3);
- } else {
- WARN("invalid chunk (only 'wavi' chunk allowed)\n");
- }
- break;
- } default: {
- WARN("invalid chunk (only 'waph' and 'LIST' chunks allowed)\n");
- break;
- }
- }
- TRACE("ListCount2 (%ld) < ListSize2 (%ld)\n", ListCount2, ListSize2);
- } while (ListCount2 < ListSize2);
- } else {
- WARN("invalid chunk (only 'wavp' chunk allwed)\n");
- }
- break;
- } default: {
- WARN("invalid chunk (only 'wath' and 'LIST' chunks allowed)\n");
- break;
- }
- }
- TRACE("ListCount (%ld) < ListSize (%ld)\n", ListCount, ListSize);
- } while (ListCount < ListSize);
- break;
- } default: {
- WARN ("invalid chunk (only 'UNFO', 'cord', 'sttr', 'pftr', 'lyrt', 'MARK' and 'mfrm' chunks allowed)\n");
- break;
- }
- }
- break;
- } case FOURCC_RIFF: {
- TRACE("'RIFF': embedded RIFF chunk (probably band track form)\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == DMUS_FOURCC_BANDTRACK_FORM) {
- TRACE("'DMBT': band track form\n");
- FileSize2 = chunk.size - sizeof(FOURCC);
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- FileCount2 += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- switch (chunk.id)
- {
- case DMUS_FOURCC_BANDTRACK_CHUNK: {
- TRACE("'dbth': band track header\n");
- ReadFile (fd, &bandTrack.header, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> bAutoDownload = %d\n", bandTrack.header.bAutoDownload);
- break;
- } case DMUS_FOURCC_GUID_CHUNK: {
- TRACE("'guid': GUID\n");
- ReadFile (fd, &bandTrack.guid, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> GUID = %s\n", debugstr_guid (&bandTrack.guid));
- break;
- } case DMUS_FOURCC_VERSION_CHUNK: {
- TRACE("'vers': version\n");
- ReadFile (fd, &bandTrack.version, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> version = %ld%ld\n", bandTrack.version.dwVersionMS, bandTrack.version.dwVersionLS);
- break;
- } case FOURCC_LIST: {
- TRACE("'LIST': list (content size = %ld)\n", chunk.size);
- ListSize = chunk.size - sizeof(FOURCC);
- ListCount = 0;
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- switch (chunk.id)
- {
- case DMUS_FOURCC_UNFO_LIST:{
- TRACE("'UNFO': UNFO list (forward to DMUSIC_FillUNFOFromFileHandle)\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before 'LIST' chunk */
- DMUSIC_FillUNFOFromFileHandle (UNFO, fd);
- break;
- } case DMUS_FOURCC_BANDS_LIST: {
- TRACE("'lbdl': bands list (content size = %ld)\n", ListSize);
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- if (chunk.id == FOURCC_LIST && ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL) && chunk.id == DMUS_FOURCC_BAND_LIST) {
- ListSize2 = chunk.size - sizeof(FOURCC);
- ListCount2 = 0;
- TRACE("'lbnd': band list (content size = %ld)\n", ListSize2);
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount2 += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- switch (chunk.id)
- {
- case DMUS_FOURCC_BANDITEM_CHUNK: {
- TRACE("'bdih': old band header\n");
- ReadFile (fd, &bandTrack.header1, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> lBandTime = %li\n", bandTrack.header1.lBandTime);
- break;
- } case DMUS_FOURCC_BANDITEM_CHUNK2: {
- TRACE("'bd2h': new band header\n");
- ReadFile (fd, &bandTrack.header2, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> lBandTimeLogical = %li; lBandTimePhysical = %li\n", \
- bandTrack.header2.lBandTimeLogical, bandTrack.header2.lBandTimePhysical);
- break;
- } case FOURCC_RIFF: {
- TRACE("'RIFF': embedded RIFF (size = %ld; could be embedded band form)\n", chunk.size);
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == DMUS_FOURCC_BAND_FORM) {
- TRACE("'DMBD': embedded band form (forward to DMUSIC_FillBandFromFileHandle)\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before 'RIFF' chunk */
- DMUSIC_FillBandFromFileHandle (NULL, fd);
- } else WARN("invalid chunk (only 'DMBD' chunk allowed)\n");
- break;
- } default: {
- WARN("invalid chunk (only 'bdih', 'bd2h' and 'RIFF' chunks allowed)\n");
- break;
- }
- }
- TRACE("ListCount2 (%ld) < ListSize2 (%ld)\n", ListCount2, ListSize2);
- } while (ListCount2 < ListSize2);
- } else WARN("unknown chunk - expect error\n");
-
- } while (ListCount < ListSize);
- break;
- } default: {
- WARN("invalid chunk (only 'UNFO' and 'lbdl' chunks allowed)\n");
- }
- }
- break;
- } default: {
- WARN("invalid chunk (only 'dbth', 'guid', 'vers' and 'LIST' chunks allowed)\n");
- break;
- }
- }
- TRACE("FileCount2 (%ld) < FileSize2 (%ld)\n", FileCount2, FileSize2);
- } while (FileCount2 < FileSize2);
- } else {
- WARN("invalid chunk (only 'DMBT' chunk allowed\n");
- }
- break;
- } case DMUS_FOURCC_COMMANDTRACK_CHUNK: {
- TRACE("'cmnd': command track\n");
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read sizeof(DMUS_IO_COMMAND) */
- ReadFile (fd, &command, chunk.size, &BytesRead, NULL); /* read DMUS_IO_COMMAND */
- TRACE_(dmfiledat)("wMeasure = %d; bBeat = %i; bCommand = %i; bGrooveLevel = %i; bGrooveRange = %i; bRepeatMode = %i\n", \
- command.wMeasure, command.bBeat, command.bCommand, command.bGrooveLevel, command.bGrooveRange, command.bRepeatMode);
- break;
- } case DMUS_FOURCC_MUTE_CHUNK: {
- FIXME("'mute': mute track chunk: not supported yet\n");
- break;
- } case DMUS_FOURCC_PATTERN_FORM: {
- FIXME("'DMPT': pattern track form: not supported yet\n");
- break;
- } case DMUS_FOURCC_SEQ_TRACK: {
- FIXME("'seqt': sequence track chunk: not supported yet\n");
- break;
- } case DMUS_FOURCC_SIGNPOST_TRACK_CHUNK: {
- FIXME("'sgnp': signpost track chunk: not supported yet\n");
- break;
- } case DMUS_FOURCC_SYSEX_TRACK: {
- FIXME("'syex': sysex track chunk: not supported yet\n");
- break;
- } case DMUS_FOURCC_TEMPO_TRACK: {
- TRACE("'tetr': tempo track chunk\n");
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- if (chunk.size != sizeof(DMUS_IO_TEMPO_ITEM))
- WARN("there seem to be a problem: file claims that size of DMUSIC_IO_TEMPO_ITEM is %ld, while real sizeof returns %i\n", \
- chunk.size, sizeof(DMUS_IO_TEMPO_ITEM));
- ReadFile (fd, &tempo, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> lTime = %ld; dblTempo = %f\n", tempo.lTime, tempo.dblTempo);
- break;
- } default: {
- WARN("invalid chunk (too many too list)\n");
- break;
- }
- }
- TRACE("FileCount (%ld) < FileSize (%ld)\n", FileCount, FileSize);
- } while (FileCount < FileSize);
- } else {
- WARN("invalid chunk (only 'DMTK' chunk allowed)\n");
- }
- } else {
- WARN("'RIFF' not found: not a RIFF file\n");
- }
-
- return S_OK;
-}
-
-/******************************************************************************
- * DMUSIC_FillSegmentFromFileHandle:
- * - fills a IDirectMusicSegment8Impl struct with data from file handle.
- * - IMPORTANT: it expects a RIFF chunk at beginning, so if you are calling it
- * from another DMUSIC_Fill* function, make sure pointer is at
- * correct place!
- * - TODO: replace data in function with data in IDirectMusicSegmentImpl
- * implement loading for missing (empty) clauses
- */
-HRESULT WINAPI DMUSIC_FillSegmentFromFileHandle (IDirectMusicSegment8Impl *segment, HANDLE fd)
-{
- rawChunk chunk;
- DWORD BytesRead, ListCount = 0, ListSize, FileCount = 0, FileSize;
- /* FIXME: Replace stuff located below with the stuff in segment */
- UNFO_List UNFO;
- DMUS_IO_SEGMENT_HEADER header;
- DMUS_IO_VERSION version;
- GUID guid;
-
- TRACE("reading 'RIFF' chunk...\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == FOURCC_RIFF) {
- TRACE("'RIFF': RIFF file\n");
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read size of 'RIFF' chunk */
- FileSize = chunk.size - sizeof(FOURCC); /* file content size = size of 'RIFF' chunk - FOURCC ID of following form */
- TRACE("reading chunks ...\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL); /* read ID of following form */
- if (chunk.id == DMUS_FOURCC_SEGMENT_FORM) {
- TRACE("DMSG: segment form\n");
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- FileCount += chunk.size + sizeof(DWORD) + sizeof(FOURCC);
- switch (chunk.id)
- {
- case DMUS_FOURCC_SEGMENT_CHUNK: {
- TRACE("segh: segment header\n");
- ReadFile (fd, &header, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> dwRepeats = %ld; mtLength = %li; mtPlayStart = %li; mtLoopStart = %li; mtLoopEnd = %li; dwResolution = %ld; rtLength = FIXME; dwFlags = %ld; dwReserved = %ld\n", \
- header.dwRepeats, header.mtLength, header.mtPlayStart, header.mtLoopStart, header.mtLoopEnd, header.dwResolution/*, header.rtLength*/, header.dwFlags, header.dwReserved);
- break;
- } case DMUS_FOURCC_GUID_CHUNK: {
- TRACE("'guid': GUID\n");
- ReadFile (fd, &guid, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> GUID = %s\n", debugstr_guid(&guid));
- break;
- } case DMUS_FOURCC_VERSION_CHUNK: {
- TRACE("'vers': version\n");
- ReadFile (fd, &version, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> version = %ld%ld\n", version.dwVersionMS, version.dwVersionLS);
- break;
- } case FOURCC_LIST:{
- TRACE("'LIST': list (size) = %ld\n", chunk.size);
- ListSize = chunk.size - sizeof(FOURCC); /* list content size = size of 'LIST' chunk - FOURCC ID of the list */
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- switch (chunk.id)
- {
- case DMUS_FOURCC_UNFO_LIST: {
- TRACE("'UNFO': UNFO list (forward to DMUSIC_FillUNFOFromFileHandle(...))\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before the 'LIST' chunk */
- DMUSIC_FillUNFOFromFileHandle (UNFO, fd);
- break;
- } case DMUS_FOURCC_TRACK_LIST: {
- TRACE("'trkl': track list chunk (forward)\n");
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL); /* read RIFF */
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read track size */
- TRACE("track size = %ld\n", chunk.size);
- ListCount += chunk.size + sizeof(DWORD) + sizeof(FOURCC);
- SetFilePointer (fd, -(sizeof(DWORD) + sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before the 'RIFF' chunk */
- DMUSIC_FillTrackFromFileHandle (NULL, fd); /* read encapsulated track as if it was in a track file */
- TRACE("(Track) List Count = %ld < (Track) List Size = %ld\n", ListCount, ListSize);
- } while (ListCount < ListSize);
- break;
- }
- }
- break;
- } case FOURCC_RIFF: {
- TRACE("'RIFF': embedded RIFF (size = %ld; could be embedded container form)\n", chunk.size);
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == DMUS_FOURCC_CONTAINER_FORM) {
- TRACE("'DMCN': embedded container form (forward to DMUSIC_FillContainerFromFileHandle(...))\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before 'RIFF' chunk */
- DMUSIC_FillContainerFromFileHandle (NULL, fd);
- } else WARN("invalid chunk (only 'DMCN' chunk allowed)\n");
- break;
- } case DMUS_FOURCC_TOOLGRAPH_FORM: {
- FIXME("'DMTG': toolgraph chunk: not supported yet\n");
- break;
- } case DMUS_FOURCC_AUDIOPATH_FORM: {
- FIXME("'DMAP': audiopath chunk: not supported yet\n");
- break;
- } default: {
- WARN("invalid chunk (only 'segh', 'guid', 'vers', 'LIST', 'RIFF', 'DMTG' and 'DMAP' chunks allowed)\n");
- break;
- }
- }
- TRACE("FileCount (%ld) < FileSize (%ld)\n", FileCount, FileSize);
- } while (FileCount < FileSize);
- } else {
- WARN("invalid chunk (only 'DMSG' chunk allowed)\n");
- }
- } else {
- WARN("'RIFF' not found: not a RIFF file\n");
- }
-
- return S_OK;
-}
-
- /******************************************************************************
- * DMUSIC_FillScriptFromFileHandle:
- * - fills a IDirectMusicScriptImpl struct with data from file handle.
- * - IMPORTANT: it expects a RIFF chunk at beginning, so if you are calling it
- * from another DMUSIC_Fill* function, make sure pointer is at
- * correct place!
- * - TODO: replace data in function with data in IDirectMusicScriptImpl
- */
-
-HRESULT WINAPI DMUSIC_FillScriptFromFileHandle (IDirectMusicScriptImpl *script, HANDLE fd)
-{
- rawChunk chunk;
- DWORD BytesRead/*, ListCount = 0*/, ListSize, FileCount = 0, FileSize;
- /* FIXME: Replace stuff located below with the stuff in script */
- UNFO_List UNFO;
- DMUS_IO_SCRIPT_HEADER header;
- DMUS_IO_VERSION version, scriptversion;
- GUID guid;
- WCHAR* scriptlang;
- WCHAR* scriptsrc;
- Reference scriptsrcref;
-
- TRACE("reading 'RIFF' chunk...\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == FOURCC_RIFF) {
- TRACE("'RIFF': RIFF file\n");
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read size of 'RIFF' chunk */
- FileSize = chunk.size - sizeof(FOURCC); /* file content size = size of 'RIFF' chunk - FOURCC ID of following form */
- TRACE("reading chunks ...\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL); /* read ID of following form */
- if (chunk.id == DMUS_FOURCC_SCRIPT_FORM) {
- TRACE("'DMSC': script form\n");
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- FileCount += chunk.size + sizeof(DWORD) + sizeof(FOURCC);
- switch (chunk.id)
- {
- case DMUS_FOURCC_SCRIPT_CHUNK: {
- TRACE("'schd': script header\n");
- ReadFile (fd, &header, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> dwFlags = %ld\n", header.dwFlags);
- break;
- } case DMUS_FOURCC_GUID_CHUNK: {
- TRACE("'guid': GUID\n");
- ReadFile (fd, &guid, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> GUID = %s\n", debugstr_guid(&guid));
- break;
- } case DMUS_FOURCC_VERSION_CHUNK: {
- TRACE("'vers': version\n");
- ReadFile (fd, &version, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> version = %ld%ld\n", version.dwVersionMS, version.dwVersionLS);
- break;
- } case FOURCC_LIST:{
- TRACE("'LIST': list (size) = %ld\n", chunk.size);
- ListSize = chunk.size - sizeof(FOURCC); /* list content size = size of 'LIST' chunk - FOURCC ID of the list */
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- switch (chunk.id)
- {
- case DMUS_FOURCC_UNFO_LIST: {
- TRACE("'UNFO': UNFO list (forward to DMUSIC_FillUNFOFromFileHandle(...))\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before the 'LIST' chunk */
- DMUSIC_FillUNFOFromFileHandle (UNFO, fd);
- break;
- } case DMUS_FOURCC_REF_LIST: {
- TRACE("'DMRF': reference list (forward to DMUSIC_FillReferenceFromFileHandle(...)\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before 'LIST' chunk */
- DMUSIC_FillReferenceFromFileHandle (scriptsrcref, fd);
- } default: {
- WARN("invalid chunk (only 'UNFO' and 'DMRF' chunks allowed)\n");
- }
- }
- break;
- } case DMUS_FOURCC_SCRIPTVERSION_CHUNK: {
- TRACE("'scve': DirectMusic version\n");
- ReadFile (fd, &scriptversion, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> script version = %ld%ld\n", scriptversion.dwVersionMS, scriptversion.dwVersionLS);
- break;
- } case FOURCC_RIFF: {
- TRACE("'RIFF': embedded RIFF (size = %ld; could be embedded container form)\n", chunk.size);
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == DMUS_FOURCC_CONTAINER_FORM) {
- TRACE("'DMCN': embedded container form (forward to DMUSIC_FillContainerFromFileHandle(...))\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before 'RIFF' chunk */
- DMUSIC_FillContainerFromFileHandle (NULL, fd);
- } else WARN("invalid chunk (only 'DMCN' chunk allowed)\n");
- break;
- } case DMUS_FOURCC_SCRIPTLANGUAGE_CHUNK: {
- TRACE("'scla': scripting language\n");
- scriptlang = (WCHAR*) HeapAlloc (GetProcessHeap (), 0, chunk.size); /* allocate space */
- ReadFile (fd, scriptlang, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("script language = %s\n", debugstr_w(scriptlang));
- break;
- } case DMUS_FOURCC_SCRIPTSOURCE_CHUNK: {
- TRACE("'scsr': script source\n");
- scriptsrc = (WCHAR*) HeapAlloc (GetProcessHeap (), 0, chunk.size); /* allocate space */
- ReadFile (fd, scriptsrc, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("script source = %s\n", debugstr_w(scriptsrc));
- break;
- } default: {
- WARN("invalid chunk (only 'schd', 'guid', 'vers', 'LIST', 'scve', 'RIFF' and 'scla' chunks allowed)\n");
- break;
- }
- }
- TRACE("FileCount (%ld) < FileSize (%ld)\n", FileCount, FileSize);
- } while (FileCount < FileSize);
- } else {
- WARN("invalid chunk (only 'DMSC' chunk allowed)\n");
- }
- } else {
- WARN("'RIFF' not found: not a RIFF file\n");
- }
-
- return S_OK;
-}
-
-/******************************************************************************
- * DMUSIC_FillContainerFromFileHandle:
- * - fills a IDirectMusicContainerImpl struct with data from file handle.
- * - IMPORTANT: it expects a RIFF chunk at beginning, so if you are calling it
- * from another DMUSIC_Fill* function, make sure pointer is at
- * correct place!
- * - TODO: replace data in function with data in IDirectMusicContainerImpl
- */
-HRESULT WINAPI DMUSIC_FillContainerFromFileHandle (IDirectMusicContainerImpl *container, HANDLE fd)
-{
- rawChunk chunk;
- DWORD BytesRead, ListCount = 0, ListSize, ListCount2 = 0, ListSize2, FileCount = 0, FileSize;
- /* FIXME: Replace stuff located below with the stuff in container */
- UNFO_List UNFO;
- DMUS_IO_CONTAINER_HEADER header;
- DMUS_IO_VERSION version;
- GUID guid;
- WCHAR* alias;
- DMUS_IO_CONTAINED_OBJECT_HEADER objheader;
- Reference dataref;
-
- TRACE("reading 'RIFF' chunk...\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == FOURCC_RIFF) {
- TRACE("'RIFF': RIFF file\n");
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read size of 'RIFF' chunk */
- FileSize = chunk.size - sizeof(FOURCC); /* file content size = size of 'RIFF' chunk - FOURCC ID of following form */
- TRACE("reading chunks ...\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL); /* read ID of following form */
- if (chunk.id == DMUS_FOURCC_CONTAINER_FORM) {
- TRACE("'DMCN': container form\n");
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- FileCount += chunk.size + sizeof(DWORD) + sizeof(FOURCC);
- switch (chunk.id)
- {
- case DMUS_FOURCC_CONTAINER_CHUNK: {
- TRACE("'conh': container header\n");
- ReadFile (fd, &header, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> dwFlags = %ld\n", header.dwFlags);
- break;
- } case DMUS_FOURCC_GUID_CHUNK: {
- TRACE("'guid': GUID\n");
- ReadFile (fd, &guid, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> GUID = %s\n", debugstr_guid(&guid));
- break;
- } case DMUS_FOURCC_VERSION_CHUNK: {
- TRACE("'vers': version\n");
- ReadFile (fd, &version, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> version = %ld%ld\n", version.dwVersionMS, version.dwVersionLS);
- break;
- } case FOURCC_LIST:{
- TRACE("'LIST': list (size) = %ld\n", chunk.size);
- ListSize = chunk.size - sizeof(FOURCC); /* list content size = size of 'LIST' chunk - FOURCC ID of the list */
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- switch (chunk.id)
- {
- case DMUS_FOURCC_UNFO_LIST: {
- TRACE("'UNFO': UNFO list (forward to DMUSIC_FillUNFOFromFileHandle(...))\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before the 'LIST' chunk */
- DMUSIC_FillUNFOFromFileHandle (UNFO, fd);
- break;
- } case DMUS_FOURCC_CONTAINED_OBJECTS_LIST: {
- TRACE("'cosl': objects list (content size = %ld)\n", ListSize);
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- if (chunk.id == FOURCC_LIST && ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL) && chunk.id == DMUS_FOURCC_CONTAINED_OBJECT_LIST) {
- ListSize2 = chunk.size - sizeof(FOURCC); /* list content size = size of 'LIST' chunk - FOURCC ID of the list */
- ListCount2 = 0; /* reset */
- TRACE("'cobl': object (content size = %ld)\n", ListSize2);
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount2 += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- switch (chunk.id)
- {
- case DMUS_FOURCC_CONTAINED_ALIAS_CHUNK: {
- TRACE("'coba': alias (size = %ld)\n", chunk.size);
- alias = (WCHAR*) HeapAlloc (GetProcessHeap (), 0, chunk.size); /* allocate space */
- ReadFile (fd, alias, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> alias = %s\n", debugstr_w(alias));
- break;
- } case DMUS_FOURCC_CONTAINED_OBJECT_CHUNK: {
- TRACE("'cobh': object header (size = %ld)\n", chunk.size);
- ReadFile (fd, &objheader, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> guidClassID = %s; dwFlags = %ld; ckid = %ld; fccType = %ld\n", \
- debugstr_guid(&objheader.guidClassID), objheader.dwFlags, objheader.ckid, objheader.fccType);
- break;
- } case FOURCC_LIST: {
- TRACE("'LIST': list chunk (size = %ld)\n", chunk.size);
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == DMUS_FOURCC_REF_LIST) {
- TRACE("'DMRF': reference list (instead of 'data' chunk: size = %ld)\n", chunk.size - 4); /* set pointer at beginning of list */
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT);
- DMUSIC_FillReferenceFromFileHandle (dataref, fd); /* forward to DMUSIC_FillReferenceFromFileHandle */
- } else WARN("invalid chunk (only 'DMRF' chunk allowed\n");
- break;
- } case FOURCC_RIFF: {
- TRACE("'RIFF': encapsulated data (can be 'DMSG' or 'DMSG')\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before 'RIFF' chunk */
- switch (chunk.id)
- {
- case DMUS_FOURCC_SEGMENT_FORM: {
- TRACE("'DMSG': embedded segment form (forward to DMUSIC_FillSegmentFromFileHandle(...))\n");
- DMUSIC_FillSegmentFromFileHandle (NULL, fd);
- break;
- } case DMUS_FOURCC_STYLE_FORM: {
- TRACE("'DMST': embedded style form (forward to DMUSIC_FillStyleFromFileHandle(...))\n");
- DMUSIC_FillStyleFromFileHandle (NULL, fd);
- break;
- } case mmioFOURCC('W','A','V','E'): {
- FIXME("'WAVE': not yet supported (skipping)\n");
- SetFilePointer (fd, sizeof(FOURCC) + sizeof(DWORD) + chunk.size, NULL, FILE_CURRENT); /* skip */
- break;
- } default: {
- WARN("invalid chunk (only 'DMSG' and 'DMST' chunks allowed)\n");
- break;
- }
- }
- break;
- } default: {
- WARN("invalid chunk (only 'coba', 'cobh', 'data' and 'LIST' chunks allowed\n");
- break;
- }
- }
- TRACE("ListCount2 (%ld) < ListSize2 (%ld)\n", ListCount2, ListSize2);
- } while (ListCount2 < ListSize2);
- } else WARN("invalid chunk (only 'cobl' chunk allowed)\n");
- TRACE("ListCount (%ld) < ListSize (%ld)\n", ListCount, ListSize);
- } while (ListCount < ListSize);
- break;
- } default: {
- WARN("invalid chunk (only 'UNFO' and 'cosl' chunks allowed)\n");
- }
- }
- break;
- } default: {
- WARN("invalid chunk (only 'schd', 'guid', 'vers', 'LIST', 'scve', 'RIFF' and 'scla' chunks allowed)\n");
- break;
- }
- }
- TRACE("FileCount (%ld) < FileSize (%ld)\n", FileCount, FileSize);
- } while (FileCount < FileSize);
- } else {
- WARN("invalid chunk (only 'DMSC' chunk allowed)\n");
- }
- } else {
- WARN("'RIFF' not found: not a RIFF file\n");
- }
-
- return S_OK;
-}
-
-/******************************************************************************
- * DMUSIC_FillStyleFromFileHandle:
- * - fills a IDirectMusicStyle8Impl struct with data from file handle.
- * - IMPORTANT: it expects a RIFF chunk at beginning, so if you are calling it
- * from another DMUSIC_Fill* function, make sure pointer is at
- * correct place!
- * - TODO: replace data in function with data in IDirectMusicStyleImpl
- */
-HRESULT WINAPI DMUSIC_FillStyleFromFileHandle (IDirectMusicStyle8Impl *style, HANDLE fd)
-{
- rawChunk chunk;
- DWORD BytesRead, ListCount = 0, ListSize, ListCount2 = 0, ListSize2, FileCount = 0, FileSize;
- int i;
- /* FIXME: Replace stuff located below with the stuff in container */
- UNFO_List UNFO;
- DMUS_IO_STYLE header;
- DMUS_IO_VERSION version;
- GUID guid;
- Part part;
- Pattern pattern;
-
- TRACE("reading 'RIFF' chunk...\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == FOURCC_RIFF) {
- TRACE("'RIFF': RIFF file\n");
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read size of 'RIFF' chunk */
- FileSize = chunk.size - sizeof(FOURCC); /* file content size = size of 'RIFF' chunk - FOURCC ID of following form */
- TRACE("reading chunks ...\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL); /* read ID of following form */
- if (chunk.id == DMUS_FOURCC_STYLE_FORM) {
- TRACE("'DMST': style form\n");
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- FileCount += chunk.size + sizeof(DWORD) + sizeof(FOURCC);
-
- switch (chunk.id)
- {
- case DMUS_FOURCC_STYLE_CHUNK: {
- TRACE("'styh': style header\n");
- ReadFile (fd, &header, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> timeSig.bBeatsPerMeasure = %i; timeSig.bBeat = %i; timeSig.wGridsPerBeat = %d; dblTempo = %f\n", \
- header.timeSig.bBeatsPerMeasure, header.timeSig.bBeat, header.timeSig.wGridsPerBeat, header.dblTempo);
- break;
- } case DMUS_FOURCC_GUID_CHUNK: {
- TRACE("'guid': GUID\n");
- ReadFile (fd, &guid, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> GUID = %s\n", debugstr_guid(&guid));
- break;
- } case DMUS_FOURCC_VERSION_CHUNK: {
- TRACE("'vers': version\n");
- ReadFile (fd, &version, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> version = %ld%ld\n", version.dwVersionMS, version.dwVersionLS);
- break;
- } case FOURCC_RIFF: {
- TRACE("'RIFF': embedded RIFF (size = %ld; could be embedded band form)\n", chunk.size);
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == DMUS_FOURCC_BAND_FORM) {
- TRACE("'DMBD': embedded band form (forward to DMUSIC_FillBandFromFileHandle)\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before 'RIFF' chunk */
- DMUSIC_FillBandFromFileHandle (NULL, fd);
- } else WARN("invalid chunk (only 'DMBD' chunk allowed)\n");
- break;
- } case FOURCC_LIST:{
- TRACE("'LIST': list (size) = %ld\n", chunk.size);
- ListSize = chunk.size - sizeof(FOURCC); /* list content size = size of 'LIST' chunk - FOURCC ID of the list */
- ListCount = 0;
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- switch (chunk.id)
- {
- case DMUS_FOURCC_UNFO_LIST: {
- TRACE("'UNFO': UNFO list (forward to DMUSIC_FillUNFOFromFileHandle(...))\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before the 'LIST' chunk */
- DMUSIC_FillUNFOFromFileHandle (UNFO, fd);
- break;
- } case DMUS_FOURCC_PART_LIST: {
- TRACE("'part': parts list (content size = %ld)\n", ListSize);
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- switch (chunk.id)
- {
- case DMUS_FOURCC_PART_CHUNK: {
- TRACE("'prth': part header\n");
- ReadFile (fd, &part.header, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> timeSig.bBeatsPerMeasure = %i; timeSig.bBeat = %i; timeSig.wGridsPerBeat = %d; dwVariationChoices = %p; guidPartID = %s; wNbrMeasures = %d; bPlayModeFlags = %i; bInvertUpper = %i; bInvertLower = %i; bPad = %p; dwFlags = %ld\n", \
- part.header.timeSig.bBeatsPerMeasure, part.header.timeSig.bBeat, part.header.timeSig.wGridsPerBeat, part.header.dwVariationChoices, \
- debugstr_guid (&part.header.guidPartID), part.header.wNbrMeasures, part.header.bPlayModeFlags, part.header.bInvertUpper, part.header.bInvertLower, \
- part.header.bPad, part.header.dwFlags);
- break;
- } case DMUS_FOURCC_NOTE_CHUNK: {
- TRACE("'note': notes (size = %ld)\n", chunk.size);
- part.nrofnotes = chunk.size - sizeof(DWORD); /* pure contents of 'note' (without first DWORD) */
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read sizeof (DMUS_IO_STYLENOTE) */
- part.nrofnotes /= chunk.size; /* nrofnotes = pure contents / sizeof (DMUS_IO_STYLENOTE) */
- part.notes = (DMUS_IO_STYLENOTE*) HeapAlloc (GetProcessHeap (), 0, chunk.size * part.nrofnotes);
- ReadFile (fd, part.notes, chunk.size * part.nrofnotes, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> number of notes = %ld\n", part.nrofnotes);
- for (i = 0; i < part.nrofnotes; i++)
- {
- TRACE_(dmfiledat)("=> note[%i]: mtGridStart = %li; dwVariation = %ld; mtDuration = %li; nTimeOffset = %i; wMusicValue = %d; bVelocity = %i; bTimeRange = %i; bDurRange = %i; bVelRange = %i; bInversionID = %i; bPlayModeFlags = %i; bNoteFlags= %i;\n", \
- i, part.notes[i].mtGridStart, part.notes[i].dwVariation, part.notes[i].mtDuration, part.notes[i].nTimeOffset, part.notes[i].wMusicValue, part.notes[i].bVelocity, part.notes[i].bTimeRange, \
- part.notes[i].bDurRange, part.notes[i].bVelRange, part.notes[i].bInversionID, part.notes[i].bPlayModeFlags, part.notes[i].bNoteFlags);
- }
- break;
- } case DMUS_FOURCC_CURVE_CHUNK: {
- TRACE("'crve': curves (size = %ld)\n", chunk.size);
- part.nrofcurves = chunk.size - sizeof(DWORD); /* pure contents of 'crve' (without first DWORD) */
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read sizeof (DMUS_IO_STYLECURVE) */
- part.nrofcurves /= chunk.size; /* nrofnotes = pure contents / sizeof (DMUS_IO_STYLECURVE) */
- part.curves = (DMUS_IO_STYLECURVE*) HeapAlloc (GetProcessHeap (), 0, chunk.size * part.nrofcurves);
- ReadFile (fd, part.curves, chunk.size * part.nrofcurves, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> number of curves = %ld\n", part.nrofcurves);
- for (i = 0; i < part.nrofcurves; i++)
- {
- TRACE_(dmfiledat)("=> curve[%i]: mtGridStart = %li; dwVariation = %ld; mtDuration = %li; mtResetDuration = %li; nTimeOffset = %i; nStartValue = %i; nEndValue = %i; nResetValue = %i; bEventType = %i; bCurveShape = %i; bCCData = %i; bFlags = %i; wParamType = %d;wMergeIndex = %d\n", \
- i, part.curves[i].mtGridStart, part.curves[i].dwVariation, part.curves[i].mtDuration, part.curves[i].mtResetDuration, part.curves[i].nTimeOffset, part.curves[i].nStartValue, part.curves[i].nEndValue, \
- part.curves[i].nResetValue, part.curves[i].bEventType, part.curves[i].bCurveShape, part.curves[i].bCCData, part.curves[i].bFlags, part.curves[i].wParamType, part.curves[i].wMergeIndex);
- }
- break;
- } case DMUS_FOURCC_MARKER_CHUNK: {
- TRACE("'mrkr': markers (size = %ld)\n", chunk.size);
- part.nrofmarkers = chunk.size - sizeof(DWORD); /* pure contents of 'mrkr' (without first DWORD) */
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read sizeof (DMUS_IO_STYLEMARKER) */
- part.nrofmarkers /= chunk.size; /* nrofnotes = pure contents / sizeof (DMUS_IO_STYLEMARKER) */
- part.markers = (DMUS_IO_STYLEMARKER*) HeapAlloc (GetProcessHeap (), 0, chunk.size * part.nrofmarkers);
- ReadFile (fd, part.markers, chunk.size * part.nrofmarkers, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> number of markers = %ld\n", part.nrofmarkers);
- for (i = 0; i < part.nrofmarkers; i++)
- {
- TRACE_(dmfiledat)("=> marker[%i]: mtGridStart = %li; dwVariation = %ld; wMarkerFlags = %d\n", \
- i, part.markers[i].mtGridStart, part.markers[i].dwVariation, part.markers[i].wMarkerFlags);
- }
- break;
- } case DMUS_FOURCC_RESOLUTION_CHUNK: {
- TRACE("'rsln': resolutions (size = %ld)\n", chunk.size);
- part.nrofresolutions = chunk.size - sizeof(DWORD); /* pure contents of 'rsln' (without first DWORD) */
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read sizeof (DMUS_IO_STYLERESOLUTION) */
- part.nrofresolutions /= chunk.size; /* nrofnotes = pure contents / sizeof (DMUS_IO_STYLERESOLUTION) */
- part.resolutions = (DMUS_IO_STYLERESOLUTION*) HeapAlloc (GetProcessHeap (), 0, chunk.size * part.nrofresolutions);
- ReadFile (fd, part.resolutions, chunk.size * part.nrofresolutions, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> number of resolutions = %ld\n", part.nrofresolutions);
- for (i = 0; i < part.nrofresolutions; i++)
- {
- TRACE_(dmfiledat)("=> resolution[%i]: dwVariation = %ld; wMusicValue = %d; bInversionID = %i; bPlayModeFlags = %i", \
- i, part.resolutions[i].dwVariation, part.resolutions[i].wMusicValue, part.resolutions[i].bInversionID, part.resolutions[i].bPlayModeFlags);
- }
- break;
- } case DMUS_FOURCC_ANTICIPATION_CHUNK: {
- TRACE("'anpn': anticipations (size = %ld)\n", chunk.size);
- part.nrofanticipations = chunk.size - sizeof(DWORD); /* pure contents of 'anpn' (without first DWORD) */
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL); /* read sizeof (DMUS_IO_STYLE_ANTICIPATION) */
- part.nrofanticipations /= chunk.size; /* nrofnotes = pure contents / sizeof (DMUS_IO_STYLE_ANTICIPATION) */
- part.anticipations = (DMUS_IO_STYLE_ANTICIPATION*) HeapAlloc (GetProcessHeap (), 0, chunk.size * part.nrofanticipations);
- ReadFile (fd, part.anticipations, chunk.size * part.nrofanticipations, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> number of anticipations = %ld\n", part.nrofanticipations);
- for (i = 0; i < part.nrofanticipations; i++)
- {
- TRACE_(dmfiledat)("=> anticipation[%i]: mtGridStart = %li; dwVariation = %ld; nTimeOffset = %i; bTimeRange = %i\n", \
- i, part.anticipations[i].mtGridStart, part.anticipations[i].dwVariation, part.anticipations[i].nTimeOffset, part.anticipations[i].bTimeRange);
- }
- break;
- } case FOURCC_LIST: {
- TRACE("'LIST': list chunk (size = %ld)\n", chunk.size);
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == DMUS_FOURCC_UNFO_LIST) {
- TRACE("'UNFO': UNFO list (forward to DMUSIC_FillUNFOFromFileHandle(...))\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* set pointer at beginning of list */
- DMUSIC_FillUNFOFromFileHandle (part.UNFO, fd);
- } else WARN("invalid chunk (only 'UNFO' chunk allowed\n");
- break;
- } default: {
- WARN("invalid chunk (only 'prth','note', 'crve', 'mrkr', 'rsln', 'anpn' and 'LIST' chunks allowed\n");
- break;
- }
- }
- TRACE("ListCount (%ld) < ListSize (%ld)\n", ListCount, ListSize);
- } while (ListCount < ListSize);
- break;
- } case DMUS_FOURCC_PATTERN_LIST: {
- TRACE("'pttn': patterns list (content size = %ld)\n", ListSize);
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- switch (chunk.id)
- {
- case DMUS_FOURCC_PATTERN_CHUNK: {
- TRACE("'ptnh': pattern header\n");
- ReadFile (fd, &pattern.header, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> timeSig.bBeatsPerMeasure = %i; timeSig.bBeat = %i; timeSig.wGridsPerBeat = %d; bGrooveBottom = %i; bGrooveTop = %i; wEmbellishment = %d; wNbrMeasures = %d; bDestGrooveBottom = %i; bDestGrooveTop = %i; dwFlags = %ld\n", \
- pattern.header.timeSig.bBeatsPerMeasure, pattern.header.timeSig.bBeat, pattern.header.timeSig.wGridsPerBeat, pattern.header.bGrooveBottom, pattern.header.bGrooveTop, pattern.header.wEmbellishment, \
- pattern.header.wNbrMeasures, pattern.header.bDestGrooveBottom, pattern.header.bDestGrooveTop, pattern.header.dwFlags);
- break;
- } case DMUS_FOURCC_RHYTHM_CHUNK: {
- TRACE("'rhtm': rhytms\n");
- pattern.nrofrhytms = chunk.size / sizeof(DWORD);
- TRACE_(dmfiledat)("=> number of rhytms = %ld\n", pattern.nrofrhytms);
- pattern.rhytms = (DWORD*) HeapAlloc (GetProcessHeap (), 0, sizeof(DWORD) * pattern.nrofrhytms);
- ReadFile (fd, pattern.rhytms, sizeof(DWORD) * pattern.nrofrhytms, &BytesRead, NULL);
- for (i = 0; i < pattern.nrofrhytms; i++)
- {
- TRACE_(dmfiledat)("=> rhytm[%i] = %ld\n", i, pattern.rhytms[i]);
- }
- break;
- } case DMUS_FOURCC_MOTIFSETTINGS_CHUNK: {
- TRACE("'mtfs': motif settings\n");
- ReadFile (fd, &pattern.motsettings, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> dwRepeats = %ld; mtPlayStart = %li; mtLoopStart = %li; mtLoopEnd = %li; dwResolution = %ld\n", \
- pattern.motsettings.dwRepeats, pattern.motsettings.mtPlayStart, pattern.motsettings.mtLoopStart, pattern.motsettings.mtLoopEnd, pattern.motsettings.dwResolution);
- break;
- } case FOURCC_LIST: {
- TRACE("'LIST': list chunk (size = %ld)\n", chunk.size);
- ListSize2 = chunk.size - sizeof(FOURCC); /* list content size = size of 'LIST' chunk - FOURCC ID of the list */
- ListCount2 = 0;
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- switch (chunk.id)
- {
- case DMUS_FOURCC_UNFO_LIST: {
- TRACE("'UNFO': UNFO list (forward to DMUSIC_FillUNFOFromFileHandle(...))\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before the 'LIST' chunk */
- DMUSIC_FillUNFOFromFileHandle (UNFO, fd);
- break;
- } case DMUS_FOURCC_PARTREF_LIST: {
- TRACE("'pref': part references list (content size = %ld)\n", ListSize2);
- do {
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- ReadFile (fd, &chunk.size, sizeof(DWORD), &BytesRead, NULL);
- ListCount2 += sizeof(FOURCC) + sizeof(DWORD) + chunk.size;
- switch (chunk.id)
- {
- case DMUS_FOURCC_PARTREF_CHUNK: {
- TRACE("'prfc': part reference\n");
- ReadFile (fd, &pattern.partref, chunk.size, &BytesRead, NULL);
- TRACE_(dmfiledat)("=> guidPartID = %s; wLogicalPartID = %d; bVariationLockID = %i; bSubChordLevel = %i; bPriority = %i; bRandomVariation = %i; wPad = %d; dwPChannel = %ld\n", \
- debugstr_guid (&pattern.partref.guidPartID), pattern.partref.wLogicalPartID, pattern.partref.bVariationLockID, pattern.partref.bSubChordLevel, \
- pattern.partref.bPriority, pattern.partref.bRandomVariation, pattern.partref.wPad, pattern.partref.dwPChannel);
- break;
- } case FOURCC_LIST: {
- TRACE("'LIST': list chunk (MSDN doesn't mention it)\n");
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == DMUS_FOURCC_UNFO_LIST) {
- TRACE("'UNFO': UNFO list (forward to DMUSIC_FillUNFOFromFileHandle(...))\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before the 'LIST' chunk */
- DMUSIC_FillUNFOFromFileHandle (UNFO, fd);
- } else {
- WARN("invalid chunk (only 'UNFO' chunk allowed)\n");
- }
- break;
- } default: {
- WARN("invalid chunk (only 'prfc' and 'UNFO'chunk allowed)\n");
- }
- }
- TRACE("ListCount2 (%ld) < ListSize2 (%ld)\n", ListCount2, ListSize2);
- } while (ListCount2 < ListSize2);
- break;
- } default: {
- WARN("invalid chunk (only 'UNFO' and 'pref' chunks allowed\n");
- break;
- }
- }
- break;
- } case FOURCC_RIFF: {
- TRACE("'RIFF': embedded RIFF (size = %ld; could be embedded band form)\n", chunk.size);
- ReadFile (fd, &chunk.id, sizeof(FOURCC), &BytesRead, NULL);
- if (chunk.id == DMUS_FOURCC_BAND_FORM) {
- TRACE("'DMBD': embedded band form (forward to DMUSIC_FillBandFromFileHandle(...))\n");
- SetFilePointer (fd, -(sizeof(DWORD) + 2*sizeof(FOURCC)), NULL, FILE_CURRENT); /* place pointer before 'RIFF' chunk */
- DMUSIC_FillBandFromFileHandle (NULL, fd);
- } else WARN("invalid chunk (only 'DMBD' chunk allowed)\n");
- break;
- } default: {
- WARN("invalid chunk (only 'prnh','rhtm', 'mtfs', 'LIST' and 'RIFF' chunks allowed\n");
- break;
- }
- }
- TRACE("ListCount (%ld) < ListSize (%ld)\n", ListCount, ListSize);
- } while (ListCount < ListSize);
- break;
- } default: {
- WARN("invalid chunk (only 'UNFO', 'part', 'pttn' and 'RIFF' chunks allowed)\n");
- }
- }
- break;
- } default: {
- WARN("invalid chunk (only 'styh', 'guid', 'vers', 'LIST', and 'RIFF' chunks allowed)\n");
- break;
- }
- }
- TRACE("FileCount (%ld) < FileSize (%ld)\n", FileCount, FileSize);
- } while (FileCount < FileSize);
- } else {
- WARN("invalid chunk (only 'DMST' chunk allowed)\n");
- }
- } else {
- WARN("'RIFF' not found: not a RIFF file\n");
- }
-
- return S_OK;
-}
-
-#endif
diff --git a/dlls/dmusic/instrument.c b/dlls/dmusic/instrument.c
index 2b91872..7f649e8 100644
--- a/dlls/dmusic/instrument.c
+++ b/dlls/dmusic/instrument.c
@@ -1,6 +1,6 @@
/* IDirectMusicInstrument Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,44 +17,48 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmusic_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmusic);
+WINE_DECLARE_DEBUG_CHANNEL(dmfile);
-/* IDirectMusicInstrument IUnknown parts follow: */
-HRESULT WINAPI IDirectMusicInstrumentImpl_QueryInterface (LPDIRECTMUSICINSTRUMENT iface, REFIID riid, LPVOID *ppobj)
-{
- ICOM_THIS(IDirectMusicInstrumentImpl,iface);
+const GUID IID_IDirectMusicInstrumentPRIVATE = {0xbcb20080,0xa40c,0x11d1,{0x86,0xbc,0x00,0xc0,0x4f,0xbf,0x8f,0xef}};
- if (IsEqualIID (riid, &IID_IUnknown)
- || IsEqualIID (riid, &IID_IDirectMusicInstrument)) {
- IDirectMusicInstrumentImpl_AddRef(iface);
- *ppobj = This;
+/* IDirectMusicInstrument IUnknown part: */
+HRESULT WINAPI IDirectMusicInstrumentImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicInstrumentImpl, UnknownVtbl, iface);
+
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPVOID)&This->UnknownVtbl;
+ IDirectMusicInstrumentImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicInstrument)) {
+ *ppobj = (LPVOID)&This->InstrumentVtbl;
+ IDirectMusicInstrumentImpl_IDirectMusicInstrument_AddRef ((LPDIRECTMUSICINSTRUMENT)&This->InstrumentVtbl);
return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicInstrumentPRIVATE)) {
+ /* it seems to me that this interface is only basic IUnknown, without any
+ other inherited functions... *sigh* this is the worst scenario, since it means
+ that whoever calls it knows the layout of original implementation table and therefore
+ tries to get data by direct access... expect crashes */
+ FIXME("*sigh*... requested private/unspecified interface\n");
+ *ppobj = (LPVOID)&This->UnknownVtbl;
+ IDirectMusicInstrumentImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
}
-
- WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+
+ WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicInstrumentImpl_AddRef (LPDIRECTMUSICINSTRUMENT iface)
-{
- ICOM_THIS(IDirectMusicInstrumentImpl,iface);
+ULONG WINAPI IDirectMusicInstrumentImpl_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicInstrumentImpl, UnknownVtbl, iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicInstrumentImpl_Release (LPDIRECTMUSICINSTRUMENT iface)
-{
- ICOM_THIS(IDirectMusicInstrumentImpl,iface);
+ULONG WINAPI IDirectMusicInstrumentImpl_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicInstrumentImpl, UnknownVtbl, iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
if (ref == 0) {
@@ -63,45 +67,351 @@
return ref;
}
-/* IDirectMusicInstrument Interface follow: */
-HRESULT WINAPI IDirectMusicInstrumentImpl_GetPatch (LPDIRECTMUSICINSTRUMENT iface, DWORD* pdwPatch)
-{
- ICOM_THIS(IDirectMusicInstrumentImpl,iface);
-
- TRACE("(%p, %p)\n", This, pdwPatch);
- *pdwPatch = This->dwPatch;
-
- return S_OK;
-}
-
-HRESULT WINAPI IDirectMusicInstrumentImpl_SetPatch (LPDIRECTMUSICINSTRUMENT iface, DWORD dwPatch)
-{
- ICOM_THIS(IDirectMusicInstrumentImpl,iface);
-
- TRACE("(%p, %ld)\n", This, dwPatch);
- This->dwPatch = dwPatch;
-
- return S_OK;
-}
-
-ICOM_VTABLE(IDirectMusicInstrument) DirectMusicInstrument_Vtbl =
-{
+ICOM_VTABLE(IUnknown) DirectMusicInstrument_Unknown_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
- IDirectMusicInstrumentImpl_QueryInterface,
- IDirectMusicInstrumentImpl_AddRef,
- IDirectMusicInstrumentImpl_Release,
- IDirectMusicInstrumentImpl_GetPatch,
- IDirectMusicInstrumentImpl_SetPatch
+ IDirectMusicInstrumentImpl_IUnknown_QueryInterface,
+ IDirectMusicInstrumentImpl_IUnknown_AddRef,
+ IDirectMusicInstrumentImpl_IUnknown_Release
+};
+
+/* IDirectMusicInstrumentImpl IDirectMusicInstrument part: */
+HRESULT WINAPI IDirectMusicInstrumentImpl_IDirectMusicInstrument_QueryInterface (LPDIRECTMUSICINSTRUMENT iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicInstrumentImpl, InstrumentVtbl, iface);
+ return IDirectMusicInstrumentImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicInstrumentImpl_IDirectMusicInstrument_AddRef (LPDIRECTMUSICINSTRUMENT iface) {
+ ICOM_THIS_MULTI(IDirectMusicInstrumentImpl, InstrumentVtbl, iface);
+ return IDirectMusicInstrumentImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicInstrumentImpl_IDirectMusicInstrument_Release (LPDIRECTMUSICINSTRUMENT iface) {
+ ICOM_THIS_MULTI(IDirectMusicInstrumentImpl, InstrumentVtbl, iface);
+ return IDirectMusicInstrumentImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicInstrumentImpl_IDirectMusicInstrument_GetPatch (LPDIRECTMUSICINSTRUMENT iface, DWORD* pdwPatch) {
+ ICOM_THIS_MULTI(IDirectMusicInstrumentImpl, InstrumentVtbl, iface);
+ TRACE("(%p, %p)\n", This, pdwPatch);
+ *pdwPatch = MIDILOCALE2Patch(&This->pHeader->Locale);
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicInstrumentImpl_IDirectMusicInstrument_SetPatch (LPDIRECTMUSICINSTRUMENT iface, DWORD dwPatch) {
+ ICOM_THIS_MULTI(IDirectMusicInstrumentImpl, InstrumentVtbl, iface);
+ TRACE("(%p, %ld): stub\n", This, dwPatch);
+ Patch2MIDILOCALE(dwPatch, &This->pHeader->Locale);
+ return S_OK;
+}
+
+ICOM_VTABLE(IDirectMusicInstrument) DirectMusicInstrument_Instrument_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicInstrumentImpl_IDirectMusicInstrument_QueryInterface,
+ IDirectMusicInstrumentImpl_IDirectMusicInstrument_AddRef,
+ IDirectMusicInstrumentImpl_IDirectMusicInstrument_Release,
+ IDirectMusicInstrumentImpl_IDirectMusicInstrument_GetPatch,
+ IDirectMusicInstrumentImpl_IDirectMusicInstrument_SetPatch
};
/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicInstrument (LPCGUID lpcGUID, LPDIRECTMUSICINSTRUMENT* ppDMInstr, LPUNKNOWN pUnkOuter)
-{
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicInstrument)) {
- FIXME("Not yet\n");
- return E_NOINTERFACE;
+HRESULT WINAPI DMUSIC_CreateDirectMusicInstrumentImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicInstrumentImpl* dminst;
+
+ dminst = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicInstrumentImpl));
+ if (NULL == dminst) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
}
+ dminst->UnknownVtbl = &DirectMusicInstrument_Unknown_Vtbl;
+ dminst->InstrumentVtbl = &DirectMusicInstrument_Instrument_Vtbl;
+ dminst->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicInstrumentImpl_IUnknown_QueryInterface ((LPUNKNOWN)&dminst->UnknownVtbl, lpcGUID, ppobj);
+}
- WARN("No interface found\n");
- return E_NOINTERFACE;
+/* aux. function that completely loads instrument; my tests indicate that it's
+ called somewhere around IDirectMusicCollection_GetInstrument */
+HRESULT WINAPI IDirectMusicInstrumentImpl_Custom_Load (LPDIRECTMUSICINSTRUMENT iface, LPSTREAM pStm) {
+ ICOM_THIS_MULTI(IDirectMusicInstrumentImpl, InstrumentVtbl, iface);
+
+ DMUS_PRIVATE_CHUNK Chunk;
+ DWORD ListSize[4], ListCount[4];
+ LARGE_INTEGER liMove; /* used when skipping chunks */
+
+ TRACE("(%p, %p, offset = 0x%04llx)\n", This, pStm, This->liInstrumentPosition.QuadPart);
+
+ /* goto the beginning of chunk */
+ IStream_Seek (pStm, This->liInstrumentPosition, STREAM_SEEK_SET, NULL);
+
+ IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_LIST: {
+ IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[0] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[0] = 0;
+ switch (Chunk.fccID) {
+ case FOURCC_INS: {
+ TRACE_(dmfile)(": instrument list\n");
+ do {
+ IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_INSH: {
+ TRACE_(dmfile)(": instrument header chunk\n");
+ /* should be already initialised */
+ IStream_Read (pStm, This->pHeader, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_DLID: {
+ TRACE_(dmfile)(": DLID (GUID) chunk\n");
+ /* should be already initialised */
+ IStream_Read (pStm, This->pInstrumentID, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[1] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[1] = 0;
+ switch (Chunk.fccID) {
+ case FOURCC_LRGN: {
+ TRACE_(dmfile)(": regions list\n");
+ do {
+ IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[1] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_LIST: {
+ IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[2] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[2] = 0;
+ switch (Chunk.fccID) {
+ case FOURCC_RGN: {
+ /* temporary structures */
+ RGNHEADER tmpRegionHeader;
+ WSMPL tmpWaveSample;
+ WLOOP tmpWaveLoop;
+ WAVELINK tmpWaveLink;
+
+ TRACE_(dmfile)(": region list\n");
+ do {
+ IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[2] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_RGNH: {
+ TRACE_(dmfile)(": region header chunk\n");
+ memset (&tmpRegionHeader, 0, sizeof(RGNHEADER)); /* reset */
+ IStream_Read (pStm, &tmpRegionHeader, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_WSMP: {
+ TRACE_(dmfile)(": wave sample chunk\n");
+ memset (&tmpWaveSample, 0, sizeof(WSMPL)); /* reset */
+ memset (&tmpWaveLoop, 0, sizeof(WLOOP)); /* reset */
+ if (Chunk.dwSize != (sizeof(WSMPL) + sizeof(WLOOP))) ERR(": incorrect chunk size\n");
+ IStream_Read (pStm, &tmpWaveSample, sizeof(WSMPL), NULL);
+ IStream_Read (pStm, &tmpWaveLoop, sizeof(WLOOP), NULL);
+ break;
+ }
+ case FOURCC_WLNK: {
+ TRACE_(dmfile)(": wave link chunk\n");
+ memset (&tmpWaveLink, 0, sizeof(WAVELINK)); /* reset */
+ IStream_Read (pStm, &tmpWaveLink, Chunk.dwSize, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[2] = %ld < ListSize[2] = %ld\n", ListCount[2], ListSize[2]);
+ } while (ListCount[2] < ListSize[2]);
+ FIXME(": need to write temporary data to instrument data\n");
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[1] = %ld < ListSize[1] = %ld\n", ListCount[1], ListSize[1]);
+ } while (ListCount[1] < ListSize[1]);
+ break;
+ }
+ case FOURCC_LART: {
+ TRACE_(dmfile)(": articulators list\n");
+ do {
+ IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[1] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_ART1: {
+ /* temporary structures */
+ CONNECTIONLIST tmpConnectionList;
+ LPCONNECTION tmpConnections;
+
+ TRACE_(dmfile)(": level 1 articulator chunk\n");
+ memset (&tmpConnectionList, 0, sizeof(CONNECTIONLIST)); /* reset */
+ tmpConnections = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(CONNECTION)*tmpConnectionList.cConnections);
+ if (Chunk.dwSize != (sizeof(CONNECTIONLIST) + sizeof(CONNECTION)*tmpConnectionList.cConnections)) ERR(": incorrect chunk size\n");
+ IStream_Read (pStm, &tmpConnectionList, sizeof(CONNECTIONLIST), NULL);
+ IStream_Read (pStm, tmpConnections, sizeof(CONNECTION)*tmpConnectionList.cConnections, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[1] = %ld < ListSize[1] = %ld\n", ListCount[1], ListSize[1]);
+ } while (ListCount[1] < ListSize[1]);
+ break;
+ }
+ case mmioFOURCC('I','N','F','O'): {
+ TRACE_(dmfile)(": INFO list\n");
+ do {
+ IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[1] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case mmioFOURCC('I','N','A','M'): {
+ TRACE_(dmfile)(": name chunk (ignored)\n");
+ if (even_or_odd(Chunk.dwSize)) {
+ ListCount[1] ++;
+ Chunk.dwSize++;
+ }
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','A','R','T'): {
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ if (even_or_odd(Chunk.dwSize)) {
+ ListCount[1] ++;
+ Chunk.dwSize++;
+ }
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','O','P'): {
+ /* temporary structures */
+ CHAR tmpCopyright[DMUS_MAX_NAME];
+
+ TRACE_(dmfile)(": copyright chunk\n");
+ IStream_Read (pStm, tmpCopyright, Chunk.dwSize, NULL);
+ if (even_or_odd(Chunk.dwSize)) {
+ ListCount[1] ++;
+ liMove.QuadPart = 1;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ }
+ break;
+ }
+ case mmioFOURCC('I','S','B','J'): {
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ if (even_or_odd(Chunk.dwSize)) {
+ ListCount[1] ++;
+ Chunk.dwSize++;
+ }
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','M','T'): {
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ if (even_or_odd(Chunk.dwSize)) {
+ ListCount[1] ++;
+ Chunk.dwSize++;
+ }
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ if (even_or_odd(Chunk.dwSize)) {
+ ListCount[1] ++;
+ Chunk.dwSize++;
+ }
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[1] = %ld < ListSize[1] = %ld\n", ListCount[1], ListSize[1]);
+ } while (ListCount[1] < ListSize[1]);
+ break;
+ }
+
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+ }
+ /* DEBUG: dumps whole instrument object tree: */
+/* if (TRACE_ON(dmusic)) {
+ TRACE("*** IDirectMusicInstrument (%p) ***\n", This);
+ if (This->pInstrumentID)
+ TRACE(" - GUID = %s\n", debugstr_guid(This->pInstrumentID));
+
+ TRACE(" - Instrument header:\n");
+ TRACE(" - cRegions: %ld\n", This->pHeader->cRegions);
+ TRACE(" - Locale:\n");
+ TRACE(" - ulBank: %ld\n", This->pHeader->Locale.ulBank);
+ TRACE(" - ulInstrument: %ld\n", This->pHeader->Locale.ulInstrument);
+ TRACE(" => dwPatch: %ld\n", MIDILOCALE2Patch(&This->pHeader->Locale));
+ }*/
+
+ return S_OK;
}
diff --git a/dlls/dmusic/port.c b/dlls/dmusic/port.c
index e609533..16b14c7 100644
--- a/dlls/dmusic/port.c
+++ b/dlls/dmusic/port.c
@@ -1,6 +1,6 @@
/* IDirectMusicPort Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,21 +17,12 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmusic_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmusic);
-/* IDirectMusicPort IUnknown parts follow: */
-HRESULT WINAPI IDirectMusicPortImpl_QueryInterface (LPDIRECTMUSICPORT iface, REFIID riid, LPVOID *ppobj)
-{
+/* IDirectMusicPortImpl IUnknown part: */
+HRESULT WINAPI IDirectMusicPortImpl_QueryInterface (LPDIRECTMUSICPORT iface, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IDirectMusicPortImpl,iface);
if (IsEqualIID (riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicPort)) {
@@ -39,20 +30,17 @@
*ppobj = This;
return S_OK;
}
-
WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicPortImpl_AddRef (LPDIRECTMUSICPORT iface)
-{
+ULONG WINAPI IDirectMusicPortImpl_AddRef (LPDIRECTMUSICPORT iface) {
ICOM_THIS(IDirectMusicPortImpl,iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicPortImpl_Release (LPDIRECTMUSICPORT iface)
-{
+ULONG WINAPI IDirectMusicPortImpl_Release (LPDIRECTMUSICPORT iface) {
ICOM_THIS(IDirectMusicPortImpl,iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
@@ -62,166 +50,121 @@
return ref;
}
-/* IDirectMusicPort Interface follow: */
-HRESULT WINAPI IDirectMusicPortImpl_PlayBuffer (LPDIRECTMUSICPORT iface, LPDIRECTMUSICBUFFER pBuffer)
-{
+/* IDirectMusicPortImpl IDirectMusicPort part: */
+HRESULT WINAPI IDirectMusicPortImpl_PlayBuffer (LPDIRECTMUSICPORT iface, LPDIRECTMUSICBUFFER pBuffer) {
ICOM_THIS(IDirectMusicPortImpl,iface);
-
FIXME("(%p, %p): stub\n", This, pBuffer);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortImpl_SetReadNotificationHandle (LPDIRECTMUSICPORT iface, HANDLE hEvent)
-{
+HRESULT WINAPI IDirectMusicPortImpl_SetReadNotificationHandle (LPDIRECTMUSICPORT iface, HANDLE hEvent) {
ICOM_THIS(IDirectMusicPortImpl,iface);
-
FIXME("(%p, %p): stub\n", This, hEvent);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortImpl_Read (LPDIRECTMUSICPORT iface, LPDIRECTMUSICBUFFER pBuffer)
-{
+HRESULT WINAPI IDirectMusicPortImpl_Read (LPDIRECTMUSICPORT iface, LPDIRECTMUSICBUFFER pBuffer) {
ICOM_THIS(IDirectMusicPortImpl,iface);
-
FIXME("(%p, %p): stub\n", This, pBuffer);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortImpl_DownloadInstrument (LPDIRECTMUSICPORT iface, IDirectMusicInstrument* pInstrument, IDirectMusicDownloadedInstrument** ppDownloadedInstrument, DMUS_NOTERANGE* pNoteRanges, DWORD dwNumNoteRanges)
-{
+HRESULT WINAPI IDirectMusicPortImpl_DownloadInstrument (LPDIRECTMUSICPORT iface, IDirectMusicInstrument* pInstrument, IDirectMusicDownloadedInstrument** ppDownloadedInstrument, DMUS_NOTERANGE* pNoteRanges, DWORD dwNumNoteRanges) {
ICOM_THIS(IDirectMusicPortImpl,iface);
-
FIXME("(%p, %p, %p, %p, %ld): stub\n", This, pInstrument, ppDownloadedInstrument, pNoteRanges, dwNumNoteRanges);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortImpl_UnloadInstrument (LPDIRECTMUSICPORT iface, IDirectMusicDownloadedInstrument *pDownloadedInstrument)
-{
+HRESULT WINAPI IDirectMusicPortImpl_UnloadInstrument (LPDIRECTMUSICPORT iface, IDirectMusicDownloadedInstrument *pDownloadedInstrument) {
ICOM_THIS(IDirectMusicPortImpl,iface);
-
FIXME("(%p, %p): stub\n", This, pDownloadedInstrument);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortImpl_GetLatencyClock (LPDIRECTMUSICPORT iface, IReferenceClock** ppClock)
-{
+HRESULT WINAPI IDirectMusicPortImpl_GetLatencyClock (LPDIRECTMUSICPORT iface, IReferenceClock** ppClock) {
ICOM_THIS(IDirectMusicPortImpl,iface);
-
TRACE("(%p, %p)\n", This, ppClock);
*ppClock = This->pLatencyClock;
IReferenceClock_AddRef (*ppClock);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortImpl_GetRunningStats (LPDIRECTMUSICPORT iface, LPDMUS_SYNTHSTATS pStats)
-{
+HRESULT WINAPI IDirectMusicPortImpl_GetRunningStats (LPDIRECTMUSICPORT iface, LPDMUS_SYNTHSTATS pStats) {
ICOM_THIS(IDirectMusicPortImpl,iface);
-
FIXME("(%p, %p): stub\n", This, pStats);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortImpl_GetCaps (LPDIRECTMUSICPORT iface, LPDMUS_PORTCAPS pPortCaps)
-{
+HRESULT WINAPI IDirectMusicPortImpl_Compact (LPDIRECTMUSICPORT iface) {
ICOM_THIS(IDirectMusicPortImpl,iface);
-
+ FIXME("(%p): stub\n", This);
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicPortImpl_GetCaps (LPDIRECTMUSICPORT iface, LPDMUS_PORTCAPS pPortCaps) {
+ ICOM_THIS(IDirectMusicPortImpl,iface);
TRACE("(%p, %p)\n", This, pPortCaps);
- pPortCaps = This->pCaps;
-
+ pPortCaps = This->pCaps;
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortImpl_DeviceIoControl (LPDIRECTMUSICPORT iface, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped)
-{
+HRESULT WINAPI IDirectMusicPortImpl_DeviceIoControl (LPDIRECTMUSICPORT iface, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped) {
ICOM_THIS(IDirectMusicPortImpl,iface);
-
FIXME("(%p, %ld, %p, %ld, %p, %ld, %p, %p): stub\n", This, dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortImpl_SetNumChannelGroups (LPDIRECTMUSICPORT iface, DWORD dwChannelGroups)
-{
+HRESULT WINAPI IDirectMusicPortImpl_SetNumChannelGroups (LPDIRECTMUSICPORT iface, DWORD dwChannelGroups) {
ICOM_THIS(IDirectMusicPortImpl,iface);
-
FIXME("(%p, %ld): semi-stub\n", This, dwChannelGroups);
This->nrofgroups = dwChannelGroups;
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortImpl_GetNumChannelGroups (LPDIRECTMUSICPORT iface, LPDWORD pdwChannelGroups)
-{
+HRESULT WINAPI IDirectMusicPortImpl_GetNumChannelGroups (LPDIRECTMUSICPORT iface, LPDWORD pdwChannelGroups) {
ICOM_THIS(IDirectMusicPortImpl,iface);
-
TRACE("(%p, %p)\n", This, pdwChannelGroups);
*pdwChannelGroups = This->nrofgroups;
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortImpl_Activate (LPDIRECTMUSICPORT iface, BOOL fActive)
-{
+HRESULT WINAPI IDirectMusicPortImpl_Activate (LPDIRECTMUSICPORT iface, BOOL fActive) {
ICOM_THIS(IDirectMusicPortImpl,iface);
-
TRACE("(%p, %d)\n", This, fActive);
This->fActive = fActive;
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortImpl_SetChannelPriority (LPDIRECTMUSICPORT iface, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority)
-{
+HRESULT WINAPI IDirectMusicPortImpl_SetChannelPriority (LPDIRECTMUSICPORT iface, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) {
ICOM_THIS(IDirectMusicPortImpl,iface);
-
FIXME("(%p, %ld, %ld, %ld): semi-stub\n", This, dwChannelGroup, dwChannel, dwPriority);
-
- if (dwChannel > 16)
- {
+ if (dwChannel > 16) {
WARN("isn't there supposed to be 16 channels (no. %ld requested)?! (faking as it is ok)\n", dwChannel);
/*return E_INVALIDARG;*/
}
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortImpl_GetChannelPriority (LPDIRECTMUSICPORT iface, DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority)
-{
+HRESULT WINAPI IDirectMusicPortImpl_GetChannelPriority (LPDIRECTMUSICPORT iface, DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) {
ICOM_THIS(IDirectMusicPortImpl,iface);
-
TRACE("(%p, %ld, %ld, %p)\n", This, dwChannelGroup, dwChannel, pdwPriority);
*pdwPriority = This->group[dwChannelGroup-1].channel[dwChannel].priority;
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortImpl_SetDirectSound (LPDIRECTMUSICPORT iface, LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer)
-{
+HRESULT WINAPI IDirectMusicPortImpl_SetDirectSound (LPDIRECTMUSICPORT iface, LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer) {
ICOM_THIS(IDirectMusicPortImpl,iface);
-
FIXME("(%p, %p, %p): stub\n", This, pDirectSound, pDirectSoundBuffer);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortImpl_GetFormat (LPDIRECTMUSICPORT iface, LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSize, LPDWORD pdwBufferSize)
-{
+HRESULT WINAPI IDirectMusicPortImpl_GetFormat (LPDIRECTMUSICPORT iface, LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSize, LPDWORD pdwBufferSize) {
ICOM_THIS(IDirectMusicPortImpl,iface);
-
FIXME("(%p, %p, %p, %p): stub\n", This, pWaveFormatEx, pdwWaveFormatExSize, pdwBufferSize);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicPort) DirectMusicPort_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicPort) DirectMusicPort_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
IDirectMusicPortImpl_QueryInterface,
IDirectMusicPortImpl_AddRef,
@@ -233,6 +176,7 @@
IDirectMusicPortImpl_UnloadInstrument,
IDirectMusicPortImpl_GetLatencyClock,
IDirectMusicPortImpl_GetRunningStats,
+ IDirectMusicPortImpl_Compact,
IDirectMusicPortImpl_GetCaps,
IDirectMusicPortImpl_DeviceIoControl,
IDirectMusicPortImpl_SetNumChannelGroups,
@@ -243,16 +187,3 @@
IDirectMusicPortImpl_SetDirectSound,
IDirectMusicPortImpl_GetFormat
};
-
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicPort (LPCGUID lpcGUID, LPDIRECTMUSICPORT* ppDMPort, LPUNKNOWN pUnkOuter)
-{
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicPort))
- {
- FIXME("Not yet\n");
- return E_NOINTERFACE;
- }
- WARN("No interface found\n");
-
- return E_NOINTERFACE;
-}
diff --git a/dlls/dmusic/portdownload.c b/dlls/dmusic/portdownload.c
index d683d57..634f449 100644
--- a/dlls/dmusic/portdownload.c
+++ b/dlls/dmusic/portdownload.c
@@ -1,6 +1,6 @@
/* IDirectMusicPortDownloadImpl Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,21 +17,12 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmusic_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmusic);
/* IDirectMusicPortDownload IUnknown parts follow: */
-HRESULT WINAPI IDirectMusicPortDownloadImpl_QueryInterface (LPDIRECTMUSICPORTDOWNLOAD iface, REFIID riid, LPVOID *ppobj)
-{
+HRESULT WINAPI IDirectMusicPortDownloadImpl_QueryInterface (LPDIRECTMUSICPORTDOWNLOAD iface, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IDirectMusicPortDownloadImpl,iface);
if (IsEqualIID (riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicPortDownload)) {
@@ -39,20 +30,17 @@
*ppobj = This;
return S_OK;
}
-
WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicPortDownloadImpl_AddRef (LPDIRECTMUSICPORTDOWNLOAD iface)
-{
+ULONG WINAPI IDirectMusicPortDownloadImpl_AddRef (LPDIRECTMUSICPORTDOWNLOAD iface) {
ICOM_THIS(IDirectMusicPortDownloadImpl,iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicPortDownloadImpl_Release (LPDIRECTMUSICPORTDOWNLOAD iface)
-{
+ULONG WINAPI IDirectMusicPortDownloadImpl_Release (LPDIRECTMUSICPORTDOWNLOAD iface) {
ICOM_THIS(IDirectMusicPortDownloadImpl,iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
@@ -63,62 +51,43 @@
}
/* IDirectMusicPortDownload Interface follow: */
-HRESULT WINAPI IDirectMusicPortDownloadImpl_GetBuffer (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD dwDLId, IDirectMusicDownload** ppIDMDownload)
-{
+HRESULT WINAPI IDirectMusicPortDownloadImpl_GetBuffer (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD dwDLId, IDirectMusicDownload** ppIDMDownload) {
ICOM_THIS(IDirectMusicPortDownloadImpl,iface);
-
FIXME("(%p, %ld, %p): stub\n", This, dwDLId, ppIDMDownload);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortDownloadImpl_AllocateBuffer (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD dwSize, IDirectMusicDownload** ppIDMDownload)
-{
+HRESULT WINAPI IDirectMusicPortDownloadImpl_AllocateBuffer (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD dwSize, IDirectMusicDownload** ppIDMDownload) {
ICOM_THIS(IDirectMusicPortDownloadImpl,iface);
-
FIXME("(%p, %ld, %p): stub\n", This, dwSize, ppIDMDownload);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortDownloadImpl_GetDLId (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD* pdwStartDLId, DWORD dwCount)
-{
+HRESULT WINAPI IDirectMusicPortDownloadImpl_GetDLId (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD* pdwStartDLId, DWORD dwCount) {
ICOM_THIS(IDirectMusicPortDownloadImpl,iface);
-
FIXME("(%p, %p, %ld): stub\n", This, pdwStartDLId, dwCount);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortDownloadImpl_GetAppend (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD* pdwAppend)
-{
+HRESULT WINAPI IDirectMusicPortDownloadImpl_GetAppend (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD* pdwAppend) {
ICOM_THIS(IDirectMusicPortDownloadImpl,iface);
-
FIXME("(%p, %p): stub\n", This, pdwAppend);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortDownloadImpl_Download (LPDIRECTMUSICPORTDOWNLOAD iface, IDirectMusicDownload* pIDMDownload)
-{
+HRESULT WINAPI IDirectMusicPortDownloadImpl_Download (LPDIRECTMUSICPORTDOWNLOAD iface, IDirectMusicDownload* pIDMDownload) {
ICOM_THIS(IDirectMusicPortDownloadImpl,iface);
-
FIXME("(%p, %p): stub\n", This, pIDMDownload);
-
return S_OK;
}
-HRESULT WINAPI IDirectMusicPortDownloadImpl_Unload (LPDIRECTMUSICPORTDOWNLOAD iface, IDirectMusicDownload* pIDMDownload)
-{
+HRESULT WINAPI IDirectMusicPortDownloadImpl_Unload (LPDIRECTMUSICPORTDOWNLOAD iface, IDirectMusicDownload* pIDMDownload) {
ICOM_THIS(IDirectMusicPortDownloadImpl,iface);
-
FIXME("(%p, %p): stub\n", This, pIDMDownload);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicPortDownload) DirectMusicPortDownload_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicPortDownload) DirectMusicPortDownload_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
IDirectMusicPortDownloadImpl_QueryInterface,
IDirectMusicPortDownloadImpl_AddRef,
@@ -130,16 +99,3 @@
IDirectMusicPortDownloadImpl_Download,
IDirectMusicPortDownloadImpl_Unload
};
-
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicPortDownload (LPCGUID lpcGUID, LPDIRECTMUSICPORTDOWNLOAD* ppDMPortDL, LPUNKNOWN pUnkOuter)
-{
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicPortDownload))
- {
- FIXME("Not yet\n");
- return E_NOINTERFACE;
- }
-
- WARN("No interface found\n");
- return E_NOINTERFACE;
-}
diff --git a/dlls/dmusic/regsvr.c b/dlls/dmusic/regsvr.c
index 91470d2..62a2853 100644
--- a/dlls/dmusic/regsvr.c
+++ b/dlls/dmusic/regsvr.c
@@ -18,21 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include <stdarg.h>
-#include <string.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winreg.h"
-#include "winerror.h"
-
-#include "dmusics.h"
-#include "dmusici.h"
-#include "dmplugin.h"
-
-#include "wine/debug.h"
+#include "dmusic_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmusic);
@@ -44,8 +30,7 @@
/***********************************************************************
* interface for self-registering
*/
-struct regsvr_interface
-{
+struct regsvr_interface {
IID const *iid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
IID const *base_iid; /* can be NULL to omit */
@@ -57,8 +42,7 @@
static HRESULT register_interfaces(struct regsvr_interface const *list);
static HRESULT unregister_interfaces(struct regsvr_interface const *list);
-struct regsvr_coclass
-{
+struct regsvr_coclass {
CLSID const *clsid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
LPCSTR ips; /* can be NULL to omit */
@@ -124,8 +108,7 @@
/***********************************************************************
* register_interfaces
*/
-static HRESULT register_interfaces(struct regsvr_interface const *list)
-{
+static HRESULT register_interfaces(struct regsvr_interface const *list) {
LONG res = ERROR_SUCCESS;
HKEY interface_key;
@@ -194,8 +177,7 @@
/***********************************************************************
* unregister_interfaces
*/
-static HRESULT unregister_interfaces(struct regsvr_interface const *list)
-{
+static HRESULT unregister_interfaces(struct regsvr_interface const *list) {
LONG res = ERROR_SUCCESS;
HKEY interface_key;
@@ -219,8 +201,7 @@
/***********************************************************************
* register_coclasses
*/
-static HRESULT register_coclasses(struct regsvr_coclass const *list)
-{
+static HRESULT register_coclasses(struct regsvr_coclass const *list) {
LONG res = ERROR_SUCCESS;
HKEY coclass_key;
@@ -301,8 +282,7 @@
/***********************************************************************
* unregister_coclasses
*/
-static HRESULT unregister_coclasses(struct regsvr_coclass const *list)
-{
+static HRESULT unregister_coclasses(struct regsvr_coclass const *list) {
LONG res = ERROR_SUCCESS;
HKEY coclass_key;
@@ -338,8 +318,7 @@
/***********************************************************************
* regsvr_key_guid
*/
-static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid)
-{
+static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid) {
WCHAR buf[39];
StringFromGUID2(guid, buf, 39);
@@ -352,8 +331,7 @@
static LONG register_key_defvalueW(
HKEY base,
WCHAR const *name,
- WCHAR const *value)
-{
+ WCHAR const *value) {
LONG res;
HKEY key;
@@ -372,8 +350,7 @@
static LONG register_key_defvalueA(
HKEY base,
WCHAR const *name,
- char const *value)
-{
+ char const *value) {
LONG res;
HKEY key;
@@ -394,8 +371,7 @@
char const *progid,
char const *curver_progid,
char const *name,
- char const *extra)
-{
+ char const *extra) {
LONG res;
HKEY progid_key;
@@ -439,8 +415,7 @@
/***********************************************************************
* recursive_delete_key
*/
-static LONG recursive_delete_key(HKEY key)
-{
+static LONG recursive_delete_key(HKEY key) {
LONG res;
WCHAR subkey_name[MAX_PATH];
DWORD cName;
@@ -471,8 +446,7 @@
/***********************************************************************
* recursive_delete_keyA
*/
-static LONG recursive_delete_keyA(HKEY base, char const *name)
-{
+static LONG recursive_delete_keyA(HKEY base, char const *name) {
LONG res;
HKEY key;
@@ -487,8 +461,7 @@
/***********************************************************************
* recursive_delete_keyW
*/
-static LONG recursive_delete_keyW(HKEY base, WCHAR const *name)
-{
+static LONG recursive_delete_keyW(HKEY base, WCHAR const *name) {
LONG res;
HKEY key;
@@ -534,8 +507,7 @@
/***********************************************************************
* DllRegisterServer (DMUSIC.3)
*/
-HRESULT WINAPI DMUSIC_DllRegisterServer(void)
-{
+HRESULT WINAPI DMUSIC_DllRegisterServer(void) {
HRESULT hr;
TRACE("\n");
@@ -549,8 +521,7 @@
/***********************************************************************
* DllUnregisterServer (DMUSIC.4)
*/
-HRESULT WINAPI DMUSIC_DllUnregisterServer(void)
-{
+HRESULT WINAPI DMUSIC_DllUnregisterServer(void) {
HRESULT hr;
TRACE("\n");
diff --git a/dlls/dmusic/thru.c b/dlls/dmusic/thru.c
index 62d6ed8..71e82a2 100644
--- a/dlls/dmusic/thru.c
+++ b/dlls/dmusic/thru.c
@@ -1,6 +1,6 @@
/* IDirectMusicThru Implementation
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,21 +17,12 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdarg.h>
-
-#include "windef.h"
-#include "winbase.h"
-#include "winuser.h"
-#include "wingdi.h"
-#include "wine/debug.h"
-
#include "dmusic_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmusic);
/* IDirectMusicThru IUnknown parts follow: */
-HRESULT WINAPI IDirectMusicThruImpl_QueryInterface (LPDIRECTMUSICTHRU iface, REFIID riid, LPVOID *ppobj)
-{
+HRESULT WINAPI IDirectMusicThruImpl_QueryInterface (LPDIRECTMUSICTHRU iface, REFIID riid, LPVOID *ppobj) {
ICOM_THIS(IDirectMusicThruImpl,iface);
if (IsEqualIID (riid, &IID_IUnknown) ||
@@ -40,20 +31,17 @@
*ppobj = This;
return S_OK;
}
-
WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
return E_NOINTERFACE;
}
-ULONG WINAPI IDirectMusicThruImpl_AddRef (LPDIRECTMUSICTHRU iface)
-{
+ULONG WINAPI IDirectMusicThruImpl_AddRef (LPDIRECTMUSICTHRU iface) {
ICOM_THIS(IDirectMusicThruImpl,iface);
TRACE("(%p) : AddRef from %ld\n", This, This->ref);
return ++(This->ref);
}
-ULONG WINAPI IDirectMusicThruImpl_Release (LPDIRECTMUSICTHRU iface)
-{
+ULONG WINAPI IDirectMusicThruImpl_Release (LPDIRECTMUSICTHRU iface) {
ICOM_THIS(IDirectMusicThruImpl,iface);
ULONG ref = --This->ref;
TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
@@ -64,33 +52,16 @@
}
/* IDirectMusicThru Interface follow: */
-HRESULT WINAPI IDirectMusicThruImpl_ThruChannel (LPDIRECTMUSICTHRU iface, DWORD dwSourceChannelGroup, DWORD dwSourceChannel, DWORD dwDestinationChannelGroup, DWORD dwDestinationChannel, LPDIRECTMUSICPORT pDestinationPort)
-{
+HRESULT WINAPI IDirectMusicThruImpl_ThruChannel (LPDIRECTMUSICTHRU iface, DWORD dwSourceChannelGroup, DWORD dwSourceChannel, DWORD dwDestinationChannelGroup, DWORD dwDestinationChannel, LPDIRECTMUSICPORT pDestinationPort) {
ICOM_THIS(IDirectMusicThruImpl,iface);
-
FIXME("(%p, %ld, %ld, %ld, %ld, %p): stub\n", This, dwSourceChannelGroup, dwSourceChannel, dwDestinationChannelGroup, dwDestinationChannel, pDestinationPort);
-
return S_OK;
}
-ICOM_VTABLE(IDirectMusicThru) DirectMusicThru_Vtbl =
-{
+ICOM_VTABLE(IDirectMusicThru) DirectMusicThru_Vtbl = {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
IDirectMusicThruImpl_QueryInterface,
IDirectMusicThruImpl_AddRef,
IDirectMusicThruImpl_Release,
IDirectMusicThruImpl_ThruChannel
};
-
-/* for ClassFactory */
-HRESULT WINAPI DMUSIC_CreateDirectMusicThru (LPCGUID lpcGUID, LPDIRECTMUSICTHRU* ppDMThru, LPUNKNOWN pUnkOuter)
-{
- if (IsEqualIID (lpcGUID, &IID_IDirectMusicThru))
- {
- FIXME("Not yet\n");
- return E_NOINTERFACE;
- }
-
- WARN("No interface found\n");
- return E_NOINTERFACE;
-}
diff --git a/dlls/dmusic/version.rc b/dlls/dmusic/version.rc
index 727866b..09df126 100644
--- a/dlls/dmusic/version.rc
+++ b/dlls/dmusic/version.rc
@@ -1,5 +1,5 @@
/*
- * Copyright 2001 Ove Kaaven
+ * Copyright (C) 2003-2004 Rok Mandeljc <rok.mandeljc@gimb.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -19,10 +19,10 @@
#define WINE_OLESELFREGISTER
#define WINE_FILEDESCRIPTION_STR "Wine DirectMusic"
#define WINE_FILENAME_STR "dmusic.dll"
-#define WINE_FILEVERSION 4,8,1,881
-#define WINE_FILEVERSION_STR "4.8.1.881"
-#define WINE_PRODUCTVERSION 4,8,1,881
-#define WINE_PRODUCTVERSION_STR "4.8"
+#define WINE_FILEVERSION 4,9,0,900
+#define WINE_FILEVERSION_STR "4.9.0.900"
+#define WINE_PRODUCTVERSION 4,9,0,900
+#define WINE_PRODUCTVERSION_STR "4.9"
#define WINE_PRODUCTNAME_STR "DirectX"
#include "wine/wine_common_ver.rc"
diff --git a/dlls/dmusic32/dmusic32_main.c b/dlls/dmusic32/dmusic32_main.c
index 1cf8675..bfc0f80 100644
--- a/dlls/dmusic32/dmusic32_main.c
+++ b/dlls/dmusic32/dmusic32_main.c
@@ -1,6 +1,6 @@
/* DirectMusic32 Main
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,11 +20,21 @@
#include <stdarg.h>
#include "windef.h"
-#include "wine/debug.h"
#include "winbase.h"
#include "winnt.h"
+#include "wingdi.h"
+#include "winuser.h"
-WINE_DEFAULT_DEBUG_CHANNEL(dmusic);
+#include "wine/debug.h"
+#include "wine/list.h"
+#include "wine/unicode.h"
+#include "winreg.h"
+
+#include "dmusici.h"
+#include "dmusicf.h"
+#include "dmusics.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(dmusic32);
HRESULT WINAPI DMUSIC32_CreateCDirectMusicEmulatePort (LPVOID ptr1, LPVOID ptr2, LPVOID ptr3)
{
diff --git a/dlls/dmusic32/version.rc b/dlls/dmusic32/version.rc
index 087ac33..168d6c0 100644
--- a/dlls/dmusic32/version.rc
+++ b/dlls/dmusic32/version.rc
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc <rok.mandeljc@gimb.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -18,10 +18,10 @@
#define WINE_FILEDESCRIPTION_STR "Wine DirectMusic Legacy Port"
#define WINE_FILENAME_STR "dmusic32.dll"
-#define WINE_FILEVERSION 4,8,1,881
-#define WINE_FILEVERSION_STR "4.8.1.881"
-#define WINE_PRODUCTVERSION 4,8,1,881
-#define WINE_PRODUCTVERSION_STR "4.8"
+#define WINE_FILEVERSION 4,9,0,900
+#define WINE_FILEVERSION_STR "4.9.0.900"
+#define WINE_PRODUCTVERSION 4,9,0,900
+#define WINE_PRODUCTVERSION_STR "4.9"
#define WINE_PRODUCTNAME_STR "DirectX"
#include "wine/wine_common_ver.rc"
diff --git a/dlls/dswave/.cvsignore b/dlls/dswave/.cvsignore
new file mode 100644
index 0000000..9854a67
--- /dev/null
+++ b/dlls/dswave/.cvsignore
@@ -0,0 +1,5 @@
+Makefile
+dswave.dll.dbg.c
+dswave.spec.c
+dswave.spec.def
+version.res
diff --git a/dlls/dswave/Makefile.in b/dlls/dswave/Makefile.in
new file mode 100644
index 0000000..399b5d6
--- /dev/null
+++ b/dlls/dswave/Makefile.in
@@ -0,0 +1,18 @@
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR = @srcdir@
+VPATH = @srcdir@
+MODULE = dswave.dll
+IMPORTS = msacm32 ole32 user32 advapi32 kernel32
+EXTRALIBS = $(LIBUUID)
+
+C_SRCS = \
+ dswave.c \
+ dswave_main.c \
+ regsvr.c
+
+RC_SRCS = version.rc
+
+@MAKE_DLL_RULES@
+
+### Dependencies:
diff --git a/dlls/dswave/dswave.c b/dlls/dswave/dswave.c
new file mode 100644
index 0000000..40b5c6d
--- /dev/null
+++ b/dlls/dswave/dswave.c
@@ -0,0 +1,365 @@
+/* IDirectMusicWave Implementation
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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 Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "dswave_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(dswave);
+WINE_DECLARE_DEBUG_CHANNEL(dmfile);
+
+/*****************************************************************************
+ * IDirectMusicWaveImpl implementation
+ */
+/* IDirectMusicWaveImpl IUnknown part: */
+HRESULT WINAPI IDirectMusicWaveImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicWaveImpl, UnknownVtbl, iface);
+
+ if (IsEqualIID (riid, &IID_IUnknown)) {
+ *ppobj = (LPVOID)&This->UnknownVtbl;
+ IDirectMusicWaveImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IDirectMusicObject)) {
+ *ppobj = (LPVOID)&This->ObjectVtbl;
+ IDirectMusicWaveImpl_IDirectMusicObject_AddRef ((LPDIRECTMUSICOBJECT)&This->ObjectVtbl);
+ return S_OK;
+ } else if (IsEqualIID (riid, &IID_IPersistStream)) {
+ *ppobj = (LPVOID)&This->PersistStreamVtbl;
+ IDirectMusicWaveImpl_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl);
+ return S_OK;
+ }
+
+ WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
+ return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicWaveImpl_IUnknown_AddRef (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicWaveImpl, UnknownVtbl, iface);
+ TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+ return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicWaveImpl_IUnknown_Release (LPUNKNOWN iface) {
+ ICOM_THIS_MULTI(IDirectMusicWaveImpl, UnknownVtbl, iface);
+ ULONG ref = --This->ref;
+ TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+ if (ref == 0) {
+ HeapFree(GetProcessHeap(), 0, This);
+ }
+ return ref;
+}
+
+ICOM_VTABLE(IUnknown) DirectMusicWave_Unknown_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicWaveImpl_IUnknown_QueryInterface,
+ IDirectMusicWaveImpl_IUnknown_AddRef,
+ IDirectMusicWaveImpl_IUnknown_Release
+};
+
+/* IDirectMusicWaveImpl IDirectMusicObject part: */
+HRESULT WINAPI IDirectMusicWaveImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicWaveImpl, ObjectVtbl, iface);
+ return IDirectMusicWaveImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicWaveImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicWaveImpl, ObjectVtbl, iface);
+ return IDirectMusicWaveImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicWaveImpl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface) {
+ ICOM_THIS_MULTI(IDirectMusicWaveImpl, ObjectVtbl, iface);
+ return IDirectMusicWaveImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicWaveImpl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicWaveImpl, ObjectVtbl, iface);
+ TRACE("(%p, %p)\n", This, pDesc);
+ /* I think we shouldn't return pointer here since then values can be changed; it'd be a mess */
+ memcpy (pDesc, This->pDesc, This->pDesc->dwSize);
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicWaveImpl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc) {
+ ICOM_THIS_MULTI(IDirectMusicWaveImpl, ObjectVtbl, iface);
+ TRACE("(%p, %p): setting descriptor:\n", This, pDesc);
+ if (TRACE_ON(dswave)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
+ }
+
+ /* According to MSDN, we should copy only given values, not whole struct */
+ if (pDesc->dwValidData & DMUS_OBJ_OBJECT)
+ memcpy (&This->pDesc->guidObject, &pDesc->guidObject, sizeof (pDesc->guidObject));
+ if (pDesc->dwValidData & DMUS_OBJ_CLASS)
+ memcpy (&This->pDesc->guidClass, &pDesc->guidClass, sizeof (pDesc->guidClass));
+ if (pDesc->dwValidData & DMUS_OBJ_NAME)
+ strncpyW (This->pDesc->wszName, pDesc->wszName, DMUS_MAX_NAME);
+ if (pDesc->dwValidData & DMUS_OBJ_CATEGORY)
+ strncpyW (This->pDesc->wszCategory, pDesc->wszCategory, DMUS_MAX_CATEGORY);
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME)
+ strncpyW (This->pDesc->wszFileName, pDesc->wszFileName, DMUS_MAX_FILENAME);
+ if (pDesc->dwValidData & DMUS_OBJ_VERSION)
+ memcpy (&This->pDesc->vVersion, &pDesc->vVersion, sizeof (pDesc->vVersion));
+ if (pDesc->dwValidData & DMUS_OBJ_DATE)
+ memcpy (&This->pDesc->ftDate, &pDesc->ftDate, sizeof (pDesc->ftDate));
+ if (pDesc->dwValidData & DMUS_OBJ_MEMORY) {
+ memcpy (&This->pDesc->llMemLength, &pDesc->llMemLength, sizeof (pDesc->llMemLength));
+ memcpy (This->pDesc->pbMemData, pDesc->pbMemData, sizeof (pDesc->pbMemData));
+ }
+ if (pDesc->dwValidData & DMUS_OBJ_STREAM) {
+ /* according to MSDN, we copy the stream */
+ IStream_Clone (pDesc->pStream, &This->pDesc->pStream);
+ }
+
+ /* add new flags */
+ This->pDesc->dwValidData |= pDesc->dwValidData;
+
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicWaveImpl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc) {
+ DMUS_PRIVATE_CHUNK Chunk;
+ DWORD StreamSize, StreamCount, ListSize[1], ListCount[1];
+ LARGE_INTEGER liMove; /* used when skipping chunks */
+
+ TRACE("(%p, %p)\n", pStream, pDesc);
+
+ /* FIXME: should this be determined from stream? */
+ pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&pDesc->guidClass, &CLSID_DirectMusicSegment, sizeof(CLSID));
+
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case FOURCC_RIFF: {
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ StreamSize = Chunk.dwSize - sizeof(FOURCC);
+ StreamCount = 0;
+ if (Chunk.fccID == mmioFOURCC('W','A','V','E')) {
+ TRACE_(dmfile)(": wave form\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ StreamCount += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ case DMUS_FOURCC_GUID_CHUNK: {
+ TRACE_(dmfile)(": GUID chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read (pStream, &pDesc->guidObject, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_VERSION_CHUNK: {
+ TRACE_(dmfile)(": version chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read (pStream, &pDesc->vVersion, Chunk.dwSize, NULL);
+ break;
+ }
+ case DMUS_FOURCC_CATEGORY_CHUNK: {
+ TRACE_(dmfile)(": category chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_CATEGORY;
+ IStream_Read (pStream, pDesc->wszCategory, Chunk.dwSize, NULL);
+ break;
+ }
+ case FOURCC_LIST: {
+ IStream_Read (pStream, &Chunk.fccID, sizeof(FOURCC), NULL);
+ TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
+ ListSize[0] = Chunk.dwSize - sizeof(FOURCC);
+ ListCount[0] = 0;
+ switch (Chunk.fccID) {
+ /* evil M$ UNFO list, which can (!?) contain INFO elements */
+ case DMUS_FOURCC_UNFO_LIST: {
+ TRACE_(dmfile)(": UNFO list\n");
+ do {
+ IStream_Read (pStream, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
+ ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
+ TRACE_(dmfile)(": %s chunk (size = 0x%04lx)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
+ switch (Chunk.fccID) {
+ /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
+ (though strings seem to be valid unicode) */
+ case mmioFOURCC('I','N','A','M'):
+ case DMUS_FOURCC_UNAM_CHUNK: {
+ TRACE_(dmfile)(": name chunk\n");
+ pDesc->dwValidData |= DMUS_OBJ_NAME;
+ IStream_Read (pStream, pDesc->wszName, Chunk.dwSize, NULL);
+ break;
+ }
+ case mmioFOURCC('I','A','R','T'):
+ case DMUS_FOURCC_UART_CHUNK: {
+ TRACE_(dmfile)(": artist chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','O','P'):
+ case DMUS_FOURCC_UCOP_CHUNK: {
+ TRACE_(dmfile)(": copyright chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','S','B','J'):
+ case DMUS_FOURCC_USBJ_CHUNK: {
+ TRACE_(dmfile)(": subject chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ case mmioFOURCC('I','C','M','T'):
+ case DMUS_FOURCC_UCMT_CHUNK: {
+ TRACE_(dmfile)(": comment chunk (ignored)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
+ } while (ListCount[0] < ListSize[0]);
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown (skipping)\n");
+ liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unknown chunk (irrevelant & skipping)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL);
+ break;
+ }
+ }
+ TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
+ } while (StreamCount < StreamSize);
+ break;
+ } else {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = StreamSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return E_FAIL;
+ }
+
+ TRACE_(dmfile)(": reading finished\n");
+ break;
+ }
+ default: {
+ TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
+ liMove.QuadPart = Chunk.dwSize;
+ IStream_Seek (pStream, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
+ return DMUS_E_INVALIDFILE;
+ }
+ }
+
+ TRACE(": returning descriptor:\n");
+ if (TRACE_ON(dswave)) {
+ DMUSIC_dump_DMUS_OBJECTDESC (pDesc);
+ }
+
+ return S_OK;
+}
+
+ICOM_VTABLE(IDirectMusicObject) DirectMusicWave_Object_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicWaveImpl_IDirectMusicObject_QueryInterface,
+ IDirectMusicWaveImpl_IDirectMusicObject_AddRef,
+ IDirectMusicWaveImpl_IDirectMusicObject_Release,
+ IDirectMusicWaveImpl_IDirectMusicObject_GetDescriptor,
+ IDirectMusicWaveImpl_IDirectMusicObject_SetDescriptor,
+ IDirectMusicWaveImpl_IDirectMusicObject_ParseDescriptor
+};
+
+/* IDirectMusicWaveImpl IPersistStream part: */
+HRESULT WINAPI IDirectMusicWaveImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS_MULTI(IDirectMusicWaveImpl, PersistStreamVtbl, iface);
+ return IDirectMusicWaveImpl_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj);
+}
+
+ULONG WINAPI IDirectMusicWaveImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicWaveImpl, PersistStreamVtbl, iface);
+ return IDirectMusicWaveImpl_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+ULONG WINAPI IDirectMusicWaveImpl_IPersistStream_Release (LPPERSISTSTREAM iface) {
+ ICOM_THIS_MULTI(IDirectMusicWaveImpl, PersistStreamVtbl, iface);
+ return IDirectMusicWaveImpl_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl);
+}
+
+HRESULT WINAPI IDirectMusicWaveImpl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicWaveImpl_IPersistStream_IsDirty (LPPERSISTSTREAM iface) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicWaveImpl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) {
+ ICOM_THIS_MULTI(IDirectMusicWaveImpl, PersistStreamVtbl, iface);
+ FIXME("(%p, %p): loading not implemented yet\n", This, pStm);
+ return S_OK;
+}
+
+HRESULT WINAPI IDirectMusicWaveImpl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) {
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI IDirectMusicWaveImpl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) {
+ return E_NOTIMPL;
+}
+
+ICOM_VTABLE(IPersistStream) DirectMusicWave_PersistStream_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ IDirectMusicWaveImpl_IPersistStream_QueryInterface,
+ IDirectMusicWaveImpl_IPersistStream_AddRef,
+ IDirectMusicWaveImpl_IPersistStream_Release,
+ IDirectMusicWaveImpl_IPersistStream_GetClassID,
+ IDirectMusicWaveImpl_IPersistStream_IsDirty,
+ IDirectMusicWaveImpl_IPersistStream_Load,
+ IDirectMusicWaveImpl_IPersistStream_Save,
+ IDirectMusicWaveImpl_IPersistStream_GetSizeMax
+};
+
+
+/* for ClassFactory */
+HRESULT WINAPI DMUSIC_CreateDirectMusicWaveImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) {
+ IDirectMusicWaveImpl* obj;
+
+ obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicWaveImpl));
+ if (NULL == obj) {
+ *ppobj = (LPVOID) NULL;
+ return E_OUTOFMEMORY;
+ }
+ obj->UnknownVtbl = &DirectMusicWave_Unknown_Vtbl;
+ obj->ObjectVtbl = &DirectMusicWave_Object_Vtbl;
+ obj->PersistStreamVtbl = &DirectMusicWave_PersistStream_Vtbl;
+ obj->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
+ DM_STRUCT_INIT(obj->pDesc);
+ obj->pDesc->dwValidData |= DMUS_OBJ_CLASS;
+ memcpy (&obj->pDesc->guidClass, &CLSID_DirectMusicSegment, sizeof (CLSID)); /* shown by tests */
+ obj->ref = 0; /* will be inited by QueryInterface */
+
+ return IDirectMusicWaveImpl_IUnknown_QueryInterface ((LPUNKNOWN)&obj->UnknownVtbl, lpcGUID, ppobj);
+}
diff --git a/dlls/dswave/dswave.spec b/dlls/dswave/dswave.spec
new file mode 100644
index 0000000..7bbacee
--- /dev/null
+++ b/dlls/dswave/dswave.spec
@@ -0,0 +1,4 @@
+@ stdcall -private DllCanUnloadNow() DSWAVE_DllCanUnloadNow
+@ stdcall -private DllGetClassObject(ptr ptr ptr) DSWAVE_DllGetClassObject
+@ stdcall -private DllRegisterServer() DSWAVE_DllRegisterServer
+@ stdcall -private DllUnregisterServer() DSWAVE_DllUnregisterServer
diff --git a/dlls/dswave/dswave_main.c b/dlls/dswave/dswave_main.c
new file mode 100644
index 0000000..5146ae7
--- /dev/null
+++ b/dlls/dswave/dswave_main.c
@@ -0,0 +1,116 @@
+/* DirectMusic Wave Main
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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 Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "dswave_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(dswave);
+
+typedef struct {
+ /* IUnknown fields */
+ ICOM_VFIELD(IClassFactory);
+ DWORD ref;
+} IClassFactoryImpl;
+
+/******************************************************************
+ * DirectMusicWave ClassFactory
+ */
+static HRESULT WINAPI WaveCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
+ ICOM_THIS(IClassFactoryImpl,iface);
+ FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj);
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI WaveCF_AddRef(LPCLASSFACTORY iface) {
+ ICOM_THIS(IClassFactoryImpl,iface);
+ return ++(This->ref);
+}
+
+static ULONG WINAPI WaveCF_Release(LPCLASSFACTORY iface) {
+ ICOM_THIS(IClassFactoryImpl,iface);
+ /* static class, won't be freed */
+ return --(This->ref);
+}
+
+static HRESULT WINAPI WaveCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
+ ICOM_THIS(IClassFactoryImpl,iface);
+ TRACE ("(%p)->(%p,%s,%p)\n", This, pOuter, debugstr_guid(riid), ppobj);
+ return DMUSIC_CreateDirectMusicWaveImpl (riid, ppobj, pOuter);
+}
+
+static HRESULT WINAPI WaveCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
+ ICOM_THIS(IClassFactoryImpl,iface);
+ FIXME("(%p)->(%d),stub!\n", This, dolock);
+ return S_OK;
+}
+
+static ICOM_VTABLE(IClassFactory) WaveCF_Vtbl = {
+ ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+ WaveCF_QueryInterface,
+ WaveCF_AddRef,
+ WaveCF_Release,
+ WaveCF_CreateInstance,
+ WaveCF_LockServer
+};
+
+static IClassFactoryImpl Wave_CF = {&WaveCF_Vtbl, 1 };
+
+/******************************************************************
+ * DllMain
+ *
+ *
+ */
+BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
+ if (fdwReason == DLL_PROCESS_ATTACH) {
+ DisableThreadLibraryCalls(hinstDLL);
+ /* FIXME: Initialisation */
+ } else if (fdwReason == DLL_PROCESS_DETACH) {
+ /* FIXME: Cleanup */
+ }
+
+ return TRUE;
+}
+
+
+/******************************************************************
+ * DllCanUnloadNow (DSWAVE.1)
+ *
+ *
+ */
+HRESULT WINAPI DSWAVE_DllCanUnloadNow(void) {
+ FIXME("(void): stub\n");
+ return S_FALSE;
+}
+
+
+/******************************************************************
+ * DllGetClassObject (DSWAVE.2)
+ *
+ *
+ */
+HRESULT WINAPI DSWAVE_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) {
+ TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
+ if (IsEqualCLSID (rclsid, &CLSID_DirectSoundWave) && IsEqualIID (riid, &IID_IClassFactory)) {
+ *ppv = (LPVOID) &Wave_CF;
+ IClassFactory_AddRef((IClassFactory*)*ppv);
+ return S_OK;
+ }
+
+ WARN("(%p,%p,%p): no interface found.\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
+ return CLASS_E_CLASSNOTAVAILABLE;
+}
diff --git a/dlls/dswave/dswave_private.h b/dlls/dswave/dswave_private.h
new file mode 100644
index 0000000..5eb34af
--- /dev/null
+++ b/dlls/dswave/dswave_private.h
@@ -0,0 +1,195 @@
+/* DirectMusic Wave Private Include
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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 Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __WINE_DSWAVE_PRIVATE_H
+#define __WINE_DSWAVE_PRIVATE_H
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "winnt.h"
+#include "wingdi.h"
+#include "winuser.h"
+
+#include "wine/debug.h"
+#include "wine/list.h"
+#include "wine/unicode.h"
+#include "winreg.h"
+
+#include "dmusici.h"
+#include "dmusicf.h"
+#include "dmusics.h"
+
+/*****************************************************************************
+ * Interfaces
+ */
+typedef struct IDirectMusicWaveImpl IDirectMusicWaveImpl;
+
+
+/*****************************************************************************
+ * Predeclare the interface implementation structures
+ */
+extern ICOM_VTABLE(IUnknown) DirectMusicWave_Unknown_Vtbl;
+extern ICOM_VTABLE(IDirectMusicObject) DirectMusicWave_Object_Vtbl;
+extern ICOM_VTABLE(IPersistStream) DirectMusicWave_PersistStream_Vtbl;
+
+
+/*****************************************************************************
+ * ClassFactory
+ */
+extern HRESULT WINAPI DMUSIC_CreateDirectMusicWaveImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
+
+
+/*****************************************************************************
+ * IDirectMusicWaveImpl implementation structure
+ */
+struct IDirectMusicWaveImpl {
+ /* IUnknown fields */
+ ICOM_VTABLE(IUnknown) *UnknownVtbl;
+ ICOM_VTABLE(IDirectMusicObject) *ObjectVtbl;
+ ICOM_VTABLE(IPersistStream) *PersistStreamVtbl;
+ DWORD ref;
+
+ /* IDirectMusicWaveImpl fields */
+ LPDMUS_OBJECTDESC pDesc;
+
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicWaveImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicWaveImpl_IUnknown_AddRef (LPUNKNOWN iface);
+extern ULONG WINAPI IDirectMusicWaveImpl_IUnknown_Release (LPUNKNOWN iface);
+/* IDirectMusicObject: */
+extern HRESULT WINAPI IDirectMusicWaveImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI IDirectMusicWaveImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface);
+extern ULONG WINAPI IDirectMusicWaveImpl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface);
+extern HRESULT WINAPI IDirectMusicWaveImpl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicWaveImpl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicWaveImpl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
+/* IPersistStream: */
+extern HRESULT WINAPI IDirectMusicWaveImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
+extern ULONG WINAPI IDirectMusicWaveImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface);
+extern ULONG WINAPI IDirectMusicWaveImpl_IPersistStream_Release (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicWaveImpl_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
+extern HRESULT WINAPI IDirectMusicWaveImpl_IPersistStream_IsDirty (LPPERSISTSTREAM iface);
+extern HRESULT WINAPI IDirectMusicWaveImpl_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
+extern HRESULT WINAPI IDirectMusicWaveImpl_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
+extern HRESULT WINAPI IDirectMusicWaveImpl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
+
+
+/*****************************************************************************
+ * Misc.
+ */
+/* for simpler reading */
+typedef struct _DMUS_PRIVATE_CHUNK {
+ FOURCC fccID; /* FOURCC ID of the chunk */
+ DWORD dwSize; /* size of the chunk */
+} DMUS_PRIVATE_CHUNK, *LPDMUS_PRIVATE_CHUNK;
+
+/* check whether the given DWORD is even (return 0) or odd (return 1) */
+static inline int even_or_odd (DWORD number) {
+ return (number & 0x1); /* basically, check if bit 0 is set ;) */
+}
+
+/* FOURCC to string conversion for debug messages */
+static inline const char *debugstr_fourcc (DWORD fourcc) {
+ if (!fourcc) return "'null'";
+ return wine_dbg_sprintf ("\'%c%c%c%c\'",
+ (char)(fourcc), (char)(fourcc >> 8),
+ (char)(fourcc >> 16), (char)(fourcc >> 24));
+}
+
+/* DMUS_VERSION struct to string conversion for debug messages */
+static inline const char *debugstr_dmversion (LPDMUS_VERSION version) {
+ if (!version) return "'null'";
+ return wine_dbg_sprintf ("\'%i,%i,%i,%i\'",
+ (int)((version->dwVersionMS && 0xFFFF0000) >> 8), (int)(version->dwVersionMS && 0x0000FFFF),
+ (int)((version->dwVersionLS && 0xFFFF0000) >> 8), (int)(version->dwVersionLS && 0x0000FFFF));
+}
+
+/* used for initialising structs (primarily for DMUS_OBJECTDESC) */
+#define DM_STRUCT_INIT(x) \
+ do { \
+ memset((x), 0, sizeof(*(x))); \
+ (x)->dwSize = sizeof(*x); \
+ } while (0)
+
+
+/* used for generic dumping (copied from ddraw) */
+typedef struct {
+ DWORD val;
+ const char* name;
+} flag_info;
+
+#define FE(x) { x, #x }
+#define DMUSIC_dump_flags(flags,names,num_names) DMUSIC_dump_flags_(flags, names, num_names, 1)
+
+/* generic dump function */
+static inline void DMUSIC_dump_flags_ (DWORD flags, const flag_info* names, size_t num_names, int newline) {
+ unsigned int i;
+
+ for (i=0; i < num_names; i++) {
+ if ((flags & names[i].val) || /* standard flag value */
+ ((!flags) && (!names[i].val))) /* zero value only */
+ DPRINTF("%s ", names[i].name);
+ }
+
+ if (newline) DPRINTF("\n");
+}
+
+static inline void DMUSIC_dump_DMUS_OBJ_FLAGS (DWORD flagmask) {
+ static const flag_info flags[] = {
+ FE(DMUS_OBJ_OBJECT),
+ FE(DMUS_OBJ_CLASS),
+ FE(DMUS_OBJ_NAME),
+ FE(DMUS_OBJ_CATEGORY),
+ FE(DMUS_OBJ_FILENAME),
+ FE(DMUS_OBJ_FULLPATH),
+ FE(DMUS_OBJ_URL),
+ FE(DMUS_OBJ_VERSION),
+ FE(DMUS_OBJ_DATE),
+ FE(DMUS_OBJ_LOADED),
+ FE(DMUS_OBJ_MEMORY),
+ FE(DMUS_OBJ_STREAM)
+ };
+ DMUSIC_dump_flags(flagmask, flags, sizeof(flags)/sizeof(flags[0]));
+}
+
+static inline void DMUSIC_dump_DMUS_OBJECTDESC (LPDMUS_OBJECTDESC pDesc) {
+ if (pDesc) {
+ DPRINTF("DMUS_OBJECTDESC (%p)\n", pDesc);
+ DPRINTF(" - dwSize = %ld\n", pDesc->dwSize);
+ DPRINTF(" - dwValidData = ");
+ DMUSIC_dump_DMUS_OBJ_FLAGS (pDesc->dwValidData);
+ if (pDesc->dwValidData & DMUS_OBJ_CLASS) DPRINTF(" - guidClass = %s\n", debugstr_guid(&pDesc->guidClass));
+ if (pDesc->dwValidData & DMUS_OBJ_OBJECT) DPRINTF(" - guidObject = %s\n", debugstr_guid(&pDesc->guidObject));
+ if (pDesc->dwValidData & DMUS_OBJ_DATE) DPRINTF(" - ftDate = FIXME\n");
+ if (pDesc->dwValidData & DMUS_OBJ_VERSION) DPRINTF(" - vVersion = %s\n", debugstr_dmversion(&pDesc->vVersion));
+ if (pDesc->dwValidData & DMUS_OBJ_NAME) DPRINTF(" - wszName = %s\n", debugstr_w(pDesc->wszName));
+ if (pDesc->dwValidData & DMUS_OBJ_CATEGORY) DPRINTF(" - wszCategory = %s\n", debugstr_w(pDesc->wszCategory));
+ if (pDesc->dwValidData & DMUS_OBJ_FILENAME) DPRINTF(" - wszFileName = %s\n", debugstr_w(pDesc->wszFileName));
+ if (pDesc->dwValidData & DMUS_OBJ_MEMORY) DPRINTF(" - llMemLength = %lli\n - pbMemData = %p\n", pDesc->llMemLength, pDesc->pbMemData);
+ if (pDesc->dwValidData & DMUS_OBJ_STREAM) DPRINTF(" - pStream = %p\n", pDesc->pStream);
+ } else {
+ DPRINTF("(NULL)\n");
+ }
+}
+
+#endif /* __WINE_DSWAVE_PRIVATE_H */
diff --git a/dlls/dswave/regsvr.c b/dlls/dswave/regsvr.c
new file mode 100644
index 0000000..12d1ca7
--- /dev/null
+++ b/dlls/dswave/regsvr.c
@@ -0,0 +1,525 @@
+/*
+ * self-registerable dll functions for dmusic.dll
+ *
+ * Copyright (C) 2003 John K. Hohm
+ *
+ * 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
+ */
+
+#include "dswave_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(dswave);
+
+/*
+ * Near the bottom of this file are the exported DllRegisterServer and
+ * DllUnregisterServer, which make all this worthwhile.
+ */
+
+/***********************************************************************
+ * interface for self-registering
+ */
+struct regsvr_interface {
+ IID const *iid; /* NULL for end of list */
+ LPCSTR name; /* can be NULL to omit */
+ IID const *base_iid; /* can be NULL to omit */
+ int num_methods; /* can be <0 to omit */
+ CLSID const *ps_clsid; /* can be NULL to omit */
+ CLSID const *ps_clsid32; /* can be NULL to omit */
+};
+
+static HRESULT register_interfaces(struct regsvr_interface const *list);
+static HRESULT unregister_interfaces(struct regsvr_interface const *list);
+
+struct regsvr_coclass {
+ CLSID const *clsid; /* NULL for end of list */
+ LPCSTR name; /* can be NULL to omit */
+ LPCSTR ips; /* can be NULL to omit */
+ LPCSTR ips32; /* can be NULL to omit */
+ LPCSTR ips32_tmodel; /* can be NULL to omit */
+ LPCSTR progid; /* can be NULL to omit */
+ LPCSTR viprogid; /* can be NULL to omit */
+ LPCSTR progid_extra; /* can be NULL to omit */
+};
+
+static HRESULT register_coclasses(struct regsvr_coclass const *list);
+static HRESULT unregister_coclasses(struct regsvr_coclass const *list);
+
+/***********************************************************************
+ * static string constants
+ */
+static WCHAR const interface_keyname[10] = {
+ 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', 'e', 0 };
+static WCHAR const base_ifa_keyname[14] = {
+ 'B', 'a', 's', 'e', 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c',
+ 'e', 0 };
+static WCHAR const num_methods_keyname[11] = {
+ 'N', 'u', 'm', 'M', 'e', 't', 'h', 'o', 'd', 's', 0 };
+static WCHAR const ps_clsid_keyname[15] = {
+ 'P', 'r', 'o', 'x', 'y', 'S', 't', 'u', 'b', 'C', 'l', 's',
+ 'i', 'd', 0 };
+static WCHAR const ps_clsid32_keyname[17] = {
+ 'P', 'r', 'o', 'x', 'y', 'S', 't', 'u', 'b', 'C', 'l', 's',
+ 'i', 'd', '3', '2', 0 };
+static WCHAR const clsid_keyname[6] = {
+ 'C', 'L', 'S', 'I', 'D', 0 };
+static WCHAR const curver_keyname[7] = {
+ 'C', 'u', 'r', 'V', 'e', 'r', 0 };
+static WCHAR const ips_keyname[13] = {
+ 'I', 'n', 'P', 'r', 'o', 'c', 'S', 'e', 'r', 'v', 'e', 'r',
+ 0 };
+static WCHAR const ips32_keyname[15] = {
+ 'I', 'n', 'P', 'r', 'o', 'c', 'S', 'e', 'r', 'v', 'e', 'r',
+ '3', '2', 0 };
+static WCHAR const progid_keyname[7] = {
+ 'P', 'r', 'o', 'g', 'I', 'D', 0 };
+static WCHAR const viprogid_keyname[25] = {
+ 'V', 'e', 'r', 's', 'i', 'o', 'n', 'I', 'n', 'd', 'e', 'p',
+ 'e', 'n', 'd', 'e', 'n', 't', 'P', 'r', 'o', 'g', 'I', 'D',
+ 0 };
+static char const tmodel_valuename[] = "ThreadingModel";
+
+/***********************************************************************
+ * static helper functions
+ */
+static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid);
+static LONG register_key_defvalueW(HKEY base, WCHAR const *name,
+ WCHAR const *value);
+static LONG register_key_defvalueA(HKEY base, WCHAR const *name,
+ char const *value);
+static LONG register_progid(WCHAR const *clsid,
+ char const *progid, char const *curver_progid,
+ char const *name, char const *extra);
+static LONG recursive_delete_key(HKEY key);
+static LONG recursive_delete_keyA(HKEY base, char const *name);
+static LONG recursive_delete_keyW(HKEY base, WCHAR const *name);
+
+/***********************************************************************
+ * register_interfaces
+ */
+static HRESULT register_interfaces(struct regsvr_interface const *list) {
+ LONG res = ERROR_SUCCESS;
+ HKEY interface_key;
+
+ res = RegCreateKeyExW(HKEY_CLASSES_ROOT, interface_keyname, 0, NULL, 0,
+ KEY_READ | KEY_WRITE, NULL, &interface_key, NULL);
+ if (res != ERROR_SUCCESS) goto error_return;
+
+ for (; res == ERROR_SUCCESS && list->iid; ++list) {
+ WCHAR buf[39];
+ HKEY iid_key;
+
+ StringFromGUID2(list->iid, buf, 39);
+ res = RegCreateKeyExW(interface_key, buf, 0, NULL, 0,
+ KEY_READ | KEY_WRITE, NULL, &iid_key, NULL);
+ if (res != ERROR_SUCCESS) goto error_close_interface_key;
+
+ if (list->name) {
+ res = RegSetValueExA(iid_key, NULL, 0, REG_SZ,
+ (CONST BYTE*)(list->name),
+ strlen(list->name) + 1);
+ if (res != ERROR_SUCCESS) goto error_close_iid_key;
+ }
+
+ if (list->base_iid) {
+ register_key_guid(iid_key, base_ifa_keyname, list->base_iid);
+ if (res != ERROR_SUCCESS) goto error_close_iid_key;
+ }
+
+ if (0 <= list->num_methods) {
+ static WCHAR const fmt[3] = { '%', 'd', 0 };
+ HKEY key;
+
+ res = RegCreateKeyExW(iid_key, num_methods_keyname, 0, NULL, 0,
+ KEY_READ | KEY_WRITE, NULL, &key, NULL);
+ if (res != ERROR_SUCCESS) goto error_close_iid_key;
+
+ wsprintfW(buf, fmt, list->num_methods);
+ res = RegSetValueExW(key, NULL, 0, REG_SZ,
+ (CONST BYTE*)buf,
+ (lstrlenW(buf) + 1) * sizeof(WCHAR));
+ RegCloseKey(key);
+
+ if (res != ERROR_SUCCESS) goto error_close_iid_key;
+ }
+
+ if (list->ps_clsid) {
+ register_key_guid(iid_key, ps_clsid_keyname, list->ps_clsid);
+ if (res != ERROR_SUCCESS) goto error_close_iid_key;
+ }
+
+ if (list->ps_clsid32) {
+ register_key_guid(iid_key, ps_clsid32_keyname, list->ps_clsid32);
+ if (res != ERROR_SUCCESS) goto error_close_iid_key;
+ }
+
+ error_close_iid_key:
+ RegCloseKey(iid_key);
+ }
+
+error_close_interface_key:
+ RegCloseKey(interface_key);
+error_return:
+ return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK;
+}
+
+/***********************************************************************
+ * unregister_interfaces
+ */
+static HRESULT unregister_interfaces(struct regsvr_interface const *list) {
+ LONG res = ERROR_SUCCESS;
+ HKEY interface_key;
+
+ res = RegOpenKeyExW(HKEY_CLASSES_ROOT, interface_keyname, 0,
+ KEY_READ | KEY_WRITE, &interface_key);
+ if (res == ERROR_FILE_NOT_FOUND) return S_OK;
+ if (res != ERROR_SUCCESS) goto error_return;
+
+ for (; res == ERROR_SUCCESS && list->iid; ++list) {
+ WCHAR buf[39];
+
+ StringFromGUID2(list->iid, buf, 39);
+ res = recursive_delete_keyW(interface_key, buf);
+ }
+
+ RegCloseKey(interface_key);
+error_return:
+ return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK;
+}
+
+/***********************************************************************
+ * register_coclasses
+ */
+static HRESULT register_coclasses(struct regsvr_coclass const *list) {
+ LONG res = ERROR_SUCCESS;
+ HKEY coclass_key;
+
+ res = RegCreateKeyExW(HKEY_CLASSES_ROOT, clsid_keyname, 0, NULL, 0,
+ KEY_READ | KEY_WRITE, NULL, &coclass_key, NULL);
+ if (res != ERROR_SUCCESS) goto error_return;
+
+ for (; res == ERROR_SUCCESS && list->clsid; ++list) {
+ WCHAR buf[39];
+ HKEY clsid_key;
+
+ StringFromGUID2(list->clsid, buf, 39);
+ res = RegCreateKeyExW(coclass_key, buf, 0, NULL, 0,
+ KEY_READ | KEY_WRITE, NULL, &clsid_key, NULL);
+ if (res != ERROR_SUCCESS) goto error_close_coclass_key;
+
+ if (list->name) {
+ res = RegSetValueExA(clsid_key, NULL, 0, REG_SZ,
+ (CONST BYTE*)(list->name),
+ strlen(list->name) + 1);
+ if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+ }
+
+ if (list->ips) {
+ res = register_key_defvalueA(clsid_key, ips_keyname, list->ips);
+ if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+ }
+
+ if (list->ips32) {
+ HKEY ips32_key;
+
+ res = RegCreateKeyExW(clsid_key, ips32_keyname, 0, NULL, 0,
+ KEY_READ | KEY_WRITE, NULL,
+ &ips32_key, NULL);
+ if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+
+ res = RegSetValueExA(ips32_key, NULL, 0, REG_SZ,
+ (CONST BYTE*)list->ips32,
+ lstrlenA(list->ips32) + 1);
+ if (res == ERROR_SUCCESS && list->ips32_tmodel)
+ res = RegSetValueExA(ips32_key, tmodel_valuename, 0, REG_SZ,
+ (CONST BYTE*)list->ips32_tmodel,
+ strlen(list->ips32_tmodel) + 1);
+ RegCloseKey(ips32_key);
+ if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+ }
+
+ if (list->progid) {
+ res = register_key_defvalueA(clsid_key, progid_keyname,
+ list->progid);
+ if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+
+ res = register_progid(buf, list->progid, NULL,
+ list->name, list->progid_extra);
+ if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+ }
+
+ if (list->viprogid) {
+ res = register_key_defvalueA(clsid_key, viprogid_keyname,
+ list->viprogid);
+ if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+
+ res = register_progid(buf, list->viprogid, list->progid,
+ list->name, list->progid_extra);
+ if (res != ERROR_SUCCESS) goto error_close_clsid_key;
+ }
+
+ error_close_clsid_key:
+ RegCloseKey(clsid_key);
+ }
+
+error_close_coclass_key:
+ RegCloseKey(coclass_key);
+error_return:
+ return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK;
+}
+
+/***********************************************************************
+ * unregister_coclasses
+ */
+static HRESULT unregister_coclasses(struct regsvr_coclass const *list) {
+ LONG res = ERROR_SUCCESS;
+ HKEY coclass_key;
+
+ res = RegOpenKeyExW(HKEY_CLASSES_ROOT, clsid_keyname, 0,
+ KEY_READ | KEY_WRITE, &coclass_key);
+ if (res == ERROR_FILE_NOT_FOUND) return S_OK;
+ if (res != ERROR_SUCCESS) goto error_return;
+
+ for (; res == ERROR_SUCCESS && list->clsid; ++list) {
+ WCHAR buf[39];
+
+ StringFromGUID2(list->clsid, buf, 39);
+ res = recursive_delete_keyW(coclass_key, buf);
+ if (res != ERROR_SUCCESS) goto error_close_coclass_key;
+
+ if (list->progid) {
+ res = recursive_delete_keyA(HKEY_CLASSES_ROOT, list->progid);
+ if (res != ERROR_SUCCESS) goto error_close_coclass_key;
+ }
+
+ if (list->viprogid) {
+ res = recursive_delete_keyA(HKEY_CLASSES_ROOT, list->viprogid);
+ if (res != ERROR_SUCCESS) goto error_close_coclass_key;
+ }
+ }
+
+error_close_coclass_key:
+ RegCloseKey(coclass_key);
+error_return:
+ return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK;
+}
+
+/***********************************************************************
+ * regsvr_key_guid
+ */
+static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid) {
+ WCHAR buf[39];
+
+ StringFromGUID2(guid, buf, 39);
+ return register_key_defvalueW(base, name, buf);
+}
+
+/***********************************************************************
+ * regsvr_key_defvalueW
+ */
+static LONG register_key_defvalueW(
+ HKEY base,
+ WCHAR const *name,
+ WCHAR const *value) {
+ LONG res;
+ HKEY key;
+
+ res = RegCreateKeyExW(base, name, 0, NULL, 0,
+ KEY_READ | KEY_WRITE, NULL, &key, NULL);
+ if (res != ERROR_SUCCESS) return res;
+ res = RegSetValueExW(key, NULL, 0, REG_SZ, (CONST BYTE*)value,
+ (lstrlenW(value) + 1) * sizeof(WCHAR));
+ RegCloseKey(key);
+ return res;
+}
+
+/***********************************************************************
+ * regsvr_key_defvalueA
+ */
+static LONG register_key_defvalueA(
+ HKEY base,
+ WCHAR const *name,
+ char const *value) {
+ LONG res;
+ HKEY key;
+
+ res = RegCreateKeyExW(base, name, 0, NULL, 0,
+ KEY_READ | KEY_WRITE, NULL, &key, NULL);
+ if (res != ERROR_SUCCESS) return res;
+ res = RegSetValueExA(key, NULL, 0, REG_SZ, (CONST BYTE*)value,
+ lstrlenA(value) + 1);
+ RegCloseKey(key);
+ return res;
+}
+
+/***********************************************************************
+ * regsvr_progid
+ */
+static LONG register_progid(
+ WCHAR const *clsid,
+ char const *progid,
+ char const *curver_progid,
+ char const *name,
+ char const *extra) {
+ LONG res;
+ HKEY progid_key;
+
+ res = RegCreateKeyExA(HKEY_CLASSES_ROOT, progid, 0,
+ NULL, 0, KEY_READ | KEY_WRITE, NULL,
+ &progid_key, NULL);
+ if (res != ERROR_SUCCESS) return res;
+
+ if (name) {
+ res = RegSetValueExA(progid_key, NULL, 0, REG_SZ,
+ (CONST BYTE*)name, strlen(name) + 1);
+ if (res != ERROR_SUCCESS) goto error_close_progid_key;
+ }
+
+ if (clsid) {
+ res = register_key_defvalueW(progid_key, clsid_keyname, clsid);
+ if (res != ERROR_SUCCESS) goto error_close_progid_key;
+ }
+
+ if (curver_progid) {
+ res = register_key_defvalueA(progid_key, curver_keyname,
+ curver_progid);
+ if (res != ERROR_SUCCESS) goto error_close_progid_key;
+ }
+
+ if (extra) {
+ HKEY extra_key;
+
+ res = RegCreateKeyExA(progid_key, extra, 0,
+ NULL, 0, KEY_READ | KEY_WRITE, NULL,
+ &extra_key, NULL);
+ if (res == ERROR_SUCCESS)
+ RegCloseKey(extra_key);
+ }
+
+error_close_progid_key:
+ RegCloseKey(progid_key);
+ return res;
+}
+
+/***********************************************************************
+ * recursive_delete_key
+ */
+static LONG recursive_delete_key(HKEY key) {
+ LONG res;
+ WCHAR subkey_name[MAX_PATH];
+ DWORD cName;
+ HKEY subkey;
+
+ for (;;) {
+ cName = sizeof(subkey_name) / sizeof(WCHAR);
+ res = RegEnumKeyExW(key, 0, subkey_name, &cName,
+ NULL, NULL, NULL, NULL);
+ if (res != ERROR_SUCCESS && res != ERROR_MORE_DATA) {
+ res = ERROR_SUCCESS; /* presumably we're done enumerating */
+ break;
+ }
+ res = RegOpenKeyExW(key, subkey_name, 0,
+ KEY_READ | KEY_WRITE, &subkey);
+ if (res == ERROR_FILE_NOT_FOUND) continue;
+ if (res != ERROR_SUCCESS) break;
+
+ res = recursive_delete_key(subkey);
+ RegCloseKey(subkey);
+ if (res != ERROR_SUCCESS) break;
+ }
+
+ if (res == ERROR_SUCCESS) res = RegDeleteKeyW(key, 0);
+ return res;
+}
+
+/***********************************************************************
+ * recursive_delete_keyA
+ */
+static LONG recursive_delete_keyA(HKEY base, char const *name) {
+ LONG res;
+ HKEY key;
+
+ res = RegOpenKeyExA(base, name, 0, KEY_READ | KEY_WRITE, &key);
+ if (res == ERROR_FILE_NOT_FOUND) return ERROR_SUCCESS;
+ if (res != ERROR_SUCCESS) return res;
+ res = recursive_delete_key(key);
+ RegCloseKey(key);
+ return res;
+}
+
+/***********************************************************************
+ * recursive_delete_keyW
+ */
+static LONG recursive_delete_keyW(HKEY base, WCHAR const *name) {
+ LONG res;
+ HKEY key;
+
+ res = RegOpenKeyExW(base, name, 0, KEY_READ | KEY_WRITE, &key);
+ if (res == ERROR_FILE_NOT_FOUND) return ERROR_SUCCESS;
+ if (res != ERROR_SUCCESS) return res;
+ res = recursive_delete_key(key);
+ RegCloseKey(key);
+ return res;
+}
+
+/***********************************************************************
+ * coclass list
+ */
+static struct regsvr_coclass const coclass_list[] = {
+ { &CLSID_DirectSoundWave,
+ "Microsoft DirectSound Wave",
+ NULL,
+ "dswave.dll",
+ "Both",
+ "Microsoft.DirectSoundWave.1",
+ "Microsoft.DirectSoundWave"
+ },
+ { NULL } /* list terminator */
+};
+
+/***********************************************************************
+ * interface list
+ */
+
+static struct regsvr_interface const interface_list[] = {
+ { NULL } /* list terminator */
+};
+
+/***********************************************************************
+ * DllRegisterServer (DSWAVE.3)
+ */
+HRESULT WINAPI DSWAVE_DllRegisterServer(void) {
+ HRESULT hr;
+
+ TRACE("\n");
+
+ hr = register_coclasses(coclass_list);
+ if (SUCCEEDED(hr))
+ hr = register_interfaces(interface_list);
+ return hr;
+}
+
+/***********************************************************************
+ * DllUnregisterServer (DSWAVE.4)
+ */
+HRESULT WINAPI DSWAVE_DllUnregisterServer(void) {
+ HRESULT hr;
+
+ TRACE("\n");
+
+ hr = unregister_coclasses(coclass_list);
+ if (SUCCEEDED(hr))
+ hr = unregister_interfaces(interface_list);
+ return hr;
+}
diff --git a/dlls/dswave/version.rc b/dlls/dswave/version.rc
new file mode 100644
index 0000000..fe5fc24
--- /dev/null
+++ b/dlls/dswave/version.rc
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2003-2004 Rok Mandeljc <rok.mandeljc@gimb.org>
+ *
+ * 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
+ */
+
+#define WINE_OLESELFREGISTER
+#define WINE_FILEDESCRIPTION_STR "Wine DirectMusic Wave"
+#define WINE_FILENAME_STR "dswave.dll"
+#define WINE_FILEVERSION 4,9,0,900
+#define WINE_FILEVERSION_STR "4.9.0.900"
+#define WINE_PRODUCTVERSION 4,9,0,900
+#define WINE_PRODUCTVERSION_STR "4.9"
+#define WINE_PRODUCTNAME_STR "DirectX"
+
+#include "wine/wine_common_ver.rc"
diff --git a/include/Makefile.in b/include/Makefile.in
index b44a3f5..ad5201e 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -63,6 +63,7 @@
dispdib.h \
dlgs.h \
dls1.h \
+ dls2.h \
dmdls.h \
dmerror.h \
dmo.h \
diff --git a/include/dls1.h b/include/dls1.h
index 89c3b26..0fc1d7a 100644
--- a/include/dls1.h
+++ b/include/dls1.h
@@ -1,6 +1,6 @@
-/* Defines and Structures for Instrument Collection Form RIFF DLS
+/* Defines and Structures for Instrument Collection Form RIFF DLS1
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,12 +16,12 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-
+
#ifndef __WINE_INCLUDE_DLS1_H
#define __WINE_INCLUDE_DLS1_H
/*****************************************************************************
- * FOURCC's
+ * FOURCCs
*/
#define FOURCC_DLS mmioFOURCC('D','L','S',' ')
#define FOURCC_DLID mmioFOURCC('d','l','i','d')
@@ -43,149 +43,160 @@
#define FOURCC_VERS mmioFOURCC('v','e','r','s')
/*****************************************************************************
- * Definitions
+ * Flags
*/
-#define CONN_SRC_NONE 0x0000
-#define CONN_SRC_LFO 0x0001
-#define CONN_SRC_KEYONVELOCITY 0x0002
-#define CONN_SRC_KEYNUMBER 0x0003
-#define CONN_SRC_EG1 0x0004
-#define CONN_SRC_EG2 0x0005
-#define CONN_SRC_PITCHWHEEL 0x0006
-#define CONN_SRC_CC1 0x0081
-#define CONN_SRC_CC7 0x0087
-#define CONN_SRC_CC10 0x008a
-#define CONN_SRC_CC11 0x008b
-#define CONN_DST_NONE 0x0000
-#define CONN_DST_ATTENUATION 0x0001
-#define CONN_DST_PITCH 0x0003
-#define CONN_DST_PAN 0x0004
-#define CONN_DST_LFO_FREQUENCY 0x0104
-#define CONN_DST_LFO_STARTDELAY 0x0105
-#define CONN_DST_EG1_ATTACKTIME 0x0206
-#define CONN_DST_EG1_DECAYTIME 0x0207
-#define CONN_DST_EG1_RELEASETIME 0x0209
-#define CONN_DST_EG1_SUSTAINLEVEL 0x020a
-#define CONN_DST_EG2_ATTACKTIME 0x030a
-#define CONN_DST_EG2_DECAYTIME 0x030b
-#define CONN_DST_EG2_RELEASETIME 0x030d
-#define CONN_DST_EG2_SUSTAINLEVEL 0x030e
+#define CONN_DST_NONE 0x000
+#define CONN_DST_ATTENUATION 0x001
+#define CONN_DST_PITCH 0x003
+#define CONN_DST_PAN 0x004
-#define CONN_TRN_NONE 0x0000
-#define CONN_TRN_CONCAVE 0x0001
+#define CONN_DST_LFO_FREQUENCY 0x104
+#define CONN_DST_LFO_STARTDELAY 0x105
-#define F_INSTRUMENT_DRUMS 0x80000000
-#define F_RGN_OPTION_SELFNONEXCLUSIVE 0x0001
+#define CONN_DST_EG1_ATTACKTIME 0x206
+#define CONN_DST_EG1_DECAYTIME 0x207
+#define CONN_DST_EG1_RELEASETIME 0x209
+#define CONN_DST_EG1_SUSTAINLEVEL 0x20A
-#define WAVELINK_CHANNEL_LEFT 0x0001l
-#define WAVELINK_CHANNEL_RIGHT 0x0002l
+#define CONN_DST_EG2_ATTACKTIME 0x30A
+#define CONN_DST_EG2_DECAYTIME 0x30B
+#define CONN_DST_EG2_RELEASETIME 0x30D
+#define CONN_DST_EG2_SUSTAINLEVEL 0x30E
-#define F_WAVELINK_PHASE_MASTER 0x0001
-#define POOL_CUE_NULL 0xffffffffl
+#define CONN_SRC_NONE 0x000
+#define CONN_SRC_LFO 0x001
+#define CONN_SRC_KEYONVELOCITY 0x002
+#define CONN_SRC_KEYNUMBER 0x003
+#define CONN_SRC_EG1 0x004
+#define CONN_SRC_EG2 0x005
+#define CONN_SRC_PITCHWHEEL 0x006
-#define F_WSMP_NO_TRUNCATION 0x0001l
-#define F_WSMP_NO_COMPRESSION 0x0002l
-
-#define WLOOP_TYPE_FORWARD 0
+#define CONN_SRC_CC1 0x081
+#define CONN_SRC_CC7 0x087
+#define CONN_SRC_CC10 0x08A
+#define CONN_SRC_CC11 0x08B
+
+#define CONN_TRN_NONE 0x000
+#define CONN_TRN_CONCAVE 0x001
+
+#define F_INSTRUMENT_DRUMS 0x80000000
+
+#define F_RGN_OPTION_SELFNONEXCLUSIVE 0x1
+
+#define F_WAVELINK_PHASE_MASTER 0x1
+
+#define F_WSMP_NO_TRUNCATION 0x1
+#define F_WSMP_NO_COMPRESSION 0x2
+
+#define POOL_CUE_NULL 0xFFFFFFFF
+
+#define WAVELINK_CHANNEL_LEFT 0x1
+#define WAVELINK_CHANNEL_RIGHT 0x2
+
+#define WLOOP_TYPE_FORWARD 0x0
/*****************************************************************************
* Structures
*/
-typedef struct _DLSID
-{
- ULONG ulData1;
- USHORT usData2;
- USHORT usData3;
- BYTE abData4[8];
-} DLSID, *LPDLSID;
+/* typedef definitions */
+typedef struct _DLSID DLSID, *LPDLSID;
+typedef struct _DLSVERSION DLSVERSION, *LPDLSVERSION;
+typedef struct _CONNECTION CONNECTION, *LPCONNECTION;
+typedef struct _CONNECTIONLIST CONNECTIONLIST, *LPCONNECTIONLIST;
+typedef struct _RGNRANGE RGNRANGE, *LPRGNRANGE;
+typedef struct _MIDILOCALE MIDILOCALE, *LPMIDILOCALE;
+typedef struct _RGNHEADER RGNHEADER, *LPRGNHEADER;
+typedef struct _INSTHEADER INSTHEADER, *LPINSTHEADER;
+typedef struct _DLSHEADER DLSHEADER, *LPDLSHEADER;
+typedef struct _WAVELINK WAVELINK, *LPWAVELINK;
+typedef struct _POOLCUE POOLCUE, *LPPOOLCUE;
+typedef struct _POOLTABLE POOLTABLE, *LPPOOLTABLE;
+typedef struct _rwsmp WSMPL, *LPWSMPL;
+typedef struct _rloop WLOOP, *LPWLOOP;
-typedef struct _DLSVERSION
-{ DWORD dwVersionMS;
- DWORD dwVersionLS;
-} DLSVERSION, *LPDLSVERSION;
-
-typedef struct _CONNECTION
-{
- USHORT usSource;
- USHORT usControl;
- USHORT usDestination;
- USHORT usTransform;
- LONG lScale;
-} CONNECTION, *LPCONNECTION;
+/* actual structures */
+struct _DLSID {
+ ULONG ulData1;
+ USHORT usData2;
+ USHORT usData3;
+ BYTE abData4[8];
+};
-typedef struct _CONNECTIONLIST
-{
- ULONG cbSize;
- ULONG cConnections;
-} CONNECTIONLIST, *LPCONNECTIONLIST;
+struct _DLSVERSION {
+ DWORD dwVersionMS;
+ DWORD dwVersionLS;
+};
-typedef struct _RGNRANGE
-{
- USHORT usLow;
- USHORT usHigh;
-} RGNRANGE, *LPRGNRANGE;
+struct _CONNECTION {
+ USHORT usSource;
+ USHORT usControl;
+ USHORT usDestination;
+ USHORT usTransform;
+ LONG lScale;
+};
-typedef struct _MIDILOCALE
-{
- ULONG ulBank;
- ULONG ulInstrument;
-} MIDILOCALE, *LPMIDILOCALE;
+struct _CONNECTIONLIST {
+ ULONG cbSize;
+ ULONG cConnections;
+};
-typedef struct _RGNHEADER
-{
- RGNRANGE RangeKey;
- RGNRANGE RangeVelocity;
- USHORT fusOptions;
- USHORT usKeyGroup;
-} RGNHEADER, *LPRGNHEADER;
+struct _RGNRANGE {
+ USHORT usLow;
+ USHORT usHigh;
+};
-typedef struct _INSTHEADER
-{
- ULONG cRegions;
- MIDILOCALE Locale;
-} INSTHEADER, *LPINSTHEADER;
+struct _MIDILOCALE {
+ ULONG ulBank;
+ ULONG ulInstrument;
+};
-typedef struct _DLSHEADER
-{
- ULONG cInstruments;
-} DLSHEADER, *LPDLSHEADER;
+struct _RGNHEADER {
+ RGNRANGE RangeKey;
+ RGNRANGE RangeVelocity;
+ USHORT fusOptions;
+ USHORT usKeyGroup;
+};
-typedef struct _WAVELINK
-{
- USHORT fusOptions;
- USHORT usPhaseGroup;
- ULONG ulChannel;
- ULONG ulTableIndex;
-} WAVELINK, *LPWAVELINK;
+struct _INSTHEADER {
+ ULONG cRegions;
+ MIDILOCALE Locale;
+};
-typedef struct _POOLCUE
-{
- ULONG ulOffset;
-} POOLCUE, *LPPOOLCUE;
+struct _DLSHEADER {
+ ULONG cInstruments;
+};
-typedef struct _POOLTABLE
-{
- ULONG cbSize;
- ULONG cCues;
-} POOLTABLE, *LPPOOLTABLE;
+struct _WAVELINK {
+ USHORT fusOptions;
+ USHORT usPhaseGroup;
+ ULONG ulChannel;
+ ULONG ulTableIndex;
+};
-typedef struct _rwsmp
-{
- ULONG cbSize;
- USHORT usUnityNote;
- SHORT sFineTune;
- LONG lAttenuation;
- ULONG fulOptions;
- ULONG cSampleLoops;
-} WSMPL, *LPWSMPL;
+struct _POOLCUE {
+ ULONG ulOffset;
+};
-typedef struct _rloop
-{
- ULONG cbSize;
- ULONG ulType;
- ULONG ulStart;
- ULONG ulLength;
-} WLOOP, *LPWLOOP;
+struct _POOLTABLE {
+ ULONG cbSize;
+ ULONG cCues;
+};
+
+struct _rwsmp {
+ ULONG cbSize;
+ USHORT usUnityNote;
+ SHORT sFineTune;
+ LONG lAttenuation;
+ ULONG fulOptions;
+ ULONG cSampleLoops;
+};
+
+struct _rloop {
+ ULONG cbSize;
+ ULONG ulType;
+ ULONG ulStart;
+ ULONG ulLength;
+};
#endif /* __WINE_INCLUDE_DLS1_H */
diff --git a/include/dls2.h b/include/dls2.h
new file mode 100644
index 0000000..db3dc8d
--- /dev/null
+++ b/include/dls2.h
@@ -0,0 +1,107 @@
+/* Defines and Structures for Instrument Collection Form RIFF DLS2
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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 Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __WINE_INCLUDE_DLS2_H
+#define __WINE_INCLUDE_DLS2_H
+
+/*****************************************************************************
+ * DLSIDs - property set
+ */
+DEFINE_GUID(DLSID_GMInHardware, 0x178f2f24,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(DLSID_GSInHardware, 0x178f2f25,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(DLSID_ManufacturersID, 0xb03e1181,0x8095,0x11d2,0xa1,0xef,0x00,0x60,0x08,0x33,0xdb,0xd8);
+DEFINE_GUID(DLSID_ProductID, 0xb03e1182,0x8095,0x11d2,0xa1,0xef,0x00,0x60,0x08,0x33,0xdb,0xd8);
+DEFINE_GUID(DLSID_SampleMemorySize, 0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(DLSID_SupportsDLS1, 0x178f2f27,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(DLSID_SupportsDLS2, 0xf14599e5,0x4689,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(DLSID_SamplePlaybackRate, 0x2a91f713,0xa4bf,0x11d2,0xbb,0xdf,0x00,0x60,0x08,0x33,0xdb,0xd8);
+DEFINE_GUID(DLSID_XGInHardware, 0x178f2f26,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+
+/*****************************************************************************
+ * FOURCCs
+ */
+#define FOURCC_RGN2 mmioFOURCC('r','g','n','2')
+#define FOURCC_LAR2 mmioFOURCC('l','a','r','2')
+#define FOURCC_ART2 mmioFOURCC('a','r','t','2')
+#define FOURCC_CDL mmioFOURCC('c','d','l',' ')
+#define FOURCC_DLID mmioFOURCC('d','l','i','d')
+
+/*****************************************************************************
+ * Flags
+ */
+#define CONN_DST_GAIN 0x001
+#define CONN_DST_KEYNUMBER 0x005
+
+#define CONN_DST_LEFT 0x010
+#define CONN_DST_RIGHT 0x011
+#define CONN_DST_CENTER 0x012
+#define CONN_DST_LEFTREAR 0x013
+#define CONN_DST_RIGHTREAR 0x014
+#define CONN_DST_LFE_CHANNEL 0x015
+#define CONN_DST_CHORUS 0x080
+#define CONN_DST_REVERB 0x081
+
+#define CONN_DST_VIB_FREQUENCY 0x114
+#define CONN_DST_VIB_STARTDELAY 0x115
+
+#define CONN_DST_EG1_DELAYTIME 0x20B
+#define CONN_DST_EG1_HOLDTIME 0x20C
+#define CONN_DST_EG1_SHUTDOWNTIME 0x20D
+
+#define CONN_DST_EG2_DELAYTIME 0x30F
+#define CONN_DST_EG2_HOLDTIME 0x310
+
+#define CONN_DST_FILTER_CUTOFF 0x500
+#define CONN_DST_FILTER_Q 0x501
+
+#define CONN_SRC_POLYPRESSURE 0x007
+#define CONN_SRC_CHANNELPRESSURE 0x008
+#define CONN_SRC_VIBRATO 0x009
+#define CONN_SRC_MONOPRESSURE 0x00A
+
+#define CONN_SRC_CC91 0x0DB
+#define CONN_SRC_CC93 0x0DD
+
+#define CONN_TRN_CONVEX 0x002
+#define CONN_TRN_SWITCH 0x003
+
+#define DLS_CDL_AND 0x01
+#define DLS_CDL_OR 0x02
+#define DLS_CDL_XOR 0x03
+#define DLS_CDL_ADD 0x04
+#define DLS_CDL_SUBTRACT 0x05
+#define DLS_CDL_MULTIPLY 0x06
+#define DLS_CDL_DIVIDE 0x07
+#define DLS_CDL_LOGICAL_AND 0x08
+#define DLS_CDL_LOGICAL_OR 0x09
+#define DLS_CDL_LT 0x0A
+#define DLS_CDL_LE 0x0B
+#define DLS_CDL_GT 0x0C
+#define DLS_CDL_GE 0x0D
+#define DLS_CDL_EQ 0x0E
+#define DLS_CDL_NOT 0x0F
+#define DLS_CDL_CONST 0x10
+#define DLS_CDL_QUERY 0x11
+#define DLS_CDL_QUERYSUPPORTED 0x12
+
+#define F_WAVELINK_MULTICHANNEL 0x2
+
+#define WLOOP_TYPE_RELEASE 0x1
+
+#endif /* __WINE_INCLUDE_DLS2_H */
diff --git a/include/dmdls.h b/include/dmdls.h
index dfe73c5..6826d58 100644
--- a/include/dmdls.h
+++ b/include/dmdls.h
@@ -1,6 +1,6 @@
/* DirectMusic DLS Download Definitions
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,182 +16,194 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-
+
#ifndef __WINE_DMUSIC_DLS_H
#define __WINE_DMUSIC_DLS_H
#include <dls1.h>
-typedef long PCENT, GCENT, TCENT, PERCENT;
+/*****************************************************************************
+ * Typedef definitions
+ */
+typedef long GCENT;
+typedef long PCENT;
+typedef long PERCENT;
+typedef long TCENT;
+
typedef LONGLONG REFERENCE_TIME, *LPREFERENCE_TIME;
-/*
-#ifndef MAKE_FOURCC
-#define MAKEFOURCC(ch0, ch1, ch2, ch3) \
- ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
- ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
-typedef DWORD FOURCC;
-#endif*/
/*****************************************************************************
- * Definitions
+ * FOURCC definition
*/
-#define DMUS_DOWNLOADINFO_INSTRUMENT 1
-#define DMUS_DOWNLOADINFO_WAVE 2
-#define DMUS_DOWNLOADINFO_INSTRUMENT2 3
-#define DMUS_DOWNLOADINFO_WAVEARTICULATION 4
-#define DMUS_DOWNLOADINFO_STREAMINGWAVE 5
-#define DMUS_DOWNLOADINFO_ONESHOTWAVE 6
+#ifndef mmioFOURCC
+typedef DWORD FOURCC;
+#define mmioFOURCC(ch0,ch1,ch2,ch3) \
+ ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
+ ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
+#endif
-#define DMUS_DEFAULT_SIZE_OFFSETTABLE 1
-
-#define DMUS_INSTRUMENT_GM_INSTRUMENT (1 << 0)
+/*****************************************************************************
+ * Flags
+ */
+#define DMUS_DEFAULT_SIZE_OFFSETTABLE 0x1
-#define DMUS_MIN_DATA_SIZE 4
+#define DMUS_DOWNLOADINFO_INSTRUMENT 0x1
+#define DMUS_DOWNLOADINFO_WAVE 0x2
+#define DMUS_DOWNLOADINFO_INSTRUMENT2 0x3
+#define DMUS_DOWNLOADINFO_WAVEARTICULATION 0x4
+#define DMUS_DOWNLOADINFO_STREAMINGWAVE 0x5
+#define DMUS_DOWNLOADINFO_ONESHOTWAVE 0x6
+
+#define DMUS_INSTRUMENT_GM_INSTRUMENT 0x1
+
+#define DMUS_MIN_DATA_SIZE 0x4
/*****************************************************************************
* Structures
*/
-typedef struct _DMUS_DOWNLOADINFO
-{
- DWORD dwDLType;
- DWORD dwDLId;
- DWORD dwNumOffsetTableEntries;
- DWORD cbSize;
-} DMUS_DOWNLOADINFO;
+/* typedef definitions */
+typedef struct _DMUS_DOWNLOADINFO DMUS_DOWNLOADINFO, *LPDMUS_DOWNLOADINFO;
+typedef struct _DMUS_OFFSETTABLE DMUS_OFFSETTABLE, *LPDMUS_OFFSETTABLE;
+typedef struct _DMUS_INSTRUMENT DMUS_INSTRUMENT, *LPDMUS_INSTRUMENT;
+typedef struct _DMUS_REGION DMUS_REGION, *LPDMUS_REGION;
+typedef struct _DMUS_LFOPARAMS DMUS_LFOPARAMS, *LPDMUS_LFOPARAMS;
+typedef struct _DMUS_VEGPARAMS DMUS_VEGPARAMS, *LPDMUS_VEGPARAMS;
+typedef struct _DMUS_PEGPARAMS DMUS_PEGPARAMS, *LPDMUS_PEGPARAMS;
+typedef struct _DMUS_MSCPARAMS DMUS_MSCPARAMS, *LPDMUS_MSCPARAMS;
+typedef struct _DMUS_ARTICPARAMS DMUS_ARTICPARAMS, *LPDMUS_ARTICPARAMS;
+typedef struct _DMUS_ARTICULATION DMUS_ARTICULATION, *LPDMUS_ARTICULATION;
+typedef struct _DMUS_ARTICULATION2 DMUS_ARTICULATION2, *LPDMUS_ARTICULATION2;
+typedef struct _DMUS_EXTENSIONCHUNK DMUS_EXTENSIONCHUNK, *LPDMUS_EXTENSIONCHUNK;
+typedef struct _DMUS_COPYRIGHT DMUS_COPYRIGHT, *LPDMUS_COPYRIGHT;
+typedef struct _DMUS_WAVEDATA DMUS_WAVEDATA, *LPDMUS_WAVEDATA;
+typedef struct _DMUS_WAVE DMUS_WAVE, *LPDMUS_WAVE;
+typedef struct _DMUS_NOTERANGE DMUS_NOTERANGE, *LPDMUS_NOTERANGE;
+typedef struct _DMUS_WAVEARTDL DMUS_WAVEARTDL, *LPDMUS_WAVEARTDL;
+typedef struct _DMUS_WAVEDL DMUS_WAVEDL, *LPDMUS_WAVEDL;
-typedef struct _DMUS_OFFSETTABLE
-{
- ULONG ulOffsetTable[DMUS_DEFAULT_SIZE_OFFSETTABLE];
-} DMUS_OFFSETTABLE;
+/* actual structures */
+struct _DMUS_DOWNLOADINFO {
+ DWORD dwDLType;
+ DWORD dwDLId;
+ DWORD dwNumOffsetTableEntries;
+ DWORD cbSize;
+};
-typedef struct _DMUS_INSTRUMENT
-{
- ULONG ulPatch;
- ULONG ulFirstRegionIdx;
- ULONG ulGlobalArtIdx;
- ULONG ulFirstExtCkIdx;
- ULONG ulCopyrightIdx;
- ULONG ulFlags;
-} DMUS_INSTRUMENT;
+struct _DMUS_OFFSETTABLE {
+ ULONG ulOffsetTable[DMUS_DEFAULT_SIZE_OFFSETTABLE];
+};
-typedef struct _DMUS_REGION
-{
- RGNRANGE RangeKey;
- RGNRANGE RangeVelocity;
- USHORT fusOptions;
- USHORT usKeyGroup;
- ULONG ulRegionArtIdx;
- ULONG ulNextRegionIdx;
- ULONG ulFirstExtCkIdx;
- WAVELINK WaveLink;
- WSMPL WSMP;
- WLOOP WLOOP[1];
-} DMUS_REGION;
+struct _DMUS_INSTRUMENT {
+ ULONG ulPatch;
+ ULONG ulFirstRegionIdx;
+ ULONG ulGlobalArtIdx;
+ ULONG ulFirstExtCkIdx;
+ ULONG ulCopyrightIdx;
+ ULONG ulFlags;
+};
-typedef struct _DMUS_LFOPARAMS
-{
- PCENT pcFrequency;
- TCENT tcDelay;
- GCENT gcVolumeScale;
- PCENT pcPitchScale;
- GCENT gcMWToVolume;
- PCENT pcMWToPitch;
-} DMUS_LFOPARAMS;
+struct _DMUS_REGION {
+ RGNRANGE RangeKey;
+ RGNRANGE RangeVelocity;
+ USHORT fusOptions;
+ USHORT usKeyGroup;
+ ULONG ulRegionArtIdx;
+ ULONG ulNextRegionIdx;
+ ULONG ulFirstExtCkIdx;
+ WAVELINK WaveLink;
+ WSMPL WSMP;
+ WLOOP WLOOP[1];
+};
-typedef struct _DMUS_VEGPARAMS
-{
- TCENT tcAttack;
- TCENT tcDecay;
- PERCENT ptSustain;
- TCENT tcRelease;
- TCENT tcVel2Attack;
- TCENT tcKey2Decay;
-} DMUS_VEGPARAMS;
+struct _DMUS_LFOPARAMS {
+ PCENT pcFrequency;
+ TCENT tcDelay;
+ GCENT gcVolumeScale;
+ PCENT pcPitchScale;
+ GCENT gcMWToVolume;
+ PCENT pcMWToPitch;
+};
-typedef struct _DMUS_PEGPARAMS
-{
- TCENT tcAttack;
- TCENT tcDecay;
- PERCENT ptSustain;
- TCENT tcRelease;
- TCENT tcVel2Attack;
- TCENT tcKey2Decay;
- PCENT pcRange;
-} DMUS_PEGPARAMS;
+struct _DMUS_VEGPARAMS {
+ TCENT tcAttack;
+ TCENT tcDecay;
+ PERCENT ptSustain;
+ TCENT tcRelease;
+ TCENT tcVel2Attack;
+ TCENT tcKey2Decay;
+};
-typedef struct _DMUS_MSCPARAMS
-{
- PERCENT ptDefaultPan;
-} DMUS_MSCPARAMS;
+struct _DMUS_PEGPARAMS {
+ TCENT tcAttack;
+ TCENT tcDecay;
+ PERCENT ptSustain;
+ TCENT tcRelease;
+ TCENT tcVel2Attack;
+ TCENT tcKey2Decay;
+ PCENT pcRange;
+};
-typedef struct _DMUS_ARTICPARAMS
-{
- DMUS_LFOPARAMS LFO;
- DMUS_VEGPARAMS VolEG;
- DMUS_PEGPARAMS PitchEG;
- DMUS_MSCPARAMS Misc;
-} DMUS_ARTICPARAMS;
+struct _DMUS_MSCPARAMS {
+ PERCENT ptDefaultPan;
+};
-typedef struct _DMUS_ARTICULATION
-{
- ULONG ulArt1Idx;
- ULONG ulFirstExtCkIdx;
-} DMUS_ARTICULATION;
+struct _DMUS_ARTICPARAMS {
+ DMUS_LFOPARAMS LFO;
+ DMUS_VEGPARAMS VolEG;
+ DMUS_PEGPARAMS PitchEG;
+ DMUS_MSCPARAMS Misc;
+};
-typedef struct _DMUS_ARTICULATION2
-{
- ULONG ulArtIdx;
- ULONG ulFirstExtCkIdx;
- ULONG ulNextArtIdx;
-} DMUS_ARTICULATION2;
+struct _DMUS_ARTICULATION {
+ ULONG ulArt1Idx;
+ ULONG ulFirstExtCkIdx;
+};
-typedef struct _DMUS_EXTENSIONCHUNK
-{
- ULONG cbSize;
- ULONG ulNextExtCkIdx;
- FOURCC ExtCkID;
- BYTE byExtCk[DMUS_MIN_DATA_SIZE];
-} DMUS_EXTENSIONCHUNK;
+struct _DMUS_ARTICULATION2 {
+ ULONG ulArtIdx;
+ ULONG ulFirstExtCkIdx;
+ ULONG ulNextArtIdx;
+};
+struct _DMUS_EXTENSIONCHUNK {
+ ULONG cbSize;
+ ULONG ulNextExtCkIdx;
+ FOURCC ExtCkID;
+ BYTE byExtCk[DMUS_MIN_DATA_SIZE];
+};
-typedef struct _DMUS_COPYRIGHT
-{
- ULONG cbSize;
- BYTE byCopyright[DMUS_MIN_DATA_SIZE];
-} DMUS_COPYRIGHT;
+struct _DMUS_COPYRIGHT {
+ ULONG cbSize;
+ BYTE byCopyright[DMUS_MIN_DATA_SIZE];
+};
-typedef struct _DMUS_WAVEDATA
-{
- ULONG cbSize;
- BYTE byData[DMUS_MIN_DATA_SIZE];
-} DMUS_WAVEDATA;
+struct _DMUS_WAVEDATA {
+ ULONG cbSize;
+ BYTE byData[DMUS_MIN_DATA_SIZE];
+};
-typedef struct _DMUS_WAVE
-{
- ULONG ulFirstExtCkIdx;
- ULONG ulCopyrightIdx;
- ULONG ulWaveDataIdx;
- WAVEFORMATEX WaveformatEx;
-} DMUS_WAVE;
+struct _DMUS_WAVE {
+ ULONG ulFirstExtCkIdx;
+ ULONG ulCopyrightIdx;
+ ULONG ulWaveDataIdx;
+ WAVEFORMATEX WaveformatEx;
+};
-typedef struct _DMUS_NOTERANGE
-{
- DWORD dwLowNote;
- DWORD dwHighNote;
-} DMUS_NOTERANGE, *LPDMUS_NOTERANGE;
+struct _DMUS_NOTERANGE {
+ DWORD dwLowNote;
+ DWORD dwHighNote;
+};
-typedef struct _DMUS_WAVEARTDL
-{
- ULONG ulDownloadIdIdx;
- ULONG ulBus;
- ULONG ulBuffers;
- ULONG ulMasterDLId;
- USHORT usOptions;
-} DMUS_WAVEARTDL, *LPDMUS_WAVEARTDL;
+struct _DMUS_WAVEARTDL {
+ ULONG ulDownloadIdIdx;
+ ULONG ulBus;
+ ULONG ulBuffers;
+ ULONG ulMasterDLId;
+ USHORT usOptions;
+};
-typedef struct _DMUS_WAVEDL
-{
- ULONG cbWaveData;
-} DMUS_WAVEDL, *LPDMUS_WAVEDL;
+struct _DMUS_WAVEDL {
+ ULONG cbWaveData;
+};
#endif /* __WINE_DMUSIC_DLS_H */
diff --git a/include/dmerror.h b/include/dmerror.h
index adae948..7af2653 100644
--- a/include/dmerror.h
+++ b/include/dmerror.h
@@ -1,6 +1,6 @@
/* DirectMusic Error Codes
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,8 +23,8 @@
/*****************************************************************************
* Error code handling
*/
-#define FACILITY_DIRECTMUSIC 0x878
-#define DMUS_ERRBASE 0x1000
+#define FACILITY_DIRECTMUSIC 0x878
+#define DMUS_ERRBASE 0x1000
#ifndef MAKE_HRESULT
#define MAKE_HRESULT(sev,fac,code) \
diff --git a/include/dmplugin.h b/include/dmplugin.h
index e447246..94925ec 100644
--- a/include/dmplugin.h
+++ b/include/dmplugin.h
@@ -1,7 +1,7 @@
/*
* DirectMusic Performance Layer Plugins API
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,47 +21,106 @@
#ifndef __WINE_DMUSIC_PLUGIN_H
#define __WINE_DMUSIC_PLUGIN_H
+#ifndef __WINESRC__
+#include <windows.h>
+#endif /* __WINESRC__ */
+
#include <objbase.h>
#include <mmsystem.h>
+#include <dmusici.h>
+#include <pshpack8.h>
#ifdef __cplusplus
extern "C" {
#endif
-#define DMUS_REGSTR_PATH_TOOLS "Software\\Microsoft\\DirectMusic\\Tools"
+/*****************************************************************************
+ * Registry path
+ */
+#define DMUS_REGSTR_PATH_TOOLS "Software\\Microsoft\\DirectMusic\\Tools"
+
/*****************************************************************************
* Predeclare the interfaces
*/
-DEFINE_GUID(IID_IDirectMusicTrack, 0xf96029a1,0x4282,0x11d2,0x87,0x17,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(IID_IDirectMusicTool, 0xd2ac28ba,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(IID_IDirectMusicTool8, 0xe674303,0x3b05,0x11d3,0x9b,0xd1,0xf9,0xe7,0xf0,0xa0,0x15,0x36);
-DEFINE_GUID(IID_IDirectMusicTrack8, 0xe674304,0x3b05,0x11d3,0x9b,0xd1,0xf9,0xe7,0xf0,0xa0,0x15,0x36);
+/* CLSIDs */
+DEFINE_GUID(CLSID_DirectMusicBandTrack, 0xd2ac2894,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicChordTrack, 0xd2ac288b,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicChordMapTrack, 0xd2ac2896,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicCommandTrack, 0xd2ac288c,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicLyricsTrack, 0x995c1cf5,0x54ff,0x11d3,0x8b,0xda,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicMarkerTrack, 0x55a8fd00,0x4288,0x11d3,0x9b,0xd1,0x8a,0x0d,0x61,0xc8,0x88,0x35);
+DEFINE_GUID(CLSID_DirectMusicMotifTrack, 0xd2ac288e,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicMuteTrack, 0xd2ac2898,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicParamControlTrack, 0x4be0537b,0x5c19,0x11d3,0x8b,0xdc,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicScriptTrack, 0x4108fa85,0x3586,0x11d3,0x8b,0xd7,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicSegmentTriggerTrack, 0xbae4d665,0x4ea1,0x11d3,0x8b,0xda,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicSeqTrack, 0xd2ac2886,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicSignPostTrack, 0xf17e8672,0xc3b4,0x11d1,0x87,0x0b,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicStyleTrack, 0xd2ac288d,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicSysExTrack, 0xd2ac2887,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicTempoTrack, 0xd2ac2885,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicTimeSigTrack, 0xd2ac2888,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicWaveTrack, 0xeed36461,0x9ea5,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+/* MS doesn't support this in DX 9.0 and newer... but there's no harm in keeping it around */
+DEFINE_GUID(CLSID_DirectMusicMelodyFormulationTrack, 0xb0684266,0xb57f,0x11d2,0x97,0xf9,0x00,0xc0,0x4f,0xa3,0x6e,0x58);
-/* typedef definitions of interfaces are in dmusici.h */
+/* IIDs */
+DEFINE_GUID(IID_IDirectMusicTool, 0xd2ac28ba,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicTool8, 0x0e674303,0x3b05,0x11d3,0x9b,0xd1,0xf9,0xe7,0xf0,0xa0,0x15,0x36);
+DEFINE_GUID(IID_IDirectMusicTrack, 0xf96029a1,0x4282,0x11d2,0x87,0x17,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicTrack8, 0x0e674304,0x3b05,0x11d3,0x9b,0xd1,0xf9,0xe7,0xf0,0xa0,0x15,0x36);
-DEFINE_GUID(CLSID_DirectMusicTempoTrack, 0xd2ac2885,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicSeqTrack, 0xd2ac2886,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicSysExTrack, 0xd2ac2887,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicTimeSigTrack, 0xd2ac2888,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicChordTrack, 0xd2ac288b,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicCommandTrack, 0xd2ac288c,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicStyleTrack, 0xd2ac288d,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicMotifTrack, 0xd2ac288e,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicSignPostTrack, 0xf17e8672,0xc3b4,0x11d1,0x87,0xb,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicBandTrack, 0xd2ac2894,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicChordMapTrack, 0xd2ac2896,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicMuteTrack, 0xd2ac2898,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicScriptTrack, 0x4108fa85,0x3586,0x11d3,0x8b,0xd7,0x0,0x60,0x8,0x93,0xb1,0xb6);
-DEFINE_GUID(CLSID_DirectMusicMarkerTrack, 0x55a8fd00,0x4288,0x11d3,0x9b,0xd1,0x8a,0xd,0x61,0xc8,0x88,0x35);
-DEFINE_GUID(CLSID_DirectMusicSegmentTriggerTrack, 0xbae4d665,0x4ea1,0x11d3,0x8b,0xda,0x0,0x60,0x8,0x93,0xb1,0xb6);
-DEFINE_GUID(CLSID_DirectMusicLyricsTrack, 0x995c1cf5,0x54ff,0x11d3,0x8b,0xda,0x0,0x60,0x8,0x93,0xb1,0xb6);
-DEFINE_GUID(CLSID_DirectMusicParamControlTrack, 0x4be0537b,0x5c19,0x11d3,0x8b,0xdc,0x0,0x60,0x8,0x93,0xb1,0xb6);
-DEFINE_GUID(CLSID_DirectMusicMelodyFormulationTrack, 0xb0684266,0xb57f,0x11d2,0x97,0xf9,0x0,0xc0,0x4f,0xa3,0x6e,0x58);
-DEFINE_GUID(CLSID_DirectMusicWaveTrack, 0xeed36461,0x9ea5,0x11d3,0x9b,0xd1,0x0,0x80,0xc7,0x15,0xa,0x74);
+/* typedef definitions */
+typedef struct IDirectMusicTrack IDirectMusicTrack, *LPDIRECTMUSICTRACK;
+typedef struct IDirectMusicTrack IDirectMusicTrack8, *LPDIRECTMUSICTRACK8;
+typedef struct IDirectMusicTool IDirectMusicTool, *LPDIRECTMUSICTOOL;
+typedef struct IDirectMusicTool8 IDirectMusicTool8, *LPDIRECTMUSICTOOL8;
+/* these are from dmusici.h and are needed here */
+typedef struct IDirectMusicPerformance IDirectMusicPerformance, *LPDIRECTMUSICPERFORMANCE;
+typedef struct IDirectMusicPerformance8 IDirectMusicPerformance8, *LPDIRECTMUSICPERFORMANCE8;
+typedef struct IDirectMusicSegment IDirectMusicSegment, *LPDIRECTMUSICSEGMENT;
+typedef struct IDirectMusicSegment IDirectMusicSegment8, *LPDIRECTMUSICSEGMENT8;
+typedef struct IDirectMusicSegmentState IDirectMusicSegmentState, *LPDIRECTMUSICSEGMENTSTATE;
+typedef struct IDirectMusicSegmentState8 IDirectMusicSegmentState8, *LPDIRECTMUSICSEGMENTSTATE8;
+typedef struct IDirectMusicGraph IDirectMusicGraph, *LPDIRECTMUSICGRAPH;
+typedef struct IDirectMusicGraph IDirectMusicGraph8, *LPDIRECTMUSICGRAPH8;
/*****************************************************************************
+ * Typedef definitions
+ */
+typedef struct _DMUS_PMSG DMUS_PMSG;
+typedef long MUSIC_TIME;
+
+
+/*****************************************************************************
+ * Flags
+ */
+#define DMUS_TRACK_PARAMF_CLOCK 0x1
+
+/*****************************************************************************
+ * Enumerations
+ */
+/* typedef definitions */
+typedef enum enumDMUS_TRACKF_FLAGS DMUS_TRACKF_FLAGS;
+
+/* actual enumerations */
+enum enumDMUS_TRACKF_FLAGS {
+ DMUS_TRACKF_SEEK = 0x001,
+ DMUS_TRACKF_LOOP = 0x002,
+ DMUS_TRACKF_START = 0x004,
+ DMUS_TRACKF_FLUSH = 0x008,
+ DMUS_TRACKF_DIRTY = 0x010,
+ DMUS_TRACKF_NOTIFY_OFF = 0x020,
+ DMUS_TRACKF_PLAY_OFF = 0x040,
+ DMUS_TRACKF_LOOPEND = 0x080,
+ DMUS_TRACKF_STOP = 0x100,
+ DMUS_TRACKF_RECOMPOSE = 0x200,
+ DMUS_TRACKF_CLOCK = 0x400,
+};
+
+/*****************************************************************************
* IDirectMusicTool interface
*/
#undef INTERFACE
@@ -79,16 +138,16 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicTool_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicTool_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicTool_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicTool_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicTool_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicTool_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicTool methods ***/
-#define IDirectMusicTool_Init(p,a) (p)->lpVtbl->Init(p,a)
-#define IDirectMusicTool_GetMsgDeliveryType(p,a) (p)->lpVtbl->GetMsgDeliveryType(p,a)
-#define IDirectMusicTool_GetMediaTypeArraySize(p,a) (p)->lpVtbl->GetMediaTypeArraySize(p,a)
-#define IDirectMusicTool_GetMediaTypes(p,a,b) (p)->lpVtbl->GetMediaTypes(p,a,b)
-#define IDirectMusicTool_ProcessPMsg(p,a,b) (p)->lpVtbl->ProcessPMsg(p,a,b)
-#define IDirectMusicTool_Flush(p,a,b,c) (p)->lpVtbl->Flush(p,a,b,c)
+#define IDirectMusicTool_Init(p,a) (p)->lpVtbl->Init(p,a)
+#define IDirectMusicTool_GetMsgDeliveryType(p,a) (p)->lpVtbl->GetMsgDeliveryType(p,a)
+#define IDirectMusicTool_GetMediaTypeArraySize(p,a) (p)->lpVtbl->GetMediaTypeArraySize(p,a)
+#define IDirectMusicTool_GetMediaTypes(p,a,b) (p)->lpVtbl->GetMediaTypes(p,a,b)
+#define IDirectMusicTool_ProcessPMsg(p,a,b) (p)->lpVtbl->ProcessPMsg(p,a,b)
+#define IDirectMusicTool_Flush(p,a,b,c) (p)->lpVtbl->Flush(p,a,b,c)
#endif
@@ -105,40 +164,21 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicTool8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicTool8_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicTool8_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicTool8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicTool8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicTool8_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicTool methods ***/
-#define IDirectMusicTool8_Init(p,a) (p)->lpVtbl->Init(p,a)
-#define IDirectMusicTool8_GetMsgDeliveryType(p,a) (p)->lpVtbl->GetMsgDeliveryType(p,a)
-#define IDirectMusicTool8_GetMediaTypeArraySize(p,a) (p)->lpVtbl->GetMediaTypeArraySize(p,a)
-#define IDirectMusicTool8_GetMediaTypes(p,a,b) (p)->lpVtbl->GetMediaTypes(p,a,b)
-#define IDirectMusicTool8_ProcessPMsg(p,a,b) (p)->lpVtbl->ProcessPMsg(p,a,b)
-#define IDirectMusicTool8_Flush(p,a,b) (p)->lpVtbl->Flush(p,a,b)
+#define IDirectMusicTool8_Init(p,a) (p)->lpVtbl->Init(p,a)
+#define IDirectMusicTool8_GetMsgDeliveryType(p,a) (p)->lpVtbl->GetMsgDeliveryType(p,a)
+#define IDirectMusicTool8_GetMediaTypeArraySize(p,a) (p)->lpVtbl->GetMediaTypeArraySize(p,a)
+#define IDirectMusicTool8_GetMediaTypes(p,a,b) (p)->lpVtbl->GetMediaTypes(p,a,b)
+#define IDirectMusicTool8_ProcessPMsg(p,a,b) (p)->lpVtbl->ProcessPMsg(p,a,b)
+#define IDirectMusicTool8_Flush(p,a,b) (p)->lpVtbl->Flush(p,a,b)
/*** IDirectMusicTool8 methods ***/
-#define IDirectMusicTool8_Clone(p,a) (p)->lpVtbl->Clone(p,a)
+#define IDirectMusicTool8_Clone(p,a) (p)->lpVtbl->Clone(p,a)
#endif
-typedef enum enumDMUS_TRACKF_FLAGS
-{
- DMUS_TRACKF_SEEK = 1,
- DMUS_TRACKF_LOOP = 2,
- DMUS_TRACKF_START = 4,
- DMUS_TRACKF_FLUSH = 8,
- DMUS_TRACKF_DIRTY = 0x10,
- DMUS_TRACKF_NOTIFY_OFF = 0x20,
- DMUS_TRACKF_PLAY_OFF = 0x40,
- DMUS_TRACKF_LOOPEND = 0x80,
- DMUS_TRACKF_STOP = 0x100,
- DMUS_TRACKF_RECOMPOSE = 0x200,
- DMUS_TRACKF_CLOCK = 0x400,
-} DMUS_TRACKF_FLAGS;
-
-#define DMUS_TRACK_PARAMF_CLOCK 0x01
-
-
-
/*****************************************************************************
* IDirectMusicTrack interface
*/
@@ -161,20 +201,20 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicTrack_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicTrack_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicTrack_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicTrack_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicTrack_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicTrack_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicTrack methods ***/
-#define IDirectMusicTrack_Init(p,a) (p)->lpVtbl->Init(p,a)
-#define IDirectMusicTrack_InitPlay(p,a,b,c,d,e) (p)->lpVtbl->InitPlay(p,a,b,c,d,e)
-#define IDirectMusicTrack_EndPlay(p,a) (p)->lpVtbl->EndPlay(p,a)
-#define IDirectMusicTrack_Play(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Play(p,a,b,c,d,e,f,g,h)
-#define IDirectMusicTrack_GetParam(p,a,b,c,d) (p)->lpVtbl->GetParam(p,a,b,c,d)
-#define IDirectMusicTrack_SetParam(p,a,b,c) (p)->lpVtbl->SetParam(p,a,b,c)
-#define IDirectMusicTrack_IsParamSupported(p,a) (p)->lpVtbl->IsParamSupported(p,a)
-#define IDirectMusicTrack_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a)
-#define IDirectMusicTrack_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)
-#define IDirectMusicTrack_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirectMusicTrack_Init(p,a) (p)->lpVtbl->Init(p,a)
+#define IDirectMusicTrack_InitPlay(p,a,b,c,d,e) (p)->lpVtbl->InitPlay(p,a,b,c,d,e)
+#define IDirectMusicTrack_EndPlay(p,a) (p)->lpVtbl->EndPlay(p,a)
+#define IDirectMusicTrack_Play(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Play(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicTrack_GetParam(p,a,b,c,d) (p)->lpVtbl->GetParam(p,a,b,c,d)
+#define IDirectMusicTrack_SetParam(p,a,b,c) (p)->lpVtbl->SetParam(p,a,b,c)
+#define IDirectMusicTrack_IsParamSupported(p,a) (p)->lpVtbl->IsParamSupported(p,a)
+#define IDirectMusicTrack_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a)
+#define IDirectMusicTrack_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)
+#define IDirectMusicTrack_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
#endif
@@ -195,31 +235,32 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicTrack8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicTrack8_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicTrack8_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicTrack8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicTrack8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicTrack8_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicTrack methods ***/
-#define IDirectMusicTrack8_Init(p,a) (p)->lpVtbl->Init(p,a)
-#define IDirectMusicTrack8_InitPlay(p,a,b,c,d,e) (p)->lpVtbl->InitPlay(p,a,b,c,d,e)
-#define IDirectMusicTrack8_EndPlay(p,a) (p)->lpVtbl->EndPlay(p,a)
-#define IDirectMusicTrack8_Play(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Play(p,a,b,c,d,e,f,g,h)
-#define IDirectMusicTrack8_GetParam(p,a,b,c,d) (p)->lpVtbl->GetParam(p,a,b,c,d)
-#define IDirectMusicTrack8_SetParam(p,a,b,c) (p)->lpVtbl->SetParam(p,a,b,c)
-#define IDirectMusicTrack8_IsParamSupported(p,a) (p)->lpVtbl->IsParamSupported(p,a)
-#define IDirectMusicTrack8_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a)
-#define IDirectMusicTrack8_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)
-#define IDirectMusicTrack8_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
+#define IDirectMusicTrack8_Init(p,a) (p)->lpVtbl->Init(p,a)
+#define IDirectMusicTrack8_InitPlay(p,a,b,c,d,e) (p)->lpVtbl->InitPlay(p,a,b,c,d,e)
+#define IDirectMusicTrack8_EndPlay(p,a) (p)->lpVtbl->EndPlay(p,a)
+#define IDirectMusicTrack8_Play(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Play(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicTrack8_GetParam(p,a,b,c,d) (p)->lpVtbl->GetParam(p,a,b,c,d)
+#define IDirectMusicTrack8_SetParam(p,a,b,c) (p)->lpVtbl->SetParam(p,a,b,c)
+#define IDirectMusicTrack8_IsParamSupported(p,a) (p)->lpVtbl->IsParamSupported(p,a)
+#define IDirectMusicTrack8_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a)
+#define IDirectMusicTrack8_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)
+#define IDirectMusicTrack8_Clone(p,a,b,c) (p)->lpVtbl->Clone(p,a,b,c)
/*** IDirectMusicTrack8 methods ***/
-#define IDirectMusicTrack8_PlayEx(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->PlayEx(p,a,b,c,d,e,f,g,h)
-#define IDirectMusicTrack8_GetParamEx(p,a,b,c,d,e,f) (p)->lpVtbl->GetParamEx(p,a,b,c,d,e,f)
-#define IDirectMusicTrack8_SetParamEx(p,a,b,c,d,e) (p)->lpVtbl->SetParamEx(p,a,b,c,d,e)
-#define IDirectMusicTrack8_Compose(p,a,b,c) (p)->lpVtbl->Compose(p,a,b,c)
-#define IDirectMusicTrack8_Join(p,a,b,c,d,e) (p)->lpVtbl->Join(p,a,b,c,d,e)
+#define IDirectMusicTrack8_PlayEx(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->PlayEx(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicTrack8_GetParamEx(p,a,b,c,d,e,f) (p)->lpVtbl->GetParamEx(p,a,b,c,d,e,f)
+#define IDirectMusicTrack8_SetParamEx(p,a,b,c,d,e) (p)->lpVtbl->SetParamEx(p,a,b,c,d,e)
+#define IDirectMusicTrack8_Compose(p,a,b,c) (p)->lpVtbl->Compose(p,a,b,c)
+#define IDirectMusicTrack8_Join(p,a,b,c,d,e) (p)->lpVtbl->Join(p,a,b,c,d,e)
#endif
-
#ifdef __cplusplus
}
#endif
+#include <poppack.h>
+
#endif /* __WINE_DMUSIC_PLUGIN_H */
diff --git a/include/dmusbuff.h b/include/dmusbuff.h
index 6008fdc..c4fa408 100644
--- a/include/dmusbuff.h
+++ b/include/dmusbuff.h
@@ -1,6 +1,6 @@
/* DirectMusic Buffer Format
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,26 +20,31 @@
#ifndef __WINE_DMUSIC_BUFFER_H
#define __WINE_DMUSIC_BUFFER_H
-#include <pshpack4.h>
-
/*****************************************************************************
- * Definitions
+ * Misc. definitions
*/
-#define DMUS_EVENT_STRUCTURED 0x00000001
#define QWORD_ALIGN(x) (((x) + 7) & ~7)
#define DMUS_EVENT_SIZE(cb) QWORD_ALIGN(sizeof(DMUS_EVENTHEADER) + cb)
/*****************************************************************************
+ * Flags
+ */
+#define DMUS_EVENT_STRUCTURED 0x1
+
+/*****************************************************************************
* Structures
*/
-typedef struct _DMUS_EVENTHEADER
-{
+/* typedef definitions */
+typedef struct _DMUS_EVENTHEADER DMUS_EVENTHEADER, *LPDMUS_EVENTHEADER;
+
+/* actual structure*/
+#include <pshpack4.h>
+struct _DMUS_EVENTHEADER {
DWORD cbEvent;
DWORD dwChannelGroup;
REFERENCE_TIME rtDelta;
DWORD dwFlags;
-} DMUS_EVENTHEADER, *LPDMUS_EVENTHEADER;
-
+};
#include <poppack.h>
#endif /* __WINE_DMUSIC_BUFFER_H */
diff --git a/include/dmusicc.h b/include/dmusicc.h
index bc5b5a6..24f786d 100644
--- a/include/dmusicc.h
+++ b/include/dmusicc.h
@@ -1,6 +1,6 @@
/* DirectMusic Core API Stuff
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,269 +20,351 @@
#ifndef __WINE_DMUSIC_CORE_H
#define __WINE_DMUSIC_CORE_H
-#include <objbase.h>
+#ifndef __WINESRC__
+#include <windows.h>
+#endif /* __WINESRC__ */
+#include <objbase.h>
#include <mmsystem.h>
-#include <dsound.h>
#include <dls1.h>
#include <dmerror.h>
#include <dmdls.h>
+#include <dsound.h>
#include <dmusbuff.h>
-/*#include <pshpack8.h> */
+#include <pshpack8.h>
#ifdef __cplusplus
extern "C" {
-#endif /* __cplusplus */
+#endif
+
/*****************************************************************************
* Predeclare the interfaces
*/
-DEFINE_GUID(CLSID_DirectMusic, 0x636b9f10, 0x0c7d, 0x11d1, 0x95, 0xb2, 0x00, 0x20, 0xaf, 0xdc, 0x74, 0x21);
-DEFINE_GUID(CLSID_DirectMusicCollection, 0x480ff4b0, 0x28b2, 0x11d1, 0xbe, 0xf7, 0x0, 0xc0, 0x4f, 0xbf, 0x8f, 0xef);
-DEFINE_GUID(CLSID_DirectMusicSynth, 0x58C2B4D0, 0x46E7, 0x11D1, 0x89, 0xAC, 0x00, 0xA0, 0xC9, 0x05, 0x41, 0x29);
+/* CLSIDs */
+DEFINE_GUID(CLSID_DirectMusic, 0x636b9f10,0x0c7d,0x11d1,0x95,0xb2,0x00,0x20,0xaf,0xdc,0x74,0x21);
+DEFINE_GUID(CLSID_DirectMusicCollection, 0x480ff4b0,0x28b2,0x11d1,0xbe,0xf7,0x00,0xc0,0x4f,0xbf,0x8f,0xef);
+DEFINE_GUID(CLSID_DirectMusicSynth, 0x58c2b4d0,0x46e7,0x11d1,0x89,0xac,0x00,0xa0,0xc9,0x05,0x41,0x29);
+
+/* IIDs */
+DEFINE_GUID(IID_IDirectMusic, 0x6536115a,0x7b2d,0x11d2,0xba,0x18,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(IID_IDirectMusic2, 0x6fc2cae1,0xbc78,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(IID_IDirectMusic8, 0x2d3629f7,0x813d,0x4939,0x85,0x08,0xf0,0x5c,0x6b,0x75,0xfd,0x97);
+DEFINE_GUID(IID_IDirectMusicBuffer, 0xd2ac2878,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicCollection, 0xd2ac287c,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicDownload, 0xd2ac287b,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicDownloadedInstrument, 0xd2ac287e,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicInstrument, 0xd2ac287d,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicPort, 0x08f2d8c9,0x37c2,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(IID_IDirectMusicPortDownload, 0xd2ac287a,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicThru, 0xced153e7,0x3606,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12);
-#ifndef __IReferenceClock_FWD_DEFINED__
-#define __IReferenceClock_FWD_DEFINED__
-typedef struct IReferenceClock IReferenceClock;
-#endif
-
-DEFINE_GUID(IID_IDirectMusic, 0x6536115a,0x7b2d,0x11d2,0xba,0x18,0x00,0x00,0xf8,0x75,0xac,0x12);
-typedef struct IDirectMusic IDirectMusic, *LPDIRECTMUSIC;
-DEFINE_GUID(IID_IDirectMusicBuffer, 0xd2ac2878,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-typedef struct IDirectMusicBuffer IDirectMusicBuffer, *LPDIRECTMUSICBUFFER, IDirectMusicBuffer8, *LPDIRECTMUSICBUFFER8;
-DEFINE_GUID(IID_IDirectMusicPort, 0x08f2d8c9,0x37c2,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12);
-#define IID_IDirectMusicPort8 IID_IDirectMusicPort
-typedef struct IDirectMusicPort IDirectMusicPort, *LPDIRECTMUSICPORT, IDirectMusicPort8, *LPDIRECTMUSICPORT8;
-DEFINE_GUID(IID_IDirectMusicThru, 0xced153e7,0x3606,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12);
-#define IID_IDirectMusicThru8 IID_IDirectMusicThru
-typedef struct IDirectMusicThru IDirectMusicThru, *LPDIRECTMUSICTHRU, IDirectMusicThru8, *LPDIRECTMUSICTHRU8;
-DEFINE_GUID(IID_IDirectMusicPortDownload, 0xd2ac287a,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-typedef struct IDirectMusicPortDownload IDirectMusicPortDownload, *LPDIRECTMUSICPORTDOWNLOAD, IDirectMusicPortDownload8, *LPDIRECTMUSICPORTDOWNLOAD8;
-#define IID_IDirectMusicPortDownload8 IID_IDirectMusicPortDownload
-DEFINE_GUID(IID_IDirectMusicDownload, 0xd2ac287b,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-#define IID_IDirectMusicDownload8 IID_IDirectMusicDownload
-typedef struct IDirectMusicDownload IDirectMusicDownload, *LPDIRECTMUSICDOWNLOAD, IDirectMusicDownload8, *LPDIRECTMUSICDOWNLOAD8;
-DEFINE_GUID(IID_IDirectMusicCollection, 0xd2ac287c,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
#define IID_IDirectMusicCollection8 IID_IDirectMusicCollection
-typedef struct IDirectMusicCollection IDirectMusicCollection, *LPDIRECTMUSICCOLLECTION, IDirectMusicCollection8, *LPDIRECTMUSICCOLLECTION8;
-DEFINE_GUID(IID_IDirectMusicInstrument, 0xd2ac287d,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-#define IID_IDirectMusicInstrument8 IID_IDirectMusicInstrument
-typedef struct IDirectMusicInstrument IDirectMusicInstrument, *LPDIRECTMUSICINSTRUMENT, IDirectMusicInstrument8, *LPDIRECTMUSICINSTRUMENT8;
-DEFINE_GUID(IID_IDirectMusicDownloadedInstrument, 0xd2ac287e,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
+#define IID_IDirectMusicDownload8 IID_IDirectMusicDownload
#define IID_IDirectMusicDownloadedInstrument8 IID_IDirectMusicDownloadedInstrument
-typedef struct IDirectMusicDownloadedInstrument IDirectMusicDownloadedInstrument, *LPDIRECTMUSICDOWNLOADEDINSTRUMENT, IDirectMusicDownloadedInstrument8, *LPDIRECTMUSICDOWNLOADEDINSTRUMENT8;
-DEFINE_GUID(IID_IDirectMusic2, 0x6fc2cae1,0xbc78,0x11d2,0xaf,0xa6,0x0,0xaa,0x0,0x24,0xd8,0xb6);
-DEFINE_GUID(IID_IDirectMusic8, 0x2d3629f7,0x813d,0x4939,0x85,0x08,0xf0,0x5c,0x6b,0x75,0xfd,0x97);
-typedef struct IDirectMusic8 IDirectMusic8, *LPDIRECTMUSIC8;
+#define IID_IDirectMusicInstrument8 IID_IDirectMusicInstrument
+#define IID_IDirectMusicPort8 IID_IDirectMusicPort
+#define IID_IDirectMusicPortDownload8 IID_IDirectMusicPortDownload
+#define IID_IDirectMusicThru8 IID_IDirectMusicThru
-DEFINE_GUID(GUID_DMUS_PROP_GM_Hardware, 0x178f2f24,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
-DEFINE_GUID(GUID_DMUS_PROP_GS_Hardware, 0x178f2f25,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
-DEFINE_GUID(GUID_DMUS_PROP_XG_Hardware, 0x178f2f26,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
-DEFINE_GUID(GUID_DMUS_PROP_XG_Capable, 0x6496aba1,0x61b0,0x11d2,0xaf,0xa6,0x0,0xaa,0x0,0x24,0xd8,0xb6);
-DEFINE_GUID(GUID_DMUS_PROP_GS_Capable, 0x6496aba2,0x61b0,0x11d2,0xaf,0xa6,0x0,0xaa,0x0,0x24,0xd8,0xb6);
-DEFINE_GUID(GUID_DMUS_PROP_DLS1, 0x178f2f27,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
-DEFINE_GUID(GUID_DMUS_PROP_DLS2, 0xf14599e5,0x4689,0x11d2,0xaf,0xa6,0x0,0xaa,0x0,0x24,0xd8,0xb6);
-DEFINE_GUID(GUID_DMUS_PROP_INSTRUMENT2, 0x865fd372,0x9f67,0x11d2,0x87,0x2a,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_DMUS_PROP_SynthSink_DSOUND, 0xaa97844,0xc877,0x11d1,0x87,0xc,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_DMUS_PROP_SynthSink_WAVE, 0xaa97845,0xc877,0x11d1,0x87,0xc,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_DMUS_PROP_SampleMemorySize, 0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac, 0x12);
-DEFINE_GUID(GUID_DMUS_PROP_SamplePlaybackRate, 0x2a91f713,0xa4bf,0x11d2,0xbb,0xdf,0x0,0x60,0x8,0x33,0xdb,0xd8);
-DEFINE_GUID(GUID_DMUS_PROP_WriteLatency, 0x268a0fa0,0x60f2,0x11d2,0xaf,0xa6,0x0,0xaa,0x0,0x24,0xd8,0xb6);
-DEFINE_GUID(GUID_DMUS_PROP_WritePeriod, 0x268a0fa1,0x60f2,0x11d2,0xaf,0xa6,0x0,0xaa,0x0,0x24,0xd8,0xb6);
-DEFINE_GUID(GUID_DMUS_PROP_MemorySize, 0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8, 0x75, 0xac, 0x12);
-DEFINE_GUID(GUID_DMUS_PROP_WavesReverb, 0x4cb5622,0x32e5,0x11d2,0xaf,0xa6,0x0,0xaa,0x0,0x24,0xd8,0xb6);
-DEFINE_GUID(GUID_DMUS_PROP_Effects, 0xcda8d611,0x684a,0x11d2,0x87,0x1e,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_DMUS_PROP_LegacyCaps, 0xcfa7cdc2,0x00a1,0x11d2,0xaa,0xd5,0x00,0x00,0xf8,0x75,0xac,0x12);
-DEFINE_GUID(GUID_DMUS_PROP_Volume, 0xfedfae25L,0xe46e,0x11d1,0xaa,0xce,0x00,0x00,0xf8,0x75,0xac,0x12);
+/* GUIDs - property set */
+DEFINE_GUID(GUID_DMUS_PROP_GM_Hardware, 0x178f2f24,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_GS_Capable, 0x6496aba2,0x61b0,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_GS_Hardware, 0x178f2f25,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_DLS1, 0x178f2f27,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_DLS2, 0xf14599e5,0x4689,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_Effects, 0xcda8d611,0x684a,0x11d2,0x87,0x1e,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_DMUS_PROP_INSTRUMENT2, 0x865fd372,0x9f67,0x11d2,0x87,0x2a,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_DMUS_PROP_LegacyCaps, 0xcfa7cdc2,0x00a1,0x11d2,0xaa,0xd5,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_MemorySize, 0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_SampleMemorySize, 0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_SamplePlaybackRate, 0x2a91f713,0xa4bf,0x11d2,0xbb,0xdf,0x00,0x60,0x08,0x33,0xdb,0xd8);
+DEFINE_GUID(GUID_DMUS_PROP_SynthSink_DSOUND, 0x0aa97844,0xc877,0x11d1,0x87,0x0c,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_DMUS_PROP_SynthSink_WAVE, 0x0aa97845,0xc877,0x11d1,0x87,0x0c,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_DMUS_PROP_Volume, 0xfedfae25,0xe46e,0x11d1,0xaa,0xce,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_WavesReverb, 0x04cb5622,0x32e5,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_WriteLatency, 0x268a0fa0,0x60f2,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_WritePeriod, 0x268a0fa1,0x60f2,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_XG_Capable, 0x6496aba1,0x61b0,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_XG_Hardware, 0x178f2f26,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12);
+/* typedef definitions */
+typedef struct IDirectMusic IDirectMusic, *LPDIRECTMUSIC;
+typedef struct IDirectMusic IDirectMusic8, *LPDIRECTMUSIC8;
+typedef struct IDirectMusicBuffer IDirectMusicBuffer, *LPDIRECTMUSICBUFFER;
+typedef struct IDirectMusicBuffer IDirectMusicBuffer8, *LPDIRECTMUSICBUFFER8;
+typedef struct IDirectMusicInstrument IDirectMusicInstrument, *LPDIRECTMUSICINSTRUMENT;
+typedef struct IDirectMusicInstrument IDirectMusicInstrument8, *LPDIRECTMUSICINSTRUMENT8;
+typedef struct IDirectMusicDownloadedInstrument IDirectMusicDownloadedInstrument, *LPDIRECTMUSICDOWNLOADEDINSTRUMENT;
+typedef struct IDirectMusicDownloadedInstrument IDirectMusicDownloadedInstrument8, *LPDIRECTMUSICDOWNLOADEDINSTRUMENT8;
+typedef struct IDirectMusicCollection IDirectMusicCollection, *LPDIRECTMUSICCOLLECTION;
+typedef struct IDirectMusicCollection IDirectMusicCollection8, *LPDIRECTMUSICCOLLECTION8;
+typedef struct IDirectMusicDownload IDirectMusicDownload, *LPDIRECTMUSICDOWNLOAD;
+typedef struct IDirectMusicDownload IDirectMusicDownload8, *LPDIRECTMUSICDOWNLOAD8;
+typedef struct IDirectMusicPortDownload IDirectMusicPortDownload, *LPDIRECTMUSICPORTDOWNLOAD;
+typedef struct IDirectMusicPortDownload IDirectMusicPortDownload8, *LPDIRECTMUSICPORTDOWNLOAD8;
+typedef struct IDirectMusicPort IDirectMusicPort, *LPDIRECTMUSICPORT;
+typedef struct IDirectMusicPort IDirectMusicPort8, *LPDIRECTMUSICPORT8;
+typedef struct IDirectMusicThru IDirectMusicThru, *LPDIRECTMUSICTHRU;
+typedef struct IDirectMusicThru IDirectMusicThru8, *LPDIRECTMUSICTHRU8;
+typedef struct IReferenceClock IReferenceClock, *LPREFERENCECLOCK;
+
+
+/*****************************************************************************
+ * Typedef definitions
+ */
typedef ULONGLONG SAMPLE_TIME, *LPSAMPLE_TIME;
-typedef ULONGLONG SAMPLE_POSITION;
+typedef ULONGLONG SAMPLE_POSITION, *LPSAMPLE_POSITION;
-#define DMUS_MAX_DESCRIPTION 128
-#define DMUS_MAX_DRIVER 128
-typedef struct _DMUS_BUFFERDESC
-{
- DWORD dwSize;
- DWORD dwFlags;
- GUID guidBufferFormat;
- DWORD cbBuffer;
-} DMUS_BUFFERDESC, *LPDMUS_BUFFERDESC;
+/*****************************************************************************
+ * Flags
+ */
+#ifndef _DIRECTAUDIO_PRIORITIES_DEFINED_
+ #define _DIRECTAUDIO_PRIORITIES_DEFINED_
-#define DMUS_EFFECT_NONE 0x00000000
-#define DMUS_EFFECT_REVERB 0x00000001
-#define DMUS_EFFECT_CHORUS 0x00000002
-#define DMUS_EFFECT_DELAY 0x00000004
-
-#define DMUS_PC_INPUTCLASS (0)
-#define DMUS_PC_OUTPUTCLASS (1)
+ #define DAUD_CRITICAL_VOICE_PRIORITY 0xF0000000
+ #define DAUD_HIGH_VOICE_PRIORITY 0xC0000000
+ #define DAUD_STANDARD_VOICE_PRIORITY 0x80000000
+ #define DAUD_LOW_VOICE_PRIORITY 0x40000000
+ #define DAUD_PERSIST_VOICE_PRIORITY 0x10000000
+
+ #define DAUD_CHAN1_VOICE_PRIORITY_OFFSET 0x0000000E
+ #define DAUD_CHAN2_VOICE_PRIORITY_OFFSET 0x0000000D
+ #define DAUD_CHAN3_VOICE_PRIORITY_OFFSET 0x0000000C
+ #define DAUD_CHAN4_VOICE_PRIORITY_OFFSET 0x0000000B
+ #define DAUD_CHAN5_VOICE_PRIORITY_OFFSET 0x0000000A
+ #define DAUD_CHAN6_VOICE_PRIORITY_OFFSET 0x00000009
+ #define DAUD_CHAN7_VOICE_PRIORITY_OFFSET 0x00000008
+ #define DAUD_CHAN8_VOICE_PRIORITY_OFFSET 0x00000007
+ #define DAUD_CHAN9_VOICE_PRIORITY_OFFSET 0x00000006
+ #define DAUD_CHAN10_VOICE_PRIORITY_OFFSET 0x0000000F
+ #define DAUD_CHAN11_VOICE_PRIORITY_OFFSET 0x00000005
+ #define DAUD_CHAN12_VOICE_PRIORITY_OFFSET 0x00000004
+ #define DAUD_CHAN13_VOICE_PRIORITY_OFFSET 0x00000003
+ #define DAUD_CHAN14_VOICE_PRIORITY_OFFSET 0x00000002
+ #define DAUD_CHAN15_VOICE_PRIORITY_OFFSET 0x00000001
+ #define DAUD_CHAN16_VOICE_PRIORITY_OFFSET 0x00000000
+
+ #define DAUD_CHAN1_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN1_VOICE_PRIORITY_OFFSET)
+ #define DAUD_CHAN2_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN2_VOICE_PRIORITY_OFFSET)
+ #define DAUD_CHAN3_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN3_VOICE_PRIORITY_OFFSET)
+ #define DAUD_CHAN4_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN4_VOICE_PRIORITY_OFFSET)
+ #define DAUD_CHAN5_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN5_VOICE_PRIORITY_OFFSET)
+ #define DAUD_CHAN6_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN6_VOICE_PRIORITY_OFFSET)
+ #define DAUD_CHAN7_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN7_VOICE_PRIORITY_OFFSET)
+ #define DAUD_CHAN8_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN8_VOICE_PRIORITY_OFFSET)
+ #define DAUD_CHAN9_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN9_VOICE_PRIORITY_OFFSET)
+ #define DAUD_CHAN10_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN10_VOICE_PRIORITY_OFFSET)
+ #define DAUD_CHAN11_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN11_VOICE_PRIORITY_OFFSET)
+ #define DAUD_CHAN12_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN12_VOICE_PRIORITY_OFFSET)
+ #define DAUD_CHAN13_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN13_VOICE_PRIORITY_OFFSET)
+ #define DAUD_CHAN14_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN14_VOICE_PRIORITY_OFFSET)
+ #define DAUD_CHAN15_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN15_VOICE_PRIORITY_OFFSET)
+ #define DAUD_CHAN16_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN16_VOICE_PRIORITY_OFFSET)
+#endif /* _DIRECTAUDIO_PRIORITIES_DEFINED_ */
-#define DMUS_PC_DLS (0x00000001)
-#define DMUS_PC_EXTERNAL (0x00000002)
-#define DMUS_PC_SOFTWARESYNTH (0x00000004)
-#define DMUS_PC_MEMORYSIZEFIXED (0x00000008)
-#define DMUS_PC_GMINHARDWARE (0x00000010)
-#define DMUS_PC_GSINHARDWARE (0x00000020)
-#define DMUS_PC_XGINHARDWARE (0x00000040)
-#define DMUS_PC_DIRECTSOUND (0x00000080)
-#define DMUS_PC_SHAREABLE (0x00000100)
-#define DMUS_PC_DLS2 (0x00000200)
-#define DMUS_PC_AUDIOPATH (0x00000400)
-#define DMUS_PC_WAVE (0x00000800)
+#define DMUS_CLOCKF_GLOBAL 0x1
-#define DMUS_PC_SYSTEMMEMORY (0x7FFFFFFF)
+#define DMUS_EFFECT_NONE 0x0
+#define DMUS_EFFECT_REVERB 0x1
+#define DMUS_EFFECT_CHORUS 0x2
+#define DMUS_EFFECT_DELAY 0x4
+
+#define DMUS_MAX_DESCRIPTION 0x80
+#define DMUS_MAX_DRIVER 0x80
-typedef struct _DMUS_PORTCAPS
-{
- DWORD dwSize;
- DWORD dwFlags;
- GUID guidPort;
- DWORD dwClass;
- DWORD dwType;
- DWORD dwMemorySize;
- DWORD dwMaxChannelGroups;
- DWORD dwMaxVoices;
- DWORD dwMaxAudioChannels;
- DWORD dwEffectFlags;
- WCHAR wszDescription[DMUS_MAX_DESCRIPTION];
-} DMUS_PORTCAPS, *LPDMUS_PORTCAPS;
+#define DMUS_PC_INPUTCLASS 0x0
+#define DMUS_PC_OUTPUTCLASS 0x1
-#define DMUS_PORT_WINMM_DRIVER (0)
-#define DMUS_PORT_USER_MODE_SYNTH (1)
-#define DMUS_PORT_KERNEL_MODE (2)
+#define DMUS_PC_DLS 0x00000001
+#define DMUS_PC_EXTERNAL 0x00000002
+#define DMUS_PC_SOFTWARESYNTH 0x00000004
+#define DMUS_PC_MEMORYSIZEFIXED 0x00000008
+#define DMUS_PC_GMINHARDWARE 0x00000010
+#define DMUS_PC_GSINHARDWARE 0x00000020
+#define DMUS_PC_XGINHARDWARE 0x00000040
+#define DMUS_PC_DIRECTSOUND 0x00000080
+#define DMUS_PC_SHAREABLE 0x00000100
+#define DMUS_PC_DLS2 0x00000200
+#define DMUS_PC_AUDIOPATH 0x00000400
+#define DMUS_PC_WAVE 0x00000800
+#define DMUS_PC_SYSTEMMEMORY 0x7FFFFFFF
-#define DMUS_PORTPARAMS_VOICES 0x00000001
-#define DMUS_PORTPARAMS_CHANNELGROUPS 0x00000002
-#define DMUS_PORTPARAMS_AUDIOCHANNELS 0x00000004
-#define DMUS_PORTPARAMS_SAMPLERATE 0x00000008
-#define DMUS_PORTPARAMS_EFFECTS 0x00000020
-#define DMUS_PORTPARAMS_SHARE 0x00000040
-#define DMUS_PORTPARAMS_FEATURES 0x00000080
+#define DMUS_PORT_WINMM_DRIVER 0x0
+#define DMUS_PORT_USER_MODE_SYNTH 0x1
+#define DMUS_PORT_KERNEL_MODE 0x2
-typedef struct _DMUS_PORTPARAMS
-{
- DWORD dwSize;
- DWORD dwValidParams;
- DWORD dwVoices;
- DWORD dwChannelGroups;
- DWORD dwAudioChannels;
- DWORD dwSampleRate;
- DWORD dwEffectFlags;
- BOOL fShare;
-} DMUS_PORTPARAMS7;
+#define DMUS_PORT_FEATURE_AUDIOPATH 0x1
+#define DMUS_PORT_FEATURE_STREAMING 0x2
-typedef struct _DMUS_PORTPARAMS8
-{
- DWORD dwSize;
- DWORD dwValidParams;
- DWORD dwVoices;
- DWORD dwChannelGroups;
- DWORD dwAudioChannels;
- DWORD dwSampleRate;
- DWORD dwEffectFlags;
- BOOL fShare;
- DWORD dwFeatures;
-} DMUS_PORTPARAMS8, DMUS_PORTPARAMS, *LPDMUS_PORTPARAMS;
+#define DMUS_PORTPARAMS_VOICES 0x01
+#define DMUS_PORTPARAMS_CHANNELGROUPS 0x02
+#define DMUS_PORTPARAMS_AUDIOCHANNELS 0x04
+#define DMUS_PORTPARAMS_SAMPLERATE 0x08
+#define DMUS_PORTPARAMS_EFFECTS 0x20
+#define DMUS_PORTPARAMS_SHARE 0x40
+#define DMUS_PORTPARAMS_FEATURES 0x80
-#define DMUS_PORT_FEATURE_AUDIOPATH 0x00000001
-#define DMUS_PORT_FEATURE_STREAMING 0x00000002
+#define DMUS_VOLUME_MAX 2000
+#define DMUS_VOLUME_MIN -20000
-typedef struct _DMUS_SYNTHSTATS
-{
- DWORD dwSize;
- DWORD dwValidStats;
- DWORD dwVoices;
- DWORD dwTotalCPU;
- DWORD dwCPUPerVoice;
- DWORD dwLostNotes;
- DWORD dwFreeMemory;
- long lPeakVolume;
-} DMUS_SYNTHSTATS, *LPDMUS_SYNTHSTATS;
+#define DMUS_SYNTHSTATS_VOICES 0x01
+#define DMUS_SYNTHSTATS_TOTAL_CPU 0x02
+#define DMUS_SYNTHSTATS_CPU_PER_VOICE 0x04
+#define DMUS_SYNTHSTATS_LOST_NOTES 0x08
+#define DMUS_SYNTHSTATS_PEAK_VOLUME 0x10
+#define DMUS_SYNTHSTATS_FREE_MEMORY 0x20
+#define DMUS_SYNTHSTATS_SYSTEMMEMORY DMUS_PC_SYSTEMMEMORY
-typedef struct _DMUS_SYNTHSTATS8
-{
- DWORD dwSize;
- DWORD dwValidStats;
- DWORD dwVoices;
- DWORD dwTotalCPU;
- DWORD dwCPUPerVoice;
- DWORD dwLostNotes;
- DWORD dwFreeMemory;
- long lPeakVolume;
- DWORD dwSynthMemUse;
-} DMUS_SYNTHSTATS8, *LPDMUS_SYNTHSTATS8;
+#define DSBUSID_FIRST_SPKR_LOC 0x00000000
+#define DSBUSID_FRONT_LEFT 0x00000000
+#define DSBUSID_LEFT 0x00000000
+#define DSBUSID_FRONT_RIGHT 0x00000001
+#define DSBUSID_RIGHT 0x00000001
+#define DSBUSID_FRONT_CENTER 0x00000002
+#define DSBUSID_LOW_FREQUENCY 0x00000003
+#define DSBUSID_BACK_LEFT 0x00000004
+#define DSBUSID_BACK_RIGHT 0x00000005
+#define DSBUSID_FRONT_LEFT_OF_CENTER 0x00000006
+#define DSBUSID_FRONT_RIGHT_OF_CENTER 0x00000007
+#define DSBUSID_BACK_CENTER 0x00000008
+#define DSBUSID_SIDE_LEFT 0x00000009
+#define DSBUSID_SIDE_RIGHT 0x0000000A
+#define DSBUSID_TOP_CENTER 0x0000000B
+#define DSBUSID_TOP_FRONT_LEFT 0x0000000C
+#define DSBUSID_TOP_FRONT_CENTER 0x0000000D
+#define DSBUSID_TOP_FRONT_RIGHT 0x0000000E
+#define DSBUSID_TOP_BACK_LEFT 0x0000000F
+#define DSBUSID_TOP_BACK_CENTER 0x00000010
+#define DSBUSID_TOP_BACK_RIGHT 0x011
+#define DSBUSID_LAST_SPKR_LOC 0x00000011
+#define DSBUSID_IS_SPKR_LOC(id) (((id) >= DSBUSID_FIRST_SPKR_LOC) && ((id) <= DSBUSID_LAST_SPKR_LOC))
-#define DMUS_SYNTHSTATS_VOICES 1
-#define DMUS_SYNTHSTATS_TOTAL_CPU 2
-#define DMUS_SYNTHSTATS_CPU_PER_VOICE 4
-#define DMUS_SYNTHSTATS_LOST_NOTES 8
-#define DMUS_SYNTHSTATS_PEAK_VOLUME 16
-#define DMUS_SYNTHSTATS_FREE_MEMORY 32
+#define DSBUSID_REVERB_SEND 0x00000040
+#define DSBUSID_CHORUS_SEND 0x00000041
-#define DMUS_SYNTHSTATS_SYSTEMMEMORY DMUS_PC_SYSTEMMEMORY
+#define DSBUSID_DYNAMIC_0 0x00000200
-typedef struct _DMUS_WAVES_REVERB_PARAMS
-{
- float fInGain;
- float fReverbMix;
- float fReverbTime;
- float fHighFreqRTRatio;
-} DMUS_WAVES_REVERB_PARAMS;
+#define DSBUSID_NULL 0xFFFFFFFF
-typedef enum
-{
- DMUS_CLOCK_SYSTEM = 0,
- DMUS_CLOCK_WAVE = 1
+/*****************************************************************************
+ * Enumerations
+ */
+typedef enum {
+ DMUS_CLOCK_SYSTEM = 0x0,
+ DMUS_CLOCK_WAVE = 0x1
} DMUS_CLOCKTYPE;
-#define DMUS_CLOCKF_GLOBAL 0x00000001
-typedef struct _DMUS_CLOCKINFO7
-{
- DWORD dwSize;
- DMUS_CLOCKTYPE ctType;
- GUID guidClock;
- WCHAR wszDescription[DMUS_MAX_DESCRIPTION];
-} DMUS_CLOCKINFO7, *LPDMUS_CLOCKINFO7;
+/*****************************************************************************
+ * Structures
+ */
+/* typedef definitions */
+typedef struct _DMUS_BUFFERDESC DMUS_BUFFERDESC, *LPDMUS_BUFFERDESC;
+typedef struct _DMUS_PORTCAPS DMUS_PORTCAPS, *LPDMUS_PORTCAPS;
+typedef struct _DMUS_PORTPARAMS DMUS_PORTPARAMS7, *LPDMUS_PORTPARAMS7;
+typedef struct _DMUS_PORTPARAMS8 DMUS_PORTPARAMS8, *LPDMUS_PORTPARAMS8;
+typedef DMUS_PORTPARAMS8 DMUS_PORTPARAMS, *LPDMUS_PORTPARAMS;
+typedef struct _DMUS_SYNTHSTATS DMUS_SYNTHSTATS, *LPDMUS_SYNTHSTATS;
+typedef struct _DMUS_SYNTHSTATS8 DMUS_SYNTHSTATS8, *LPDMUS_SYNTHSTATS8;
+typedef struct _DMUS_WAVES_REVERB_PARAMS DMUS_WAVES_REVERB_PARAMS, *LPDMUS_WAVES_REVERB_PARAMS;
+typedef struct _DMUS_CLOCKINFO7 DMUS_CLOCKINFO7, *LPDMUS_CLOCKINFO7;
+typedef struct _DMUS_CLOCKINFO8 DMUS_CLOCKINFO8, *LPDMUS_CLOCKINFO8;
+typedef DMUS_CLOCKINFO8 DMUS_CLOCKINFO, *LPDMUS_CLOCKINFO;
-typedef struct _DMUS_CLOCKINFO8
-{
- DWORD dwSize;
- DMUS_CLOCKTYPE ctType;
- GUID guidClock;
- WCHAR wszDescription[DMUS_MAX_DESCRIPTION];
- DWORD dwFlags;
-} DMUS_CLOCKINFO8, *LPDMUS_CLOCKINFO8, DMUS_CLOCKINFO, *LPDMUS_CLOCKINFO;
-#define DSBUSID_FIRST_SPKR_LOC 0
-#define DSBUSID_FRONT_LEFT 0
-#define DSBUSID_LEFT 0
-#define DSBUSID_FRONT_RIGHT 1
-#define DSBUSID_RIGHT 1
-#define DSBUSID_FRONT_CENTER 2
-#define DSBUSID_LOW_FREQUENCY 3
-#define DSBUSID_BACK_LEFT 4
-#define DSBUSID_BACK_RIGHT 5
-#define DSBUSID_FRONT_LEFT_OF_CENTER 6
-#define DSBUSID_FRONT_RIGHT_OF_CENTER 7
-#define DSBUSID_BACK_CENTER 8
-#define DSBUSID_SIDE_LEFT 9
-#define DSBUSID_SIDE_RIGHT 10
-#define DSBUSID_TOP_CENTER 11
-#define DSBUSID_TOP_FRONT_LEFT 12
-#define DSBUSID_TOP_FRONT_CENTER 13
-#define DSBUSID_TOP_FRONT_RIGHT 14
-#define DSBUSID_TOP_BACK_LEFT 15
-#define DSBUSID_TOP_BACK_CENTER 16
-#define DSBUSID_TOP_BACK_RIGHT 17
-#define DSBUSID_LAST_SPKR_LOC 17
-#define DSBUSID_IS_SPKR_LOC(id) ( ((id) >= DSBUSID_FIRST_SPKR_LOC) && ((id) <= DSBUSID_LAST_SPKR_LOC) )
-#define DSBUSID_REVERB_SEND 64
-#define DSBUSID_CHORUS_SEND 65
-#define DSBUSID_DYNAMIC_0 512
-#define DSBUSID_NULL 0xFFFFFFFF
+/* actual structures */
+struct _DMUS_BUFFERDESC {
+ DWORD dwSize;
+ DWORD dwFlags;
+ GUID guidBufferFormat;
+ DWORD cbBuffer;
+} ;
+
+struct _DMUS_PORTCAPS {
+ DWORD dwSize;
+ DWORD dwFlags;
+ GUID guidPort;
+ DWORD dwClass;
+ DWORD dwType;
+ DWORD dwMemorySize;
+ DWORD dwMaxChannelGroups;
+ DWORD dwMaxVoices;
+ DWORD dwMaxAudioChannels;
+ DWORD dwEffectFlags;
+ WCHAR wszDescription[DMUS_MAX_DESCRIPTION];
+};
+
+struct _DMUS_PORTPARAMS {
+ DWORD dwSize;
+ DWORD dwValidParams;
+ DWORD dwVoices;
+ DWORD dwChannelGroups;
+ DWORD dwAudioChannels;
+ DWORD dwSampleRate;
+ DWORD dwEffectFlags;
+ BOOL fShare;
+};
+
+struct _DMUS_PORTPARAMS8 {
+ DWORD dwSize;
+ DWORD dwValidParams;
+ DWORD dwVoices;
+ DWORD dwChannelGroups;
+ DWORD dwAudioChannels;
+ DWORD dwSampleRate;
+ DWORD dwEffectFlags;
+ BOOL fShare;
+ DWORD dwFeatures;
+};
+
+struct _DMUS_SYNTHSTATS {
+ DWORD dwSize;
+ DWORD dwValidStats;
+ DWORD dwVoices;
+ DWORD dwTotalCPU;
+ DWORD dwCPUPerVoice;
+ DWORD dwLostNotes;
+ DWORD dwFreeMemory;
+ long lPeakVolume;
+};
+
+struct _DMUS_SYNTHSTATS8 {
+ DWORD dwSize;
+ DWORD dwValidStats;
+ DWORD dwVoices;
+ DWORD dwTotalCPU;
+ DWORD dwCPUPerVoice;
+ DWORD dwLostNotes;
+ DWORD dwFreeMemory;
+ long lPeakVolume;
+ DWORD dwSynthMemUse;
+};
+
+struct _DMUS_WAVES_REVERB_PARAMS {
+ float fInGain;
+ float fReverbMix;
+ float fReverbTime;
+ float fHighFreqRTRatio;
+};
+
+struct _DMUS_CLOCKINFO7 {
+ DWORD dwSize;
+ DMUS_CLOCKTYPE ctType;
+ GUID guidClock;
+ WCHAR wszDescription[DMUS_MAX_DESCRIPTION];
+};
+
+struct _DMUS_CLOCKINFO8 {
+ DWORD dwSize;
+ DMUS_CLOCKTYPE ctType;
+ GUID guidClock;
+ WCHAR wszDescription[DMUS_MAX_DESCRIPTION];
+ DWORD dwFlags;
+};
/*****************************************************************************
@@ -306,19 +388,19 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusic_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusic_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusic_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusic_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusic_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusic_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusic methods ***/
-#define IDirectMusic_EnumPort(p,a,b) (p)->lpVtbl->EnumPort(p,a,b)
-#define IDirectMusic_CreateMusicBuffer(p,a,b,c) (p)->lpVtbl->CreateMusicBuffer(p,a,b,c)
-#define IDirectMusic_CreatePort(p,a,b,c,d) (p)->lpVtbl->CreatePort(p,a,b,c,d)
-#define IDirectMusic_EnumMasterClock(p,a,b) (p)->lpVtbl->EnumMasterClock(p,a,b)
-#define IDirectMusic_GetMasterClock(p,a,b) (p)->lpVtbl->GetMasterClock(p,a,b)
-#define IDirectMusic_SetMasterClock(p,a) (p)->lpVtbl->SetMasterClock(p,a)
-#define IDirectMusic_Activate(p,a) (p)->lpVtbl->Activate(p,a)
-#define IDirectMusic_GetDefaultPort(p,a) (p)->lpVtbl->GetDefaultPort(p,a)
-#define IDirectMusic_SetDirectSound(p,a,b) (p)->lpVtbl->SetDirectSound(p,a,b)
+#define IDirectMusic_EnumPort(p,a,b) (p)->lpVtbl->EnumPort(p,a,b)
+#define IDirectMusic_CreateMusicBuffer(p,a,b,c) (p)->lpVtbl->CreateMusicBuffer(p,a,b,c)
+#define IDirectMusic_CreatePort(p,a,b,c,d) (p)->lpVtbl->CreatePort(p,a,b,c,d)
+#define IDirectMusic_EnumMasterClock(p,a,b) (p)->lpVtbl->EnumMasterClock(p,a,b)
+#define IDirectMusic_GetMasterClock(p,a,b) (p)->lpVtbl->GetMasterClock(p,a,b)
+#define IDirectMusic_SetMasterClock(p,a) (p)->lpVtbl->SetMasterClock(p,a)
+#define IDirectMusic_Activate(p,a) (p)->lpVtbl->Activate(p,a)
+#define IDirectMusic_GetDefaultPort(p,a) (p)->lpVtbl->GetDefaultPort(p,a)
+#define IDirectMusic_SetDirectSound(p,a,b) (p)->lpVtbl->SetDirectSound(p,a,b)
#endif
@@ -335,21 +417,21 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusic8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusic8_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusic8_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusic8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusic8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusic8_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusic methods ***/
-#define IDirectMusic8_EnumPort(p,a,b) (p)->lpVtbl->EnumPort(p,a,b)
-#define IDirectMusic8_CreateMusicBuffer(p,a,b,c) (p)->lpVtbl->CreateMusicBuffer(p,a,b,c)
-#define IDirectMusic8_CreatePort(p,a,b,c,d) (p)->lpVtbl->CreatePort(p,a,b,c,d)
-#define IDirectMusic8_EnumMasterClock(p,a,b) (p)->lpVtbl->EnumMasterClock(p,a,b)
-#define IDirectMusic8_GetMasterClock(p,a,b) (p)->lpVtbl->GetMasterClock(p,a,b)
-#define IDirectMusic8_SetMasterClock(p,a) (p)->lpVtbl->SetMasterClock(p,a)
-#define IDirectMusic8_Activate(p,a) (p)->lpVtbl->Activate(p,a)
-#define IDirectMusic8_GetDefaultPort(p,a) (p)->lpVtbl->GetDefaultPort(p,a)
-#define IDirectMusic8_SetDirectSound(p,a,b) (p)->lpVtbl->SetDirectSound(p,a,b)
+#define IDirectMusic8_EnumPort(p,a,b) (p)->lpVtbl->EnumPort(p,a,b)
+#define IDirectMusic8_CreateMusicBuffer(p,a,b,c) (p)->lpVtbl->CreateMusicBuffer(p,a,b,c)
+#define IDirectMusic8_CreatePort(p,a,b,c,d) (p)->lpVtbl->CreatePort(p,a,b,c,d)
+#define IDirectMusic8_EnumMasterClock(p,a,b) (p)->lpVtbl->EnumMasterClock(p,a,b)
+#define IDirectMusic8_GetMasterClock(p,a,b) (p)->lpVtbl->GetMasterClock(p,a,b)
+#define IDirectMusic8_SetMasterClock(p,a) (p)->lpVtbl->SetMasterClock(p,a)
+#define IDirectMusic8_Activate(p,a) (p)->lpVtbl->Activate(p,a)
+#define IDirectMusic8_GetDefaultPort(p,a) (p)->lpVtbl->GetDefaultPort(p,a)
+#define IDirectMusic8_SetDirectSound(p,a,b) (p)->lpVtbl->SetDirectSound(p,a,b)
/*** IDirectMusic8 methods ***/
-#define IDirectMusic8_SetExternalMasterClock(p,a) (p)->lpVtbl->SetExternalMasterClock(p,a)
+#define IDirectMusic8_SetExternalMasterClock(p,a) (p)->lpVtbl->SetExternalMasterClock(p,a)
#endif
@@ -397,6 +479,7 @@
#define IDirectMusicBuffer_SetUsedBytes(p,a) (p)->lpVtbl->SetUsedBytes(p,a)
#endif
+
/*****************************************************************************
* IDirectMusicInstrument interface
*/
@@ -411,12 +494,12 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicInstrument_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicInstrument_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicInstrument_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicInstrument_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicInstrument_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicInstrument_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicInstrument methods ***/
-#define IDirectMusicInstrument_GetPatch(p,a) (p)->lpVtbl->GetPatch(p,a)
-#define IDirectMusicInstrument_SetPatch(p,a) (p)->lpVtbl->SetPatch(p,a)
+#define IDirectMusicInstrument_GetPatch(p,a) (p)->lpVtbl->GetPatch(p,a)
+#define IDirectMusicInstrument_SetPatch(p,a) (p)->lpVtbl->SetPatch(p,a)
#endif
@@ -433,9 +516,9 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicDownloadedInstrument_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicDownloadedInstrument_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicDownloadedInstrument_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicDownloadedInstrument_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicDownloadedInstrument_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicDownloadedInstrument_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicDownloadedInstrument methods ***/
/* none at this time */
#endif
@@ -460,7 +543,7 @@
#define IDirectMusicCollection_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicCollection methods ***/
#define IDirectMusicCollection_GetInstrument(p,a,b) (p)->lpVtbl->GetInstrument(p,a,b)
-#define IDirectMusicCollection_EnumInstrument(p,a,b,c) (p)->lpVtbl->EnumInstrument(p,a,b,c)
+#define IDirectMusicCollection_EnumInstrument(p,a,b,c,d) (p)->lpVtbl->EnumInstrument(p,a,b,c,d)
#endif
@@ -503,65 +586,19 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicPortDownload_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicPortDownload_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicPortDownload_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicPortDownload_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicPortDownload_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicPortDownload_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicPortDownload methods ***/
-#define IDirectMusicPortDownload_GetBuffer(p,a,b) (p)->lpVtbl->GetBuffer(p,a,b)
-#define IDirectMusicPortDownload_AllocateBuffer(p,a,b) (p)->lpVtbl->AllocateBuffer(p,a,b)
-#define IDirectMusicPortDownload_GetDLId(p,a,b) (p)->lpVtbl->GetDLId(p,a,b)
-#define IDirectMusicPortDownload_GetAppend(p,a) (p)->lpVtbl->GetAppend(p,a)
-#define IDirectMusicPortDownload_Download(p,a) (p)->lpVtbl->Download(p,a)
-#define IDirectMusicPortDownload_Unload(p,a) (p)->lpVtbl->GetBuffer(p,a)
+#define IDirectMusicPortDownload_GetBuffer(p,a,b) (p)->lpVtbl->GetBuffer(p,a,b)
+#define IDirectMusicPortDownload_AllocateBuffer(p,a,b) (p)->lpVtbl->AllocateBuffer(p,a,b)
+#define IDirectMusicPortDownload_GetDLId(p,a,b) (p)->lpVtbl->GetDLId(p,a,b)
+#define IDirectMusicPortDownload_GetAppend(p,a) (p)->lpVtbl->GetAppend(p,a)
+#define IDirectMusicPortDownload_Download(p,a) (p)->lpVtbl->Download(p,a)
+#define IDirectMusicPortDownload_Unload(p,a) (p)->lpVtbl->GetBuffer(p,a)
#endif
-#ifndef __WINE_DIRECTAUDIO_PRIORITIES_DEFINED
-#define __WINE_DIRECTAUDIO_PRIORITIES_DEFINED
-
-#define DAUD_CRITICAL_VOICE_PRIORITY (0xF0000000)
-#define DAUD_HIGH_VOICE_PRIORITY (0xC0000000)
-#define DAUD_STANDARD_VOICE_PRIORITY (0x80000000)
-#define DAUD_LOW_VOICE_PRIORITY (0x40000000)
-#define DAUD_PERSIST_VOICE_PRIORITY (0x10000000)
-
-#define DAUD_CHAN1_VOICE_PRIORITY_OFFSET (0x0000000E)
-#define DAUD_CHAN2_VOICE_PRIORITY_OFFSET (0x0000000D)
-#define DAUD_CHAN3_VOICE_PRIORITY_OFFSET (0x0000000C)
-#define DAUD_CHAN4_VOICE_PRIORITY_OFFSET (0x0000000B)
-#define DAUD_CHAN5_VOICE_PRIORITY_OFFSET (0x0000000A)
-#define DAUD_CHAN6_VOICE_PRIORITY_OFFSET (0x00000009)
-#define DAUD_CHAN7_VOICE_PRIORITY_OFFSET (0x00000008)
-#define DAUD_CHAN8_VOICE_PRIORITY_OFFSET (0x00000007)
-#define DAUD_CHAN9_VOICE_PRIORITY_OFFSET (0x00000006)
-#define DAUD_CHAN10_VOICE_PRIORITY_OFFSET (0x0000000F)
-#define DAUD_CHAN11_VOICE_PRIORITY_OFFSET (0x00000005)
-#define DAUD_CHAN12_VOICE_PRIORITY_OFFSET (0x00000004)
-#define DAUD_CHAN13_VOICE_PRIORITY_OFFSET (0x00000003)
-#define DAUD_CHAN14_VOICE_PRIORITY_OFFSET (0x00000002)
-#define DAUD_CHAN15_VOICE_PRIORITY_OFFSET (0x00000001)
-#define DAUD_CHAN16_VOICE_PRIORITY_OFFSET (0x00000000)
-
-#define DAUD_CHAN1_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN1_VOICE_PRIORITY_OFFSET)
-#define DAUD_CHAN2_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN2_VOICE_PRIORITY_OFFSET)
-#define DAUD_CHAN3_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN3_VOICE_PRIORITY_OFFSET)
-#define DAUD_CHAN4_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN4_VOICE_PRIORITY_OFFSET)
-#define DAUD_CHAN5_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN5_VOICE_PRIORITY_OFFSET)
-#define DAUD_CHAN6_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN6_VOICE_PRIORITY_OFFSET)
-#define DAUD_CHAN7_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN7_VOICE_PRIORITY_OFFSET)
-#define DAUD_CHAN8_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN8_VOICE_PRIORITY_OFFSET)
-#define DAUD_CHAN9_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN9_VOICE_PRIORITY_OFFSET)
-#define DAUD_CHAN10_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN10_VOICE_PRIORITY_OFFSET)
-#define DAUD_CHAN11_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN11_VOICE_PRIORITY_OFFSET)
-#define DAUD_CHAN12_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN12_VOICE_PRIORITY_OFFSET)
-#define DAUD_CHAN13_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN13_VOICE_PRIORITY_OFFSET)
-#define DAUD_CHAN14_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN14_VOICE_PRIORITY_OFFSET)
-#define DAUD_CHAN15_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN15_VOICE_PRIORITY_OFFSET)
-#define DAUD_CHAN16_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN16_VOICE_PRIORITY_OFFSET)
-
-#endif /* __WINE_DIRECTAUDIO_PRIORITIES_DEFINED */
-
-
/*****************************************************************************
* IDirectMusicPort interface
*/
@@ -576,6 +613,7 @@
STDMETHOD(UnloadInstrument)(THIS_ IDirectMusicDownloadedInstrument *pDownloadedInstrument) PURE; \
STDMETHOD(GetLatencyClock)(THIS_ IReferenceClock **ppClock) PURE; \
STDMETHOD(GetRunningStats)(THIS_ LPDMUS_SYNTHSTATS pStats) PURE; \
+ STDMETHOD(Compact)(THIS) PURE; \
STDMETHOD(GetCaps)(THIS_ LPDMUS_PORTCAPS pPortCaps) PURE; \
STDMETHOD(DeviceIoControl)(THIS_ DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped) PURE; \
STDMETHOD(SetNumChannelGroups)(THIS_ DWORD dwChannelGroups) PURE; \
@@ -590,26 +628,27 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicPort_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicPort_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicPort_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicPort_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicPort_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicPort_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicPort methods ***/
-#define IDirectMusicPort_PlayBuffer(p,a) (p)->lpVtbl->PlayBuffer(p,a)
-#define IDirectMusicPort_SetReadNotificationHandle(p,a) (p)->lpVtbl->SetReadNotificationHandle(p,a)
-#define IDirectMusicPort_Read(p,a) (p)->lpVtbl->Read(p,a)
-#define IDirectMusicPort_DownloadInstrument(p,a,b,c,d) (p)->lpVtbl->DownloadInstrument(p,a,b,c,d)
-#define IDirectMusicPort_UnloadInstrument(p,a) (p)->lpVtbl->UnloadInstrument(p,a)
-#define IDirectMusicPort_GetLatencyClock(p,a) (p)->lpVtbl->GetLatencyClock(p,a)
-#define IDirectMusicPort_GetRunningStats(p,a) (p)->lpVtbl->GetRunningStats(p,a)
-#define IDirectMusicPort_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
-#define IDirectMusicPort_DeviceIoControl(p,a,b,c,d,e,f,g) (p)->lpVtbl->DeviceIoControl(p,a,b,c,d,e,f,g)
-#define IDirectMusicPort_SetNumChannelGroups(p,a) (p)->lpVtbl->SetNumChannelGroups(p,a)
-#define IDirectMusicPort_GetNumChannelGroups(p,a) (p)->lpVtbl->GetNumChannelGroups(p,a)
-#define IDirectMusicPort_Activate(p,a) (p)->lpVtbl->Activate(p,a)
-#define IDirectMusicPort_SetChannelPriority(p,a,b,c) (p)->lpVtbl->SetChannelPriority(p,a,b,c)
-#define IDirectMusicPort_GetChannelPriority(p,a,b,c) (p)->lpVtbl->GetChannelPriority(p,a,b,c)
-#define IDirectMusicPort_SetDirectSound(p,a,b) (p)->lpVtbl->SetDirectSound(p,a,b)
-#define IDirectMusicPort_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c)
+#define IDirectMusicPort_PlayBuffer(p,a) (p)->lpVtbl->PlayBuffer(p,a)
+#define IDirectMusicPort_SetReadNotificationHandle(p,a) (p)->lpVtbl->SetReadNotificationHandle(p,a)
+#define IDirectMusicPort_Read(p,a) (p)->lpVtbl->Read(p,a)
+#define IDirectMusicPort_DownloadInstrument(p,a,b,c,d) (p)->lpVtbl->DownloadInstrument(p,a,b,c,d)
+#define IDirectMusicPort_UnloadInstrument(p,a) (p)->lpVtbl->UnloadInstrument(p,a)
+#define IDirectMusicPort_GetLatencyClock(p,a) (p)->lpVtbl->GetLatencyClock(p,a)
+#define IDirectMusicPort_GetRunningStats(p,a) (p)->lpVtbl->GetRunningStats(p,a)
+#define IDirectMusicPort_Compact(p) (p)->lpVtbl->Compact(p)
+#define IDirectMusicPort_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectMusicPort_DeviceIoControl(p,a,b,c,d,e,f,g) (p)->lpVtbl->DeviceIoControl(p,a,b,c,d,e,f,g)
+#define IDirectMusicPort_SetNumChannelGroups(p,a) (p)->lpVtbl->SetNumChannelGroups(p,a)
+#define IDirectMusicPort_GetNumChannelGroups(p,a) (p)->lpVtbl->GetNumChannelGroups(p,a)
+#define IDirectMusicPort_Activate(p,a) (p)->lpVtbl->Activate(p,a)
+#define IDirectMusicPort_SetChannelPriority(p,a,b,c) (p)->lpVtbl->SetChannelPriority(p,a,b,c)
+#define IDirectMusicPort_GetChannelPriority(p,a,b,c) (p)->lpVtbl->GetChannelPriority(p,a,b,c)
+#define IDirectMusicPort_SetDirectSound(p,a,b) (p)->lpVtbl->SetDirectSound(p,a,b)
+#define IDirectMusicPort_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c)
#endif
@@ -634,47 +673,41 @@
#endif
-/* this one should be defined in dsound.h too, but it's ok if it's here */
#ifndef __IReferenceClock_INTERFACE_DEFINED__
-#define __IReferenceClock_INTERFACE_DEFINED__
-
-DEFINE_GUID(IID_IReferenceClock, 0x56a86897,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70);
-
-/*****************************************************************************
- * IReferenceClock interface
- */
-#undef INTERFACE
-#define INTERFACE IReferenceClock
-#define IReferenceClock_METHODS \
- IUnknown_METHODS \
- STDMETHOD(GetTime)(THIS_ REFERENCE_TIME *pTime) PURE; \
- STDMETHOD(AdviseTime)(THIS_ REFERENCE_TIME baseTime, REFERENCE_TIME streamTime, HANDLE hEvent, DWORD *pdwAdviseCookie) PURE; \
- STDMETHOD(AdvisePeriodic)(THIS_ REFERENCE_TIME startTime, REFERENCE_TIME periodTime, HANDLE hSemaphore, DWORD *pdwAdviseCookie) PURE; \
- STDMETHOD(Unadvise)(THIS_ DWORD dwAdviseCookie) PURE;
-ICOM_DEFINE(IReferenceClock,IUnknown)
-#undef INTERFACE
-
-#ifdef COBJMACROS
-/*** IUnknown methods ***/
-#define IReferenceClock_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IReferenceClock_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IReferenceClock_Release(p) (p)->lpVtbl->Release(p)
-/*** IReferenceClock methods ***/
-#define IReferenceClock_GetTime(p,a) (p)->lpVtbl->GetTime(p,a)
-#define IReferenceClock_AdviseTime(p,a,b,c,d) (p)->lpVtbl->AdviseTime(p,a,b,c,d)
-#define IReferenceClock_AdvisePeriodic(p,a,b,c,d) (p)->lpVtbl->AdvisePeriodic(p,a,b,c,d)
-#define IReferenceClock_Unadvise(p,a) (p)->lpVtbl->Unadvise(p,a)
-#endif
-
+ #define __IReferenceClock_INTERFACE_DEFINED__
+ DEFINE_GUID(IID_IReferenceClock,0x56a86897,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70);
+
+ /*****************************************************************************
+ * IReferenceClock interface
+ */
+ #undef INTERFACE
+ #define INTERFACE IReferenceClock
+ #define IReferenceClock_METHODS \
+ IUnknown_METHODS \
+ STDMETHOD(GetTime)(THIS_ REFERENCE_TIME *pTime) PURE; \
+ STDMETHOD(AdviseTime)(THIS_ REFERENCE_TIME baseTime, REFERENCE_TIME streamTime, HANDLE hEvent, DWORD *pdwAdviseCookie) PURE; \
+ STDMETHOD(AdvisePeriodic)(THIS_ REFERENCE_TIME startTime, REFERENCE_TIME periodTime, HANDLE hSemaphore, DWORD *pdwAdviseCookie) PURE; \
+ STDMETHOD(Unadvise)(THIS_ DWORD dwAdviseCookie) PURE;
+ ICOM_DEFINE(IReferenceClock,IUnknown)
+ #undef INTERFACE
+
+ #ifdef COBJMACROS
+ /*** IUnknown methods ***/
+ #define IReferenceClock_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+ #define IReferenceClock_AddRef(p) (p)->lpVtbl->AddRef(p)
+ #define IReferenceClock_Release(p) (p)->lpVtbl->Release(p)
+ /*** IReferenceClock methods ***/
+ #define IReferenceClock_GetTime(p,a) (p)->lpVtbl->GetTime(p,a)
+ #define IReferenceClock_AdviseTime(p,a,b,c,d) (p)->lpVtbl->AdviseTime(p,a,b,c,d)
+ #define IReferenceClock_AdvisePeriodic(p,a,b,c,d) (p)->lpVtbl->AdvisePeriodic(p,a,b,c,d)
+ #define IReferenceClock_Unadvise(p,a) (p)->lpVtbl->Unadvise(p,a)
+ #endif
#endif /* __IReferenceClock_INTERFACE_DEFINED__ */
-#define DMUS_VOLUME_MAX 2000
-#define DMUS_VOLUME_MIN -20000
-
#ifdef __cplusplus
-} /* extern "C" */
-#endif /* __cplusplus */
+}
+#endif
-/*#include <poppack.h> */
+#include <poppack.h>
#endif /* __WINE_DMUSIC_CORE_H */
diff --git a/include/dmusicf.h b/include/dmusicf.h
index 9a496b5..deaba1b 100644
--- a/include/dmusicf.h
+++ b/include/dmusicf.h
@@ -1,7 +1,7 @@
/*
* DirectMusic File Formats
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,923 +21,890 @@
#ifndef __WINE_DMUSIC_FILEFORMATS_H
#define __WINE_DMUSIC_FILEFORMATS_H
+#ifndef __WINESRC__
+#include <windows.h>
+#endif /* __WINESRC__ */
+
#include <objbase.h>
#include <mmsystem.h>
+#include <pshpack8.h>
#ifdef __cplusplus
extern "C" {
#endif
+
/*****************************************************************************
* FOURCC Definitons
*/
-#define DMUS_FOURCC_GUID_CHUNK mmioFOURCC('g','u','i','d')
-#define DMUS_FOURCC_INFO_LIST mmioFOURCC('I','N','F','O')
-#define DMUS_FOURCC_UNFO_LIST mmioFOURCC('U','N','F','O')
-#define DMUS_FOURCC_UNAM_CHUNK mmioFOURCC('U','N','A','M')
-#define DMUS_FOURCC_UART_CHUNK mmioFOURCC('U','A','R','T')
-#define DMUS_FOURCC_UCOP_CHUNK mmioFOURCC('U','C','O','P')
-#define DMUS_FOURCC_USBJ_CHUNK mmioFOURCC('U','S','B','J')
-#define DMUS_FOURCC_UCMT_CHUNK mmioFOURCC('U','C','M','T')
-#define DMUS_FOURCC_CATEGORY_CHUNK mmioFOURCC('c','a','t','g')
-#define DMUS_FOURCC_VERSION_CHUNK mmioFOURCC('v','e','r','s')
+/* Common chunks */
+#define DMUS_FOURCC_GUID_CHUNK mmioFOURCC('g','u','i','d')
+#define DMUS_FOURCC_INFO_LIST mmioFOURCC('I','N','F','O')
+#define DMUS_FOURCC_UNFO_LIST mmioFOURCC('U','N','F','O')
+#define DMUS_FOURCC_UNAM_CHUNK mmioFOURCC('U','N','A','M')
+#define DMUS_FOURCC_UART_CHUNK mmioFOURCC('U','A','R','T')
+#define DMUS_FOURCC_UCOP_CHUNK mmioFOURCC('U','C','O','P')
+#define DMUS_FOURCC_USBJ_CHUNK mmioFOURCC('U','S','B','J')
+#define DMUS_FOURCC_UCMT_CHUNK mmioFOURCC('U','C','M','T')
+#define DMUS_FOURCC_CATEGORY_CHUNK mmioFOURCC('c','a','t','g')
+#define DMUS_FOURCC_VERSION_CHUNK mmioFOURCC('v','e','r','s')
+/* AudioPath */
+#define DMUS_FOURCC_AUDIOPATH_FORM mmioFOURCC('D','M','A','P')
+#define DMUS_FOURCC_PORTCONFIGS_LIST mmioFOURCC('p','c','s','l')
+#define DMUS_FOURCC_PORTCONFIG_LIST mmioFOURCC('p','c','f','l')
+#define DMUS_FOURCC_PORTCONFIG_ITEM mmioFOURCC('p','c','f','h')
+#define DMUS_FOURCC_PORTPARAMS_ITEM mmioFOURCC('p','p','r','h')
+#define DMUS_FOURCC_DSBUFFER_LIST mmioFOURCC('d','b','f','l')
+#define DMUS_FOURCC_DSBUFFATTR_ITEM mmioFOURCC('d','d','a','h')
+#define DMUS_FOURCC_PCHANNELS_LIST mmioFOURCC('p','c','h','l')
+#define DMUS_FOURCC_PCHANNELS_ITEM mmioFOURCC('p','c','h','h')
+/* Band */
+#define DMUS_FOURCC_BAND_FORM mmioFOURCC('D','M','B','D')
+#define DMUS_FOURCC_INSTRUMENTS_LIST mmioFOURCC('l','b','i','l')
+#define DMUS_FOURCC_INSTRUMENT_LIST mmioFOURCC('l','b','i','n')
+#define DMUS_FOURCC_INSTRUMENT_CHUNK mmioFOURCC('b','i','n','s')
+/* Chordmap */
+#define DMUS_FOURCC_CHORDMAP_FORM mmioFOURCC('D','M','P','R')
+#define DMUS_FOURCC_IOCHORDMAP_CHUNK mmioFOURCC('p','e','r','h')
+#define DMUS_FOURCC_SUBCHORD_CHUNK mmioFOURCC('c','h','d','t')
+#define DMUS_FOURCC_CHORDENTRY_CHUNK mmioFOURCC('c','h','e','h')
+#define DMUS_FOURCC_SUBCHORDID_CHUNK mmioFOURCC('s','b','c','n')
+#define DMUS_FOURCC_IONEXTCHORD_CHUNK mmioFOURCC('n','c','r','d')
+#define DMUS_FOURCC_NEXTCHORDSEQ_CHUNK mmioFOURCC('n','c','s','q')
+#define DMUS_FOURCC_IOSIGNPOST_CHUNK mmioFOURCC('s','p','s','h')
+#define DMUS_FOURCC_CHORDNAME_CHUNK mmioFOURCC('I','N','A','M')
+#define DMUS_FOURCC_CHORDENTRY_LIST mmioFOURCC('c','h','o','e')
+#define DMUS_FOURCC_CHORDMAP_LIST mmioFOURCC('c','m','a','p')
+#define DMUS_FOURCC_CHORD_LIST mmioFOURCC('c','h','r','d')
+#define DMUS_FOURCC_CHORDPALETTE_LIST mmioFOURCC('c','h','p','l')
+#define DMUS_FOURCC_CADENCE_LIST mmioFOURCC('c','a','d','e')
+#define DMUS_FOURCC_SIGNPOSTITEM_LIST mmioFOURCC('s','p','s','t')
+#define DMUS_FOURCC_SIGNPOST_LIST mmioFOURCC('s','p','s','q')
+/* Container */
+#define DMUS_FOURCC_CONTAINER_FORM mmioFOURCC('D','M','C','N')
+#define DMUS_FOURCC_CONTAINER_CHUNK mmioFOURCC('c','o','n','h')
+#define DMUS_FOURCC_CONTAINED_ALIAS_CHUNK mmioFOURCC('c','o','b','a')
+#define DMUS_FOURCC_CONTAINED_OBJECT_CHUNK mmioFOURCC('c','o','b','h')
+#define DMUS_FOURCC_CONTAINED_OBJECTS_LIST mmioFOURCC('c','o','s','l')
+#define DMUS_FOURCC_CONTAINED_OBJECT_LIST mmioFOURCC('c','o','b','l')
+/* DirectSound Buffer Configuration */
+#define DMUS_FOURCC_DSBC_FORM mmioFOURCC('D','S','B','C')
+#define DMUS_FOURCC_DSBD_CHUNK mmioFOURCC('d','s','b','d')
+#define DMUS_FOURCC_BSID_CHUNK mmioFOURCC('b','s','i','d')
+#define DMUS_FOURCC_DS3D_CHUNK mmioFOURCC('d','s','3','d')
+#define DMUS_FOURCC_DSBC_LIST mmioFOURCC('f','x','l','s')
+/* Effects */
+#define DMUS_FOURCC_DSFX_FORM mmioFOURCC('D','S','F','X')
+#define DMUS_FOURCC_DSFX_CHUNK mmioFOURCC('f','x','h','r')
+#define DMUS_FOURCC_DSFX_DATA mmioFOURCC('d','a','t','a')
+/* Reference */
+#define DMUS_FOURCC_REF_LIST mmioFOURCC('D','M','R','F')
+#define DMUS_FOURCC_REF_CHUNK mmioFOURCC('r','e','f','h')
+#define DMUS_FOURCC_DATE_CHUNK mmioFOURCC('d','a','t','e')
+#define DMUS_FOURCC_NAME_CHUNK mmioFOURCC('n','a','m','e')
+#define DMUS_FOURCC_FILE_CHUNK mmioFOURCC('f','i','l','e')
+/* Script */
+#define DMUS_FOURCC_SCRIPT_FORM mmioFOURCC('D','M','S','C')
+#define DMUS_FOURCC_SCRIPT_CHUNK mmioFOURCC('s','c','h','d')
+#define DMUS_FOURCC_SCRIPTVERSION_CHUNK mmioFOURCC('s','c','v','e')
+#define DMUS_FOURCC_SCRIPTLANGUAGE_CHUNK mmioFOURCC('s','c','l','a')
+#define DMUS_FOURCC_SCRIPTSOURCE_CHUNK mmioFOURCC('s','c','s','r')
+/* Segment */
+#define DMUS_FOURCC_SEGMENT_FORM mmioFOURCC('D','M','S','G')
+#define DMUS_FOURCC_SEGMENT_CHUNK mmioFOURCC('s','e','g','h')
+#define DMUS_FOURCC_TRACK_LIST mmioFOURCC('t','r','k','l')
+/* Style chunks */
+#define DMUS_FOURCC_STYLE_FORM mmioFOURCC('D','M','S','T')
+#define DMUS_FOURCC_STYLE_CHUNK mmioFOURCC('s','t','y','h')
+#define DMUS_FOURCC_PART_LIST mmioFOURCC('p','a','r','t')
+#define DMUS_FOURCC_PART_CHUNK mmioFOURCC('p','r','t','h')
+#define DMUS_FOURCC_NOTE_CHUNK mmioFOURCC('n','o','t','e')
+#define DMUS_FOURCC_CURVE_CHUNK mmioFOURCC('c','r','v','e')
+#define DMUS_FOURCC_MARKER_CHUNK mmioFOURCC('m','r','k','r')
+#define DMUS_FOURCC_RESOLUTION_CHUNK mmioFOURCC('r','s','l','n')
+#define DMUS_FOURCC_ANTICIPATION_CHUNK mmioFOURCC('a','n','p','n')
+#define DMUS_FOURCC_PATTERN_LIST mmioFOURCC('p','t','t','n')
+#define DMUS_FOURCC_PATTERN_CHUNK mmioFOURCC('p','t','n','h')
+#define DMUS_FOURCC_RHYTHM_CHUNK mmioFOURCC('r','h','t','m')
+#define DMUS_FOURCC_PARTREF_LIST mmioFOURCC('p','r','e','f')
+#define DMUS_FOURCC_PARTREF_CHUNK mmioFOURCC('p','r','f','c')
+#define DMUS_FOURCC_STYLE_PERS_REF_LIST mmioFOURCC('p','r','r','f')
+#define DMUS_FOURCC_MOTIFSETTINGS_CHUNK mmioFOURCC('m','t','f','s')
+/* Tool */
+#define DMUS_FOURCC_TOOL_FORM mmioFOURCC('D','M','T','L')
+#define DMUS_FOURCC_TOOL_CHUNK mmioFOURCC('t','o','l','h')
+/* ToolGraph */
+#define DMUS_FOURCC_TOOLGRAPH_FORM mmioFOURCC('D','M','T','G')
+#define DMUS_FOURCC_TOOL_LIST mmioFOURCC('t','o','l','l')
+/* Track */
+#define DMUS_FOURCC_TRACK_FORM mmioFOURCC('D','M','T','K')
+#define DMUS_FOURCC_TRACK_CHUNK mmioFOURCC('t','r','k','h')
+#define DMUS_FOURCC_TRACK_EXTRAS_CHUNK mmioFOURCC('t','r','k','x')
+/* Band Track */
+#define DMUS_FOURCC_BANDTRACK_FORM mmioFOURCC('D','M','B','T')
+#define DMUS_FOURCC_BANDTRACK_CHUNK mmioFOURCC('b','d','t','h')
+#define DMUS_FOURCC_BANDS_LIST mmioFOURCC('l','b','d','l')
+#define DMUS_FOURCC_BAND_LIST mmioFOURCC('l','b','n','d')
+#define DMUS_FOURCC_BANDITEM_CHUNK mmioFOURCC('b','d','i','h')
+#define DMUS_FOURCC_BANDITEM_CHUNK2 mmioFOURCC('b','d','2','h')
+/* Chord Track */
+#define DMUS_FOURCC_CHORDTRACK_LIST mmioFOURCC('c','o','r','d')
+#define DMUS_FOURCC_CHORDTRACKHEADER_CHUNK mmioFOURCC('c','r','d','h')
+#define DMUS_FOURCC_CHORDTRACKBODY_CHUNK mmioFOURCC('c','r','d','b')
+/* Chordmap Track */
+#define DMUS_FOURCC_PERS_TRACK_LIST mmioFOURCC('p','f','t','r')
+#define DMUS_FOURCC_PERS_REF_LIST mmioFOURCC('p','f','r','f')
+#define DMUS_FOURCC_TIME_STAMP_CHUNK mmioFOURCC('s','t','m','p')
+/* Command Track */
+#define DMUS_FOURCC_COMMANDTRACK_CHUNK mmioFOURCC('c','m','n','d')
+/* Lyrics Track */
+#define DMUS_FOURCC_LYRICSTRACK_LIST mmioFOURCC('l','y','r','t')
+#define DMUS_FOURCC_LYRICSTRACKEVENTS_LIST mmioFOURCC('l','y','r','l')
+#define DMUS_FOURCC_LYRICSTRACKEVENT_LIST mmioFOURCC('l','y','r','e')
+#define DMUS_FOURCC_LYRICSTRACKEVENTHEADER_CHUNK mmioFOURCC('l','y','r','h')
+#define DMUS_FOURCC_LYRICSTRACKEVENTTEXT_CHUNK mmioFOURCC('l','y','r','n')
+/* Marker Track */
+#define DMUS_FOURCC_MARKERTRACK_LIST mmioFOURCC('M','A','R','K')
+#define DMUS_FOURCC_VALIDSTART_CHUNK mmioFOURCC('v','a','l','s')
+#define DMUS_FOURCC_PLAYMARKER_CHUNK mmioFOURCC('p','l','a','y')
+/* Mute Track */
+#define DMUS_FOURCC_MUTE_CHUNK mmioFOURCC('m','u','t','e')
+/* Parameter Control Track */
+#define DMUS_FOURCC_PARAMCONTROLTRACK_TRACK_LIST mmioFOURCC('p','r','m','t')
+#define DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_LIST mmioFOURCC('p','r','o','l')
+#define DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_CHUNK mmioFOURCC('p','r','o','h')
+#define DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_LIST mmioFOURCC('p','r','p','l')
+#define DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_CHUNK mmioFOURCC('p','r','p','h')
+#define DMUS_FOURCC_PARAMCONTROLTRACK_CURVES_CHUNK mmioFOURCC('p','r','c','c')
+/* Pattern Track */
+#define DMUS_FOURCC_PATTERN_FORM mmioFOURCC('D','M','P','T')
+/* Script Track */
+#define DMUS_FOURCC_SCRIPTTRACK_LIST mmioFOURCC('s','c','r','t')
+#define DMUS_FOURCC_SCRIPTTRACKEVENTS_LIST mmioFOURCC('s','c','r','l')
+#define DMUS_FOURCC_SCRIPTTRACKEVENT_LIST mmioFOURCC('s','c','r','e')
+#define DMUS_FOURCC_SCRIPTTRACKEVENTHEADER_CHUNK mmioFOURCC('s','c','r','h')
+#define DMUS_FOURCC_SCRIPTTRACKEVENTNAME_CHUNK mmioFOURCC('s','c','r','n')
+/* Segment Trgigger Track */
+#define DMUS_FOURCC_SEGTRACK_LIST mmioFOURCC('s','e','g','t')
+#define DMUS_FOURCC_SEGTRACK_CHUNK mmioFOURCC('s','g','t','h')
+#define DMUS_FOURCC_SEGMENTS_LIST mmioFOURCC('l','s','g','l')
+#define DMUS_FOURCC_SEGMENT_LIST mmioFOURCC('l','s','e','g')
+#define DMUS_FOURCC_SEGMENTITEM_CHUNK mmioFOURCC('s','g','i','h')
+#define DMUS_FOURCC_SEGMENTITEMNAME_CHUNK mmioFOURCC('s','n','a','m')
+/* Sequence Track */
+#define DMUS_FOURCC_SEQ_TRACK mmioFOURCC('s','e','q','t')
+#define DMUS_FOURCC_SEQ_LIST mmioFOURCC('e','v','t','l')
+#define DMUS_FOURCC_CURVE_LIST mmioFOURCC('c','u','r','l')
+/* Signpost Track */
+#define DMUS_FOURCC_SIGNPOST_TRACK_CHUNK mmioFOURCC('s','g','n','p')
+/* Style Track */
+#define DMUS_FOURCC_STYLE_TRACK_LIST mmioFOURCC('s','t','t','r')
+#define DMUS_FOURCC_STYLE_REF_LIST mmioFOURCC('s','t','r','f')
+/* SysEx Track */
+#define DMUS_FOURCC_SYSEX_TRACK mmioFOURCC('s','y','e','x')
+/* Tempo Track */
+#define DMUS_FOURCC_TEMPO_TRACK mmioFOURCC('t','e','t','r')
+/* Time Signature Track */
+#define DMUS_FOURCC_TIMESIGNATURE_TRACK mmioFOURCC('t','i','m','s')
+#define DMUS_FOURCC_TIMESIGTRACK_LIST mmioFOURCC('T','I','M','S')
+#define DMUS_FOURCC_TIMESIG_CHUNK DMUS_FOURCC_TIMESIGNATURE_TRACK
+/* Wave Track */
+#define DMUS_FOURCC_WAVETRACK_LIST mmioFOURCC('w','a','v','t')
+#define DMUS_FOURCC_WAVETRACK_CHUNK mmioFOURCC('w','a','t','h')
+#define DMUS_FOURCC_WAVEPART_LIST mmioFOURCC('w','a','v','p')
+#define DMUS_FOURCC_WAVEPART_CHUNK mmioFOURCC('w','a','p','h')
+#define DMUS_FOURCC_WAVEITEM_LIST mmioFOURCC('w','a','v','i')
+#define DMUS_FOURCC_WAVE_LIST mmioFOURCC('w','a','v','e')
+#define DMUS_FOURCC_WAVEITEM_CHUNK mmioFOURCC('w','a','i','h')
+/* Wave Header */
+#define DMUS_FOURCC_WAVEHEADER_CHUNK mmioFOURCC('w','a','v','h')
-#define DMUS_FOURCC_STYLE_FORM mmioFOURCC('D','M','S','T')
-#define DMUS_FOURCC_STYLE_CHUNK mmioFOURCC('s','t','y','h')
-#define DMUS_FOURCC_PART_LIST mmioFOURCC('p','a','r','t')
-#define DMUS_FOURCC_PART_CHUNK mmioFOURCC('p','r','t','h')
-#define DMUS_FOURCC_NOTE_CHUNK mmioFOURCC('n','o','t','e')
-#define DMUS_FOURCC_CURVE_CHUNK mmioFOURCC('c','r','v','e')
-#define DMUS_FOURCC_MARKER_CHUNK mmioFOURCC('m','r','k','r')
-#define DMUS_FOURCC_RESOLUTION_CHUNK mmioFOURCC('r','s','l','n')
-#define DMUS_FOURCC_ANTICIPATION_CHUNK mmioFOURCC('a','n','p','n')
-#define DMUS_FOURCC_PATTERN_LIST mmioFOURCC('p','t','t','n')
-#define DMUS_FOURCC_PATTERN_CHUNK mmioFOURCC('p','t','n','h')
-#define DMUS_FOURCC_RHYTHM_CHUNK mmioFOURCC('r','h','t','m')
-#define DMUS_FOURCC_PARTREF_LIST mmioFOURCC('p','r','e','f')
-#define DMUS_FOURCC_PARTREF_CHUNK mmioFOURCC('p','r','f','c')
-#define DMUS_FOURCC_STYLE_PERS_REF_LIST mmioFOURCC('p','r','r','f')
-#define DMUS_FOURCC_MOTIFSETTINGS_CHUNK mmioFOURCC('m','t','f','s')
-
-#define DMUS_FOURCC_PATTERN_FORM mmioFOURCC('D','M','P','T')
-
-#define DMUS_FOURCC_CHORDTRACK_LIST mmioFOURCC('c','o','r','d')
-#define DMUS_FOURCC_CHORDTRACKHEADER_CHUNK mmioFOURCC('c','r','d','h')
-#define DMUS_FOURCC_CHORDTRACKBODY_CHUNK mmioFOURCC('c','r','d','b')
-
-#define DMUS_FOURCC_COMMANDTRACK_CHUNK mmioFOURCC('c','m','n','d')
-
-#define DMUS_FOURCC_TOOLGRAPH_FORM mmioFOURCC('D','M','T','G')
-#define DMUS_FOURCC_TOOL_LIST mmioFOURCC('t','o','l','l')
-#define DMUS_FOURCC_TOOL_FORM mmioFOURCC('D','M','T','L')
-#define DMUS_FOURCC_TOOL_CHUNK mmioFOURCC('t','o','l','h')
-
-#define DMUS_FOURCC_AUDIOPATH_FORM mmioFOURCC('D','M','A','P')
-
-#define DMUS_FOURCC_PORTCONFIGS_LIST mmioFOURCC('p','c','s','l')
-#define DMUS_FOURCC_PORTCONFIG_LIST mmioFOURCC('p','c','f','l')
-#define DMUS_FOURCC_PORTCONFIG_ITEM mmioFOURCC('p','c','f','h')
-#define DMUS_FOURCC_PORTPARAMS_ITEM mmioFOURCC('p','p','r','h')
-#define DMUS_FOURCC_DSBUFFER_LIST mmioFOURCC('d','b','f','l')
-#define DMUS_FOURCC_DSBUFFATTR_ITEM mmioFOURCC('d','d','a','h')
-#define DMUS_FOURCC_PCHANNELS_LIST mmioFOURCC('p','c','h','l')
-#define DMUS_FOURCC_PCHANNELS_ITEM mmioFOURCC('p','c','h','h')
-
-#define DMUS_FOURCC_BANDTRACK_FORM mmioFOURCC('D','M','B','T')
-#define DMUS_FOURCC_BANDTRACK_CHUNK mmioFOURCC('b','d','t','h')
-#define DMUS_FOURCC_BANDS_LIST mmioFOURCC('l','b','d','l')
-#define DMUS_FOURCC_BAND_LIST mmioFOURCC('l','b','n','d')
-#define DMUS_FOURCC_BANDITEM_CHUNK mmioFOURCC('b','d','i','h')
-#define DMUS_FOURCC_BANDITEM_CHUNK2 mmioFOURCC('b','d','2','h')
-
-#define DMUS_FOURCC_BAND_FORM mmioFOURCC('D','M','B','D')
-#define DMUS_FOURCC_INSTRUMENTS_LIST mmioFOURCC('l','b','i','l')
-#define DMUS_FOURCC_INSTRUMENT_LIST mmioFOURCC('l','b','i','n')
-#define DMUS_FOURCC_INSTRUMENT_CHUNK mmioFOURCC('b','i','n','s')
-
-#define DMUS_FOURCC_WAVEHEADER_CHUNK mmioFOURCC('w','a','v','h')
-
-#define DMUS_FOURCC_WAVETRACK_LIST mmioFOURCC('w','a','v','t')
-#define DMUS_FOURCC_WAVETRACK_CHUNK mmioFOURCC('w','a','t','h')
-#define DMUS_FOURCC_WAVEPART_LIST mmioFOURCC('w','a','v','p')
-#define DMUS_FOURCC_WAVEPART_CHUNK mmioFOURCC('w','a','p','h')
-#define DMUS_FOURCC_WAVEITEM_LIST mmioFOURCC('w','a','v','i')
-#define DMUS_FOURCC_WAVE_LIST mmioFOURCC('w','a','v','e')
-#define DMUS_FOURCC_WAVEITEM_CHUNK mmioFOURCC('w','a','i','h')
-
-#define DMUS_FOURCC_CONTAINER_FORM mmioFOURCC('D','M','C','N')
-#define DMUS_FOURCC_CONTAINER_CHUNK mmioFOURCC('c','o','n','h')
-#define DMUS_FOURCC_CONTAINED_ALIAS_CHUNK mmioFOURCC('c','o','b','a')
-#define DMUS_FOURCC_CONTAINED_OBJECT_CHUNK mmioFOURCC('c','o','b','h')
-#define DMUS_FOURCC_CONTAINED_OBJECTS_LIST mmioFOURCC('c','o','s','l')
-#define DMUS_FOURCC_CONTAINED_OBJECT_LIST mmioFOURCC('c','o','b','l')
-
-#define DMUS_FOURCC_SEGMENT_FORM mmioFOURCC('D','M','S','G')
-#define DMUS_FOURCC_SEGMENT_CHUNK mmioFOURCC('s','e','g','h')
-#define DMUS_FOURCC_TRACK_LIST mmioFOURCC('t','r','k','l')
-#define DMUS_FOURCC_TRACK_FORM mmioFOURCC('D','M','T','K')
-#define DMUS_FOURCC_TRACK_CHUNK mmioFOURCC('t','r','k','h')
-#define DMUS_FOURCC_TRACK_EXTRAS_CHUNK mmioFOURCC('t','r','k','x')
-
-#define DMUS_FOURCC_SONG_FORM mmioFOURCC('D','M','S','O')
-#define DMUS_FOURCC_SONG_CHUNK mmioFOURCC('s','n','g','h')
-#define DMUS_FOURCC_SONGSEGMENTS_LIST mmioFOURCC('s','e','g','l')
-#define DMUS_FOURCC_SONGSEGMENT_LIST mmioFOURCC('s','s','g','l')
-#define DMUS_FOURCC_TOOLGRAPHS_LIST mmioFOURCC('t','l','g','l')
-#define DMUS_FOURCC_SEGREFS_LIST mmioFOURCC('s','r','s','l')
-#define DMUS_FOURCC_SEGREF_LIST mmioFOURCC('s','g','r','l')
-#define DMUS_FOURCC_SEGREF_CHUNK mmioFOURCC('s','g','r','h')
-#define DMUS_FOURCC_SEGTRANS_CHUNK mmioFOURCC('s','t','r','h')
-#define DMUS_FOURCC_TRACKREFS_LIST mmioFOURCC('t','r','s','l')
-#define DMUS_FOURCC_TRACKREF_LIST mmioFOURCC('t','k','r','l')
-#define DMUS_FOURCC_TRACKREF_CHUNK mmioFOURCC('t','k','r','h')
-
-#define DMUS_FOURCC_REF_LIST mmioFOURCC('D','M','R','F')
-#define DMUS_FOURCC_REF_CHUNK mmioFOURCC('r','e','f','h')
-#define DMUS_FOURCC_DATE_CHUNK mmioFOURCC('d','a','t','e')
-#define DMUS_FOURCC_NAME_CHUNK mmioFOURCC('n','a','m','e')
-#define DMUS_FOURCC_FILE_CHUNK mmioFOURCC('f','i','l','e')
-
-#define DMUS_FOURCC_CHORDMAP_FORM mmioFOURCC('D','M','P','R')
-#define DMUS_FOURCC_IOCHORDMAP_CHUNK mmioFOURCC('p','e','r','h')
-#define DMUS_FOURCC_SUBCHORD_CHUNK mmioFOURCC('c','h','d','t')
-#define DMUS_FOURCC_CHORDENTRY_CHUNK mmioFOURCC('c','h','e','h')
-#define DMUS_FOURCC_SUBCHORDID_CHUNK mmioFOURCC('s','b','c','n')
-#define DMUS_FOURCC_IONEXTCHORD_CHUNK mmioFOURCC('n','c','r','d')
-#define DMUS_FOURCC_NEXTCHORDSEQ_CHUNK mmioFOURCC('n','c','s','q')
-#define DMUS_FOURCC_IOSIGNPOST_CHUNK mmioFOURCC('s','p','s','h')
-#define DMUS_FOURCC_CHORDNAME_CHUNK mmioFOURCC('I','N','A','M')
-
-#define DMUS_FOURCC_CHORDENTRY_LIST mmioFOURCC('c','h','o','e')
-#define DMUS_FOURCC_CHORDMAP_LIST mmioFOURCC('c','m','a','p')
-#define DMUS_FOURCC_CHORD_LIST mmioFOURCC('c','h','r','d')
-#define DMUS_FOURCC_CHORDPALETTE_LIST mmioFOURCC('c','h','p','l')
-#define DMUS_FOURCC_CADENCE_LIST mmioFOURCC('c','a','d','e')
-#define DMUS_FOURCC_SIGNPOSTITEM_LIST mmioFOURCC('s','p','s','t')
-
-#define DMUS_FOURCC_SIGNPOST_LIST mmioFOURCC('s','p','s','q')
-
-#define DMUS_FOURCC_SCRIPT_FORM mmioFOURCC('D','M','S','C')
-#define DMUS_FOURCC_SCRIPT_CHUNK mmioFOURCC('s','c','h','d')
-#define DMUS_FOURCC_SCRIPTVERSION_CHUNK mmioFOURCC('s','c','v','e')
-#define DMUS_FOURCC_SCRIPTLANGUAGE_CHUNK mmioFOURCC('s','c','l','a')
-#define DMUS_FOURCC_SCRIPTSOURCE_CHUNK mmioFOURCC('s','c','s','r')
-
-#define DMUS_FOURCC_SIGNPOST_TRACK_CHUNK mmioFOURCC('s','g','n','p')
-
-#define DMUS_FOURCC_MUTE_CHUNK mmioFOURCC('m','u','t','e')
-
-#define DMUS_FOURCC_TIME_STAMP_CHUNK mmioFOURCC('s','t','m','p')
-
-#define DMUS_FOURCC_STYLE_TRACK_LIST mmioFOURCC('s','t','t','r')
-#define DMUS_FOURCC_STYLE_REF_LIST mmioFOURCC('s','t','r','f')
-
-#define DMUS_FOURCC_PERS_TRACK_LIST mmioFOURCC('p','f','t','r')
-#define DMUS_FOURCC_PERS_REF_LIST mmioFOURCC('p','f','r','f')
-
-#define DMUS_FOURCC_TEMPO_TRACK mmioFOURCC('t','e','t','r')
-
-#define DMUS_FOURCC_SEQ_TRACK mmioFOURCC('s','e','q','t')
-#define DMUS_FOURCC_SEQ_LIST mmioFOURCC('e','v','t','l')
-#define DMUS_FOURCC_CURVE_LIST mmioFOURCC('c','u','r','l')
-
-#define DMUS_FOURCC_SYSEX_TRACK mmioFOURCC('s','y','e','x')
-
-#define DMUS_FOURCC_TIMESIGNATURE_TRACK mmioFOURCC('t','i','m','s')
-
-#define DMUS_FOURCC_TIMESIGTRACK_LIST mmioFOURCC('T','I','M','S')
-#define DMUS_FOURCC_TIMESIG_CHUNK DMUS_FOURCC_TIMESIGNATURE_TRACK
-
-#define DMUS_FOURCC_MARKERTRACK_LIST mmioFOURCC('M','A','R','K')
-#define DMUS_FOURCC_VALIDSTART_CHUNK mmioFOURCC('v','a','l','s')
-#define DMUS_FOURCC_PLAYMARKER_CHUNK mmioFOURCC('p','l','a','y')
-
-#define DMUS_FOURCC_SEGTRACK_LIST mmioFOURCC('s','e','g','t')
-#define DMUS_FOURCC_SEGTRACK_CHUNK mmioFOURCC('s','g','t','h')
-#define DMUS_FOURCC_SEGMENTS_LIST mmioFOURCC('l','s','g','l')
-#define DMUS_FOURCC_SEGMENT_LIST mmioFOURCC('l','s','e','g')
-#define DMUS_FOURCC_SEGMENTITEM_CHUNK mmioFOURCC('s','g','i','h')
-#define DMUS_FOURCC_SEGMENTITEMNAME_CHUNK mmioFOURCC('s','n','a','m')
-
-#define DMUS_FOURCC_SCRIPTTRACK_LIST mmioFOURCC('s','c','r','t')
-#define DMUS_FOURCC_SCRIPTTRACKEVENTS_LIST mmioFOURCC('s','c','r','l')
-#define DMUS_FOURCC_SCRIPTTRACKEVENT_LIST mmioFOURCC('s','c','r','e')
-#define DMUS_FOURCC_SCRIPTTRACKEVENTHEADER_CHUNK mmioFOURCC('s','c','r','h')
-#define DMUS_FOURCC_SCRIPTTRACKEVENTNAME_CHUNK mmioFOURCC('s','c','r','n')
-
-#define DMUS_FOURCC_LYRICSTRACK_LIST mmioFOURCC('l','y','r','t')
-#define DMUS_FOURCC_LYRICSTRACKEVENTS_LIST mmioFOURCC('l','y','r','l')
-#define DMUS_FOURCC_LYRICSTRACKEVENT_LIST mmioFOURCC('l','y','r','e')
-#define DMUS_FOURCC_LYRICSTRACKEVENTHEADER_CHUNK mmioFOURCC('l','y','r','h')
-#define DMUS_FOURCC_LYRICSTRACKEVENTTEXT_CHUNK mmioFOURCC('l','y','r','n')
-
-#define DMUS_FOURCC_PARAMCONTROLTRACK_TRACK_LIST mmioFOURCC('p','r','m','t')
-#define DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_LIST mmioFOURCC('p','r','o','l')
-#define DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_CHUNK mmioFOURCC('p','r','o','h')
-#define DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_LIST mmioFOURCC('p','r','p','l')
-#define DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_CHUNK mmioFOURCC('p','r','p','h')
-#define DMUS_FOURCC_PARAMCONTROLTRACK_CURVES_CHUNK mmioFOURCC('p','r','c','c')
-
-#define DMUS_FOURCC_MELODYFORM_TRACK_LIST mmioFOURCC('m','f','r','m')
-#define DMUS_FOURCC_MELODYFORM_HEADER_CHUNK mmioFOURCC('m','l','f','h')
-#define DMUS_FOURCC_MELODYFORM_BODY_CHUNK mmioFOURCC('m','l','f','b')
-
-#define DMUS_FOURCC_DSBC_FORM mmioFOURCC('D','S','B','C')
-#define DMUS_FOURCC_DSBD_CHUNK mmioFOURCC('d','s','b','d')
-#define DMUS_FOURCC_BSID_CHUNK mmioFOURCC('b','s','i','d')
-#define DMUS_FOURCC_DS3D_CHUNK mmioFOURCC('d','s','3','d')
-#define DMUS_FOURCC_DSBC_LIST mmioFOURCC('f','x','l','s')
-#define DMUS_FOURCC_DSFX_FORM mmioFOURCC('D','S','F','X')
-#define DMUS_FOURCC_DSFX_CHUNK mmioFOURCC('f','x','h','r')
-#define DMUS_FOURCC_DSFX_DATA mmioFOURCC('d','a','t','a')
/*****************************************************************************
- * Definitons
+ * Flags
*/
-#define DMUS_VARIATIONF_MAJOR 0x0000007F
-#define DMUS_VARIATIONF_MINOR 0x00003F80
-#define DMUS_VARIATIONF_OTHER 0x001FC000
-#define DMUS_VARIATIONF_ROOT_SCALE 0x00200000
-#define DMUS_VARIATIONF_ROOT_FLAT 0x00400000
-#define DMUS_VARIATIONF_ROOT_SHARP 0x00800000
-#define DMUS_VARIATIONF_TYPE_TRIAD 0x01000000
-#define DMUS_VARIATIONF_TYPE_6AND7 0x02000000
-#define DMUS_VARIATIONF_TYPE_COMPLEX 0x04000000
-#define DMUS_VARIATIONF_DEST_TO1 0x08000000
-#define DMUS_VARIATIONF_DEST_TO5 0x10000000
-#define DMUS_VARIATIONF_DEST_OTHER 0x40000000
-#define DMUS_VARIATIONF_MODES 0xE0000000
-#define DMUS_VARIATIONF_MODES_EX (0x20000000 | 0x80000000)
-#define DMUS_VARIATIONF_IMA25_MODE 0x00000000
-#define DMUS_VARIATIONF_DMUS_MODE 0x20000000
+#define DMUS_BUFFERF_SHARED 0x1
+#define DMUS_BUFFERF_DEFINED 0x2
+#define DMUS_BUFFERF_MIXIN 0x8
-#define DMUS_PARTF_USE_MARKERS 0x1
-#define DMUS_PARTF_ALIGN_CHORDS 0x2
-#define DMUS_MARKERF_START 0x1
-#define DMUS_MARKERF_STOP 0x2
-#define DMUS_MARKERF_CHORD_ALIGN 0x4
-#define DMUS_PATTERNF_PERSIST_CONTROL 0x1
+#define DMUS_CHORDMAPF_VERSION8 0x1
-#define DMUS_PORTCONFIGF_DRUMSON10 1
-#define DMUS_PORTCONFIGF_USEDEFAULT 2
+#define DMUS_CONTAINED_OBJF_KEEP 0x1
-#define DMUS_BUFFERF_SHARED 1
-#define DMUS_BUFFERF_DEFINED 2
-#define DMUS_BUFFERF_MIXIN 8
+#define DMUS_CONTAINER_NOLOADS 0x2
-#define DMUS_IO_INST_PATCH 1
-#define DMUS_IO_INST_BANKSELECT 2
-#define DMUS_IO_INST_ASSIGN_PATCH 8
-#define DMUS_IO_INST_NOTERANGES 16
-#define DMUS_IO_INST_PAN 32
-#define DMUS_IO_INST_VOLUME 64
-#define DMUS_IO_INST_TRANSPOSE 128
-#define DMUS_IO_INST_GM 256
-#define DMUS_IO_INST_GS 512
-#define DMUS_IO_INST_XG 1024
-#define DMUS_IO_INST_CHANNEL_PRIORITY 2048
-#define DMUS_IO_INST_USE_DEFAULT_GM_SET 4096
-#define DMUS_IO_INST_PITCHBENDRANGE 8192
+#define DMUS_IO_INST_PATCH 0x0001
+#define DMUS_IO_INST_BANKSELECT 0x0002
+#define DMUS_IO_INST_ASSIGN_PATCH 0x0008
+#define DMUS_IO_INST_NOTERANGES 0x0010
+#define DMUS_IO_INST_PAN 0x0020
+#define DMUS_IO_INST_VOLUME 0x0040
+#define DMUS_IO_INST_TRANSPOSE 0x0080
+#define DMUS_IO_INST_GM 0x0100
+#define DMUS_IO_INST_GS 0x0200
+#define DMUS_IO_INST_XG 0x0400
+#define DMUS_IO_INST_CHANNEL_PRIORITY 0x0800
+#define DMUS_IO_INST_USE_DEFAULT_GM_SET 0x1000
+#define DMUS_IO_INST_PITCHBENDRANGE 0x2000
-#define DMUS_WAVETRACKF_SYNC_VAR 0x1
-#define DMUS_WAVETRACKF_PERSIST_CONTROL 0x2
+#define DMUS_IO_SCRIPTTRACKF_PREPARE 0x1
+#define DMUS_IO_SCRIPTTRACKF_QUEUE 0x2
+#define DMUS_IO_SCRIPTTRACKF_ATTIME 0x4
-#define DMUS_CONTAINED_OBJF_KEEP 1
-#define DMUS_CONTAINER_NOLOADS 2
+#define DMUS_MARKERF_START 0x1
+#define DMUS_MARKERF_STOP 0x2
+#define DMUS_MARKERF_CHORD_ALIGN 0x4
-#define DMUS_SEGIOF_REFLENGTH 1
+#define DMUS_PATTERNF_PERSIST_CONTROL 0x1
-#define DMUS_SONG_MAXSEGID 0x7FFFFFFF
-#define DMUS_SONG_ANYSEG 0x80000000
-#define DMUS_SONG_NOSEG 0xFFFFFFFF
-#define DMUS_SONG_NOFROMSEG 0x80000001
+#define DMUS_PARTF_USE_MARKERS 0x1
+#define DMUS_PARTF_ALIGN_CHORDS 0x2
-#define DMUS_SIGNPOSTF_A 1
-#define DMUS_SIGNPOSTF_B 2
-#define DMUS_SIGNPOSTF_C 4
-#define DMUS_SIGNPOSTF_D 8
-#define DMUS_SIGNPOSTF_E 0x10
-#define DMUS_SIGNPOSTF_F 0x20
-#define DMUS_SIGNPOSTF_LETTER (DMUS_SIGNPOSTF_A | DMUS_SIGNPOSTF_B | DMUS_SIGNPOSTF_C | DMUS_SIGNPOSTF_D | DMUS_SIGNPOSTF_E | DMUS_SIGNPOSTF_F)
-#define DMUS_SIGNPOSTF_1 0x100
-#define DMUS_SIGNPOSTF_2 0x200
-#define DMUS_SIGNPOSTF_3 0x400
-#define DMUS_SIGNPOSTF_4 0x800
-#define DMUS_SIGNPOSTF_5 0x1000
-#define DMUS_SIGNPOSTF_6 0x2000
-#define DMUS_SIGNPOSTF_7 0x4000
-#define DMUS_SIGNPOSTF_ROOT (DMUS_SIGNPOSTF_1 | DMUS_SIGNPOSTF_2 | DMUS_SIGNPOSTF_3 | DMUS_SIGNPOSTF_4 | DMUS_SIGNPOSTF_5 | DMUS_SIGNPOSTF_6 | DMUS_SIGNPOSTF_7)
-#define DMUS_SIGNPOSTF_CADENCE 0x8000
+#define DMUS_PORTCONFIGF_DRUMSON10 0x1
+#define DMUS_PORTCONFIGF_USEDEFAULT 0x2
-#define DMUS_CHORDMAPF_VERSION8 1
+#define DMUS_SCRIPTIOF_LOAD_ALL_CONTENT 0x1
+#define DMUS_SCRIPTIOF_DOWNLOAD_ALL_SEGMENTS 0x2
-#define DMUS_SPOSTCADENCEF_1 2
-#define DMUS_SPOSTCADENCEF_2 4
+#define DMUS_SEGIOF_REFLENGTH 0x1
+#define DMUS_SEGIOF_CLOCKTIME 0x2
+
+#define DMUS_SEGMENTTRACKF_MOTIF 0x1
+
+/* Song flags; MS doesn't support this in DX 9.0 anymore */
+#define DMUS_SONG_MAXSEGID 0x7FFFFFFF
+#define DMUS_SONG_ANYSEG 0x80000000
+#define DMUS_SONG_NOSEG 0xFFFFFFFF
+#define DMUS_SONG_NOFROMSEG 0x80000001
+
+#define DMUS_SIGNPOSTF_A 0x0001
+#define DMUS_SIGNPOSTF_B 0x0002
+#define DMUS_SIGNPOSTF_C 0x0004
+#define DMUS_SIGNPOSTF_D 0x0008
+#define DMUS_SIGNPOSTF_E 0x0010
+#define DMUS_SIGNPOSTF_F 0x0020
+#define DMUS_SIGNPOSTF_1 0x0100
+#define DMUS_SIGNPOSTF_2 0x0200
+#define DMUS_SIGNPOSTF_3 0x0400
+#define DMUS_SIGNPOSTF_4 0x0800
+#define DMUS_SIGNPOSTF_5 0x1000
+#define DMUS_SIGNPOSTF_6 0x2000
+#define DMUS_SIGNPOSTF_7 0x4000
+#define DMUS_SIGNPOSTF_CADENCE 0x8000
+#define DMUS_SIGNPOSTF_LETTER (DMUS_SIGNPOSTF_A | DMUS_SIGNPOSTF_B | DMUS_SIGNPOSTF_C | DMUS_SIGNPOSTF_D | DMUS_SIGNPOSTF_E | DMUS_SIGNPOSTF_F)
+#define DMUS_SIGNPOSTF_ROOT (DMUS_SIGNPOSTF_1 | DMUS_SIGNPOSTF_2 | DMUS_SIGNPOSTF_3 | DMUS_SIGNPOSTF_4 | DMUS_SIGNPOSTF_5 | DMUS_SIGNPOSTF_6 | DMUS_SIGNPOSTF_7)
+
+#define DMUS_SPOSTCADENCEF_1 0x2
+#define DMUS_SPOSTCADENCEF_2 0x4
+
+#define DMUS_VARIATIONF_MAJOR 0x0000007F
+#define DMUS_VARIATIONF_MINOR 0x00003F80
+#define DMUS_VARIATIONF_OTHER 0x001FC000
+#define DMUS_VARIATIONF_ROOT_SCALE 0x00200000
+#define DMUS_VARIATIONF_ROOT_FLAT 0x00400000
+#define DMUS_VARIATIONF_ROOT_SHARP 0x00800000
+#define DMUS_VARIATIONF_TYPE_TRIAD 0x01000000
+#define DMUS_VARIATIONF_TYPE_6AND7 0x02000000
+#define DMUS_VARIATIONF_TYPE_COMPLEX 0x04000000
+#define DMUS_VARIATIONF_DEST_TO1 0x08000000
+#define DMUS_VARIATIONF_DEST_TO5 0x10000000
+#define DMUS_VARIATIONF_DEST_OTHER 0x40000000
+#define DMUS_VARIATIONF_MODES 0xE0000000
+#define DMUS_VARIATIONF_MODES_EX (0x20000000 | 0x80000000)
+#define DMUS_VARIATIONF_IMA25_MODE 0x00000000
+#define DMUS_VARIATIONF_DMUS_MODE 0x20000000
+
+#define DMUS_WAVETRACKF_SYNC_VAR 0x1
+#define DMUS_WAVETRACKF_PERSIST_CONTROL 0x2
-#define DMUS_SCRIPTIOF_LOAD_ALL_CONTENT 1
-#define DMUS_SCRIPTIOF_DOWNLOAD_ALL_SEGMENTS 2
+/*****************************************************************************
+ * Enumerations
+ */
+/* typedef definitions */
+typedef enum enumDMUS_VARIATIONT_TYPES DMUS_VARIATIONT_TYPES;
+typedef enum enumDMUS_EMBELLISHT_TYPES DMUS_EMBELLISHT_TYPES;
+typedef enum enumDMUS_PATTERNT_TYPES DMUS_PATTERNT_TYPES;
-#define DMUS_SEGMENTTRACKF_MOTIF 1
+/* actual enumerations */
+enum enumDMUS_VARIATIONT_TYPES {
+ DMUS_VARIATIONT_SEQUENTIAL = 0x0,
+ DMUS_VARIATIONT_RANDOM = 0x1,
+ DMUS_VARIATIONT_RANDOM_START = 0x2,
+ DMUS_VARIATIONT_NO_REPEAT = 0x3,
+ DMUS_VARIATIONT_RANDOM_ROW = 0x4
+};
-#define DMUS_IO_SCRIPTTRACKF_PREPARE 1
-#define DMUS_IO_SCRIPTTRACKF_QUEUE 2
-#define DMUS_IO_SCRIPTTRACKF_ATTIME 4
+enum enumDMUS_EMBELLISHT_TYPES {
+ DMUS_EMBELLISHT_NORMAL = 0x0000,
+ DMUS_EMBELLISHT_FILL = 0x0001,
+ DMUS_EMBELLISHT_BREAK = 0x0002,
+ DMUS_EMBELLISHT_INTRO = 0x0004,
+ DMUS_EMBELLISHT_END = 0x0008,
+ DMUS_EMBELLISHT_MOTIF = 0x0010,
+ DMUS_EMBELLISHT_ALL = 0xFFFF
+};
+
+enum enumDMUS_PATTERNT_TYPES {
+ DMUS_PATTERNT_RANDOM = 0x0,
+ DMUS_PATTERNT_REPEAT = 0x1,
+ DMUS_PATTERNT_SEQUENTIAL = 0x2,
+ DMUS_PATTERNT_RANDOM_START = 0x3,
+ DMUS_PATTERNT_NO_REPEAT = 0x4,
+ DMUS_PATTERNT_RANDOM_ROW = 0x5
+};
+
/*****************************************************************************
* Structures
*/
-typedef struct _DMUS_IO_SEQ_ITEM
-{
- MUSIC_TIME mtTime;
- MUSIC_TIME mtDuration;
- DWORD dwPChannel;
- short nOffset;
- BYTE bStatus;
- BYTE bByte1;
- BYTE bByte2;
-} DMUS_IO_SEQ_ITEM;
+/* typedef definitions */
+typedef struct _DMUS_IO_SEQ_ITEM DMUS_IO_SEQ_ITEM, *LPDMUS_IO_SEQ_ITEM;
+typedef struct _DMUS_IO_CURVE_ITEM DMUS_IO_CURVE_ITEM, *LPDMUS_IO_CURVE_ITEM;
+typedef struct _DMUS_IO_TEMPO_ITEM DMUS_IO_TEMPO_ITEM, *LPDMUS_IO_TEMPO_ITEM;
+typedef struct _DMUS_IO_SYSEX_ITEM DMUS_IO_SYSEX_ITEM, *LPDMUS_IO_SYSEX_ITEM;
+typedef struct DMUS_CHORD_KEY DMUS_CHORD_PARAM, *LPDMUS_CHORD_PARAM; /* in dmusici.h */
+typedef struct _DMUS_RHYTHM_PARAM DMUS_RHYTHM_PARAM, *LPDMUS_RHYTHM_PARAM;
+typedef struct _DMUS_TEMPO_PARAM DMUS_TEMPO_PARAM, *LPDMUS_TEMPO_PARAM;
+typedef struct _DMUS_MUTE_PARAM DMUS_MUTE_PARAM, *LPDMUS_MUTE_PARAM;
+typedef struct _DMUS_IO_TIMESIG DMUS_IO_TIMESIG, *LPDMUS_IO_TIMESIG;
+typedef struct _DMUS_IO_STYLE DMUS_IO_STYLE, *LPDMUS_IO_STYLE;
+typedef struct _DMUS_IO_VERSION DMUS_IO_VERSION, *LPDMUS_IO_VERSION;
+typedef struct _DMUS_IO_PATTERN DMUS_IO_PATTERN, *LPDMUS_IO_PATTERN;
+typedef struct _DMUS_IO_STYLEPART DMUS_IO_STYLEPART, *LPDMUS_IO_STYLEPART;
+typedef struct _DMUS_IO_PARTREF DMUS_IO_PARTREF, *LPDMUS_IO_PARTREF;
+typedef struct _DMUS_IO_STYLENOTE DMUS_IO_STYLENOTE, *LPDMUS_IO_STYLENOTE;
+typedef struct _DMUS_IO_STYLECURVE DMUS_IO_STYLECURVE, *LPDMUS_IO_STYLECURVE;
+typedef struct _DMUS_IO_STYLEMARKER DMUS_IO_STYLEMARKER, *LPDMUS_IO_STYLEMARKER;
+typedef struct _DMUS_IO_STYLERESOLUTION DMUS_IO_STYLERESOLUTION, *LPDMUS_IO_STYLERESOLUTION;
+typedef struct _DMUS_IO_STYLE_ANTICIPATION DMUS_IO_STYLE_ANTICIPATION, *LPDMUS_IO_STYLE_ANTICIPATION;
+typedef struct _DMUS_IO_MOTIFSETTINGS DMUS_IO_MOTIFSETTINGS, *LPDMUS_IO_MOTIFSETTINGS;
+typedef struct _DMUS_IO_CHORD DMUS_IO_CHORD, *LPDMUS_IO_CHORD;
+typedef struct _DMUS_IO_SUBCHORD DMUS_IO_SUBCHORD, *LPDMUS_IO_SUBCHORD;
+typedef struct _DMUS_IO_COMMAND DMUS_IO_COMMAND, *LPDMUS_IO_COMMAND;
+typedef struct _DMUS_IO_TOOL_HEADER DMUS_IO_TOOL_HEADER, *LPDMUS_IO_TOOL_HEADER;
+typedef struct _DMUS_IO_PORTCONFIG_HEADER DMUS_IO_PORTCONFIG_HEADER, *LPDMUS_IO_PORTCONFIG_HEADER;
+typedef struct _DMUS_IO_PCHANNELTOBUFFER_HEADER DMUS_IO_PCHANNELTOBUFFER_HEADER, *LPDMUS_IO_PCHANNELTOBUFFER_HEADER;
+typedef struct _DMUS_IO_BUFFER_ATTRIBUTES_HEADER DMUS_IO_BUFFER_ATTRIBUTES_HEADER, *LPDMUS_IO_BUFFER_ATTRIBUTES_HEADER;
+typedef struct _DMUS_IO_BAND_TRACK_HEADER DMUS_IO_BAND_TRACK_HEADER, *LPDMUS_IO_BAND_TRACK_HEADER;
+typedef struct _DMUS_IO_BAND_ITEM_HEADER DMUS_IO_BAND_ITEM_HEADER, *LPDMUS_IO_BAND_ITEM_HEADER;
+typedef struct _DMUS_IO_BAND_ITEM_HEADER2 DMUS_IO_BAND_ITEM_HEADER2, *LPDMUS_IO_BAND_ITEM_HEADER2;
+typedef struct _DMUS_IO_INSTRUMENT DMUS_IO_INSTRUMENT, *LPDMUS_IO_INSTRUMENT;
+typedef struct _DMUS_IO_WAVE_HEADER DMUS_IO_WAVE_HEADER, *LPDMUS_IO_WAVE_HEADER;
+typedef struct _DMUS_IO_WAVE_TRACK_HEADER DMUS_IO_WAVE_TRACK_HEADER, *LPDMUS_IO_WAVE_TRACK_HEADER;
+typedef struct _DMUS_IO_WAVE_PART_HEADER DMUS_IO_WAVE_PART_HEADER, *LPDMUS_IO_WAVE_PART_HEADER;
+typedef struct _DMUS_IO_WAVE_ITEM_HEADER DMUS_IO_WAVE_ITEM_HEADER, *LPDMUS_IO_WAVE_ITEM_HEADER;
+typedef struct _DMUS_IO_CONTAINER_HEADER DMUS_IO_CONTAINER_HEADER, *LPDMUS_IO_CONTAINER_HEADER;
+typedef struct _DMUS_IO_CONTAINED_OBJECT_HEADER DMUS_IO_CONTAINED_OBJECT_HEADER, *LPDMUS_IO_CONTAINED_OBJECT_HEADER;
+typedef struct _DMUS_IO_SEGMENT_HEADER DMUS_IO_SEGMENT_HEADER, *LPDMUS_IO_SEGMENT_HEADER;
+typedef struct _DMUS_IO_TRACK_HEADER DMUS_IO_TRACK_HEADER, *LPDMUS_IO_TRACK_HEADER;
+typedef struct _DMUS_IO_TRACK_EXTRAS_HEADER DMUS_IO_TRACK_EXTRAS_HEADER, *LPDMUS_IO_TRACK_EXTRAS_HEADER;
+typedef struct _DMUS_IO_REFERENCE DMUS_IO_REFERENCE, *LPDMUS_IO_REFERENCE;
+typedef struct _DMUS_IO_CHORDMAP DMUS_IO_CHORDMAP, *LPDMUS_IO_CHORDMAP;
+typedef struct _DMUS_IO_CHORDMAP_SUBCHORD DMUS_IO_CHORDMAP_SUBCHORD, *LPDMUS_IO_CHORDMAP_SUBCHORD;
+typedef struct _DMUS_IO_CHORDMAP_SUBCHORD DMUS_IO_PERS_SUBCHORD, *LPDMUS_IO_PERS_SUBCHORD;
+typedef struct _DMUS_IO_CHORDENTRY DMUS_IO_CHORDENTRY, *LPDMUS_IO_CHORDENTRY;
+typedef struct _DMUS_IO_NEXTCHORD DMUS_IO_NEXTCHORD, *LPDMUS_IO_NEXTCHORD;
+typedef struct _DMUS_IO_CHORDMAP_SIGNPOST DMUS_IO_CHORDMAP_SIGNPOST, *LPDMUS_IO_CHORDMAP_SIGNPOST;
+typedef struct _DMUS_IO_CHORDMAP_SIGNPOST DMUS_IO_PERS_SIGNPOST, *LPDMUS_IO_PERS_SIGNPOST;
+typedef struct _DMUS_IO_SCRIPT_HEADER DMUS_IO_SCRIPT_HEADER, *LPDMUS_IO_SCRIPT_HEADER;
+typedef struct _DMUS_IO_SIGNPOST DMUS_IO_SIGNPOST, *LPDMUS_IO_SIGNPOST;
+typedef struct _DMUS_IO_MUTE DMUS_IO_MUTE, *LPDMUS_IO_MUTE;
+typedef struct _DMUS_IO_TIMESIGNATURE_ITEM DMUS_IO_TIMESIGNATURE_ITEM, *LPDMUS_IO_TIMESIGNATURE_ITEM;
+typedef struct _DMUS_IO_VALID_START DMUS_IO_VALID_START, *LPDMUS_IO_VALID_START;
+typedef struct _DMUS_IO_PLAY_MARKER DMUS_IO_PLAY_MARKER, *LPDMUS_IO_PLAY_MARKER;
+typedef struct _DMUS_IO_SEGMENT_TRACK_HEADER DMUS_IO_SEGMENT_TRACK_HEADER, *LPDMUS_IO_SEGMENT_TRACK_HEADER;
+typedef struct _DMUS_IO_SEGMENT_ITEM_HEADER DMUS_IO_SEGMENT_ITEM_HEADER, *LPDMUS_IO_SEGMENT_ITEM_HEADER;
+typedef struct _DMUS_IO_SCRIPTTRACK_EVENTHEADER DMUS_IO_SCRIPTTRACK_EVENTHEADER, *LPDMUS_IO_SCRIPTTRACK_EVENTHEADER;
+typedef struct _DMUS_IO_LYRICSTRACK_EVENTHEADER DMUS_IO_LYRICSTRACK_EVENTHEADER, *LPDMUS_IO_LYRICSTRACK_EVENTHEADER;
+typedef struct _DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER, *LPDMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER;
+typedef struct _DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER, *LPDMUS_IO_PARAMCONTROLTRACK_PARAMHEADER;
+typedef struct _DMUS_IO_PARAMCONTROLTRACK_CURVEINFO DMUS_IO_PARAMCONTROLTRACK_CURVEINFO, *LPDMUS_IO_PARAMCONTROLTRACK_CURVEINFO;
+typedef struct _DSOUND_IO_DSBUFFERDESC DSOUND_IO_DSBUFFERDESC, *LPDSOUND_IO_DSBUFFERDESC;
+typedef struct _DSOUND_IO_DSBUSID DSOUND_IO_DSBUSID, *LPDSOUND_IO_DSBUSID;
+typedef struct _DSOUND_IO_3D DSOUND_IO_3D, *LPDSOUND_IO_3D;
+typedef struct _DSOUND_IO_DXDMO_HEADER DSOUND_IO_DXDMO_HEADER, *LPDSOUND_IO_DXDMO_HEADER;
+typedef struct _DSOUND_IO_DXDMO_DATA DSOUND_IO_DXDMO_DATA, *LPDSOUND_IO_DXDMO_DATA;
-typedef struct _DMUS_IO_CURVE_ITEM
-{
- MUSIC_TIME mtStart;
- MUSIC_TIME mtDuration;
- MUSIC_TIME mtResetDuration;
- DWORD dwPChannel;
- short nOffset;
- short nStartValue;
- short nEndValue;
- short nResetValue;
- BYTE bType;
- BYTE bCurveShape;
- BYTE bCCData;
- BYTE bFlags;
- WORD wParamType;
- WORD wMergeIndex;
-} DMUS_IO_CURVE_ITEM;
+/* actual structures */
+struct _DMUS_IO_SEQ_ITEM {
+ MUSIC_TIME mtTime;
+ MUSIC_TIME mtDuration;
+ DWORD dwPChannel;
+ short nOffset;
+ BYTE bStatus;
+ BYTE bByte1;
+ BYTE bByte2;
+};
-typedef struct _DMUS_IO_TEMPO_ITEM
-{
- MUSIC_TIME lTime;
- double dblTempo;
-} DMUS_IO_TEMPO_ITEM;
+struct _DMUS_IO_CURVE_ITEM {
+ MUSIC_TIME mtStart;
+ MUSIC_TIME mtDuration;
+ MUSIC_TIME mtResetDuration;
+ DWORD dwPChannel;
+ short nOffset;
+ short nStartValue;
+ short nEndValue;
+ short nResetValue;
+ BYTE bType;
+ BYTE bCurveShape;
+ BYTE bCCData;
+ BYTE bFlags;
+ /* DX8 */
+ WORD wParamType;
+ WORD wMergeIndex;
+};
-typedef struct _DMUS_IO_SYSEX_ITEM
-{
- MUSIC_TIME mtTime;
- DWORD dwPChannel;
- DWORD dwSysExLength;
-} DMUS_IO_SYSEX_ITEM;
+struct _DMUS_IO_TEMPO_ITEM {
+ MUSIC_TIME lTime;
+ double dblTempo;
+};
-typedef DMUS_CHORD_KEY DMUS_CHORD_PARAM;
+struct _DMUS_IO_SYSEX_ITEM {
+ MUSIC_TIME mtTime;
+ DWORD dwPChannel;
+ DWORD dwSysExLength;
+};
-typedef struct _DMUS_RHYTHM_PARAM
-{
- DMUS_TIMESIGNATURE TimeSig;
- DWORD dwRhythmPattern;
-} DMUS_RHYTHM_PARAM;
+struct _DMUS_RHYTHM_PARAM {
+ DMUS_TIMESIGNATURE TimeSig;
+ DWORD dwRhythmPattern;
+};
-typedef struct _DMUS_TEMPO_PARAM
-{
- MUSIC_TIME mtTime;
- double dblTempo;
-} DMUS_TEMPO_PARAM;
+struct _DMUS_TEMPO_PARAM {
+ MUSIC_TIME mtTime;
+ double dblTempo;
+};
-typedef struct _DMUS_MUTE_PARAM
-{
- DWORD dwPChannel;
- DWORD dwPChannelMap;
- BOOL fMute;
-} DMUS_MUTE_PARAM;
+struct _DMUS_MUTE_PARAM {
+ DWORD dwPChannel;
+ DWORD dwPChannelMap;
+ BOOL fMute;
+};
+#pragma pack(2)
+struct _DMUS_IO_TIMESIG {
+ BYTE bBeatsPerMeasure;
+ BYTE bBeat;
+ WORD wGridsPerBeat;
+};
-typedef enum enumDMUS_VARIATIONT_TYPES
-{
- DMUS_VARIATIONT_SEQUENTIAL = 0,
- DMUS_VARIATIONT_RANDOM = 1,
- DMUS_VARIATIONT_RANDOM_START = 2,
- DMUS_VARIATIONT_NO_REPEAT = 3,
- DMUS_VARIATIONT_RANDOM_ROW = 4
-} DMUS_VARIATIONT_TYPES;
+struct _DMUS_IO_STYLE {
+ DMUS_IO_TIMESIG timeSig;
+ double dblTempo;
+};
-typedef struct _DMUS_IO_TIMESIG
-{
- BYTE bBeatsPerMeasure;
- BYTE bBeat;
- WORD wGridsPerBeat;
-} DMUS_IO_TIMESIG;
+struct _DMUS_IO_VERSION {
+ DWORD dwVersionMS;
+ DWORD dwVersionLS;
+};
-typedef struct _DMUS_IO_STYLE
-{
- DMUS_IO_TIMESIG timeSig;
- double dblTempo;
-} DMUS_IO_STYLE;
+struct _DMUS_IO_PATTERN {
+ DMUS_IO_TIMESIG timeSig;
+ BYTE bGrooveBottom;
+ BYTE bGrooveTop;
+ WORD wEmbellishment;
+ WORD wNbrMeasures;
+ BYTE bDestGrooveBottom;
+ BYTE bDestGrooveTop;
+ DWORD dwFlags;
+};
-typedef struct _DMUS_IO_VERSION
-{
- DWORD dwVersionMS;
- DWORD dwVersionLS;
-} DMUS_IO_VERSION;
+struct _DMUS_IO_STYLEPART {
+ DMUS_IO_TIMESIG timeSig;
+ DWORD dwVariationChoices[32];
+ GUID guidPartID;
+ WORD wNbrMeasures;
+ BYTE bPlayModeFlags;
+ BYTE bInvertUpper;
+ BYTE bInvertLower;
+ BYTE bPad[3];
+ DWORD dwFlags;
+};
-typedef struct _DMUS_IO_PATTERN
-{
- DMUS_IO_TIMESIG timeSig;
- BYTE bGrooveBottom;
- BYTE bGrooveTop;
- WORD wEmbellishment;
- WORD wNbrMeasures;
- BYTE bDestGrooveBottom;
- BYTE bDestGrooveTop;
- DWORD dwFlags;
-} DMUS_IO_PATTERN;
+struct _DMUS_IO_PARTREF {
+ GUID guidPartID;
+ WORD wLogicalPartID;
+ BYTE bVariationLockID;
+ BYTE bSubChordLevel;
+ BYTE bPriority;
+ BYTE bRandomVariation;
+ WORD wPad;
+ DWORD dwPChannel;
+};
-typedef struct _DMUS_IO_STYLEPART
-{
- DMUS_IO_TIMESIG timeSig;
- DWORD dwVariationChoices[32];
- GUID guidPartID;
- WORD wNbrMeasures;
- BYTE bPlayModeFlags;
- BYTE bInvertUpper;
- BYTE bInvertLower;
- BYTE bPad[3];
- DWORD dwFlags;
-} DMUS_IO_STYLEPART;
-typedef struct _DMUS_IO_PARTREF
-{
- GUID guidPartID;
- WORD wLogicalPartID;
- BYTE bVariationLockID;
- BYTE bSubChordLevel;
- BYTE bPriority;
- BYTE bRandomVariation;
- WORD wPad;
- DWORD dwPChannel;
-} DMUS_IO_PARTREF;
+struct _DMUS_IO_STYLENOTE {
+ MUSIC_TIME mtGridStart;
+ DWORD dwVariation;
+ MUSIC_TIME mtDuration;
+ short nTimeOffset;
+ WORD wMusicValue;
+ BYTE bVelocity;
+ BYTE bTimeRange;
+ BYTE bDurRange;
+ BYTE bVelRange;
+ BYTE bInversionID;
+ BYTE bPlayModeFlags;
+ /* DX8 */
+ BYTE bNoteFlags;
+};
-typedef struct _DMUS_IO_STYLENOTE
-{
- MUSIC_TIME mtGridStart;
- DWORD dwVariation;
- MUSIC_TIME mtDuration;
- short nTimeOffset;
- WORD wMusicValue;
- BYTE bVelocity;
- BYTE bTimeRange;
- BYTE bDurRange;
- BYTE bVelRange;
- BYTE bInversionID;
- BYTE bPlayModeFlags;
- BYTE bNoteFlags;
-} DMUS_IO_STYLENOTE;
+struct _DMUS_IO_STYLECURVE {
+ MUSIC_TIME mtGridStart;
+ DWORD dwVariation;
+ MUSIC_TIME mtDuration;
+ MUSIC_TIME mtResetDuration;
+ short nTimeOffset;
+ short nStartValue;
+ short nEndValue;
+ short nResetValue;
+ BYTE bEventType;
+ BYTE bCurveShape;
+ BYTE bCCData;
+ BYTE bFlags;
+ /* DX8 */
+ WORD wParamType;
+ WORD wMergeIndex;
+};
-typedef struct _DMUS_IO_STYLECURVE
-{
- MUSIC_TIME mtGridStart;
- DWORD dwVariation;
- MUSIC_TIME mtDuration;
- MUSIC_TIME mtResetDuration;
- short nTimeOffset;
- short nStartValue;
- short nEndValue;
- short nResetValue;
- BYTE bEventType;
- BYTE bCurveShape;
- BYTE bCCData;
- BYTE bFlags;
- WORD wParamType;
- WORD wMergeIndex;
-} DMUS_IO_STYLECURVE;
+struct _DMUS_IO_STYLEMARKER {
+ MUSIC_TIME mtGridStart;
+ DWORD dwVariation;
+ WORD wMarkerFlags;
+};
-typedef struct _DMUS_IO_STYLEMARKER
-{
- MUSIC_TIME mtGridStart;
- DWORD dwVariation;
- WORD wMarkerFlags;
-} DMUS_IO_STYLEMARKER;
+struct _DMUS_IO_STYLERESOLUTION {
+ DWORD dwVariation;
+ WORD wMusicValue;
+ BYTE bInversionID;
+ BYTE bPlayModeFlags;
+};
-typedef struct _DMUS_IO_STYLERESOLUTION
-{
- DWORD dwVariation;
- WORD wMusicValue;
- BYTE bInversionID;
- BYTE bPlayModeFlags;
-} DMUS_IO_STYLERESOLUTION;
+struct _DMUS_IO_STYLE_ANTICIPATION {
+ MUSIC_TIME mtGridStart;
+ DWORD dwVariation;
+ short nTimeOffset;
+ BYTE bTimeRange;
+};
-typedef struct _DMUS_IO_STYLE_ANTICIPATION
-{
- MUSIC_TIME mtGridStart;
- DWORD dwVariation;
- short nTimeOffset;
- BYTE bTimeRange;
-} DMUS_IO_STYLE_ANTICIPATION;
+struct _DMUS_IO_MOTIFSETTINGS {
+ DWORD dwRepeats;
+ MUSIC_TIME mtPlayStart;
+ MUSIC_TIME mtLoopStart;
+ MUSIC_TIME mtLoopEnd;
+ DWORD dwResolution;
+};
+#pragma pack()
-typedef struct _DMUS_IO_MOTIFSETTINGS
-{
- DWORD dwRepeats;
- MUSIC_TIME mtPlayStart;
- MUSIC_TIME mtLoopStart;
- MUSIC_TIME mtLoopEnd;
- DWORD dwResolution;
-} DMUS_IO_MOTIFSETTINGS;
+struct _DMUS_IO_CHORD {
+ WCHAR wszName[16];
+ MUSIC_TIME mtTime;
+ WORD wMeasure;
+ BYTE bBeat;
+ BYTE bFlags;
+};
-
-typedef enum enumDMUS_PATTERNT_TYPES
-{
- DMUS_PATTERNT_RANDOM = 0,
- DMUS_PATTERNT_REPEAT = 1,
- DMUS_PATTERNT_SEQUENTIAL = 2,
- DMUS_PATTERNT_RANDOM_START = 3,
- DMUS_PATTERNT_NO_REPEAT = 4,
- DMUS_PATTERNT_RANDOM_ROW = 5
-} DMUS_PATTERNT_TYPES;
-
-typedef struct _DMUS_IO_CHORD
-{
- WCHAR wszName[16];
- MUSIC_TIME mtTime;
- WORD wMeasure;
- BYTE bBeat;
- BYTE bFlags;
-} DMUS_IO_CHORD;
-
-typedef struct _DMUS_IO_SUBCHORD
-{
- DWORD dwChordPattern;
- DWORD dwScalePattern;
- DWORD dwInversionPoints;
- DWORD dwLevels;
- BYTE bChordRoot;
- BYTE bScaleRoot;
-} DMUS_IO_SUBCHORD;
-
-typedef struct _DMUS_IO_COMMAND
-{
- MUSIC_TIME mtTime;
- WORD wMeasure;
- BYTE bBeat;
- BYTE bCommand;
- BYTE bGrooveLevel;
- BYTE bGrooveRange;
- BYTE bRepeatMode;
-} DMUS_IO_COMMAND;
-
-
-typedef struct _DMUS_IO_TOOL_HEADER
-{
- GUID guidClassID;
- long lIndex;
- DWORD cPChannels;
- FOURCC ckid;
- FOURCC fccType;
- DWORD dwPChannels[1];
-} DMUS_IO_TOOL_HEADER;
-
-
-typedef struct _DMUS_IO_PORTCONFIG_HEADER
-{
- GUID guidPort;
- DWORD dwPChannelBase;
- DWORD dwPChannelCount;
- DWORD dwFlags;
-} DMUS_IO_PORTCONFIG_HEADER;
-
-typedef struct _DMUS_IO_PCHANNELTOBUFFER_HEADER
-{
- DWORD dwPChannelBase;
- DWORD dwPChannelCount;
- DWORD dwBufferCount;
- DWORD dwFlags;
-} DMUS_IO_PCHANNELTOBUFFER_HEADER;
-
-typedef struct _DMUS_IO_BUFFER_ATTRIBUTES_HEADER
-{
- GUID guidBufferID;
- DWORD dwFlags;
-} DMUS_IO_BUFFER_ATTRIBUTES_HEADER;
-
-
-typedef struct _DMUS_IO_BAND_TRACK_HEADER
-{
- BOOL bAutoDownload;
-} DMUS_IO_BAND_TRACK_HEADER;
-
-typedef struct _DMUS_IO_BAND_ITEM_HEADER
-{
- MUSIC_TIME lBandTime;
-} DMUS_IO_BAND_ITEM_HEADER;
-
-typedef struct _DMUS_IO_BAND_ITEM_HEADER2
-{
- MUSIC_TIME lBandTimeLogical;
- MUSIC_TIME lBandTimePhysical;
-} DMUS_IO_BAND_ITEM_HEADER2;
-
-
-typedef struct _DMUS_IO_INSTRUMENT
-{
- DWORD dwPatch;
- DWORD dwAssignPatch;
- DWORD dwNoteRanges[4];
- DWORD dwPChannel;
- DWORD dwFlags;
- BYTE bPan;
- BYTE bVolume;
- short nTranspose;
- DWORD dwChannelPriority;
- short nPitchBendRange;
-} DMUS_IO_INSTRUMENT;
-
-
-typedef struct _DMUS_IO_WAVE_HEADER
-{
- REFERENCE_TIME rtReadAhead;
- DWORD dwFlags;
-} DMUS_IO_WAVE_HEADER;
-
-
-typedef struct _DMUS_IO_WAVE_TRACK_HEADER
-{
- long lVolume;
- DWORD dwFlags;
-} DMUS_IO_WAVE_TRACK_HEADER;
-
-typedef struct _DMUS_IO_WAVE_PART_HEADER
-{
- long lVolume;
- DWORD dwVariations;
- DWORD dwPChannel;
- DWORD dwLockToPart;
- DWORD dwFlags;
- DWORD dwIndex;
-} DMUS_IO_WAVE_PART_HEADER;
-
-typedef struct _DMUS_IO_WAVE_ITEM_HEADER
-{
- long lVolume;
- long lPitch;
- DWORD dwVariations;
- REFERENCE_TIME rtTime;
- REFERENCE_TIME rtStartOffset;
- REFERENCE_TIME rtReserved;
- REFERENCE_TIME rtDuration;
- MUSIC_TIME mtLogicalTime;
- DWORD dwLoopStart;
- DWORD dwLoopEnd;
- DWORD dwFlags;
-} DMUS_IO_WAVE_ITEM_HEADER;
-
-
-typedef struct _DMUS_IO_CONTAINER_HEADER
-{
- DWORD dwFlags;
-} DMUS_IO_CONTAINER_HEADER;
-
-typedef struct _DMUS_IO_CONTAINED_OBJECT_HEADER
-{
- GUID guidClassID;
- DWORD dwFlags;
- FOURCC ckid;
- FOURCC fccType;
-} DMUS_IO_CONTAINED_OBJECT_HEADER;
-
-
-typedef struct _DMUS_IO_SEGMENT_HEADER
-{
- DWORD dwRepeats;
- MUSIC_TIME mtLength;
- MUSIC_TIME mtPlayStart;
- MUSIC_TIME mtLoopStart;
- MUSIC_TIME mtLoopEnd;
- DWORD dwResolution;
- REFERENCE_TIME rtLength;
- DWORD dwFlags;
- DWORD dwReserved;
-} DMUS_IO_SEGMENT_HEADER;
-
-
-typedef struct _DMUS_IO_TRACK_HEADER
-{
- GUID guidClassID;
- DWORD dwPosition;
- DWORD dwGroup;
- FOURCC ckid;
- FOURCC fccType;
-} DMUS_IO_TRACK_HEADER;
-
-typedef struct _DMUS_IO_TRACK_EXTRAS_HEADER
-{
- DWORD dwFlags;
- DWORD dwPriority;
-} DMUS_IO_TRACK_EXTRAS_HEADER;
-
-
-typedef struct _DMUS_IO_SONG_HEADER
-{
- DWORD dwFlags;
- DWORD dwStartSegID;
-} DMUS_IO_SONG_HEADER;
-
-typedef struct _DMUS_IO_SEGREF_HEADER
-{
- DWORD dwID;
- DWORD dwSegmentID;
- DWORD dwToolGraphID;
- DWORD dwFlags;
- DWORD dwNextPlayID;
-} DMUS_IO_SEGREF_HEADER;
-
-
-typedef struct _DMUS_IO_TRACKREF_HEADER
-{
- DWORD dwSegmentID;
- DWORD dwFlags;
-} DMUS_IO_TRACKREF_HEADER;
-
-
-typedef struct _DMUS_IO_TRANSITION_DEF
-{
- DWORD dwSegmentID;
- DWORD dwTransitionID;
- DWORD dwPlayFlags;
-} DMUS_IO_TRANSITION_DEF;
-
-
-typedef struct _DMUS_IO_REFERENCE
-{
- GUID guidClassID;
- DWORD dwValidData;
-} DMUS_IO_REFERENCE;
-
-
-typedef struct _DMUS_IO_CHORDMAP
-{
- WCHAR wszLoadName[20];
- DWORD dwScalePattern;
- DWORD dwFlags;
-} DMUS_IO_CHORDMAP;
-
-typedef struct _DMUS_IO_CHORDMAP_SUBCHORD
-{
- DWORD dwChordPattern;
- DWORD dwScalePattern;
- DWORD dwInvertPattern;
- BYTE bChordRoot;
- BYTE bScaleRoot;
- WORD wCFlags;
- DWORD dwLevels;
-} DMUS_IO_CHORDMAP_SUBCHORD, DMUS_IO_PERS_SUBCHORD;
-
-typedef struct _DMUS_IO_CHORDENTRY
-{
- DWORD dwFlags;
- WORD wConnectionID;
-} DMUS_IO_CHORDENTRY;
-
-typedef struct _DMUS_IO_NEXTCHORD
-{
- DWORD dwFlags;
- WORD nWeight;
- WORD wMinBeats;
- WORD wMaxBeats;
- WORD wConnectionID;
-} DMUS_IO_NEXTCHORD;
-
-typedef struct _DMUS_IO_CHORDMAP_SIGNPOST
-{
- DWORD dwChords;
- DWORD dwFlags;
-} DMUS_IO_CHORDMAP_SIGNPOST, DMUS_IO_PERS_SIGNPOST;
-
-
-typedef struct _DMUS_IO_SCRIPT_HEADER
-{
- DWORD dwFlags;
-} DMUS_IO_SCRIPT_HEADER;
-
-
-typedef struct _DMUS_IO_SIGNPOST
-{
- MUSIC_TIME mtTime;
- DWORD dwChords;
- WORD wMeasure;
-} DMUS_IO_SIGNPOST;
-
-
-typedef struct _DMUS_IO_MUTE
-{
- MUSIC_TIME mtTime;
- DWORD dwPChannel;
- DWORD dwPChannelMap;
-} DMUS_IO_MUTE;
-
-
-typedef struct _DMUS_IO_TIMESIGNATURE_ITEM
-{
- MUSIC_TIME lTime;
- BYTE bBeatsPerMeasure;
- BYTE bBeat;
- WORD wGridsPerBeat;
-} DMUS_IO_TIMESIGNATURE_ITEM;
+struct _DMUS_IO_SUBCHORD {
+ DWORD dwChordPattern;
+ DWORD dwScalePattern;
+ DWORD dwInversionPoints;
+ DWORD dwLevels;
+ BYTE bChordRoot;
+ BYTE bScaleRoot;
+};
+struct _DMUS_IO_COMMAND {
+ MUSIC_TIME mtTime;
+ WORD wMeasure;
+ BYTE bBeat;
+ BYTE bCommand;
+ BYTE bGrooveLevel;
+ BYTE bGrooveRange;
+ BYTE bRepeatMode;
+};
-typedef struct _DMUS_IO_VALID_START
-{
- MUSIC_TIME mtTime;
-} DMUS_IO_VALID_START;
+struct _DMUS_IO_TOOL_HEADER {
+ GUID guidClassID;
+ long lIndex;
+ DWORD cPChannels;
+ FOURCC ckid;
+ FOURCC fccType;
+ DWORD dwPChannels[1];
+};
-typedef struct _DMUS_IO_PLAY_MARKER
-{
- MUSIC_TIME mtTime;
-} DMUS_IO_PLAY_MARKER;
+struct _DMUS_IO_PORTCONFIG_HEADER {
+ GUID guidPort;
+ DWORD dwPChannelBase;
+ DWORD dwPChannelCount;
+ DWORD dwFlags;
+};
+struct _DMUS_IO_PCHANNELTOBUFFER_HEADER {
+ DWORD dwPChannelBase;
+ DWORD dwPChannelCount;
+ DWORD dwBufferCount;
+ DWORD dwFlags;
+};
-typedef struct _DMUS_IO_SEGMENT_TRACK_HEADER
-{
- DWORD dwFlags;
-} DMUS_IO_SEGMENT_TRACK_HEADER;
+struct _DMUS_IO_BUFFER_ATTRIBUTES_HEADER {
+ GUID guidBufferID;
+ DWORD dwFlags;
+};
-typedef struct _DMUS_IO_SEGMENT_ITEM_HEADER
-{
- MUSIC_TIME lTimeLogical;
- MUSIC_TIME lTimePhysical;
- DWORD dwPlayFlags;
- DWORD dwFlags;
-} DMUS_IO_SEGMENT_ITEM_HEADER;
+struct _DMUS_IO_BAND_TRACK_HEADER {
+ BOOL bAutoDownload;
+};
+struct _DMUS_IO_BAND_ITEM_HEADER {
+ MUSIC_TIME lBandTime;
+};
-typedef struct _DMUS_IO_SCRIPTTRACK_EVENTHEADER
-{
- DWORD dwFlags;
- MUSIC_TIME lTimeLogical;
- MUSIC_TIME lTimePhysical;
-} DMUS_IO_SCRIPTTRACK_EVENTHEADER;
+struct _DMUS_IO_BAND_ITEM_HEADER2 {
+ MUSIC_TIME lBandTimeLogical;
+ MUSIC_TIME lBandTimePhysical;
+};
+struct _DMUS_IO_INSTRUMENT {
+ DWORD dwPatch;
+ DWORD dwAssignPatch;
+ DWORD dwNoteRanges[4];
+ DWORD dwPChannel;
+ DWORD dwFlags;
+ BYTE bPan;
+ BYTE bVolume;
+ short nTranspose;
+ DWORD dwChannelPriority;
+ short nPitchBendRange;
+};
-typedef struct _DMUS_IO_LYRICSTRACK_EVENTHEADER
-{
- DWORD dwFlags;
- DWORD dwTimingFlags;
- MUSIC_TIME lTimeLogical;
- MUSIC_TIME lTimePhysical;
-} DMUS_IO_LYRICSTRACK_EVENTHEADER;
+struct _DMUS_IO_WAVE_HEADER {
+ REFERENCE_TIME rtReadAhead;
+ DWORD dwFlags;
+};
+struct _DMUS_IO_WAVE_TRACK_HEADER {
+ long lVolume;
+ DWORD dwFlags;
+};
-typedef struct _DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER
-{
- DWORD dwFlags;
- GUID guidTimeFormat;
+struct _DMUS_IO_WAVE_PART_HEADER {
+ long lVolume;
+ DWORD dwVariations;
DWORD dwPChannel;
- DWORD dwStage;
- DWORD dwBuffer;
- GUID guidObject;
- DWORD dwIndex;
-} DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER;
-
-typedef struct _DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER
-{
+ DWORD dwLockToPart;
DWORD dwFlags;
DWORD dwIndex;
-} DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER;
+};
-typedef struct _DMUS_IO_PARAMCONTROLTRACK_CURVEINFO
-{
- MUSIC_TIME mtStartTime;
- MUSIC_TIME mtEndTime;
- float fltStartValue;
- float fltEndValue;
- DWORD dwCurveType;
- DWORD dwFlags;
-} DMUS_IO_PARAMCONTROLTRACK_CURVEINFO;
+struct _DMUS_IO_WAVE_ITEM_HEADER {
+ long lVolume;
+ long lPitch;
+ DWORD dwVariations;
+ REFERENCE_TIME rtTime;
+ REFERENCE_TIME rtStartOffset;
+ REFERENCE_TIME rtReserved;
+ REFERENCE_TIME rtDuration;
+ MUSIC_TIME mtLogicalTime;
+ DWORD dwLoopStart;
+ DWORD dwLoopEnd;
+ DWORD dwFlags;
+ WORD wVolumeRange;
+ WORD wPitchRange;
+};
+struct _DMUS_IO_CONTAINER_HEADER {
+ DWORD dwFlags;
+};
-typedef DMUS_CONNECTION_RULE DMUS_IO_CONNECTION_RULE;
+struct _DMUS_IO_CONTAINED_OBJECT_HEADER {
+ GUID guidClassID;
+ DWORD dwFlags;
+ FOURCC ckid;
+ FOURCC fccType;
+};
-typedef DMUS_MELODY_FRAGMENT DMUS_IO_MELODY_FRAGMENT;
+struct _DMUS_IO_SEGMENT_HEADER {
+ DWORD dwRepeats;
+ MUSIC_TIME mtLength;
+ MUSIC_TIME mtPlayStart;
+ MUSIC_TIME mtLoopStart;
+ MUSIC_TIME mtLoopEnd;
+ DWORD dwResolution;
+ /* DX8 */
+ REFERENCE_TIME rtLength;
+ DWORD dwFlags;
+ DWORD dwReserved;
+ /* DX9 */
+ REFERENCE_TIME rtLoopStart;
+ REFERENCE_TIME rtLoopEnd;
+ REFERENCE_TIME rtPlayStart;
+};
-typedef struct _DMUS_IO_MELFORM
-{
- DWORD dwPlaymode;
-} DMUS_IO_MELFORM;
+struct _DMUS_IO_TRACK_HEADER {
+ GUID guidClassID;
+ DWORD dwPosition;
+ DWORD dwGroup;
+ FOURCC ckid;
+ FOURCC fccType;
+};
+struct _DMUS_IO_TRACK_EXTRAS_HEADER {
+ DWORD dwFlags;
+ DWORD dwPriority;
+};
-typedef struct _DSOUND_IO_DSBUFFERDESC
-{
- DWORD dwFlags;
- WORD nChannels;
- LONG lVolume;
- LONG lPan;
- DWORD dwReserved;
-} DSOUND_IO_DSBUFFERDESC;
+struct _DMUS_IO_REFERENCE {
+ GUID guidClassID;
+ DWORD dwValidData;
+};
-typedef struct _DSOUND_IO_DSBUSID
-{
- DWORD busid[1];
-} DSOUND_IO_DSBUSID;
+struct _DMUS_IO_CHORDMAP {
+ WCHAR wszLoadName[20];
+ DWORD dwScalePattern;
+ DWORD dwFlags;
+};
-typedef struct _DSOUND_IO_3D
-{
- GUID guid3DAlgorithm;
- DS3DBUFFER ds3d;
-} DSOUND_IO_3D;
+struct _DMUS_IO_CHORDMAP_SUBCHORD {
+ DWORD dwChordPattern;
+ DWORD dwScalePattern;
+ DWORD dwInvertPattern;
+ BYTE bChordRoot;
+ BYTE bScaleRoot;
+ WORD wCFlags;
+ DWORD dwLevels;
+};
-typedef struct _DSOUND_IO_DXDMO_HEADER
-{
- DWORD dwEffectFlags;
- GUID guidDSFXClass;
- GUID guidReserved;
- GUID guidSendBuffer;
- DWORD dwReserved;
-} DSOUND_IO_DXDMO_HEADER;
+struct _DMUS_IO_CHORDENTRY {
+ DWORD dwFlags;
+ WORD wConnectionID;
+};
-typedef struct _DSOUND_IO_DXDMO_DATA
-{
- DWORD data[1];
-} DSOUND_IO_DXDMO_DATA;
+struct _DMUS_IO_NEXTCHORD {
+ DWORD dwFlags;
+ WORD nWeight;
+ WORD wMinBeats;
+ WORD wMaxBeats;
+ WORD wConnectionID;
+};
+
+struct _DMUS_IO_CHORDMAP_SIGNPOST {
+ DWORD dwChords;
+ DWORD dwFlags;
+};
+
+struct _DMUS_IO_SCRIPT_HEADER {
+ DWORD dwFlags;
+};
+
+struct _DMUS_IO_SIGNPOST {
+ MUSIC_TIME mtTime;
+ DWORD dwChords;
+ WORD wMeasure;
+};
+
+struct _DMUS_IO_MUTE {
+ MUSIC_TIME mtTime;
+ DWORD dwPChannel;
+ DWORD dwPChannelMap;
+};
+
+struct _DMUS_IO_TIMESIGNATURE_ITEM {
+ MUSIC_TIME lTime;
+ BYTE bBeatsPerMeasure;
+ BYTE bBeat;
+ WORD wGridsPerBeat;
+};
+
+struct _DMUS_IO_VALID_START {
+ MUSIC_TIME mtTime;
+};
+
+struct _DMUS_IO_PLAY_MARKER {
+ MUSIC_TIME mtTime;
+};
+
+struct _DMUS_IO_SEGMENT_TRACK_HEADER {
+ DWORD dwFlags;
+};
+
+struct _DMUS_IO_SEGMENT_ITEM_HEADER {
+ MUSIC_TIME llTimeLogical;
+ MUSIC_TIME lTimePhysical;
+ DWORD dwPlayFlags;
+ DWORD dwFlags;
+};
+
+struct _DMUS_IO_SCRIPTTRACK_EVENTHEADER {
+ DWORD dwFlags;
+ MUSIC_TIME lTimeLogical;
+ MUSIC_TIME lTimePhysical;
+};
+
+struct _DMUS_IO_LYRICSTRACK_EVENTHEADER {
+ DWORD dwFlags;
+ DWORD dwTimingFlags;
+ MUSIC_TIME lTimeLogical;
+ MUSIC_TIME lTimePhysical;
+};
+
+struct _DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER {
+ DWORD dwFlags;
+ GUID guidTimeFormat;
+ DWORD dwPChannel;
+ DWORD dwStage;
+ DWORD dwBuffer;
+ GUID guidObject;
+ DWORD dwIndex;
+};
+
+struct _DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER {
+ DWORD dwFlags;
+ DWORD dwIndex;
+};
+
+struct _DMUS_IO_PARAMCONTROLTRACK_CURVEINFO {
+ MUSIC_TIME mtStartTime;
+ MUSIC_TIME mtEndTime;
+ float fltStartValue;
+ float fltEndValue;
+ DWORD dwCurveType;
+ DWORD dwFlags;
+};
+
+struct _DSOUND_IO_DSBUFFERDESC {
+ DWORD dwFlags;
+ WORD nChannels;
+ LONG lVolume;
+ LONG lPan;
+ DWORD dwReserved;
+};
+
+struct _DSOUND_IO_DSBUSID {
+ DWORD busid[1];
+};
+
+struct _DSOUND_IO_3D {
+ GUID guid3DAlgorithm;
+ DS3DBUFFER ds3d;
+};
+
+struct _DSOUND_IO_DXDMO_HEADER {
+ DWORD dwEffectFlags;
+ GUID guidDSFXClass;
+ GUID guidReserved;
+ GUID guidSendBuffer;
+ DWORD dwReserved;
+};
+
+struct _DSOUND_IO_DXDMO_DATA {
+ DWORD data[1];
+};
#ifdef __cplusplus
}
#endif
+#include <poppack.h>
+
#endif /* __WINE_DMUSIC_FILEFORMATS_H */
diff --git a/include/dmusici.h b/include/dmusici.h
index 12a22b1..09e9497 100644
--- a/include/dmusici.h
+++ b/include/dmusici.h
@@ -1,7 +1,7 @@
/*
* DirectMusic Performance API
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,258 +21,279 @@
#ifndef __WINE_DMUSIC_PERFORMANCE_H
#define __WINE_DMUSIC_PERFORMANCE_H
+#ifndef __WINESRC__
+#include <windows.h>
+#else
+#include <oleauto.h> /* VARIANT */
+#endif /* __WINESRC__ */
+
#include <objbase.h>
#include <mmsystem.h>
-
-#include <oleauto.h>
+#include <dmusicc.h>
+#include <dmplugin.h>
+#include <pshpack8.h>
#ifdef __cplusplus
extern "C" {
#endif
-
-/*****************************************************************************
- * Types
- */
-typedef WORD TRANSITION_TYPE;
-/* Already defined somewhere? */
-/* typedef __int64 REFERENCE_TIME; */
-typedef long MUSIC_TIME;
-
/*****************************************************************************
* Predeclare the interfaces
*/
/* CLSIDs */
-DEFINE_GUID(CLSID_DirectMusicPerformance, 0xd2ac2881,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicSegment, 0xd2ac2882,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicSegmentState, 0xd2ac2883,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicGraph, 0xd2ac2884,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicStyle, 0xd2ac288a,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicChordMap, 0xd2ac288f,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicComposer, 0xd2ac2890,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicLoader, 0xd2ac2892,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicBand, 0x79ba9e00,0xb6ee,0x11d1,0x86,0xbe,0x0,0xc0,0x4f,0xbf,0x8f,0xef);
-DEFINE_GUID(CLSID_DirectMusicPatternTrack, 0xd2ac2897,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicScript, 0x810b5013,0xe88d,0x11d2,0x8b,0xc1,0x0,0x60,0x8,0x93,0xb1,0xb6);
-DEFINE_GUID(CLSID_DirectMusicContainer, 0x9301e380,0x1f22,0x11d3,0x82,0x26,0xd2,0xfa,0x76,0x25,0x5d,0x47);
-DEFINE_GUID(CLSID_DirectSoundWave, 0x8a667154,0xf9cb,0x11d2,0xad,0x8a,0x0,0x60,0xb0,0x57,0x5a,0xbc);
-DEFINE_GUID(CLSID_DirectMusicSong, 0xaed5f0a5,0xd972,0x483d,0xa3,0x84,0x64,0x9d,0xfe,0xb9,0xc1,0x81);
-DEFINE_GUID(CLSID_DirectMusicAudioPathConfig, 0xee0b9ca0,0xa81e,0x11d3,0x9b,0xd1,0x0,0x80,0xc7,0x15,0xa,0x74);
-/* these CLSIDs aren't officially declared in any dmusic header, but are used by regsvr implementations*/
-DEFINE_GUID(CLSID_DirectMusicSynthSink, 0xaec17ce3,0xa514,0x11d1,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
-DEFINE_GUID(CLSID_DirectMusicSection, 0x3f037241,0x414e,0x11d1,0xa7,0xce,0x00,0xa0,0xc9,0x13,0xf7,0x3c);
-DEFINE_GUID(CLSID_DirectMusicAuditionTrack, 0xd2ac2897,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
-DEFINE_GUID(CLSID_DirectMusicSegTriggerTrack, 0xbae4d665,0x4ea1,0x11d3,0x8b,0xda,0x00,0x60,0x08,0x93,0xb1,0xb6);
-DEFINE_GUID(CLSID_DirectMusicAudioPath, 0xee0b9ca0,0xa81e,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
-DEFINE_GUID(CLSID_DirectMusicTemplate, 0xd30bcc65,0x60e8,0x11d1,0xa7,0xce,0x00,0xa0,0xc9,0x13,0xf7,0x3c);
-DEFINE_GUID(CLSID_DirectMusicScriptAutoImpSegment, 0x4062c116,0x0270,0x11d3,0x8b,0xcb,0x00,0x60,0x08,0x93,0xb1,0xb6);
-DEFINE_GUID(CLSID_AudioVBScript, 0x4ee17959,0x931e,0x49e4,0xa2,0xc6,0x97,0x7e,0xcf,0x36,0x28,0xf3);
-DEFINE_GUID(CLSID_DirectMusicScriptAutoImpPerformance, 0xa861c6e2,0xfcfc,0x11d2,0x8b,0xc9,0x00,0x60,0x08,0x93,0xb1,0xb6);
-DEFINE_GUID(CLSID_DirectMusicScripSourceCodeLoader, 0xc70eb77f,0xefd4,0x4678,0xa2,0x7b,0xbf,0x16,0x48,0xf3,0x0d,0x04); /* [sic] */
-DEFINE_GUID(CLSID_DirectMusicScriptAutoImpSegmentState, 0xebf2320a,0x2502,0x11d3,0x8b,0xd1,0x00,0x60,0x08,0x93,0xb1,0xb6);
-DEFINE_GUID(CLSID_DirectMusicScriptAutoImpAudioPathConfig, 0x1cebde3e,0x6b91,0x484a,0xaf,0x48,0x5e,0x4f,0x4e,0xd6,0xb1,0xe1);
-DEFINE_GUID(CLSID_DirectMusicScriptAutoImpAudioPath, 0x2c5f9b72,0x7148,0x4d97,0xbf,0xc9,0x68,0xa0,0xe0,0x76,0xbe,0xbd);
-DEFINE_GUID(CLSID_DirectMusicScriptAutoImpSong, 0xa16f1761,0xb6d8,0x42eb,0x8d,0x57,0x4a,0x44,0xfe,0xdd,0x3b,0xd2);
+DEFINE_GUID(CLSID_DirectMusicAudioPathConfig, 0xee0b9ca0,0xa81e,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+DEFINE_GUID(CLSID_DirectMusicBand, 0x79ba9e00,0xb6ee,0x11d1,0x86,0xbe,0x00,0xc0,0x4f,0xbf,0x8f,0xef);
+DEFINE_GUID(CLSID_DirectMusicChordMap, 0xd2ac288f,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicComposer, 0xd2ac2890,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicContainer, 0x9301e380,0x1f22,0x11d3,0x82,0x26,0xd2,0xfa,0x76,0x25,0x5d,0x47);
+DEFINE_GUID(CLSID_DirectMusicGraph, 0xd2ac2884,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicLoader, 0xd2ac2892,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicPatternTrack, 0xd2ac2897,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicPerformance, 0xd2ac2881,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicScript, 0x810b5013,0xe88d,0x11d2,0x8b,0xc1,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicSegment, 0xd2ac2882,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicSegmentState, 0xd2ac2883,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicStyle, 0xd2ac288a,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectSoundWave, 0x8a667154,0xf9cb,0x11d2,0xad,0x8a,0x00,0x60,0xb0,0x57,0x5a,0xbc);
+/* MS doesn't support this in DX 9.0 and newer... but there's no harm in keeping it around */
+DEFINE_GUID(CLSID_DirectMusicSong, 0xaed5f0a5,0xd972,0x483d,0xa3,0x84,0x64,0x9d,0xfe,0xb9,0xc1,0x81);
+/* these CLSIDs aren't officially declared in any dmusic header, but are used by wine's regsvr implementations*/
+DEFINE_GUID(CLSID_DirectMusicSynthSink, 0xaec17ce3,0xa514,0x11d1,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(CLSID_DirectMusicSection, 0x3f037241,0x414e,0x11d1,0xa7,0xce,0x00,0xa0,0xc9,0x13,0xf7,0x3c);
+DEFINE_GUID(CLSID_DirectMusicAuditionTrack, 0xd2ac2897,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(CLSID_DirectMusicSegTriggerTrack, 0xbae4d665,0x4ea1,0x11d3,0x8b,0xda,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicAudioPath, 0xee0b9ca0,0xa81e,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+DEFINE_GUID(CLSID_DirectMusicTemplate, 0xd30bcc65,0x60e8,0x11d1,0xa7,0xce,0x00,0xa0,0xc9,0x13,0xf7,0x3c);
+DEFINE_GUID(CLSID_DirectMusicScriptAutoImpSegment, 0x4062c116,0x0270,0x11d3,0x8b,0xcb,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_AudioVBScript, 0x4ee17959,0x931e,0x49e4,0xa2,0xc6,0x97,0x7e,0xcf,0x36,0x28,0xf3);
+DEFINE_GUID(CLSID_DirectMusicScriptAutoImpPerformance, 0xa861c6e2,0xfcfc,0x11d2,0x8b,0xc9,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicScripSourceCodeLoader, 0xc70eb77f,0xefd4,0x4678,0xa2,0x7b,0xbf,0x16,0x48,0xf3,0x0d,0x04);
+DEFINE_GUID(CLSID_DirectMusicScriptAutoImpSegmentState, 0xebf2320a,0x2502,0x11d3,0x8b,0xd1,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(CLSID_DirectMusicScriptAutoImpAudioPathConfig, 0x1cebde3e,0x6b91,0x484a,0xaf,0x48,0x5e,0x4f,0x4e,0xd6,0xb1,0xe1);
+DEFINE_GUID(CLSID_DirectMusicScriptAutoImpAudioPath, 0x2c5f9b72,0x7148,0x4d97,0xbf,0xc9,0x68,0xa0,0xe0,0x76,0xbe,0xbd);
+DEFINE_GUID(CLSID_DirectMusicScriptAutoImpSong, 0xa16f1761,0xb6d8,0x42eb,0x8d,0x57,0x4a,0x44,0xfe,0xdd,0x3b,0xd2);
/* IIDs */
-DEFINE_GUID(IID_IDirectMusicAudioPath, 0xc87631f5,0x23be,0x4986,0x88,0x36,0x5,0x83,0x2f,0xcc,0x48,0xf9);
-DEFINE_GUID(IID_IDirectMusicBand, 0xd2ac28c0,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(IID_IDirectMusicChordMap, 0xd2ac28be,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(IID_IDirectMusicComposer, 0xd2ac28bf,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(IID_IDirectMusicContainer, 0x9301e386,0x1f22,0x11d3,0x82,0x26,0xd2,0xfa,0x76,0x25,0x5d,0x47);
-DEFINE_GUID(IID_IDirectMusicGetLoader, 0x68a04844,0xd13d,0x11d1,0xaf,0xa6,0x0,0xaa,0x0,0x24,0xd8,0xb6);
-DEFINE_GUID(IID_IDirectMusicGraph, 0x2befc277,0x5497,0x11d2,0xbc,0xcb,0x0,0xa0,0xc9,0x22,0xe6,0xeb);
-DEFINE_GUID(IID_IDirectMusicLoader, 0x2ffaaca2,0x5dca,0x11d2,0xaf,0xa6,0x0,0xaa,0x0,0x24,0xd8,0xb6);
-DEFINE_GUID(IID_IDirectMusicLoader8, 0x19e7c08c,0xa44,0x4e6a,0xa1,0x16,0x59,0x5a,0x7c,0xd5,0xde,0x8c);
-DEFINE_GUID(IID_IDirectMusicObject, 0xd2ac28b5,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(IID_IDirectMusicPatternTrack, 0x51c22e10,0xb49f,0x46fc,0xbe,0xc2,0xe6,0x28,0x8f,0xb9,0xed,0xe6);
-DEFINE_GUID(IID_IDirectMusicPerformance, 0x7d43d03,0x6523,0x11d2,0x87,0x1d,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(IID_IDirectMusicPerformance2, 0x6fc2cae0,0xbc78,0x11d2,0xaf,0xa6,0x0,0xaa,0x0,0x24,0xd8,0xb6);
-DEFINE_GUID(IID_IDirectMusicPerformance8, 0x679c4137,0xc62e,0x4147,0xb2,0xb4,0x9d,0x56,0x9a,0xcb,0x25,0x4c);
-DEFINE_GUID(IID_IDirectMusicScript, 0x2252373a,0x5814,0x489b,0x82,0x9,0x31,0xfe,0xde,0xba,0xf1,0x37);
-DEFINE_GUID(IID_IDirectMusicSegment, 0xf96029a2,0x4282,0x11d2,0x87,0x17,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(IID_IDirectMusicSegment2, 0xd38894d1,0xc052,0x11d2,0x87,0x2f,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(IID_IDirectMusicSegment8, 0xc6784488,0x41a3,0x418f,0xaa,0x15,0xb3,0x50,0x93,0xba,0x42,0xd4);
-DEFINE_GUID(IID_IDirectMusicSegmentState, 0xa3afdcc7,0xd3ee,0x11d1,0xbc,0x8d,0x0,0xa0,0xc9,0x22,0xe6,0xeb);
-DEFINE_GUID(IID_IDirectMusicSegmentState8, 0xa50e4730,0xae4,0x48a7,0x98,0x39,0xbc,0x4,0xbf,0xe0,0x77,0x72);
-DEFINE_GUID(IID_IDirectMusicSong, 0xa862b2ec,0x3676,0x4982,0x85,0xa,0x78,0x42,0x77,0x5e,0x1d,0x86);
-DEFINE_GUID(IID_IDirectMusicStyle, 0xd2ac28bd,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(IID_IDirectMusicStyle8, 0xfd24ad8a,0xa260,0x453d,0xbf,0x50,0x6f,0x93,0x84,0xf7,0x9,0x85);
+DEFINE_GUID(IID_IDirectMusicAudioPath, 0xc87631f5,0x23be,0x4986,0x88,0x36,0x05,0x83,0x2f,0xcc,0x48,0xf9);
+DEFINE_GUID(IID_IDirectMusicBand, 0xd2ac28c0,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicChordMap, 0xd2ac28be,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicComposer, 0xd2ac28bf,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicContainer, 0x9301e386,0x1f22,0x11d3,0x82,0x26,0xd2,0xfa,0x76,0x25,0x5d,0x47);
+DEFINE_GUID(IID_IDirectMusicGetLoader, 0x68a04844,0xd13d,0x11d1,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(IID_IDirectMusicGraph, 0x2befc277,0x5497,0x11d2,0xbc,0xcb,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+DEFINE_GUID(IID_IDirectMusicLoader, 0x2ffaaca2,0x5dca,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(IID_IDirectMusicLoader8, 0x19e7c08c,0x0a44,0x4e6a,0xa1,0x16,0x59,0x5a,0x7c,0xd5,0xde,0x8c);
+DEFINE_GUID(IID_IDirectMusicObject, 0xd2ac28b5,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicPatternTrack, 0x51c22e10,0xb49f,0x46fc,0xbe,0xc2,0xe6,0x28,0x8f,0xb9,0xed,0xe6);
+DEFINE_GUID(IID_IDirectMusicPerformance, 0x07d43d03,0x6523,0x11d2,0x87,0x1d,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicPerformance2, 0x6fc2cae0,0xbc78,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(IID_IDirectMusicPerformance8, 0x679c4137,0xc62e,0x4147,0xb2,0xb4,0x9d,0x56,0x9a,0xcb,0x25,0x4c);
+DEFINE_GUID(IID_IDirectMusicScript, 0x2252373a,0x5814,0x489b,0x82,0x09,0x31,0xfe,0xde,0xba,0xf1,0x37);
+DEFINE_GUID(IID_IDirectMusicSegment, 0xf96029a2,0x4282,0x11d2,0x87,0x17,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicSegment2, 0xd38894d1,0xc052,0x11d2,0x87,0x2f,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicSegment8, 0xc6784488,0x41a3,0x418f,0xaa,0x15,0xb3,0x50,0x93,0xba,0x42,0xd4);
+DEFINE_GUID(IID_IDirectMusicSegmentState, 0xa3afdcc7,0xd3ee,0x11d1,0xbc,0x8d,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+DEFINE_GUID(IID_IDirectMusicSegmentState8, 0xa50e4730,0x0ae4,0x48a7,0x98,0x39,0xbc,0x04,0xbf,0xe0,0x77,0x72);
+DEFINE_GUID(IID_IDirectMusicStyle, 0xd2ac28bd,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(IID_IDirectMusicStyle8, 0xfd24ad8a,0xa260,0x453d,0xbf,0x50,0x6f,0x93,0x84,0xf7,0x09,0x85);
/* IIDs of unchanged interfaces */
-#define IID_IDirectMusicAudioPath8 IID_IDirectMusicAudioPath
-#define IID_IDirectMusicBand8 IID_IDirectMusicBand
-#define IID_IDirectMusicChordMap8 IID_IDirectMusicChordMap
-#define IID_IDirectMusicComposer8 IID_IDirectMusicComposer
-#define IID_IDirectMusicContainer8 IID_IDirectMusicContainer
-#define IID_IDirectMusicGetLoader8 IID_IDirectMusicGetLoader
-#define IID_IDirectMusicGraph8 IID_IDirectMusicGraph
-#define IID_IDirectMusicObject8 IID_IDirectMusicObject
+#define IID_IDirectMusicAudioPath8 IID_IDirectMusicAudioPath
+#define IID_IDirectMusicBand8 IID_IDirectMusicBand
+#define IID_IDirectMusicChordMap8 IID_IDirectMusicChordMap
+#define IID_IDirectMusicComposer8 IID_IDirectMusicComposer
+#define IID_IDirectMusicContainer8 IID_IDirectMusicContainer
+#define IID_IDirectMusicGetLoader8 IID_IDirectMusicGetLoader
+#define IID_IDirectMusicGraph8 IID_IDirectMusicGraph
+#define IID_IDirectMusicObject8 IID_IDirectMusicObject
#define IID_IDirectMusicPatternTrack8 IID_IDirectMusicPatternTrack
-#define IID_IDirectMusicScript8 IID_IDirectMusicScript
-#define IID_IDirectMusicSong8 IID_IDirectMusicSong
+#define IID_IDirectMusicScript8 IID_IDirectMusicScript
/* typedef definitions */
-typedef struct IDirectMusicAudioPath IDirectMusicAudioPath, *LPDIRECTMUSICAUDIOPATH, IDirectMusicAudioPath8, *LPDIRECTMUSICAUDIOPATH8;
-typedef struct IDirectMusicBand IDirectMusicBand, *LPDIRECTMUSICBAND, IDirectMusicBand8, *LPDIRECTMUSICBAND8, *LPDMUS_BAND;
-typedef struct IDirectMusicChordMap IDirectMusicChordMap, *LPDIRECTMUSICCHORDMAP, IDirectMusicChordMap8, *LPDIRECTMUSICCHORDMAP8;
-typedef struct IDirectMusicComposer IDirectMusicComposer, *LPDIRECTMUSICCOMPOSER;
-typedef struct IDirectMusicContainer IDirectMusicContainer, *LPDIRECTMUSICCONTAINER, IDirectMusicContainer8, *LPDIRECTMUSICCONTAINER8;
-typedef struct IDirectMusicGetLoader IDirectMusicGetLoader, *LPDIRECTMUSICGETLOADER, IDirectMusicGetLoader8, *LPDIRECTMUSICGETLOADER8;
-typedef struct IDirectMusicGraph IDirectMusicGraph, *LPDIRECTMUSICGRAPH, IDirectMusicGraph8, *LPDIRECTMUSICGRAPH8;
-typedef struct IDirectMusicLoader IDirectMusicLoader, *LPDIRECTMUSICLOADER, *LPDMUS_LOADER;
-typedef struct IDirectMusicLoader8 IDirectMusicLoader8, *LPDIRECTMUSICLOADER8;
-typedef struct IDirectMusicObject IDirectMusicObject, *LPDIRECTMUSICOBJECT, IDirectMusicObject8, *LPDIRECTMUSICOBJECT8, *LPDMUS_OBJECT;
-typedef struct IDirectMusicPatternTrack IDirectMusicPatternTrack, *LPDIRECTMUSICPATTERNTRACK, IDirectMusicPatternTrack8, *LPDIRECTMUSICPATTERNTRACK8;
-typedef struct IDirectMusicPerformance IDirectMusicPerformance, *LPDIRECTMUSICPERFORMANCE;
-typedef struct IDirectMusicPerformance2 IDirectMusicPerformance2, *LPDIRECTMUSICPERFORMANCE2;
-typedef struct IDirectMusicPerformance8 IDirectMusicPerformance8, *LPDIRECTMUSICPERFORMANCE8;
-typedef struct IDirectMusicScript IDirectMusicScript, *LPDIRECTMUSICSCRIPT, IDirectMusicScript8, *LPDIRECTMUSICSCRIPT8;
-typedef struct IDirectMusicSegment IDirectMusicSegment, *LPDIRECTMUSICSEGMENT;
-typedef struct IDirectMusicSegment2 IDirectMusicSegment2, *LPDIRECTMUSICSEGMENT2;
-typedef struct IDirectMusicSegment8 IDirectMusicSegment8, *LPDIRECTMUSICSEGMENT8;
-typedef struct IDirectMusicSegmentState IDirectMusicSegmentState, *LPDIRECTMUSICSEGMENTSTATE;
-typedef struct IDirectMusicSegmentState8 IDirectMusicSegmentState8, *LPDIRECTMUSICSEGMENTSTATE8;
-typedef struct IDirectMusicSong IDirectMusicSong, *LPDIRECTMUSICSONG, IDirectMusicSong8, *LPDIRECTMUSICSONG8;
-typedef struct IDirectMusicStyle IDirectMusicStyle, *LPDIRECTMUSICSTYLE;
-typedef struct IDirectMusicStyle8 IDirectMusicStyle8, *LPDIRECTMUSICSTYLE8;
-/* Imported from dmplugin.h */
-typedef struct IDirectMusicTool IDirectMusicTool, *LPDIRECTMUSICTOOL;
-typedef struct IDirectMusicTool8 IDirectMusicTool8, *LPDIRECTMUSICTOOL8;
-typedef struct IDirectMusicTrack IDirectMusicTrack, *LPDIRECTMUSICTRACK;
-typedef struct IDirectMusicTrack8 IDirectMusicTrack8, *LPDIRECTMUSICTRACK8;
+typedef struct IDirectMusicBand IDirectMusicBand, *LPDIRECTMUSICBAND;
+typedef struct IDirectMusicBand IDirectMusicBand8, *LPDIRECTMUSICBAND8;
+typedef struct IDirectMusicObject IDirectMusicObject, *LPDIRECTMUSICOBJECT;
+typedef struct IDirectMusicObject IDirectMusicObject8, *LPDIRECTMUSICOBJECT8;
+typedef struct IDirectMusicLoader IDirectMusicLoader, *LPDIRECTMUSICLOADER;
+typedef struct IDirectMusicLoader IDirectMusicLoader8, *LPDIRECTMUSICLOADER8;
+typedef struct IDirectMusicGetLoader IDirectMusicGetLoader, *LPDIRECTMUSICGETLOADER;
+typedef struct IDirectMusicGetLoader IDirectMusicGetLoader8, *LPDIRECTMUSICGETLOADER8;
+typedef struct IDirectMusicAudioPath IDirectMusicAudioPath, *LPDIRECTMUSICAUDIOPATH;
+typedef struct IDirectMusicAudioPath IDirectMusicAudioPath8, *LPDIRECTMUSICAUDIOPATH8;
+typedef struct IDirectMusicStyle IDirectMusicStyle, *LPDIRECTMUSICSTYLE;
+typedef struct IDirectMusicStyle8 IDirectMusicStyle8, *LPDIRECTMUSICSTYLE8;
+typedef struct IDirectMusicChordMap IDirectMusicChordMap, *LPDIRECTMUSICCHORDMAP;
+typedef struct IDirectMusicChordMap IDirectMusicChordMap8, *LPDIRECTMUSICCHORDMAP8;
+typedef struct IDirectMusicComposer IDirectMusicComposer, *LPDIRECTMUSICCOMPOSER;
+typedef struct IDirectMusicComposer IDirectMusicComposer8, *LPDIRECTMUSICCOMPOSER8;
+typedef struct IDirectMusicPatternTrack IDirectMusicPatternTrack, *LPDIRECTMUSICPATTERNTRACK;
+typedef struct IDirectMusicPatternTrack IDirectMusicPatternTrack8, *LPDIRECTMUSICPATTERNTRACK8;
+typedef struct IDirectMusicScript IDirectMusicScript, *LPDIRECTMUSICSCRIPT;
+typedef struct IDirectMusicScript IDirectMusicScript8, *LPDIRECTMUSICSCRIPT8;
+typedef struct IDirectMusicContainer IDirectMusicContainer, *LPDIRECTMUSICCONTAINER;
+typedef struct IDirectMusicContainer IDirectMusicContainer8, *LPDIRECTMUSICCONTAINER8;
-DEFINE_GUID(GUID_DirectMusicAllTypes, 0xd2ac2893,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
+/* RPC declarations */
+typedef struct IDirectMusicBand __RPC_FAR *LPDMUS_BAND;
+typedef struct IDirectMusicLoader __RPC_FAR *LPDMUS_LOADER;
+typedef struct IDirectMusicObject __RPC_FAR *LPDMUS_OBJECT;
-DEFINE_GUID(GUID_NOTIFICATION_SEGMENT, 0xd2ac2899,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_NOTIFICATION_PERFORMANCE, 0x81f75bc5,0x4e5d,0x11d2,0xbc,0xc7,0x0,0xa0,0xc9,0x22,0xe6,0xeb);
-DEFINE_GUID(GUID_NOTIFICATION_MEASUREANDBEAT, 0xd2ac289a,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_NOTIFICATION_CHORD, 0xd2ac289b,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_NOTIFICATION_COMMAND, 0xd2ac289c,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_NOTIFICATION_RECOMPOSE, 0xd348372b,0x945b,0x45ae,0xa5,0x22,0x45,0xf,0x12,0x5b,0x84,0xa5);
-
-DEFINE_GUID(GUID_CommandParam, 0xd2ac289d,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_CommandParam2, 0x28f97ef7,0x9538,0x11d2,0x97,0xa9,0x0,0xc0,0x4f,0xa3,0x6e,0x58);
-DEFINE_GUID(GUID_CommandParamNext, 0x472afe7a,0x281b,0x11d3,0x81,0x7d,0x0,0xc0,0x4f,0xa3,0x6e,0x58);
-DEFINE_GUID(GUID_ChordParam, 0xd2ac289e,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_RhythmParam, 0xd2ac289f,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_IDirectMusicStyle, 0xd2ac28a1,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_TimeSignature, 0xd2ac28a4,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_TempoParam, 0xd2ac28a5,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_Valid_Start_Time, 0x7f6b1760,0x1fdb,0x11d3,0x82,0x26,0x44,0x45,0x53,0x54,0x0,0x0);
-DEFINE_GUID(GUID_Play_Marker, 0xd8761a41,0x801a,0x11d3,0x9b,0xd1,0xda,0xf7,0xe1,0xc3,0xd8,0x34);
-DEFINE_GUID(GUID_BandParam, 0x2bb1938,0xcb8b,0x11d2,0x8b,0xb9,0x0,0x60,0x8,0x93,0xb1,0xb6);
-DEFINE_GUID(GUID_IDirectMusicBand, 0xd2ac28ac,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_IDirectMusicChordMap, 0xd2ac28ad,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_MuteParam, 0xd2ac28af,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-
-DEFINE_GUID(GUID_Download, 0xd2ac28a7,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_Unload, 0xd2ac28a8,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_ConnectToDLSCollection, 0x1db1ae6b,0xe92e,0x11d1,0xa8,0xc5,0x0,0xc0,0x4f,0xa3,0x72,0x6e);
-DEFINE_GUID(GUID_Enable_Auto_Download, 0xd2ac28a9,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_Disable_Auto_Download, 0xd2ac28aa,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_Clear_All_Bands, 0xd2ac28ab,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_StandardMIDIFile, 0x6621075,0xe92e,0x11d1,0xa8,0xc5,0x0,0xc0,0x4f,0xa3,0x72,0x6e);
-#define GUID_IgnoreBankSelectForGM GUID_StandardMIDIFile
-
-DEFINE_GUID(GUID_DisableTimeSig, 0x45fc707b,0x1db4,0x11d2,0xbc,0xac,0x0,0xa0,0xc9,0x22,0xe6,0xeb);
-DEFINE_GUID(GUID_EnableTimeSig, 0x45fc707c,0x1db4,0x11d2,0xbc,0xac,0x0,0xa0,0xc9,0x22,0xe6,0xeb);
-DEFINE_GUID(GUID_DisableTempo, 0x45fc707d,0x1db4,0x11d2,0xbc,0xac,0x0,0xa0,0xc9,0x22,0xe6,0xeb);
-DEFINE_GUID(GUID_EnableTempo, 0x45fc707e,0x1db4,0x11d2,0xbc,0xac,0x0,0xa0,0xc9,0x22,0xe6,0xeb);
-
-DEFINE_GUID(GUID_SeedVariations, 0x65b76fa5,0xff37,0x11d2,0x81,0x4e,0x0,0xc0,0x4f,0xa3,0x6e,0x58);
-DEFINE_GUID(GUID_MelodyFragment, 0xb291c7f2,0xb616,0x11d2,0x97,0xfa,0x0,0xc0,0x4f,0xa3,0x6e,0x58);
-DEFINE_GUID(GUID_Clear_All_MelodyFragments, 0x8509fee6,0xb617,0x11d2,0x97,0xfa,0x0,0xc0,0x4f,0xa3,0x6e,0x58);
-DEFINE_GUID(GUID_Variations, 0x11f72cce,0x26e6,0x4ecd,0xaf,0x2e,0xd6,0x68,0xe6,0x67,0x7,0xd8);
-DEFINE_GUID(GUID_DownloadToAudioPath, 0x9f2c0341,0xc5c4,0x11d3,0x9b,0xd1,0x44,0x45,0x53,0x54,0x0,0x0);
-DEFINE_GUID(GUID_UnloadFromAudioPath, 0x9f2c0342,0xc5c4,0x11d3,0x9b,0xd1,0x44,0x45,0x53,0x54,0x0,0x0);
-
-DEFINE_GUID(GUID_PerfMasterTempo, 0xd2ac28b0,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_PerfMasterVolume, 0xd2ac28b1,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_PerfMasterGrooveLevel, 0xd2ac28b2,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd);
-DEFINE_GUID(GUID_PerfAutoDownload, 0xfb09565b,0x3631,0x11d2,0xbc,0xb8,0x0,0xa0,0xc9,0x22,0xe6,0xeb);
-
-DEFINE_GUID(GUID_DefaultGMCollection, 0xf17e8673,0xc3b4,0x11d1,0x87,0xb,0x0,0x60,0x8,0x93,0xb1,0xbd);
-
-DEFINE_GUID(GUID_Synth_Default, 0x26bb9432,0x45fe,0x48d3,0xa3,0x75,0x24,0x72,0xc5,0xe3,0xe7,0x86);
-
-DEFINE_GUID(GUID_Buffer_Reverb, 0x186cc541,0xdb29,0x11d3,0x9b,0xd1,0x0,0x80,0xc7,0x15,0xa,0x74);
-DEFINE_GUID(GUID_Buffer_EnvReverb, 0x186cc542,0xdb29,0x11d3,0x9b,0xd1,0x0,0x80,0xc7,0x15,0xa,0x74);
-DEFINE_GUID(GUID_Buffer_Stereo, 0x186cc545,0xdb29,0x11d3,0x9b,0xd1,0x0,0x80,0xc7,0x15,0xa,0x74);
-DEFINE_GUID(GUID_Buffer_3D_Dry, 0x186cc546,0xdb29,0x11d3,0x9b,0xd1,0x0,0x80,0xc7,0x15,0xa,0x74);
-DEFINE_GUID(GUID_Buffer_Mono, 0x186cc547,0xdb29,0x11d3,0x9b,0xd1,0x0,0x80,0xc7,0x15,0xa,0x74);
+/* GUIDs - all types loader */
+DEFINE_GUID(GUID_DirectMusicAllTypes, 0xd2ac2893,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+/* GUIDs - notification */
+DEFINE_GUID(GUID_NOTIFICATION_CHORD, 0xd2ac289b,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_NOTIFICATION_COMMAND, 0xd2ac289c,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_NOTIFICATION_MEASUREANDBEAT, 0xd2ac289a,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_NOTIFICATION_PERFORMANCE, 0x81f75bc5,0x4e5d,0x11d2,0xbc,0xc7,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+DEFINE_GUID(GUID_NOTIFICATION_RECOMPOSE, 0xd348372b,0x945b,0x45ae,0xa5,0x22,0x45,0x0f,0x12,0x5b,0x84,0xa5);
+DEFINE_GUID(GUID_NOTIFICATION_SEGMENT, 0xd2ac2899,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+/* GUIDs - param types */
+DEFINE_GUID(GUID_BandParam, 0x02bb1938,0xcb8b,0x11d2,0x8b,0xb9,0x00,0x60,0x08,0x93,0xb1,0xb6);
+DEFINE_GUID(GUID_ChordParam, 0xd2ac289e,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_CommandParam, 0xd2ac289d,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_CommandParam2, 0x28f97ef7,0x9538,0x11d2,0x97,0xa9,0x00,0xc0,0x4f,0xa3,0x6e,0x58);
+DEFINE_GUID(GUID_CommandParamNext, 0x472afe7a,0x281b,0x11d3,0x81,0x7d,0x00,0xc0,0x4f,0xa3,0x6e,0x58);
+DEFINE_GUID(GUID_IDirectMusicBand, 0xd2ac28ac,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_IDirectMusicChordMap, 0xd2ac28ad,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_IDirectMusicStyle, 0xd2ac28a1,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_MuteParam, 0xd2ac28af,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_Play_Marker, 0xd8761a41,0x801a,0x11d3,0x9b,0xd1,0xda,0xf7,0xe1,0xc3,0xd8,0x34);
+DEFINE_GUID(GUID_RhythmParam, 0xd2ac289f,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_TempoParam, 0xd2ac28a5,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_TimeSignature, 0xd2ac28a4,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_Valid_Start_Time, 0x7f6b1760,0x1fdb,0x11d3,0x82,0x26,0x44,0x45,0x53,0x54,0x00,0x00);
+/* GUIDs - param setting */
+DEFINE_GUID(GUID_Clear_All_Bands, 0xd2ac28ab,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_ConnectToDLSCollection, 0x1db1ae6b,0xe92e,0x11d1,0xa8,0xc5,0x00,0xc0,0x4f,0xa3,0x72,0x6e);
+DEFINE_GUID(GUID_Disable_Auto_Download, 0xd2ac28aa,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_DisableTempo, 0x45fc707d,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+DEFINE_GUID(GUID_DisableTimeSig, 0x45fc707b,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+DEFINE_GUID(GUID_Download, 0xd2ac28a7,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_DownloadToAudioPath, 0x9f2c0341,0xc5c4,0x11d3,0x9b,0xd1,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_Enable_Auto_Download, 0xd2ac28a9,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_EnableTempo, 0x45fc707e,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+DEFINE_GUID(GUID_EnableTimeSig, 0x45fc707c,0x1db4,0x11d2,0xbc,0xac,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+#define GUID_IgnoreBankSelectForGM GUID_StandardMIDIFile
+DEFINE_GUID(GUID_SeedVariations, 0x65b76fa5,0xff37,0x11d2,0x81,0x4e,0x00,0xc0,0x4f,0xa3,0x6e,0x58);
+DEFINE_GUID(GUID_StandardMIDIFile, 0x06621075,0xe92e,0x11d1,0xa8,0xc5,0x00,0xc0,0x4f,0xa3,0x72,0x6e);
+DEFINE_GUID(GUID_Unload, 0xd2ac28a8,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_UnloadFromAudioPath, 0x9f2c0342,0xc5c4,0x11d3,0x9b,0xd1,0x44,0x45,0x53,0x54,0x00,0x00);
+DEFINE_GUID(GUID_Variations, 0x11f72cce,0x26e6,0x4ecd,0xaf,0x2e,0xd6,0x68,0xe6,0x67,0x07,0xd8);
+/* GUIDs - global data */
+DEFINE_GUID(GUID_PerfMasterTempo, 0xd2ac28b0,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_PerfMasterVolume, 0xd2ac28b1,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_PerfMasterGrooveLevel, 0xd2ac28b2,0xb39b,0x11d1,0x87,0x04,0x00,0x60,0x08,0x93,0xb1,0xbd);
+DEFINE_GUID(GUID_PerfAutoDownload, 0xfb09565b,0x3631,0x11d2,0xbc,0xb8,0x00,0xa0,0xc9,0x22,0xe6,0xeb);
+/* GUID - default DLS collection */
+DEFINE_GUID(GUID_DefaultGMCollection, 0xf17e8673,0xc3b4,0x11d1,0x87,0x0b,0x00,0x60,0x08,0x93,0xb1,0xbd);
+/* GUID - default synthesizer */
+DEFINE_GUID(GUID_Synth_Default, 0x26bb9432,0x45fe,0x48d3,0xa3,0x75,0x24,0x72,0xc5,0xe3,0xe7,0x86);
+/* GUIDs - define default buffer configuration */
+DEFINE_GUID(GUID_Buffer_Reverb, 0x186cc541,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+DEFINE_GUID(GUID_Buffer_EnvReverb, 0x186cc542,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+DEFINE_GUID(GUID_Buffer_Stereo, 0x186cc545,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+DEFINE_GUID(GUID_Buffer_3D_Dry, 0x186cc546,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
+DEFINE_GUID(GUID_Buffer_Mono, 0x186cc547,0xdb29,0x11d3,0x9b,0xd1,0x00,0x80,0xc7,0x15,0x0a,0x74);
/*****************************************************************************
- * Definitions
+ * Typedef definitions
*/
-#define MT_MIN 0x80000000
-#define MT_MAX 0x7FFFFFFF
+typedef WORD TRANSITION_TYPE, *LPTRANSITION_TYPE;
+/*
+ * typedef __int64 REFERENCE_TIME, *LPREFERENCE_TIME;
+ * typedef long MUSIC_TIME, *LPMUSIC_TIME;
+ */
-#define DMUS_PPQ 768
-#define DMUS_PMSG_PART \
- DWORD dwSize; \
- REFERENCE_TIME rtTime; \
- MUSIC_TIME mtTime; \
- DWORD dwFlags; \
- DWORD dwPChannel; \
- DWORD dwVirtualTrackID; \
- IDirectMusicTool* pTool; \
- IDirectMusicGraph* pGraph; \
- DWORD dwType; \
- DWORD dwVoiceID; \
- DWORD dwGroupID; \
- IUnknown* punkUser;
+/*****************************************************************************
+ * Flags
+ */
+#define DMUS_APATH_SHARED_STEREOPLUSREVERB 0x1
+#define DMUS_APATH_DYNAMIC_3D 0x6
+#define DMUS_APATH_DYNAMIC_MONO 0x7
+#define DMUS_APATH_DYNAMIC_STEREO 0x8
+
+#define DMUS_AUDIOF_3D 0x01
+#define DMUS_AUDIOF_ENVIRON 0x02
+#define DMUS_AUDIOF_EAX 0x04
+#define DMUS_AUDIOF_DMOS 0x08
+#define DMUS_AUDIOF_STREAMING 0x10
+#define DMUS_AUDIOF_BUFFERS 0x20
+#define DMUS_AUDIOF_ALL 0x3F
+
+#define DMUS_AUDIOPARAMS_FEATURES 0x1
+#define DMUS_AUDIOPARAMS_VOICES 0x2
+#define DMUS_AUDIOPARAMS_SAMPLERATE 0x4
+#define DMUS_AUDIOPARAMS_DEFAULTSYNTH 0x8
+
+#define DMUS_CURVET_PBCURVE 0x03
+#define DMUS_CURVET_CCCURVE 0x04
+#define DMUS_CURVET_MATCURVE 0x05
+#define DMUS_CURVET_PATCURVE 0x06
+#define DMUS_CURVET_RPNCURVE 0x07
+#define DMUS_CURVET_NRPNCURVE 0x08
+
+#define DMUS_MASTERTEMPO_MAX 100.0f
+#define DMUS_MASTERTEMPO_MIN 0.01f
+
+#define DMUS_MAX_NAME 0x40
+#define DMUS_MAX_CATEGORY 0x40
+#define DMUS_MAX_FILENAME MAX_PATH
+
+#define DMUS_MAXSUBCHORD 0x8
+
+#define DMUS_NOTIFICATION_SEGSTART 0x0
+#define DMUS_NOTIFICATION_SEGEND 0x1
+#define DMUS_NOTIFICATION_SEGALMOSTEND 0x2
+#define DMUS_NOTIFICATION_SEGLOOP 0x3
+#define DMUS_NOTIFICATION_SEGABORT 0x4
+#define DMUS_NOTIFICATION_MUSICSTARTED 0x0
+#define DMUS_NOTIFICATION_MUSICSTOPPED 0x1
+#define DMUS_NOTIFICATION_MUSICALMOSTEND 0x2
+#define DMUS_NOTIFICATION_MEASUREBEAT 0x0
+#define DMUS_NOTIFICATION_CHORD 0x0
+#define DMUS_NOTIFICATION_GROOVE 0x0
+#define DMUS_NOTIFICATION_EMBELLISHMENT 0x1
+#define DMUS_NOTIFICATION_RECOMPOSE 0x0
+
+#define DMUS_OBJ_OBJECT 0x001
+#define DMUS_OBJ_CLASS 0x002
+#define DMUS_OBJ_NAME 0x004
+#define DMUS_OBJ_CATEGORY 0x008
+#define DMUS_OBJ_FILENAME 0x010
+#define DMUS_OBJ_FULLPATH 0x020
+#define DMUS_OBJ_URL 0x040
+#define DMUS_OBJ_VERSION 0x080
+#define DMUS_OBJ_DATE 0x100
+#define DMUS_OBJ_LOADED 0x200
+#define DMUS_OBJ_MEMORY 0x400
+#define DMUS_OBJ_STREAM 0x800
+
+#define DMUS_PATH_SEGMENT 0x1000
+#define DMUS_PATH_SEGMENT_TRACK 0x1100
+#define DMUS_PATH_SEGMENT_GRAPH 0x1200
+#define DMUS_PATH_SEGMENT_TOOL 0x1300
+#define DMUS_PATH_AUDIOPATH 0x2000
+#define DMUS_PATH_AUDIOPATH_GRAPH 0x2200
+#define DMUS_PATH_AUDIOPATH_TOOL 0x2300
+#define DMUS_PATH_PERFORMANCE 0x3000
+#define DMUS_PATH_PERFORMANCE_GRAPH 0x3200
+#define DMUS_PATH_PERFORMANCE_TOOL 0x3300
+#define DMUS_PATH_PORT 0x4000
+#define DMUS_PATH_BUFFER 0x6000
+#define DMUS_PATH_BUFFER_DMO 0x6100
+#define DMUS_PATH_MIXIN_BUFFER 0x7000
+#define DMUS_PATH_MIXIN_BUFFER_DMO 0x7100
+#define DMUS_PATH_PRIMARY_BUFFER 0x8000
#define DMUS_PCHANNEL_BROADCAST_PERFORMANCE 0xFFFFFFFF
#define DMUS_PCHANNEL_BROADCAST_AUDIOPATH 0xFFFFFFFE
#define DMUS_PCHANNEL_BROADCAST_SEGMENT 0xFFFFFFFD
#define DMUS_PCHANNEL_BROADCAST_GROUPS 0xFFFFFFFC
-#define DMUS_PCHANNEL_ALL 0xFFFFFFFB
+#define DMUS_PCHANNEL_ALL 0xFFFFFFFB
-#define DMUS_PATH_SEGMENT 0x1000
-#define DMUS_PATH_SEGMENT_TRACK 0x1100
-#define DMUS_PATH_SEGMENT_GRAPH 0x1200
-#define DMUS_PATH_SEGMENT_TOOL 0x1300
-#define DMUS_PATH_AUDIOPATH 0x2000
-#define DMUS_PATH_AUDIOPATH_GRAPH 0x2200
-#define DMUS_PATH_AUDIOPATH_TOOL 0x2300
-#define DMUS_PATH_PERFORMANCE 0x3000
-#define DMUS_PATH_PERFORMANCE_GRAPH 0x3200
-#define DMUS_PATH_PERFORMANCE_TOOL 0x3300
-#define DMUS_PATH_PORT 0x4000
-#define DMUS_PATH_BUFFER 0x6000
-#define DMUS_PATH_BUFFER_DMO 0x6100
-#define DMUS_PATH_MIXIN_BUFFER 0x7000
-#define DMUS_PATH_MIXIN_BUFFER_DMO 0x7100
-#define DMUS_PATH_PRIMARY_BUFFER 0x8000
-
-#define DMUS_APATH_SHARED_STEREOPLUSREVERB 0x1
-#define DMUS_APATH_DYNAMIC_3D 0x6
-#define DMUS_APATH_DYNAMIC_MONO 0x7
-#define DMUS_APATH_DYNAMIC_STEREO 0x8
-
-#define DMUS_AUDIOF_3D 0x1
-#define DMUS_AUDIOF_ENVIRON 0x2
-#define DMUS_AUDIOF_EAX 0x4
-#define DMUS_AUDIOF_DMOS 0x8
-#define DMUS_AUDIOF_STREAMING 0x10
-#define DMUS_AUDIOF_BUFFERS 0x20
-#define DMUS_AUDIOF_ALL 0x3F
-
-#define DMUS_AUDIOPARAMS_FEATURES 0x00000001
-#define DMUS_AUDIOPARAMS_VOICES 0x00000002
-#define DMUS_AUDIOPARAMS_SAMPLERATE 0x00000004
-#define DMUS_AUDIOPARAMS_DEFAULTSYNTH 0x00000008
-
-#define DMUS_SEG_REPEAT_INFINITE 0xFFFFFFFF
-#define DMUS_SEG_ALLTRACKS 0x80000000
-#define DMUS_SEG_ANYTRACK 0x80000000
-
-#define DMUS_MAXSUBCHORD 8
-
-#define DMUS_PLAYMODE_FIXED 0
+#define DMUS_PLAYMODE_FIXED 0x0
#define DMUS_PLAYMODE_FIXEDTOKEY DMUS_PLAYMODE_KEY_ROOT
#define DMUS_PLAYMODE_FIXEDTOCHORD DMUS_PLAYMODE_CHORD_ROOT
#define DMUS_PLAYMODE_PEDALPOINT (DMUS_PLAYMODE_KEY_ROOT | DMUS_PLAYMODE_SCALE_INTERVALS)
@@ -285,531 +306,485 @@
#define DMUS_PLAYMODE_SCALE_ROOT DMUS_PLAYMODE_KEY_ROOT
#define DMUS_PLAYMODE_FIXEDTOSCALE DMUS_PLAYMODE_FIXEDTOKEY
-#define DMUS_TEMPO_MAX 1000
-#define DMUS_TEMPO_MIN 1
+#define DMUS_PPQ 768
-#define DMUS_MASTERTEMPO_MAX 100.0f
-#define DMUS_MASTERTEMPO_MIN 0.01f
+#define DMUS_SEG_REPEAT_INFINITE 0xFFFFFFFF
+#define DMUS_SEG_ALLTRACKS 0x80000000
+#define DMUS_SEG_ANYTRACK 0x80000000
-#define DMUS_CURVET_PBCURVE 0x03
-#define DMUS_CURVET_CCCURVE 0x04
-#define DMUS_CURVET_MATCURVE 0x05
-#define DMUS_CURVET_PATCURVE 0x06
-#define DMUS_CURVET_RPNCURVE 0x07
-#define DMUS_CURVET_NRPNCURVE 0x08
+#define DMUS_TEMPO_MAX 1000
+#define DMUS_TEMPO_MIN 1
-#define DMUS_NOTIFICATION_SEGSTART 0x0
-#define DMUS_NOTIFICATION_SEGEND 0x1
-#define DMUS_NOTIFICATION_SEGALMOSTEND 0x2
-#define DMUS_NOTIFICATION_SEGLOOP 0x3
-#define DMUS_NOTIFICATION_SEGABORT 0x4
+#define DMUS_TRACKCONFIG_OVERRIDE_ALL 0x00001
+#define DMUS_TRACKCONFIG_OVERRIDE_PRIMARY 0x00002
+#define DMUS_TRACKCONFIG_FALLBACK 0x00004
+#define DMUS_TRACKCONFIG_CONTROL_ENABLED 0x00008
+#define DMUS_TRACKCONFIG_PLAY_ENABLED 0x00010
+#define DMUS_TRACKCONFIG_NOTIFICATION_ENABLED 0x00020
+#define DMUS_TRACKCONFIG_PLAY_CLOCKTIME 0x00040
+#define DMUS_TRACKCONFIG_PLAY_COMPOSE 0x00080
+#define DMUS_TRACKCONFIG_LOOP_COMPOSE 0x00100
+#define DMUS_TRACKCONFIG_COMPOSING 0x00200
+#define DMUS_TRACKCONFIG_TRANS1_FROMSEGSTART 0x00400
+#define DMUS_TRACKCONFIG_TRANS1_FROMSEGCURRENT 0x00800
+#define DMUS_TRACKCONFIG_TRANS1_TOSEGSTART 0x01000
+#define DMUS_TRACKCONFIG_CONTROL_PLAY 0x10000
+#define DMUS_TRACKCONFIG_CONTROL_NOTIFICATION 0x20000
+#define DMUS_TRACKCONFIG_DEFAULT (DMUS_TRACKCONFIG_CONTROL_ENABLED | DMUS_TRACKCONFIG_PLAY_ENABLED | DMUS_TRACKCONFIG_NOTIFICATION_ENABLED)
-#define DMUS_NOTIFICATION_MUSICSTARTED 0x0
-#define DMUS_NOTIFICATION_MUSICSTOPPED 0x1
-#define DMUS_NOTIFICATION_MUSICALMOSTEND 0x2
+#define DMUS_WAVEF_OFF 0x01
+#define DMUS_WAVEF_STREAMING 0x02
+#define DMUS_WAVEF_NOINVALIDATE 0x04
+#define DMUS_WAVEF_NOPREROLL 0x08
+#define DMUS_WAVEF_IGNORELOOPS 0x20
-#define DMUS_NOTIFICATION_MEASUREBEAT 0x0
+#define DMUSB_LOADED 0x1
+#define DMUSB_DEFAULT 0x2
-#define DMUS_NOTIFICATION_CHORD 0x0
+#define MT_MIN 0x80000000
+#define MT_MAX 0x7FFFFFFF
-#define DMUS_NOTIFICATION_GROOVE 0x0
-#define DMUS_NOTIFICATION_EMBELLISHMENT 0x1
-#define DMUS_NOTIFICATION_RECOMPOSE 0x0
+/*****************************************************************************
+ * Definitions
+ */
+#define DMUS_PMSG_PART \
+ DWORD dwSize; \
+ REFERENCE_TIME rtTime; \
+ MUSIC_TIME mtTime; \
+ DWORD dwFlags; \
+ DWORD dwPChannel; \
+ DWORD dwVirtualTrackID; \
+ IDirectMusicTool* pTool; \
+ IDirectMusicGraph* pGraph; \
+ DWORD dwType; \
+ DWORD dwVoiceID; \
+ DWORD dwGroupID; \
+ IUnknown* punkUser;
-#define DMUS_WAVEF_OFF 0x1
-#define DMUS_WAVEF_STREAMING 0x2
-#define DMUS_WAVEF_NOINVALIDATE 0x4
-#define DMUS_WAVEF_NOPREROLL 0x8
-#define DMUS_MAX_NAME 0x40
-#define DMUS_MAX_CATEGORY 0x40
-#define DMUS_MAX_FILENAME MAX_PATH
+/*****************************************************************************
+ * Enumerations
+ */
+/* typedef definitions */
+typedef enum enumDMUS_STYLET_TYPES DMUS_STYLET_TYPES;
+typedef enum enumDMUS_COMMANDT_TYPES DMUS_COMMANDT_TYPES;
+typedef enum enumDMUS_SHAPET_TYPES DMUS_SHAPET_TYPES;
+typedef enum enumDMUS_COMPOSEF_FLAGS DMUS_COMPOSEF_FLAGS;
+typedef enum enumDMUS_PMSGF_FLAGS DMUS_PMSGF_FLAGS;
+typedef enum enumDMUS_PMSGT_TYPES DMUS_PMSGT_TYPES;
+typedef enum enumDMUS_SEGF_FLAGS DMUS_SEGF_FLAGS;
+typedef enum enumDMUS_TIME_RESOLVE_FLAGS DMUS_TIME_RESOLVE_FLAGS;
+typedef enum enumDMUS_CHORDKEYF_FLAGS DMUS_CHORDKEYF_FLAGS;
+typedef enum enumDMUS_NOTEF_FLAGS DMUS_NOTEF_FLAGS;
+typedef enum enumDMUS_PLAYMODE_FLAGS DMUS_PLAYMODE_FLAGS;
+typedef enum enumDMUS_CURVE_FLAGS DMUS_CURVE_FLAGS;
-#define DMUS_OBJ_OBJECT 0x001
-#define DMUS_OBJ_CLASS 0x002
-#define DMUS_OBJ_NAME 0x004
-#define DMUS_OBJ_CATEGORY 0x008
-#define DMUS_OBJ_FILENAME 0x010
-#define DMUS_OBJ_FULLPATH 0x020
-#define DMUS_OBJ_URL 0x040
-#define DMUS_OBJ_VERSION 0x080
-#define DMUS_OBJ_DATE 0x100
-#define DMUS_OBJ_LOADED 0x200
-#define DMUS_OBJ_MEMORY 0x400
-#define DMUS_OBJ_STREAM 0x800
-#define DMUS_TRACKCONFIG_OVERRIDE_ALL 0x00001
-#define DMUS_TRACKCONFIG_OVERRIDE_PRIMARY 0x00002
-#define DMUS_TRACKCONFIG_FALLBACK 0x00004
-#define DMUS_TRACKCONFIG_CONTROL_ENABLED 0x00008
-#define DMUS_TRACKCONFIG_PLAY_ENABLED 0x00010
-#define DMUS_TRACKCONFIG_NOTIFICATION_ENABLED 0x00020
-#define DMUS_TRACKCONFIG_PLAY_CLOCKTIME 0x00040
-#define DMUS_TRACKCONFIG_PLAY_COMPOSE 0x00080
-#define DMUS_TRACKCONFIG_LOOP_COMPOSE 0x00100
-#define DMUS_TRACKCONFIG_COMPOSING 0x00200
-#define DMUS_TRACKCONFIG_TRANS1_FROMSEGSTART 0x00400
-#define DMUS_TRACKCONFIG_TRANS1_FROMSEGCURRENT 0x00800
-#define DMUS_TRACKCONFIG_TRANS1_TOSEGSTART 0x01000
-#define DMUS_TRACKCONFIG_CONTROL_PLAY 0x10000
-#define DMUS_TRACKCONFIG_CONTROL_NOTIFICATION 0x20000
-#define DMUS_TRACKCONFIG_DEFAULT (DMUS_TRACKCONFIG_CONTROL_ENABLED | DMUS_TRACKCONFIG_PLAY_ENABLED | DMUS_TRACKCONFIG_NOTIFICATION_ENABLED)
-#define DMUS_MAX_FRAGMENTLABEL 20
+/* actual enumerations */
+enum enumDMUS_STYLET_TYPES {
+ DMUS_STYLET_PATTERN = 0x0,
+ DMUS_STYLET_MOTIF = 0x1,
+};
-#define DMUS_FRAGMENTF_USE_REPEAT 0x1
-#define DMUS_FRAGMENTF_REJECT_REPEAT 0x2
-#define DMUS_FRAGMENTF_USE_LABEL 0x4
+enum enumDMUS_COMMANDT_TYPES {
+ DMUS_COMMANDT_GROOVE = 0x0,
+ DMUS_COMMANDT_FILL = 0x1,
+ DMUS_COMMANDT_INTRO = 0x2,
+ DMUS_COMMANDT_BREAK = 0x3,
+ DMUS_COMMANDT_END = 0x4,
+ DMUS_COMMANDT_ENDANDINTRO = 0x5
+};
-#define DMUS_CONNECTIONF_INTERVALS 0x2
-#define DMUS_CONNECTIONF_OVERLAP 0x4
+enum enumDMUS_SHAPET_TYPES {
+ DMUS_SHAPET_FALLING = 0x0,
+ DMUS_SHAPET_LEVEL = 0x1,
+ DMUS_SHAPET_LOOPABLE = 0x2,
+ DMUS_SHAPET_LOUD = 0x3,
+ DMUS_SHAPET_QUIET = 0x4,
+ DMUS_SHAPET_PEAKING = 0x5,
+ DMUS_SHAPET_RANDOM = 0x6,
+ DMUS_SHAPET_RISING = 0x7,
+ DMUS_SHAPET_SONG = 0x8
+};
-#define DMUSB_LOADED 0x1
-#define DMUSB_DEFAULT 0x2
+enum enumDMUS_COMPOSEF_FLAGS {
+ DMUS_COMPOSEF_NONE = 0x000000,
+ DMUS_COMPOSEF_ALIGN = 0x000001,
+ DMUS_COMPOSEF_OVERLAP = 0x000002,
+ DMUS_COMPOSEF_IMMEDIATE = 0x000004,
+ DMUS_COMPOSEF_GRID = 0x000008,
+ DMUS_COMPOSEF_BEAT = 0x000010,
+ DMUS_COMPOSEF_MEASURE = 0x000020,
+ DMUS_COMPOSEF_AFTERPREPARETIME = 0x000040,
+ DMUS_COMPOSEF_VALID_START_BEAT = 0x000080,
+ DMUS_COMPOSEF_VALID_START_GRID = 0x000100,
+ DMUS_COMPOSEF_VALID_START_TICK = 0x000200,
+ DMUS_COMPOSEF_SEGMENTEND = 0x000400,
+ DMUS_COMPOSEF_MARKER = 0x000800,
+ DMUS_COMPOSEF_MODULATE = 0x001000,
+ DMUS_COMPOSEF_LONG = 0x002000,
+ DMUS_COMPOSEF_ENTIRE_TRANSITION = 0x004000,
+ DMUS_COMPOSEF_1BAR_TRANSITION = 0x008000,
+ DMUS_COMPOSEF_ENTIRE_ADDITION = 0x010000,
+ DMUS_COMPOSEF_1BAR_ADDITION = 0x020000,
+ DMUS_COMPOSEF_VALID_START_MEASURE = 0x040000,
+ DMUS_COMPOSEF_DEFAULT = 0x080000,
+ DMUS_COMPOSEF_NOINVALIDATE = 0x100000,
+ DMUS_COMPOSEF_USE_AUDIOPATH = 0x200000,
+ DMUS_COMPOSEF_INVALIDATE_PRI = 0x400000
+};
+
+enum enumDMUS_PMSGF_FLAGS {
+ DMUS_PMSGF_REFTIME = 1,
+ DMUS_PMSGF_MUSICTIME = 2,
+ DMUS_PMSGF_TOOL_IMMEDIATE = 4,
+ DMUS_PMSGF_TOOL_QUEUE = 8,
+ DMUS_PMSGF_TOOL_ATTIME = 0x10,
+ DMUS_PMSGF_TOOL_FLUSH = 0x20,
+ DMUS_PMSGF_LOCKTOREFTIME = 0x40,
+ DMUS_PMSGF_DX8 = 0x80
+};
+
+enum enumDMUS_PMSGT_TYPES {
+ DMUS_PMSGT_MIDI = 0x00,
+ DMUS_PMSGT_NOTE = 0x01,
+ DMUS_PMSGT_SYSEX = 0x02,
+ DMUS_PMSGT_NOTIFICATION = 0x03,
+ DMUS_PMSGT_TEMPO = 0x04,
+ DMUS_PMSGT_CURVE = 0x05,
+ DMUS_PMSGT_TIMESIG = 0x06,
+ DMUS_PMSGT_PATCH = 0x07,
+ DMUS_PMSGT_TRANSPOSE = 0x08,
+ DMUS_PMSGT_CHANNEL_PRIORITY = 0x09,
+ DMUS_PMSGT_STOP = 0x0A,
+ DMUS_PMSGT_DIRTY = 0x0B,
+ DMUS_PMSGT_WAVE = 0x0C,
+ DMUS_PMSGT_LYRIC = 0x0D,
+ DMUS_PMSGT_SCRIPTLYRIC = 0x0E,
+ DMUS_PMSGT_USER = 0xFF
+};
+
+enum enumDMUS_SEGF_FLAGS {
+ DMUS_SEGF_REFTIME = 0x000040,
+ DMUS_SEGF_SECONDARY = 0x000080,
+ DMUS_SEGF_QUEUE = 0x000100,
+ DMUS_SEGF_CONTROL = 0x000200,
+ DMUS_SEGF_AFTERPREPARETIME = 0x000400,
+ DMUS_SEGF_GRID = 0x000800,
+ DMUS_SEGF_BEAT = 0x001000,
+ DMUS_SEGF_MEASURE = 0x002000,
+ DMUS_SEGF_DEFAULT = 0x004000,
+ DMUS_SEGF_NOINVALIDATE = 0x008000,
+ DMUS_SEGF_ALIGN = 0x0010000,
+ DMUS_SEGF_VALID_START_BEAT = 0x0020000,
+ DMUS_SEGF_VALID_START_GRID = 0x0040000,
+ DMUS_SEGF_VALID_START_TICK = 0x0080000,
+ DMUS_SEGF_AUTOTRANSITION = 0x0100000,
+ DMUS_SEGF_AFTERQUEUETIME = 0x0200000,
+ DMUS_SEGF_AFTERLATENCYTIME = 0x0400000,
+ DMUS_SEGF_SEGMENTEND = 0x0800000,
+ DMUS_SEGF_MARKER = 0x01000000,
+ DMUS_SEGF_TIMESIG_ALWAYS = 0x02000000,
+ DMUS_SEGF_USE_AUDIOPATH = 0x04000000,
+ DMUS_SEGF_VALID_START_MEASURE = 0x08000000,
+ DMUS_SEGF_INVALIDATE_PRI = 0x10000000
+};
+
+enum enumDMUS_TIME_RESOLVE_FLAGS {
+ DMUS_TIME_RESOLVE_AFTERPREPARETIME = DMUS_SEGF_AFTERPREPARETIME,
+ DMUS_TIME_RESOLVE_AFTERQUEUETIME = DMUS_SEGF_AFTERQUEUETIME,
+ DMUS_TIME_RESOLVE_AFTERLATENCYTIME = DMUS_SEGF_AFTERLATENCYTIME,
+ DMUS_TIME_RESOLVE_GRID = DMUS_SEGF_GRID,
+ DMUS_TIME_RESOLVE_BEAT = DMUS_SEGF_BEAT,
+ DMUS_TIME_RESOLVE_MEASURE = DMUS_SEGF_MEASURE,
+ DMUS_TIME_RESOLVE_MARKER = DMUS_SEGF_MARKER,
+ DMUS_TIME_RESOLVE_SEGMENTEND = DMUS_SEGF_SEGMENTEND,
+};
+
+enum enumDMUS_CHORDKEYF_FLAGS {
+ DMUS_CHORDKEYF_SILENT = 0x1,
+};
+
+enum enumDMUS_NOTEF_FLAGS {
+ DMUS_NOTEF_NOTEON = 0x01,
+ /* DX8 */
+ DMUS_NOTEF_NOINVALIDATE = 0x02,
+ DMUS_NOTEF_NOINVALIDATE_INSCALE = 0x04,
+ DMUS_NOTEF_NOINVALIDATE_INCHORD = 0x08,
+ DMUS_NOTEF_REGENERATE = 0x10,
+};
+
+enum enumDMUS_PLAYMODE_FLAGS {
+ DMUS_PLAYMODE_KEY_ROOT = 0x01,
+ DMUS_PLAYMODE_CHORD_ROOT = 0x02,
+ DMUS_PLAYMODE_SCALE_INTERVALS = 0x04,
+ DMUS_PLAYMODE_CHORD_INTERVALS = 0x08,
+ DMUS_PLAYMODE_NONE = 0x10,
+};
+
+enum enumDMUS_CURVE_FLAGS {
+ DMUS_CURVE_RESET = 0x1,
+ DMUS_CURVE_START_FROM_CURRENT = 0x2
+};
+
+enum {
+ DMUS_CURVES_LINEAR = 0x0,
+ DMUS_CURVES_INSTANT = 0x1,
+ DMUS_CURVES_EXP = 0x2,
+ DMUS_CURVES_LOG = 0x3,
+ DMUS_CURVES_SINE = 0x4
+};
+
/*****************************************************************************
* Structures
*/
-typedef enum enumDMUS_STYLET_TYPES
-{
- DMUS_STYLET_PATTERN = 0,
- DMUS_STYLET_MOTIF = 1,
- DMUS_STYLET_FRAGMENT = 2,
-} DMUS_STYLET_TYPES;
+/* typedef definitions */
+/*typedef struct _DMUS_PMSG DMUS_PMSG, *LPDMUS_PMSG; */
+typedef struct _DMUS_AUDIOPARAMS DMUS_AUDIOPARAMS, *LPDMUS_AUDIOPARAMS;
+typedef struct _DMUS_SUBCHORD DMUS_SUBCHORD, *LPDMUS_SUBCHORD;
+typedef struct _DMUS_CHORD_KEY DMUS_CHORD_KEY, *LPDMUS_CHORD_KEY;
+typedef struct _DMUS_NOTE_PMSG DMUS_NOTE_PMSG, *LPDMUS_NOTE_PMSG;
+typedef struct _DMUS_MIDI_PMSG DMUS_MIDI_PMSG, *LPDMUS_MIDI_PMSG;
+typedef struct _DMUS_PATCH_PMSG DMUS_PATCH_PMSG, *LPDMUS_PATCH_PMSG;
+typedef struct _DMUS_TRANSPOSE_PMSG DMUS_TRANSPOSE_PMSG, *LPDMUS_TRANSPOSE_PMSG;
+typedef struct _DMUS_CHANNEL_PRIORITY_PMSG DMUS_CHANNEL_PRIORITY_PMSG, *LPDMUS_CHANNEL_PRIORITY_PMSG;
+typedef struct _DMUS_TEMPO_PMSG DMUS_TEMPO_PMSG, *LPDMUS_TEMPO_PMSG;
+typedef struct _DMUS_SYSEX_PMSG DMUS_SYSEX_PMSG, *LPDMUS_SYSEX_PMSG;
+typedef struct _DMUS_CURVE_PMSG DMUS_CURVE_PMSG, *LPDMUS_CURVE_PMSG;
+typedef struct _DMUS_TIMESIG_PMSG DMUS_TIMESIG_PMSG, *LPDMUS_TIMESIG_PMSG;
+typedef struct _DMUS_NOTIFICATION_PMSG DMUS_NOTIFICATION_PMSG, *LPDMUS_NOTIFICATION_PMSG;
+typedef struct _DMUS_WAVE_PMSG DMUS_WAVE_PMSG, *LPDMUS_WAVE_PMSG;
+typedef struct _DMUS_LYRIC_PMSG DMUS_LYRIC_PMSG, *LPDMUS_LYRIC_PMSG;
+typedef struct _DMUS_VERSION DMUS_VERSION, *LPDMUS_VERSION;
+typedef struct _DMUS_TIMESIGNATURE DMUS_TIMESIGNATURE, *LPDMUS_TIMESIGNATURE;
+typedef struct _DMUS_VALID_START_PARAM DMUS_VALID_START_PARAM, *LPDMUS_VALID_START_PARAM;
+typedef struct _DMUS_PLAY_MARKER_PARAM DMUS_PLAY_MARKER_PARAM, *LPDMUS_PLAY_MARKER_PARAM;
+typedef struct _DMUS_OBJECTDESC DMUS_OBJECTDESC, *LPDMUS_OBJECTDESC;
+typedef struct _DMUS_SCRIPT_ERRORINFO DMUS_SCRIPT_ERRORINFO, *LPDMUS_SCRIPT_ERRORINFO;
+typedef struct _DMUS_COMMAND_PARAM DMUS_COMMAND_PARAM, *LPDMUS_COMMAND_PARAM;
+typedef struct _DMUS_COMMAND_PARAM_2 DMUS_COMMAND_PARAM_2, *LPDMUS_COMMAND_PARAM_2;
+typedef struct _DMUS_BAND_PARAM DMUS_BAND_PARAM, *LPDMUS_BAND_PARAM;
+typedef struct _DMUS_VARIATIONS_PARAM DMUS_VARIATIONS_PARAM, *LPDMUS_VARIATIONS_PARAM;
-typedef enum enumDMUS_COMMANDT_TYPES
-{
- DMUS_COMMANDT_GROOVE = 0,
- DMUS_COMMANDT_FILL = 1,
- DMUS_COMMANDT_INTRO = 2,
- DMUS_COMMANDT_BREAK = 3,
- DMUS_COMMANDT_END = 4,
- DMUS_COMMANDT_ENDANDINTRO = 5
-} DMUS_COMMANDT_TYPES;
-
-typedef enum enumDMUS_SHAPET_TYPES
-{
- DMUS_SHAPET_FALLING = 0,
- DMUS_SHAPET_LEVEL = 1,
- DMUS_SHAPET_LOOPABLE = 2,
- DMUS_SHAPET_LOUD = 3,
- DMUS_SHAPET_QUIET = 4,
- DMUS_SHAPET_PEAKING = 5,
- DMUS_SHAPET_RANDOM = 6,
- DMUS_SHAPET_RISING = 7,
- DMUS_SHAPET_SONG = 8
-} DMUS_SHAPET_TYPES;
-
-typedef enum enumDMUS_COMPOSEF_FLAGS
-{
- DMUS_COMPOSEF_NONE = 0x00000,
- DMUS_COMPOSEF_ALIGN = 0x00001,
- DMUS_COMPOSEF_OVERLAP = 0x00002,
- DMUS_COMPOSEF_IMMEDIATE = 0x00004,
- DMUS_COMPOSEF_GRID = 0x00008,
- DMUS_COMPOSEF_BEAT = 0x00010,
- DMUS_COMPOSEF_MEASURE = 0x00020,
- DMUS_COMPOSEF_AFTERPREPARETIME = 0x00040,
- DMUS_COMPOSEF_VALID_START_BEAT = 0x00080,
- DMUS_COMPOSEF_VALID_START_GRID = 0x00100,
- DMUS_COMPOSEF_VALID_START_TICK = 0x00200,
- DMUS_COMPOSEF_SEGMENTEND = 0x00400,
- DMUS_COMPOSEF_MARKER = 0x00800,
- DMUS_COMPOSEF_MODULATE = 0x01000,
- DMUS_COMPOSEF_LONG = 0x02000,
- DMUS_COMPOSEF_ENTIRE_TRANSITION = 0x04000,
- DMUS_COMPOSEF_1BAR_TRANSITION = 0x08000,
- DMUS_COMPOSEF_ENTIRE_ADDITION = 0x10000,
- DMUS_COMPOSEF_1BAR_ADDITION = 0x20000,
- DMUS_COMPOSEF_VALID_START_MEASURE = 0x40000,
- DMUS_COMPOSEF_DEFAULT = 0x80000,
- DMUS_COMPOSEF_NOINVALIDATE = 0x100000,
- DMUS_COMPOSEF_USE_AUDIOPATH = 0x200000,
- DMUS_COMPOSEF_INVALIDATE_PRI = 0x400000
-} DMUS_COMPOSEF_FLAGS;
-
-typedef struct _DMUS_PMSG
-{
+/* actual structures */
+struct _DMUS_PMSG {
DMUS_PMSG_PART
-} DMUS_PMSG;
-
-typedef struct _DMUS_AUDIOPARAMS
-{
- DWORD dwSize;
- BOOL fInitNow;
- DWORD dwValidData;
- DWORD dwFeatures;
- DWORD dwVoices;
- DWORD dwSampleRate;
- CLSID clsidDefaultSynth;
-} DMUS_AUDIOPARAMS;
-
-typedef enum enumDMUS_PMSGF_FLAGS
-{
- DMUS_PMSGF_REFTIME = 0x01,
- DMUS_PMSGF_MUSICTIME = 0x02,
- DMUS_PMSGF_TOOL_IMMEDIATE = 0x04,
- DMUS_PMSGF_TOOL_QUEUE = 0x08,
- DMUS_PMSGF_TOOL_ATTIME = 0x10,
- DMUS_PMSGF_TOOL_FLUSH = 0x20,
- DMUS_PMSGF_LOCKTOREFTIME = 0x40,
- DMUS_PMSGF_DX8 = 0x80
-} DMUS_PMSGF_FLAGS;
-
-typedef enum enumDMUS_PMSGT_TYPES
-{
- DMUS_PMSGT_MIDI = 0,
- DMUS_PMSGT_NOTE = 1,
- DMUS_PMSGT_SYSEX = 2,
- DMUS_PMSGT_NOTIFICATION = 3,
- DMUS_PMSGT_TEMPO = 4,
- DMUS_PMSGT_CURVE = 5,
- DMUS_PMSGT_TIMESIG = 6,
- DMUS_PMSGT_PATCH = 7,
- DMUS_PMSGT_TRANSPOSE = 8,
- DMUS_PMSGT_CHANNEL_PRIORITY = 9,
- DMUS_PMSGT_STOP = 10,
- DMUS_PMSGT_DIRTY = 11,
- DMUS_PMSGT_WAVE = 12,
- DMUS_PMSGT_LYRIC = 13,
- DMUS_PMSGT_SCRIPTLYRIC = 14,
- DMUS_PMSGT_USER = 255
-} DMUS_PMSGT_TYPES;
-
-typedef enum enumDMUS_SEGF_FLAGS
-{
- DMUS_SEGF_REFTIME = 0x00000040,
- DMUS_SEGF_SECONDARY = 0x00000080,
- DMUS_SEGF_QUEUE = 0x00000100,
- DMUS_SEGF_CONTROL = 0x00000200,
- DMUS_SEGF_AFTERPREPARETIME = 0x00000400,
- DMUS_SEGF_GRID = 0x00000800,
- DMUS_SEGF_BEAT = 0x00001000,
- DMUS_SEGF_MEASURE = 0x00002000,
- DMUS_SEGF_DEFAULT = 0x00004000,
- DMUS_SEGF_NOINVALIDATE = 0x00008000,
- DMUS_SEGF_ALIGN = 0x00010000,
- DMUS_SEGF_VALID_START_BEAT = 0x00020000,
- DMUS_SEGF_VALID_START_GRID = 0x00040000,
- DMUS_SEGF_VALID_START_TICK = 0x00080000,
- DMUS_SEGF_AUTOTRANSITION = 0x00100000,
- DMUS_SEGF_AFTERQUEUETIME = 0x00200000,
- DMUS_SEGF_AFTERLATENCYTIME = 0x00400000,
- DMUS_SEGF_SEGMENTEND = 0x00800000,
- DMUS_SEGF_MARKER = 0x01000000,
- DMUS_SEGF_TIMESIG_ALWAYS = 0x02000000,
- DMUS_SEGF_USE_AUDIOPATH = 0x04000000,
- DMUS_SEGF_VALID_START_MEASURE = 0x08000000,
- DMUS_SEGF_INVALIDATE_PRI = 0x10000000
-} DMUS_SEGF_FLAGS;
-
-typedef enum enumDMUS_TIME_RESOLVE_FLAGS
-{
- DMUS_TIME_RESOLVE_AFTERPREPARETIME = DMUS_SEGF_AFTERPREPARETIME,
- DMUS_TIME_RESOLVE_AFTERQUEUETIME = DMUS_SEGF_AFTERQUEUETIME,
- DMUS_TIME_RESOLVE_AFTERLATENCYTIME = DMUS_SEGF_AFTERLATENCYTIME,
- DMUS_TIME_RESOLVE_GRID = DMUS_SEGF_GRID,
- DMUS_TIME_RESOLVE_BEAT = DMUS_SEGF_BEAT,
- DMUS_TIME_RESOLVE_MEASURE = DMUS_SEGF_MEASURE,
- DMUS_TIME_RESOLVE_MARKER = DMUS_SEGF_MARKER,
- DMUS_TIME_RESOLVE_SEGMENTEND = DMUS_SEGF_SEGMENTEND,
-} DMUS_TIME_RESOLVE_FLAGS;
-
-typedef enum enumDMUS_CHORDKEYF_FLAGS
-{
- DMUS_CHORDKEYF_SILENT = 1,
-} DMUS_CHORDKEYF_FLAGS;
-
-typedef struct _DMUS_SUBCHORD
-{
- DWORD dwChordPattern;
- DWORD dwScalePattern;
- DWORD dwInversionPoints;
- DWORD dwLevels;
- BYTE bChordRoot;
- BYTE bScaleRoot;
-} DMUS_SUBCHORD;
-
-typedef struct _DMUS_CHORD_KEY
-{
- WCHAR wszName[16];
- WORD wMeasure;
- BYTE bBeat;
- BYTE bSubChordCount;
- DMUS_SUBCHORD SubChordList[DMUS_MAXSUBCHORD];
- DWORD dwScale;
- BYTE bKey;
- BYTE bFlags;
-} DMUS_CHORD_KEY;
-
-typedef struct _DMUS_NOTE_PMSG
-{
- DMUS_PMSG_PART
-
- MUSIC_TIME mtDuration;
- WORD wMusicValue;
- WORD wMeasure;
- short nOffset;
- BYTE bBeat;
- BYTE bGrid;
- BYTE bVelocity;
- BYTE bFlags;
- BYTE bTimeRange;
- BYTE bDurRange;
- BYTE bVelRange;
- BYTE bPlayModeFlags;
- BYTE bSubChordLevel;
- BYTE bMidiValue;
- char cTranspose;
-} DMUS_NOTE_PMSG;
-
-typedef enum enumDMUS_NOTEF_FLAGS
-{
- DMUS_NOTEF_NOTEON = 0x01,
- DMUS_NOTEF_NOINVALIDATE = 0x02,
- DMUS_NOTEF_NOINVALIDATE_INSCALE = 0x04,
- DMUS_NOTEF_NOINVALIDATE_INCHORD = 0x08,
- DMUS_NOTEF_REGENERATE = 0x10,
-} DMUS_NOTEF_FLAGS;
-
-typedef enum enumDMUS_PLAYMODE_FLAGS
-{
- DMUS_PLAYMODE_KEY_ROOT = 0x01,
- DMUS_PLAYMODE_CHORD_ROOT = 0x02,
- DMUS_PLAYMODE_SCALE_INTERVALS = 0x04,
- DMUS_PLAYMODE_CHORD_INTERVALS = 0x08,
- DMUS_PLAYMODE_NONE = 0x10,
-} DMUS_PLAYMODE_FLAGS;
-
-typedef struct _DMUS_MIDI_PMSG
-{
- DMUS_PMSG_PART
-
- BYTE bStatus;
- BYTE bByte1;
- BYTE bByte2;
- BYTE bPad[1];
-} DMUS_MIDI_PMSG;
-
-typedef struct _DMUS_PATCH_PMSG
-{
- DMUS_PMSG_PART
-
- BYTE byInstrument;
- BYTE byMSB;
- BYTE byLSB;
- BYTE byPad[1];
-} DMUS_PATCH_PMSG;
-
-typedef struct _DMUS_TRANSPOSE_PMSG
-{
- DMUS_PMSG_PART
-
- short nTranspose;
- WORD wMergeIndex;
-} DMUS_TRANSPOSE_PMSG;
-
-typedef struct _DMUS_CHANNEL_PRIORITY_PMSG
-{
- DMUS_PMSG_PART
-
- DWORD dwChannelPriority;
-} DMUS_CHANNEL_PRIORITY_PMSG;
-
-typedef struct _DMUS_TEMPO_PMSG
-{
- DMUS_PMSG_PART
-
- double dblTempo;
-} DMUS_TEMPO_PMSG;
-
-typedef struct _DMUS_SYSEX_PMSG
-{
- DMUS_PMSG_PART
-
- DWORD dwLen;
- BYTE abData[1];
-} DMUS_SYSEX_PMSG;
-
-typedef struct _DMUS_CURVE_PMSG
-{
- DMUS_PMSG_PART
-
- MUSIC_TIME mtDuration;
- MUSIC_TIME mtOriginalStart;
- MUSIC_TIME mtResetDuration;
- short nStartValue;
- short nEndValue;
- short nResetValue;
- WORD wMeasure;
- short nOffset;
- BYTE bBeat;
- BYTE bGrid;
- BYTE bType;
- BYTE bCurveShape;
- BYTE bCCData;
- BYTE bFlags;
- WORD wParamType;
- WORD wMergeIndex;
-} DMUS_CURVE_PMSG;
-
-typedef enum enumDMUS_CURVE_FLAGS
-{
- DMUS_CURVE_RESET = 1,
- DMUS_CURVE_START_FROM_CURRENT = 2
-} DMUS_CURVE_FLAGS;
-
-#define DMUS_CURVE_RESET 0x01
-
-enum
-{
- DMUS_CURVES_LINEAR = 0x0,
- DMUS_CURVES_INSTANT = 0x1,
- DMUS_CURVES_EXP = 0x2,
- DMUS_CURVES_LOG = 0x3,
- DMUS_CURVES_SINE = 0x4
};
-typedef struct _DMUS_TIMESIG_PMSG
-{
- DMUS_PMSG_PART
+struct _DMUS_AUDIOPARAMS {
+ DWORD dwSize;
+ BOOL fInitNow;
+ DWORD dwValidData;
+ DWORD dwFeatures;
+ DWORD dwVoices;
+ DWORD dwSampleRate;
+ CLSID clsidDefaultSynth;
+};
- BYTE bBeatsPerMeasure;
- BYTE bBeat;
- WORD wGridsPerBeat;
-} DMUS_TIMESIG_PMSG;
+struct _DMUS_SUBCHORD {
+ DWORD dwChordPattern;
+ DWORD dwScalePattern;
+ DWORD dwInversionPoints;
+ DWORD dwLevels;
+ BYTE bChordRoot;
+ BYTE bScaleRoot;
+};
-typedef struct _DMUS_NOTIFICATION_PMSG
-{
- DMUS_PMSG_PART
+struct _DMUS_CHORD_KEY {
+ WCHAR wszName[16];
+ WORD wMeasure;
+ BYTE bBeat;
+ BYTE bSubChordCount;
+ DMUS_SUBCHORD SubChordList[DMUS_MAXSUBCHORD];
+ DWORD dwScale;
+ BYTE bKey;
+ BYTE bFlags;
+};
- GUID guidNotificationType;
- DWORD dwNotificationOption;
- DWORD dwField1;
- DWORD dwField2;
-} DMUS_NOTIFICATION_PMSG;
+struct _DMUS_NOTE_PMSG {
+ DMUS_PMSG_PART
+ MUSIC_TIME mtDuration;
+ WORD wMusicValue;
+ WORD wMeasure;
+ short nOffset;
+ BYTE bBeat;
+ BYTE bGrid;
+ BYTE bVelocity;
+ BYTE bFlags;
+ BYTE bTimeRange;
+ BYTE bDurRange;
+ BYTE bVelRange;
+ BYTE bPlayModeFlags;
+ BYTE bSubChordLevel;
+ BYTE bMidiValue;
+ char cTranspose;
+};
-typedef struct _DMUS_WAVE_PMSG
-{
- DMUS_PMSG_PART
+struct _DMUS_MIDI_PMSG {
+ DMUS_PMSG_PART
+ BYTE bStatus;
+ BYTE bByte1;
+ BYTE bByte2;
+ BYTE bPad[1];
+};
- REFERENCE_TIME rtStartOffset;
- REFERENCE_TIME rtDuration;
- long lOffset;
- long lVolume;
- long lPitch;
- BYTE bFlags;
-} DMUS_WAVE_PMSG;
+struct _DMUS_PATCH_PMSG {
+ DMUS_PMSG_PART
+ BYTE byInstrument;
+ BYTE byMSB;
+ BYTE byLSB;
+ BYTE byPad[1];
+};
-typedef struct _DMUS_LYRIC_PMSG
-{
- DMUS_PMSG_PART
+struct _DMUS_TRANSPOSE_PMSG {
+ DMUS_PMSG_PART
+ short nTranspose;
+ /* DX8 */
+ WORD wMergeIndex;
+};
- WCHAR wszString[1];
-} DMUS_LYRIC_PMSG;
+struct _DMUS_CHANNEL_PRIORITY_PMSG {
+ DMUS_PMSG_PART
+ DWORD dwChannelPriority;
+};
-typedef struct _DMUS_VERSION {
- DWORD dwVersionMS;
- DWORD dwVersionLS;
-} DMUS_VERSION, *LPDMUS_VERSION;
+struct _DMUS_TEMPO_PMSG {
+ DMUS_PMSG_PART
+ double dblTempo;
+};
-typedef struct _DMUS_TIMESIGNATURE
-{
- MUSIC_TIME mtTime;
- BYTE bBeatsPerMeasure;
- BYTE bBeat;
- WORD wGridsPerBeat;
-} DMUS_TIMESIGNATURE;
+struct _DMUS_SYSEX_PMSG {
+ DMUS_PMSG_PART
+ DWORD dwLen;
+ BYTE abData[1];
+};
-typedef struct _DMUS_VALID_START_PARAM
-{
- MUSIC_TIME mtTime;
-} DMUS_VALID_START_PARAM;
+struct _DMUS_CURVE_PMSG {
+ DMUS_PMSG_PART
+ MUSIC_TIME mtDuration;
+ MUSIC_TIME mtOriginalStart;
+ MUSIC_TIME mtResetDuration;
+ short nStartValue;
+ short nEndValue;
+ short nResetValue;
+ WORD wMeasure;
+ short nOffset;
+ BYTE bBeat;
+ BYTE bGrid;
+ BYTE bType;
+ BYTE bCurveShape;
+ BYTE bCCData;
+ BYTE bFlags;
+ /* DX8 */
+ WORD wParamType;
+ WORD wMergeIndex;
+};
-typedef struct _DMUS_PLAY_MARKER_PARAM
-{
- MUSIC_TIME mtTime;
-} DMUS_PLAY_MARKER_PARAM;
+struct _DMUS_TIMESIG_PMSG {
+ DMUS_PMSG_PART
+ BYTE bBeatsPerMeasure;
+ BYTE bBeat;
+ WORD wGridsPerBeat;
+};
-typedef struct _DMUS_OBJECTDESC
-{
- DWORD dwSize;
- DWORD dwValidData;
- GUID guidObject;
- GUID guidClass;
- FILETIME ftDate;
- DMUS_VERSION vVersion;
- WCHAR wszName[DMUS_MAX_NAME];
- WCHAR wszCategory[DMUS_MAX_CATEGORY];
- WCHAR wszFileName[DMUS_MAX_FILENAME];
- LONGLONG llMemLength;
- LPBYTE pbMemData;
- IStream * pStream;
-} DMUS_OBJECTDESC, *LPDMUS_OBJECTDESC;
+struct _DMUS_NOTIFICATION_PMSG {
+ DMUS_PMSG_PART
+ GUID guidNotificationType;
+ DWORD dwNotificationOption;
+ DWORD dwField1;
+ DWORD dwField2;
+};
-typedef struct _DMUS_SCRIPT_ERRORINFO
-{
- DWORD dwSize;
- HRESULT hr;
- ULONG ulLineNumber;
- LONG ichCharPosition;
- WCHAR wszSourceFile[DMUS_MAX_FILENAME];
- WCHAR wszSourceComponent[DMUS_MAX_FILENAME];
- WCHAR wszDescription[DMUS_MAX_FILENAME];
- WCHAR wszSourceLineText[DMUS_MAX_FILENAME];
-} DMUS_SCRIPT_ERRORINFO;
+struct _DMUS_WAVE_PMSG {
+ DMUS_PMSG_PART
+ REFERENCE_TIME rtStartOffset;
+ REFERENCE_TIME rtDuration;
+ long lOffset;
+ long lVolume;
+ long lPitch;
+ BYTE bFlags;
+};
-typedef struct _DMUS_COMMAND_PARAM
-{
- BYTE bCommand;
- BYTE bGrooveLevel;
- BYTE bGrooveRange;
- BYTE bRepeatMode;
-} DMUS_COMMAND_PARAM;
+struct _DMUS_LYRIC_PMSG {
+ DMUS_PMSG_PART
+ WCHAR wszString[1];
+};
-typedef struct _DMUS_COMMAND_PARAM_2
-{
+struct _DMUS_VERSION {
+ DWORD dwVersionMS;
+ DWORD dwVersionLS;
+};
+
+struct _DMUS_TIMESIGNATURE {
MUSIC_TIME mtTime;
- BYTE bCommand;
- BYTE bGrooveLevel;
- BYTE bGrooveRange;
- BYTE bRepeatMode;
-} DMUS_COMMAND_PARAM_2;
+ BYTE bBeatsPerMeasure;
+ BYTE bBeat;
+ WORD wGridsPerBeat;
+};
-typedef struct _DMUS_CONNECTION_RULE
-{
- DWORD dwFlags;
- DWORD dwIntervals;
-} DMUS_CONNECTION_RULE;
+struct _DMUS_VALID_START_PARAM {
+ MUSIC_TIME mtTime;
+};
-typedef struct _DMUS_MELODY_FRAGMENT
-{
- MUSIC_TIME mtTime;
- DWORD dwID;
- WCHAR wszVariationLabel[DMUS_MAX_FRAGMENTLABEL];
- DWORD dwVariationFlags;
- DWORD dwRepeatFragmentID;
- DWORD dwFragmentFlags;
- DWORD dwPlayModeFlags;
- DWORD dwTransposeIntervals;
- DMUS_COMMAND_PARAM Command;
- DMUS_CONNECTION_RULE ConnectionArc;
-} DMUS_MELODY_FRAGMENT;
+struct _DMUS_PLAY_MARKER_PARAM {
+ MUSIC_TIME mtTime;
+};
-typedef struct _DMUS_BAND_PARAM
-{
- MUSIC_TIME mtTimePhysical;
- IDirectMusicBand *pBand;
-} DMUS_BAND_PARAM;
+struct _DMUS_OBJECTDESC {
+ DWORD dwSize;
+ DWORD dwValidData;
+ GUID guidObject;
+ GUID guidClass;
+ FILETIME ftDate;
+ DMUS_VERSION vVersion;
+ WCHAR wszName[DMUS_MAX_NAME];
+ WCHAR wszCategory[DMUS_MAX_CATEGORY];
+ WCHAR wszFileName[DMUS_MAX_FILENAME];
+ LONGLONG llMemLength;
+ LPBYTE pbMemData;
+ IStream* pStream;
+};
+struct _DMUS_SCRIPT_ERRORINFO {
+ DWORD dwSize;
+ HRESULT hr;
+ ULONG ulLineNumber;
+ LONG ichCharPosition;
+ WCHAR wszSourceFile[DMUS_MAX_FILENAME];
+ WCHAR wszSourceComponent[DMUS_MAX_FILENAME];
+ WCHAR wszDescription[DMUS_MAX_FILENAME];
+ WCHAR wszSourceLineText[DMUS_MAX_FILENAME];
+};
-typedef struct _DMUS_VARIATIONS_PARAM
-{
- DWORD dwPChannelsUsed;
- DWORD* padwPChannels;
- DWORD* padwVariations;
-} DMUS_VARIATIONS_PARAM;
+struct _DMUS_COMMAND_PARAM {
+ BYTE bCommand;
+ BYTE bGrooveLevel;
+ BYTE bGrooveRange;
+ BYTE bRepeatMode;
+};
+
+struct _DMUS_COMMAND_PARAM_2 {
+ MUSIC_TIME mtTime;
+ BYTE bCommand;
+ BYTE bGrooveLevel;
+ BYTE bGrooveRange;
+ BYTE bRepeatMode;
+};
+
+struct _DMUS_BAND_PARAM {
+ MUSIC_TIME mtTimePhysical;
+ IDirectMusicBand *pBand;
+};
+
+struct _DMUS_VARIATIONS_PARAM {
+ DWORD dwPChannelsUsed;
+ DWORD* padwPChannels;
+ DWORD* padwVariations;
+};
+
/*****************************************************************************
* IDirectMusicBand interface
@@ -826,13 +801,13 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicBand_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicBand_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicBand_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicBand_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicBand_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicBand_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicBand methods ***/
-#define IDirectMusicBand_CreateSegment(p,a) (p)->lpVtbl->CreateSegment(p,a)
-#define IDirectMusicBand_Download(p,a) (p)->lpVtbl->Download(p,a)
-#define IDirectMusicBand_Unload(p,a) (p)->lpVtbl->Unload(p,a)
+#define IDirectMusicBand_CreateSegment(p,a) (p)->lpVtbl->CreateSegment(p,a)
+#define IDirectMusicBand_Download(p,a) (p)->lpVtbl->Download(p,a)
+#define IDirectMusicBand_Unload(p,a) (p)->lpVtbl->Unload(p,a)
#endif
@@ -851,13 +826,13 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicObject_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicObject_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicObject_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicObject_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicObject methods ***/
-#define IDirectMusicObject_GetDescriptor(p,a) (p)->lpVtbl->GetDescriptor(p,a)
-#define IDirectMusicObject_SetDescriptor(p,a) (p)->lpVtbl->SetDescriptor(p,a)
-#define IDirectMusicObject_ParseDescriptor(p,a,b) (p)->lpVtbl->ParseDescriptor(p,a,b)
+#define IDirectMusicObject_GetDescriptor(p,a) (p)->lpVtbl->GetDescriptor(p,a)
+#define IDirectMusicObject_SetDescriptor(p,a) (p)->lpVtbl->SetDescriptor(p,a)
+#define IDirectMusicObject_ParseDescriptor(p,a,b) (p)->lpVtbl->ParseDescriptor(p,a,b)
#endif
@@ -1089,15 +1064,15 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicSegmentState_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicSegmentState_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicSegmentState_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicSegmentState_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicSegmentState_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicSegmentState_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicSegmentState methods ***/
-#define IDirectMusicSegmentState_GetRepeats(p,a) (p)->lpVtbl->GetRepeats(p,a)
-#define IDirectMusicSegmentState_GetSegment(p,a) (p)->lpVtbl->GetSegment(p,a)
-#define IDirectMusicSegmentState_GetStartTime(p,a) (p)->lpVtbl->GetStartTime(p,a)
-#define IDirectMusicSegmentState_GetSeek(p,a) (p)->lpVtbl->GetSeek(p,a)
-#define IDirectMusicSegmentState_GetStartPoint(p,a) (p)->lpVtbl->GetStartPoint(p,a)
+#define IDirectMusicSegmentState_GetRepeats(p,a) (p)->lpVtbl->GetRepeats(p,a)
+#define IDirectMusicSegmentState_GetSegment(p,a) (p)->lpVtbl->GetSegment(p,a)
+#define IDirectMusicSegmentState_GetStartTime(p,a) (p)->lpVtbl->GetStartTime(p,a)
+#define IDirectMusicSegmentState_GetSeek(p,a) (p)->lpVtbl->GetSeek(p,a)
+#define IDirectMusicSegmentState_GetStartPoint(p,a) (p)->lpVtbl->GetStartPoint(p,a)
#endif
@@ -1146,14 +1121,14 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicAudioPath_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicAudioPath_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicAudioPath_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicAudioPath_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicAudioPath_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicAudioPath_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicAudioPath methods ***/
-#define IDirectMusicAudioPath_GetObjectInPath(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d,e,f,g)
-#define IDirectMusicAudioPath_Activate(p,a) (p)->lpVtbl->Activate(p,a)
-#define IDirectMusicAudioPath_SetVolume(p,a,b) (p)->lpVtbl->SetVolume(p,a,b)
-#define IDirectMusicAudioPath_ConvertPChannel(p,a,b) (p)->lpVtbl->ConvertPChannel(p,a,b)
+#define IDirectMusicAudioPath_GetObjectInPath(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d,e,f,g)
+#define IDirectMusicAudioPath_Activate(p,a) (p)->lpVtbl->Activate(p,a)
+#define IDirectMusicAudioPath_SetVolume(p,a,b) (p)->lpVtbl->SetVolume(p,a,b)
+#define IDirectMusicAudioPath_ConvertPChannel(p,a,b) (p)->lpVtbl->ConvertPChannel(p,a,b)
#endif
@@ -1210,51 +1185,51 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicPerformance_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicPerformance_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicPerformance_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicPerformance_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicPerformance_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicPerformance_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicPerformance methods ***/
-#define IDirectMusicPerformance_Init(p,a,b,c) (p)->lpVtbl->Init(p,a,b,c)
-#define IDirectMusicPerformance_PlaySegment(p,a,b,c,d) (p)->lpVtbl->PlaySegment(p,a,b,c,d)
-#define IDirectMusicPerformance_Stop(p,a,b,c,d) (p)->lpVtbl->Stop(p,a,b,c,d)
-#define IDirectMusicPerformance_GetSegmentState(p,a,b) (p)->lpVtbl->GetSegmentState(p,a,b)
-#define IDirectMusicPerformance_SetPrepareTime(p,a) (p)->lpVtbl->SetPrepareTime(p,a)
-#define IDirectMusicPerformance_GetPrepareTime(p,a) (p)->lpVtbl->GetPrepareTime(p,a)
-#define IDirectMusicPerformance_SetBumperLength(p,a) (p)->lpVtbl->SetBumperLength(p,a)
-#define IDirectMusicPerformance_GetBumperLength(p,a) (p)->lpVtbl->GetBumperLength(p,a)
-#define IDirectMusicPerformance_SendPMsg(p,a) (p)->lpVtbl->SendPMsg(p,a)
-#define IDirectMusicPerformance_MusicToReferenceTime(p,a,b) (p)->lpVtbl->MusicToReferenceTime(p,a,b)
-#define IDirectMusicPerformance_ReferenceToMusicTime(p,a,b) (p)->lpVtbl->ReferenceToMusicTime(p,a,b)
-#define IDirectMusicPerformance_IsPlaying(p,a,b) (p)->lpVtbl->IsPlaying(p,a,b)
-#define IDirectMusicPerformance_GetTime(p,a,b) (p)->lpVtbl->GetTime(p,a,b)
-#define IDirectMusicPerformance_AllocPMsg(p,a,b) (p)->lpVtbl->AllocPMsg(p,a,b)
-#define IDirectMusicPerformance_FreePMsg(p,a) (p)->lpVtbl->FreePMsg(p,a)
-#define IDirectMusicPerformance_GetGraph(p,a) (p)->lpVtbl->GetGraph(p,a)
-#define IDirectMusicPerformance_SetGraph(p,a) (p)->lpVtbl->SetGraph(p,a)
-#define IDirectMusicPerformance_SetNotificationHandle(p,a,b) (p)->lpVtbl->SetNotificationHandle(p,a,b)
-#define IDirectMusicPerformance_GetNotificationPMsg(p,a) (p)->lpVtbl->GetNotificationPMsg(p,a)
-#define IDirectMusicPerformance_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a)
-#define IDirectMusicPerformance_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)
-#define IDirectMusicPerformance_AddPort(p,a) (p)->lpVtbl->AddPort(p,a)
-#define IDirectMusicPerformance_RemovePort(p,a) (p)->lpVtbl->RemovePort(p,a)
-#define IDirectMusicPerformance_AssignPChannelBlock(p,a,b,c) (p)->lpVtbl->AssignPChannelBlock(p,a,b,c)
-#define IDirectMusicPerformance_AssignPChannel(p,a,b,c,d) (p)->lpVtbl->AssignPChannel(p,a,b,c,d)
-#define IDirectMusicPerformance_PChannelInfo(p,a,b,c,d) (p)->lpVtbl->PChannelInfo(p,a,b,c,d)
-#define IDirectMusicPerformance_DownloadInstrument(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DownloadInstrument(p,a,b,c,d,e,f,g,h)
-#define IDirectMusicPerformance_Invalidate(p,a,b) (p)->lpVtbl->Invalidate(p,a,b)
-#define IDirectMusicPerformance_GetParam(p,a,b,c,d,e,f) (p)->lpVtbl->GetParam(p,a,b,c,d,e,f)
-#define IDirectMusicPerformance_SetParam(p,a,b,c,d,e) (p)->lpVtbl->SetParam(p,a,b,c,d,e)
-#define IDirectMusicPerformance_GetGlobalParam(p,a,b,c) (p)->lpVtbl->GetGlobalParam(p,a,b,c)
-#define IDirectMusicPerformance_SetGlobalParam(p,a,b,c) (p)->lpVtbl->SetGlobalParam(p,a,b,c)
-#define IDirectMusicPerformance_GetLatencyTime(p,a) (p)->lpVtbl->GetLatencyTime(p,a)
-#define IDirectMusicPerformance_GetQueueTime(p,a) (p)->lpVtbl->GetQueueTime(p,a)
-#define IDirectMusicPerformance_AdjustTime(p,a) (p)->lpVtbl->AdjustTime(p,a)
-#define IDirectMusicPerformance_CloseDown(p) (p)->lpVtbl->CloseDown(p)
-#define IDirectMusicPerformance_GetResolvedTime(p,a,b,c) (p)->lpVtbl->GetResolvedTime(p,a,b,c)
-#define IDirectMusicPerformance_MIDIToMusic(p,a,b,c,d,e) (p)->lpVtbl->MIDIToMusic(p,a,b,c,d,e)
-#define IDirectMusicPerformance_MusicToMIDI(p,a,b,c,d,e) (p)->lpVtbl->MusicToMIDI(p,a,b,c,d,e)
-#define IDirectMusicPerformance_TimeToRhythm(p,a,b,c,d,e,f) (p)->lpVtbl->TimeToRhythm(p,a,b,c,d,e,f)
-#define IDirectMusicPerformance_RhythmToTime(p,a,b,c,d,e,f) (p)->lpVtbl->RhythmToTime(p,a,b,c,d,e,f)
+#define IDirectMusicPerformance_Init(p,a,b,c) (p)->lpVtbl->Init(p,a,b,c)
+#define IDirectMusicPerformance_PlaySegment(p,a,b,c,d) (p)->lpVtbl->PlaySegment(p,a,b,c,d)
+#define IDirectMusicPerformance_Stop(p,a,b,c,d) (p)->lpVtbl->Stop(p,a,b,c,d)
+#define IDirectMusicPerformance_GetSegmentState(p,a,b) (p)->lpVtbl->GetSegmentState(p,a,b)
+#define IDirectMusicPerformance_SetPrepareTime(p,a) (p)->lpVtbl->SetPrepareTime(p,a)
+#define IDirectMusicPerformance_GetPrepareTime(p,a) (p)->lpVtbl->GetPrepareTime(p,a)
+#define IDirectMusicPerformance_SetBumperLength(p,a) (p)->lpVtbl->SetBumperLength(p,a)
+#define IDirectMusicPerformance_GetBumperLength(p,a) (p)->lpVtbl->GetBumperLength(p,a)
+#define IDirectMusicPerformance_SendPMsg(p,a) (p)->lpVtbl->SendPMsg(p,a)
+#define IDirectMusicPerformance_MusicToReferenceTime(p,a,b) (p)->lpVtbl->MusicToReferenceTime(p,a,b)
+#define IDirectMusicPerformance_ReferenceToMusicTime(p,a,b) (p)->lpVtbl->ReferenceToMusicTime(p,a,b)
+#define IDirectMusicPerformance_IsPlaying(p,a,b) (p)->lpVtbl->IsPlaying(p,a,b)
+#define IDirectMusicPerformance_GetTime(p,a,b) (p)->lpVtbl->GetTime(p,a,b)
+#define IDirectMusicPerformance_AllocPMsg(p,a,b) (p)->lpVtbl->AllocPMsg(p,a,b)
+#define IDirectMusicPerformance_FreePMsg(p,a) (p)->lpVtbl->FreePMsg(p,a)
+#define IDirectMusicPerformance_GetGraph(p,a) (p)->lpVtbl->GetGraph(p,a)
+#define IDirectMusicPerformance_SetGraph(p,a) (p)->lpVtbl->SetGraph(p,a)
+#define IDirectMusicPerformance_SetNotificationHandle(p,a,b) (p)->lpVtbl->SetNotificationHandle(p,a,b)
+#define IDirectMusicPerformance_GetNotificationPMsg(p,a) (p)->lpVtbl->GetNotificationPMsg(p,a)
+#define IDirectMusicPerformance_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a)
+#define IDirectMusicPerformance_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)
+#define IDirectMusicPerformance_AddPort(p,a) (p)->lpVtbl->AddPort(p,a)
+#define IDirectMusicPerformance_RemovePort(p,a) (p)->lpVtbl->RemovePort(p,a)
+#define IDirectMusicPerformance_AssignPChannelBlock(p,a,b,c) (p)->lpVtbl->AssignPChannelBlock(p,a,b,c)
+#define IDirectMusicPerformance_AssignPChannel(p,a,b,c,d) (p)->lpVtbl->AssignPChannel(p,a,b,c,d)
+#define IDirectMusicPerformance_PChannelInfo(p,a,b,c,d) (p)->lpVtbl->PChannelInfo(p,a,b,c,d)
+#define IDirectMusicPerformance_DownloadInstrument(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DownloadInstrument(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicPerformance_Invalidate(p,a,b) (p)->lpVtbl->Invalidate(p,a,b)
+#define IDirectMusicPerformance_GetParam(p,a,b,c,d,e,f) (p)->lpVtbl->GetParam(p,a,b,c,d,e,f)
+#define IDirectMusicPerformance_SetParam(p,a,b,c,d,e) (p)->lpVtbl->SetParam(p,a,b,c,d,e)
+#define IDirectMusicPerformance_GetGlobalParam(p,a,b,c) (p)->lpVtbl->GetGlobalParam(p,a,b,c)
+#define IDirectMusicPerformance_SetGlobalParam(p,a,b,c) (p)->lpVtbl->SetGlobalParam(p,a,b,c)
+#define IDirectMusicPerformance_GetLatencyTime(p,a) (p)->lpVtbl->GetLatencyTime(p,a)
+#define IDirectMusicPerformance_GetQueueTime(p,a) (p)->lpVtbl->GetQueueTime(p,a)
+#define IDirectMusicPerformance_AdjustTime(p,a) (p)->lpVtbl->AdjustTime(p,a)
+#define IDirectMusicPerformance_CloseDown(p) (p)->lpVtbl->CloseDown(p)
+#define IDirectMusicPerformance_GetResolvedTime(p,a,b,c) (p)->lpVtbl->GetResolvedTime(p,a,b,c)
+#define IDirectMusicPerformance_MIDIToMusic(p,a,b,c,d,e) (p)->lpVtbl->MIDIToMusic(p,a,b,c,d,e)
+#define IDirectMusicPerformance_MusicToMIDI(p,a,b,c,d,e) (p)->lpVtbl->MusicToMIDI(p,a,b,c,d,e)
+#define IDirectMusicPerformance_TimeToRhythm(p,a,b,c,d,e,f) (p)->lpVtbl->TimeToRhythm(p,a,b,c,d,e,f)
+#define IDirectMusicPerformance_RhythmToTime(p,a,b,c,d,e,f) (p)->lpVtbl->RhythmToTime(p,a,b,c,d,e,f)
#endif
@@ -1279,61 +1254,61 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicPerformance8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicPerformance8_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicPerformance8_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicPerformance8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicPerformance8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicPerformance8_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicPerformance methods ***/
-#define IDirectMusicPerformance8_Init(p,a,b,c) (p)->lpVtbl->Init(p,a,b,c)
-#define IDirectMusicPerformance8_PlaySegment(p,a,b,c,d) (p)->lpVtbl->PlaySegment(p,a,b,c,d)
-#define IDirectMusicPerformance8_Stop(p,a,b,c,d) (p)->lpVtbl->Stop(p,a,b,c,d)
-#define IDirectMusicPerformance8_GetSegmentState(p,a,b) (p)->lpVtbl->GetSegmentState(p,a,b)
-#define IDirectMusicPerformance8_SetPrepareTime(p,a) (p)->lpVtbl->SetPrepareTime(p,a)
-#define IDirectMusicPerformance8_GetPrepareTime(p,a) (p)->lpVtbl->GetPrepareTime(p,a)
-#define IDirectMusicPerformance8_SetBumperLength(p,a) (p)->lpVtbl->SetBumperLength(p,a)
-#define IDirectMusicPerformance8_GetBumperLength(p,a) (p)->lpVtbl->GetBumperLength(p,a)
-#define IDirectMusicPerformance8_SendPMsg(p,a) (p)->lpVtbl->SendPMsg(p,a)
-#define IDirectMusicPerformance8_MusicToReferenceTime(p,a,b) (p)->lpVtbl->MusicToReferenceTime(p,a,b)
-#define IDirectMusicPerformance8_ReferenceToMusicTime(p,a,b) (p)->lpVtbl->ReferenceToMusicTime(p,a,b)
-#define IDirectMusicPerformance8_IsPlaying(p,a,b) (p)->lpVtbl->IsPlaying(p,a,b)
-#define IDirectMusicPerformance8_GetTime(p,a,b) (p)->lpVtbl->GetTime(p,a,b)
-#define IDirectMusicPerformance8_AllocPMsg(p,a,b) (p)->lpVtbl->AllocPMsg(p,a,b)
-#define IDirectMusicPerformance8_FreePMsg(p,a) (p)->lpVtbl->FreePMsg(p,a)
-#define IDirectMusicPerformance8_GetGraph(p,a) (p)->lpVtbl->GetGraph(p,a)
-#define IDirectMusicPerformance8_SetGraph(p,a) (p)->lpVtbl->SetGraph(p,a)
-#define IDirectMusicPerformance8_SetNotificationHandle(p,a,b) (p)->lpVtbl->SetNotificationHandle(p,a,b)
-#define IDirectMusicPerformance8_GetNotificationPMsg(p,a) (p)->lpVtbl->GetNotificationPMsg(p,a)
-#define IDirectMusicPerformance8_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a)
-#define IDirectMusicPerformance8_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)
-#define IDirectMusicPerformance8_AddPort(p,a) (p)->lpVtbl->AddPort(p,a)
-#define IDirectMusicPerformance8_RemovePort(p,a) (p)->lpVtbl->RemovePort(p,a)
-#define IDirectMusicPerformance8_AssignPChannelBlock(p,a,b,c) (p)->lpVtbl->AssignPChannelBlock(p,a,b,c)
-#define IDirectMusicPerformance8_AssignPChannel(p,a,b,c,d) (p)->lpVtbl->AssignPChannel(p,a,b,c,d)
-#define IDirectMusicPerformance8_PChannelInfo(p,a,b,c,d) (p)->lpVtbl->PChannelInfo(p,a,b,c,d)
-#define IDirectMusicPerformance8_DownloadInstrument(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DownloadInstrument(p,a,b,c,d,e,f,g,h)
-#define IDirectMusicPerformance8_Invalidate(p,a,b) (p)->lpVtbl->Invalidate(p,a,b)
-#define IDirectMusicPerformance8_GetParam(p,a,b,c,d,e,f) (p)->lpVtbl->GetParam(p,a,b,c,d,e,f)
-#define IDirectMusicPerformance8_SetParam(p,a,b,c,d,e) (p)->lpVtbl->SetParam(p,a,b,c,d,e)
-#define IDirectMusicPerformance8_GetGlobalParam(p,a,b,c) (p)->lpVtbl->GetGlobalParam(p,a,b,c)
-#define IDirectMusicPerformance8_SetGlobalParam(p,a,b,c) (p)->lpVtbl->SetGlobalParam(p,a,b,c)
-#define IDirectMusicPerformance8_GetLatencyTime(p,a) (p)->lpVtbl->GetLatencyTime(p,a)
-#define IDirectMusicPerformance8_GetQueueTime(p,a) (p)->lpVtbl->GetQueueTime(p,a)
-#define IDirectMusicPerformance8_AdjustTime(p,a) (p)->lpVtbl->AdjustTime(p,a)
-#define IDirectMusicPerformance8_CloseDown(p) (p)->lpVtbl->CloseDown(p)
-#define IDirectMusicPerformance8_GetResolvedTime(p,a,b,c) (p)->lpVtbl->GetResolvedTime(p,a,b,c)
-#define IDirectMusicPerformance8_MIDIToMusic(p,a,b,c,d,e) (p)->lpVtbl->MIDIToMusic(p,a,b,c,d,e)
-#define IDirectMusicPerformance8_MusicToMIDI(p,a,b,c,d,e) (p)->lpVtbl->MusicToMIDI(p,a,b,c,d,e)
-#define IDirectMusicPerformance8_TimeToRhythm(p,a,b,c,d,e,f) (p)->lpVtbl->TimeToRhythm(p,a,b,c,d,e,f)
-#define IDirectMusicPerformance8_RhythmToTime(p,a,b,c,d,e,f) (p)->lpVtbl->RhythmToTime(p,a,b,c,d,e,f)
+#define IDirectMusicPerformance8_Init(p,a,b,c) (p)->lpVtbl->Init(p,a,b,c)
+#define IDirectMusicPerformance8_PlaySegment(p,a,b,c,d) (p)->lpVtbl->PlaySegment(p,a,b,c,d)
+#define IDirectMusicPerformance8_Stop(p,a,b,c,d) (p)->lpVtbl->Stop(p,a,b,c,d)
+#define IDirectMusicPerformance8_GetSegmentState(p,a,b) (p)->lpVtbl->GetSegmentState(p,a,b)
+#define IDirectMusicPerformance8_SetPrepareTime(p,a) (p)->lpVtbl->SetPrepareTime(p,a)
+#define IDirectMusicPerformance8_GetPrepareTime(p,a) (p)->lpVtbl->GetPrepareTime(p,a)
+#define IDirectMusicPerformance8_SetBumperLength(p,a) (p)->lpVtbl->SetBumperLength(p,a)
+#define IDirectMusicPerformance8_GetBumperLength(p,a) (p)->lpVtbl->GetBumperLength(p,a)
+#define IDirectMusicPerformance8_SendPMsg(p,a) (p)->lpVtbl->SendPMsg(p,a)
+#define IDirectMusicPerformance8_MusicToReferenceTime(p,a,b) (p)->lpVtbl->MusicToReferenceTime(p,a,b)
+#define IDirectMusicPerformance8_ReferenceToMusicTime(p,a,b) (p)->lpVtbl->ReferenceToMusicTime(p,a,b)
+#define IDirectMusicPerformance8_IsPlaying(p,a,b) (p)->lpVtbl->IsPlaying(p,a,b)
+#define IDirectMusicPerformance8_GetTime(p,a,b) (p)->lpVtbl->GetTime(p,a,b)
+#define IDirectMusicPerformance8_AllocPMsg(p,a,b) (p)->lpVtbl->AllocPMsg(p,a,b)
+#define IDirectMusicPerformance8_FreePMsg(p,a) (p)->lpVtbl->FreePMsg(p,a)
+#define IDirectMusicPerformance8_GetGraph(p,a) (p)->lpVtbl->GetGraph(p,a)
+#define IDirectMusicPerformance8_SetGraph(p,a) (p)->lpVtbl->SetGraph(p,a)
+#define IDirectMusicPerformance8_SetNotificationHandle(p,a,b) (p)->lpVtbl->SetNotificationHandle(p,a,b)
+#define IDirectMusicPerformance8_GetNotificationPMsg(p,a) (p)->lpVtbl->GetNotificationPMsg(p,a)
+#define IDirectMusicPerformance8_AddNotificationType(p,a) (p)->lpVtbl->AddNotificationType(p,a)
+#define IDirectMusicPerformance8_RemoveNotificationType(p,a) (p)->lpVtbl->RemoveNotificationType(p,a)
+#define IDirectMusicPerformance8_AddPort(p,a) (p)->lpVtbl->AddPort(p,a)
+#define IDirectMusicPerformance8_RemovePort(p,a) (p)->lpVtbl->RemovePort(p,a)
+#define IDirectMusicPerformance8_AssignPChannelBlock(p,a,b,c) (p)->lpVtbl->AssignPChannelBlock(p,a,b,c)
+#define IDirectMusicPerformance8_AssignPChannel(p,a,b,c,d) (p)->lpVtbl->AssignPChannel(p,a,b,c,d)
+#define IDirectMusicPerformance8_PChannelInfo(p,a,b,c,d) (p)->lpVtbl->PChannelInfo(p,a,b,c,d)
+#define IDirectMusicPerformance8_DownloadInstrument(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DownloadInstrument(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicPerformance8_Invalidate(p,a,b) (p)->lpVtbl->Invalidate(p,a,b)
+#define IDirectMusicPerformance8_GetParam(p,a,b,c,d,e,f) (p)->lpVtbl->GetParam(p,a,b,c,d,e,f)
+#define IDirectMusicPerformance8_SetParam(p,a,b,c,d,e) (p)->lpVtbl->SetParam(p,a,b,c,d,e)
+#define IDirectMusicPerformance8_GetGlobalParam(p,a,b,c) (p)->lpVtbl->GetGlobalParam(p,a,b,c)
+#define IDirectMusicPerformance8_SetGlobalParam(p,a,b,c) (p)->lpVtbl->SetGlobalParam(p,a,b,c)
+#define IDirectMusicPerformance8_GetLatencyTime(p,a) (p)->lpVtbl->GetLatencyTime(p,a)
+#define IDirectMusicPerformance8_GetQueueTime(p,a) (p)->lpVtbl->GetQueueTime(p,a)
+#define IDirectMusicPerformance8_AdjustTime(p,a) (p)->lpVtbl->AdjustTime(p,a)
+#define IDirectMusicPerformance8_CloseDown(p) (p)->lpVtbl->CloseDown(p)
+#define IDirectMusicPerformance8_GetResolvedTime(p,a,b,c) (p)->lpVtbl->GetResolvedTime(p,a,b,c)
+#define IDirectMusicPerformance8_MIDIToMusic(p,a,b,c,d,e) (p)->lpVtbl->MIDIToMusic(p,a,b,c,d,e)
+#define IDirectMusicPerformance8_MusicToMIDI(p,a,b,c,d,e) (p)->lpVtbl->MusicToMIDI(p,a,b,c,d,e)
+#define IDirectMusicPerformance8_TimeToRhythm(p,a,b,c,d,e,f) (p)->lpVtbl->TimeToRhythm(p,a,b,c,d,e,f)
+#define IDirectMusicPerformance8_RhythmToTime(p,a,b,c,d,e,f) (p)->lpVtbl->RhythmToTime(p,a,b,c,d,e,f)
/* IDirectMusicPerformance8 methods*/
-#define IDirectMusicPerformance8_InitAudio(p,a,b,c,d,e,f,g) (p)->lpVtbl->InitAudio(p,a,b,c,d,e,f,g)
-#define IDirectMusicPerformance8_PlaySegmentEx(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->PlaySegmentEx(p,a,b,c,d,e,f,g,h)
-#define IDirectMusicPerformance8_StopEx(p,a,b,c) (p)->lpVtbl->StopEx(p,a,b,c)
-#define IDirectMusicPerformance8_ClonePMsg(p,a,b) (p)->lpVtbl->ClonePMsg(p,a,b)
-#define IDirectMusicPerformance8_CreateAudioPath(p,a,b,c) (p)->lpVtbl->CreateAudioPath(p,a,b,c)
-#define IDirectMusicPerformance8_CreateStandardAudioPath(p,a,b,c,d) (p)->lpVtbl->CreateStandardAudioPath(p,a,b,c,d)
-#define IDirectMusicPerformance8_SetDefaultAudioPath(p,a) (p)->lpVtbl->SetDefaultAudioPath(p,a)
-#define IDirectMusicPerformance8_GetDefaultAudioPath(p,a) (p)->lpVtbl->GetDefaultAudioPath(p,a)
-#define IDirectMusicPerformance8_GetParamEx(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetParamEx(p,a,b,c,d,e,f,g)
+#define IDirectMusicPerformance8_InitAudio(p,a,b,c,d,e,f,g) (p)->lpVtbl->InitAudio(p,a,b,c,d,e,f,g)
+#define IDirectMusicPerformance8_PlaySegmentEx(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->PlaySegmentEx(p,a,b,c,d,e,f,g,h)
+#define IDirectMusicPerformance8_StopEx(p,a,b,c) (p)->lpVtbl->StopEx(p,a,b,c)
+#define IDirectMusicPerformance8_ClonePMsg(p,a,b) (p)->lpVtbl->ClonePMsg(p,a,b)
+#define IDirectMusicPerformance8_CreateAudioPath(p,a,b,c) (p)->lpVtbl->CreateAudioPath(p,a,b,c)
+#define IDirectMusicPerformance8_CreateStandardAudioPath(p,a,b,c,d) (p)->lpVtbl->CreateStandardAudioPath(p,a,b,c,d)
+#define IDirectMusicPerformance8_SetDefaultAudioPath(p,a) (p)->lpVtbl->SetDefaultAudioPath(p,a)
+#define IDirectMusicPerformance8_GetDefaultAudioPath(p,a) (p)->lpVtbl->GetDefaultAudioPath(p,a)
+#define IDirectMusicPerformance8_GetParamEx(p,a,b,c,d,e,f,g) (p)->lpVtbl->GetParamEx(p,a,b,c,d,e,f,g)
#endif
@@ -1387,21 +1362,21 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicStyle_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicStyle_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicStyle_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicStyle_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicStyle_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicStyle_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicStyle methods ***/
-#define IDirectMusicStyle_GetBand(p,a,b) (p)->lpVtbl->GetBand(p,a,b)
-#define IDirectMusicStyle_EnumBand(p,a,b) (p)->lpVtbl->EnumBand(p,a,b)
-#define IDirectMusicStyle_GetDefaultBand(p,a) (p)->lpVtbl->GetDefaultBand(p,a)
-#define IDirectMusicStyle_EnumMotif(p,a,b) (p)->lpVtbl->EnumMotif(p,a,b)
-#define IDirectMusicStyle_GetMotif(p,a,b) (p)->lpVtbl->GetMotif(p,a,b)
-#define IDirectMusicStyle_GetDefaultChordMap(p,a) (p)->lpVtbl->GetDefaultChordMap(p,a)
-#define IDirectMusicStyle_EnumChordMap(p,a,b) (p)->lpVtbl->EnumChordMap(p,a,b)
-#define IDirectMusicStyle_GetChordMap(p,a,b) (p)->lpVtbl->GetChordMap(p,a,b)
-#define IDirectMusicStyle_GetTimeSignature(p,a) (p)->lpVtbl->GetTimeSignature(p,a)
-#define IDirectMusicStyle_GetEmbellishmentLength(p,a,b,c,d) (p)->lpVtbl->GetEmbellishmentLength(p,a,b,c,d)
-#define IDirectMusicStyle_GetTempo(p,a) (p)->lpVtbl->GetTempo(p,a)
+#define IDirectMusicStyle_GetBand(p,a,b) (p)->lpVtbl->GetBand(p,a,b)
+#define IDirectMusicStyle_EnumBand(p,a,b) (p)->lpVtbl->EnumBand(p,a,b)
+#define IDirectMusicStyle_GetDefaultBand(p,a) (p)->lpVtbl->GetDefaultBand(p,a)
+#define IDirectMusicStyle_EnumMotif(p,a,b) (p)->lpVtbl->EnumMotif(p,a,b)
+#define IDirectMusicStyle_GetMotif(p,a,b) (p)->lpVtbl->GetMotif(p,a,b)
+#define IDirectMusicStyle_GetDefaultChordMap(p,a) (p)->lpVtbl->GetDefaultChordMap(p,a)
+#define IDirectMusicStyle_EnumChordMap(p,a,b) (p)->lpVtbl->EnumChordMap(p,a,b)
+#define IDirectMusicStyle_GetChordMap(p,a,b) (p)->lpVtbl->GetChordMap(p,a,b)
+#define IDirectMusicStyle_GetTimeSignature(p,a) (p)->lpVtbl->GetTimeSignature(p,a)
+#define IDirectMusicStyle_GetEmbellishmentLength(p,a,b,c,d) (p)->lpVtbl->GetEmbellishmentLength(p,a,b,c,d)
+#define IDirectMusicStyle_GetTempo(p,a) (p)->lpVtbl->GetTempo(p,a)
#endif
@@ -1418,23 +1393,23 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicStyle8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicStyle8_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicStyle8_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicStyle8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicStyle8_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicStyle8_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicStyle methods ***/
-#define IDirectMusicStyle8_GetBand(p,a,b) (p)->lpVtbl->GetBand(p,a,b)
-#define IDirectMusicStyle8_EnumBand(p,a,b) (p)->lpVtbl->EnumBand(p,a,b)
-#define IDirectMusicStyle8_GetDefaultBand(p,a) (p)->lpVtbl->GetDefaultBand(p,a)
-#define IDirectMusicStyle8_EnumMotif(p,a,b) (p)->lpVtbl->EnumMotif(p,a,b)
-#define IDirectMusicStyle8_GetMotif(p,a,b) (p)->lpVtbl->GetMotif(p,a,b)
-#define IDirectMusicStyle8_GetDefaultChordMap(p,a) (p)->lpVtbl->GetDefaultChordMap(p,a)
-#define IDirectMusicStyle8_EnumChordMap(p,a,b) (p)->lpVtbl->EnumChordMap(p,a,b)
-#define IDirectMusicStyle8_GetChordMap(p,a,b) (p)->lpVtbl->GetChordMap(p,a,b)
-#define IDirectMusicStyle8_GetTimeSignature(p,a) (p)->lpVtbl->GetTimeSignature(p,a)
-#define IDirectMusicStyle8_GetEmbellishmentLength(p,a,b,c,d) (p)->lpVtbl->GetEmbellishmentLength(p,a,b,c,d)
-#define IDirectMusicStyle8_GetTempo(p,a) (p)->lpVtbl->GetTempo(p,a)
+#define IDirectMusicStyle8_GetBand(p,a,b) (p)->lpVtbl->GetBand(p,a,b)
+#define IDirectMusicStyle8_EnumBand(p,a,b) (p)->lpVtbl->EnumBand(p,a,b)
+#define IDirectMusicStyle8_GetDefaultBand(p,a) (p)->lpVtbl->GetDefaultBand(p,a)
+#define IDirectMusicStyle8_EnumMotif(p,a,b) (p)->lpVtbl->EnumMotif(p,a,b)
+#define IDirectMusicStyle8_GetMotif(p,a,b) (p)->lpVtbl->GetMotif(p,a,b)
+#define IDirectMusicStyle8_GetDefaultChordMap(p,a) (p)->lpVtbl->GetDefaultChordMap(p,a)
+#define IDirectMusicStyle8_EnumChordMap(p,a,b) (p)->lpVtbl->EnumChordMap(p,a,b)
+#define IDirectMusicStyle8_GetChordMap(p,a,b) (p)->lpVtbl->GetChordMap(p,a,b)
+#define IDirectMusicStyle8_GetTimeSignature(p,a) (p)->lpVtbl->GetTimeSignature(p,a)
+#define IDirectMusicStyle8_GetEmbellishmentLength(p,a,b,c,d) (p)->lpVtbl->GetEmbellishmentLength(p,a,b,c,d)
+#define IDirectMusicStyle8_GetTempo(p,a) (p)->lpVtbl->GetTempo(p,a)
/*** IDirectMusicStyle8 methods ***/
-#define IDirectMusicStyle8_EnumPattern(p,a,b,c) (p)->lpVtbl->EnumPattern(p,a,b,c)
+#define IDirectMusicStyle8_EnumPattern(p,a,b,c) (p)->lpVtbl->EnumPattern(p,a,b,c)
#endif
@@ -1505,13 +1480,13 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicPatternTrack_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicPatternTrack_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicPatternTrack_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicPatternTrack_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicPatternTrack_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicPatternTrack_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicPatternTrack methods ***/
-#define IDirectMusicPatternTrack_CreateSegment(p,a,b) (p)->lpVtbl->CreateSegment(p,a,b)
-#define IDirectMusicPatternTrack_SetVariation(p,a,b,c) (p)->lpVtbl->SetVariation(p,a,b,c)
-#define IDirectMusicPatternTrack_SetPatternByName(p,a,b,c,d,e) (p)->lpVtbl->SetPatternByName(p,a,b,c,d,e)
+#define IDirectMusicPatternTrack_CreateSegment(p,a,b) (p)->lpVtbl->CreateSegment(p,a,b)
+#define IDirectMusicPatternTrack_SetVariation(p,a,b,c) (p)->lpVtbl->SetVariation(p,a,b,c)
+#define IDirectMusicPatternTrack_SetPatternByName(p,a,b,c,d,e) (p)->lpVtbl->SetPatternByName(p,a,b,c,d,e)
#endif
@@ -1537,20 +1512,20 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicScript_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicScript_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicScript_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicScript_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicScript_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicScript_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicScript methods ***/
-#define IDirectMusicPatternTrack_Init(p,a,b) (p)->lpVtbl->Init(p,a,b)
-#define IDirectMusicPatternTrack_CallRoutine(p,a,b) (p)->lpVtbl->CallRoutine(p,a,b)
-#define IDirectMusicPatternTrack_SetVariableVariant(p,a,b,c,d) (p)->lpVtbl->SetVariableVariant(p,a,b,c,d)
-#define IDirectMusicPatternTrack_GetVariableVariant(p,a,b,c) (p)->lpVtbl->GetVariableVariant(p,a,b,c)
-#define IDirectMusicPatternTrack_SetVariableNumber(p,a,b,c) (p)->lpVtbl->SetVariableNumber(p,a,b,c)
-#define IDirectMusicPatternTrack_GetVariableNumber(p,a,b,c) (p)->lpVtbl->GetVariableNumber(p,a,b,c)
-#define IDirectMusicPatternTrack_SetVariableObject(p,a,b,c) (p)->lpVtbl->SetVariableObject(p,a,b,c)
-#define IDirectMusicPatternTrack_GetVariableObject(p,a,b,c,d) (p)->lpVtbl->GetVariableObject(p,a,b,c,d)
-#define IDirectMusicPatternTrack_EnumRoutine(p,a,b) (p)->lpVtbl->EnumRoutine(p,a,b)
-#define IDirectMusicPatternTrack_EnumVariable(p,a,b) (p)->lpVtbl->EnumVariable(p,a,b)
+#define IDirectMusicPatternTrack_Init(p,a,b) (p)->lpVtbl->Init(p,a,b)
+#define IDirectMusicPatternTrack_CallRoutine(p,a,b) (p)->lpVtbl->CallRoutine(p,a,b)
+#define IDirectMusicPatternTrack_SetVariableVariant(p,a,b,c,d) (p)->lpVtbl->SetVariableVariant(p,a,b,c,d)
+#define IDirectMusicPatternTrack_GetVariableVariant(p,a,b,c) (p)->lpVtbl->GetVariableVariant(p,a,b,c)
+#define IDirectMusicPatternTrack_SetVariableNumber(p,a,b,c) (p)->lpVtbl->SetVariableNumber(p,a,b,c)
+#define IDirectMusicPatternTrack_GetVariableNumber(p,a,b,c) (p)->lpVtbl->GetVariableNumber(p,a,b,c)
+#define IDirectMusicPatternTrack_SetVariableObject(p,a,b,c) (p)->lpVtbl->SetVariableObject(p,a,b,c)
+#define IDirectMusicPatternTrack_GetVariableObject(p,a,b,c,d) (p)->lpVtbl->GetVariableObject(p,a,b,c,d)
+#define IDirectMusicPatternTrack_EnumRoutine(p,a,b) (p)->lpVtbl->EnumRoutine(p,a,b)
+#define IDirectMusicPatternTrack_EnumVariable(p,a,b) (p)->lpVtbl->EnumVariable(p,a,b)
#endif
@@ -1567,48 +1542,18 @@
#ifdef COBJMACROS
/*** IUnknown methods ***/
-#define IDirectMusicContainer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicContainer_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicContainer_Release(p) (p)->lpVtbl->Release(p)
+#define IDirectMusicContainer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#define IDirectMusicContainer_AddRef(p) (p)->lpVtbl->AddRef(p)
+#define IDirectMusicContainer_Release(p) (p)->lpVtbl->Release(p)
/*** IDirectMusicContainer methods ***/
-#define IDirectMusicContainer_EnumObject(p,a,b,c,d) (p)->lpVtbl->EnumObject(p,a,b,c,d)
+#define IDirectMusicContainer_EnumObject(p,a,b,c,d) (p)->lpVtbl->EnumObject(p,a,b,c,d)
#endif
-/*****************************************************************************
- * IDirectMusicSong interface
- */
-#undef INTERFACE
-#define INTERFACE IDirectMusicSong
-#define IDirectMusicSong_METHODS \
- IUnknown_METHODS \
- STDMETHOD(Compose)(THIS) PURE; \
- STDMETHOD(GetParam)(THIS_ REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam) PURE; \
- STDMETHOD(GetSegment)(THIS_ WCHAR *pwzName, IDirectMusicSegment **ppSegment) PURE; \
- STDMETHOD(GetAudioPathConfig)(THIS_ IUnknown **ppAudioPathConfig) PURE; \
- STDMETHOD(Download)(THIS_ IUnknown *pAudioPath) PURE; \
- STDMETHOD(Unload)(THIS_ IUnknown *pAudioPath) PURE; \
- STDMETHOD(EnumSegment)(THIS_ DWORD dwIndex, IDirectMusicSegment **ppSegment) PURE;
-ICOM_DEFINE(IDirectMusicSong,IUnknown)
-#undef INTERFACE
-
-#ifdef COBJMACROS
-/*** IUnknown methods ***/
-#define IDirectMusicSong_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
-#define IDirectMusicSong_AddRef(p) (p)->lpVtbl->AddRef(p)
-#define IDirectMusicSong_Release(p) (p)->lpVtbl->Release(p)
-/*** IDirectMusicSong methods ***/
-#define IDirectMusicSong_Compose(p) (p)->lpVtbl->Compose(p)
-#define IDirectMusicSong_GetParam(p,a,b,c,d,e,f) (p)->lpVtbl->GetParam(p,a,b,c,d,e,f)
-#define IDirectMusicSong_GetSegment(p,a,b) (p)->lpVtbl->GetSegment(p,a,b)
-#define IDirectMusicSong_GetAudioPathConfig(p,a) (p)->lpVtbl->GetAudioPathConfig(p,a)
-#define IDirectMusicSong_Download(p,a) (p)->lpVtbl->Download(p,a)
-#define IDirectMusicSong_Unload(p,a) (p)->lpVtbl->Unload(p,a)
-#define IDirectMusicSong_EnumSegment(p,a,b) (p)->lpVtbl->EnumSegment(p,a,b)
-#endif
-
#ifdef __cplusplus
}
#endif
+#include <poppack.h>
+
#endif /* __WINE_DMUSIC_PERFORMANCE_H */
diff --git a/include/dmusics.h b/include/dmusics.h
index c401029..457dee2 100644
--- a/include/dmusics.h
+++ b/include/dmusics.h
@@ -1,7 +1,7 @@
/*
* DirectMusic Software Synth Definitions
*
- * Copyright (C) 2003 Rok Mandeljc
+ * Copyright (C) 2003-2004 Rok Mandeljc
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,28 +23,34 @@
#include <dmusicc.h>
-
/*****************************************************************************
- * Definitions
+ * Registry path
*/
-#define REGSTR_PATH_SOFTWARESYNTHS "Software\\Microsoft\\DirectMusic\\SoftwareSynths"
-#define REFRESH_F_LASTBUFFER 0x00000001
+#define REGSTR_PATH_SOFTWARESYNTHS "Software\\Microsoft\\DirectMusic\\SoftwareSynths"
/*****************************************************************************
* Predeclare the interfaces
*/
+/* IIDs */
+DEFINE_GUID(IID_IDirectMusicSynth, 0x09823661,0x5c85,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
+DEFINE_GUID(IID_IDirectMusicSynth8, 0x53cab625,0x2711,0x4c9f,0x9d,0xe7,0x1b,0x7f,0x92,0x5f,0x6f,0xc8);
+DEFINE_GUID(IID_IDirectMusicSynthSink, 0x09823663,0x5c85,0x11d2,0xaf,0xa6,0x00,0xaa,0x00,0x24,0xd8,0xb6);
-DEFINE_GUID(IID_IDirectMusicSynth, 0x9823661,0x5c85,0x11d2,0xaf,0xa6,0x0,0xaa,0x0,0x24,0xd8,0xb6);
-DEFINE_GUID(IID_IDirectMusicSynth8, 0x53cab625,0x2711,0x4c9f,0x9d,0xe7,0x1b,0x7f,0x92,0x5f,0x6f,0xc8);
-DEFINE_GUID(IID_IDirectMusicSynthSink, 0x9823663,0x5c85,0x11d2,0xaf,0xa6,0x0,0xaa, 0x0,0x24,0xd8,0xb6);
-
-typedef struct IDirectMusicSynth IDirectMusicSynth, *LPDIRECTMUSICSYNTH;
-typedef struct IDirectMusicSynth8 IDirectMusicSynth8, *LPDIRECTMUSICSYNTH8;
+/* typedef definitions */
+typedef struct IDirectMusicSynth IDirectMusicSynth, *LPDIRECTMUSICSYNTH;
+typedef struct IDirectMusicSynth8 IDirectMusicSynth8, *LPDIRECTMUSICSYNTH8;
typedef struct IDirectMusicSynthSink IDirectMusicSynthSink, *LPDIRECTMUSICSYNTHSINK;
-DEFINE_GUID(GUID_DMUS_PROP_SetSynthSink, 0x0a3a5ba5,0x37b6,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12);
-DEFINE_GUID(GUID_DMUS_PROP_SinkUsesDSound, 0xbe208857,0x8952,0x11d2,0xba,0x1c,0x00,0x00,0xf8,0x75,0xac,0x12);
+/* GUIDs - property set */
+DEFINE_GUID(GUID_DMUS_PROP_SetSynthSink, 0x0a3a5ba5,0x37b6,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(GUID_DMUS_PROP_SinkUsesDSound, 0xbe208857,0x8952,0x11d2,0xba,0x1c,0x00,0x00,0xf8,0x75,0xac,0x12);
+
+
+/*****************************************************************************
+ * Flags
+ */
+#define REFRESH_F_LASTBUFFER 0x1
/*****************************************************************************
@@ -53,12 +59,14 @@
#ifndef _DMUS_VOICE_STATE_DEFINED
#define _DMUS_VOICE_STATE_DEFINED
-typedef struct _DMUS_VOICE_STATE
-{
- BOOL bExists;
- SAMPLE_POSITION spPosition;
-} DMUS_VOICE_STATE;
+/* typedef definition */
+typedef struct _DMUS_VOICE_STATE DMUS_VOICE_STATE, *LPDMUS_VOICE_STATE;
+/* actual structure */
+struct _DMUS_VOICE_STATE {
+ BOOL bExists;
+ SAMPLE_POSITION spPosition;
+};
#endif /* _DMUS_VOICE_STATE_DEFINED */
diff --git a/libs/uuid/dxguid.c b/libs/uuid/dxguid.c
index 7f260f9..83db7f9 100644
--- a/libs/uuid/dxguid.c
+++ b/libs/uuid/dxguid.c
@@ -38,10 +38,8 @@
#include "dsound.h"
#include "dsdriver.h"
#include "dsconf.h"
-#include "dmusicc.h"
#include "dmusici.h"
#include "dmusics.h"
-#include "dmplugin.h"
#include "dplay.h"
#include "dplobby.h"
#include "dinput.h"
diff --git a/winedefault.reg b/winedefault.reg
index 9b29855..66e73ae 100644
--- a/winedefault.reg
+++ b/winedefault.reg
@@ -2590,28 +2590,27 @@
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Microsoft.DirectMusicMelodyFormulationTrack.1\CLSID]
@="{B0684266-B57F-11D2-97F9-00C04FA36E58}"
-# As far as I know, not yet available
## Microsoft DirectSound Wave
-#[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8A667154-F9CB-11D2-AD8A-0060B0575ABC}]
-#@="Microsoft DirectSound Wave"
-#[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8A667154-F9CB-11D2-AD8A-0060B0575ABC}\InProcServer32]
-#@="dswave.dll"
-#"ThreadingModel"="Both"
-#[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8A667154-F9CB-11D2-AD8A-0060B0575ABC}\ProgID]
-#@="Microsoft.DirectSoundWave.1"
-#[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8A667154-F9CB-11D2-AD8A-0060B0575ABC}\VersionIndependentProgID]
-#@="Microsoft.DirectSoundWave"
+[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8A667154-F9CB-11D2-AD8A-0060B0575ABC}]
+@="Microsoft DirectSound Wave"
+[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8A667154-F9CB-11D2-AD8A-0060B0575ABC}\InProcServer32]
+@="dswave.dll"
+"ThreadingModel"="Both"
+[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8A667154-F9CB-11D2-AD8A-0060B0575ABC}\ProgID]
+@="Microsoft.DirectSoundWave.1"
+[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8A667154-F9CB-11D2-AD8A-0060B0575ABC}\VersionIndependentProgID]
+@="Microsoft.DirectSoundWave"
-#[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Microsoft.DirectSoundWave]
-#@="Microsoft DirectSound Wave"
-#[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Microsoft.DirectSoundWave\CLSID]
-#@="{8A667154-F9CB-11D2-AD8A-0060B0575ABC}"
-#[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Microsoft.DirectSoundWave\CurVer]
-#@="Microsoft.DirectSoundWave.1"
-#[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Microsoft.DirectSoundWave.1]
-#@="Microsoft DirectSound Wave"
-#[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Microsoft.DirectSoundWave.1\CLSID]
-#@="{8A667154-F9CB-11D2-AD8A-0060B0575ABC}"
+[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Microsoft.DirectSoundWave]
+@="Microsoft DirectSound Wave"
+[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Microsoft.DirectSoundWave\CLSID]
+@="{8A667154-F9CB-11D2-AD8A-0060B0575ABC}"
+[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Microsoft.DirectSoundWave\CurVer]
+@="Microsoft.DirectSoundWave.1"
+[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Microsoft.DirectSoundWave.1]
+@="Microsoft DirectSound Wave"
+[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Microsoft.DirectSoundWave.1\CLSID]
+@="{8A667154-F9CB-11D2-AD8A-0060B0575ABC}"
#