Document Varexx Readme 5 Feb 1996

                        Varexx Documentation
                       ~~~~~~~~~~~~~~~~~~~~~~
                  Release 1.7  (c)1995-1996 Andrew Cook

                            5 Feb 1996
                          

1. Introduction - So what is it and what can it do ?
----------------------------------------------------
Varexx is a program that allows you to control graphical user 
interfaces (GUI's) from Arexx. The program loads the .gui files that 
are saved by Jan van den Baard's Gadtoolsbox program and displays them 
on the screen. Arexx scripts can then send messages to a port and 
control the actions of the Gui. The script can read and set the 
contents of each of the gadgets, resize the window and such like.

2. Legal Bit - What won't I do ?
--------------------------------
Some or all of the files in this package may be may be transmitted by 
any means. Providing words to the effect of

Varexx and Arexxport.library are Copyright(c)1995 Andrew Cook.

and my email address (amc93el@soton.ac.uk) are included in the 
accompanying documentation. The files are FreeWare, copyright is 
retained by the author (Andrew Cook).

These files may be included in any distribution commercial, shareware, 
freeware or other. I would like to be informed of any such packages, 
(drop me an email) but this is not a requirement.

ALTHOUGH THE FILES HAVE BEEN CAREFULLY TESTED ANY ERRORS OR ACCIDENTS 
ARISING FROM THEIR USE IS NOT THE RESPONSIBITY OF THE AUTHOR. USE AT 
YOUR OWN PERIL.

I take no responsibility for anything Varexx may do to your system. 
But is less likely to crash your Amiga than a certain new operating 
system 95 will. (Unless you've got a bridge board of course.)

3. About the Author - So who are you ?
--------------------------------------
I am a third year electronics undergraduate at the University of 
Southampton, England. I like SF, technology and having a laugh. If you 
like you can't check out my www site as I haven't got one. However do 
drop me a email to

    amc93el@soton.ac.uk

This will be valid until August 1996 after which I will get a demon 
account. So download this package again and pick my new address out of 
that.

4. Installation - What do I do now ?
------------------------------------
There are two programs in the Varexx distribution just copy both into 
your path.

Varexx GUIPATH

This launches the Varexx server. This opens a port called VAREXX and 
waits for scripts to send messages to it. The server detaches itself 
properly so it can be run in the user-startup with the line "Varexx". 
Only one copy of Varexx can (and needs to) be running at one time.

The Varexx program requires the Arexxport.library and the 
reqtools.library, both of these are included in the distribution, copy 
them into your libs: assignment.

The command can be optionally followed by a path. This will be used as
the default path to load .gui files from.

eg Varexx rexx:gui/

Varexx will now look in rexx:gui/ path for any .gui files it needs.

VXC

This closes the Varexx server down. This can only be done if no gui 
files are currently loaded into the server.

10. The Demo Script - What can it do ?
--------------------------------------
To run the demos, click on the DemoSetup Icon. Then open the demos 
drawer and click on the demo or the address book icons.

The demo shows off the features of Varexx and source code will reveal 
most of the information needed to write your own scripts for Varexx. 

The Address Book is a simple address database written in Arexx. It 
demonstrates the use of two windows at once with Varexx.

When address book is started a file requester will appear asking for a 
data file to load. An example containing a few interesting people I 
know is included. (Load the example address.data). 
The main window is now displayed. You can scroll through the names 
using the '<' and '>' buttons. Clicking on the 'List' produces a list 
of names in the book and picking a name jumps to that entry. 
To add an entry click on the 'Clear' button. Fill in the entries and 
click on 'Update' to add the entry to the book.
To change an entry, find it, change it and click on 'Update'.
To delete an entry, click on delete, clicking twice undelete it. None 
of the changes are saved until the address book is closed. A that 
time, the entries are saved and the address book is sorted. 

The testgui file, brings up a filerequester asking for the a .gui file. 
It then displays this and echos all messages from Varexx to the output
console.

TestGUI2 does the same except, that it hacks about inside the .gui file 
and extracts the name of all the windows in the file and gives you the 
choice of them. This script was written by Nick Ring and contains some 
hairy code so he will be horrified that I've distributed it unchanged. 
I apologise to him for that - but it can be useful. 

Fergus Duniho has a script to use his spell checker - AlphaSpell - with 
Varexx. It's on the Aminet as text/util/AspellGUI.lha. (And well worth a 
look.)

5. Programming Varexx - How do they do that ?
---------------------------------------------
So you want to create your own Arexx gui's. You need will need to 
create a gui file using Gadtoolsbox, see the documentation on using 
that program and the notes below.

Having created the gui file you must then write the script to load and 
display the window.
 
Some Notes / Comments and Ideas

Okay, having seen a few peoples scripts and written a few of my own. I
feel that some ground rules (ideas anyway) should be written. 

 1) Starting, stopping the Varexx server from within a script.
