
wafeperl.tar.gz contains the necessary code to link Wafe 0.96 or newer
together with Perl 4.036. It allows to build a version of Perl that
has a few additional commands that allow to build Xt based
applications directly in Perl.

The wafeperl kit can be used to build either an Athena Widget based
version (wafeperl) or an OSF/Motif based version (mofeperl).

Wafe was originally developed to provide graphical user frontends for
programs in arbitrary programming languages. When Wafe is used as a
frontend, it executes as a separate process (coprocess) linked via
sockets to an application program. In the Wafe distribution
(eg. wafe-1.0.tar.gz) there are various examples how to use Wafe
together with Perl. The applications ranges from various monitoring
programs to news reader, mailer and ftp clients. The Wafe applications
from the distribution can show how to run an Perl application as a
subprocess of Wafe or Wafe as a subprocess of Perl.

This kit offers a third possibility to use Wafe together with Perl by
building an extended version of Perl, in which Wafe functions can be
called as use subprograms of Perl and Perl functions can be called
from wafe vice versa.

So far, I've made no attempt to check, which kind of modifications
are necessary in the mentioned wafe applications in order to
run them with wafeperl. Perl programs that issue select calls,
will not work as expected using the current version of wafeperl/mofeperl
since this select will conflict with the Xt event loop.

-----------------------------------------------------------------------
Changes:
  wafeperl-0.1 ... first public version of wafeperl
-----------------------------------------------------------------------
  wafeperl-0.2 
   -  fixed a bug with Perl's stack pointer which was not restored 
      correctly under certain circumstances. Thanks to the bug report
      from Adrian Phillips, who used extensively Xt timeout routines 
      implemented as Perl subroutines in mofeperl, that triggered this
      problem.
   -  new Perl command: &wafe_set(Tcl_Varname,Value)
      this command can be used to set a Tcl variable with the
      specified name to the given value, avoiding Tcl_Eval. There
      is no need to escape characters with special Tcl meaning (such
      as {}[]$\")
-----------------------------------------------------------------------
  wafeperl-0.2-patch1  
   a) Xt command line argument processing 
      (wafeperl will accept -display ..., -bg pink, etc)
   b) better application class names derived from the perl script
      (in order to use application default files, etc)
   c) support for editres protocol when used with 
      OSF/Motif + X11R5 (the Athena version supported
      editres from the beginning)

      Notes concerning (a): When the command line arguments are
      processed they are not removed automatically from Perl's
      @ARGV.  As it looks to me, arguments cannot be removed from
      the Perl argument list from the c level without patching Perl
      itself. For the time being, one can use the following trick to
      adjust @ARGV by using Wafe's argument list:

       sub setargv {
         @ARGV=();
         local($ARGC) = &wafe_cmd('return [set argc]');
         for($i=0; $i<$ARGC; $i++) {
             push(@ARGV,&wafe_cmd("return [lindex [set argv] $i]"));
         }
       }
       &setargv();
   
-----------------------------------------------------------------------

Installation:

Prerequesits: 
	perl 4.036 (source)
	Wafe 0.97 or newer
	wafeperl-0.2.tar.gz (starting from Wafe 1.0, 
                             wafeperl is included in the Wafe package)

Wafe 1.0 can be obtained for example from 

	ftp.wu-wien.ac.at:pub/src/X11/wafe/wafe-1.0.tar.gz

Step 1: Build Wafe as indicated in the Wafe distribution
Step 2: Build perl (we will need the .o files in the next step)
Step 3: expand wafeperl-0.2.tar.gz in the source tree
        of perl 4.036 such you get an directroy structur like
        .../perl-4.036/lib/...
        .../perl-4.036/usub/...
        .../perl-4.036/wafeperl/...
        (If you are using Wafe 1.0, copy or move the
        files from wafe/wafeperl/* to the place indicated above)
Step 4: cd to .../perl-4.036/wafeperl
        edit the Makefile to adjust library paths etc.
        LIBS and MLIBS should reflect the library paths and 
        libraries of your .../wafe/src/Makefile.
Step 5: make

Note: 
if you want to build wafeperl AND mofeperl (say: first wafeperl
and the mofeperl, then you have to cd to the wafe sources after
building wafeperl, reconfigure the Imakefile to use Motif, 
do an xmkmf;make clean_version;make, before you switch back to
the wafeperl directroy to "make mofeperl". 

Have fun
-gustaf



