PageRenderTime 72ms CodeModel.GetById 62ms app.highlight 7ms RepoModel.GetById 1ms app.codeStats 0ms

/Modules/tkappinit.c

http://unladen-swallow.googlecode.com/
C | 149 lines | 103 code | 24 blank | 22 comment | 17 complexity | 46fcc6e614e6c0f671fe9aa68256ca89 MD5 | raw file
  1/* appinit.c -- Tcl and Tk application initialization.
  2
  3   The function Tcl_AppInit() below initializes various Tcl packages.
  4   It is called for each Tcl interpreter created by _tkinter.create().
  5   It needs to be compiled with -DWITH_<package> flags for each package
  6   that you are statically linking with.  You may have to add sections
  7   for packages not yet listed below.
  8
  9   Note that those packages for which Tcl_StaticPackage() is called with
 10   a NULL first argument are known as "static loadable" packages to
 11   Tcl but not actually initialized.  To use these, you have to load
 12   it explicitly, e.g. tkapp.eval("load {} Blt").
 13 */
 14
 15#include <string.h>
 16#include <tcl.h>
 17#include <tk.h>
 18
 19int
 20Tcl_AppInit(Tcl_Interp *interp)
 21{
 22	Tk_Window main_window;
 23	const char * _tkinter_skip_tk_init;
 24
 25#ifdef TK_AQUA
 26#ifndef MAX_PATH_LEN
 27#define MAX_PATH_LEN 1024
 28#endif
 29	char tclLibPath[MAX_PATH_LEN], tkLibPath[MAX_PATH_LEN];
 30	Tcl_Obj*	pathPtr;
 31
 32        /* pre- Tcl_Init code copied from tkMacOSXAppInit.c */
 33	Tk_MacOSXOpenBundleResources (interp, "com.tcltk.tcllibrary",
 34       	tclLibPath, MAX_PATH_LEN, 0);
 35
 36	if (tclLibPath[0] != '\0') {
 37       	Tcl_SetVar(interp, "tcl_library", tclLibPath, TCL_GLOBAL_ONLY);
 38		Tcl_SetVar(interp, "tclDefaultLibrary", tclLibPath, TCL_GLOBAL_ONLY);
 39		Tcl_SetVar(interp, "tcl_pkgPath", tclLibPath, TCL_GLOBAL_ONLY);
 40	}
 41	
 42   	if (tclLibPath[0] != '\0') {
 43		Tcl_SetVar(interp, "tcl_library", tclLibPath, TCL_GLOBAL_ONLY);
 44		Tcl_SetVar(interp, "tclDefaultLibrary", tclLibPath, TCL_GLOBAL_ONLY);
 45		Tcl_SetVar(interp, "tcl_pkgPath", tclLibPath, TCL_GLOBAL_ONLY);
 46	}
 47#endif
 48	if (Tcl_Init (interp) == TCL_ERROR)
 49		return TCL_ERROR;
 50
 51#ifdef TK_AQUA
 52        /* pre- Tk_Init code copied from tkMacOSXAppInit.c */
 53	Tk_MacOSXOpenBundleResources (interp, "com.tcltk.tklibrary",
 54            tkLibPath, MAX_PATH_LEN, 1);
 55
 56	if (tclLibPath[0] != '\0') {
 57		pathPtr = Tcl_NewStringObj(tclLibPath, -1);
 58	} else {
 59		Tcl_Obj *pathPtr = TclGetLibraryPath();
 60	}
 61
 62	if (tkLibPath[0] != '\0') {
 63		Tcl_Obj *objPtr;
 64
 65		Tcl_SetVar(interp, "tk_library", tkLibPath, TCL_GLOBAL_ONLY);
 66		objPtr = Tcl_NewStringObj(tkLibPath, -1);
 67		Tcl_ListObjAppendElement(NULL, pathPtr, objPtr);
 68	}
 69
 70	TclSetLibraryPath(pathPtr);
 71#endif
 72
 73#ifdef WITH_XXX
 74		/* Initialize modules that don't require Tk */
 75#endif
 76
 77	_tkinter_skip_tk_init =	Tcl_GetVar(interp, "_tkinter_skip_tk_init", TCL_GLOBAL_ONLY);
 78	if (_tkinter_skip_tk_init != NULL && strcmp(_tkinter_skip_tk_init, "1")	== 0) {
 79		return TCL_OK;
 80	}
 81	if (Tk_Init(interp) == TCL_ERROR)
 82		return TCL_ERROR;
 83
 84	main_window = Tk_MainWindow(interp);
 85
 86#ifdef TK_AQUA
 87	TkMacOSXInitAppleEvents(interp);
 88	TkMacOSXInitMenus(interp);
 89#endif
 90    
 91#ifdef WITH_MOREBUTTONS
 92	{
 93		extern Tcl_CmdProc studButtonCmd;
 94		extern Tcl_CmdProc triButtonCmd;
 95
 96		Tcl_CreateCommand(interp, "studbutton", studButtonCmd,
 97				  (ClientData) main_window, NULL);
 98		Tcl_CreateCommand(interp, "tributton", triButtonCmd,
 99				  (ClientData) main_window, NULL);
100	}
101#endif
102
103#ifdef WITH_PIL /* 0.2b5 and later -- not yet released as of May 14 */
104	{
105		extern void TkImaging_Init(Tcl_Interp *);
106		TkImaging_Init(interp);
107		/* XXX TkImaging_Init() doesn't have the right return type */
108		/*Tcl_StaticPackage(interp, "Imaging", TkImaging_Init, NULL);*/
109	}
110#endif
111
112#ifdef WITH_PIL_OLD /* 0.2b4 and earlier */
113	{
114		extern void TkImaging_Init(void);
115		/* XXX TkImaging_Init() doesn't have the right prototype */
116		/*Tcl_StaticPackage(interp, "Imaging", TkImaging_Init, NULL);*/
117	}
118#endif
119
120#ifdef WITH_TIX
121        {
122                extern int Tix_Init(Tcl_Interp *interp);
123                extern int Tix_SafeInit(Tcl_Interp *interp);
124                Tcl_StaticPackage(NULL, "Tix", Tix_Init, Tix_SafeInit);
125        }
126#endif
127
128#ifdef WITH_BLT
129	{
130		extern int Blt_Init(Tcl_Interp *);
131		extern int Blt_SafeInit(Tcl_Interp *);
132		Tcl_StaticPackage(NULL, "Blt", Blt_Init, Blt_SafeInit);
133	}
134#endif
135
136#ifdef WITH_TOGL
137	{
138		/* XXX I've heard rumors that this doesn't work */
139		extern int Togl_Init(Tcl_Interp *);
140		/* XXX Is there no Togl_SafeInit? */
141		Tcl_StaticPackage(NULL, "Togl", Togl_Init, NULL);
142	}
143#endif
144
145#ifdef WITH_XXX
146
147#endif
148	return TCL_OK;
149}