summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2013-03-26 10:20:03 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2013-03-26 10:20:03 (GMT)
commit0f7738a13cb65627117c5c372833154722bdd48f (patch)
tree9fb3a4c9979d3c32a95e6895e54e3e0c5f62ddfa
parent542bec543027d378a9545cc7678a51a388118597 (diff)
downloadtcl-0f7738a13cb65627117c5c372833154722bdd48f.zip
tcl-0f7738a13cb65627117c5c372833154722bdd48f.tar.gz
tcl-0f7738a13cb65627117c5c372833154722bdd48f.tar.bz2
Version having TCL_INIT_PANIC as only Tcl_InitSubsystems() flag
-rw-r--r--doc/InitSubSyst.331
-rw-r--r--generic/tcl.h6
-rw-r--r--generic/tclEncoding.c44
3 files changed, 4 insertions, 77 deletions
diff --git a/doc/InitSubSyst.3 b/doc/InitSubSyst.3
index c23f2a3..0125912 100644
--- a/doc/InitSubSyst.3
+++ b/doc/InitSubSyst.3
@@ -18,8 +18,8 @@ Tcl_Interp *
.SH ARGUMENTS
.AS int flags
.AP int flags in
-Any combination of flags which indicate whether a custom panicProc
-is registered and/or a real interpreter is created.
+Any combination of flags which might modify the initialization sequence.
+At this moment, only 0 and \fBTCL_INIT_PANIC\fR are supported.
The value 0 can be used if Tcl is used as utility library only.
.BE
@@ -74,33 +74,6 @@ could call \fBTcl_SetPanicProc\fR immediately after \fBTcl_InitSubsystems\fR,
but then panics which could be produced by the initialization
itself still use the default panic procedure.
.PP
-If you supply one of the flags \fBTCL_INIT_CREATE\fR, \fBTCL_INIT_CREATE_UTF8\fR or
-\fBTCL_INIT_CREATE_UNICODE\fR to \fBTcl_InitSubsystems\fR, the function
-gets two additional parameters, argc and argv. Then a real
-Tcl interpreter will be created. If argc > 0 then the variables
-\fBargc\fR and \fBargv\fR will be set in this interpreter. The 3
-variants assume a different encoding for the arguments, except for
-\fIargv[0]\fR which is always assumed to be in the system encoding.
-So, the above example code could be simplified to:
-.CS
-Tcl_Interp *interp = Tcl_InitSubSystems(TCL_INIT_CREATE, 0, NULL);
-Tcl_InitStubs(interp, TCL_VERSION, 0); /* initialize the stub table */
-.CE
-.PP
-If the \fBTCL_INIT_PANIC\fR and one of the \fBTCL_INIT_CREATE\fR
-flags are used in combination, the \fBpanicProc\fR argument comes
-before the argc/argv arguments.
-.PP
-The reason for \fBargv[0]\fR always using the system encoding is that this way,
-argv[0] can be derived directly from the main() (or mainw, on Windows)
-arguments without any processing. \fBTCL_INIT_CREATE_UNICODE\fR is really only
-useful on Windows. But on Windows, the argv[0] parameter is not used for
-determining the value of [info executable] anyway. Modern UNIX system already
-have UTF-8 as system encoding, so \fBTCL_INIT_CREATE_UTF8\fR would have the same
-effect as \fBTCL_INIT_CREATE\fR, only slightly faster. Other parameters can be
-preprocessed at will by the application, and if the application uses unicode
-or UTF-8 internally there is no need to convert it back to the system encoding.
-.PP
The interpreter returned by Tcl_InitSubsystems(0) cannot be passed to
any other function than Tcl_InitStubs(). Tcl functions with an "interp"
argument can only be called if the function supports passing NULL.
diff --git a/generic/tcl.h b/generic/tcl.h
index eda9eb9..4049c8a 100644
--- a/generic/tcl.h
+++ b/generic/tcl.h
@@ -2409,13 +2409,9 @@ const char * TclTomMathInitializeStubs(Tcl_Interp *interp,
* TODO - tommath stubs export goes here!
*/
-/* Tcl_InitSubsystems, see TIP 414 */
+/* Tcl_InitSubsystems, see TIP #414 */
#define TCL_INIT_PANIC (1) /* Set Panic proc */
-#define TCL_INIT_ENCODINGPATH (2) /* Set encoding path */
-#define TCL_INIT_CREATE (48) /* Call Tcl_CreateInterp(), and set argc/argv */
-#define TCL_INIT_CREATE_UNICODE (16) /* The same, but argv is in unicode */
-#define TCL_INIT_CREATE_UTF8 (32) /* The same, but argv is in utf-8 */
EXTERN Tcl_Interp *Tcl_InitSubsystems(int flags, ...);
diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c
index dfcca14..0ffc481 100644
--- a/generic/tclEncoding.c
+++ b/generic/tclEncoding.c
@@ -1446,58 +1446,16 @@ Tcl_Interp *
Tcl_InitSubsystems(int flags, ...)
{
va_list argList;
- int argc = 0;
- void **argv = NULL;
- const char *encodingpath = NULL;
va_start(argList, flags);
if (flags & TCL_INIT_PANIC) {
Tcl_SetPanicProc(va_arg(argList, Tcl_PanicProc *));
}
- if (flags & TCL_INIT_ENCODINGPATH) {
- encodingpath = va_arg(argList, const char *);
- }
- if (flags & TCL_INIT_CREATE) {
- argc = va_arg(argList, int);
- argv = va_arg(argList, void **);
- }
va_end(argList);
TclInitSubsystems();
- if(encodingpath) {
- Tcl_SetEncodingSearchPath(Tcl_NewStringObj(encodingpath, -1));
- }
TclpSetInitialEncodings();
- TclpFindExecutable(argv ? argv[0] : NULL);
- if (flags & TCL_INIT_CREATE) {
- Tcl_Interp *interp = Tcl_CreateInterp();
- if (--argc >= 0) {
- Tcl_Obj *argvPtr;
-
- Tcl_SetVar2Ex(interp, "argc", NULL, Tcl_NewIntObj(argc), TCL_GLOBAL_ONLY);
- argvPtr = Tcl_NewListObj(argc, NULL);
- if ((flags & TCL_INIT_CREATE) == TCL_INIT_CREATE_UTF8) {
- while (argc--) {
- Tcl_ListObjAppendElement(NULL, argvPtr,
- Tcl_NewStringObj(*++argv, -1));
- }
- } else if ((flags & TCL_INIT_CREATE) == TCL_INIT_CREATE_UNICODE) {
- while (argc--) {
- Tcl_ListObjAppendElement(NULL, argvPtr,
- Tcl_NewUnicodeObj(*++argv, -1));
- }
- } else {
- Tcl_DString ds;
-
- while (argc--) {
- Tcl_ExternalToUtfDString(NULL, *++argv, -1, &ds);
- Tcl_ListObjAppendElement(NULL, argvPtr, TclDStringToObj(&ds));
- }
- }
- Tcl_SetVar2Ex(interp, "argv", NULL, argvPtr, TCL_GLOBAL_ONLY);
- }
- return interp;
- }
+ TclpFindExecutable(NULL);
return (Tcl_Interp *) &dummyInterp;
}