I feel you should only close the Varexx server ('address command VXC'
does it) if you have started it yourself. See the example script below.

 2) The location of the .GUI file.
Your script should not hard code this. I feel the best thing to set a
variable near the start of the script containing the .gui file name. 
Allowing the user to change it easily. Secondly I would assume that all 
the .gui files will be stored in a single location, and that the user
will tell varexx where that is. So don't hard code paths into the gui 
file name.

But that's just my $0.02 worth.

5.3. Example Script
-------------------
/* Test script for Varexx */
    guifile = 'myguifile.gui'

    options results

    /* Open libs needed */
    if ~show("L","rexxsupport.library") then
        if ~addlib("rexxsupport.library", 0, -30) then exit

    /* Check Varexx is loaded if not load it */

    if show( 'p', 'VAREXX' ) ~= 1 then do
        address command 'run Varexx'
        waitforport VAREXX
        RanVarexx = TRUE
    end; else 
        RanVarexx = FALSE

    address VAREXX

    /* Open the port for gui to talk to */
    call openport("WINDOWPORT")

    /* Load the gui file into Varexx */
    'load ' guifile 'WINDOWPORT'

    /* Set host to the port for this gui file */
    host = result 
    address value host

    /* Display the window */
    show 

    /* Wait for the user to close the window */
    do forever
        /* Wait for a message from Varexx */
        call waitpkt( "WINDOWPORT" )

        /* Get the message */
        packet = getpkt( "WINDOWPORT" )

        /* This is not a null message */
        if packet ~= '00000000'x then do 

            /* Get the information about the message */
            class  = getarg(packet)

            /* If the message says the user clicked on the closewindow
             * gadget then leave */
            if class = closewindow then leave

        end
    end

    /* Hide the window and unload the gui file from memory */
    'hide unload'    

    /* Close the port */
    call closeport( "WINDOWPORT" )

    /* I launched varexx so close it */
    if RanVarexx = TRUE then ADDRESS COMMAND VXC

    exit

5.1. The GUI files
------------------
When using Gadtoolsbox to design .gui file for Varexx the following 
hints may be useful.

At the moment, Menus are not supported by Varexx so don't bother to 
set any up. Also Fixed Text and Bevel boxes are not rendered by 
Varexx. Varexx  will ignore any Custom or Public screen settings. This 
may change in the future so it is best to design the Gui to open on 
the default public screen.  This allows the screen to be specified by 
the PS argument to the load command  and will not clash with any 
future behavior of Varexx. The plan is to have Varexx able to open 
custom public / private screens at some time.

