
This is patch6 for Wafe 0.96.  

It contains:

  o  All changes included in patch 1 to patch 5
     (see wafe-0.96.p1.README, wafe-0.96.p2.README,
     wafe-0.96.p3.README, wafe-0.96.p4.README and
     wafe-0.96.p5.README)

  o  based on tcl 7.3 (instead of 7.2)

  o  new commands:

     + fontHeight Widget fontResource
       returns the height of a font in pixels. The font is taken is
       taken from the given fontResource of the given widget.
     
     + popupChildren Widget
       this command is similar to [gV Widget children] of a composite
       widget, but it returns the list of popup Shells (eg: TransientShells) which
       are created as children of the given widget. Popup shells are
       not required to be children of composite widgets. If a widget
       has no popup children an empty list is returned.

     + alias newCommand oldCommand
       can be used to register an alternate name (newCommand) for an 
       existing command (oldCommand).

  
  o  removed commands:

     + asciiTextAppend Widget Text
       can be easily achieved using 'sV Widget string [gV Widget string]$Text'

     + simple
       this command created an instance of the simple widget class, which is 
       primarily used for subclassing

   
  o  new naming conventions (NNC)

     Most of the native command names of wafe/mofe have been changed between
     relative to the previous version to solve the name clash problem between
     Tcl's list command and Wafe's command to generate a list widget.

     I have to decided not to use the proposed ":" apporach to leave
     the use of other tcl extensions (such as [incr tcl] which uses ":" 
     as well to separate class names) open for future enhancements. 

     Here are the new naming rules:

     1) All widget creation commands
        - start with a capital letter
        - are identical with the widgetClass of the created widget
        - the widgetClass is the value returned by [getClass ...]
          (as a consequence the former Athena asciiText is now called Text)

     2) All widget set specific commands 
        are prefixed with the same prefix 
         - Xaw for Athena widget specific commands,
         - Xm for OSF/Motif specific widgets and commands,
         - At for Plotter widgets and commands

    3) All toolkit and xlib commands have naming conventions
       like all previous wafe releases: 
       - leading X, Xt, XtApp, XtVa prefixes are stripped, 
       - the first character is lowercased

    Reasons:
    a)  many commands names contain c programming conventions,
        which are meaningless for Wafe user:

        * XtAppAddTimeOut vs. XtAddTimeOut
          Wafe's addTimeOut is implemented using the recommended
          XtAppAddTimeOut, which uses as first argument the
          application context. Wafe supports only one application
          context, which is invisible for a Wafe user.
          we use: addTimeOut

        * example XtSetValues vs. XtVaSetValues
          Wafe's setValues (sV) is implemented using XtSetValues
          but has argument conventions closer to XtVaSetValues
          we use: sV or setValues

        * distinction between xlib commands and Xt commands are
          not important for a Wafe user; in many cases where 
          windows are expected as arguments (typical for xlib commands),
          widgets are passed in Wafe; the distinction between a xlib
          and a command xt command is not important for an enduser, who 
          might ask: "why is it called XBell and XtTranslateCoords".
          we use: bell and translateCoords

    b) consistency: 

        * XtSetSensitive <Widget> <Boolean>
          setBusy <Widget> <Boolean>
          Xt's XtSetSensitive sets a widget and it's children sensitive or
          insensitive, Wafe's own setBusy has same argument structure and 
          busy-fies the specified Widget. Using for one command the name 
          'XtSetSensitive' and the other 'setBusy' is confusing, giving Wafe's 
          setBusy an Xt or X prefix (setBusy is implemented using various Xt 
          and Xlib commands) is missleading.
          we use: setSensitive and setBusy

        * XtDisownSelection and ownSelection
          Wafe's ownSelection differs significantly from XtOwnSelection
          where several function pointers and procedures are involved,
          so we should not call it XtOwnSelection. Using for "Disown"
          the Xt prefix and for "Own" no prefix is confusing.
          we use: disownSelection and ownSelection

    c)  Xt and Xlib are the basic underlaying mechanism in Wafe, they
        are the true core of Wafe. Replacing these libraries by others 
        is more work than replacing Tcl by another interpreter. Xt and Xlib 
        will be used always in Wafe. Naming conflicts will be highly unlikely 
        since each additional widget set will have its own prefix. 


  o  We provide two migration tools to change older scripts to the new
     conventions:

     a) auto aliasing of old naming conventions to new ones:
        the tcl library of wafe has a subdirectory called bc 
        (backward compatibility) which provides name automatic 
        aliasing: if an old name is used a warning message is 
        displayed and the new name is used instead. The warning
        message is displayed only once for each command. 

        Example: if you execute the following script

           !#/usr/bin/X11/wafe --f
           command c topLevel label "Hello World"
           realize

        the warning message
           ** alias command Command
        will be displayed and "Command" will be executed
        instead of "command"

        Note1: automatic name aliasing requires
          1) the standard tcl library (not Wafe specific); 
             As shipped this library will be installed in
             /usr/local/lib/tcl; this default directory name can 
             be altered during compilation of tcl. At runtime of 
             Wafe, the environment variable TCL_LIBRARY could be used
             to point to to this library if it is on a different place.

          2) the Wafe specific tcl library
             (the standard location as distributed is /usr/lib/X11/wafe, 
             the standard location can be altered in wafe/src/Imakefile,
             the environment variable WAFELIB can be used to point
             at runtime to a different place)

        Note2: auto aliasing works only for undefined commands, so it
             will not automatically map the old "list ....." to "List ...."
             you will have to change this command by hand or by using
             renameCommands (see next item)

     b) wafe/src/renameCommands

        This is a small perl script that expects a wafe program as 
        single command line argument (i.e. perl-script, wafeperl/mofeperl
        script or a pure wafe/mofe script) and changes command names
        from the old naming conventions to the new ones. 
     
        renameCommands makes first a backup copy of the old script
        (adding .bak to the name of the old script) substitues commands
        and writes to a new file with the same name. at the end the
        renameCommands displays the differences between the old and the new
        script.

        note1: renameCommands is a simple minded script to support
               the renaming transition. it is far away from being 
               perfect. In particular, watch out for occurances of

               - Label   (using the old naming conventions "label"
                         is both a command to create an instance
                         of the label widget class and a resource 
                         name)
               - Form    (some scripts use form as widget name)

               renameCommands changes short names (up to 5 characters,
               where unintended changes are likely) more carefully 
               by checking whether the command is not preceded by a
               $ or { (Tcl variables or arguments) and verifying that
               the following word starts with a character (this will 
               handle for example 'command c topLevel label "xxx"' 
               correctly by not changing the resource name 'label')

        note2: renameCommands reads the information about old and
               new naming conventions from $WAFELIB/tcllib/bc. 
               if tcllib is not installed in /usr/lib/X11/wafe,
               set the environment variable WAFELIB to the right
               directory. If you have not installed wafe at all,
               you might set WAFELIB to the src directory of Wafe
               (<SOMEPATH>/wafe/src).


  o  initial library functions (available via auto_loading):

     - showRes ... displays resources of a given widget
       try 

	   "wafe --e 'Command c topLevel;showRes c;quit'"

       to see the resources of a Command widget

     - library support to create new widgets classes in tcl

     - sample file selector implemented as a wafe widget 
       try "wafe --f wafe/src/tcl/filesel"


 o  new library configuration:
    - wafe/tcl7.3/Makefile: 
      check after ./configure whether points to a TCL_LIBRARY points to a 
      writable location

    - in order to install the standard (not Wafe specific) tcl libraries issue a
      make install-libraries
      in wafe/tcl7.3, unless you have the tcl library already installed

   -  wafe/src/Imakefile
      Check the variable WAFELIB. 
      it should point to a place on your system where Wafe-specific libraries
      are installed. If you use Wafe already with the distributed Perl written
      Wafe applications, you know already this library. The WAFELIB directory
      will contain subdirectories like bitmaps, faces, perl, tcllib, etc.
      At runtime of wafe, the the environment variable WAFELIB could be used
      to override the default specified in the Imakefile.


To apply this patch, "cd" to the wafe 0.96 directory, expand the
tar file, and do a "rm -f ../libhtmlw/*.a src/htmlwGen.o; make". 

Please note that in cases where you have 0.96 not installed,
you should 

   a) first get the wafe 0.96 distribution, expand the tar file, 
      expand the wafeapps.tar.gz tar file as indicated in wafe/INSTALL, 
      and

   b) expand this update 'over' the 0.96 distribution, and follow then
      the instructions in wafe/INSTALL

-gustaf
