This is the README file of patch3 for Wafe 1.0 The new version features in the following items: - Improved handling for failed Xpm conversions when iconPixmaps could not be set - Support for producing explicitly TCL_ERRORs for the automatically generated code. This makes handling of error conditions on the Tcl level easier; for example, changePixmap raises now an error exception, when eg. the color map is already full. To handle the error condition, changePixmap should be placed within the Tcl "catch" routine. - Better error messages for failed Xpm conversions - Better error catching for raiseWindow, lowerWindow and setWMProtocols when unrealized widgets are passed as arguments. Previous versions exited with hard x errors - Messages about signals being received or forwarded are from now on displayed in debug mode only - Widget references returned via [gV .. SOME_RESOURCE] have now the form of WidgetIds to avoid ambiguities. WidgetIds are now returned when SOME_RESOUCE is of one of the following classes: Widget, Window, MenuWidget. - The generated C code of Wafe's implementation + is now more compact (again) + avoids string copying in more situations (uses less mallocs and is faster) + has some small memory leaks fixed - Wafe should be again more portable. Many thanks to Peter Sylvester for his feedback on compiling Wafe with X11R4+Motif+acc on SunOs 4.1.3! - provided wafe/lib/XmGraph/Imakefile to improve portability - The INSTALL file has now a section with Questions and Answers concerning Wafe compilation added. - Boolean input and output arguments for Wafe commands: + All Wafe commands that receive Boolean input arguments will accept now Value | Input String ============================== true | 1, true, yes, on false | 0, false, no, off or any abbreviation of these input strings and all upper case spellings (True or TRUE is acceptable as well). These input values are now the same as Tcl allows for input values of type Boolean. + All Wafe commands that return Boolean commands will return from now on 0 or 1 instead of "true" or "false". The new version allows to write Tcl scripts with less syntactic overhead. One can write now if [XawAsciiSave someTextWidet] {...} instead of if {[XawAsciiSave someTextWidet] == {true}} {...} Note, that this is a potentially incompatible change to previous versions of Wafe. In the appendix of this files follows a shell script, which analyzes the files specified as arguments and lists potential problems. I do not expect many problems, since for example none of the ~140 Wafe scripts (in wafe/apps and ~/wafe/src/tcl) had to be altered due to this modification. + Note that setting and retrieving of Boolean resources widget creation command, sV, gV) is not altered by this modification. - additional supported Xt command: isShell This command can be used to test whether the passed widget is a shell and returns the boolean value 0 or 1. isShell can be used eg like in the following procedure which determines the parent shell of a widget. proc parentShell {w} { while 1 { set w [parent $w] if [isShell $w] { return $w } } } Such code can be used nicely in situation, where many widgets with the same name exist in various shells and each shell determines the context of a widget, and there are eg. context specific differences in callbacks (eg multiple help, file, dismiss buttons). - improvements for the Athena version of Wafe: + output converter for resources of class EditMode (Athena text widget) - improvements for the MOTIF version of Wafe: + for XmList widgets, the contents of * items and * selectedItems can be obtained now via [gV ...] + for extendedSelectionCallback and multipleSelectionCallbacks in XmList widgets %n can be specified to return the number of selected items + output converter for resources of class MenuWidget - improvements in wafemail: + optimized change between bitmaps and pixmaps for face display + single character commands in the area where the mail is displayed: d : delete f : forward h : header m : mail p : print r : reply R : replyAll s : save Escape: abort mail writing + additional info line to display somewhat important information about the mail message currently displayed, such as one of the following items - to-line, if mail was not addressed personally to you - cc line - apparently to line and whether this mail is marked deleted or not + mousable labels ("From", "Subject", "Date", extra info line) by clicking with the mouse on these labels, its contents are copied into the cut buffer - improvements in wafenews: + cirumventing a bug in the label widget with resizing of long entries (long subject lines were truncated) + single character commands in the area where the mail is displayed: f : forward F : followup h : header p : print P : post r : reply s : save Escape: abort mail/article writing + mousable labels ("From", "Subject", "Date", "Newsgroup") by clicking with the mouse on these labels, its contents are copied into the cut buffer + more explicit reference when a followup to a news article is posted - additional small Per written sample application xwau (x Wafe audio) in wafe/apps/misc - additional sample scripts: + m-cal a sample calendar script modeled after Dan Heller's calendar sample program + m-compound small example for compound strings with multiple fonts in Wafe In order to apply this patch, be sure that your Wafe installation is on the Wafe 1.0 level (or newer), cd to the Wafe home directory, expand this tar file over the old distribution, perform the usual configuration in wafe/src/Imakefile (as indicated in INSTALL) or use the new TOPMAKE (read the top section of wafe/src/TOPMAKE). Gustaf Neumann Disclaimer: Wafe is developed and maintained on my private equipment in my free time. ================================================= Appendix: # checkBoolCommands # list potential incompatibilities introduce by patch #3 for # Wafe 1.0 (return values of types Boolean or Bool ar now 0 or 1) # # Usage: checkBoolCommands myTclScript1 myWafePerlScript .... # Gustaf Neumann Mohegan Lake, Jul 30 1994 # #XtGen: # isShell # setWMProtocols # ownSelection # #GhostView: # GhostviewIsInterpreterReady # GhostviewIsInterpreterRunning # GhostviewSendPS # GhostviewNextPage # #Athena: # XawAsciiSave # XawAsciiSaveAsFile # XawAsciiSourceChanged # #Motif: # XmProcessTraversal # XmListGetMatchPos # XmListGetSelectedPos # XmListItemExists # XmTextFieldGetSelectionPosition # XmTextFieldPosToXY # XmTextFieldRemove # XmTextGetSelectionPosition # XmTextPosToXY # XmTextRemove # XmToggleButtonGetState # XmToggleButtonGadgetGetState # #HTML: # HTMLIdToElement egrep 'isShell|setWMProtocols|ownSelection|GhostviewIsInterpreterReady|GhostviewIsInterpreterRunning|GhostviewSendPS|GhostviewNextPage|XawAsciiSave|XawAsciiSaveAsFile|XawAsciiSourceChanged|XmProcessTraversal|XmListGetMatchPos|XmListGetSelectedPos|XmListItemExists|XmTextFieldGetSelectionPosition|XmTextPosToXY|XmTextRemove|XmToggleButtonGetState|XmToggleButtonGadgetGetState|HTMLIdToElement' $*