Of the window flags :
    SIZEGADGET      - Varexx doesn't resize the gadgets in a window. 
                      But this flag may be set.
    DEPTHGADGET     - May be set.
    SIZEBRIGHT      - May be set. See SIZEGADGET.
    SMART_REFRESH   - Ignored by Varexx.
    SUPER_BITMAP    - Ignored by Varexx.
    BACKDROP        - May be set. (Not often useful.)
    GIMMEZEROZERO   - This has no effect on the final appearance. 
                      However less memory is used if it is left off.
    ACTIVATE        - May be set.
    DRAGBAR         - May be set.
    CLOSEGADGET     - May be set.
    SIZEBOTTOM      - May be set. See SIZEGADGET.
    SIMPLE_REFRESH  - Ignored by Varexx.
    OTHER_REFRESH   - Ignored By Varexx.
    REPORT_MOUSE    - Ignored By Varexx.
    BORDERLESS      - May be set. ( But not very useful.)
    RMBTRAP         - Ignored by Varexx.

A subset of the IDCMP options are used by Varexx. If these options are
selected then Varexx will send additional messages to the Arexx script.

    IDCMP_ACTIVEWINDOW - A activewindow message is sent when the Varexx 
        window becomes active. ie. when the user clicks on it.
    IDCMP_INACTIVEWINDOW - A inactivewindow message is sent when the Varexx
        window ceases to be active. ie. when the user clicks outside it.
    IDCMP_DISKINSERTED - A diskinserted message is sent when when a disk 
        is inserted.
    IDCMP_DISKREMOVED - A diskremoved message is sent if a disk is removed.
    IDCMP_NEWSIZE - A newsize message is sent when the size of the window
        is changed. This includes clicking on the ZIP gadget.
    IDCMP_CHANGEWINDOW - A changewindow message is sent when there is any
        change in the window's size or position.
    IDCMP_VANILLAKEY - When a key is pressed which doesn't affect a gadget 
        then a KEYBOARD message will be sent to the script.

Of the tags,
    InnerWidth, InnerHeight,
    AutoAdjust, FallBack    - May be set.
    MouseQueue, RptQueue    - Are all ignored by Varexx.
    WindowTitle is used.
    ScreenTitle is used. Enter a blank title to get the default screen 
    title.
    Prefs Zoom and Pos Zoom will give a window with no size gadget a 
zoom gadget. Both zip the window to it's title bar. Prefs also moves 
the window to the top left corner of the screen.

All gadgets are supported. The label for each gadget is the title used
by Varexx to name each gadget.

FILE_KIND gadgets rely on the script to supply the filerequester, they 
just act as BUTTON_KIND gadgets. This allows the script rather than
Varexx to determine the information in the requester.

Key Strokes ( _Cancel etc ) are supported, providing the box is ticked 
in Gadtoolsbox. Tabbing between gadget also works.

Do not compress your GUI files or you will be in deep trouble.
Default options listed for the LISTVIEW kind do not work.

5.2. Arexx Commands
------------------
When Varexx is active there are three different ports that you have to 
deal with. Two of these are opened by Varexx and you send messages to 
them. The other is opened by you and Varexx sends messages to it when 
the user clicks on a gadget.

When the Varexx server it opens a port called 'VAREXX' there are two 
commands that can be sent to this port.

5.2.1. Commands for the VAREXX port.
---------------------------------
When launched Varexx opens a Arexx port called 'VAREXX'. This port  
accepts two different commands.

5.2.1.1. Load 
------------
load FILE/A,PORT/A,PS/K

Loads the given .gui file into memory. If the file is given an absolute
path ( ie. rexx:gui/myfile.gui ) then that will be loaded. If not then the
default path ( given when Varexx is run ) will be used. If not found 
there then the file on its own will be looked for.
ie. If Varexx is run with the line "Varexx rexx:guifiles/"

The commands 

load fish/mygui.gui
    will try to load "rexx:guifiles/fish/mygui.gui" and then try 
    "fish/mygui.gui".
load rexx:fish/mygui.gui
    tries to load "rexx:fish/mygui.gui".
load mygui.gui
    tries to load "rexx:guifiles/mygui.gui" and then "mygui.gui".

