jscript: Added JScript stub implementation.
[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
29     LONG ref;
30 } JScript;
31
32 #define ACTSCRIPT(x)  ((IActiveScript*)      &(x)->lpIActiveScriptVtbl)
33
34 #define ACTSCRIPT_THIS(iface) DEFINE_THIS(JScript, IActiveScript, iface)
35
36 static HRESULT WINAPI JScript_QueryInterface(IActiveScript *iface, REFIID riid, void **ppv)
37 {
38     JScript *This = ACTSCRIPT_THIS(iface);
39
40     *ppv = NULL;
41
42     if(IsEqualGUID(riid, &IID_IUnknown)) {
43         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
44         *ppv = ACTSCRIPT(This);
45     }else if(IsEqualGUID(riid, &IID_IActiveScript)) {
46         TRACE("(%p)->(IID_IActiveScript %p)\n", This, ppv);
47         *ppv = ACTSCRIPT(This);
48     }
49
50     if(*ppv) {
51         IUnknown_AddRef((IUnknown*)*ppv);
52         return S_OK;
53     }
54
55     FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
56     return E_NOINTERFACE;
57 }
58
59 static ULONG WINAPI JScript_AddRef(IActiveScript *iface)
60 {
61     JScript *This = ACTSCRIPT_THIS(iface);
62     LONG ref = InterlockedIncrement(&This->ref);
63
64     TRACE("(%p) ref=%d\n", This, ref);
65
66     return ref;
67 }
68
69 static ULONG WINAPI JScript_Release(IActiveScript *iface)
70 {
71     JScript *This = ACTSCRIPT_THIS(iface);
72     LONG ref = InterlockedDecrement(&This->ref);
73
74     TRACE("(%p) ref=%d\n", iface, ref);
75
76     if(!ref)
77         heap_free(This);
78
79     return ref;
80 }
81
82 static HRESULT WINAPI JScript_SetScriptSite(IActiveScript *iface,
83                                             IActiveScriptSite *pass)
84 {
85     JScript *This = ACTSCRIPT_THIS(iface);
86     FIXME("(%p)->(%p)\n", This, pass);
87     return E_NOTIMPL;
88 }
89
90 static HRESULT WINAPI JScript_GetScriptSite(IActiveScript *iface, REFIID riid,
91                                             void **ppvObject)
92 {
93     JScript *This = ACTSCRIPT_THIS(iface);
94     FIXME("(%p)->()\n", This);
95     return E_NOTIMPL;
96 }
97
98 static HRESULT WINAPI JScript_SetScriptState(IActiveScript *iface, SCRIPTSTATE ss)
99 {
100     JScript *This = ACTSCRIPT_THIS(iface);
101     FIXME("(%p)->(%d)\n", This, ss);
102     return E_NOTIMPL;
103 }
104
105 static HRESULT WINAPI JScript_GetScriptState(IActiveScript *iface, SCRIPTSTATE *pssState)
106 {
107     JScript *This = ACTSCRIPT_THIS(iface);
108     FIXME("(%p)->(%p)\n", This, pssState);
109     return E_NOTIMPL;
110 }
111
112 static HRESULT WINAPI JScript_Close(IActiveScript *iface)
113 {
114     JScript *This = ACTSCRIPT_THIS(iface);
115     FIXME("(%p)->()\n", This);
116     return E_NOTIMPL;
117 }
118
119 static HRESULT WINAPI JScript_AddNamedItem(IActiveScript *iface,
120                                            LPCOLESTR pstrName, DWORD dwFlags)
121 {
122     JScript *This = ACTSCRIPT_THIS(iface);
123     FIXME("(%p)->(%s %x)\n", This, debugstr_w(pstrName), dwFlags);
124     return E_NOTIMPL;
125 }
126
127 static HRESULT WINAPI JScript_AddTypeLib(IActiveScript *iface, REFGUID rguidTypeLib,
128                                          DWORD dwMajor, DWORD dwMinor, DWORD dwFlags)
129 {
130     JScript *This = ACTSCRIPT_THIS(iface);
131     FIXME("(%p)->()\n", This);
132     return E_NOTIMPL;
133 }
134
135 static HRESULT WINAPI JScript_GetScriptDispatch(IActiveScript *iface, LPCOLESTR pstrItemName,
136                                                 IDispatch **ppdisp)
137 {
138     JScript *This = ACTSCRIPT_THIS(iface);
139     FIXME("(%p)->()\n", This);
140     return E_NOTIMPL;
141 }
142
143 static HRESULT WINAPI JScript_GetCurrentScriptThreadID(IActiveScript *iface,
144                                                        SCRIPTTHREADID *pstridThread)
145 {
146     JScript *This = ACTSCRIPT_THIS(iface);
147     FIXME("(%p)->()\n", This);
148     return E_NOTIMPL;
149 }
150
151 static HRESULT WINAPI JScript_GetScriptThreadID(IActiveScript *iface,
152                                                 DWORD dwWin32ThreadId, SCRIPTTHREADID *pstidThread)
153 {
154     JScript *This = ACTSCRIPT_THIS(iface);
155     FIXME("(%p)->()\n", This);
156     return E_NOTIMPL;
157 }
158
159 static HRESULT WINAPI JScript_GetScriptThreadState(IActiveScript *iface,
160         SCRIPTTHREADID stidThread, SCRIPTTHREADSTATE *pstsState)
161 {
162     JScript *This = ACTSCRIPT_THIS(iface);
163     FIXME("(%p)->()\n", This);
164     return E_NOTIMPL;
165 }
166
167 static HRESULT WINAPI JScript_InterruptScriptThread(IActiveScript *iface,
168         SCRIPTTHREADID stidThread, const EXCEPINFO *pexcepinfo, DWORD dwFlags)
169 {
170     JScript *This = ACTSCRIPT_THIS(iface);
171     FIXME("(%p)->()\n", This);
172     return E_NOTIMPL;
173 }
174
175 static HRESULT WINAPI JScript_Clone(IActiveScript *iface, IActiveScript **ppscript)
176 {
177     JScript *This = ACTSCRIPT_THIS(iface);
178     FIXME("(%p)->()\n", This);
179     return E_NOTIMPL;
180 }
181
182 #undef ACTSCRIPT_THIS
183
184 static const IActiveScriptVtbl JScriptVtbl = {
185     JScript_QueryInterface,
186     JScript_AddRef,
187     JScript_Release,
188     JScript_SetScriptSite,
189     JScript_GetScriptSite,
190     JScript_SetScriptState,
191     JScript_GetScriptState,
192     JScript_Close,
193     JScript_AddNamedItem,
194     JScript_AddTypeLib,
195     JScript_GetScriptDispatch,
196     JScript_GetCurrentScriptThreadID,
197     JScript_GetScriptThreadID,
198     JScript_GetScriptThreadState,
199     JScript_InterruptScriptThread,
200     JScript_Clone
201 };
202
203 HRESULT WINAPI JScriptFactory_CreateInstance(IClassFactory *iface, IUnknown *pUnkOuter,
204                                              REFIID riid, void **ppv)
205 {
206     JScript *ret;
207     HRESULT hres;
208
209     TRACE("(%p %s %p)\n", pUnkOuter, debugstr_guid(riid), ppv);
210
211     ret = heap_alloc(sizeof(*ret));
212
213     ret->lpIActiveScriptVtbl = &JScriptVtbl;
214     ret->ref = 1;
215
216     hres = IActiveScript_QueryInterface(ACTSCRIPT(ret), riid, ppv);
217     IActiveScript_Release(ACTSCRIPT(ret));
218     return hres;
219 }