- implemented loader, loader's stream and loading of objects (now you can use builtin dmloader and native other dm*.dlls) - implemented proper creation of objects and retrieval of dmusic interfaces from them (object, stream, ...) - implemented all "standard track types" and appropriate stream (for dmband, loading is almost complete) - cleaned some obsolete stuff - split debug channels
diff --git a/dlls/dmscript/Makefile.in b/dlls/dmscript/Makefile.in index d78e831..5f5b694 100644 --- a/dlls/dmscript/Makefile.in +++ b/dlls/dmscript/Makefile.in
@@ -12,7 +12,8 @@ C_SRCS = \ dmscript_main.c \ regsvr.c \ - script.c + script.c \ + scripttrack.c RC_SRCS = version.rc
diff --git a/dlls/dmscript/dmscript_main.c b/dlls/dmscript/dmscript_main.c index 4fe2f99..df9b2dd 100644 --- a/dlls/dmscript/dmscript_main.c +++ b/dlls/dmscript/dmscript_main.c
@@ -19,15 +19,8 @@ #include "dmscript_private.h" -WINE_DEFAULT_DEBUG_CHANNEL(dmusic); +WINE_DEFAULT_DEBUG_CHANNEL(dmscript); - -/****************************************************************** - * DirectMusicScript ClassFactory - * - * - */ - typedef struct { /* IUnknown fields */ @@ -35,7 +28,10 @@ DWORD ref; } IClassFactoryImpl; -static HRESULT WINAPI DMSCRCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) +/****************************************************************** + * DirectMusicScriptAutoImplSegment ClassFactory + */ +static HRESULT WINAPI ScriptAutoImplSegmentCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) { ICOM_THIS(IClassFactoryImpl,iface); @@ -43,48 +39,540 @@ return E_NOINTERFACE; } -static ULONG WINAPI DMSCRCF_AddRef(LPCLASSFACTORY iface) +static ULONG WINAPI ScriptAutoImplSegmentCF_AddRef(LPCLASSFACTORY iface) { ICOM_THIS(IClassFactoryImpl,iface); return ++(This->ref); } -static ULONG WINAPI DMSCRCF_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 DMSCRCF_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); - if (IsEqualGUID (riid, &IID_IDirectMusicScript)) { - return DMUSIC_CreateDirectMusicScript (riid, (LPDIRECTMUSICSCRIPT*)ppobj, pOuter); - } + + /* nothing here yet */ + WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj); return E_NOINTERFACE; } -static HRESULT WINAPI DMSCRCF_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; } -static ICOM_VTABLE(IClassFactory) DMSCRCF_Vtbl = { +static ICOM_VTABLE(IClassFactory) ScriptAutoImplSegmentCF_Vtbl = { ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE - DMSCRCF_QueryInterface, - DMSCRCF_AddRef, - DMSCRCF_Release, - DMSCRCF_CreateInstance, - DMSCRCF_LockServer + ScriptAutoImplSegmentCF_QueryInterface, + ScriptAutoImplSegmentCF_AddRef, + ScriptAutoImplSegmentCF_Release, + ScriptAutoImplSegmentCF_CreateInstance, + ScriptAutoImplSegmentCF_LockServer }; -static IClassFactoryImpl DMSCRIPT_CF = {&DMSCRCF_Vtbl, 1 }; +static IClassFactoryImpl ScriptAutoImplSegment_CF = {&ScriptAutoImplSegmentCF_Vtbl, 1 }; + +/****************************************************************** + * DirectMusicScriptTrack ClassFactory + */ +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) +{ + ICOM_THIS(IClassFactoryImpl,iface); + return ++(This->ref); +} + +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) +{ + 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; +} + +static HRESULT WINAPI ScriptTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) +{ + ICOM_THIS(IClassFactoryImpl,iface); + FIXME("(%p)->(%d),stub!\n", This, dolock); + return S_OK; +} + +static ICOM_VTABLE(IClassFactory) ScriptTrackCF_Vtbl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + ScriptTrackCF_QueryInterface, + ScriptTrackCF_AddRef, + ScriptTrackCF_Release, + ScriptTrackCF_CreateInstance, + ScriptTrackCF_LockServer +}; + +static IClassFactoryImpl ScriptTrack_CF = {&ScriptTrackCF_Vtbl, 1 }; + +/****************************************************************** + * DirectMusicAudioVBScript ClassFactory + */ +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) +{ + ICOM_THIS(IClassFactoryImpl,iface); + return ++(This->ref); +} + +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) +{ + 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) +{ + ICOM_THIS(IClassFactoryImpl,iface); + FIXME("(%p)->(%d),stub!\n", This, dolock); + return S_OK; +} + +static ICOM_VTABLE(IClassFactory) AudioVBScriptCF_Vtbl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + AudioVBScriptCF_QueryInterface, + AudioVBScriptCF_AddRef, + AudioVBScriptCF_Release, + AudioVBScriptCF_CreateInstance, + AudioVBScriptCF_LockServer +}; + +static IClassFactoryImpl AudioVBScript_CF = {&AudioVBScriptCF_Vtbl, 1 }; + +/****************************************************************** + * DirectMusicScript ClassFactory + */ +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) +{ + ICOM_THIS(IClassFactoryImpl,iface); + return ++(This->ref); +} + +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) +{ + 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; +} + +static HRESULT WINAPI ScriptCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) +{ + ICOM_THIS(IClassFactoryImpl,iface); + FIXME("(%p)->(%d),stub!\n", This, dolock); + return S_OK; +} + +static ICOM_VTABLE(IClassFactory) ScriptCF_Vtbl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + ScriptCF_QueryInterface, + ScriptCF_AddRef, + ScriptCF_Release, + ScriptCF_CreateInstance, + ScriptCF_LockServer +}; + +static IClassFactoryImpl Script_CF = {&ScriptCF_Vtbl, 1 }; + +/****************************************************************** + * DirectMusicScriptAutoImplPerformance ClassFactory + */ +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) +{ + ICOM_THIS(IClassFactoryImpl,iface); + return ++(This->ref); +} + +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) +{ + 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) +{ + ICOM_THIS(IClassFactoryImpl,iface); + FIXME("(%p)->(%d),stub!\n", This, dolock); + return S_OK; +} + +static ICOM_VTABLE(IClassFactory) ScriptAutoImplPerformanceCF_Vtbl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + ScriptAutoImplPerformanceCF_QueryInterface, + ScriptAutoImplPerformanceCF_AddRef, + ScriptAutoImplPerformanceCF_Release, + ScriptAutoImplPerformanceCF_CreateInstance, + ScriptAutoImplPerformanceCF_LockServer +}; + +static IClassFactoryImpl ScriptAutoImplPerformance_CF = {&ScriptAutoImplPerformanceCF_Vtbl, 1 }; + +/****************************************************************** + * DirectMusicScriptSourceCodeLoader ClassFactory + */ +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) +{ + ICOM_THIS(IClassFactoryImpl,iface); + return ++(This->ref); +} + +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) +{ + 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) +{ + ICOM_THIS(IClassFactoryImpl,iface); + FIXME("(%p)->(%d),stub!\n", This, dolock); + return S_OK; +} + +static ICOM_VTABLE(IClassFactory) ScriptSourceCodeLoaderCF_Vtbl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + ScriptSourceCodeLoaderCF_QueryInterface, + ScriptSourceCodeLoaderCF_AddRef, + ScriptSourceCodeLoaderCF_Release, + ScriptSourceCodeLoaderCF_CreateInstance, + ScriptSourceCodeLoaderCF_LockServer +}; + +static IClassFactoryImpl ScriptSourceCodeLoader_CF = {&ScriptSourceCodeLoaderCF_Vtbl, 1 }; + +/****************************************************************** + * DirectMusicScriptAutoImplSegmentState ClassFactory + */ +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) +{ + ICOM_THIS(IClassFactoryImpl,iface); + return ++(This->ref); +} + +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) +{ + 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) +{ + ICOM_THIS(IClassFactoryImpl,iface); + FIXME("(%p)->(%d),stub!\n", This, dolock); + return S_OK; +} + +static ICOM_VTABLE(IClassFactory) ScriptAutoImplSegmentStateCF_Vtbl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + ScriptAutoImplSegmentStateCF_QueryInterface, + ScriptAutoImplSegmentStateCF_AddRef, + ScriptAutoImplSegmentStateCF_Release, + ScriptAutoImplSegmentStateCF_CreateInstance, + ScriptAutoImplSegmentStateCF_LockServer +}; + +static IClassFactoryImpl ScriptAutoImplSegmentState_CF = {&ScriptAutoImplSegmentStateCF_Vtbl, 1 }; + +/****************************************************************** + * DirectMusicScriptAutoImplAudioPathConfig ClassFactory + */ +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) +{ + ICOM_THIS(IClassFactoryImpl,iface); + return ++(This->ref); +} + +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) +{ + 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) +{ + ICOM_THIS(IClassFactoryImpl,iface); + FIXME("(%p)->(%d),stub!\n", This, dolock); + return S_OK; +} + +static ICOM_VTABLE(IClassFactory) ScriptAutoImplAudioPathConfigCF_Vtbl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + ScriptAutoImplAudioPathConfigCF_QueryInterface, + ScriptAutoImplAudioPathConfigCF_AddRef, + ScriptAutoImplAudioPathConfigCF_Release, + ScriptAutoImplAudioPathConfigCF_CreateInstance, + ScriptAutoImplAudioPathConfigCF_LockServer +}; + +static IClassFactoryImpl ScriptAutoImplAudioPathConfig_CF = {&ScriptAutoImplAudioPathConfigCF_Vtbl, 1 }; + +/****************************************************************** + * DirectMusicScriptAutoImplAudioPath ClassFactory + */ +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) +{ + ICOM_THIS(IClassFactoryImpl,iface); + return ++(This->ref); +} + +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) +{ + 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) +{ + ICOM_THIS(IClassFactoryImpl,iface); + FIXME("(%p)->(%d),stub!\n", This, dolock); + return S_OK; +} + +static ICOM_VTABLE(IClassFactory) ScriptAutoImplAudioPathCF_Vtbl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + ScriptAutoImplAudioPathCF_QueryInterface, + ScriptAutoImplAudioPathCF_AddRef, + ScriptAutoImplAudioPathCF_Release, + ScriptAutoImplAudioPathCF_CreateInstance, + ScriptAutoImplAudioPathCF_LockServer +}; + +static IClassFactoryImpl ScriptAutoImplAudioPath_CF = {&ScriptAutoImplAudioPathCF_Vtbl, 1 }; + +/****************************************************************** + * DirectMusicScriptAutoImplSong ClassFactory + */ +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) +{ + ICOM_THIS(IClassFactoryImpl,iface); + return ++(This->ref); +} + +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) +{ + 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) +{ + ICOM_THIS(IClassFactoryImpl,iface); + FIXME("(%p)->(%d),stub!\n", This, dolock); + return S_OK; +} + +static ICOM_VTABLE(IClassFactory) ScriptAutoImplSongCF_Vtbl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + ScriptAutoImplSongCF_QueryInterface, + ScriptAutoImplSongCF_AddRef, + ScriptAutoImplSongCF_Release, + ScriptAutoImplSongCF_CreateInstance, + ScriptAutoImplSongCF_LockServer +}; + +static IClassFactoryImpl ScriptAutoImplSong_CF = {&ScriptAutoImplSongCF_Vtbl, 1 }; /****************************************************************** * DllMain @@ -128,11 +616,48 @@ HRESULT WINAPI DMSCRIPT_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) { TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv); - if (IsEqualCLSID (&IID_IClassFactory, riid)) { - *ppv = (LPVOID) &DMSCRIPT_CF; + if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScriptAutoImpSegment) && IsEqualIID (riid, &IID_IClassFactory)) { + *ppv = (LPVOID) &ScriptAutoImplSegment_CF; IClassFactory_AddRef((IClassFactory*)*ppv); return S_OK; - } + } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScriptTrack) && IsEqualIID (riid, &IID_IClassFactory)) { + *ppv = (LPVOID) &ScriptTrack_CF; + IClassFactory_AddRef((IClassFactory*)*ppv); + return S_OK; + } else if (IsEqualCLSID (rclsid, &CLSID_AudioVBScript) && IsEqualIID (riid, &IID_IClassFactory)) { + *ppv = (LPVOID) &AudioVBScript_CF; + IClassFactory_AddRef((IClassFactory*)*ppv); + return S_OK; + } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScript) && IsEqualIID (riid, &IID_IClassFactory)) { + *ppv = (LPVOID) &Script_CF; + IClassFactory_AddRef((IClassFactory*)*ppv); + return S_OK; + } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScriptAutoImpPerformance) && IsEqualIID (riid, &IID_IClassFactory)) { + *ppv = (LPVOID) &ScriptAutoImplPerformance_CF; + IClassFactory_AddRef((IClassFactory*)*ppv); + return S_OK; + } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScripSourceCodeLoader) && IsEqualIID (riid, &IID_IClassFactory)) { + *ppv = (LPVOID) &ScriptSourceCodeLoader_CF; + IClassFactory_AddRef((IClassFactory*)*ppv); + return S_OK; + } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScriptAutoImpSegmentState) && IsEqualIID (riid, &IID_IClassFactory)) { + *ppv = (LPVOID) &ScriptAutoImplSegmentState_CF; + IClassFactory_AddRef((IClassFactory*)*ppv); + return S_OK; + } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScriptAutoImpAudioPathConfig) && IsEqualIID (riid, &IID_IClassFactory)) { + *ppv = (LPVOID) &ScriptAutoImplAudioPathConfig_CF; + IClassFactory_AddRef((IClassFactory*)*ppv); + return S_OK; + } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScriptAutoImpAudioPath) && IsEqualIID (riid, &IID_IClassFactory)) { + *ppv = (LPVOID) &ScriptAutoImplAudioPath_CF; + IClassFactory_AddRef((IClassFactory*)*ppv); + return S_OK; + } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicScriptAutoImpSong) && IsEqualIID (riid, &IID_IClassFactory)) { + *ppv = (LPVOID) &ScriptAutoImplSong_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/dmscript/dmscript_private.h b/dlls/dmscript/dmscript_private.h index 6380edb..1964289 100644 --- a/dlls/dmscript/dmscript_private.h +++ b/dlls/dmscript/dmscript_private.h
@@ -36,11 +36,23 @@ */ 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(IDirectMusicObject) DirectMusicScriptObject_Vtbl; +extern ICOM_VTABLE(IPersistStream) DirectMusicScriptObjectStream_Vtbl; + +extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicScriptTrack_Vtbl; +extern ICOM_VTABLE(IPersistStream) DirectMusicScriptTrackStream_Vtbl; + /***************************************************************************** * ClassFactory * @@ -49,6 +61,10 @@ */ extern HRESULT WINAPI DMUSIC_CreateDirectMusicScript (LPCGUID lpcGUID, LPDIRECTMUSICSCRIPT* ppDMScript, LPUNKNOWN pUnkOuter); +extern HRESULT WINAPI DMUSIC_CreateDirectMusicScriptObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter); + +extern HRESULT WINAPI DMUSIC_CreateDirectMusicScriptTrack (LPCGUID lpcGUID, LPDIRECTMUSICTRACK8* ppTrack, LPUNKNOWN pUnkOuter); + /***************************************************************************** * IDirectMusicScriptImpl implementation structure */ @@ -59,6 +75,7 @@ DWORD ref; /* IDirectMusicScriptImpl fields */ + IDirectMusicScriptObject* pObject; }; /* IUnknown: */ @@ -77,4 +94,115 @@ 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); +/* 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); +/* 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); + + +/***************************************************************************** + * IDirectMusicScriptTrack implementation structure + */ +struct IDirectMusicScriptTrack +{ + /* IUnknown fields */ + ICOM_VFIELD(IDirectMusicTrack8); + DWORD ref; + + /* IDirectMusicScriptTrack fields */ + IDirectMusicScriptTrackStream* pStream; +}; + +/* 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); + +/***************************************************************************** + * IDirectMusicScriptTrackStream implementation structure + */ +struct IDirectMusicScriptTrackStream +{ + /* IUnknown fields */ + ICOM_VFIELD (IPersistStream); + DWORD ref; + + /* IPersistStreamImpl fields */ + IDirectMusicScriptTrack* pParentTrack; +}; + +/* 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); + #endif /* __WINE_DMSCRIPT_PRIVATE_H */
diff --git a/dlls/dmscript/regsvr.c b/dlls/dmscript/regsvr.c index db9b597..0a011b7 100644 --- a/dlls/dmscript/regsvr.c +++ b/dlls/dmscript/regsvr.c
@@ -32,7 +32,7 @@ #include "wine/debug.h" -WINE_DEFAULT_DEBUG_CHANNEL(dmusic); +WINE_DEFAULT_DEBUG_CHANNEL(dmscript); /* * Near the bottom of this file are the exported DllRegisterServer and @@ -528,7 +528,7 @@ "DMScript" }, { &CLSID_DirectMusicScript, - "DirectMusic Script Object", + "DirectMusic Script Object", NULL, "dmscript.dll", "Both",
diff --git a/dlls/dmscript/script.c b/dlls/dmscript/script.c index 59162f8..d07607b 100644 --- a/dlls/dmscript/script.c +++ b/dlls/dmscript/script.c
@@ -25,20 +25,20 @@ #include "dmscript_private.h" -WINE_DEFAULT_DEBUG_CHANNEL(dmusic); +WINE_DEFAULT_DEBUG_CHANNEL(dmscript); -/* IDirectMusicScript IUnknown parts follow: */ +/* IDirectMusicScript IUnknown part: */ HRESULT WINAPI IDirectMusicScriptImpl_QueryInterface (LPDIRECTMUSICSCRIPT iface, REFIID riid, LPVOID *ppobj) { ICOM_THIS(IDirectMusicScriptImpl,iface); - if (IsEqualGUID(riid, &IID_IUnknown) || - IsEqualGUID(riid, &IID_IDirectMusicScript)) - { + if (IsEqualIID(riid, &IID_IUnknown) || + IsEqualIID(riid, &IID_IDirectMusicScript)) { IDirectMusicScriptImpl_AddRef(iface); *ppobj = This; return S_OK; } + WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj); return E_NOINTERFACE; } @@ -55,14 +55,13 @@ ICOM_THIS(IDirectMusicScriptImpl,iface); ULONG ref = --This->ref; TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref); - if (ref == 0) - { + if (ref == 0) { HeapFree(GetProcessHeap(), 0, This); } return ref; } -/* IDirectMusicScript Interface follow: */ +/* IDirectMusicScript IDirectMusicScript part: */ HRESULT WINAPI IDirectMusicScriptImpl_Init (LPDIRECTMUSICSCRIPT iface, IDirectMusicPerformance* pPerformance, DMUS_SCRIPT_ERRORINFO* pErrorInfo) { ICOM_THIS(IDirectMusicScriptImpl,iface); @@ -174,12 +173,214 @@ /* for ClassFactory */ HRESULT WINAPI DMUSIC_CreateDirectMusicScript (LPCGUID lpcGUID, LPDIRECTMUSICSCRIPT* ppDMScript, LPUNKNOWN pUnkOuter) { - if (IsEqualGUID (lpcGUID, &IID_IDirectMusicScript)) - { - FIXME("Not yet\n"); - return E_NOINTERFACE; + IDirectMusicScriptImpl* dmscript; + + 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; + } + + WARN("No interface found\n"); + return E_NOINTERFACE; +} + +/***************************************************************************** + * 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; + 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) +{ + return E_NOTIMPL; +} + +/* 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 new file mode 100644 index 0000000..79efea6 --- /dev/null +++ b/dlls/dmscript/scripttrack.c
@@ -0,0 +1,338 @@ +/* IDirectMusicScriptTrack 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 "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); + +/***************************************************************************** + * IDirectMusicScriptTrack implementation + */ +/* IDirectMusicScriptTrack IUnknown part: */ +HRESULT WINAPI IDirectMusicScriptTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) +{ + ICOM_THIS(IDirectMusicScriptTrack,iface); + + if (IsEqualIID (riid, &IID_IUnknown) || + IsEqualIID (riid, &IID_IDirectMusicTrack) || + IsEqualIID (riid, &IID_IDirectMusicTrack8)) { + IDirectMusicScriptTrack_AddRef(iface); + *ppobj = This; + return S_OK; + } else if (IsEqualIID (riid, &IID_IPersistStream)) { + IDirectMusicScriptTrackStream_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 IDirectMusicScriptTrack_AddRef (LPDIRECTMUSICTRACK8 iface) +{ + ICOM_THIS(IDirectMusicScriptTrack,iface); + TRACE("(%p) : AddRef from %ld\n", This, This->ref); + return ++(This->ref); +} + +ULONG WINAPI IDirectMusicScriptTrack_Release (LPDIRECTMUSICTRACK8 iface) +{ + ICOM_THIS(IDirectMusicScriptTrack,iface); + ULONG ref = --This->ref; + TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref); + if (ref == 0) { + HeapFree(GetProcessHeap(), 0, This); + } + return ref; +} + +/* IDirectMusicScriptTrack IDirectMusicTrack part: */ +HRESULT WINAPI IDirectMusicScriptTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) +{ + ICOM_THIS(IDirectMusicScriptTrack,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) +{ + ICOM_THIS(IDirectMusicScriptTrack,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) +{ + ICOM_THIS(IDirectMusicScriptTrack,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) +{ + ICOM_THIS(IDirectMusicScriptTrack,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); + + 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); + + 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); + + 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); + + FIXME("(%p, %s): stub\n", This, debugstr_guid(rguidNotificationType)); + + return S_OK; +} + +HRESULT WINAPI IDirectMusicScriptTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) +{ + ICOM_THIS(IDirectMusicScriptTrack,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); + + 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); + + 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); + + 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); + + 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); + + 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); + + FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); + + return S_OK; +} + +ICOM_VTABLE(IDirectMusicTrack8) DirectMusicScriptTrack_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 +}; + +/* 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; +} + + +/***************************************************************************** + * 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 IDirectMusicScriptTrackStream_AddRef (LPPERSISTSTREAM iface) +{ + ICOM_THIS(IDirectMusicScriptTrackStream,iface); + TRACE("(%p) : AddRef from %ld\n", This, This->ref); + return ++(This->ref); +} + +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) +{ + return E_NOTIMPL; +} + +/* IDirectMusicScriptTrackStream IPersistStream part: */ +HRESULT WINAPI IDirectMusicScriptTrackStream_IsDirty (LPPERSISTSTREAM iface) +{ + return E_NOTIMPL; +} + +HRESULT WINAPI IDirectMusicScriptTrackStream_Load (LPPERSISTSTREAM iface, IStream* pStm) +{ + FIXME(": Loading not implemented yet\n"); + return S_OK; +} + +HRESULT WINAPI IDirectMusicScriptTrackStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) +{ + return E_NOTIMPL; +} + +HRESULT WINAPI IDirectMusicScriptTrackStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) +{ + return E_NOTIMPL; +} + +ICOM_VTABLE(IPersistStream) DirectMusicScriptTrackStream_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectMusicScriptTrackStream_QueryInterface, + IDirectMusicScriptTrackStream_AddRef, + IDirectMusicScriptTrackStream_Release, + IDirectMusicScriptTrackStream_GetClassID, + IDirectMusicScriptTrackStream_IsDirty, + IDirectMusicScriptTrackStream_Load, + IDirectMusicScriptTrackStream_Save, + IDirectMusicScriptTrackStream_GetSizeMax +};