This command doesn't display the window however. PORT is the name of 
the port to which the window will send messages when the user operates
the window's gadgets. This port should be created with the OpenPort( )  
function in the rexxsupport library. 
The windows will open on the default public screen unless the name of  
an alternative screen is given in the PS option.
This command returns the name (in result - so turn 'options results'  
on first) of a Arexx port to which messages about this window may be  
sent. 
eg
        options results
        ...
        
        address VAREXX

        call openport("SQUID") 

        'load dh1:c_src/Varexx2/gui/test.gui SQUID PS=MYSCREEN'
        host = result

This loads the gui file 'test.gui' into memory, setting it to send  
messages to a port called 'SQUID', display it's windows on the  
MYSCREEN and it will receive commands at the port named in the  
variable 'host'. (Use 'address var host' to send commands.)

5.2.1.2. Quit
-------------
quit

If there are no .gui file currently loaded by the Varexx server 
this command will close the server down and free the memory used by    
it. This is what the VXC command sends to the VAREXX port.

5.2.1.3. Version
----------------
version
Returns the version number of currently active copy of Varexx. The 
version number is returned in RESULT. This command first appeared in 
v1.3 so use code like this.
    Options Results

    ...

    ADDRESS VAREXX
    version
    if rc ~= 0 then say 'Varexx 1.2 or earlier'
        else say 'Varexx 'RESULT
    ...

This command may also be sent to the window ports as well.

5.2.2. Commands for window ports
--------------------------------
The following command can be sent to the specific port for a gui file, 
ie. the portname returned by the load command.

5.2.2.1. Show
-------------
show WINDOW

This displays the named window. The window name is given to the  
window in Gadtoolsbox not the window title. If no name is given then  
the first window in the file is displayed.

5.2.2.2. Hide
------------
hide UNLOAD/S

If the .gui file has a window open this command will close it. If  
the unload  option is given, the .gui file will be removed from     
memory as well. You cannot read information from the windows gadgets  
after this command has been given. This command can be given with the  
unload option when no window is open to free up memory.

5.2.2.3. Window
---------------
window ZIP/S,FRONT/S,BACK/S,ACTIVATE/S,X/N/K,Y/N/K

This command changes the state of the window.
ZIP - move the window to it's alternate place and size. As if the     
user clicked the zip gadget.
FRONT - Brings the window to front of the screen.
BACK - Puts it to the back (surprised ?).
ACTIVATE - Gives the window the focus for user input.
X - Number specifes the left edge of the window.
Y - Number specifes the top edge of the window.

5.2.2.4. Busy
-------------
busy SET/S

The command 'busy set' sets the busy pointer in the Varexx window
and blocks all user input to the window. Just 'busy' on its own clears 
the pointer and unblocks the window again.

5.2.2.5. Set
------------
set LABEL/M/A,ENABLE/S,DISABLE/S

This enables / disables the given gadget(s). A list of gadgets can 
be given and all will be affected.

5.2.2.6. Settext
----------------
settext LABEL/A,STRING/F

Passes the given string to the gadget. Used by STRING_KIND and     
TEXT_KIND  gadgets only. This sets the text in both of those types.

5.2.2.7. Setnum
---------------
setnum LABEL/A,NUMBER/N

Passes the number to the given gadget. Sets the value of NUMBER_KIND 
and  INTEGER_KIND gadgets. Picks the option for MX_KIND and CYCLE_KIND 
(these are  numbered from 0 upwards ). Sets the position of the marker 
in SCROLLER and  SLIDER kind.

5.2.2.8. Setcheck
-----------------
setcheck LABEL/A,CHECK/S

Set a gadget of CHECKBOX_KIND to ticked or not.

5.2.2.9. Setbar
---------------
setbar LABEL/A,MIN=VISIBLE/N/K,MAX=TOTAL/N/K

For a SLIDER_KIND this sets the max and min values of the run.
For a SCROLLER_KIND this sets the max values and the number of 
units the knob represents.

