int Tcl_AppInit(Tcl_Interp *interp) { Tk_Window main_window; const char * _tkinter_skip_tk_init; #ifdef TK_AQUA #ifndef MAX_PATH_LEN #define MAX_PATH_LEN 1024 #endif char tclLibPath[MAX_PATH_LEN], tkLibPath[MAX_PATH_LEN]; Tcl_Obj* pathPtr; /* pre- Tcl_Init code copied from tkMacOSXAppInit.c */ Tk_MacOSXOpenBundleResources (interp, "com.tcltk.tcllibrary", tclLibPath, MAX_PATH_LEN, 0); if (tclLibPath[0] != '\0') { Tcl_SetVar(interp, "tcl_library", tclLibPath, TCL_GLOBAL_ONLY); Tcl_SetVar(interp, "tclDefaultLibrary", tclLibPath, TCL_GLOBAL_ONLY); Tcl_SetVar(interp, "tcl_pkgPath", tclLibPath, TCL_GLOBAL_ONLY); } if (tclLibPath[0] != '\0') { Tcl_SetVar(interp, "tcl_library", tclLibPath, TCL_GLOBAL_ONLY); Tcl_SetVar(interp, "tclDefaultLibrary", tclLibPath, TCL_GLOBAL_ONLY); Tcl_SetVar(interp, "tcl_pkgPath", tclLibPath, TCL_GLOBAL_ONLY); } #endif if (Tcl_Init (interp) == TCL_ERROR) return TCL_ERROR; #ifdef TK_AQUA /* pre- Tk_Init code copied from tkMacOSXAppInit.c */ Tk_MacOSXOpenBundleResources (interp, "com.tcltk.tklibrary", tkLibPath, MAX_PATH_LEN, 1); if (tclLibPath[0] != '\0') { pathPtr = Tcl_NewStringObj(tclLibPath, -1); } else { Tcl_Obj *pathPtr = TclGetLibraryPath(); } if (tkLibPath[0] != '\0') { Tcl_Obj *objPtr; Tcl_SetVar(interp, "tk_library", tkLibPath, TCL_GLOBAL_ONLY); objPtr = Tcl_NewStringObj(tkLibPath, -1); Tcl_ListObjAppendElement(NULL, pathPtr, objPtr); } TclSetLibraryPath(pathPtr); #endif #ifdef WITH_XXX // Initialize modules that don't require Tk #endif _tkinter_skip_tk_init = Tcl_GetVar(interp, "_tkinter_skip_tk_init", TCL_GLOBAL_ONLY); if (_tkinter_skip_tk_init != NULL && strcmp(_tkinter_skip_tk_init, "1") == 0) { return TCL_OK; } if (Tk_Init(interp) == TCL_ERROR) return TCL_ERROR; main_window = Tk_MainWindow(interp); #ifdef TK_AQUA TkMacOSXInitAppleEvents(interp); TkMacOSXInitMenus(interp); #endif #ifdef WITH_MOREBUTTONS { extern Tcl_CmdProc studButtonCmd; extern Tcl_CmdProc triButtonCmd; Tcl_CreateCommand(interp, "studbutton", studButtonCmd, (ClientData) main_window, NULL); Tcl_CreateCommand(interp, "tributton", triButtonCmd, (ClientData) main_window, NULL); } #endif #ifdef WITH_PIL /* 0.2b5 and later -- not yet released as of May 14 */ { extern void TkImaging_Init(Tcl_Interp *); TkImaging_Init(interp); /* XXX TkImaging_Init() doesn't have the right return type */ /*Tcl_StaticPackage(interp, "Imaging", TkImaging_Init, NULL);*/ } #endif #ifdef WITH_PIL_OLD /* 0.2b4 and earlier */ { extern void TkImaging_Init(void); /* XXX TkImaging_Init() doesn't have the right prototype */ /*Tcl_StaticPackage(interp, "Imaging", TkImaging_Init, NULL);*/ } #endif #ifdef WITH_TIX { extern int Tix_Init(Tcl_Interp *interp); extern int Tix_SafeInit(Tcl_Interp *interp); Tcl_StaticPackage(NULL, "Tix", Tix_Init, Tix_SafeInit); } #endif #ifdef WITH_BLT { extern int Blt_Init(Tcl_Interp *); extern int Blt_SafeInit(Tcl_Interp *); Tcl_StaticPackage(NULL, "Blt", Blt_Init, Blt_SafeInit); } #endif #ifdef WITH_TOGL { /* XXX I've heard rumors that this doesn't work */ extern int Togl_Init(Tcl_Interp *); /* XXX Is there no Togl_SafeInit? */ Tcl_StaticPackage(NULL, "Togl", Togl_Init, NULL); } #endif #ifdef WITH_XXX #endif return TCL_OK; }
/*--------------------------------------------------------------------------*/ BOOL SetTclTkEnvironment(char *DefaultPath) { #define TCL_LIBRARY "TCL_LIBRARY" #define TCL_LIBRARY_FORMAT "%s/modules/tclsci/tcl/tcl%d.%d" #define TK_LIBRARY "TK_LIBRARY" #define TK_LIBRARY_FORMAT "%s/modules/tclsci/tcl/tk%d.%d" #define TCL_DEFAULT_ENCODING_DIR_FORMAT "%s/modules/tclsci/tcl/tcl%d.%d/encoding" int tcl_major = 8; int tcl_minor = 4; /* default */ int tcl_patchLevel = 0; int tcl_type = 0; BOOL bOK = TRUE; char TCL_LIBRARY_PATH[PATH_MAX]; char TK_LIBRARY_PATH[PATH_MAX]; char TCL_DEFAULT_ENCODING_DIR[PATH_MAX]; Tcl_DString encodingName; char ShortPath[PATH_MAX]; char *CopyOfDefaultPath = NULL; Tcl_Obj *pathPtr = NULL; Tcl_Obj *objPtr = NULL; CopyOfDefaultPath = MALLOC(((int)strlen(DefaultPath) + 1) * sizeof(char)); if (CopyOfDefaultPath == NULL) { return FALSE; } if (getScilabMode() == SCILAB_STD) { /* redirect stdout, stderr in console */ freopen("CONOUT$", "wb", stdout); /* redirect stdout --> CONOUT$*/ freopen("CONOUT$", "wb", stderr); /* redirect stderr --> CONOUT$*/ } Tcl_GetVersion(&tcl_major, &tcl_minor, &tcl_patchLevel, &tcl_type); GetShortPathName(DefaultPath, ShortPath, PATH_MAX); AntislashToSlash(ShortPath, CopyOfDefaultPath); sprintf (TCL_LIBRARY_PATH, TCL_LIBRARY_FORMAT, CopyOfDefaultPath, tcl_major, tcl_minor); sprintf (TK_LIBRARY_PATH, TK_LIBRARY_FORMAT, CopyOfDefaultPath, tcl_major, tcl_minor); sprintf (TCL_DEFAULT_ENCODING_DIR, TCL_DEFAULT_ENCODING_DIR_FORMAT, CopyOfDefaultPath, tcl_major, tcl_minor); if (CopyOfDefaultPath) { FREE(CopyOfDefaultPath); CopyOfDefaultPath = NULL; } /* TCL_LIBRARY initialization */ SetEnvironmentVariable(TCL_LIBRARY, TCL_LIBRARY_PATH); setenvtcl(TCL_LIBRARY, TCL_LIBRARY_PATH); if (Tcl_SetVar(getTclInterp(), "tcl_library", TCL_LIBRARY_PATH, TCL_GLOBAL_ONLY) == NULL) { releaseTclInterp(); fprintf(stderr, _("%s: An error occurred: %s\n"), "tcl_library", _("Impossible to set environment variable.")); bOK = FALSE; } releaseTclInterp(); if (Tcl_SetVar(getTclInterp(), "tclDefaultLibrary", TCL_LIBRARY_PATH, TCL_GLOBAL_ONLY) == NULL) { releaseTclInterp(); fprintf(stderr, _("%s: An error occurred: %s\n"), "tclDefaultLibrary", _("Impossible to set environment variable.")); bOK = FALSE; } releaseTclInterp(); if (Tcl_SetVar(getTclInterp(), "tcl_pkgPath", TCL_LIBRARY_PATH, TCL_GLOBAL_ONLY) == NULL) { releaseTclInterp(); fprintf(stderr, _("%s: An error occurred: %s\n"), "tcl_pkgPath", _("Impossible to set environment variable.")); bOK = FALSE; } releaseTclInterp(); pathPtr = Tcl_NewStringObj(TCL_LIBRARY_PATH, -1); /* TK_LIBRARY initialization */ SetEnvironmentVariable(TK_LIBRARY, TK_LIBRARY_PATH); setenvtcl(TK_LIBRARY, TK_LIBRARY_PATH); if (Tcl_SetVar(getTclInterp(), "tk_library", TK_LIBRARY_PATH, TCL_GLOBAL_ONLY) == NULL) { releaseTclInterp(); fprintf(stderr, _("%s: An error occurred: %s\n"), "tk_library", _("Impossible to set environment variable.")); bOK = FALSE; } releaseTclInterp(); objPtr = Tcl_NewStringObj(TK_LIBRARY_PATH, -1); Tcl_ListObjAppendElement(NULL, pathPtr, objPtr); TclSetLibraryPath(pathPtr); /* encoding initialization */ Tcl_SetDefaultEncodingDir(TCL_DEFAULT_ENCODING_DIR); if ( Tcl_SetSystemEncoding(NULL, Tcl_GetEncodingNameFromEnvironment(&encodingName)) == TCL_ERROR ) { fprintf(stderr, _("%s: An error occurred: %s\n"), "Tcl_SetSystemEncoding", _("Impossible to set system encoding.")); bOK = FALSE; } Tcl_DStringFree(&encodingName); return bOK ; }