Don Porter wrote to me:
> I suspect there may be another way, and you may be overlooking some
> encoding support routines that can keep platform specific stuff out
> of the generic/*.c files. But I could also be wrong about that.
Here is my attempt to move as most as possible platform-dependant
stuff out of (tcl|tk)Main.c.
- Implemented a static NewNativeObj() function, so we no longer have to
Tcl_SetStartupScript using native encoding, en then later read it again
and convert it to UTF-8. Now every native-to-obj conversions can be
done in one step.
And for tkMain.c, there are some additional
- converted ThreadSpecificData in InteractiveState (just as
already done in tclMain.c), wich an additional 'gotPartial'
field. This makes Tk_MainEx thread-safe. Moved the
inChannel and tty variables there too.
- Use the InteractiveState as clientData in
Tcl_CreateChannelHandler, so we still can unregister
when stdin becomes invalid.
- use Tcl_GetStdChannel(TCL_STDOUT) in stead of
Tcl_GetChannel(interp, "stdout", NULL), as in tclMain.c