1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
#define IMPORT_VTABLE(ptr,type,name) do { \
ptr = INT2PTR(type *,SvIV(get_sv(name,GV_ADDWARN|GV_ADD))); \
if ((*ptr->tabSize)() != sizeof(type)) { \
Perl_warn(aTHX_ "%s wrong size for %s",name,#type); \
} \
} while (0)
#ifdef WIN32
#define DECLARE_VTABLES \
LangVtab *LangVptr; \
TcldeclsVtab *TcldeclsVptr; \
TkVtab *TkVptr; \
TkdeclsVtab *TkdeclsVptr; \
TkeventVtab *TkeventVptr; \
TkglueVtab *TkglueVptr; \
TkintVtab *TkintVptr; \
TkintdeclsVtab *TkintdeclsVptr; \
TkintplatdeclsVtab *TkintplatdeclsVptr;\
TkintxlibdeclsVtab *TkintxlibdeclsVptr;\
TkoptionVtab *TkoptionVptr; \
TkplatdeclsVtab *TkplatdeclsVptr
#define IMPORT_VTABLES do { \
IMPORT_VTABLE(LangVptr , LangVtab,"Tk::LangVtab"); \
IMPORT_VTABLE(TcldeclsVptr , TcldeclsVtab,"Tk::TcldeclsVtab"); \
IMPORT_VTABLE(TkVptr , TkVtab,"Tk::TkVtab"); \
IMPORT_VTABLE(TkdeclsVptr , TkdeclsVtab,"Tk::TkdeclsVtab"); \
IMPORT_VTABLE(TkeventVptr , TkeventVtab,"Tk::TkeventVtab"); \
IMPORT_VTABLE(TkglueVptr , TkglueVtab,"Tk::TkglueVtab"); \
IMPORT_VTABLE(TkintVptr , TkintVtab,"Tk::TkintVtab"); \
IMPORT_VTABLE(TkintdeclsVptr , TkintdeclsVtab,"Tk::TkintdeclsVtab"); \
IMPORT_VTABLE(TkintplatdeclsVptr,TkintplatdeclsVtab,"Tk::TkintplatdeclsVtab"); \
IMPORT_VTABLE(TkintxlibdeclsVptr,TkintxlibdeclsVtab,"Tk::TkintxlibdeclsVtab"); \
IMPORT_VTABLE(TkoptionVptr , TkoptionVtab,"Tk::TkoptionVtab"); \
IMPORT_VTABLE(TkplatdeclsVptr , TkplatdeclsVtab,"Tk::TkplatdeclsVtab"); \
} while (0)
#else
#define DECLARE_VTABLES \
LangVtab *LangVptr; \
TcldeclsVtab *TcldeclsVptr; \
TkVtab *TkVptr; \
TkdeclsVtab *TkdeclsVptr; \
TkeventVtab *TkeventVptr; \
TkglueVtab *TkglueVptr; \
TkintVtab *TkintVptr; \
TkintdeclsVtab *TkintdeclsVptr; \
TkoptionVtab *TkoptionVptr; \
XlibVtab *XlibVptr
#define IMPORT_VTABLES do { \
IMPORT_VTABLE(LangVptr , LangVtab,"Tk::LangVtab"); \
IMPORT_VTABLE(TcldeclsVptr , TcldeclsVtab,"Tk::TcldeclsVtab"); \
IMPORT_VTABLE(TkVptr , TkVtab,"Tk::TkVtab"); \
IMPORT_VTABLE(TkdeclsVptr , TkdeclsVtab,"Tk::TkdeclsVtab"); \
IMPORT_VTABLE(TkeventVptr , TkeventVtab,"Tk::TkeventVtab"); \
IMPORT_VTABLE(TkglueVptr , TkglueVtab,"Tk::TkglueVtab"); \
IMPORT_VTABLE(TkintVptr , TkintVtab,"Tk::TkintVtab"); \
IMPORT_VTABLE(TkintdeclsVptr , TkintdeclsVtab,"Tk::TkintdeclsVtab"); \
IMPORT_VTABLE(TkoptionVptr , TkoptionVtab,"Tk::TkoptionVtab"); \
IMPORT_VTABLE(XlibVptr , XlibVtab,"Tk::XlibVtab"); \
} while (0)
#endif
#define DECLARE_TIX \
TixVtab *TixVptr; \
TixintVtab *TixintVptr
#define IMPORT_TIX do { \
IMPORT_VTABLE(TixVptr , TixVtab,"Tk::TixVtab"); \
IMPORT_VTABLE(TixintVptr , TixintVtab,"Tk::TixintVtab"); \
} while (0)
#define DECLARE_PHOTO \
ImgintVtab *ImgintVptr; \
TkimgphotoVtab *TkimgphotoVptr
#define IMPORT_PHOTO do { \
IMPORT_VTABLE(ImgintVptr , ImgintVtab,"Tk::ImgintVtab"); \
IMPORT_VTABLE(TkimgphotoVptr , TkimgphotoVtab,"Tk::TkimgphotoVtab"); \
} while (0)
#define DECLARE_EVENT \
TkeventVtab *TkeventVptr
#define IMPORT_EVENT do { \
IMPORT_VTABLE(TkeventVptr , TkeventVtab,"Tk::TkeventVtab"); \
} while (0)
#define DECLARE_TIXXPM \
TiximgxpmVtab *TiximgxpmVptr
#define IMPORT_TIXXPM do { \
IMPORT_VTABLE(TiximgxpmVptr , TiximgxpmVtab,"Tk::TiximgxpmVtab"); \
} while (0)
|