dsound: Always enumerate the default device first.
[wine] / dlls / vbscript / global.c
1 /*
2  * Copyright 2011 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 <assert.h>
20
21 #include "vbscript.h"
22 #include "vbscript_defs.h"
23
24 #include "mshtmhst.h"
25 #include "objsafe.h"
26
27 #include "wine/debug.h"
28
29 WINE_DEFAULT_DEBUG_CHANNEL(vbscript);
30
31 #define VB_E_CANNOT_CREATE_OBJ 0x800a01ad
32
33 /* Defined as extern in urlmon.idl, but not exported by uuid.lib */
34 const GUID GUID_CUSTOM_CONFIRMOBJECTSAFETY =
35     {0x10200490,0xfa38,0x11d0,{0xac,0x0e,0x00,0xa0,0xc9,0xf,0xff,0xc0}};
36
37 static IInternetHostSecurityManager *get_sec_mgr(script_ctx_t *ctx)
38 {
39     IInternetHostSecurityManager *secmgr;
40     IServiceProvider *sp;
41     HRESULT hres;
42
43     if(!ctx->site)
44         return NULL;
45
46     if(ctx->secmgr)
47         return ctx->secmgr;
48
49     hres = IActiveScriptSite_QueryInterface(ctx->site, &IID_IServiceProvider, (void**)&sp);
50     if(FAILED(hres))
51         return NULL;
52
53     hres = IServiceProvider_QueryService(sp, &SID_SInternetHostSecurityManager, &IID_IInternetHostSecurityManager,
54             (void**)&secmgr);
55     IServiceProvider_Release(sp);
56     if(FAILED(hres))
57         return NULL;
58
59     return ctx->secmgr = secmgr;
60 }
61
62 static HRESULT return_bstr(VARIANT *res, const WCHAR *str)
63 {
64     BSTR ret;
65
66     if(!res)
67         return S_OK;
68
69     ret = SysAllocString(str);
70     if(!ret)
71         return E_OUTOFMEMORY;
72
73     V_VT(res) = VT_BSTR;
74     V_BSTR(res) = ret;
75     return S_OK;
76 }
77
78 static IUnknown *create_object(script_ctx_t *ctx, const WCHAR *progid)
79 {
80     IInternetHostSecurityManager *secmgr = NULL;
81     IObjectWithSite *obj_site;
82     struct CONFIRMSAFETY cs;
83     IClassFactoryEx *cfex;
84     IClassFactory *cf;
85     DWORD policy_size;
86     BYTE *bpolicy;
87     IUnknown *obj;
88     DWORD policy;
89     GUID guid;
90     HRESULT hres;
91
92     hres = CLSIDFromProgID(progid, &guid);
93     if(FAILED(hres))
94         return NULL;
95
96     TRACE("GUID %s\n", debugstr_guid(&guid));
97
98     if(ctx->safeopt & INTERFACE_USES_SECURITY_MANAGER) {
99         secmgr = get_sec_mgr(ctx);
100         if(!secmgr)
101             return NULL;
102
103         policy = 0;
104         hres = IInternetHostSecurityManager_ProcessUrlAction(secmgr, URLACTION_ACTIVEX_RUN,
105                 (BYTE*)&policy, sizeof(policy), (BYTE*)&guid, sizeof(GUID), 0, 0);
106         if(FAILED(hres) || policy != URLPOLICY_ALLOW)
107             return NULL;
108     }
109
110     hres = CoGetClassObject(&guid, CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER, NULL, &IID_IClassFactory, (void**)&cf);
111     if(FAILED(hres))
112         return NULL;
113
114     hres = IClassFactory_QueryInterface(cf, &IID_IClassFactoryEx, (void**)&cfex);
115     if(SUCCEEDED(hres)) {
116         FIXME("Use IClassFactoryEx\n");
117         IClassFactoryEx_Release(cfex);
118     }
119
120     hres = IClassFactory_CreateInstance(cf, NULL, &IID_IUnknown, (void**)&obj);
121     if(FAILED(hres))
122         return NULL;
123
124     if(secmgr) {
125         cs.clsid = guid;
126         cs.pUnk = obj;
127         cs.dwFlags = 0;
128         hres = IInternetHostSecurityManager_QueryCustomPolicy(secmgr, &GUID_CUSTOM_CONFIRMOBJECTSAFETY,
129                 &bpolicy, &policy_size, (BYTE*)&cs, sizeof(cs), 0);
130         if(SUCCEEDED(hres)) {
131             policy = policy_size >= sizeof(DWORD) ? *(DWORD*)bpolicy : URLPOLICY_DISALLOW;
132             CoTaskMemFree(bpolicy);
133         }
134
135         if(FAILED(hres) || policy != URLPOLICY_ALLOW) {
136             IUnknown_Release(obj);
137             return NULL;
138         }
139     }
140
141     hres = IUnknown_QueryInterface(obj, &IID_IObjectWithSite, (void**)&obj_site);
142     if(SUCCEEDED(hres)) {
143         IUnknown *ax_site;
144
145         ax_site = create_ax_site(ctx);
146         if(ax_site) {
147             hres = IObjectWithSite_SetSite(obj_site, ax_site);
148             IUnknown_Release(ax_site);
149         }
150         IObjectWithSite_Release(obj_site);
151         if(!ax_site || FAILED(hres)) {
152             IUnknown_Release(obj);
153             return NULL;
154         }
155     }
156
157     return obj;
158 }
159
160 static HRESULT Global_CCur(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
161 {
162     FIXME("\n");
163     return E_NOTIMPL;
164 }
165
166 static HRESULT Global_CInt(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
167 {
168     FIXME("\n");
169     return E_NOTIMPL;
170 }
171
172 static HRESULT Global_CLng(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
173 {
174     FIXME("\n");
175     return E_NOTIMPL;
176 }
177
178 static HRESULT Global_CBool(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
179 {
180     FIXME("\n");
181     return E_NOTIMPL;
182 }
183
184 static HRESULT Global_CByte(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
185 {
186     FIXME("\n");
187     return E_NOTIMPL;
188 }
189
190 static HRESULT Global_CDate(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
191 {
192     FIXME("\n");
193     return E_NOTIMPL;
194 }
195
196 static HRESULT Global_CDbl(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
197 {
198     FIXME("\n");
199     return E_NOTIMPL;
200 }
201
202 static HRESULT Global_CSng(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
203 {
204     FIXME("\n");
205     return E_NOTIMPL;
206 }
207
208 static HRESULT Global_CStr(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
209 {
210     FIXME("\n");
211     return E_NOTIMPL;
212 }
213
214 static inline WCHAR hex_char(unsigned n)
215 {
216     return n < 10 ? '0'+n : 'A'+n-10;
217 }
218
219 static HRESULT Global_Hex(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
220 {
221     WCHAR buf[17], *ptr;
222     DWORD n;
223
224     TRACE("%s\n", debugstr_variant(arg));
225
226     switch(V_VT(arg)) {
227     case VT_I2:
228         n = (WORD)V_I2(arg);
229         break;
230     case VT_I4:
231         n = V_I4(arg);
232         break;
233     case VT_EMPTY:
234         n = 0;
235         break;
236     case VT_NULL:
237         if(res)
238             V_VT(res) = VT_NULL;
239         return S_OK;
240     default:
241         FIXME("unsupported type %s\n", debugstr_variant(arg));
242         return E_NOTIMPL;
243     }
244
245     buf[16] = 0;
246     ptr = buf+15;
247
248     if(n) {
249         do {
250             *ptr-- = hex_char(n & 0xf);
251             n >>= 4;
252         }while(n);
253         ptr++;
254     }else {
255         *ptr = '0';
256     }
257
258     return return_bstr(res, ptr);
259 }
260
261 static HRESULT Global_Oct(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
262 {
263     FIXME("\n");
264     return E_NOTIMPL;
265 }
266
267 static HRESULT Global_VarType(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
268 {
269     FIXME("\n");
270     return E_NOTIMPL;
271 }
272
273 static HRESULT Global_IsDate(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
274 {
275     FIXME("\n");
276     return E_NOTIMPL;
277 }
278
279 static HRESULT Global_IsEmpty(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
280 {
281     TRACE("(%s)\n", debugstr_variant(arg));
282
283     assert(args_cnt == 1);
284
285     if(res) {
286         V_VT(res) = VT_BOOL;
287         V_BOOL(res) = V_VT(arg) == VT_EMPTY ? VARIANT_TRUE : VARIANT_FALSE;
288     }
289     return S_OK;
290 }
291
292 static HRESULT Global_IsNull(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
293 {
294     TRACE("(%s)\n", debugstr_variant(arg));
295
296     assert(args_cnt == 1);
297
298     if(res) {
299         V_VT(res) = VT_BOOL;
300         V_BOOL(res) = V_VT(arg) == VT_NULL ? VARIANT_TRUE : VARIANT_FALSE;
301     }
302     return S_OK;
303 }
304
305 static HRESULT Global_IsNumeric(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
306 {
307     FIXME("\n");
308     return E_NOTIMPL;
309 }
310
311 static HRESULT Global_IsArray(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
312 {
313     FIXME("\n");
314     return E_NOTIMPL;
315 }
316
317 static HRESULT Global_IsObject(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
318 {
319     TRACE("(%s)\n", debugstr_variant(arg));
320
321     assert(args_cnt == 1);
322
323     if(res) {
324         V_VT(res) = VT_BOOL;
325         V_BOOL(res) = V_VT(arg) == VT_DISPATCH ? VARIANT_TRUE : VARIANT_FALSE;
326     }
327     return S_OK;
328 }
329
330 static HRESULT Global_Ant(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
331 {
332     FIXME("\n");
333     return E_NOTIMPL;
334 }
335
336 static HRESULT Global_Cos(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
337 {
338     FIXME("\n");
339     return E_NOTIMPL;
340 }
341
342 static HRESULT Global_Sin(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
343 {
344     FIXME("\n");
345     return E_NOTIMPL;
346 }
347
348 static HRESULT Global_Tan(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
349 {
350     FIXME("\n");
351     return E_NOTIMPL;
352 }
353
354 static HRESULT Global_Exp(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
355 {
356     FIXME("\n");
357     return E_NOTIMPL;
358 }
359
360 static HRESULT Global_Log(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
361 {
362     FIXME("\n");
363     return E_NOTIMPL;
364 }
365
366 static HRESULT Global_Sqr(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
367 {
368     FIXME("\n");
369     return E_NOTIMPL;
370 }
371
372 static HRESULT Global_Randomize(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
373 {
374     FIXME("\n");
375     return E_NOTIMPL;
376 }
377
378 static HRESULT Global_Rnd(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
379 {
380     FIXME("\n");
381     return E_NOTIMPL;
382 }
383
384 static HRESULT Global_Timer(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
385 {
386     FIXME("\n");
387     return E_NOTIMPL;
388 }
389
390 static HRESULT Global_LBound(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
391 {
392     FIXME("\n");
393     return E_NOTIMPL;
394 }
395
396 static HRESULT Global_UBound(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
397 {
398     FIXME("\n");
399     return E_NOTIMPL;
400 }
401
402 static HRESULT Global_RGB(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
403 {
404     FIXME("\n");
405     return E_NOTIMPL;
406 }
407
408 static HRESULT Global_Len(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
409 {
410     FIXME("\n");
411     return E_NOTIMPL;
412 }
413
414 static HRESULT Global_LenB(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
415 {
416     FIXME("\n");
417     return E_NOTIMPL;
418 }
419
420 static HRESULT Global_Left(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
421 {
422     FIXME("\n");
423     return E_NOTIMPL;
424 }
425
426 static HRESULT Global_LeftB(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
427 {
428     FIXME("\n");
429     return E_NOTIMPL;
430 }
431
432 static HRESULT Global_Right(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
433 {
434     FIXME("\n");
435     return E_NOTIMPL;
436 }
437
438 static HRESULT Global_RightB(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
439 {
440     FIXME("\n");
441     return E_NOTIMPL;
442 }
443
444 static HRESULT Global_Mid(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
445 {
446     FIXME("\n");
447     return E_NOTIMPL;
448 }
449
450 static HRESULT Global_MidB(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
451 {
452     FIXME("\n");
453     return E_NOTIMPL;
454 }
455
456 static HRESULT Global_StrComp(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
457 {
458     FIXME("\n");
459     return E_NOTIMPL;
460 }
461
462 static HRESULT Global_LCase(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
463 {
464     FIXME("\n");
465     return E_NOTIMPL;
466 }
467
468 static HRESULT Global_UCase(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
469 {
470     FIXME("\n");
471     return E_NOTIMPL;
472 }
473
474 static HRESULT Global_LTrim(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
475 {
476     FIXME("\n");
477     return E_NOTIMPL;
478 }
479
480 static HRESULT Global_RTrim(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
481 {
482     FIXME("\n");
483     return E_NOTIMPL;
484 }
485
486 static HRESULT Global_Trim(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
487 {
488     FIXME("\n");
489     return E_NOTIMPL;
490 }
491
492 static HRESULT Global_Space(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
493 {
494     FIXME("\n");
495     return E_NOTIMPL;
496 }
497
498 static HRESULT Global_String(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
499 {
500     FIXME("\n");
501     return E_NOTIMPL;
502 }
503
504 static HRESULT Global_InStr(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
505 {
506     FIXME("\n");
507     return E_NOTIMPL;
508 }
509
510 static HRESULT Global_InStrB(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
511 {
512     FIXME("\n");
513     return E_NOTIMPL;
514 }
515
516 static HRESULT Global_AscB(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
517 {
518     FIXME("\n");
519     return E_NOTIMPL;
520 }
521
522 static HRESULT Global_ChrB(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
523 {
524     FIXME("\n");
525     return E_NOTIMPL;
526 }
527
528 static HRESULT Global_Asc(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
529 {
530     FIXME("\n");
531     return E_NOTIMPL;
532 }
533
534 static HRESULT Global_Chr(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
535 {
536     FIXME("\n");
537     return E_NOTIMPL;
538 }
539
540 static HRESULT Global_AscW(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
541 {
542     FIXME("\n");
543     return E_NOTIMPL;
544 }
545
546 static HRESULT Global_ChrW(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
547 {
548     FIXME("\n");
549     return E_NOTIMPL;
550 }
551
552 static HRESULT Global_Abs(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
553 {
554     FIXME("\n");
555     return E_NOTIMPL;
556 }
557
558 static HRESULT Global_Fix(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
559 {
560     FIXME("\n");
561     return E_NOTIMPL;
562 }
563
564 static HRESULT Global_Int(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
565 {
566     FIXME("\n");
567     return E_NOTIMPL;
568 }
569
570 static HRESULT Global_Sgn(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
571 {
572     FIXME("\n");
573     return E_NOTIMPL;
574 }
575
576 static HRESULT Global_Now(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
577 {
578     FIXME("\n");
579     return E_NOTIMPL;
580 }
581
582 static HRESULT Global_Date(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
583 {
584     FIXME("\n");
585     return E_NOTIMPL;
586 }
587
588 static HRESULT Global_Time(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
589 {
590     FIXME("\n");
591     return E_NOTIMPL;
592 }
593
594 static HRESULT Global_Day(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
595 {
596     FIXME("\n");
597     return E_NOTIMPL;
598 }
599
600 static HRESULT Global_Month(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
601 {
602     FIXME("\n");
603     return E_NOTIMPL;
604 }
605
606 static HRESULT Global_Weekday(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
607 {
608     FIXME("\n");
609     return E_NOTIMPL;
610 }
611
612 static HRESULT Global_Year(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
613 {
614     FIXME("\n");
615     return E_NOTIMPL;
616 }
617
618 static HRESULT Global_Hour(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
619 {
620     FIXME("\n");
621     return E_NOTIMPL;
622 }
623
624 static HRESULT Global_Minute(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
625 {
626     FIXME("\n");
627     return E_NOTIMPL;
628 }
629
630 static HRESULT Global_Second(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
631 {
632     FIXME("\n");
633     return E_NOTIMPL;
634 }
635
636 static HRESULT Global_DateValue(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
637 {
638     FIXME("\n");
639     return E_NOTIMPL;
640 }
641
642 static HRESULT Global_TimeValue(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
643 {
644     FIXME("\n");
645     return E_NOTIMPL;
646 }
647
648 static HRESULT Global_DateSerial(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
649 {
650     FIXME("\n");
651     return E_NOTIMPL;
652 }
653
654 static HRESULT Global_TimeSerial(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
655 {
656     FIXME("\n");
657     return E_NOTIMPL;
658 }
659
660 static HRESULT Global_InputBox(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
661 {
662     FIXME("\n");
663     return E_NOTIMPL;
664 }
665
666 static HRESULT Global_MsgBox(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
667 {
668     FIXME("\n");
669     return E_NOTIMPL;
670 }
671
672 static HRESULT Global_CreateObject(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
673 {
674     IUnknown *obj;
675     HRESULT hres;
676
677     TRACE("(%s)\n", debugstr_variant(arg));
678
679     if(V_VT(arg) != VT_BSTR) {
680         FIXME("non-bstr arg\n");
681         return E_INVALIDARG;
682     }
683
684     obj = create_object(This->desc->ctx, V_BSTR(arg));
685     if(!obj)
686         return VB_E_CANNOT_CREATE_OBJ;
687
688     if(res) {
689         hres = IUnknown_QueryInterface(obj, &IID_IDispatch, (void**)&V_DISPATCH(res));
690         if(FAILED(hres))
691             return hres;
692
693         V_VT(res) = VT_DISPATCH;
694     }
695
696     IUnknown_Release(obj);
697     return S_OK;
698 }
699
700 static HRESULT Global_GetObject(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
701 {
702     FIXME("\n");
703     return E_NOTIMPL;
704 }
705
706 static HRESULT Global_DateAdd(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
707 {
708     FIXME("\n");
709     return E_NOTIMPL;
710 }
711
712 static HRESULT Global_DateDiff(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
713 {
714     FIXME("\n");
715     return E_NOTIMPL;
716 }
717
718 static HRESULT Global_DatePart(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
719 {
720     FIXME("\n");
721     return E_NOTIMPL;
722 }
723
724 static HRESULT Global_TypeName(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
725 {
726     FIXME("\n");
727     return E_NOTIMPL;
728 }
729
730 static HRESULT Global_Array(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
731 {
732     FIXME("\n");
733     return E_NOTIMPL;
734 }
735
736 static HRESULT Global_Erase(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
737 {
738     FIXME("\n");
739     return E_NOTIMPL;
740 }
741
742 static HRESULT Global_Filter(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
743 {
744     FIXME("\n");
745     return E_NOTIMPL;
746 }
747
748 static HRESULT Global_Join(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
749 {
750     FIXME("\n");
751     return E_NOTIMPL;
752 }
753
754 static HRESULT Global_Split(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
755 {
756     FIXME("\n");
757     return E_NOTIMPL;
758 }
759
760 static HRESULT Global_Replace(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
761 {
762     FIXME("\n");
763     return E_NOTIMPL;
764 }
765
766 static HRESULT Global_StrReverse(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
767 {
768     FIXME("\n");
769     return E_NOTIMPL;
770 }
771
772 static HRESULT Global_InStrRev(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
773 {
774     FIXME("\n");
775     return E_NOTIMPL;
776 }
777
778 static HRESULT Global_LoadPicture(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
779 {
780     FIXME("\n");
781     return E_NOTIMPL;
782 }
783
784 static HRESULT Global_ScriptEngine(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
785 {
786     FIXME("\n");
787     return E_NOTIMPL;
788 }
789
790 static HRESULT Global_ScriptEngineMajorVersion(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
791 {
792     FIXME("\n");
793     return E_NOTIMPL;
794 }
795
796 static HRESULT Global_ScriptEngineMinorVersion(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
797 {
798     FIXME("\n");
799     return E_NOTIMPL;
800 }
801
802 static HRESULT Global_ScriptEngineBuildVersion(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
803 {
804     FIXME("\n");
805     return E_NOTIMPL;
806 }
807
808 static HRESULT Global_FormatNumber(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
809 {
810     FIXME("\n");
811     return E_NOTIMPL;
812 }
813
814 static HRESULT Global_FormatCurrency(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
815 {
816     FIXME("\n");
817     return E_NOTIMPL;
818 }
819
820 static HRESULT Global_FormatPercent(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
821 {
822     FIXME("\n");
823     return E_NOTIMPL;
824 }
825
826 static HRESULT Global_FormatDateTime(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
827 {
828     FIXME("\n");
829     return E_NOTIMPL;
830 }
831
832 static HRESULT Global_WeekdayName(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
833 {
834     FIXME("\n");
835     return E_NOTIMPL;
836 }
837
838 static HRESULT Global_MonthName(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
839 {
840     FIXME("\n");
841     return E_NOTIMPL;
842 }
843
844 static HRESULT Global_Round(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
845 {
846     FIXME("\n");
847     return E_NOTIMPL;
848 }
849
850 static HRESULT Global_Escape(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
851 {
852     FIXME("\n");
853     return E_NOTIMPL;
854 }
855
856 static HRESULT Global_Unescape(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
857 {
858     FIXME("\n");
859     return E_NOTIMPL;
860 }
861
862 static HRESULT Global_Eval(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
863 {
864     FIXME("\n");
865     return E_NOTIMPL;
866 }
867
868 static HRESULT Global_Execute(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
869 {
870     FIXME("\n");
871     return E_NOTIMPL;
872 }
873
874 static HRESULT Global_ExecuteGlobal(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
875 {
876     FIXME("\n");
877     return E_NOTIMPL;
878 }
879
880 static HRESULT Global_GetRef(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
881 {
882     FIXME("\n");
883     return E_NOTIMPL;
884 }
885
886 static HRESULT Global_vbUseSystem(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
887 {
888     FIXME("\n");
889     return E_NOTIMPL;
890 }
891
892 static HRESULT Global_vbUseSystemDayOfWeek(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
893 {
894     FIXME("\n");
895     return E_NOTIMPL;
896 }
897
898 static HRESULT Global_vbSunday(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
899 {
900     FIXME("\n");
901     return E_NOTIMPL;
902 }
903
904 static HRESULT Global_vbMonday(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
905 {
906     FIXME("\n");
907     return E_NOTIMPL;
908 }
909
910 static HRESULT Global_vbTuesday(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
911 {
912     FIXME("\n");
913     return E_NOTIMPL;
914 }
915
916 static HRESULT Global_vbWednesday(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
917 {
918     FIXME("\n");
919     return E_NOTIMPL;
920 }
921
922 static HRESULT Global_vbThursday(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
923 {
924     FIXME("\n");
925     return E_NOTIMPL;
926 }
927
928 static HRESULT Global_vbFriday(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
929 {
930     FIXME("\n");
931     return E_NOTIMPL;
932 }
933
934 static HRESULT Global_vbSaturday(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
935 {
936     FIXME("\n");
937     return E_NOTIMPL;
938 }
939
940 static HRESULT Global_vbFirstJan1(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
941 {
942     FIXME("\n");
943     return E_NOTIMPL;
944 }
945
946 static HRESULT Global_vbFirstFourDays(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
947 {
948     FIXME("\n");
949     return E_NOTIMPL;
950 }
951
952 static HRESULT Global_vbFirstFullWeek(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
953 {
954     FIXME("\n");
955     return E_NOTIMPL;
956 }
957
958 static HRESULT Global_vbOKOnly(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
959 {
960     FIXME("\n");
961     return E_NOTIMPL;
962 }
963
964 static HRESULT Global_vbOKCancel(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
965 {
966     FIXME("\n");
967     return E_NOTIMPL;
968 }
969
970 static HRESULT Global_vbAbortRetryIgnore(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
971 {
972     FIXME("\n");
973     return E_NOTIMPL;
974 }
975
976 static HRESULT Global_vbYesNoCancel(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
977 {
978     FIXME("\n");
979     return E_NOTIMPL;
980 }
981
982 static HRESULT Global_vbYesNo(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
983 {
984     FIXME("\n");
985     return E_NOTIMPL;
986 }
987
988 static HRESULT Global_vbRetryCancel(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
989 {
990     FIXME("\n");
991     return E_NOTIMPL;
992 }
993
994 static HRESULT Global_vbCritical(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
995 {
996     FIXME("\n");
997     return E_NOTIMPL;
998 }
999
1000 static HRESULT Global_vbQuestion(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1001 {
1002     FIXME("\n");
1003     return E_NOTIMPL;
1004 }
1005
1006 static HRESULT Global_vbExclamation(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1007 {
1008     FIXME("\n");
1009     return E_NOTIMPL;
1010 }
1011
1012 static HRESULT Global_vbInformation(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1013 {
1014     FIXME("\n");
1015     return E_NOTIMPL;
1016 }
1017
1018 static HRESULT Global_vbDefaultButton1(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1019 {
1020     FIXME("\n");
1021     return E_NOTIMPL;
1022 }
1023
1024 static HRESULT Global_vbDefaultButton2(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1025 {
1026     FIXME("\n");
1027     return E_NOTIMPL;
1028 }
1029
1030 static HRESULT Global_vbDefaultButton3(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1031 {
1032     FIXME("\n");
1033     return E_NOTIMPL;
1034 }
1035
1036 static HRESULT Global_vbDefaultButton4(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1037 {
1038     FIXME("\n");
1039     return E_NOTIMPL;
1040 }
1041
1042 static HRESULT Global_vbApplicationModal(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1043 {
1044     FIXME("\n");
1045     return E_NOTIMPL;
1046 }
1047
1048 static HRESULT Global_vbSystemModal(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1049 {
1050     FIXME("\n");
1051     return E_NOTIMPL;
1052 }
1053
1054 static HRESULT Global_vbOK(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1055 {
1056     FIXME("\n");
1057     return E_NOTIMPL;
1058 }
1059
1060 static HRESULT Global_vbCancel(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1061 {
1062     FIXME("\n");
1063     return E_NOTIMPL;
1064 }
1065
1066 static HRESULT Global_vbAbort(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1067 {
1068     FIXME("\n");
1069     return E_NOTIMPL;
1070 }
1071
1072 static HRESULT Global_vbRetry(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1073 {
1074     FIXME("\n");
1075     return E_NOTIMPL;
1076 }
1077
1078 static HRESULT Global_vbIgnore(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1079 {
1080     FIXME("\n");
1081     return E_NOTIMPL;
1082 }
1083
1084 static HRESULT Global_vbYes(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1085 {
1086     FIXME("\n");
1087     return E_NOTIMPL;
1088 }
1089
1090 static HRESULT Global_vbNo(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1091 {
1092     FIXME("\n");
1093     return E_NOTIMPL;
1094 }
1095
1096 static HRESULT Global_vbEmpty(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1097 {
1098     FIXME("\n");
1099     return E_NOTIMPL;
1100 }
1101
1102 static HRESULT Global_vbNull(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1103 {
1104     FIXME("\n");
1105     return E_NOTIMPL;
1106 }
1107
1108 static HRESULT Global_vbInteger(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1109 {
1110     FIXME("\n");
1111     return E_NOTIMPL;
1112 }
1113
1114 static HRESULT Global_vbLong(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1115 {
1116     FIXME("\n");
1117     return E_NOTIMPL;
1118 }
1119
1120 static HRESULT Global_vbSingle(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1121 {
1122     FIXME("\n");
1123     return E_NOTIMPL;
1124 }
1125
1126 static HRESULT Global_vbDouble(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1127 {
1128     FIXME("\n");
1129     return E_NOTIMPL;
1130 }
1131
1132 static HRESULT Global_vbCurrency(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1133 {
1134     FIXME("\n");
1135     return E_NOTIMPL;
1136 }
1137
1138 static HRESULT Global_vbDate(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1139 {
1140     FIXME("\n");
1141     return E_NOTIMPL;
1142 }
1143
1144 static HRESULT Global_vbString(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1145 {
1146     FIXME("\n");
1147     return E_NOTIMPL;
1148 }
1149
1150 static HRESULT Global_vbObject(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1151 {
1152     FIXME("\n");
1153     return E_NOTIMPL;
1154 }
1155
1156 static HRESULT Global_vbError(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1157 {
1158     FIXME("\n");
1159     return E_NOTIMPL;
1160 }
1161
1162 static HRESULT Global_vbBoolean(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1163 {
1164     FIXME("\n");
1165     return E_NOTIMPL;
1166 }
1167
1168 static HRESULT Global_vbVariant(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1169 {
1170     FIXME("\n");
1171     return E_NOTIMPL;
1172 }
1173
1174 static HRESULT Global_vbDataObject(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1175 {
1176     FIXME("\n");
1177     return E_NOTIMPL;
1178 }
1179
1180 static HRESULT Global_vbDecimal(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1181 {
1182     FIXME("\n");
1183     return E_NOTIMPL;
1184 }
1185
1186 static HRESULT Global_vbByte(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1187 {
1188     FIXME("\n");
1189     return E_NOTIMPL;
1190 }
1191
1192 static HRESULT Global_vbArray(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1193 {
1194     FIXME("\n");
1195     return E_NOTIMPL;
1196 }
1197
1198 static HRESULT Global_vbTrue(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1199 {
1200     FIXME("\n");
1201     return E_NOTIMPL;
1202 }
1203
1204 static HRESULT Global_vbFalse(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1205 {
1206     FIXME("\n");
1207     return E_NOTIMPL;
1208 }
1209
1210 static HRESULT Global_vbUseDefault(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1211 {
1212     FIXME("\n");
1213     return E_NOTIMPL;
1214 }
1215
1216 static HRESULT Global_vbBinaryCompare(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1217 {
1218     FIXME("\n");
1219     return E_NOTIMPL;
1220 }
1221
1222 static HRESULT Global_vbTextCompare(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1223 {
1224     FIXME("\n");
1225     return E_NOTIMPL;
1226 }
1227
1228 static HRESULT Global_vbDatabaseCompare(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1229 {
1230     FIXME("\n");
1231     return E_NOTIMPL;
1232 }
1233
1234 static HRESULT Global_vbGeneralDate(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1235 {
1236     FIXME("\n");
1237     return E_NOTIMPL;
1238 }
1239
1240 static HRESULT Global_vbLongDate(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1241 {
1242     FIXME("\n");
1243     return E_NOTIMPL;
1244 }
1245
1246 static HRESULT Global_vbShortDate(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1247 {
1248     FIXME("\n");
1249     return E_NOTIMPL;
1250 }
1251
1252 static HRESULT Global_vbLongTime(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1253 {
1254     FIXME("\n");
1255     return E_NOTIMPL;
1256 }
1257
1258 static HRESULT Global_vbShortTime(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1259 {
1260     FIXME("\n");
1261     return E_NOTIMPL;
1262 }
1263
1264 static HRESULT Global_vbObjectError(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1265 {
1266     FIXME("\n");
1267     return E_NOTIMPL;
1268 }
1269
1270 static HRESULT Global_vbBlack(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1271 {
1272     FIXME("\n");
1273     return E_NOTIMPL;
1274 }
1275
1276 static HRESULT Global_vbBlue(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1277 {
1278     FIXME("\n");
1279     return E_NOTIMPL;
1280 }
1281
1282 static HRESULT Global_vbCyan(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1283 {
1284     FIXME("\n");
1285     return E_NOTIMPL;
1286 }
1287
1288 static HRESULT Global_vbGreen(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1289 {
1290     FIXME("\n");
1291     return E_NOTIMPL;
1292 }
1293
1294 static HRESULT Global_vbMagenta(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1295 {
1296     FIXME("\n");
1297     return E_NOTIMPL;
1298 }
1299
1300 static HRESULT Global_vbRed(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1301 {
1302     FIXME("\n");
1303     return E_NOTIMPL;
1304 }
1305
1306 static HRESULT Global_vbWhite(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1307 {
1308     FIXME("\n");
1309     return E_NOTIMPL;
1310 }
1311
1312 static HRESULT Global_vbYellow(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1313 {
1314     FIXME("\n");
1315     return E_NOTIMPL;
1316 }
1317
1318 static HRESULT Global_vbCr(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1319 {
1320     FIXME("\n");
1321     return E_NOTIMPL;
1322 }
1323
1324 static HRESULT Global_vbCrLf(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1325 {
1326     FIXME("\n");
1327     return E_NOTIMPL;
1328 }
1329
1330 static HRESULT Global_vbNewLine(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1331 {
1332     FIXME("\n");
1333     return E_NOTIMPL;
1334 }
1335
1336 static HRESULT Global_vbFormFeed(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1337 {
1338     FIXME("\n");
1339     return E_NOTIMPL;
1340 }
1341
1342 static HRESULT Global_vbLf(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1343 {
1344     FIXME("\n");
1345     return E_NOTIMPL;
1346 }
1347
1348 static HRESULT Global_vbNullChar(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1349 {
1350     FIXME("\n");
1351     return E_NOTIMPL;
1352 }
1353
1354 static HRESULT Global_vbNullString(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1355 {
1356     FIXME("\n");
1357     return E_NOTIMPL;
1358 }
1359
1360 static HRESULT Global_vbTab(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1361 {
1362     FIXME("\n");
1363     return E_NOTIMPL;
1364 }
1365
1366 static HRESULT Global_vbVerticalTab(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1367 {
1368     FIXME("\n");
1369     return E_NOTIMPL;
1370 }
1371
1372 static HRESULT Global_vbMsgBoxHelpButton(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1373 {
1374     FIXME("\n");
1375     return E_NOTIMPL;
1376 }
1377
1378 static HRESULT Global_vbMsgBoxSetForeground(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1379 {
1380     FIXME("\n");
1381     return E_NOTIMPL;
1382 }
1383
1384 static HRESULT Global_vbMsgBoxRight(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1385 {
1386     FIXME("\n");
1387     return E_NOTIMPL;
1388 }
1389
1390 static HRESULT Global_vbMsgBoxRtlReading(vbdisp_t *This, VARIANT *arg, unsigned args_cnt, VARIANT *res)
1391 {
1392     FIXME("\n");
1393     return E_NOTIMPL;
1394 }
1395
1396 static const builtin_prop_t global_props[] = {
1397     {DISPID_GLOBAL_VBUSESYSTEM,        Global_vbUseSystem, BP_GET},
1398     {DISPID_GLOBAL_USESYSTEMDAYOFWEEK, Global_vbUseSystemDayOfWeek, BP_GET},
1399     {DISPID_GLOBAL_VBSUNDAY,           Global_vbSunday, BP_GET},
1400     {DISPID_GLOBAL_VBMONDAY,           Global_vbMonday, BP_GET},
1401     {DISPID_GLOBAL_VBTUESDAY,          Global_vbTuesday, BP_GET},
1402     {DISPID_GLOBAL_VBWEDNESDAY,        Global_vbWednesday, BP_GET},
1403     {DISPID_GLOBAL_VBTHURSDAY,         Global_vbThursday, BP_GET},
1404     {DISPID_GLOBAL_VBFRIDAY,           Global_vbFriday, BP_GET},
1405     {DISPID_GLOBAL_VBSATURDAY,         Global_vbSaturday, BP_GET},
1406     {DISPID_GLOBAL_VBFIRSTJAN1,        Global_vbFirstJan1, BP_GET},
1407     {DISPID_GLOBAL_VBFIRSTFOURDAYS,    Global_vbFirstFourDays, BP_GET},
1408     {DISPID_GLOBAL_VBFIRSTFULLWEEK,    Global_vbFirstFullWeek, BP_GET},
1409     {DISPID_GLOBAL_VBOKONLY,           Global_vbOKOnly, BP_GET},
1410     {DISPID_GLOBAL_VBOKCANCEL,         Global_vbOKCancel, BP_GET},
1411     {DISPID_GLOBAL_VBABORTRETRYIGNORE, Global_vbAbortRetryIgnore, BP_GET},
1412     {DISPID_GLOBAL_VBYESNOCANCEL,      Global_vbYesNoCancel, BP_GET},
1413     {DISPID_GLOBAL_VBYESNO,            Global_vbYesNo, BP_GET},
1414     {DISPID_GLOBAL_VBRETRYCANCEL,      Global_vbRetryCancel, BP_GET},
1415     {DISPID_GLOBAL_VBCRITICAL,         Global_vbCritical, BP_GET},
1416     {DISPID_GLOBAL_VBQUESTION,         Global_vbQuestion, BP_GET},
1417     {DISPID_GLOBAL_VBEXCLAMATION,      Global_vbExclamation, BP_GET},
1418     {DISPID_GLOBAL_VBINFORMATION,      Global_vbInformation, BP_GET},
1419     {DISPID_GLOBAL_VBDEFAULTBUTTON1,   Global_vbDefaultButton1, BP_GET},
1420     {DISPID_GLOBAL_VBDEFAULTBUTTON2,   Global_vbDefaultButton2, BP_GET},
1421     {DISPID_GLOBAL_VBDEFAULTBUTTON3,   Global_vbDefaultButton3, BP_GET},
1422     {DISPID_GLOBAL_VBDEFAULTBUTTON4,   Global_vbDefaultButton4, BP_GET},
1423     {DISPID_GLOBAL_VBAPPLICATIONMODAL, Global_vbApplicationModal, BP_GET},
1424     {DISPID_GLOBAL_VBSYSTEMMODAL,      Global_vbSystemModal, BP_GET},
1425     {DISPID_GLOBAL_VBOK,               Global_vbOK, BP_GET},
1426     {DISPID_GLOBAL_VBCANCEL,           Global_vbCancel, BP_GET},
1427     {DISPID_GLOBAL_VBABORT,            Global_vbAbort, BP_GET},
1428     {DISPID_GLOBAL_VBRETRY,            Global_vbRetry, BP_GET},
1429     {DISPID_GLOBAL_VBIGNORE,           Global_vbIgnore, BP_GET},
1430     {DISPID_GLOBAL_VBYES,              Global_vbYes, BP_GET},
1431     {DISPID_GLOBAL_VBNO,               Global_vbNo, BP_GET},
1432     {DISPID_GLOBAL_VBEMPTY,            Global_vbEmpty, BP_GET},
1433     {DISPID_GLOBAL_VBNULL,             Global_vbNull, BP_GET},
1434     {DISPID_GLOBAL_VBINTEGER,          Global_vbInteger, BP_GET},
1435     {DISPID_GLOBAL_VBLONG,             Global_vbLong, BP_GET},
1436     {DISPID_GLOBAL_VBSINGLE,           Global_vbSingle, BP_GET},
1437     {DISPID_GLOBAL_VBDOUBLE,           Global_vbDouble, BP_GET},
1438     {DISPID_GLOBAL_VBCURRENCY,         Global_vbCurrency, BP_GET},
1439     {DISPID_GLOBAL_VBDATE,             Global_vbDate, BP_GET},
1440     {DISPID_GLOBAL_VBSTRING,           Global_vbString, BP_GET},
1441     {DISPID_GLOBAL_VBOBJECT,           Global_vbObject, BP_GET},
1442     {DISPID_GLOBAL_VBERROR,            Global_vbError, BP_GET},
1443     {DISPID_GLOBAL_VBBOOLEAN,          Global_vbBoolean, BP_GET},
1444     {DISPID_GLOBAL_VBVARIANT,          Global_vbVariant, BP_GET},
1445     {DISPID_GLOBAL_VBDATAOBJECT,       Global_vbDataObject, BP_GET},
1446     {DISPID_GLOBAL_VBDECIMAL,          Global_vbDecimal, BP_GET},
1447     {DISPID_GLOBAL_VBBYTE,             Global_vbByte, BP_GET},
1448     {DISPID_GLOBAL_VBARRAY,            Global_vbArray, BP_GET},
1449     {DISPID_GLOBAL_VBTRUE,             Global_vbTrue, BP_GET},
1450     {DISPID_GLOBAL_VBFALSE,            Global_vbFalse, BP_GET},
1451     {DISPID_GLOBAL_VBUSEDEFAULT,       Global_vbUseDefault, BP_GET},
1452     {DISPID_GLOBAL_VBBINARYCOMPARE,    Global_vbBinaryCompare, BP_GET},
1453     {DISPID_GLOBAL_VBTEXTCOMPARE,      Global_vbTextCompare, BP_GET},
1454     {DISPID_GLOBAL_VBDATABASECOMPARE,  Global_vbDatabaseCompare, BP_GET},
1455     {DISPID_GLOBAL_VBGENERALDATE,      Global_vbGeneralDate, BP_GET},
1456     {DISPID_GLOBAL_VBLONGDATE,         Global_vbLongDate, BP_GET},
1457     {DISPID_GLOBAL_VBSHORTDATE,        Global_vbShortDate, BP_GET},
1458     {DISPID_GLOBAL_VBLONGTIME,         Global_vbLongTime, BP_GET},
1459     {DISPID_GLOBAL_VBSHORTTIME,        Global_vbShortTime, BP_GET},
1460     {DISPID_GLOBAL_VBOBJECTERROR,      Global_vbObjectError, BP_GET},
1461     {DISPID_GLOBAL_VBBLACK,            Global_vbBlack, BP_GET},
1462     {DISPID_GLOBAL_VBBLUE,             Global_vbBlue, BP_GET},
1463     {DISPID_GLOBAL_VBCYAN,             Global_vbCyan, BP_GET},
1464     {DISPID_GLOBAL_VBGREEN,            Global_vbGreen, BP_GET},
1465     {DISPID_GLOBAL_VBMAGENTA,          Global_vbMagenta, BP_GET},
1466     {DISPID_GLOBAL_VBRED,              Global_vbRed, BP_GET},
1467     {DISPID_GLOBAL_VBWHITE,            Global_vbWhite, BP_GET},
1468     {DISPID_GLOBAL_VBYELLOW,           Global_vbYellow, BP_GET},
1469     {DISPID_GLOBAL_VBCR,               Global_vbCr, BP_GET},
1470     {DISPID_GLOBAL_VBCRLF,             Global_vbCrLf, BP_GET},
1471     {DISPID_GLOBAL_VBNEWLINE,          Global_vbNewLine, BP_GET},
1472     {DISPID_GLOBAL_VBFORMFEED,         Global_vbFormFeed, BP_GET},
1473     {DISPID_GLOBAL_VBLF,               Global_vbLf, BP_GET},
1474     {DISPID_GLOBAL_VBNULLCHAR,         Global_vbNullChar, BP_GET},
1475     {DISPID_GLOBAL_VBNULLSTRING,       Global_vbNullString, BP_GET},
1476     {DISPID_GLOBAL_VBTAB,              Global_vbTab, BP_GET},
1477     {DISPID_GLOBAL_VBVERTICALTAB,      Global_vbVerticalTab, BP_GET},
1478     {DISPID_GLOBAL_CCUR,                      Global_CCur, 0, 1},
1479     {DISPID_GLOBAL_CINT,                      Global_CInt, 0, 1},
1480     {DISPID_GLOBAL_CLNG,                      Global_CLng, 0, 1},
1481     {DISPID_GLOBAL_CBOOL,                     Global_CBool, 0, 1},
1482     {DISPID_GLOBAL_CBYTE,                     Global_CByte, 0, 1},
1483     {DISPID_GLOBAL_CDATE,                     Global_CDate, 0, 1},
1484     {DISPID_GLOBAL_CDBL,                      Global_CDbl, 0, 1},
1485     {DISPID_GLOBAL_CSNG,                      Global_CSng, 0, 1},
1486     {DISPID_GLOBAL_CSTR,                      Global_CStr, 0, 1},
1487     {DISPID_GLOBAL_HEX,                       Global_Hex, 0, 1},
1488     {DISPID_GLOBAL_OCT,                       Global_Oct, 0, 1},
1489     {DISPID_GLOBAL_VARTYPE,                   Global_VarType, 0, 1},
1490     {DISPID_GLOBAL_ISDATE,                    Global_IsDate, 0, 1},
1491     {DISPID_GLOBAL_ISEMPTY,                   Global_IsEmpty, 0, 1},
1492     {DISPID_GLOBAL_ISNULL,                    Global_IsNull, 0, 1},
1493     {DISPID_GLOBAL_ISNUMERIC,                 Global_IsNumeric, 0, 1},
1494     {DISPID_GLOBAL_ISARRAY,                   Global_IsArray, 0, 1},
1495     {DISPID_GLOBAL_ISOBJECT,                  Global_IsObject, 0, 1},
1496     {DISPID_GLOBAL_ATN,                       Global_Ant, 0, 1},
1497     {DISPID_GLOBAL_COS,                       Global_Cos, 0, 1},
1498     {DISPID_GLOBAL_SIN,                       Global_Sin, 0, 1},
1499     {DISPID_GLOBAL_TAN,                       Global_Tan, 0, 1},
1500     {DISPID_GLOBAL_EXP,                       Global_Exp, 0, 1},
1501     {DISPID_GLOBAL_LOG,                       Global_Log, 0, 1},
1502     {DISPID_GLOBAL_SQR,                       Global_Sqr, 0, 1},
1503     {DISPID_GLOBAL_RANDOMIZE,                 Global_Randomize, 0, 1},
1504     {DISPID_GLOBAL_RND,                       Global_Rnd, 0, 1},
1505     {DISPID_GLOBAL_TIMER,                     Global_Timer, 0, 0},
1506     {DISPID_GLOBAL_LBOUND,                    Global_LBound, 0, 1},
1507     {DISPID_GLOBAL_UBOUND,                    Global_UBound, 0, 1},
1508     {DISPID_GLOBAL_RGB,                       Global_RGB, 0, 3},
1509     {DISPID_GLOBAL_LEN,                       Global_Len, 0, 1},
1510     {DISPID_GLOBAL_LENB,                      Global_LenB, 0, 1},
1511     {DISPID_GLOBAL_LEFT,                      Global_Left, 0, 2},
1512     {DISPID_GLOBAL_LEFTB,                     Global_LeftB, 0, 2},
1513     {DISPID_GLOBAL_RIGHT,                     Global_Right, 0, 2},
1514     {DISPID_GLOBAL_RIGHTB,                    Global_RightB, 0, 2},
1515     {DISPID_GLOBAL_MID,                       Global_Mid, 0, 2, 3},
1516     {DISPID_GLOBAL_MIDB,                      Global_MidB, 0, 2, 3},
1517     {DISPID_GLOBAL_STRCOMP,                   Global_StrComp, 0, 2, 3},
1518     {DISPID_GLOBAL_LCASE,                     Global_LCase, 0, 1},
1519     {DISPID_GLOBAL_UCASE,                     Global_UCase, 0, 1},
1520     {DISPID_GLOBAL_LTRIM,                     Global_LTrim, 0, 1},
1521     {DISPID_GLOBAL_RTRIM,                     Global_RTrim, 0, 1},
1522     {DISPID_GLOBAL_TRIM,                      Global_Trim, 0, 1},
1523     {DISPID_GLOBAL_SPACE,                     Global_Space, 0, 1},
1524     {DISPID_GLOBAL_STRING,                    Global_String, 0, 0, 2},
1525     {DISPID_GLOBAL_INSTR,                     Global_InStr, 0, 3, 4},
1526     {DISPID_GLOBAL_INSTRB,                    Global_InStrB, 0, 3, 4},
1527     {DISPID_GLOBAL_ASCB,                      Global_AscB, 0, 1},
1528     {DISPID_GLOBAL_CHRB,                      Global_ChrB, 0, 1},
1529     {DISPID_GLOBAL_ASC,                       Global_Asc, 0, 1},
1530     {DISPID_GLOBAL_CHR,                       Global_Chr, 0, 1},
1531     {DISPID_GLOBAL_ASCW,                      Global_AscW, 0, 1},
1532     {DISPID_GLOBAL_CHRW,                      Global_ChrW, 0, 1},
1533     {DISPID_GLOBAL_ABS,                       Global_Abs, 0, 1},
1534     {DISPID_GLOBAL_FIX,                       Global_Fix, 0, 1},
1535     {DISPID_GLOBAL_INT,                       Global_Int, 0, 1},
1536     {DISPID_GLOBAL_SGN,                       Global_Sgn, 0, 1},
1537     {DISPID_GLOBAL_NOW,                       Global_Now, 0, 0},
1538     {DISPID_GLOBAL_DATE,                      Global_Date, 0, 0},
1539     {DISPID_GLOBAL_TIME,                      Global_Time, 0, 0},
1540     {DISPID_GLOBAL_DAY,                       Global_Day, 0, 1},
1541     {DISPID_GLOBAL_MONTH,                     Global_Month, 0, 1},
1542     {DISPID_GLOBAL_WEEKDAY,                   Global_Weekday, 0, 1, 2},
1543     {DISPID_GLOBAL_YEAR,                      Global_Year, 0, 1},
1544     {DISPID_GLOBAL_HOUR,                      Global_Hour, 0, 1},
1545     {DISPID_GLOBAL_MINUTE,                    Global_Minute, 0, 1},
1546     {DISPID_GLOBAL_SECOND,                    Global_Second, 0, 1},
1547     {DISPID_GLOBAL_DATEVALUE,                 Global_DateValue, 0, 1},
1548     {DISPID_GLOBAL_TIMEVALUE,                 Global_TimeValue, 0, 1},
1549     {DISPID_GLOBAL_DATESERIAL,                Global_DateSerial, 0, 3},
1550     {DISPID_GLOBAL_TIMESERIAL,                Global_TimeSerial, 0, 3},
1551     {DISPID_GLOBAL_INPUTBOX,                  Global_InputBox, 0, 1, 7},
1552     {DISPID_GLOBAL_MSGBOX,                    Global_MsgBox, 0, 1, 5},
1553     {DISPID_GLOBAL_CREATEOBJECT,              Global_CreateObject, 0, 1},
1554     {DISPID_GLOBAL_GETOBJECT,                 Global_GetObject, 0, 0, 2},
1555     {DISPID_GLOBAL_DATEADD,                   Global_DateAdd, 0, 3},
1556     {DISPID_GLOBAL_DATEDIFF,                  Global_DateDiff, 0, 3, 5},
1557     {DISPID_GLOBAL_DATEPART,                  Global_DatePart, 0, 2, 4},
1558     {DISPID_GLOBAL_TYPENAME,                  Global_TypeName, 0, 1},
1559     {DISPID_GLOBAL_ARRAY,                     Global_Array, 0, 1},
1560     {DISPID_GLOBAL_ERASE,                     Global_Erase, 0, 1},
1561     {DISPID_GLOBAL_FILTER,                    Global_Filter, 0, 2, 4},
1562     {DISPID_GLOBAL_JOIN,                      Global_Join, 0, 1, 2},
1563     {DISPID_GLOBAL_SPLIT,                     Global_Split, 0, 1, 4},
1564     {DISPID_GLOBAL_REPLACE,                   Global_Replace, 0, 3, 6},
1565     {DISPID_GLOBAL_STRREVERSE,                Global_StrReverse, 0, 1},
1566     {DISPID_GLOBAL_INSTRREV,                  Global_InStrRev, 0, 2, 4},
1567     {DISPID_GLOBAL_LOADPICTURE,               Global_LoadPicture, 0, 1},
1568     {DISPID_GLOBAL_SCRIPTENGINE,              Global_ScriptEngine, 0, 0},
1569     {DISPID_GLOBAL_SCRIPTENGINEMAJORVERSION,  Global_ScriptEngineMajorVersion, 0, 0},
1570     {DISPID_GLOBAL_SCRIPTENGINEMINORVERSION,  Global_ScriptEngineMinorVersion, 0, 0},
1571     {DISPID_GLOBAL_SCRIPTENGINEBUILDVERSION,  Global_ScriptEngineBuildVersion, 0, 0},
1572     {DISPID_GLOBAL_FORMATNUMBER,              Global_FormatNumber, 0, 1, 5},
1573     {DISPID_GLOBAL_FORMATCURRENCY,            Global_FormatCurrency, 0, 1, 5},
1574     {DISPID_GLOBAL_FORMATPERCENT,             Global_FormatPercent, 0, 1, 5},
1575     {DISPID_GLOBAL_FORMATDATETIME,            Global_FormatDateTime, 0, 1, 2},
1576     {DISPID_GLOBAL_WEEKDAYNAME,               Global_WeekdayName, 0, 3},
1577     {DISPID_GLOBAL_MONTHNAME,                 Global_MonthName, 0, 1, 2},
1578     {DISPID_GLOBAL_ROUND,                     Global_Round, 0, 1, 2},
1579     {DISPID_GLOBAL_ESCAPE,                    Global_Escape, 0, 1},
1580     {DISPID_GLOBAL_UNESCAPE,                  Global_Unescape, 0, 1},
1581     {DISPID_GLOBAL_EVAL,                      Global_Eval, 0, 1},
1582     {DISPID_GLOBAL_EXECUTE,                   Global_Execute, 0, 1},
1583     {DISPID_GLOBAL_EXECUTEGLOBAL,             Global_ExecuteGlobal, 0, 1},
1584     {DISPID_GLOBAL_GETREF,                    Global_GetRef, 0, 1},
1585     {DISPID_GLOBAL_VBMSGBOXHELPBUTTON,     Global_vbMsgBoxHelpButton, BP_GET},
1586     {DISPID_GLOBAL_VBMSGBOXSETFOREGROUND,  Global_vbMsgBoxSetForeground, BP_GET},
1587     {DISPID_GLOBAL_VBMSGBOXRIGHT,          Global_vbMsgBoxRight, BP_GET},
1588     {DISPID_GLOBAL_VBMSGBOXRTLREADING,     Global_vbMsgBoxRtlReading, BP_GET}
1589 };
1590
1591 HRESULT init_global(script_ctx_t *ctx)
1592 {
1593     HRESULT hres;
1594
1595     ctx->global_desc.ctx = ctx;
1596     ctx->global_desc.builtin_prop_cnt = sizeof(global_props)/sizeof(*global_props);
1597     ctx->global_desc.builtin_props = global_props;
1598
1599     hres = get_typeinfo(GlobalObj_tid, &ctx->global_desc.typeinfo);
1600     if(FAILED(hres))
1601         return hres;
1602
1603     hres = create_vbdisp(&ctx->global_desc, &ctx->global_obj);
1604     if(FAILED(hres))
1605         return hres;
1606
1607     ctx->script_desc.ctx = ctx;
1608     hres = create_vbdisp(&ctx->script_desc, &ctx->script_obj);
1609     if(FAILED(hres))
1610         return hres;
1611
1612     return init_err(ctx);
1613 }