5.2.2.10. SetList
----------------
setlist LABEL/A,CLEAR/S,DEL/S,SELECT/K,STEM/K,ITEMS/M,UPDATE/N/K

Controls the listview type of gadgets. Okay, this is were it gets fun. 
CLEAR switch this clears the listview. Before any other action is 
taken. ITEMS is a list of items to be added to the bottom of the list. 
Or if the DEL option is given as well these items will be removed from 
the list instead. 
The SELECT key word is used to specify which item is currently 
selected. Some examples of these :

setlist label CLEAR cod haddock place 

Clears the current list and replaces it with the items 'cod', 
'haddock' and 'place'.

setlist label DEL cod

Removes item 'cod' from the list.

setlist label select=place

selects the 'place' item.

The STEM option. This gives the name of an Arexx variable from which the 
items to be added to the list are taken. The variable 'stem.COUNT' must 
contain the number of items, which are then numbered 'stem.1', 'stem.2' 
etc. This option only allows you to add to the list you cannot use the DEL 
switch in conjunction with this. But the SELECT and CLEAR options do work. 
In addition the variable 'stem.SELECT' may contain the number of item in 
the list to be selected.
To do the same as

setlist label CLEAR cod haddock place SELECT cod

You can use

fish.COUNT = 3
fish.1 = cod
fish.2 = haddock
fish.3 = place
fish.SELECT = 1
setlist label CLEAR STEM fish

Note :
Some other rexx utils use stem.0 to hold the number of items rather
than stem.COUNT. A line like stem.0 = 'stem.COUNT' is no real bother.
So Varexx will stick to using stem.COUNT

Finally the update option, this will cause the given item number to be 
updated. To the value given on the line.

setlist label UPDATE=2 'skate'
Will change item 2 in the earlier example from 'haddock' to 'skate'.

If the stem option is given the that item will be read from the variable. 
fish.2 = 'skate'
setlist label STEM fish UPDATE=2

If the update and the select option are both given. Then the numbered item 
will be selected in the list. If no stem or text is given then no updating 
will be done. Due the way Varexx parses this command line, a dummy string 
must be given after the select item. 
setlist label SELECT s UPDATE=3
will select 'place' in the above list.

setlist label SELECT s UPDATE=3 'skate'
This will change 'place' to 'skate' and then select it.

5.2.2.11. Read
-------------
read LABEL/A,VAR,NUMBER/S

Allow Arexx to read the current state of the gadget. The state of the 
gadget is returned in RESULT. If the gadget is a listview and the VAR 
option is given then the complete list is written into the same stem 
variables as the setlist command uses.
The NUMBER option will return the ordinal number of the item in the 
list view in the RESULT variable.

If the list contains the items 'cod' 'haddock' 'place' and 'cod' is
selected then

read label cake

will set these variables.

cake.COUNT = 3
cake.1 = cod
cake.2 = haddock
cake.3 = place
cake.SELECT = 1

Also the commands

options results
read label NUMBER

will give RESULT = 1.
If no item is selected in the listview then stem.SELECT = 0.

5.2.2.12. Spawn
---------------
spawn PORTNAME/A,PS/K
This command allows you to have more than one window open on the screen at
once. It works in the same way as the load command. except that instead of
loading a new .gui file. It merely clones the already loaded one. The 
command returns a new VAREXX.## portname in the RESULT field.
        options results
        ...
        
        address VAREXX

        call openport("SQUID") 

        'load dh1:c_src/Varexx2/gui/test.gui SQUID PS=MYSCREEN'
        host = result
        address value host
        show window_one

        call openport("SQUID.1") 

        'spawn SQUID.1 PS=MYSCREEN2'

        host2 = result

        address value host2

        show window_two

This opens the 'window_one' on the MYSCREEN public screen and 'window_two' 
on MYSCREEN2.
Each window must be passed a hide unload command to free up the memory
connected with it. However the order in which these are sent doesn't 
matter.

