--- tclUnixInit.c.orig Wed Oct 13 00:32:49 1999 +++ tclUnixInit.c Wed Feb 21 21:14:45 2001 @@ -369,7 +369,9 @@ int i; Tcl_Obj *pathPtr; char *langEnv; +#ifndef I18N_IMPROVE Tcl_DString ds; +#endif /* !I18N_IMPROVE */ /* * Determine the current encoding from the LC_* or LANG environment @@ -432,6 +434,7 @@ Tcl_SetSystemEncoding(NULL, encoding); +#ifndef I18N_IMPROVE /* * Initialize the C library's locale subsystem. This is required * for input methods to work properly on X11. Note that we need to @@ -445,6 +448,48 @@ setlocale(LC_ALL, ""); setlocale(LC_ALL, Tcl_DStringValue(&ds)); Tcl_DStringFree(&ds); +#else + /* + * + * If setlocale(LC_ALL, "") are once called, NOT reset to "C" + * BECAUSE OF X11 uses locale sensitive libc routines such as: + * + * mblen() + * mbstowcs() + * wcstombs() + * + * Calling setlocale() with proper locale is of course needed, + * futhermore, keeping the proper locale setting is ALSO needed + * for proper XIM operation. If not, in the worst case, Tk dumps + * core. + * + * And here's another story: + * + * X11[56]'s internationalization depends on "locale model" + * supported by C language (runtime). But unfortunately, on some + * (many) systems, setlocale(3) supports only "C" locale. For such + * a system, X11 library has _Xsetlocale() (and some locale + * sensitive C runtime function like the mblen(), even If these + * function are not well-implemented, sigh). If on such a system, + * we should't call: + * + * setlocale(LC_ALL) + * or + * setlocale(LC_CTYPE) + * + * at here because Tcl won't be linked with X11 libraries and + * nobody want to use the Tcl library that needs X11 libraries at + * execution/linkage time. Instead, call setlocale() (expanded to + * _Xsetlocale() with C preprocessor macro in if + * X_LOCLAE C preprocessor macro is defined, normaly done in Imake + * environment) at the initializing of Tk. So, at here, I just + * call only setlocale(LC_NUMERIC) since X11's internationalize + * implementation only depends on LC_CTYPE categoly (of cource + * LC_ALL includes this), This must be harmless and might let the + * Tcl and the Tk with XIM be both happy :) + * + */ +#endif /* !I18N_IMPROVE */ /* * In case the initial locale is not "C", ensure that the numeric