
This is a first version of the port of gcl-tk to CMU Lisp and Allegro Common Lisp.
If you don't know it, it allows quite simple interaction between lisp
and Tcl/Tk, including asynchronous feedback from Tcl to lisp.

It was originally written by Bill Schelter as part of GCL 2.2.
I don't claim to understand every bit of the original code, I've changed
only the parts that obviously created problems.

I've tested it with my application (output of canvas drawings) extensively
without problems. I've also tried to get the demos to work that come with it,
some needed small changes (due mainly to different Tcl/Tk versions), some of
them I think never worked in the first place... I put the modified demo sources
on my lisp web pages (http://www.arch.usyd.edu.au/~thorsten/lisp/index.html).
It seems to work under solaris,too; but I haven't done much testing. I only
have the solaris demo version of ACL, since that doesn't support dumps, I can't
even use the available patches for it. I don't know how it works with a 'real'
version.

To use the allegro port, you have to load both lisp-tk and lisp-tk-acl. 


I am using Tcl 7.4 / Tk 4.0.

Applications need one major change from GCL: CMU lisp doesn't like an empty
symbol name as produced by :  you have to use an 'empty symbol' :|| instead.
This change is compatible with GCL.

The code originally used a three-level input buffering, I've removed one
of these levels. It does not depend on any C-Functions anymore, unfortunately this 
also means that a certain amount of additional consing is produced.

There is a problem with read-char-no-hang when used with socket stream in CMU, it
fails to notice new characters after a failed read. As a workaround, I am using
read with a timeout of 0, and catch timeout errors.

In Gcl-Tk, both server and client omit to do a htons of the port numbers, therefore
here the htons is undone before calling the server. Keep that in mind when testing
under linux.

In GCL and CMU, the server sends a SIGUSR1 signal to the client whenever it 
has data available. I had problems with the signal handler on the ACL port,
instead I use the SIGIO interface. This has the additional advantage that it
actually works across machines.

Setting tk::*debugging* to T gives you lots of feedback, this the major debugging
tool for it.

If you do have gcltk installed, you can just edit the few configuration variables
in the top, the rest should work. You can try the demos, have a look in load-all.lisp
to see what to do and what should work and what doesn't.

If you dont have GCL installed, it is a bit more tricky. I put a tar file on my site
with the info files, the support tcl file, the script to invoke the server and
the binary. You will have to change the script (gcltksrv) and adapt the paths
to where Tc/Tk is.

The binary is linked with libtk4.0.so.1, libtcl7.4.so.1, libX11.so.6, libm.so.5, 
libc.so.5. If you want to compile it yourself, you have to get the whole GCL packet,
since it relies on parts of the gcl source to compile. I didn't try compiling this
version, the main problem might be that it expects older Tcl/Tk.

Further plans: none at the moment, only try and react to feedback from users.
Possibly update TclTk. Would be nice to have a graphic interface to profile()...

ALL QUESTIONS ABOUT THIS VERSION PLEASE TO ME (thorsten@arch.usyd.edu.au) !

have fun, and tell me if it works, and what you do with it.



thorsten

----------------------------------------------------------------------- 
       \    k                                       
        \   e                                          Thorsten Schnier
         \  y                       
     /\   \                              Key Centre of Design Computing
    /     / c                                      University of Sydney
    \    /  e                                                  NSW 2006
     \  /   n                      
      \/    t                                 thorsten@arch.usyd.edu.au 
    DESIGN  r                    http://www.arch.usyd.edu.au/~thorsten/
  COMPUTING e

 




