Implement CryptRegisterOIDFunction and CryptSIPAddProvider.
[wine] / dlls / dmscript / script.c
1 /* IDirectMusicScript
2  *
3  * Copyright (C) 2003 Rok Mandeljc
4  *
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.
9  *
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.
14  *
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.
18  */
19
20 #include <stdarg.h>
21
22 #include "windef.h"
23 #include "winbase.h"
24 #include "winuser.h"
25 #include "wingdi.h"
26 #include "wine/debug.h"
27
28 #include "dmscript_private.h"
29
30 WINE_DEFAULT_DEBUG_CHANNEL(dmscript);
31
32 /* IDirectMusicScript IUnknown part: */
33 HRESULT WINAPI IDirectMusicScriptImpl_QueryInterface (LPDIRECTMUSICSCRIPT iface, REFIID riid, LPVOID *ppobj)
34 {
35         ICOM_THIS(IDirectMusicScriptImpl,iface);
36
37         if (IsEqualIID(riid, &IID_IUnknown) || 
38             IsEqualIID(riid, &IID_IDirectMusicScript)) {
39                 IDirectMusicScriptImpl_AddRef(iface);
40                 *ppobj = This;
41                 return S_OK;
42         }
43         
44         WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
45         return E_NOINTERFACE;
46 }
47
48 ULONG WINAPI IDirectMusicScriptImpl_AddRef (LPDIRECTMUSICSCRIPT iface)
49 {
50         ICOM_THIS(IDirectMusicScriptImpl,iface);
51         TRACE("(%p) : AddRef from %ld\n", This, This->ref);
52         return ++(This->ref);
53 }
54
55 ULONG WINAPI IDirectMusicScriptImpl_Release (LPDIRECTMUSICSCRIPT iface)
56 {
57         ICOM_THIS(IDirectMusicScriptImpl,iface);
58         ULONG ref = --This->ref;
59         TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
60         if (ref == 0) {
61                 HeapFree(GetProcessHeap(), 0, This);
62         }
63         return ref;
64 }
65
66 /* IDirectMusicScript IDirectMusicScript part: */
67 HRESULT WINAPI IDirectMusicScriptImpl_Init (LPDIRECTMUSICSCRIPT iface, IDirectMusicPerformance* pPerformance, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
68 {
69         ICOM_THIS(IDirectMusicScriptImpl,iface);
70
71         FIXME("(%p, %p, %p): stub\n", This, pPerformance, pErrorInfo);
72
73         return S_OK;
74 }
75
76 HRESULT WINAPI IDirectMusicScriptImpl_CallRoutine (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszRoutineName, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
77 {
78         ICOM_THIS(IDirectMusicScriptImpl,iface);
79
80         FIXME("(%p, %s, %p): stub\n", This, debugstr_w(pwszRoutineName), pErrorInfo);
81
82         return S_OK;
83 }
84
85 HRESULT WINAPI IDirectMusicScriptImpl_SetVariableVariant (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, VARIANT varValue, BOOL fSetRef, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
86 {
87         ICOM_THIS(IDirectMusicScriptImpl,iface);
88
89         FIXME("(%p, %p, FIXME, %d, %p): stub\n", This, pwszVariableName,/* varValue,*/ fSetRef, pErrorInfo);
90
91         return S_OK;
92 }
93
94 HRESULT WINAPI IDirectMusicScriptImpl_GetVariableVariant (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, VARIANT* pvarValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
95 {
96         ICOM_THIS(IDirectMusicScriptImpl,iface);
97
98         FIXME("(%p, %p, %p, %p): stub\n", This, pwszVariableName, pvarValue, pErrorInfo);
99
100         return S_OK;
101 }
102
103 HRESULT WINAPI IDirectMusicScriptImpl_SetVariableNumber (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, LONG lValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
104 {
105         ICOM_THIS(IDirectMusicScriptImpl,iface);
106
107         FIXME("(%p, %p, %li, %p): stub\n", This, pwszVariableName, lValue, pErrorInfo);
108
109         return S_OK;
110 }
111
112 HRESULT WINAPI IDirectMusicScriptImpl_GetVariableNumber (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, LONG* plValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
113 {
114         ICOM_THIS(IDirectMusicScriptImpl,iface);
115
116         FIXME("(%p, %p, %p, %p): stub\n", This, pwszVariableName, plValue, pErrorInfo);
117
118         return S_OK;
119 }
120
121 HRESULT WINAPI IDirectMusicScriptImpl_SetVariableObject (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, IUnknown* punkValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
122 {
123         ICOM_THIS(IDirectMusicScriptImpl,iface);
124
125         FIXME("(%p, %p, %p, %p): stub\n", This, pwszVariableName, punkValue, pErrorInfo);
126
127         return S_OK;
128 }
129
130 HRESULT WINAPI IDirectMusicScriptImpl_GetVariableObject (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, REFIID riid, LPVOID* ppv, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
131 {
132         ICOM_THIS(IDirectMusicScriptImpl,iface);
133
134         FIXME("(%p, %p, %s, %p, %p): stub\n", This, pwszVariableName, debugstr_guid(riid), ppv, pErrorInfo);
135
136         return S_OK;
137 }
138
139 HRESULT WINAPI IDirectMusicScriptImpl_EnumRoutine (LPDIRECTMUSICSCRIPT iface, DWORD dwIndex, WCHAR* pwszName)
140 {
141         ICOM_THIS(IDirectMusicScriptImpl,iface);
142
143         FIXME("(%p, %ld, %p): stub\n", This, dwIndex, pwszName);
144
145         return S_OK;
146 }
147
148 HRESULT WINAPI IDirectMusicScriptImpl_EnumVariable (LPDIRECTMUSICSCRIPT iface, DWORD dwIndex, WCHAR* pwszName)
149 {
150         ICOM_THIS(IDirectMusicScriptImpl,iface);
151
152         FIXME("(%p, %ld, %p): stub\n", This, dwIndex, pwszName);
153
154         return S_OK;
155 }
156
157 ICOM_VTABLE(IDirectMusicScript) DirectMusicScript_Vtbl =
158 {
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
173 };
174
175 /* for ClassFactory */
176 HRESULT WINAPI DMUSIC_CreateDirectMusicScript (LPCGUID lpcGUID, LPDIRECTMUSICSCRIPT* ppDMScript, LPUNKNOWN pUnkOuter)
177 {
178         IDirectMusicScriptImpl* dmscript;
179         
180         TRACE("(%p,%p,%p)\n",lpcGUID, ppDMScript, pUnkOuter);
181         if (IsEqualIID (lpcGUID, &IID_IDirectMusicScript)) {
182                 dmscript = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicScriptImpl));
183                 if (NULL == dmscript) {
184                         *ppDMScript = (LPDIRECTMUSICSCRIPT) NULL;
185                         return E_OUTOFMEMORY;
186                 }
187                 dmscript->lpVtbl = &DirectMusicScript_Vtbl;
188                 dmscript->ref = 1;
189                 *ppDMScript = (LPDIRECTMUSICSCRIPT) dmscript;
190                 return S_OK;
191         }
192         
193         WARN("No interface found\n");
194         return E_NOINTERFACE;   
195 }
196
197 /*****************************************************************************
198  * IDirectMusicScriptObject implementation
199  */
200 /* IDirectMusicScriptObject IUnknown part: */
201 HRESULT WINAPI IDirectMusicScriptObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj)
202 {
203         ICOM_THIS(IDirectMusicScriptObject,iface);
204
205         if (IsEqualIID (riid, &IID_IUnknown) 
206                 || IsEqualIID(riid, &IID_IDirectMusicObject)) {
207                 IDirectMusicScriptObject_AddRef(iface);
208                 *ppobj = This;
209                 return S_OK;
210         } else if (IsEqualIID (riid, &IID_IPersistStream)) {
211                 IPersistStream_AddRef ((LPPERSISTSTREAM)This->pStream);
212                 *ppobj = (LPPERSISTSTREAM)This->pStream;
213                 return S_OK;
214         } else if (IsEqualIID (riid, &IID_IDirectMusicScript)) {
215                 IDirectMusicScript_AddRef ((LPDIRECTMUSICSCRIPT)This->pScript);
216                 *ppobj = (LPDIRECTMUSICSCRIPT)This->pScript;
217                 return S_OK;
218         }
219         
220         WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
221         return E_NOINTERFACE;
222 }
223
224 ULONG WINAPI IDirectMusicScriptObject_AddRef (LPDIRECTMUSICOBJECT iface)
225 {
226         ICOM_THIS(IDirectMusicScriptObject,iface);
227         TRACE("(%p) : AddRef from %ld\n", This, This->ref);
228         return ++(This->ref);
229 }
230
231 ULONG WINAPI IDirectMusicScriptObject_Release (LPDIRECTMUSICOBJECT iface)
232 {
233         ICOM_THIS(IDirectMusicScriptObject,iface);
234         ULONG ref = --This->ref;
235         TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
236         if (ref == 0) {
237                 HeapFree(GetProcessHeap(), 0, This);
238         }
239         return ref;
240 }
241
242 /* IDirectMusicScriptObject IDirectMusicObject part: */
243 HRESULT WINAPI IDirectMusicScriptObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
244 {
245         ICOM_THIS(IDirectMusicScriptObject,iface);
246
247         TRACE("(%p, %p)\n", This, pDesc);
248         pDesc = This->pDesc;
249         
250         return S_OK;
251 }
252
253 HRESULT WINAPI IDirectMusicScriptObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
254 {
255         ICOM_THIS(IDirectMusicScriptObject,iface);
256
257         TRACE("(%p, %p)\n", This, pDesc);
258         This->pDesc = pDesc;
259
260         return S_OK;
261 }
262
263 HRESULT WINAPI IDirectMusicScriptObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc)
264 {
265         ICOM_THIS(IDirectMusicScriptObject,iface);
266
267         FIXME("(%p, %p, %p): stub\n", This, pStream, pDesc);
268
269         return S_OK;
270 }
271
272 ICOM_VTABLE(IDirectMusicObject) DirectMusicScriptObject_Vtbl =
273 {
274     ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
275         IDirectMusicScriptObject_QueryInterface,
276         IDirectMusicScriptObject_AddRef,
277         IDirectMusicScriptObject_Release,
278         IDirectMusicScriptObject_GetDescriptor,
279         IDirectMusicScriptObject_SetDescriptor,
280         IDirectMusicScriptObject_ParseDescriptor
281 };
282
283 /* for ClassFactory */
284 HRESULT WINAPI DMUSIC_CreateDirectMusicScriptObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter)
285 {
286         IDirectMusicScriptObject *obj;
287         
288         TRACE("(%p,%p,%p)\n", lpcGUID, ppObject, pUnkOuter);
289         if (IsEqualIID (lpcGUID, &IID_IDirectMusicObject)) {
290                 obj = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicScriptObject));
291                 if (NULL == obj) {
292                         *ppObject = (LPDIRECTMUSICOBJECT) NULL;
293                         return E_OUTOFMEMORY;
294                 }
295                 obj->lpVtbl = &DirectMusicScriptObject_Vtbl;
296                 obj->ref = 1;
297                 /* prepare IPersistStream */
298                 obj->pStream = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(IDirectMusicScriptObjectStream));
299                 obj->pStream->lpVtbl = &DirectMusicScriptObjectStream_Vtbl;
300                 obj->pStream->ref = 1;  
301                 obj->pStream->pParentObject = obj;
302                 /* prepare IDirectMusicScript */
303                 DMUSIC_CreateDirectMusicScript (&IID_IDirectMusicScript, (LPDIRECTMUSICSCRIPT*)&obj->pScript, NULL);
304                 obj->pScript->pObject = obj;
305                 *ppObject = (LPDIRECTMUSICOBJECT) obj;
306                 return S_OK;
307         }
308         WARN("No interface found\n");
309         
310         return E_NOINTERFACE;
311 }
312         
313 /*****************************************************************************
314  * IDirectMusicScriptObjectStream implementation
315  */
316 /* IDirectMusicScriptObjectStream IUnknown part: */
317 HRESULT WINAPI IDirectMusicScriptObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj)
318 {
319         ICOM_THIS(IDirectMusicScriptObjectStream,iface);
320
321         if (IsEqualIID (riid, &IID_IUnknown)
322                 || IsEqualIID (riid, &IID_IPersistStream)) {
323                 IDirectMusicScriptObjectStream_AddRef(iface);
324                 *ppobj = This;
325                 return S_OK;
326         }
327         
328         WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
329         return E_NOINTERFACE;
330 }
331
332 ULONG WINAPI IDirectMusicScriptObjectStream_AddRef (LPPERSISTSTREAM iface)
333 {
334         ICOM_THIS(IDirectMusicScriptObjectStream,iface);
335         TRACE("(%p) : AddRef from %ld\n", This, This->ref);
336         return ++(This->ref);
337 }
338
339 ULONG WINAPI IDirectMusicScriptObjectStream_Release (LPPERSISTSTREAM iface)
340 {
341         ICOM_THIS(IDirectMusicScriptObjectStream,iface);
342         ULONG ref = --This->ref;
343         TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
344         if (ref == 0) {
345                 HeapFree(GetProcessHeap(), 0, This);
346         }
347         return ref;
348 }
349
350 /* IDirectMusicScriptObjectStream IPersist part: */
351 HRESULT WINAPI IDirectMusicScriptObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID)
352 {
353         *pClassID = CLSID_DirectMusicScript;
354         return S_OK;
355 }
356
357 /* IDirectMusicScriptObjectStream IPersistStream part: */
358 HRESULT WINAPI IDirectMusicScriptObjectStream_IsDirty (LPPERSISTSTREAM iface)
359 {
360         return E_NOTIMPL;
361 }
362
363 HRESULT WINAPI IDirectMusicScriptObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm)
364 {
365         FIXME(": Loading not implemented yet\n");
366         return S_OK;
367 }
368
369 HRESULT WINAPI IDirectMusicScriptObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty)
370 {
371         return E_NOTIMPL;
372 }
373
374 HRESULT WINAPI IDirectMusicScriptObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize)
375 {
376         return E_NOTIMPL;
377 }
378
379 ICOM_VTABLE(IPersistStream) DirectMusicScriptObjectStream_Vtbl =
380 {
381     ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
382         IDirectMusicScriptObjectStream_QueryInterface,
383         IDirectMusicScriptObjectStream_AddRef,
384         IDirectMusicScriptObjectStream_Release,
385         IDirectMusicScriptObjectStream_GetClassID,
386         IDirectMusicScriptObjectStream_IsDirty,
387         IDirectMusicScriptObjectStream_Load,
388         IDirectMusicScriptObjectStream_Save,
389         IDirectMusicScriptObjectStream_GetSizeMax
390 };