1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | #include <string.h> |
16 | #include <tcl.h> |
17 | #include <tk.h> |
18 | |
19 | #include "tkinter.h" |
20 | |
21 | #ifdef TKINTER_PROTECT_LOADTK |
22 | |
23 | static int tk_load_failed; |
24 | #endif |
25 | |
26 | int |
27 | Tcl_AppInit(Tcl_Interp *interp) |
28 | { |
29 | Tk_Window main_window; |
30 | const char *_tkinter_skip_tk_init; |
31 | #ifdef TKINTER_PROTECT_LOADTK |
32 | const char *_tkinter_tk_failed; |
33 | #endif |
34 | |
35 | #ifdef TK_AQUA |
36 | #ifndef MAX_PATH_LEN |
37 | #define MAX_PATH_LEN 1024 |
38 | #endif |
39 | char tclLibPath[MAX_PATH_LEN], tkLibPath[MAX_PATH_LEN]; |
40 | Tcl_Obj* pathPtr; |
41 | |
42 | |
43 | Tk_MacOSXOpenBundleResources (interp, "com.tcltk.tcllibrary", |
44 | tclLibPath, MAX_PATH_LEN, 0); |
45 | |
46 | if (tclLibPath[0] != '\0') { |
47 | Tcl_SetVar(interp, "tcl_library", tclLibPath, TCL_GLOBAL_ONLY1); |
48 | Tcl_SetVar(interp, "tclDefaultLibrary", tclLibPath, TCL_GLOBAL_ONLY1); |
49 | Tcl_SetVar(interp, "tcl_pkgPath", tclLibPath, TCL_GLOBAL_ONLY1); |
50 | } |
51 | |
52 | if (tclLibPath[0] != '\0') { |
53 | Tcl_SetVar(interp, "tcl_library", tclLibPath, TCL_GLOBAL_ONLY1); |
54 | Tcl_SetVar(interp, "tclDefaultLibrary", tclLibPath, TCL_GLOBAL_ONLY1); |
55 | Tcl_SetVar(interp, "tcl_pkgPath", tclLibPath, TCL_GLOBAL_ONLY1); |
56 | } |
57 | #endif |
58 | if (Tcl_Init (interp) == TCL_ERROR1) |
59 | return TCL_ERROR1; |
60 | |
61 | #ifdef TK_AQUA |
62 | |
63 | Tk_MacOSXOpenBundleResources (interp, "com.tcltk.tklibrary", |
64 | tkLibPath, MAX_PATH_LEN, 1); |
65 | |
66 | if (tclLibPath[0] != '\0') { |
67 | pathPtr = Tcl_NewStringObj(tclLibPath, -1); |
68 | } else { |
69 | Tcl_Obj *pathPtr = TclGetLibraryPath(); |
70 | } |
71 | |
72 | if (tkLibPath[0] != '\0') { |
73 | Tcl_Obj *objPtr; |
74 | |
75 | Tcl_SetVar(interp, "tk_library", tkLibPath, TCL_GLOBAL_ONLY1); |
76 | objPtr = Tcl_NewStringObj(tkLibPath, -1); |
77 | Tcl_ListObjAppendElement(NULL((void*)0), pathPtr, objPtr); |
78 | } |
79 | |
80 | TclSetLibraryPath(pathPtr); |
81 | #endif |
82 | |
83 | #ifdef WITH_XXX |
84 | |
85 | #endif |
86 | |
87 | _tkinter_skip_tk_init = Tcl_GetVar(interp, |
88 | "_tkinter_skip_tk_init", TCL_GLOBAL_ONLY1); |
89 | if (_tkinter_skip_tk_init != NULL((void*)0) && |
90 | strcmp(_tkinter_skip_tk_init, "1") == 0) { |
91 | return TCL_OK0; |
92 | } |
93 | |
94 | #ifdef TKINTER_PROTECT_LOADTK |
95 | _tkinter_tk_failed = Tcl_GetVar(interp, |
96 | "_tkinter_tk_failed", TCL_GLOBAL_ONLY1); |
97 | |
98 | if (tk_load_failed || ( |
99 | _tkinter_tk_failed != NULL((void*)0) && |
100 | strcmp(_tkinter_tk_failed, "1") == 0)) { |
101 | Tcl_SetResult(interp, TKINTER_LOADTK_ERRMSG, TCL_STATIC((Tcl_FreeProc *) 0)); |
102 | return TCL_ERROR1; |
103 | } |
104 | #endif |
105 | |
106 | if (Tk_Init(interp) == TCL_ERROR1) { |
107 | #ifdef TKINTER_PROTECT_LOADTK |
108 | tk_load_failed = 1; |
109 | Tcl_SetVar(interp, "_tkinter_tk_failed", "1", TCL_GLOBAL_ONLY1); |
110 | #endif |
111 | return TCL_ERROR1; |
112 | } |
113 | |
114 | main_window = Tk_MainWindow(interp); |
| Value stored to 'main_window' is never read |
115 | |
116 | #ifdef TK_AQUA |
117 | TkMacOSXInitAppleEvents(interp); |
118 | TkMacOSXInitMenus(interp); |
119 | #endif |
120 | |
121 | #ifdef WITH_MOREBUTTONS |
122 | { |
123 | extern Tcl_CmdProc studButtonCmd; |
124 | extern Tcl_CmdProc triButtonCmd; |
125 | |
126 | Tcl_CreateCommand(interp, "studbutton", studButtonCmd, |
127 | (ClientData) main_window, NULL((void*)0)); |
128 | Tcl_CreateCommand(interp, "tributton", triButtonCmd, |
129 | (ClientData) main_window, NULL((void*)0)); |
130 | } |
131 | #endif |
132 | |
133 | #ifdef WITH_PIL /* 0.2b5 and later -- not yet released as of May 14 */ |
134 | { |
135 | extern void TkImaging_Init(Tcl_Interp *); |
136 | TkImaging_Init(interp); |
137 | |
138 | |
139 | } |
140 | #endif |
141 | |
142 | #ifdef WITH_PIL_OLD /* 0.2b4 and earlier */ |
143 | { |
144 | extern void TkImaging_Init(void); |
145 | |
146 | |
147 | } |
148 | #endif |
149 | |
150 | #ifdef WITH_TIX |
151 | { |
152 | extern int Tix_Init(Tcl_Interp *interp); |
153 | extern int Tix_SafeInit(Tcl_Interp *interp); |
154 | Tcl_StaticPackage(NULL((void*)0), "Tix", Tix_Init, Tix_SafeInit); |
155 | } |
156 | #endif |
157 | |
158 | #ifdef WITH_BLT |
159 | { |
160 | extern int Blt_Init(Tcl_Interp *); |
161 | extern int Blt_SafeInit(Tcl_Interp *); |
162 | Tcl_StaticPackage(NULL((void*)0), "Blt", Blt_Init, Blt_SafeInit); |
163 | } |
164 | #endif |
165 | |
166 | #ifdef WITH_TOGL |
167 | { |
168 | |
169 | extern int Togl_Init(Tcl_Interp *); |
170 | |
171 | Tcl_StaticPackage(NULL((void*)0), "Togl", Togl_Init, NULL((void*)0)); |
172 | } |
173 | #endif |
174 | |
175 | #ifdef WITH_XXX |
176 | |
177 | #endif |
178 | return TCL_OK0; |
179 | } |