5.2.2.13. Setlabel
------------------
Setlabel LABEL/A,TEXT/M,CYCLE/S,SCREEN/S,WINDOW/S

This command allows you to set the text in the window. It works in a number 
of different ways. For all gadgets except MX_KIND. You can use
'setlabel GADGET_LABEL TEXT' to set the gadget's title. This only works if 
the window is not open on the screen. Ie the 'show' command hasn't been 
given yet. 

For MX_KIND the text for the options. Is given as 
'setlabel GADGET_LABEL OPTION_1 OPTION_2 etc'
Again the window must not be open for this to work. In all these cases the 
underscore '_' is used to specify the keyboard shortcut.

For CYCLE_KIND the options in the gadget may be set by including the CYCLE 
switch. So 'setlabel GADGET_LABEL cycle OPTION_1 OPTION_2 etc' is used. 
This will work regardless of wether the window is open or not.

If the SCREEN or WINDOW switch is given. Then the LABEL is assumed to be a 
window name not a gadget name and either the screen title or the window 
title for that window will be set. This will work if the window is open as 
well. 

Some examples, (these need the window to be shut.)
setlabel OKAY '_Fin'
Sets the label in the OKAY gadget to Fin.

setlabel 'label=CYCLE' '_Choose'  
Sets the cycle gadget label. The 'label=' allows varexx to distinguish 
between the label and the switch option.

setlabel MXCHOICE 'One' 'Two' 'Three' 
Sets the options of a MX_KIND gadget.

These will work regardless of weather the window is open or not.
setlabel NEXT '"' || 'Window Title' || '"' window

Sets the window title of the window called NEXT to 'Window Title' the 
strange syntax is to allow varexx to correctly parse the spaces.

setlabel NEXT '"' || 'Varexx by Andrew Cook' || '"' screen
Sets the screen title for when the NEXT window is open.

setlabel 'label=cycle' 'cycle' 'Yes' 'No' 'Maybe'
Sets the options in the cycle gadget.

5.2.2.14. Activate
------------------
Activate LABEL/A

This command applies only to STRING_KIND and INTERGER_KIND gadgets only.
It activates the given gadget to allow the user to enter data into it.

5.2.2.15. Readcords
-------------------
Readcords STEM/A

This stores the X, Y locations of the currently open window into the
variables STEM.X and STEM.Y.

5.4. Messages from Varexx
-------------------------
Varexx sends messages to the port your script when events occur. Most of
these messages will be as a result of user action. Every time a gadget
is clicked a message is sent consisting the gadgets label and some 
information. The information is dependant on the gadgets type.

BUTTON_KIND, FILE_KIND - No information. Just the gadget name is sent.

STRING_KIND - The text entered by the user into the gadget.

NUMBER_KIND - The number entered into the gadget

MX_KIND, CYCLE_KIND - The option number selected.

CHECKBOX_KIND - TRUE if the gadget is ticked otherwise FALSE.

SLIDER_KIND, SCROLLER_KIND - The slider numeric position.

LISTVIEW_KIND - The contents of the selected item.

When the user selects the close window gadget a message of 'CLOSEWINDOW' 
is sent.

If the correct flags have been set in the IDCMP section of Gadtoolsbox 
then these messages may be received.

    ACTIVEWINDOW 
    INACTIVEWINDOW
    DISKINSERTED
    DISKREMOVED
    NEWSIZE
    CHANGEWINDOW

It is left as an exercise for the reader to decide what events can cause 
each one ? ( Hint - Look in section 5.1 :-)

Some Arexx commands ( WINDOW ) may cause some of these messages to be 
sent so it is possible to get stuck in a loop situation.

When windows that have been spawned the CLOSEWINDOW, ACTIVEWINDOW, 
INACTIVEWINDOW, NEWSIZE and CHANGEWINDOW window messages will append the
name of the window they came from (if and only if they come from a 
spawned window.) This allows two windows to share the same port in an 
Arexx script.

