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