wined3d: There is no need for the !Usage checks at the start of the resource type...
[wine] / dlls / jscript / jscript.c
1 /*
2  * Copyright 2008 Jacek Caban for CodeWeavers
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18
19 #include "jscript.h"
20 #include "activscp.h"
21
22 #include "wine/debug.h"
23
24 WINE_DEFAULT_DEBUG_CHANNEL(jscript);
25
26 typedef struct {
27     const IActiveScriptVtbl          *lpIActiveScriptVtbl;
28     const IActiveScriptParseVtbl     *lpIActiveScriptParseVtbl;
29     const IActiveScriptPropertyVtbl  *lpIActiveScriptPropertyVtbl;
30
31     LONG ref;
32 } JScript;
33
34 #define ACTSCRIPT(x)  ((IActiveScript*)          &(x)->lpIActiveScriptVtbl)
35 #define ASPARSE(x)    ((IActiveScriptParse*)     &(x)->lpIActiveScriptParseVtbl)
36 #define ACTSCPPROP(x) ((IActiveScriptProperty*)  &(x)->lpIActiveScriptPropertyVtbl)
37
38 #define ACTSCRIPT_THIS(iface) DEFINE_THIS(JScript, IActiveScript, iface)
39
40 static HRESULT WINAPI JScript_QueryInterface(IActiveScript *iface, REFIID riid, void **ppv)
41 {
42     JScript *This = ACTSCRIPT_THIS(iface);
43
44     *ppv = NULL;
45
46     if(IsEqualGUID(riid, &IID_IUnknown)) {
47         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
48         *ppv = ACTSCRIPT(This);
49     }else if(IsEqualGUID(riid, &IID_IActiveScript)) {
50         TRACE("(%p)->(IID_IActiveScript %p)\n", This, ppv);
51         *ppv = ACTSCRIPT(This);
52     }else if(IsEqualGUID(riid, &IID_IActiveScriptParse)) {
53         TRACE("(%p)->(IID_IActiveScriptParse %p)\n", This, ppv);
54         *ppv = ASPARSE(This);
55     }else if(IsEqualGUID(riid, &IID_IActiveScriptProperty)) {
56         TRACE("(%p)->(IID_IActiveScriptProperty %p)\n", This, ppv);
57         *ppv = ACTSCPPROP(This);
58     }
59
60     if(*ppv) {
61         IUnknown_AddRef((IUnknown*)*ppv);
62         return S_OK;
63     }
64
65     FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
66     return E_NOINTERFACE;
67 }
68
69 static ULONG WINAPI JScript_AddRef(IActiveScript *iface)
70 {
71     JScript *This = ACTSCRIPT_THIS(iface);
72     LONG ref = InterlockedIncrement(&This->ref);
73
74     TRACE("(%p) ref=%d\n", This, ref);
75
76     return ref;
77 }
78
79 static ULONG WINAPI JScript_Release(IActiveScript *iface)
80 {
81     JScript *This = ACTSCRIPT_THIS(iface);
82     LONG ref = InterlockedDecrement(&This->ref);
83
84     TRACE("(%p) ref=%d\n", iface, ref);
85
86     if(!ref)
87         heap_free(This);
88
89     return ref;
90 }
91
92 static HRESULT WINAPI JScript_SetScriptSite(IActiveScript *iface,
93                                             IActiveScriptSite *pass)
94 {
95     JScript *This = ACTSCRIPT_THIS(iface);
96     FIXME("(%p)->(%p)\n", This, pass);
97     return E_NOTIMPL;
98 }
99
100 static HRESULT WINAPI JScript_GetScriptSite(IActiveScript *iface, REFIID riid,
101                                             void **ppvObject)
102 {
103     JScript *This = ACTSCRIPT_THIS(iface);
104     FIXME("(%p)->()\n", This);
105     return E_NOTIMPL;
106 }
107
108 static HRESULT WINAPI JScript_SetScriptState(IActiveScript *iface, SCRIPTSTATE ss)
109 {
110     JScript *This = ACTSCRIPT_THIS(iface);
111     FIXME("(%p)->(%d)\n", This, ss);
112     return E_NOTIMPL;
113 }
114
115 static HRESULT WINAPI JScript_GetScriptState(IActiveScript *iface, SCRIPTSTATE *pssState)
116 {
117     JScript *This = ACTSCRIPT_THIS(iface);
118     FIXME("(%p)->(%p)\n", This, pssState);
119     return E_NOTIMPL;
120 }
121
122 static HRESULT WINAPI JScript_Close(IActiveScript *iface)
123 {
124     JScript *This = ACTSCRIPT_THIS(iface);
125     FIXME("(%p)->()\n", This);
126     return E_NOTIMPL;
127 }
128
129 static HRESULT WINAPI JScript_AddNamedItem(IActiveScript *iface,
130                                            LPCOLESTR pstrName, DWORD dwFlags)
131 {
132     JScript *This = ACTSCRIPT_THIS(iface);
133     FIXME("(%p)->(%s %x)\n", This, debugstr_w(pstrName), dwFlags);
134     return E_NOTIMPL;
135 }
136
137 static HRESULT WINAPI JScript_AddTypeLib(IActiveScript *iface, REFGUID rguidTypeLib,
138                                          DWORD dwMajor, DWORD dwMinor, DWORD dwFlags)
139 {
140     JScript *This = ACTSCRIPT_THIS(iface);
141     FIXME("(%p)->()\n", This);
142     return E_NOTIMPL;
143 }
144
145 static HRESULT WINAPI JScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR pstrItemName,
146                                                 IDispatch **ppdisp)
147 {
148     JScript *This = ACTSCRIPT_THIS(iface);
149     FIXME("(%p)->()\n", This);
150     return E_NOTIMPL;
151 }
152
153 static HRESULT WINAPI JScript_GetCurrentScriptThreadID(IActiveScript *iface,
154                                                        SCRIPTTHREADID *pstridThread)
155 {
156     JScript *This = ACTSCRIPT_THIS(iface);
157     FIXME("(%p)->()\n", This);
158     return E_NOTIMPL;
159 }
160
161 static HRESULT WINAPI JScript_GetScriptThreadID(IActiveScript *iface,
162                                                 DWORD dwWin32ThreadId, SCRIPTTHREADID *pstidThread)
163 {
164     JScript *This = ACTSCRIPT_THIS(iface);
165     FIXME("(%p)->()\n", This);
166     return E_NOTIMPL;
167 }
168
169 static HRESULT WINAPI JScript_GetScriptThreadState(IActiveScript *iface,
170         SCRIPTTHREADID stidThread, SCRIPTTHREADSTATE *pstsState)
171 {
172     JScript *This = ACTSCRIPT_THIS(iface);
173     FIXME("(%p)->()\n", This);
174     return E_NOTIMPL;
175 }
176
177 static HRESULT WINAPI JScript_InterruptScriptThread(IActiveScript *iface,
178         SCRIPTTHREADID stidThread, const EXCEPINFO *pexcepinfo, DWORD dwFlags)
179 {
180     JScript *This = ACTSCRIPT_THIS(iface);
181     FIXME("(%p)->()\n", This);
182     return E_NOTIMPL;
183 }
184
185 static HRESULT WINAPI JScript_Clone(IActiveScript *iface, IActiveScript **ppscript)
186 {
187     JScript *This = ACTSCRIPT_THIS(iface);
188     FIXME("(%p)->()\n", This);
189     return E_NOTIMPL;
190 }
191
192 #undef ACTSCRIPT_THIS
193
194 static const IActiveScriptVtbl JScriptVtbl = {
195     JScript_QueryInterface,
196     JScript_AddRef,
197     JScript_Release,
198     JScript_SetScriptSite,
199     JScript_GetScriptSite,
200     JScript_SetScriptState,
201     JScript_GetScriptState,
202     JScript_Close,
203     JScript_AddNamedItem,
204     JScript_AddTypeLib,
205     JScript_GetScriptDispatch,
206     JScript_GetCurrentScriptThreadID,
207     JScript_GetScriptThreadID,
208     JScript_GetScriptThreadState,
209     JScript_InterruptScriptThread,
210     JScript_Clone
211 };
212
213 #define ASPARSE_THIS(iface) DEFINE_THIS(JScript, IActiveScriptParse, iface)
214
215 static HRESULT WINAPI JScriptParse_QueryInterface(IActiveScriptParse *iface, REFIID riid, void **ppv)
216 {
217     JScript *This = ASPARSE_THIS(iface);
218     return IActiveScript_QueryInterface(ACTSCRIPT(This), riid, ppv);
219 }
220
221 static ULONG WINAPI JScriptParse_AddRef(IActiveScriptParse *iface)
222 {
223     JScript *This = ASPARSE_THIS(iface);
224     return IActiveScript_AddRef(ACTSCRIPT(This));
225 }
226
227 static ULONG WINAPI JScriptParse_Release(IActiveScriptParse *iface)
228 {
229     JScript *This = ASPARSE_THIS(iface);
230     return IActiveScript_Release(ACTSCRIPT(This));
231 }
232
233 static HRESULT WINAPI JScriptParse_InitNew(IActiveScriptParse *iface)
234 {
235     JScript *This = ASPARSE_THIS(iface);
236     FIXME("(%p)\n", This);
237     return E_NOTIMPL;
238 }
239
240 static HRESULT WINAPI JScriptParse_AddScriptlet(IActiveScriptParse *iface,
241         LPCOLESTR pstrDefaultName, LPCOLESTR pstrCode, LPCOLESTR pstrItemName,
242         LPCOLESTR pstrSubItemName, LPCOLESTR pstrEventName, LPCOLESTR pstrDelimiter,
243         DWORD dwSourceContextCookie, ULONG ulStartingLineNumber, DWORD dwFlags,
244         BSTR *pbstrName, EXCEPINFO *pexcepinfo)
245 {
246     JScript *This = ASPARSE_THIS(iface);
247     FIXME("(%p)->(%s %s %s %s %s %s %x %u %x %p %p)\n", This, debugstr_w(pstrDefaultName),
248           debugstr_w(pstrCode), debugstr_w(pstrItemName), debugstr_w(pstrSubItemName),
249           debugstr_w(pstrEventName), debugstr_w(pstrDelimiter), dwSourceContextCookie,
250           ulStartingLineNumber, dwFlags, pbstrName, pexcepinfo);
251     return E_NOTIMPL;
252 }
253
254 static HRESULT WINAPI JScriptParse_ParseScriptText(IActiveScriptParse *iface,
255         LPCOLESTR pstrCode, LPCOLESTR pstrItemName, IUnknown *punkContext,
256         LPCOLESTR pstrDelimiter, DWORD dwSourceContextCookie, ULONG ulStartingLine,
257         DWORD dwFlags, VARIANT *pvarResult, EXCEPINFO *pexcepinfo)
258 {
259     JScript *This = ASPARSE_THIS(iface);
260     FIXME("(%p)->(%s %s %p %s %x %u %x %p %p)\n", This, debugstr_w(pstrCode),
261           debugstr_w(pstrItemName), punkContext, debugstr_w(pstrDelimiter),
262           dwSourceContextCookie, ulStartingLine, dwFlags, pvarResult, pexcepinfo);
263     return E_NOTIMPL;
264 }
265
266 #undef ASPARSE_THIS
267
268 static const IActiveScriptParseVtbl JScriptParseVtbl = {
269     JScriptParse_QueryInterface,
270     JScriptParse_AddRef,
271     JScriptParse_Release,
272     JScriptParse_InitNew,
273     JScriptParse_AddScriptlet,
274     JScriptParse_ParseScriptText
275 };
276
277 #define ACTSCPPROP_THIS(iface) DEFINE_THIS(JScript, IActiveScriptProperty, iface)
278
279 static HRESULT WINAPI JScriptProperty_QueryInterface(IActiveScriptProperty *iface, REFIID riid, void **ppv)
280 {
281     JScript *This = ACTSCPPROP_THIS(iface);
282     return IActiveScript_QueryInterface(ACTSCRIPT(This), riid, ppv);
283 }
284
285 static ULONG WINAPI JScriptProperty_AddRef(IActiveScriptProperty *iface)
286 {
287     JScript *This = ACTSCPPROP_THIS(iface);
288     return IActiveScript_AddRef(ACTSCRIPT(This));
289 }
290
291 static ULONG WINAPI JScriptProperty_Release(IActiveScriptProperty *iface)
292 {
293     JScript *This = ACTSCPPROP_THIS(iface);
294     return IActiveScript_Release(ACTSCRIPT(This));
295 }
296
297 static HRESULT WINAPI JScriptProperty_GetProperty(IActiveScriptProperty *iface, DWORD dwProperty,
298         VARIANT *pvarIndex, VARIANT *pvarValue)
299 {
300     JScript *This = ACTSCPPROP_THIS(iface);
301     FIXME("(%p)->(%x %p %p)\n", This, dwProperty, pvarIndex, pvarValue);
302     return E_NOTIMPL;
303 }
304
305 static HRESULT WINAPI JScriptProperty_SetProperty(IActiveScriptProperty *iface, DWORD dwProperty,
306         VARIANT *pvarIndex, VARIANT *pvarValue)
307 {
308     JScript *This = ACTSCPPROP_THIS(iface);
309     FIXME("(%p)->(%x %p %p)\n", This, dwProperty, pvarIndex, pvarValue);
310     return E_NOTIMPL;
311 }
312
313 #undef ACTSCPPROP_THIS
314
315 static const IActiveScriptPropertyVtbl JScriptPropertyVtbl = {
316     JScriptProperty_QueryInterface,
317     JScriptProperty_AddRef,
318     JScriptProperty_Release,
319     JScriptProperty_GetProperty,
320     JScriptProperty_SetProperty
321 };
322
323 HRESULT WINAPI JScriptFactory_CreateInstance(IClassFactory *iface, IUnknown *pUnkOuter,
324                                              REFIID riid, void **ppv)
325 {
326     JScript *ret;
327     HRESULT hres;
328
329     TRACE("(%p %s %p)\n", pUnkOuter, debugstr_guid(riid), ppv);
330
331     ret = heap_alloc(sizeof(*ret));
332
333     ret->lpIActiveScriptVtbl          = &JScriptVtbl;
334     ret->lpIActiveScriptParseVtbl     = &JScriptParseVtbl;
335     ret->lpIActiveScriptPropertyVtbl  = &JScriptPropertyVtbl;
336     ret->ref = 1;
337
338     hres = IActiveScript_QueryInterface(ACTSCRIPT(ret), riid, ppv);
339     IActiveScript_Release(ACTSCRIPT(ret));
340     return hres;
341 }