ReactOS 0.4.17-dev-934-g091855f
script.c
Go to the documentation of this file.
1/* IDirectMusicScript
2 *
3 * Copyright (C) 2003-2004 Rok Mandeljc
4 * Copyright (C) 2003-2004 Raphael Junqueira
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21
22#include <stdio.h>
23
24#include "dmscript_private.h"
25#include "dmobject.h"
26
29
30
31/*****************************************************************************
32 * IDirectMusicScriptImpl implementation
33 */
34typedef struct IDirectMusicScriptImpl {
35 IDirectMusicScript IDirectMusicScript_iface;
38 IDirectMusicPerformance *pPerformance;
44
45static inline IDirectMusicScriptImpl *impl_from_IDirectMusicScript(IDirectMusicScript *iface)
46{
47 return CONTAINING_RECORD(iface, IDirectMusicScriptImpl, IDirectMusicScript_iface);
48}
49
51 void **ret_iface)
52{
54
55 TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface);
56
57 *ret_iface = NULL;
58
59 if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicScript))
60 *ret_iface = iface;
61 else if (IsEqualIID(riid, &IID_IDirectMusicObject))
62 *ret_iface = &This->dmobj.IDirectMusicObject_iface;
64 *ret_iface = &This->dmobj.IPersistStream_iface;
65 else {
66 WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface);
67 return E_NOINTERFACE;
68 }
69
70 IUnknown_AddRef((IUnknown*)*ret_iface);
71 return S_OK;
72}
73
74static ULONG WINAPI IDirectMusicScriptImpl_AddRef(IDirectMusicScript *iface)
75{
78
79 TRACE("(%p) ref=%ld\n", This, ref);
80
81 return ref;
82}
83
84static ULONG WINAPI IDirectMusicScriptImpl_Release(IDirectMusicScript *iface)
85{
88
89 TRACE("(%p) ref=%ld\n", This, ref);
90
91 if (!ref) {
92 free(This->pHeader);
93 free(This->pVersion);
94 free(This->pwzLanguage);
95 free(This->pwzSource);
96 free(This);
97 }
98
99 return ref;
100}
101
102static HRESULT WINAPI IDirectMusicScriptImpl_Init(IDirectMusicScript *iface,
103 IDirectMusicPerformance *pPerformance, DMUS_SCRIPT_ERRORINFO *pErrorInfo)
104{
106 FIXME("(%p, %p, %p): stub\n", This, pPerformance, pErrorInfo);
107 This->pPerformance = pPerformance;
108 return S_OK;
109}
110
111static HRESULT WINAPI IDirectMusicScriptImpl_CallRoutine(IDirectMusicScript *iface,
112 WCHAR *pwszRoutineName, DMUS_SCRIPT_ERRORINFO *pErrorInfo)
113{
115 FIXME("(%p, %s, %p): stub\n", This, debugstr_w(pwszRoutineName), pErrorInfo);
116 /*return E_NOTIMPL;*/
117 return S_OK;
118 /*return E_FAIL;*/
119}
120
122 WCHAR *pwszVariableName, VARIANT varValue, BOOL fSetRef, DMUS_SCRIPT_ERRORINFO *pErrorInfo)
123{
125 FIXME("(%p, %s, FIXME, %d, %p): stub\n", This, debugstr_w(pwszVariableName),/* varValue,*/ fSetRef, pErrorInfo);
126 return S_OK;
127}
128
130 WCHAR *pwszVariableName, VARIANT *pvarValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo)
131{
133 FIXME("(%p, %s, %p, %p): stub\n", This, debugstr_w(pwszVariableName), pvarValue, pErrorInfo);
134 return S_OK;
135}
136
138 WCHAR *pwszVariableName, LONG lValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo)
139{
141 FIXME("(%p, %s, %li, %p): stub\n", This, debugstr_w(pwszVariableName), lValue, pErrorInfo);
142 return S_OK;
143}
144
146 WCHAR *pwszVariableName, LONG *plValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo)
147{
149 FIXME("(%p, %s, %p, %p): stub\n", This, debugstr_w(pwszVariableName), plValue, pErrorInfo);
150 return S_OK;
151}
152
154 WCHAR *pwszVariableName, IUnknown *punkValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo)
155{
157 FIXME("(%p, %s, %p, %p): stub\n", This, debugstr_w(pwszVariableName), punkValue, pErrorInfo);
158 return S_OK;
159}
160
162 WCHAR *pwszVariableName, REFIID riid, void **ppv, DMUS_SCRIPT_ERRORINFO *pErrorInfo)
163{
165 FIXME("(%p, %s, %s, %p, %p): stub\n", This, debugstr_w(pwszVariableName), debugstr_dmguid(riid), ppv, pErrorInfo);
166 return S_OK;
167}
168
169static HRESULT WINAPI IDirectMusicScriptImpl_EnumRoutine(IDirectMusicScript *iface, DWORD dwIndex,
170 WCHAR *pwszName)
171{
173 FIXME("(%p, %ld, %p): stub\n", This, dwIndex, pwszName);
174 return S_OK;
175}
176
177static HRESULT WINAPI IDirectMusicScriptImpl_EnumVariable(IDirectMusicScript *iface, DWORD dwIndex,
178 WCHAR *pwszName)
179{
181 FIXME("(%p, %ld, %p): stub\n", This, dwIndex, pwszName);
182 return S_OK;
183}
184
185static const IDirectMusicScriptVtbl dmscript_vtbl = {
199};
200
203{
204 struct chunk_entry riff = {0};
205 HRESULT hr;
206
207 TRACE("(%p, %p, %p)\n", iface, stream, desc);
208
209 if (!stream || !desc)
210 return E_POINTER;
211
212 if ((hr = stream_get_chunk(stream, &riff)) != S_OK)
213 return hr;
214 if (riff.id != FOURCC_RIFF || riff.type != DMUS_FOURCC_SCRIPT_FORM) {
215 TRACE("loading failed: unexpected %s\n", debugstr_chunk(&riff));
218 }
219
222 if (FAILED(hr))
223 return hr;
224
225 if (desc->dwValidData) {
226 desc->guidClass = CLSID_DirectMusicScript;
227 desc->dwValidData |= DMUS_OBJ_CLASS;
228 }
229
230 TRACE("returning descriptor:\n");
232 return S_OK;
233}
234
235static const IDirectMusicObjectVtbl dmobject_vtbl = {
242};
243
244/* IDirectMusicScriptImpl IPersistStream part: */
246{
247 return CONTAINING_RECORD(iface, IDirectMusicScriptImpl, dmobj.IPersistStream_iface);
248}
249
251{
253 DMUS_PRIVATE_CHUNK Chunk;
254 DWORD StreamSize, StreamCount, ListSize[3], ListCount[3];
255 LARGE_INTEGER liMove; /* used when skipping chunks */
256 LPDIRECTMUSICGETLOADER pGetLoader = NULL;
257 LPDIRECTMUSICLOADER pLoader = NULL;
258
259 FIXME("(%p, %p): Loading not implemented yet\n", This, pStm);
260 IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
261 TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
262 switch (Chunk.fccID) {
263 case FOURCC_RIFF: {
264 IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);
265 TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(Chunk.fccID));
266 StreamSize = Chunk.dwSize - sizeof(FOURCC);
267 StreamCount = 0;
268 switch (Chunk.fccID) {
270 TRACE_(dmfile)(": script form\n");
271 do {
272 IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
273 StreamCount += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
274 TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
275 switch (Chunk.fccID) {
277 TRACE_(dmfile)(": script header chunk\n");
278 This->pHeader = calloc(1, Chunk.dwSize);
279 IStream_Read (pStm, This->pHeader, Chunk.dwSize, NULL);
280 break;
281 }
283 TRACE_(dmfile)(": script version chunk\n");
284 This->pVersion = calloc(1, Chunk.dwSize);
285 IStream_Read (pStm, This->pVersion, Chunk.dwSize, NULL);
286 TRACE_(dmfile)("version: 0x%08lx.0x%08lx\n", This->pVersion->dwVersionMS, This->pVersion->dwVersionLS);
287 break;
288 }
290 TRACE_(dmfile)(": script language chunk\n");
291 This->pwzLanguage = calloc(1, Chunk.dwSize);
292 IStream_Read (pStm, This->pwzLanguage, Chunk.dwSize, NULL);
293 TRACE_(dmfile)("using language: %s\n", debugstr_w(This->pwzLanguage));
294 break;
295 }
297 TRACE_(dmfile)(": script source chunk\n");
298 This->pwzSource = calloc(1, Chunk.dwSize);
299 IStream_Read (pStm, This->pwzSource, Chunk.dwSize, NULL);
300 if (TRACE_ON(dmscript)) {
301 int count = WideCharToMultiByte(CP_ACP, 0, This->pwzSource, -1, NULL, 0, NULL, NULL);
303 WideCharToMultiByte(CP_ACP, 0, This->pwzSource, -1, str, count, NULL, NULL);
304 str[count-1] = '\n';
305 TRACE("source:\n");
306 fwrite( str, 1, count, stderr );
307 free(str);
308 }
309 break;
310 }
312 TRACE_(dmfile)(": GUID chunk\n");
313 This->dmobj.desc.dwValidData |= DMUS_OBJ_OBJECT;
314 IStream_Read (pStm, &This->dmobj.desc.guidObject, Chunk.dwSize, NULL);
315 break;
316 }
318 TRACE_(dmfile)(": version chunk\n");
319 This->dmobj.desc.dwValidData |= DMUS_OBJ_VERSION;
320 IStream_Read (pStm, &This->dmobj.desc.vVersion, Chunk.dwSize, NULL);
321 break;
322 }
324 TRACE_(dmfile)(": category chunk\n");
325 This->dmobj.desc.dwValidData |= DMUS_OBJ_CATEGORY;
326 IStream_Read (pStm, This->dmobj.desc.wszCategory, Chunk.dwSize, NULL);
327 break;
328 }
329 case FOURCC_RIFF: {
330 IDirectMusicObject* pObject = NULL;
332
333 ZeroMemory (&desc, sizeof(DMUS_OBJECTDESC));
334 desc.dwSize = sizeof(DMUS_OBJECTDESC);
335 desc.dwValidData = DMUS_OBJ_STREAM | DMUS_OBJ_CLASS;
336 desc.guidClass = CLSID_DirectMusicContainer;
337 desc.pStream = NULL;
338 IStream_Clone (pStm, &desc.pStream);
339
340 liMove.QuadPart = 0;
341 liMove.QuadPart -= (sizeof(FOURCC) + sizeof(DWORD));
342 IStream_Seek (desc.pStream, liMove, STREAM_SEEK_CUR, NULL);
343
344 IStream_QueryInterface (pStm, &IID_IDirectMusicGetLoader, (LPVOID*)&pGetLoader);
345 IDirectMusicGetLoader_GetLoader (pGetLoader, &pLoader);
347
348 if (SUCCEEDED(IDirectMusicLoader_GetObject (pLoader, &desc, &IID_IDirectMusicObject, (LPVOID*) &pObject))) {
350 } else {
351 ERR_(dmfile)("Error on GetObject while trying to load Scrip SubContainer\n");
352 }
353
354 IDirectMusicLoader_Release (pLoader); pLoader = NULL; /* release loader */
355 IStream_Release(desc.pStream); desc.pStream = NULL; /* release cloned stream */
356
357 liMove.QuadPart = Chunk.dwSize;
358 IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
359 /*
360 IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);
361 TRACE_(dmfile)(": RIFF chunk of type %s", debugstr_fourcc(Chunk.fccID));
362 ListSize[0] = Chunk.dwSize - sizeof(FOURCC);
363 ListCount[0] = 0;
364
365 switch (Chunk.fccID) {
366 default: {
367 TRACE_(dmfile)(": unknown (skipping)\n");
368 liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
369 IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
370 break;
371 }
372 }
373 */
374 break;
375 }
376 case FOURCC_LIST: {
377 IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL);
378 TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID));
379 ListSize[0] = Chunk.dwSize - sizeof(FOURCC);
380 ListCount[0] = 0;
381 switch (Chunk.fccID) {
383 TRACE_(dmfile)(": UNFO list\n");
384 do {
385 IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL);
386 ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize;
387 TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize);
388 switch (Chunk.fccID) {
389 /* don't ask me why, but M$ puts INFO elements in UNFO list sometimes
390 (though strings seem to be valid unicode) */
391 case mmioFOURCC('I','N','A','M'):
393 TRACE_(dmfile)(": name chunk\n");
394 This->dmobj.desc.dwValidData |= DMUS_OBJ_NAME;
395 IStream_Read (pStm, This->dmobj.desc.wszName, Chunk.dwSize, NULL);
396 break;
397 }
398 case mmioFOURCC('I','A','R','T'):
400 TRACE_(dmfile)(": artist chunk (ignored)\n");
401 liMove.QuadPart = Chunk.dwSize;
402 IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
403 break;
404 }
405 case mmioFOURCC('I','C','O','P'):
407 TRACE_(dmfile)(": copyright chunk (ignored)\n");
408 liMove.QuadPart = Chunk.dwSize;
409 IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
410 break;
411 }
412 case mmioFOURCC('I','S','B','J'):
414 TRACE_(dmfile)(": subject chunk (ignored)\n");
415 liMove.QuadPart = Chunk.dwSize;
416 IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
417 break;
418 }
419 case mmioFOURCC('I','C','M','T'):
421 TRACE_(dmfile)(": comment chunk (ignored)\n");
422 liMove.QuadPart = Chunk.dwSize;
423 IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
424 break;
425 }
426 default: {
427 TRACE_(dmfile)(": unknown sub-chunk (irrelevant & skipping)\n");
428 liMove.QuadPart = Chunk.dwSize;
429 IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
430 break;
431 }
432 }
433 TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]);
434 } while (ListCount[0] < ListSize[0]);
435 break;
436 }
437 default: {
438 TRACE_(dmfile)(": unknown (skipping)\n");
439 liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC);
440 IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
441 break;
442 }
443 }
444 break;
445 }
446 default: {
447 TRACE_(dmfile)(": unknown chunk (irrelevant & skipping)\n");
448 liMove.QuadPart = Chunk.dwSize;
449 IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL);
450 break;
451 }
452 }
453 TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize);
454 } while (StreamCount < StreamSize);
455 break;
456 }
457 default: {
458 TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
459 liMove.QuadPart = StreamSize;
460 IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
461 return E_FAIL;
462 }
463 }
464 TRACE_(dmfile)(": reading finished\n");
465 break;
466 }
467 default: {
468 TRACE_(dmfile)(": unexpected chunk; loading failed)\n");
469 liMove.QuadPart = Chunk.dwSize;
470 IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */
471 return E_FAIL;
472 }
473 }
474
475 return S_OK;
476}
477
478static const IPersistStreamVtbl persiststream_vtbl = {
487};
488
489/* for ClassFactory */
491{
493 HRESULT hr;
494
495 *ppobj = NULL;
496
497 if (pUnkOuter)
499
500 if (!(obj = calloc(1, sizeof(*obj)))) return E_OUTOFMEMORY;
501 obj->IDirectMusicScript_iface.lpVtbl = &dmscript_vtbl;
502 obj->ref = 1;
503 dmobject_init(&obj->dmobj, &CLSID_DirectMusicScript, (IUnknown*)&obj->IDirectMusicScript_iface);
504 obj->dmobj.IDirectMusicObject_iface.lpVtbl = &dmobject_vtbl;
505 obj->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
506
507 hr = IDirectMusicScript_QueryInterface(&obj->IDirectMusicScript_iface, lpcGUID, ppobj);
508 IDirectMusicScript_Release(&obj->IDirectMusicScript_iface);
509
510 return hr;
511}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_FAIL
Definition: ddrawi.h:102
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
static ULONG WINAPI IDirectMusicScriptImpl_Release(IDirectMusicScript *iface)
Definition: script.c:84
static ULONG WINAPI IDirectMusicScriptImpl_AddRef(IDirectMusicScript *iface)
Definition: script.c:74
static HRESULT WINAPI IDirectMusicScriptImpl_QueryInterface(IDirectMusicScript *iface, REFIID riid, void **ret_iface)
Definition: script.c:50
HRESULT DMUSIC_CreateDirectMusicScriptImpl(REFIID lpcGUID, void **ppobj, IUnknown *pUnkOuter)
Definition: script.c:490
static HRESULT WINAPI IDirectMusicScriptImpl_SetVariableNumber(IDirectMusicScript *iface, WCHAR *pwszVariableName, LONG lValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo)
Definition: script.c:137
static HRESULT WINAPI IDirectMusicScriptImpl_EnumVariable(IDirectMusicScript *iface, DWORD dwIndex, WCHAR *pwszName)
Definition: script.c:177
static const IDirectMusicObjectVtbl dmobject_vtbl
Definition: script.c:235
static HRESULT WINAPI IDirectMusicScriptImpl_SetVariableObject(IDirectMusicScript *iface, WCHAR *pwszVariableName, IUnknown *punkValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo)
Definition: script.c:153
static const IPersistStreamVtbl persiststream_vtbl
Definition: script.c:478
static HRESULT WINAPI IDirectMusicScriptImpl_GetVariableNumber(IDirectMusicScript *iface, WCHAR *pwszVariableName, LONG *plValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo)
Definition: script.c:145
static HRESULT WINAPI IDirectMusicScriptImpl_Init(IDirectMusicScript *iface, IDirectMusicPerformance *pPerformance, DMUS_SCRIPT_ERRORINFO *pErrorInfo)
Definition: script.c:102
static IDirectMusicScriptImpl * impl_from_IPersistStream(IPersistStream *iface)
Definition: script.c:245
static HRESULT WINAPI IDirectMusicScriptImpl_EnumRoutine(IDirectMusicScript *iface, DWORD dwIndex, WCHAR *pwszName)
Definition: script.c:169
static HRESULT WINAPI IDirectMusicScriptImpl_CallRoutine(IDirectMusicScript *iface, WCHAR *pwszRoutineName, DMUS_SCRIPT_ERRORINFO *pErrorInfo)
Definition: script.c:111
static HRESULT WINAPI IDirectMusicScriptImpl_GetVariableVariant(IDirectMusicScript *iface, WCHAR *pwszVariableName, VARIANT *pvarValue, DMUS_SCRIPT_ERRORINFO *pErrorInfo)
Definition: script.c:129
static HRESULT WINAPI IDirectMusicScriptImpl_SetVariableVariant(IDirectMusicScript *iface, WCHAR *pwszVariableName, VARIANT varValue, BOOL fSetRef, DMUS_SCRIPT_ERRORINFO *pErrorInfo)
Definition: script.c:121
static IDirectMusicScriptImpl * impl_from_IDirectMusicScript(IDirectMusicScript *iface)
Definition: script.c:45
static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *pStm)
Definition: script.c:250
static const IDirectMusicScriptVtbl dmscript_vtbl
Definition: script.c:185
static HRESULT WINAPI script_IDirectMusicObject_ParseDescriptor(IDirectMusicObject *iface, IStream *stream, DMUS_OBJECTDESC *desc)
Definition: script.c:201
static HRESULT WINAPI IDirectMusicScriptImpl_GetVariableObject(IDirectMusicScript *iface, WCHAR *pwszVariableName, REFIID riid, void **ppv, DMUS_SCRIPT_ERRORINFO *pErrorInfo)
Definition: script.c:161
#define CP_ACP
Definition: compat.h:109
#define TRACE_(x)
Definition: compat.h:76
#define TRACE_ON(x)
Definition: compat.h:75
#define WINE_DECLARE_DEBUG_CHANNEL(x)
Definition: compat.h:45
#define WideCharToMultiByte
Definition: compat.h:111
size_t CDECL fwrite(const void *ptr, size_t size, size_t nmemb, FILE *file)
Definition: file.c:4129
#define stderr
DWORD FOURCC
Definition: dmdls.h:25
#define DMUS_E_SCRIPT_INVALID_FILE
Definition: dmerror.h:139
HRESULT WINAPI dmobj_IDirectMusicObject_GetDescriptor(IDirectMusicObject *iface, DMUS_OBJECTDESC *desc)
Definition: dmobject.c:503
void dmobject_init(struct dmobject *dmobj, const GUID *class, IUnknown *outer_unk)
Definition: dmobject.c:749
ULONG WINAPI dmobj_IPersistStream_Release(IPersistStream *iface)
Definition: dmobject.c:702
ULONG WINAPI dmobj_IDirectMusicObject_Release(IDirectMusicObject *iface)
Definition: dmobject.c:497
HRESULT dmobj_parsedescriptor(IStream *stream, const struct chunk_entry *riff, DMUS_OBJECTDESC *desc, DWORD supported)
Definition: dmobject.c:591
HRESULT WINAPI dmobj_IDirectMusicObject_QueryInterface(IDirectMusicObject *iface, REFIID riid, void **ret_iface)
Definition: dmobject.c:484
HRESULT WINAPI unimpl_IPersistStream_GetClassID(IPersistStream *iface, CLSID *class)
Definition: dmobject.c:723
HRESULT WINAPI unimpl_IPersistStream_GetSizeMax(IPersistStream *iface, ULARGE_INTEGER *size)
Definition: dmobject.c:742
HRESULT WINAPI dmobj_IDirectMusicObject_SetDescriptor(IDirectMusicObject *iface, DMUS_OBJECTDESC *desc)
Definition: dmobject.c:518
void dump_DMUS_OBJECTDESC(DMUS_OBJECTDESC *desc)
Definition: dmobject.c:222
const char * debugstr_chunk(const struct chunk_entry *chunk)
Definition: dmobject.c:279
ULONG WINAPI dmobj_IPersistStream_AddRef(IPersistStream *iface)
Definition: dmobject.c:696
const char * debugstr_dmguid(const GUID *id)
Definition: dmobject.c:36
HRESULT WINAPI dmobj_IPersistStream_QueryInterface(IPersistStream *iface, REFIID riid, void **ret_iface)
Definition: dmobject.c:689
ULONG WINAPI dmobj_IDirectMusicObject_AddRef(IDirectMusicObject *iface)
Definition: dmobject.c:491
HRESULT stream_skip_chunk(IStream *stream, const struct chunk_entry *chunk)
Definition: dmobject.c:351
HRESULT stream_get_chunk(IStream *stream, struct chunk_entry *chunk)
Definition: dmobject.c:307
HRESULT WINAPI unimpl_IPersistStream_IsDirty(IPersistStream *iface)
Definition: dmobject.c:729
HRESULT WINAPI unimpl_IPersistStream_Save(IPersistStream *iface, IStream *stream, BOOL clear_dirty)
Definition: dmobject.c:735
#define DMUS_OBJ_NAME_INAM
Definition: dmobject.h:96
#define DMUS_FOURCC_GUID_CHUNK
Definition: dmusicf.h:42
#define DMUS_FOURCC_SCRIPT_CHUNK
Definition: dmusicf.h:109
#define DMUS_FOURCC_UNAM_CHUNK
Definition: dmusicf.h:45
#define DMUS_FOURCC_VERSION_CHUNK
Definition: dmusicf.h:51
#define DMUS_FOURCC_SCRIPT_FORM
Definition: dmusicf.h:108
#define DMUS_FOURCC_UCOP_CHUNK
Definition: dmusicf.h:47
#define DMUS_FOURCC_UART_CHUNK
Definition: dmusicf.h:46
#define DMUS_FOURCC_SCRIPTLANGUAGE_CHUNK
Definition: dmusicf.h:111
#define DMUS_FOURCC_SCRIPTVERSION_CHUNK
Definition: dmusicf.h:110
#define DMUS_FOURCC_UNFO_LIST
Definition: dmusicf.h:44
#define DMUS_FOURCC_SCRIPTSOURCE_CHUNK
Definition: dmusicf.h:112
#define DMUS_FOURCC_UCMT_CHUNK
Definition: dmusicf.h:49
#define DMUS_FOURCC_USBJ_CHUNK
Definition: dmusicf.h:48
#define DMUS_FOURCC_CATEGORY_CHUNK
Definition: dmusicf.h:50
#define IDirectMusicGetLoader_GetLoader(p, a)
Definition: dmusici.h:963
#define IDirectMusicObject_Release(p)
Definition: dmusici.h:844
#define IDirectMusicLoader_Release(p)
Definition: dmusici.h:879
struct IDirectMusicGetLoader * LPDIRECTMUSICGETLOADER
Definition: dmusici.h:124
struct _DMUS_OBJECTDESC DMUS_OBJECTDESC
Definition: dmusici.h:570
#define DMUS_OBJ_NAME
Definition: dmusici.h:267
#define DMUS_OBJ_STREAM
Definition: dmusici.h:276
#define DMUS_OBJ_CLASS
Definition: dmusici.h:266
#define IDirectMusicScript_QueryInterface(p, a, b)
Definition: dmusici.h:1690
#define IDirectMusicGetLoader_Release(p)
Definition: dmusici.h:961
#define DMUS_OBJ_VERSION
Definition: dmusici.h:272
struct IDirectMusicLoader * LPDIRECTMUSICLOADER
Definition: dmusici.h:122
#define IDirectMusicScript_Release(p)
Definition: dmusici.h:1692
#define IDirectMusicLoader_GetObject(p, a, b, c)
Definition: dmusici.h:881
#define DMUS_OBJ_CATEGORY
Definition: dmusici.h:268
#define DMUS_OBJ_OBJECT
Definition: dmusici.h:265
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
FxObject * pObject
GLuint GLuint GLsizei count
Definition: gl.h:1545
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_w
Definition: kernel32.h:32
#define FOURCC(a, b, c, d)
Definition: memtrack.h:4
#define ZeroMemory
Definition: minwinbase.h:31
#define FOURCC_RIFF
Definition: mmsystem.h:564
#define FOURCC_LIST
Definition: mmsystem.h:565
#define mmioFOURCC(c0, c1, c2, c3)
Definition: mmsystem.h:38
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
const GUID IID_IPersistStream
Definition: proxy.cpp:13
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define calloc
Definition: rosglue.h:14
const WCHAR * str
#define ERR_(ch,...)
Definition: debug.h:156
static __inline const char * debugstr_fourcc(unsigned int cc)
Definition: debug.h:397
#define TRACE(s)
Definition: solgame.cpp:4
struct dmobject dmobj
Definition: script.c:36
WCHAR * pwzLanguage
Definition: script.c:41
IDirectMusicPerformance * pPerformance
Definition: script.c:38
DMUS_IO_VERSION * pVersion
Definition: script.c:40
DMUS_IO_SCRIPT_HEADER * pHeader
Definition: script.c:39
IDirectMusicScript IDirectMusicScript_iface
Definition: script.c:35
Definition: dmobject.h:26
FOURCC id
Definition: dmobject.h:27
FOURCC type
Definition: dmobject.h:29
Definition: send.c:48
Definition: parse.h:23
char * LPSTR
Definition: typedefs.h:51
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
LONGLONG QuadPart
Definition: typedefs.h:114
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:3479
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771
#define E_POINTER
Definition: winerror.h:3480