This is the Alpha Release. The final release might differ, -gustaf Wed Jun 16 00:07:12 EDT 1993 ================================================================ Differences between Wafe 0.94 and 0.95: - (a) uninterpreted assignment from client applications to Tcl-variables - (b) escaping for %s substitutions - performance improvement up to a factor of 2 in communication buffer handling - the Wafe binary accepts --e and --p together (during fork of the client process a Tcl script can be sourced and a widget tree can be build; the startup of applications using Wafe as a front end appears faster) - support for the Layout widget (great stuff) - new command: [isWidget someName] returns 0 if no widget someName exists, otherwise non-zero - fix for XStoreBuffer (thanks to Natuki ITIMARU ) - bugfix, when lists are set by a single program using both listChange and sV .... list {...} - 2 XtFree bugs fixed (thanks to Linux, which complained about it) - a few bug fixes for the plotter widget sources (logarithmic scale for xyAxis, axis labeling, etc) - some fixes for 64bit machines - cosmetical cleanup and fixes in various application programs - based on tcl 6.7 (instead of 6.6 in Wafe 0.94) - based on xpm 3.2g (instead of 3.2e in Wafe 0.94) - more small sample scripts in $WAFE/src/tcl/* for beginners - support for Linux (a) and (b) are the most significant changes; If you have comments to it, please send it to me, otherwise i'll continue to make this version available. (a) uninterpreted assignment from client applications to Tcl-variables Wafe 0.95 provides means to assign from a client application (say in Perl) to Tcl-variables without performing a evaluation of the string (similar as the communication channel, but more portable and easier to use). If the application program running under Wafe writes %=myvar This will become the content of the TCL-Variable myvar to stdout, the tcl variable myvar is set to the string starting with 'This' and ending with 'myvar'. This works as follows: If the first character after '%' (or the character provided via the --c option) is '=', the next space terminated token is used as a variable name, and the remainder of the line is assigned to the named tcl variable. If the character after the '%' is a '+' followed by a space terminated token for the variable name then remainder is appended to that variable. If the character after the '%' is a '\' followed by a space terminated token for the variable name then remainder and a newline character are appended to that variable. Using this mechanism, i have implemented 'virtual files' from Prolog, which write into tcl variables. An open clears the specified variable, a write appends to it, the close just flushes stdout. Works like a champ. (b) %s substitutions: consider the following Wafe script ---------------------------------------------------------- #!/usr/bin/X11/wafe --f form f topLevel viewport v f height 100 allowVert true list l v \ list {this\ is\ a $long list\} with\ ..\{.. se\"veral en[tri]es} \ defaultColumns 1 width 100 \ callback {say "this is it !!%s!!"} proc say {string} { echo "i say <$string>" } realize ---------------------------------------------------------- The list resource contains several nasty characters. In 0.94 %s is substituted in the callback by the string of the selected list element, after that the command is evaluated using tcl_Eval. For example, if someone chooses the element '$long' , the string 'say "this is it !!$long!!"' is evaluated, yielding (most probably) a 'no such variable' error. One could try various variant of quoting, such as # callback "say %s" ### problem if %s contains $ blanks " [ ] # callback {say "%s"} ### problem if %s contains $ blanks " [ ] # callback "say {%s}" ### problem if %s contains { } but the problem only shifts. Wafe 0.95 prepares the contents of %s in a way, such it can be savely evaluated under double quotes by prepending a backslash to $ [ : \ within the substituion. This means, that in 0.95 'say "this is it !!\$long!!"' is evaluated, passing a single argument to the say procedure.