ReactOS 0.4.17-dev-357-ga8f14ff
main.c
Go to the documentation of this file.
1/*
2 * Copyright 2010 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 <stdarg.h>
20
21#define COBJMACROS
22#ifdef __REACTOS__
23#define CONST_VTABLE
24#endif
25
26#include <windef.h>
27#include <winbase.h>
28#include <winreg.h>
29#include <ole2.h>
30#include <shellapi.h>
31#include <activscp.h>
32#include <initguid.h>
33
34#include "wscript.h"
35#include "resource.h"
36
37#include <wine/debug.h>
38
39#ifdef _WIN64
40
41#define IActiveScriptParse_Release IActiveScriptParse64_Release
42#define IActiveScriptParse_InitNew IActiveScriptParse64_InitNew
43#define IActiveScriptParse_ParseScriptText IActiveScriptParse64_ParseScriptText
44
45#else
46
47#define IActiveScriptParse_Release IActiveScriptParse32_Release
48#define IActiveScriptParse_InitNew IActiveScriptParse32_InitNew
49#define IActiveScriptParse_ParseScriptText IActiveScriptParse32_ParseScriptText
50
51#endif
52
55
58
59static BOOL nologo;
60
61static HRESULT query_interface(REFIID,void**);
62
63#ifdef __REACTOS__
64#include <commctrl.h>
65
66PCWSTR g_force_engine = NULL;
67
68typedef struct {
69 UINT itemsize, count;
70 void *mem;
71} SIMPLEVECTOR;
72
73static void SVect_Free(SIMPLEVECTOR *pV)
74{
75 if (pV->mem)
76 LocalFree(pV->mem);
77 pV->mem = NULL;
78}
79
80static void* SVect_Add(SIMPLEVECTOR *pV)
81{
82 void *p = NULL;
83 if (pV->mem)
84 {
85 p = LocalReAlloc(pV->mem, pV->itemsize * (pV->count + 1), LMEM_FIXED | LMEM_MOVEABLE);
86 if (p)
87 {
88 pV->mem = p;
89 p = (char*)p + (pV->count * pV->itemsize);
90 pV->count++;
91 }
92 }
93 else
94 {
95 p = pV->mem = LocalAlloc(LMEM_FIXED, pV->itemsize);
96 if (p)
97 {
98 pV->count = 1;
99 }
100 }
101 return p;
102}
103
104#define SVect_Delete(pV, pItem) ( (pV), (pItem) ) /* Should not be required for global items */
105
106static void* SVect_Get(SIMPLEVECTOR *pV, UINT i)
107{
108 return pV->mem && i < pV->count ? (char*)pV->mem + (i * pV->itemsize) : NULL;
109}
110
111typedef struct {
112 BSTR name;
113 IUnknown *punk;
114} GLOBAL_ITEM;
115
116SIMPLEVECTOR g_global_items = { sizeof(GLOBAL_ITEM) };
117
118static void free_globals(void)
119{
120 UINT i;
121 for (i = 0;; ++i)
122 {
123 GLOBAL_ITEM *p = (GLOBAL_ITEM*)SVect_Get(&g_global_items, i);
124 if (!p)
125 break;
126 IUnknown_Release(p->punk);
127 SysFreeString(p->name);
128 }
129 SVect_Free(&g_global_items);
130}
131
132static HRESULT add_globalitem(IActiveScript *script, BSTR name, IUnknown *punk, DWORD siflags)
133{
134 GLOBAL_ITEM *item;
135 HRESULT hr;
136
138 if (!name)
139 return E_OUTOFMEMORY;
140
141 item = SVect_Add(&g_global_items);
142 if (item)
143 {
144 item->name = name;
145 item->punk = punk;
146 hr = IActiveScript_AddNamedItem(script, name, siflags);
147 if (SUCCEEDED(hr))
148 {
149 IUnknown_AddRef(punk);
150 return hr;
151 }
152 SVect_Delete(&g_global_items, item);
153 }
155 return E_OUTOFMEMORY;
156}
157
158static HRESULT add_globalitem_from_clsid(IActiveScript *script, BSTR name, REFCLSID clsid, DWORD siflags)
159{
160 IUnknown *punk;
161 HRESULT hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void**)&punk);
162 if (SUCCEEDED(hr))
163 {
164 hr = add_globalitem(script, name, punk, siflags);
165 IUnknown_Release(punk);
166 }
167 return hr;
168}
169
170static HRESULT get_globalitem_info(LPCOLESTR Name, DWORD Mask, IUnknown **ppunk, ITypeInfo **ppti, BOOL *pHandled)
171{
173 UINT i;
174 for (i = 0;; ++i)
175 {
176 GLOBAL_ITEM *p = (GLOBAL_ITEM*)SVect_Get(&g_global_items, i);
177 if (!p)
178 break;
179 if (!lstrcmpiW(Name, p->name))
180 {
181 if (ppti)
182 *ppti = NULL;
183 if (Mask & SCRIPTINFO_IUNKNOWN)
184 {
185 *ppunk = p->punk;
186 if (p->punk)
187 {
188 IUnknown_AddRef(p->punk);
189 *pHandled = TRUE;
190 }
191 return S_OK;
192 }
193 break;
194 }
195 }
196 return hr;
197}
198#endif
199
201 REFIID riid, void **ppv)
202{
203 return query_interface(riid, ppv);
204}
205
207{
208 return 2;
209}
210
212{
213 return 1;
214}
215
217{
218 WINE_TRACE("()\n");
219
220 *plcid = GetUserDefaultLCID();
221 return S_OK;
222}
223
225 LPCOLESTR pstrName, DWORD dwReturnMask, IUnknown **ppunkItem, ITypeInfo **ppti)
226{
227 WINE_TRACE("(%s %lx %p %p)\n", wine_dbgstr_w(pstrName), dwReturnMask, ppunkItem, ppti);
228
229#ifdef __REACTOS__
230 {
231 BOOL handled = FALSE;
232 HRESULT hr = get_globalitem_info(pstrName, dwReturnMask, ppunkItem, ppti, &handled);
233 if (handled)
234 return hr;
235 }
236#endif
237
238 if(lstrcmpW(pstrName, L"WSH") && lstrcmpW(pstrName, L"WScript"))
239 return E_FAIL;
240
241 if(dwReturnMask & SCRIPTINFO_ITYPEINFO) {
242 ITypeInfo_AddRef(host_ti);
243 *ppti = host_ti;
244 }
245
246 if(dwReturnMask & SCRIPTINFO_IUNKNOWN) {
247 IHost_AddRef(&host_obj);
248 *ppunkItem = (IUnknown*)&host_obj;
249 }
250
251 return S_OK;
252}
253
255 BSTR *pbstrVersion)
256{
257 WINE_FIXME("()\n");
258 return E_NOTIMPL;
259}
260
262 const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo)
263{
264 WINE_FIXME("()\n");
265 return E_NOTIMPL;
266}
267
269 SCRIPTSTATE ssScriptState)
270{
271 WINE_TRACE("(%x)\n", ssScriptState);
272 return S_OK;
273}
274
275static void write_to_handle(HANDLE handle, const WCHAR *string)
276{
277 DWORD count, ret, len, lena;
278 char *buf;
279
280 len = lstrlenW(string);
281 ret = WriteConsoleW(handle, string, len, &count, NULL);
282 if(ret) {
283 WriteConsoleW(handle, L"\r\n", 2, &count, NULL);
284 return;
285 }
286
287 lena = WideCharToMultiByte(GetOEMCP(), 0, string, len, NULL, 0, NULL, NULL);
288 buf = malloc(lena);
289 if(!buf)
290 return;
291
292 WideCharToMultiByte(GetOEMCP(), 0, string, len, buf, lena, NULL, NULL);
293 WriteFile(handle, buf, lena, &count, FALSE);
294 free(buf);
295 WriteFile(handle, "\r\n", 2, &count, FALSE);
296}
297
298static void print_error(const WCHAR *string)
299{
300 if(wshInteractive) {
301 MessageBoxW(NULL, string, L"Windows Script Host", MB_OK);
302 return;
303 }
304
306}
307
308static void print_string(const WCHAR *string)
309{
311}
312
313static void output_writeconsole(const WCHAR *str, DWORD wlen)
314{
315 DWORD count;
316
318 DWORD len;
319 char *buf;
320
321 /* On Windows WriteConsoleW() fails if the output is redirected. So fall
322 * back to WriteFile() with OEM code page. */
323 len = WideCharToMultiByte(GetOEMCP(), 0, str, wlen, NULL, 0, NULL, NULL);
324 buf = malloc(len);
325
328 free(buf);
329 }
330}
331
332static void output_formatstring(const WCHAR *fmt, va_list va_args)
333{
334 WCHAR *str;
335 DWORD len;
336
338 fmt, 0, 0, (WCHAR *)&str, 0, &va_args);
339 if(len == 0 && GetLastError() != ERROR_NO_WORK_DONE) {
340 WINE_FIXME("Could not format string: le=%lu, fmt=%s\n", GetLastError(), wine_dbgstr_w(fmt));
341 return;
342 }
343 if(wshInteractive) {
344 MessageBoxW(NULL, str, L"Windows Script Host", MB_OK);
345 }else {
347 }
348 LocalFree(str);
349}
350
351static void WINAPIV print_resource(unsigned int id, ...)
352{
353 WCHAR *fmt = NULL;
354 int len;
355 va_list va_args;
356
357#ifdef __REACTOS__
358 #ifndef CSCRIPT_BUILD
359 #define APPNAME L"WScript"
360 #else
361 #define APPNAME L"CScript"
362 #endif
363 const WCHAR *str = NULL;
364 switch (id)
365 {
366 case IDS_USAGE: str = L"Usage: " APPNAME L" scriptname.extension [option...] [arguments...]\n"; break;
367 case IDS_NO_SCRIPT_FILE: str = L"Input Error: There is no script file specified.\n"; break;
368 case IDS_FILE_NOT_FOUND: str = L"Input Error: Can not find script file ""%1"".\n"; break;
369 case IDS_SCRIPT_LOAD_ERROR: str = APPNAME L" Error: Loading script ""%1"" failed (%2).\n"; break;
370 case IDS_TIMEOUT_EXCEEDED: str = L"Script execution time was exceeded on script ""%1"".\n\nScript execution was terminated.\n"; break;
371 }
372 if(!str)
373 {
374 WINE_FIXME("Missing string %u\n", id);
375 return;
376 }
377 len = lstrlenW(str);
378 fmt = malloc(++len * sizeof(WCHAR));
379 if(!fmt)
380 return;
381 lstrcpyW(fmt, str);
382#else
383 if(!(len = LoadStringW(GetModuleHandleW(NULL), id, (WCHAR *)&fmt, 0))) {
384 WINE_FIXME("LoadString failed with %ld\n", GetLastError());
385 return;
386 }
387
388 len++;
389 fmt = malloc(len * sizeof(WCHAR));
390 if(!fmt)
391 return;
392
394#endif
395
396 va_start(va_args, id);
397 output_formatstring(fmt, va_args);
398 va_end(va_args);
399
400 free(fmt);
401}
402
405
407{
408 DWORD ms = (DWORD)(DWORD_PTR)arg;
411 ExitProcess(1);
412 }
413 return 0;
414}
415
417{
418 if(timeout_thread) {
423 }
424 if(seconds <= 0)
425 return;
428 else
431 (void *)(DWORD_PTR)(seconds * 1000), 0, NULL);
432}
433
434static void print_banner(void)
435{
436#ifdef __REACTOS__
437 const WCHAR *header = L"ReactOS Script Host";
438#else
439 const char * (CDECL *wine_get_version)(void);
440 WCHAR header[64];
441
442 wine_get_version = (void *)GetProcAddress(GetModuleHandleW(L"ntdll.dll"), "wine_get_version");
443 if(wine_get_version)
444 swprintf(header, ARRAY_SIZE(header), L"Wine %S Script Host", wine_get_version());
445 else
446 swprintf(header, ARRAY_SIZE(header), L"Wine Script Host");
447#endif
449 print_string(L"");
450}
451
453 IActiveScriptError *pscripterror)
454{
455 EXCEPINFO excepinfo;
456 ULONG line;
457 LONG character;
459 WCHAR buf[1024];
460
461 WINE_TRACE("()\n");
462
463 memset(&excepinfo, 0, sizeof(excepinfo));
464 hres = IActiveScriptError_GetExceptionInfo(pscripterror, &excepinfo);
465 if(SUCCEEDED(hres)) {
466 line = 0;
467 character = 0;
468 IActiveScriptError_GetSourcePosition(pscripterror, NULL, &line, &character);
469
470 swprintf(buf, ARRAY_SIZE(buf), L"%s(%lu, %ld) %s: %s",
471 scriptFullName, line + 1, character + 1,
472 excepinfo.bstrSource ? excepinfo.bstrSource : L"",
473 excepinfo.bstrDescription ? excepinfo.bstrDescription : L"");
474
476
477 SysFreeString(excepinfo.bstrSource);
478 SysFreeString(excepinfo.bstrDescription);
479 SysFreeString(excepinfo.bstrHelpFile);
480 }
481
482 return S_OK;
483}
484
486{
487 WINE_TRACE("()\n");
488 return S_OK;
489}
490
492{
493 WINE_TRACE("()\n");
494 return S_OK;
495}
496
497static IActiveScriptSiteVtbl ActiveScriptSiteVtbl = {
509};
510
512
514{
515 return query_interface(riid, ppv);
516}
517
519{
520 return 2;
521}
522
524{
525 return 1;
526}
527
529{
530 TRACE("(%p)\n", phwnd);
531
532 *phwnd = NULL;
533 return S_OK;
534}
535
537{
538 TRACE("(%x)\n", fEnable);
539 return S_OK;
540}
541
542static const IActiveScriptSiteWindowVtbl ActiveScriptSiteWindowVtbl = {
548};
549
551
553{
555 TRACE("(IID_IUnknown %p)\n", ppv);
556 *ppv = &script_site;
557 }else if(IsEqualGUID(riid, &IID_IActiveScriptSite)) {
558 TRACE("(IID_IActiveScriptSite %p)\n", ppv);
559 *ppv = &script_site;
560 }else if(IsEqualGUID(riid, &IID_IActiveScriptSiteWindow)) {
561 TRACE("(IID_IActiveScriptSiteWindow %p)\n", ppv);
563 }else {
564 *ppv = NULL;
565 TRACE("(%s %p)\n", wine_dbgstr_guid(riid), ppv);
566 return E_NOINTERFACE;
567 }
568
569 IUnknown_AddRef((IUnknown*)*ppv);
570 return S_OK;
571}
572
573static BOOL load_typelib(void)
574{
577
578 hres = LoadTypeLib(L"wscript.exe", &typelib);
579 if(FAILED(hres))
580 return FALSE;
581
582 hres = ITypeLib_GetTypeInfoOfGuid(typelib, &IID_IHost, &host_ti);
583 if(SUCCEEDED(hres))
584 hres = ITypeLib_GetTypeInfoOfGuid(typelib, &IID_IArguments2, &arguments_ti);
585
586 ITypeLib_Release(typelib);
587 return SUCCEEDED(hres);
588}
589
591{
592 WCHAR fileid[64], progid[64];
593 DWORD res;
594 LONG size;
595 HKEY hkey;
597
599 if(res != ERROR_SUCCESS)
600 return FALSE;
601
602 size = ARRAY_SIZE(fileid);
603 res = RegQueryValueW(hkey, NULL, fileid, &size);
604 RegCloseKey(hkey);
605 if(res != ERROR_SUCCESS)
606 return FALSE;
607
608 WINE_TRACE("fileid is %s\n", wine_dbgstr_w(fileid));
609
610 lstrcatW(fileid, L"\\ScriptEngine");
611 res = RegOpenKeyW(HKEY_CLASSES_ROOT, fileid, &hkey);
612 if(res != ERROR_SUCCESS)
613 return FALSE;
614
616 res = RegQueryValueW(hkey, NULL, progid, &size);
617 RegCloseKey(hkey);
618 if(res != ERROR_SUCCESS)
619 return FALSE;
620
621 WINE_TRACE("ProgID is %s\n", wine_dbgstr_w(progid));
622
624 return SUCCEEDED(hres);
625}
626
628 IActiveScriptParse **parser)
629{
631 IUnknown *unk;
633
634 hres = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
635 &IID_IUnknown, (void**)&unk);
636 if(FAILED(hres))
637 return FALSE;
638
639 hres = IUnknown_QueryInterface(unk, &IID_IActiveScript, (void**)&script);
640 IUnknown_Release(unk);
641 if(FAILED(hres))
642 return FALSE;
643
644 hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParse, (void**)parser);
645 if(FAILED(hres)) {
646 IActiveScript_Release(script);
647 return FALSE;
648 }
649
650 *script_ret = script;
651 return TRUE;
652}
653
654static BOOL init_engine(IActiveScript *script, IActiveScriptParse *parser)
655{
657
658 if(!load_typelib())
659 return FALSE;
660
661 hres = IActiveScript_SetScriptSite(script, &script_site);
662 if(FAILED(hres))
663 return FALSE;
664
666 if(FAILED(hres))
667 return FALSE;
668
669 hres = IActiveScript_AddNamedItem(script, L"WScript", SCRIPTITEM_ISVISIBLE);
670 if(FAILED(hres))
671 return FALSE;
672
673 hres = IActiveScript_AddNamedItem(script, L"WSH", SCRIPTITEM_ISVISIBLE);
674 if(FAILED(hres))
675 return FALSE;
676
677 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_INITIALIZED);
678 return SUCCEEDED(hres);
679}
680
682{
683 const char *file_map;
684 HANDLE file, map;
685 DWORD size, len;
686 BSTR ret;
687
690 return NULL;
691
693 if(!size) {
695 return SysAllocStringLen(NULL, 0);
696 }
697
701 return NULL;
702
703 file_map = MapViewOfFile(map, FILE_MAP_READ, 0, 0, 0);
705 if(!file_map)
706 return NULL;
707
708#ifdef __REACTOS__
709 if(size >= 2 && (BYTE)file_map[0] == 0xFF && (BYTE)file_map[1] == 0xFE) // UTF-16LE
710 {
712 if (ret)
713 CopyMemory(ret, file_map + 2, size - 2);
714 UnmapViewOfFile(file_map);
715 return ret;
716 }
717#endif
718
719 len = MultiByteToWideChar(CP_ACP, 0, file_map, size, NULL, 0);
721 MultiByteToWideChar(CP_ACP, 0, file_map, size, ret, len);
722
723 UnmapViewOfFile(file_map);
724 return ret;
725}
726
727static BOOL run_script(BSTR text, IActiveScript *script, IActiveScriptParse *parser)
728{
730
732 SCRIPTTEXT_HOSTMANAGESSOURCE|SCRIPTITEM_ISVISIBLE, NULL, NULL);
733 if(FAILED(hres)) {
734 if(hres != SCRIPT_E_REPORTED)
735 WINE_WARN("ParseScriptText failed: %08lx\n", hres);
736 return FALSE;
737 }
738
739 hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_STARTED);
740 if(FAILED(hres)) {
741 if(hres != SCRIPT_E_REPORTED)
742 WINE_WARN("SetScriptState failed: %08lx\n", hres);
743 }
744
745 return TRUE;
746}
747
748#ifdef __REACTOS__
749#include <msxml2.h>
750#include <shlwapi.h>
751
752static HRESULT xmldomnode_getattributevalue(IXMLDOMNode *pnode, LPCWSTR name, BSTR *pout)
753{
756 BSTR bsname = SysAllocString(name);
757 *pout = NULL;
758 if (bsname && SUCCEEDED(hr = IXMLDOMNode_get_attributes(pnode, &pmap)))
759 {
760 if (SUCCEEDED(hr = IXMLDOMNamedNodeMap_getNamedItem(pmap, bsname, &pnode)))
761 {
763 if (pnode)
764 {
765 hr = IXMLDOMNode_get_text(pnode, pout);
766 if (SUCCEEDED(hr) && !*pout)
768 IXMLDOMNode_Release(pnode);
769 }
770 }
771 IXMLDOMNamedNodeMap_Release(pmap);
772 }
773 SysFreeString(bsname);
774 return hr;
775}
776
777static HRESULT xmldomelem_getelembytag(IXMLDOMElement *pelem, LPCWSTR name, long index, IXMLDOMNode**ppout)
778{
780 IXMLDOMNodeList *pnl;
781 BSTR bsname = SysAllocString(name);
782 *ppout = NULL;
783 if (bsname && SUCCEEDED(hr = IXMLDOMElement_getElementsByTagName(pelem, bsname, &pnl)))
784 {
785 hr = IXMLDOMNodeList_get_item(pnl, index, ppout);
786 if (SUCCEEDED(hr) && !*ppout)
788 IUnknown_Release(pnl);
789 }
790 SysFreeString(bsname);
791 return hr;
792}
793
794static HRESULT xmldomelem_getelembytagasdomelem(IXMLDOMElement *pelem, LPCWSTR name, long index, IXMLDOMElement**ppout)
795{
796 IXMLDOMNode *pnode;
797 HRESULT hr = xmldomelem_getelembytag(pelem, name, index, &pnode);
798 *ppout = NULL;
799 if (SUCCEEDED(hr))
800 {
801 hr = IUnknown_QueryInterface(pnode, &IID_IXMLDOMElement, (void**)ppout);
802 IUnknown_Release(pnode);
803 }
804 return hr;
805}
806
807static void wsf_addobjectfromnode(IActiveScript *script, IXMLDOMNode *obj)
808{
809 BSTR bsid, bsclsid = NULL;
810 if (SUCCEEDED(xmldomnode_getattributevalue(obj, L"id", &bsid)))
811 {
812 CLSID clsid;
813 HRESULT hr;
814 hr = xmldomnode_getattributevalue(obj, L"clsid", &bsclsid);
815 if (FAILED(hr) || FAILED(CLSIDFromString(bsclsid, &clsid)))
816 {
817 SysFreeString(bsclsid);
818 if (SUCCEEDED(hr = xmldomnode_getattributevalue(obj, L"progid", &bsclsid)))
819 {
820 hr = CLSIDFromProgID(bsclsid, &clsid);
821 SysFreeString(bsclsid);
822 }
823 }
824 if (SUCCEEDED(hr))
825 {
826 hr = add_globalitem_from_clsid(script, bsid, &clsid, SCRIPTITEM_ISVISIBLE);
827 }
828 SysFreeString(bsid);
829 }
830}
831
832static HRESULT run_wsfjob(IXMLDOMElement *jobtag)
833{
834 // FIXME: We are supposed to somehow handle multiple languages in the same IActiveScript.
836 LPCWSTR deflang = L"JScript";
837 IXMLDOMNode *scripttag;
838 HRESULT hr = S_OK;
839 if (SUCCEEDED(xmldomelem_getelembytag(jobtag, L"script", 0, &scripttag)))
840 {
841 CLSID clsid;
842 IActiveScriptParse *parser;
843 BSTR lang, code;
844 if (FAILED(xmldomnode_getattributevalue(scripttag, L"language", &lang)))
845 lang = NULL;
846 hr = CLSIDFromProgID(lang ? lang : deflang, &clsid);
848
849 if (SUCCEEDED(hr))
850 {
851 hr = E_FAIL;
853 {
855 {
856 long index;
857 for (index = 0; index < 0x7fffffff; ++index)
858 {
860 if (SUCCEEDED(xmldomelem_getelembytag(jobtag, L"object", index, &obj)))
861 {
862 wsf_addobjectfromnode(script, obj);
863 IUnknown_Release(obj);
864 }
865 else
866 {
867 break;
868 }
869 }
870
871 if (SUCCEEDED(hr = IXMLDOMNode_get_text(scripttag, &code)))
872 {
874 SCRIPTTEXT_HOSTMANAGESSOURCE|SCRIPTITEM_ISVISIBLE,
875 NULL, NULL);
876 if (SUCCEEDED(hr))
877 {
878 hr = IActiveScript_SetScriptState(script, SCRIPTSTATE_STARTED);
879 IActiveScript_Close(script);
880 }
882 }
883 ITypeInfo_Release(host_ti);
884 }
885 IUnknown_Release(parser);
886 IUnknown_Release(script);
887 }
888 }
889 IUnknown_Release(scripttag);
890 }
891 return hr;
892}
893
894/*
895.WSF files can contain a single job, or multiple jobs if contained in a package.
896Jobs are identified by their id and if no id is specified, the first job is used.
897Each job can contain multiple script tags and all scripts are merged into one.
898
899<job><script language="JScript">WScript.Echo("JS");</script></job>
900or
901<package>
902<job><script language="JScript">WScript.Echo("JS");</script></job>
903</package>
904or
905<?xml version="1.0" ?>
906<job>
907<script language="JScript"><![CDATA[function JS(s) {WScript.Echo(s)}]]></script>
908<script language="VBScript">JS "VB2JS"</script>
909</job>
910*/
911static HRESULT run_wsf(LPCWSTR xmlpath)
912{
915 IXMLDOMDocument *pdoc;
916 HRESULT hr = UrlCreateFromPathW(xmlpath, url, &cch, 0), hrCom;
917 if (FAILED(hr))
918 return hr;
919
920 hrCom = CoInitialize(NULL);
921 hr = CoCreateInstance(&CLSID_DOMDocument30, NULL, CLSCTX_INPROC_SERVER,
922 &IID_IXMLDOMDocument, (void**)&pdoc);
923 if (SUCCEEDED(hr))
924 {
925 VARIANT_BOOL succ = VARIANT_FALSE;
926 IXMLDOMElement *pdocelm;
927 BSTR bsurl = SysAllocString(url);
928 VARIANT v;
929 V_VT(&v) = VT_BSTR;
930 V_BSTR(&v) = bsurl;
931 if (!bsurl || (hr = IXMLDOMDocument_load(pdoc, v, &succ)) > 0 || (SUCCEEDED(hr) && !succ))
932 {
933 hr = E_FAIL;
934 }
935 if (SUCCEEDED(hr) && SUCCEEDED(hr = IXMLDOMDocument_get_documentElement(pdoc, &pdocelm)))
936 {
937 BSTR tagName = NULL;
938 if (SUCCEEDED(hr = IXMLDOMElement_get_tagName(pdocelm, &tagName)))
939 {
940 if (lstrcmpiW(tagName, L"package") == 0)
941 {
942 // FIXME: Accept job id as a function parameter and find the job here
944 if (SUCCEEDED(hr = xmldomelem_getelembytagasdomelem(pdocelm, L"job", 0, &p)))
945 {
946 IUnknown_Release(pdocelm);
947 pdocelm = p;
948 }
949 }
950 else if (lstrcmpiW(tagName, L"job") != 0)
951 {
952 hr = 0x800400C0ul;
953 }
954 SysFreeString(tagName);
955 }
956 if (SUCCEEDED(hr))
957 {
958 // FIXME: Only support CDATA blocks if the xml tag is present?
959 hr = run_wsfjob(pdocelm);
960 }
961 IUnknown_Release(pdocelm);
962 }
963 VariantClear(&v);
964 IUnknown_Release(pdoc);
965 }
966 free_globals();
967 if (SUCCEEDED(hrCom))
969 return hr;
970}
971#endif
972
973static BOOL set_host_properties(const WCHAR *prop)
974{
975 if(*prop == '/') {
976 ++prop;
977 if(*prop == '/')
978 ++prop;
979 }
980 else
981 ++prop;
982
983 if(wcsicmp(prop, L"i") == 0)
984 wshInteractive = VARIANT_TRUE;
985 else if(wcsicmp(prop, L"b") == 0)
986 wshInteractive = VARIANT_FALSE;
987 else if(wcsicmp(prop, L"nologo") == 0)
988 nologo = TRUE;
989 else if(wcsicmp(prop, L"logo") == 0)
990 nologo = FALSE;
991 else if(wcsicmp(prop, L"d") == 0)
992 WINE_FIXME("ignoring //d\n");
993 else if(wcsicmp(prop, L"x") == 0)
994 WINE_FIXME("ignoring //x\n");
995 else if(wcsicmp(prop, L"u") == 0)
996 WINE_FIXME("ignoring //u\n");
997 else if(wcsicmp(prop, L"s") == 0)
998 WINE_FIXME("ignoring //s\n");
999 else if(wcsnicmp(prop, L"e:", 2) == 0)
1000#ifdef __REACTOS__
1001 g_force_engine = &prop[2];
1002#else
1003 WINE_FIXME("ignoring //e:\n");
1004#endif
1005 else if(wcsnicmp(prop, L"h:", 2) == 0)
1006 WINE_FIXME("ignoring //h:\n");
1007 else if(wcsnicmp(prop, L"job:", 4) == 0)
1008 WINE_FIXME("ignoring //job:\n");
1009 else if(wcsnicmp(prop, L"t:", 2) == 0) {
1010 WCHAR *end;
1011 LONG t = wcstol(prop + 2, &end, 10);
1012 if(end == prop + 2 || *end || t < 0)
1013 return FALSE;
1014 wshTimeout = t;
1015 }
1016 else
1017 return FALSE;
1018 return TRUE;
1019}
1020
1022{
1023 WCHAR *ext, *filepart, *filename = NULL;
1024 IActiveScriptParse *parser;
1026 BSTR script_text;
1027 WCHAR **argv;
1028 CLSID clsid;
1029 int argc, i;
1030 int ret = 0;
1031 DWORD res;
1032
1033 WINE_TRACE("(%p %p %s %x)\n", hInst, hPrevInst, wine_dbgstr_w(cmdline), cmdshow);
1034
1036 if(!argv)
1037 return 1;
1038
1039 /* Pass 1: consume // host options from all positions. */
1040 for(i=1; i<argc; i++) {
1041 if(argv[i][0] == '/' && argv[i][1] == '/' && set_host_properties(argv[i]))
1042 argv[i] = NULL;
1043 }
1044
1045 /* Pass 2: find filename, consuming single-/ and - options before it. */
1046 for(i=1; i<argc; i++) {
1047 if(!argv[i])
1048 continue;
1049 if(argv[i][0] == '-' && argv[i][1] == '-' && !argv[i][2])
1050 continue; /* -- separator */
1051 if((*argv[i] == '/' || *argv[i] == '-') && set_host_properties(argv[i]))
1052 continue;
1053 filename = argv[i];
1054 i++;
1055 break;
1056 }
1057
1058 /* Pass 3: compact script args, skipping consumed // options. */
1059 if(filename) {
1060 int j = 0, first_arg = i;
1061 for(; i<argc; i++) {
1062 if(!argv[i])
1063 continue;
1064 argv[first_arg + j] = argv[i];
1065 j++;
1066 }
1067 argums = argv + first_arg;
1068 numOfArgs = j;
1069 }
1070
1071 if(!filename && argc == 1) {
1072 if(wshInteractive) {
1073 WINE_FIXME("Settings dialog not implemented\n");
1074 return 0;
1075 }
1076 if(!nologo)
1077 print_banner();
1079 return 0;
1080 }
1081
1082 if(!nologo)
1083 print_banner();
1084
1085 if(!filename) {
1087 return 1;
1088 }
1089
1091 if(!res || res > ARRAY_SIZE(scriptFullName))
1092 return 1;
1093
1094#ifdef __REACTOS__
1095 ext = wcsrchr(filepart, '.');
1096 if(ext && !lstrcmpiW(ext, L".wsf")) {
1097 return run_wsf(scriptFullName);
1098 }
1099#endif
1100
1101 script_text = get_script_str(scriptFullName);
1102 if(!script_text) {
1106 }else {
1107 WCHAR *syserr = NULL;
1110 if(syserr) {
1111 /* Trim trailing whitespace from system error message. */
1112 int len = lstrlenW(syserr);
1113 while(len > 0 && (syserr[len - 1] == '\r' || syserr[len - 1] == '\n' || syserr[len - 1] == ' '))
1114 syserr[--len] = 0;
1116 LocalFree(syserr);
1117 }else {
1119 }
1120 }
1121 return 1;
1122 }
1123
1124 ext = wcsrchr(filepart, '.');
1125#ifdef __REACTOS__
1126 if(g_force_engine) {
1127 CLSIDFromProgID(g_force_engine, &clsid);
1128 }
1129 else
1130#endif
1131 if(!ext || !get_engine_clsid(ext, &clsid)) {
1132 WINE_FIXME("Could not find engine for %s\n", wine_dbgstr_w(ext));
1133 return 1;
1134 }
1135
1137
1138 if(!create_engine(&clsid, &script, &parser)) {
1139 WINE_FIXME("Could not create script engine\n");
1141 return 1;
1142 }
1143
1144 if(init_engine(script, parser)) {
1146 if(!run_script(script_text, script, parser))
1147 ret = 1;
1149 IActiveScript_Close(script);
1150 ITypeInfo_Release(host_ti);
1151 }else {
1152 WINE_FIXME("Script initialization failed\n");
1153 }
1154
1155 SysFreeString(script_text);
1156 IActiveScript_Release(script);
1158
1159#ifdef __REACTOS__
1160 free_globals();
1161#endif
1162
1164
1165 return ret;
1166}
#define APPNAME
Definition: 3dtext.c:40
@ SCRIPTSTATE_INITIALIZED
Definition: activscp.idl:62
@ SCRIPTSTATE_STARTED
Definition: activscp.idl:58
enum tagSCRIPTSTATE SCRIPTSTATE
int numOfArgs
Definition: arguments.c:35
WCHAR ** argums
Definition: arguments.c:34
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define IDS_USAGE
Definition: resource.h:3
static ULONG WINAPI ActiveScriptSite_Release(IActiveScriptSite *iface)
Definition: main.c:211
ITypeInfo * arguments_ti
Definition: main.c:57
static ULONG WINAPI ActiveScriptSiteWindow_Release(IActiveScriptSiteWindow *iface)
Definition: main.c:523
static HRESULT WINAPI ActiveScriptSite_OnLeaveScript(IActiveScriptSite *iface)
Definition: main.c:491
static BSTR get_script_str(const WCHAR *filename)
Definition: main.c:681
static void print_string(const WCHAR *string)
Definition: main.c:308
static HRESULT query_interface(REFIID, void **)
Definition: main.c:552
static void output_formatstring(const WCHAR *fmt, va_list va_args)
Definition: main.c:332
static DWORD WINAPI timeout_thread_proc(void *arg)
Definition: main.c:406
static HRESULT WINAPI ActiveScriptSite_OnStateChange(IActiveScriptSite *iface, SCRIPTSTATE ssScriptState)
Definition: main.c:268
static HANDLE timeout_thread
Definition: main.c:404
WCHAR scriptFullName[MAX_PATH]
Definition: main.c:54
static const IActiveScriptSiteWindowVtbl ActiveScriptSiteWindowVtbl
Definition: main.c:542
static void write_to_handle(HANDLE handle, const WCHAR *string)
Definition: main.c:275
static void output_writeconsole(const WCHAR *str, DWORD wlen)
Definition: main.c:313
static HRESULT WINAPI ActiveScriptSite_GetDocVersionString(IActiveScriptSite *iface, BSTR *pbstrVersion)
Definition: main.c:254
static BOOL get_engine_clsid(const WCHAR *ext, CLSID *clsid)
Definition: main.c:590
#define IActiveScriptParse_InitNew
Definition: main.c:48
#define IActiveScriptParse_ParseScriptText
Definition: main.c:49
#define IActiveScriptParse_Release
Definition: main.c:47
static BOOL init_engine(IActiveScript *script, IActiveScriptParse *parser)
Definition: main.c:654
static BOOL load_typelib(void)
Definition: main.c:573
static void WINAPIV print_resource(unsigned int id,...)
Definition: main.c:351
void schedule_timeout(LONG seconds)
Definition: main.c:416
static HRESULT WINAPI ActiveScriptSiteWindow_GetWindow(IActiveScriptSiteWindow *iface, HWND *phwnd)
Definition: main.c:528
static HRESULT WINAPI ActiveScriptSite_QueryInterface(IActiveScriptSite *iface, REFIID riid, void **ppv)
Definition: main.c:200
static BOOL create_engine(CLSID *clsid, IActiveScript **script_ret, IActiveScriptParse **parser)
Definition: main.c:627
static void print_banner(void)
Definition: main.c:434
static HRESULT WINAPI ActiveScriptSite_OnEnterScript(IActiveScriptSite *iface)
Definition: main.c:485
static HRESULT WINAPI ActiveScriptSiteWindow_EnableModeless(IActiveScriptSiteWindow *iface, BOOL fEnable)
Definition: main.c:536
static ULONG WINAPI ActiveScriptSite_AddRef(IActiveScriptSite *iface)
Definition: main.c:206
static HANDLE timeout_cancel_event
Definition: main.c:403
static HRESULT WINAPI ActiveScriptSite_OnScriptTerminate(IActiveScriptSite *iface, const VARIANT *pvarResult, const EXCEPINFO *pexcepinfo)
Definition: main.c:261
static HRESULT WINAPI ActiveScriptSiteWindow_QueryInterface(IActiveScriptSiteWindow *iface, REFIID riid, void **ppv)
Definition: main.c:513
int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR cmdline, int cmdshow)
Definition: main.c:1021
static IActiveScriptSiteWindow script_site_window
Definition: main.c:550
static void print_error(const WCHAR *string)
Definition: main.c:298
static IActiveScriptSiteVtbl ActiveScriptSiteVtbl
Definition: main.c:497
static HRESULT WINAPI ActiveScriptSite_GetLCID(IActiveScriptSite *iface, LCID *plcid)
Definition: main.c:216
static HRESULT WINAPI ActiveScriptSite_GetItemInfo(IActiveScriptSite *iface, LPCOLESTR pstrName, DWORD dwReturnMask, IUnknown **ppunkItem, ITypeInfo **ppti)
Definition: main.c:224
static BOOL nologo
Definition: main.c:59
static HRESULT WINAPI ActiveScriptSite_OnScriptError(IActiveScriptSite *iface, IActiveScriptError *pscripterror)
Definition: main.c:452
static IActiveScriptSite script_site
Definition: main.c:511
ITypeInfo * host_ti
Definition: main.c:56
static ULONG WINAPI ActiveScriptSiteWindow_AddRef(IActiveScriptSiteWindow *iface)
Definition: main.c:518
static BOOL set_host_properties(const WCHAR *prop)
Definition: main.c:973
#define IDS_FILE_NOT_FOUND
Definition: resource.h:21
#define IDS_NO_SCRIPT_FILE
Definition: resource.h:20
#define IDS_SCRIPT_LOAD_ERROR
Definition: resource.h:22
#define IDS_TIMEOUT_EXCEEDED
Definition: resource.h:23
#define index(s, c)
Definition: various.h:29
#define ARRAY_SIZE(A)
Definition: main.h:20
HANDLE WINAPI GetStdHandle(IN DWORD nStdHandle)
Definition: console.c:203
const GUID IID_IUnknown
#define RegCloseKey(hKey)
Definition: registry.h:49
Definition: _map.h:48
#define WAIT_TIMEOUT
Definition: dderror.h:14
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
#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 ERROR_SUCCESS
Definition: deptool.c:10
LPWSTR Name
Definition: desk.c:124
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3268
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
Definition: reg.c:4241
HRESULT WINAPI DECLSPEC_HOTPATCH CLSIDFromProgID(LPCOLESTR progid, CLSID *clsid)
Definition: combase.c:1437
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: combase.c:2842
HRESULT WINAPI CLSIDFromString(LPCOLESTR str, LPCLSID clsid)
Definition: combase.c:1470
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
#define CDECL
Definition: compat.h:29
#define CloseHandle
Definition: compat.h:739
#define PAGE_READONLY
Definition: compat.h:138
#define wcsnicmp
Definition: compat.h:14
#define UnmapViewOfFile
Definition: compat.h:746
#define wcsrchr
Definition: compat.h:16
#define CP_ACP
Definition: compat.h:109
#define OPEN_EXISTING
Definition: compat.h:775
#define GetProcAddress(x, y)
Definition: compat.h:753
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define CreateFileMappingW(a, b, c, d, e, f)
Definition: compat.h:744
OLECHAR * BSTR
Definition: compat.h:2293
#define ERROR_NO_MORE_ITEMS
Definition: compat.h:105
#define GENERIC_READ
Definition: compat.h:135
#define MAX_PATH
Definition: compat.h:34
#define CreateFileW
Definition: compat.h:741
#define FILE_MAP_READ
Definition: compat.h:776
#define lstrcpyW
Definition: compat.h:749
#define WideCharToMultiByte
Definition: compat.h:111
short VARIANT_BOOL
Definition: compat.h:2290
#define MapViewOfFile
Definition: compat.h:745
#define MultiByteToWideChar
Definition: compat.h:110
@ VT_BSTR
Definition: compat.h:2303
#define wcsicmp
Definition: compat.h:15
#define lstrlenW
Definition: compat.h:750
static const WCHAR *const ext[]
Definition: module.c:53
BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleW(IN HANDLE hConsoleOutput, IN CONST VOID *lpBuffer, IN DWORD nNumberOfCharsToWrite, OUT LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved)
Definition: readwrite.c:1447
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
Definition: fileinfo.c:331
BOOL WINAPI WriteFile(_In_ HANDLE hFile, _In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped)
Definition: rw.c:25
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
Definition: path.c:1106
VOID WINAPI ExitProcess(IN UINT uExitCode)
Definition: proc.c:1330
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition: thread.c:137
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4152
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
LCID WINAPI GetUserDefaultLCID(void)
Definition: locale.c:1216
UINT WINAPI GetOEMCP(void)
Definition: locale.c:2062
HRESULT WINAPI UrlCreateFromPathW(const WCHAR *path, WCHAR *url, DWORD *url_len, DWORD reserved)
Definition: path.c:4892
LPWSTR WINAPI GetCommandLineW(void)
Definition: process.c:1338
MonoAssembly int argc
Definition: metahost.c:107
const WCHAR * text
Definition: package.c:1794
_ACRTIMP __msvcrt_long __cdecl wcstol(const wchar_t *, wchar_t **, int)
Definition: wcs.c:2752
#define va_end(v)
Definition: stdarg.h:28
#define va_start(v, l)
Definition: stdarg.h:26
char * va_list
Definition: vadefs.h:50
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:531
HRESULT WINAPI LoadTypeLib(const OLECHAR *szFile, ITypeLib **pptLib)
Definition: typelib.c:458
WCHAR **WINAPI CommandLineToArgvW(const WCHAR *cmdline, int *numargs)
Definition: main.c:294
#define swprintf
Definition: precomp.h:40
return ret
Definition: mutex.c:146
#define L(x)
Definition: resources.c:13
#define INFINITE
Definition: serial.h:102
HINSTANCE hInst
Definition: dxdiag.c:13
#define progid(str)
Definition: exdisp.idl:31
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned int Mask
Definition: fpcontrol.c:82
const GLdouble * v
Definition: gl.h:2040
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint GLuint end
Definition: gl.h:1545
GLdouble GLdouble t
Definition: gl.h:2047
GLuint res
Definition: glext.h:9613
GLsizeiptr size
Definition: glext.h:5919
GLuint index
Definition: glext.h:6031
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLfloat GLfloat p
Definition: glext.h:8902
GLenum GLsizei len
Definition: glext.h:6722
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
HLOCAL NTAPI LocalReAlloc(HLOCAL hMem, SIZE_T dwBytes, UINT uFlags)
Definition: heapmem.c:1625
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
IHost host_obj
Definition: host.c:474
LONG wshTimeout
Definition: host.c:44
VARIANT_BOOL wshInteractive
Definition: host.c:37
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
const char * filename
Definition: ioapi.h:137
#define wine_dbgstr_w
Definition: kernel32.h:34
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
#define LMEM_MOVEABLE
Definition: minwinbase.h:82
#define CopyMemory
Definition: minwinbase.h:29
#define LMEM_FIXED
Definition: minwinbase.h:81
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
static const WCHAR url[]
Definition: encode.c:1384
HRESULT hres
Definition: protocol.c:465
#define run_script(a)
Definition: run.c:2699
static EXCEPINFO excepinfo
Definition: automation.c:47
#define argv
Definition: mplay32.c:18
const CLSID * clsid
Definition: msctf.cpp:50
script
Definition: msipriv.h:383
unsigned int UINT
Definition: ndis.h:50
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
#define DWORD
Definition: nt_native.h:44
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
Definition: oleaut.c:339
#define V_VT(A)
Definition: oleauto.h:211
#define V_BSTR(A)
Definition: oleauto.h:226
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
#define REFCLSID
Definition: guiddef.h:117
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158
#define err(...)
const WCHAR * str
#define WINAPIV
Definition: sdbpapi.h:64
#define LANG_NEUTRAL
Definition: nls.h:22
#define MAKELANGID(p, s)
Definition: nls.h:15
#define SUBLANG_DEFAULT
Definition: nls.h:168
DWORD LCID
Definition: nls.h:13
#define WINE_TRACE
Definition: debug.h:328
#define WINE_WARN
Definition: debug.h:334
#define WINE_FIXME
Definition: debug.h:340
static __inline const char * wine_dbgstr_guid(const GUID *id)
Definition: debug.h:171
#define LoadStringW
Definition: utils.h:64
#define memset(x, y, z)
Definition: compat.h:39
_In_ UINT _In_ UINT cch
Definition: shellapi.h:432
#define TRACE(s)
Definition: solgame.cpp:4
TCHAR * cmdline
Definition: stretchblt.cpp:32
Definition: inflate.c:139
Definition: fci.c:127
Definition: dsound.c:943
Definition: parser.c:49
Definition: mem.c:349
Definition: name.c:39
Definition: import.c:81
Definition: pmap_prot.h:88
#define max(a, b)
Definition: svc.c:63
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
Definition: synch.c:587
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
Definition: synch.c:669
BOOL WINAPI DECLSPEC_HOTPATCH ResetEvent(IN HANDLE hEvent)
Definition: synch.c:650
const uint16_t * PCWSTR
Definition: typedefs.h:57
const uint16_t * LPCWSTR
Definition: typedefs.h:57
uint32_t DWORD_PTR
Definition: typedefs.h:65
uint16_t * LPWSTR
Definition: typedefs.h:56
uint32_t ULONG
Definition: typedefs.h:59
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
Definition: variant.c:648
static const WCHAR lang[]
Definition: wbemdisp.c:287
#define STD_OUTPUT_HANDLE
Definition: winbase.h:293
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define FORMAT_MESSAGE_FROM_STRING
Definition: winbase.h:398
#define FORMAT_MESSAGE_IGNORE_INSERTS
Definition: winbase.h:397
#define STD_ERROR_HANDLE
Definition: winbase.h:294
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:400
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:396
void * arg
Definition: msvc.h:10
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3451
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define E_NOINTERFACE
Definition: winerror.h:3479
#define ERROR_NO_WORK_DONE
Definition: winerror.h:409
#define ERROR_PATH_NOT_FOUND
Definition: winerror.h:228
#define ERROR_NOT_FOUND
Definition: winerror.h:1014
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
#define MB_OK
Definition: winuser.h:801
unsigned char BYTE
Definition: xxhash.c:193