The KEYBOARD message will be sent if the IDCMP_VANILLAKEY flag has been set.
The message is followed by the value of the key pressed. 
ie
    KEYBOARD a
    KEYBOARD V
    KEYBOARD 4
    KEYBOARD @

For other keys the following messages will be sent
ESC TAB 
BS (backspace)
DELETE HELP RETURN 
UP DOWN LEFT RIGHT (Cursor keys.)
F1, F2, F3 etc.

ie
    KEYBOARD UP

6. Thanks - Could not be done without ?
---------------------------------------
And now for something tacky

Thanks to
    Jan van den Baard   - For Gadtoolsbox.
    Nico Francois       - For reqtools and many other programs.
    Richard Rauch       - Some early ideas.
    Fergus Duniho       - For AlphaSpell and relighting my interest in
                          this project with his gui's for XES and
                          ideas and help.
    Matt Dillon         - For DICE.
    Peter Miller        - A PC programmer but with a knowledge of
                          68000 assembler and constant source of 
                          (dis)couragement.
    Stephan Sürken      - For Text2Guide.
    Douglas Keller      - The ButClass code. (It on the Aminet in dev/gui).
    Escom               - For this new A1200.
    Commodore           - For this A500.

    These people and others have give ideas, bug reports, moans and even
    in some cases actually used Varexx.

    Gregg Green, Boris Foldman, Nick Ring, Michael Pounders, Kevin Phair,
    Andy Styles, John Collet, Marcel Offermans, Mattias Linder, 
    Matthew Soar, Jim Hines, Girard Michel, Perry Mowbray.

        (Sounds for people being sick offstage.)

Cheers

Andy Cook

Email 'amc93el@soton.ac.uk'

Varexx                  Copyright (c)1995-1996 Andrew Cook
Arexxport.library       Copyright (c)1995 Andrew Cook
reqtools.library        Copyright (c)1991-1994 Nico Francois
                                     1995 Magnus Holmgren
rexxreqtools.library    Copyright (c)1992-1994 Rafael D'Halleweyn.
AlphaSpell              Copyright (c)1995 Fergus Duniho.
Text2Guide 03.10        Copyright (c)1994 Stephan Sürken

All other copyrights, trademarks etc acknowledged.

The button class and file_kind gadgets where created with BOOPSI objects
based on those by Douglas Keller.

7. Arexxport Library - What is that ?
-------------------------------------
This is a shared library I wrote to allow the easy, yet flexible 
implementation of Arexx ports in programs. If you would like the 
(brief) documentation and support files. Drop me a line.

8. Todo - What's left ? 
-----------------------
Features To Add ( possible )

- The Gadtoolsbox program allows you to define beveled boxes, and
  fixed text neither of these are rendered by Varexx at the moment.
- Menus.

If you want / need one of these (or anything else) email me.

