3 * Copyright (C) 2003 Rok Mandeljc
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Library General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26 #include "wine/debug.h"
28 #include "dmscript_private.h"
30 WINE_DEFAULT_DEBUG_CHANNEL(dmscript
);
32 /* IDirectMusicScript IUnknown part: */
33 HRESULT WINAPI
IDirectMusicScriptImpl_QueryInterface (LPDIRECTMUSICSCRIPT iface
, REFIID riid
, LPVOID
*ppobj
)
35 ICOM_THIS(IDirectMusicScriptImpl
,iface
);
37 if (IsEqualIID(riid
, &IID_IUnknown
) ||
38 IsEqualIID(riid
, &IID_IDirectMusicScript
)) {
39 IDirectMusicScriptImpl_AddRef(iface
);
44 WARN("(%p)->(%s,%p),not found\n", This
, debugstr_guid(riid
), ppobj
);
48 ULONG WINAPI
IDirectMusicScriptImpl_AddRef (LPDIRECTMUSICSCRIPT iface
)
50 ICOM_THIS(IDirectMusicScriptImpl
,iface
);
51 TRACE("(%p) : AddRef from %ld\n", This
, This
->ref
);
55 ULONG WINAPI
IDirectMusicScriptImpl_Release (LPDIRECTMUSICSCRIPT iface
)
57 ICOM_THIS(IDirectMusicScriptImpl
,iface
);
58 ULONG ref
= --This
->ref
;
59 TRACE("(%p) : ReleaseRef to %ld\n", This
, This
->ref
);
61 HeapFree(GetProcessHeap(), 0, This
);
66 /* IDirectMusicScript IDirectMusicScript part: */
67 HRESULT WINAPI
IDirectMusicScriptImpl_Init (LPDIRECTMUSICSCRIPT iface
, IDirectMusicPerformance
* pPerformance
, DMUS_SCRIPT_ERRORINFO
* pErrorInfo
)
69 ICOM_THIS(IDirectMusicScriptImpl
,iface
);
71 FIXME("(%p, %p, %p): stub\n", This
, pPerformance
, pErrorInfo
);
76 HRESULT WINAPI
IDirectMusicScriptImpl_CallRoutine (LPDIRECTMUSICSCRIPT iface
, WCHAR
* pwszRoutineName
, DMUS_SCRIPT_ERRORINFO
* pErrorInfo
)
78 ICOM_THIS(IDirectMusicScriptImpl
,iface
);
80 FIXME("(%p, %s, %p): stub\n", This
, debugstr_w(pwszRoutineName
), pErrorInfo
);
85 HRESULT WINAPI
IDirectMusicScriptImpl_SetVariableVariant (LPDIRECTMUSICSCRIPT iface
, WCHAR
* pwszVariableName
, VARIANT varValue
, BOOL fSetRef
, DMUS_SCRIPT_ERRORINFO
* pErrorInfo
)
87 ICOM_THIS(IDirectMusicScriptImpl
,iface
);
89 FIXME("(%p, %p, FIXME, %d, %p): stub\n", This
, pwszVariableName
,/* varValue,*/ fSetRef
, pErrorInfo
);
94 HRESULT WINAPI
IDirectMusicScriptImpl_GetVariableVariant (LPDIRECTMUSICSCRIPT iface
, WCHAR
* pwszVariableName
, VARIANT
* pvarValue
, DMUS_SCRIPT_ERRORINFO
* pErrorInfo
)
96 ICOM_THIS(IDirectMusicScriptImpl
,iface
);
98 FIXME("(%p, %p, %p, %p): stub\n", This
, pwszVariableName
, pvarValue
, pErrorInfo
);
103 HRESULT WINAPI
IDirectMusicScriptImpl_SetVariableNumber (LPDIRECTMUSICSCRIPT iface
, WCHAR
* pwszVariableName
, LONG lValue
, DMUS_SCRIPT_ERRORINFO
* pErrorInfo
)
105 ICOM_THIS(IDirectMusicScriptImpl
,iface
);
107 FIXME("(%p, %p, %li, %p): stub\n", This
, pwszVariableName
, lValue
, pErrorInfo
);
112 HRESULT WINAPI
IDirectMusicScriptImpl_GetVariableNumber (LPDIRECTMUSICSCRIPT iface
, WCHAR
* pwszVariableName
, LONG
* plValue
, DMUS_SCRIPT_ERRORINFO
* pErrorInfo
)
114 ICOM_THIS(IDirectMusicScriptImpl
,iface
);
116 FIXME("(%p, %p, %p, %p): stub\n", This
, pwszVariableName
, plValue
, pErrorInfo
);
121 HRESULT WINAPI
IDirectMusicScriptImpl_SetVariableObject (LPDIRECTMUSICSCRIPT iface
, WCHAR
* pwszVariableName
, IUnknown
* punkValue
, DMUS_SCRIPT_ERRORINFO
* pErrorInfo
)
123 ICOM_THIS(IDirectMusicScriptImpl
,iface
);
125 FIXME("(%p, %p, %p, %p): stub\n", This
, pwszVariableName
, punkValue
, pErrorInfo
);
130 HRESULT WINAPI
IDirectMusicScriptImpl_GetVariableObject (LPDIRECTMUSICSCRIPT iface
, WCHAR
* pwszVariableName
, REFIID riid
, LPVOID
* ppv
, DMUS_SCRIPT_ERRORINFO
* pErrorInfo
)
132 ICOM_THIS(IDirectMusicScriptImpl
,iface
);
134 FIXME("(%p, %p, %s, %p, %p): stub\n", This
, pwszVariableName
, debugstr_guid(riid
), ppv
, pErrorInfo
);
139 HRESULT WINAPI
IDirectMusicScriptImpl_EnumRoutine (LPDIRECTMUSICSCRIPT iface
, DWORD dwIndex
, WCHAR
* pwszName
)
141 ICOM_THIS(IDirectMusicScriptImpl
,iface
);
143 FIXME("(%p, %ld, %p): stub\n", This
, dwIndex
, pwszName
);
148 HRESULT WINAPI
IDirectMusicScriptImpl_EnumVariable (LPDIRECTMUSICSCRIPT iface
, DWORD dwIndex
, WCHAR
* pwszName
)
150 ICOM_THIS(IDirectMusicScriptImpl
,iface
);
152 FIXME("(%p, %ld, %p): stub\n", This
, dwIndex
, pwszName
);
157 ICOM_VTABLE(IDirectMusicScript
) DirectMusicScript_Vtbl
=
159 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
160 IDirectMusicScriptImpl_QueryInterface
,
161 IDirectMusicScriptImpl_AddRef
,
162 IDirectMusicScriptImpl_Release
,
163 IDirectMusicScriptImpl_Init
,
164 IDirectMusicScriptImpl_CallRoutine
,
165 IDirectMusicScriptImpl_SetVariableVariant
,
166 IDirectMusicScriptImpl_GetVariableVariant
,
167 IDirectMusicScriptImpl_SetVariableNumber
,
168 IDirectMusicScriptImpl_GetVariableNumber
,
169 IDirectMusicScriptImpl_SetVariableObject
,
170 IDirectMusicScriptImpl_GetVariableObject
,
171 IDirectMusicScriptImpl_EnumRoutine
,
172 IDirectMusicScriptImpl_EnumVariable
175 /* for ClassFactory */
176 HRESULT WINAPI
DMUSIC_CreateDirectMusicScript (LPCGUID lpcGUID
, LPDIRECTMUSICSCRIPT
* ppDMScript
, LPUNKNOWN pUnkOuter
)
178 IDirectMusicScriptImpl
* dmscript
;
180 if (IsEqualIID (lpcGUID
, &IID_IDirectMusicScript
)) {
181 dmscript
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirectMusicScriptImpl
));
182 if (NULL
== dmscript
) {
183 *ppDMScript
= (LPDIRECTMUSICSCRIPT
) NULL
;
184 return E_OUTOFMEMORY
;
186 dmscript
->lpVtbl
= &DirectMusicScript_Vtbl
;
188 *ppDMScript
= (LPDIRECTMUSICSCRIPT
) dmscript
;
192 WARN("No interface found\n");
193 return E_NOINTERFACE
;
196 /*****************************************************************************
197 * IDirectMusicScriptObject implementation
199 /* IDirectMusicScriptObject IUnknown part: */
200 HRESULT WINAPI
IDirectMusicScriptObject_QueryInterface (LPDIRECTMUSICOBJECT iface
, REFIID riid
, LPVOID
*ppobj
)
202 ICOM_THIS(IDirectMusicScriptObject
,iface
);
204 if (IsEqualIID (riid
, &IID_IUnknown
)
205 || IsEqualIID(riid
, &IID_IDirectMusicObject
)) {
206 IDirectMusicScriptObject_AddRef(iface
);
209 } else if (IsEqualIID (riid
, &IID_IPersistStream
)) {
210 IPersistStream_AddRef ((LPPERSISTSTREAM
)This
->pStream
);
211 *ppobj
= (LPPERSISTSTREAM
)This
->pStream
;
213 } else if (IsEqualIID (riid
, &IID_IDirectMusicScript
)) {
214 IDirectMusicScript_AddRef ((LPDIRECTMUSICSCRIPT
)This
->pScript
);
215 *ppobj
= (LPDIRECTMUSICSCRIPT
)This
->pScript
;
219 WARN("(%p)->(%s,%p),not found\n",This
,debugstr_guid(riid
),ppobj
);
220 return E_NOINTERFACE
;
223 ULONG WINAPI
IDirectMusicScriptObject_AddRef (LPDIRECTMUSICOBJECT iface
)
225 ICOM_THIS(IDirectMusicScriptObject
,iface
);
226 TRACE("(%p) : AddRef from %ld\n", This
, This
->ref
);
227 return ++(This
->ref
);
230 ULONG WINAPI
IDirectMusicScriptObject_Release (LPDIRECTMUSICOBJECT iface
)
232 ICOM_THIS(IDirectMusicScriptObject
,iface
);
233 ULONG ref
= --This
->ref
;
234 TRACE("(%p) : ReleaseRef to %ld\n", This
, This
->ref
);
236 HeapFree(GetProcessHeap(), 0, This
);
241 /* IDirectMusicScriptObject IDirectMusicObject part: */
242 HRESULT WINAPI
IDirectMusicScriptObject_GetDescriptor (LPDIRECTMUSICOBJECT iface
, LPDMUS_OBJECTDESC pDesc
)
244 ICOM_THIS(IDirectMusicScriptObject
,iface
);
246 TRACE("(%p, %p)\n", This
, pDesc
);
252 HRESULT WINAPI
IDirectMusicScriptObject_SetDescriptor (LPDIRECTMUSICOBJECT iface
, LPDMUS_OBJECTDESC pDesc
)
254 ICOM_THIS(IDirectMusicScriptObject
,iface
);
256 TRACE("(%p, %p)\n", This
, pDesc
);
262 HRESULT WINAPI
IDirectMusicScriptObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface
, LPSTREAM pStream
, LPDMUS_OBJECTDESC pDesc
)
264 ICOM_THIS(IDirectMusicScriptObject
,iface
);
266 FIXME("(%p, %p, %p): stub\n", This
, pStream
, pDesc
);
271 ICOM_VTABLE(IDirectMusicObject
) DirectMusicScriptObject_Vtbl
=
273 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
274 IDirectMusicScriptObject_QueryInterface
,
275 IDirectMusicScriptObject_AddRef
,
276 IDirectMusicScriptObject_Release
,
277 IDirectMusicScriptObject_GetDescriptor
,
278 IDirectMusicScriptObject_SetDescriptor
,
279 IDirectMusicScriptObject_ParseDescriptor
282 /* for ClassFactory */
283 HRESULT WINAPI
DMUSIC_CreateDirectMusicScriptObject (LPCGUID lpcGUID
, LPDIRECTMUSICOBJECT
* ppObject
, LPUNKNOWN pUnkOuter
)
285 IDirectMusicScriptObject
*obj
;
287 TRACE("(%p,%p,%p)\n", lpcGUID
, ppObject
, pUnkOuter
);
288 if (IsEqualIID (lpcGUID
, &IID_IDirectMusicObject
)) {
289 obj
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirectMusicScriptObject
));
291 *ppObject
= (LPDIRECTMUSICOBJECT
) NULL
;
292 return E_OUTOFMEMORY
;
294 obj
->lpVtbl
= &DirectMusicScriptObject_Vtbl
;
296 /* prepare IPersistStream */
297 obj
->pStream
= HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY
, sizeof(IDirectMusicScriptObjectStream
));
298 obj
->pStream
->lpVtbl
= &DirectMusicScriptObjectStream_Vtbl
;
299 obj
->pStream
->ref
= 1;
300 obj
->pStream
->pParentObject
= obj
;
301 /* prepare IDirectMusicScript */
302 DMUSIC_CreateDirectMusicScript (&IID_IDirectMusicScript
, (LPDIRECTMUSICSCRIPT
*)&obj
->pScript
, NULL
);
303 obj
->pScript
->pObject
= obj
;
304 *ppObject
= (LPDIRECTMUSICOBJECT
) obj
;
307 WARN("No interface found\n");
309 return E_NOINTERFACE
;
312 /*****************************************************************************
313 * IDirectMusicScriptObjectStream implementation
315 /* IDirectMusicScriptObjectStream IUnknown part: */
316 HRESULT WINAPI
IDirectMusicScriptObjectStream_QueryInterface (LPPERSISTSTREAM iface
, REFIID riid
, LPVOID
*ppobj
)
318 ICOM_THIS(IDirectMusicScriptObjectStream
,iface
);
320 if (IsEqualIID (riid
, &IID_IUnknown
)
321 || IsEqualIID (riid
, &IID_IPersistStream
)) {
322 IDirectMusicScriptObjectStream_AddRef(iface
);
327 WARN("(%p)->(%s,%p),not found\n",This
,debugstr_guid(riid
),ppobj
);
328 return E_NOINTERFACE
;
331 ULONG WINAPI
IDirectMusicScriptObjectStream_AddRef (LPPERSISTSTREAM iface
)
333 ICOM_THIS(IDirectMusicScriptObjectStream
,iface
);
334 TRACE("(%p) : AddRef from %ld\n", This
, This
->ref
);
335 return ++(This
->ref
);
338 ULONG WINAPI
IDirectMusicScriptObjectStream_Release (LPPERSISTSTREAM iface
)
340 ICOM_THIS(IDirectMusicScriptObjectStream
,iface
);
341 ULONG ref
= --This
->ref
;
342 TRACE("(%p) : ReleaseRef to %ld\n", This
, This
->ref
);
344 HeapFree(GetProcessHeap(), 0, This
);
349 /* IDirectMusicScriptObjectStream IPersist part: */
350 HRESULT WINAPI
IDirectMusicScriptObjectStream_GetClassID (LPPERSISTSTREAM iface
, CLSID
* pClassID
)
355 /* IDirectMusicScriptObjectStream IPersistStream part: */
356 HRESULT WINAPI
IDirectMusicScriptObjectStream_IsDirty (LPPERSISTSTREAM iface
)
361 HRESULT WINAPI
IDirectMusicScriptObjectStream_Load (LPPERSISTSTREAM iface
, IStream
* pStm
)
363 FIXME(": Loading not implemented yet\n");
367 HRESULT WINAPI
IDirectMusicScriptObjectStream_Save (LPPERSISTSTREAM iface
, IStream
* pStm
, BOOL fClearDirty
)
372 HRESULT WINAPI
IDirectMusicScriptObjectStream_GetSizeMax (LPPERSISTSTREAM iface
, ULARGE_INTEGER
* pcbSize
)
377 ICOM_VTABLE(IPersistStream
) DirectMusicScriptObjectStream_Vtbl
=
379 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
380 IDirectMusicScriptObjectStream_QueryInterface
,
381 IDirectMusicScriptObjectStream_AddRef
,
382 IDirectMusicScriptObjectStream_Release
,
383 IDirectMusicScriptObjectStream_GetClassID
,
384 IDirectMusicScriptObjectStream_IsDirty
,
385 IDirectMusicScriptObjectStream_Load
,
386 IDirectMusicScriptObjectStream_Save
,
387 IDirectMusicScriptObjectStream_GetSizeMax