Pat Thoyts [off-list ref] writes:
Bernt Hansen [off-list ref] writes:
quoted
The error text generated when your version of Tcl is too old is
translated with msgcat (mc) before msgcat is initialized. This
causes Tcl to abort with:
Error in startup script: invalid command name "mc"
We now initialize msgcat first before we check the Tcl version. Msgcat
is available since Tcl 8.1.
This doesn't quite work. [file normalize] was introduced with Tcl 8.4
and when I test this by starting it using Tcl 8.3 I get an error:
"bad option "normalize": must be atime, attributes, channels..."
from line 11014. It is probably sufficient to just drop the [file
normalize] here. On Windows $argv0 is fully qualified and
[file dirname] works ok on it. By removing the [file normalize] I get
the expected error dialog when testing with 8.3.
However, on Windows we actually get a better looking result by not
catching the [package require Tcl 8.4] and just letting Tk bring up a
standard message box with the version conflict error message.
Well, actually if show_error just used tk_messageBox it would look
better on Windows.
You're right. Thanks for catching this. When I tested this code I
bumped the version number temporarily to 8.5 instead of downgrading TK
to 8.3.
The problem I was trying to fix was show_error using mc internally
before it was initialized. Maybe it would be better to give show_error
an optional parameter that controls calling mc - so that the call for
the version check can just bypass the mc translation of the text and OK
buttons. With this approach the code I moved around can just stay where
it is and all of the existing calls to show_error will use the default
parameter setting which invokes mc.
Would that be a better approach?
-Bernt