9. History - What was done when ?
---------------------------------
9.1. v0.0 To v0.5
-----------------
 v0.2
 02-09-95  - First beta test version.

 06-09-95  - Added the Window ZIP/S,FRONT/S,BACK/S,ACTIVATE/S command.
 
 v0.3
 09-09-95  - Added stem/A option to setlist command that adds items to
             list view from rexx variables. Suggested by Fergus.
           - Added a /M option to the set command allows enabling and
             disabling of many gadgets in one line.

 10-09-95  - When the close gadget is clicked now returns CLOSEWINDOW
             rather than closewindow. This is more consistent but
             breaks all scripts so far written. :-(

 14-09-95  - Some internal clean up.
           - BUGFIX Text_kind gadgets now work properly.
           - Removed the ALL/S option from read command. It didn't do
             anything !
           - read and setlist now can make use of a stem.SELECT 
             variable.
           - Added NUMBER/S option to read command.

 v0.4
 17-09-95  - Cleaned up error reporting code.
           - Added code to close the window is the port to which it 
             should send messages is closed. Ie when the script dies.

 30-09-95  - BUGFIX Varexx died if the libs weren't installed. Now it 
             doesn't you get a nice error message instead. Unless of 
             course it was the intuition.library that could not be 
             loaded. In which case your Amiga may be sick. Reported by 
             Boris.
           - BUGFIX Fixed string bugs that caused enforcer hits. Again 
             thanks to Boris.

 01-10-95  - BUGFIX Located the bug that caused Guru's after exit. Fixed 

             but had to removed key short cuts. Boris and enforcer at 
             work again.
           - BUGFIX Can now read properly from unclicked gadgets.

 v0.5
 02-10-95  - Added my own key handling functions.

 04-10-95  - Wrote a routine to load the .gui files myself. Thus 
             removing the need for GadToolsBox.library.
           - Then replaced the nofrag library with the exec libpooled 
             functions.

 05-10-95  - BUGFIX In List view selection. When the current item
             was deleted the selection was not cleared. Reported by 
             Fergus.

9.2. v1.0, v1.1
---------------
 v1.0        
 05-11-95  - First non-beta release.

 07-11-95  - Minor change to window command. Doesn't call 
             WindowToFront() or WindowToBack if not needed.

 09-11-95  - Removed the GET command.

 20-11-95  - BUGFIX In settext parsing. Reported by Fergus.

 v1.1        
 20-11-95  - BUGFIX The layout of gadgets with different fonts works 
             correctly.

 21-11-95  - Added support for disk, windowsize, windowactive events.

 21-11-95  - BUGFIX Check box gadget now sends the correct messages.

 22-11-95  - BUGFIX Large number of selections in cycle gadgets caused
             guru's. Reported by Nick Ring.
           - Add default path for .gui support.

9.3. v1.2, v1.3
---------------
 v1.2
 22-11-95  - Second public release.

 27-11-95  - Can now use set to disable MX_KIND and LISTVIEW_KIND. However
             operation only has an effect on v39+ versions of gadtools. 

 28-11-95  - Added spawn command. Allows more than one window to open from
             one GUI at a time.

 30-11-95  - BUGFIX Read command now returns 0 in stem.SELECT if not item
             is selected in the list view. Reported by Nick Ring.

 04-12-95  - Tidied up the spawn command. 

 v1.3
 04-12-95  - Added a version command.
           - Now remembers location of windows when they are closed.

 05-12-95  - Now supports GET_FILE gadgets (suggested by Nick Ring) and
             correctly supports shortcuts for buttons.

 06-12-95  - Settext with no line, now clears the gadgets.
           - BUGFIX Dealt with enforcer hits reported by Kevin Phair.

 07-12-95  - Tided up the distribution

 08-12-95  - MX_KIND gadgets now respond to key strokes.  

 11-12-95  - BUGFIX Some problems with the setlist command.

9.4. v1.4, v1.5
---------------
 v1.4
 14-12-95  - Third public release.

 03-01-96  - BUGFIX Check box return values inverted. Thanks John Collett.

 10-01-96  - BUGFIX Resizing of GUI saved with fonts other than Topaz 8 now
             works. Reported by Michel Girard.
           - Removed case sensitivity from gadget labels.
           - Added the setlabel command.
           - Added X, Y options to window command.

 v1.5
 11-01-96  - Added UPDATE option to setlist command. Suggested by Fergus.

 25-01-96  - Added activate command. Suggested by Perry Mowbray.
           - Added READCORDS command.
           - Added support for the keyboard.

9.5. v1.6
---------
 v1.6
 30-01-96  - Fourth public release.

 05-02-96  - BUGFIX I had linked v1.6 with a old version of the button BOOPSI 
             gadget.
 12-02-96  - BUGFIX In the readcords command and some fixes to the arexxport
             library. (Arexxport now v36.22).

9.6. v1.7
---------
 v1.7
    
 12-02-96  - Fifth public release

