home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 4 / Amiga Tools 4.iso / tools / other-tools / varexx / docs / readme < prev    next >
Encoding:
Text File  |  1992-09-02  |  27.6 KB  |  813 lines

  1. Document Varexx Readme 14 Dec 1995
  2.  
  3.                         Varexx Documentation
  4.                        ~~~~~~~~~~~~~~~~~~~~~~
  5.                   Release 1.4  (c)1995 Andrew Cook
  6.  
  7.                             14 Dec 1995
  8.                           
  9.  
  10. 1. Introduction - So what is it and what can it do ?
  11. ----------------------------------------------------
  12. Varexx is a program that allows you to control graphical user 
  13. interfaces (GUI's) from Arexx. The program loads the .gui files that 
  14. are saved by Jan van den Baard's Gadtoolsbox program and displays them 
  15. on the screen. Arexx scripts can then send messages to a port and 
  16. control the actions of the Gui. The script can read and set the 
  17. contents of each of the gadgets, resize the window and such like.
  18.  
  19. 2. Legal Bit - What won't I do ?
  20. --------------------------------
  21. Some or all of the files in this package may be may be transmitted by 
  22. any means. Providing words to the effect of
  23.  
  24. Varexx and Arexxport.library are Copyright(c)1995 Andrew Cook.
  25.  
  26. and my email address (amc93el@soton.ac.uk) are included in the 
  27. accompanying documentation. The files are FreeWare, copyright is 
  28. retained by the author (Andrew Cook).
  29.  
  30. These files may be included in any distribution commercial, shareware, 
  31. freeware or other. I would like to be informed of any such packages, 
  32. (drop me an email) but this is not a requirement.
  33.  
  34. ALTHOUGH THE FILES HAVE BEEN CAREFULLY TESTED ANY ERRORS OR ACCIDENTS 
  35. ARISING FROM THEIR USE IS NOT THE RESPONSIBITY OF THE AUTHOR. USE AT 
  36. YOUR OWN PERIL.
  37.  
  38. I take no responsibility for anything Varexx may do to your system. 
  39. But is less likely to crash your Amiga than a certain new operating 
  40. system 95 will. (Unless you've got a bridge board of course.)
  41.  
  42. 3. About the Author - So who are you ?
  43. --------------------------------------
  44. I am a third year electronics undergraduate at the University of 
  45. Southampton, England. I like SF, technology and having a laugh. If you 
  46. like you can't check out my www site as I haven't got one. However do 
  47. drop me a email to
  48.  
  49.     amc93el@soton.ac.uk
  50.  
  51. This will be valid until August 1996 after which I will get a demon 
  52. account. So download this package again and pick my new address out of 
  53. that.
  54.  
  55. 4. Installation - What do I do now ?
  56. ------------------------------------
  57. There are two programs in the Varexx distribution just copy both into 
  58. your path.
  59.  
  60. Varexx GUIPATH
  61.  
  62. This launches the Varexx server. This opens a port called VAREXX and 
  63. waits for scripts to send messages to it. The server detaches itself 
  64. properly so it can be run in the user-startup with the line "Varexx". 
  65. Only one copy of Varexx can (and needs to) be running at one time.
  66.  
  67. The Varexx program requires the Arexxport.library and the 
  68. reqtools.library, both of these are included in the distribution, copy 
  69. them into your libs: assignment.
  70.  
  71. The command can be optionally followed by a path. This will be used as
  72. the default path to load .gui files from.
  73.  
  74. eg Varexx rexx:gui/
  75.  
  76. Varexx will now look in rexx:gui/ path for any .gui files it needs.
  77.  
  78. VXC
  79.  
  80. This closes the Varexx server down. This can only be done if no gui 
  81. files are currently loaded into the server.
  82.  
  83. 10. The Demo Script - What can it do ?
  84. --------------------------------------
  85. To run the demos, click on the DemoSetup Icon. Then open the demos 
  86. drawer and click on the demo or the address book icons.
  87.  
  88. The demo shows off the features of Varexx and source code will reveal 
  89. most of the information needed to write your own scripts for Varexx. 
  90.  
  91. The Address Book is a simple address database written in Arexx. It 
  92. demonstrates the use of two windows at once with Varexx.
  93.  
  94. When address book is started a file requester will appear asking for a 
  95. data file to load. An example containing a few interesting people I 
  96. know is included. (Load the example address.data). 
  97. The main window is now displayed. You can scroll through the names 
  98. using the '<' and '>' buttons. Clicking on the 'List' produces a list 
  99. of names in the book and picking a name jumps to that entry. 
  100. To add an entry click on the 'Clear' button. Fill in the entries and 
  101. click on 'Update' to add the entry to the book.
  102. To change an entry, find it, change it and click on 'Update'.
  103. To delete an entry, click on delete, clicking twice undelete it. None 
  104. of the changes are saved until the address book is closed. A that 
  105. time, the entries are saved and the address book is sorted. 
  106.  
  107. The testgui file, brings up a filerequester asking for the a .gui file. 
  108. It then displays this and echos all messages from Varexx to the output
  109. console.
  110.  
  111. TestGUI2 does the same except, that it hacks about inside the .gui file 
  112. and extracts the name of all the windows in the file and gives you the 
  113. choice of them. This script was written by Nick Ring and contains some 
  114. hairy code so he will be horrified that I've distributed it unchanged. 
  115. I apologise to him for that - but it can be useful. 
  116.  
  117. Fergus Duniho has a script to use his spell checker - AlphaSpell - with 
  118. Varexx. It's on the Aminet as text/util/AspellGUI.lha. (And well worth a 
  119. look.)
  120.  
  121. 5. Programming Varexx - How do they do that ?
  122. ---------------------------------------------
  123. So you want to create your own Arexx gui's. You need will need to 
  124. create a gui file using Gadtoolsbox, see the documentation on using 
  125. that program and the notes below.
  126.  
  127. Having created the gui file you must then write the script to load and 
  128. display the window.
  129.  
  130. Some Notes / Comments and Ideas
  131.  
  132. Okay, having seen a few peoples scripts and written a few of my own. I
  133. feel that some ground rules (ideas anyway) should be written. 
  134.  
  135.  1) Starting, stopping the Varexx server from within a script.
  136. I feel you should only close the Varexx server ('address command VXC'
  137. does it) if you have started it youself. See the example script below.
  138.  
  139.  2) The location of the .GUI file.
  140. Your script should not hard code this. I feel the best thing to set a
  141. variable near the start of the script containing the .gui file name. 
  142. Allowing the user to change it easily. Secondly I would assume that all 
  143. the .gui files will be stored in a single location, and that the user
  144. will tell varexx where that is. So don't hard code paths into the gui 
  145. file name.
  146.  
  147. But that's just my $0.02 worth.
  148.  
  149. 5.3. Example Script
  150. -------------------
  151. /* Test script for Varexx */
  152.     guifile = 'myguifile.gui'
  153.  
  154.     options results
  155.  
  156.     /* Open libs needed */
  157.     if ~show("L","rexxsupport.library") then
  158.         if ~addlib("rexxsupport.library", 0, -30) then exit
  159.  
  160.     /* Check Varexx is loaded if not load it */
  161.  
  162.     if show( 'p', 'VAREXX' ) ~= 1 then do
  163.         address command 'run Varexx'
  164.         waitforport VAREXX
  165.         RanVarexx = TRUE
  166.     end; else 
  167.         RanVarexx = FALSE
  168.  
  169.     address VAREXX
  170.  
  171.     /* Open the port for gui to talk to */
  172.     call openport("WINDOWPORT")
  173.  
  174.     /* Load the gui file into Varexx */
  175.     'load ' guifile 'WINDOWPORT'
  176.  
  177.     /* Set host to the port for this gui file */
  178.     host = result 
  179.     address value host
  180.  
  181.     /* Display the window */
  182.     show 
  183.  
  184.     /* Wait for the user to close the window */
  185.     do forever
  186.         /* Wait for a message from Varexx */
  187.         call waitpkt( "WINDOWPORT" )
  188.  
  189.         /* Get the message */
  190.         packet = getpkt( "WINDOWPORT" )
  191.  
  192.         /* This is not a null message */
  193.         if packet ~= '00000000'x then do 
  194.  
  195.             /* Get the information about the message */
  196.             class  = getarg(packet)
  197.  
  198.             /* If the message says the user clicked on the closewindow
  199.              * gadget then leave */
  200.             if class = closewindow then leave
  201.  
  202.         end
  203.     end
  204.  
  205.     /* Hide the window and unload the gui file from memory */
  206.     'hide unload'    
  207.  
  208.     /* Close the port */
  209.     call closeport( "WINDOWPORT" )
  210.  
  211.     /* I launched varexx so close it */
  212.     if RanVarexx = TRUE then ADDRESS COMMAND VXC
  213.  
  214.     exit
  215.  
  216. 5.1. The GUI files
  217. ------------------
  218. When using Gadtoolsbox to design .gui file for Varexx the following 
  219. hints may be useful.
  220.  
  221. At the moment, Menus are not supported by Varexx so don't bother to 
  222. set any up. Also Fixed Text and Bevel boxes are not rendered by 
  223. Varexx. Varexx  will ignore any Custom or Public screen settings. This 
  224. may change in the future so it is best to design the Gui to open on 
  225. the default public screen.  This allows the screen to be specified by 
  226. the PS argument to the load command  and will not clash with any 
  227. future behavior of Varexx. The plan is to have Varexx able to open 
  228. custom public / private screens at some time.
  229.  
  230. Of the window flags :
  231.     SIZEGADGET      - Varexx doesn't resize the gadgets in a window. 
  232.                       But this flag may be set.
  233.     DEPTHGADGET     - May be set.
  234.     SIZEBRIGHT      - May be set. See SIZEGADGET.
  235.     SMART_REFRESH   - Ignored by Varexx.
  236.     SUPER_BITMAP    - Ignored by Varexx.
  237.     BACKDROP        - May be set. (Not often useful.)
  238.     GIMMEZEROZERO   - This has no effect on the final appearance. 
  239.                       However less memory is used if it is left off.
  240.     ACTIVATE        - May be set.
  241.     DRAGBAR         - May be set.
  242.     CLOSEGADGET     - May be set.
  243.     SIZEBOTTOM      - May be set. See SIZEGADGET.
  244.     SIMPLE_REFRESH  - Ignored by Varexx.
  245.     OTHER_REFRESH   - Ignored By Varexx.
  246.     REPORT_MOUSE    - Ignored By Varexx.
  247.     BORDERLESS      - May be set. ( But not very useful.)
  248.     RMBTRAP         - Ignored by Varexx.
  249.  
  250. A subset of the IDCMP options are used by Varexx. If these options are
  251. selected then Varexx will send additional messages to the Arexx script.
  252.  
  253.     IDCMP_ACTIVEWINDOW - A activewindow message is sent when the Varexx 
  254.         window becomes active. ie. when the user clicks on it.
  255.     IDCMP_INACTIVEWINDOW - A inactivewindow message is sent when the Varexx
  256.         window ceases to be active. ie. when the user clicks outside it.
  257.     IDCMP_DISKINSERTED - A diskinserted message is sent when when a disk 
  258.         is inserted.
  259.     IDCMP_DISKREMOVED - A diskremoved message is sent if a disk is removed.
  260.     IDCMP_NEWSIZE - A newsize message is sent when the size of the window
  261.         is changed. This includes clicking on the ZIP gadget.
  262.     IDCMP_CHANGEWINDOW - A changewindow message is sent when there is any
  263.         change in the window's size or position.
  264.  
  265. Of the tags,
  266.     InnerWidth, InnerHeight,
  267.     AutoAdjust, FallBack    - May be set.
  268.     MouseQueue, RptQueue    - Are all ignored by Varexx.
  269.     WindowTitle is used.
  270.     ScreenTitle is used. Enter a blank title to get the default screen 
  271.     title.
  272.     Prefs Zoom and Pos Zoom will give a window with no size gadget a 
  273. zoom gadget. Both zip the window to it's title bar. Prefs also moves 
  274. the window to the top left corner of the screen.
  275.  
  276. All gadgets are supported. The label for each gadget is the title used
  277. by Varexx to name each gadget. Varexx converts these to uppercase and 
  278. is case sensitive. This is because Arexx has a  habit of uppercasing
  279. words and doing this avoids having too many ' and " in the Arexx 
  280. program.
  281. FILE_KIND gadgets rely on the script to supply the filerequester, they 
  282. just act as BUTTON_KIND gadgets. This allows the script rather than
  283. Varexx to determine the information in the requester.
  284.  
  285. Key Strokes ( _Cancel etc ) are supported, providing the box is ticked 
  286. in Gadtoolsbox. Tabbing between gadget also works.
  287.  
  288. Do not compress your GUI files or you will be in deep trouble.
  289. Default options listed for the LISTVIEW kind do not work.
  290.  
  291. 5.2. Arexx Commands
  292. ------------------
  293. When Varexx is active there are three different ports that you have to 
  294. deal with. Two of these are opened by Varexx and you send messages to 
  295. them. The other is opened by you and Varexx sends messages to it when 
  296. the user clicks on a gadget.
  297.  
  298. When the Varexx server it opens a port called 'VAREXX' there are two 
  299. commands that can be sent to this port.
  300.  
  301. 5.2.1. Commands for the VAREXX port.
  302. ---------------------------------
  303. When launched Varexx opens a Arexx port called 'VAREXX'. This port  
  304. accepts two different commands.
  305.  
  306. 5.2.1.1. Load 
  307. ------------
  308. load FILE/A,PORT/A,PS/K
  309.  
  310. Loads the given .gui file into memory. If the file is given an absolute
  311. path ( ie. rexx:gui/myfile.gui ) then that will be loaded. If not then the
  312. default path ( given when Varexx is run ) will be used. If not found 
  313. there then the file on its own will be looked for.
  314. ie. If Varexx is run with the line "Varexx rexx:guifiles/"
  315.  
  316. The commands 
  317.  
  318. load fish/mygui.gui
  319.     will try to load "rexx:guifiles/fish/mygui.gui" and then try 
  320.     "fish/mygui.gui".
  321. load rexx:fish/mygui.gui
  322.     tries to load "rexx:fish/mygui.gui".
  323. load mygui.gui
  324.     tries to load "rexx:guifiles/mygui.gui" and then "mygui.gui".
  325.  
  326. This command doesn't display the window however. PORT is the name of 
  327. the port to which the window will send messages when the user operates
  328. the window's gadgets. This port should be created with the OpenPort( )  
  329. function in the rexxsupport library. 
  330. The windows will open on the default public screen unless the name of  
  331. an alternative screen is given in the PS option.
  332. This command returns the name (in result - so turn 'options results'  
  333. on first) of a Arexx port to which messages about this window may be  
  334. sent. 
  335. eg
  336.         options results
  337.         ...
  338.         
  339.         address VAREXX
  340.  
  341.         call openport("SQUID") 
  342.  
  343.         'load dh1:c_src/Varexx2/gui/test.gui SQUID PS=MYSCREEN'
  344.         host = result
  345.  
  346. This loads the gui file 'test.gui' into memory, setting it to send  
  347. messages to a port called 'SQUID', display it's windows on the  
  348. MYSCREEN and it will receive commands at the port named in the  
  349. variable 'host'. (Use 'address var host' to send commands.)
  350.  
  351. 5.2.1.2. Quit
  352. -------------
  353. quit
  354.  
  355. If there are no .gui file currently loaded by the Varexx server 
  356. this command will close the server down and free the memory used by    
  357. it. This is what the VXC command sends to the VAREXX port.
  358.  
  359. 5.2.1.3. Version
  360. ----------------
  361. version
  362. Returns the version number of currently active copy of Varexx. The 
  363. version number is returned in RESULT. This command first appeared in 
  364. v1.3 so use code like this.
  365.     Options Results
  366.  
  367.     ...
  368.  
  369.     ADDRESS VAREXX
  370.     version
  371.     if rc ~= 0 then say 'Varexx 1.2 or earlier'
  372.         else say 'Varexx 'RESULT
  373.     ...
  374.  
  375. This command may also be sent to the window ports as well.
  376.  
  377. 5.2.2. Commands for window ports
  378. --------------------------------
  379. The following command can be sent to the specific port for a gui file, 
  380. ie. the portname returned by the load command.
  381.  
  382. 5.2.2.1. Show
  383. -------------
  384. show WINDOW
  385.  
  386. This displays the named window. The window name is given to the  
  387. window in Gadtoolsbox not the window title. If no name is given then  
  388. the first window in the file is displayed.
  389.  
  390. 5.2.2.2. Hide
  391. ------------
  392. hide UNLOAD/S
  393.  
  394. If the .gui file has a window open this command will close it. If  
  395. the unload  option is given, the .gui file will be removed from     
  396. memory as well. You cannot read information from the windows gadgets  
  397. after this command has been given. This command can be given with the  
  398. unload option when no window is open to free up memory.
  399.  
  400. 5.2.2.3. Window
  401. ---------------
  402. window ZIP/S,FRONT/S,BACK/S,ACTIVATE/S
  403.  
  404. This command changes the state of the window.
  405. ZIP - move the window to it's alternate place and size. As if the     
  406. user clicked the zip gadget.
  407. FRONT - Brings the window to front of the screen.
  408. BACK - Puts it to the back (surprised ?).
  409. ACTIVATE - Gives the window the focus for user input.
  410. 5.2.2.4. Busy
  411. -------------
  412. busy SET/S
  413.  
  414. The command 'busy set' sets the busy pointer in the Varexx window
  415. and blocks all user input to the window. Just 'busy' on its own clears 
  416. the pointer and unblocks the window again.
  417.  
  418. 5.2.2.5. Set
  419. ------------
  420. set LABEL/M/A,ENABLE/S,DISABLE/S
  421.  
  422. This enables / disables the given gadget(s). A list of gadgets can 
  423. be given and all will be affected.
  424.  
  425. 5.2.2.6. Settext
  426. ----------------
  427. settext LABEL/A,STRING/F
  428.  
  429. Passes the given string to the gadget. Used by STRING_KIND and     
  430. TEXT_KIND  gadgets only. This sets the text in both of those types.
  431.  
  432. 5.2.2.7. Setnum
  433. ---------------
  434. setnum LABEL/A,NUMBER/N
  435.  
  436. Passes the number to the given gadget. Sets the value of NUMBER_KIND 
  437. and  INTEGER_KIND gadgets. Picks the option for MX_KIND and CYCLE_KIND 
  438. (these are  numbered from 0 upwards ). Sets the position of the marker 
  439. in SCROLLER and  SLIDER kind.
  440.  
  441. 5.2.2.8. Setcheck
  442. -----------------
  443. setcheck LABEL/A,CHECK/S
  444.  
  445. Set a gadget of CHECKBOX_KIND to ticked or not.
  446.  
  447. 5.2.2.9. Setbar
  448. ---------------
  449. setbar LABEL/A,MIN=VISIBLE/N/K,MAX=TOTAL/N/K
  450.  
  451. For a SLIDER_KIND this sets the max and min values of the run.
  452. For a SCROLLER_KIND this sets the max values and the number of 
  453. units the knob represents.
  454.  
  455. 5.2.2.10. SetList
  456. ----------------
  457. setlist LABEL/A,CLEAR/S,DEL/S,SELECT/K,STEM/K,ITEMS/M
  458.  
  459. Controls the listview type of gadgets. Okay, this is were it gets fun. 
  460. CLEAR switch this clears the listview. Before any other action is 
  461. taken. ITEMS is a list of items to be added to the bottom of the list. 
  462. Or if the DEL option is given as well these items will be removed from 
  463. the list instead. 
  464. The SELECT key word is used to specify which item is currently 
  465. selected. Some examples of these :
  466.  
  467. setlist label CLEAR cod haddock place 
  468.  
  469. Clears the current list and replaces it with the items 'cod', 
  470. 'haddock' and 'place'.
  471.  
  472. setlist label DEL cod
  473.  
  474. Removes item 'cod' from the list.
  475.  
  476. setlist label select=place
  477.  
  478. selects the 'place' item.
  479.  
  480. Finally the STEM option. This gives the name of an Arexx variable from 
  481. which the items to be added to the list are taken. The variable 
  482. 'stem.COUNT' must contain the number of items, which are then numbered 
  483. 'stem.1', 'stem.2' etc. This option only allows you to add to the list 
  484. you cannot use the DEL switch in conjunction with this. But the SELECT 
  485. and CLEAR options do work. In addition the variable 'stem.SELECT' may 
  486. contain the number of item in the list to be selected.
  487. To do the same as
  488.  
  489. setlist label CLEAR cod haddock place SELECT cod
  490.  
  491. You can use
  492.  
  493. fish.COUNT = 3
  494. fish.1 = cod
  495. fish.2 = haddock
  496. fish.3 = place
  497. fish.SELECT = 1
  498. setlist label CLEAR STEM fish
  499.  
  500. Note :
  501. Some other rexx utils use stem.0 to hold the number of items rather
  502. than stem.COUNT. A line like stem.0 = 'stem.COUNT' is no real bother.
  503. So Varexx will stick to using stem.COUNT
  504.  
  505. 5.2.2.11. Read
  506. -------------
  507. read LABEL/A,VAR,NUMBER/S
  508.  
  509. Allow Arexx to read the current state of the gadget. The state of the 
  510. gadget is returned in RESULT. If the gadget is a listview and the VAR 
  511. option is given then the complete list is written into the same stem 
  512. variables as the setlist command uses.
  513. The NUMBER option will return the ordinal number of the item in the 
  514. list view in the RESULT variable.
  515.  
  516. If the list contains the items 'cod' 'haddock' 'place' and 'cod' is
  517. selected then
  518.  
  519. read label cake
  520.  
  521. will set these variables.
  522.  
  523. cake.COUNT = 3
  524. cake.1 = cod
  525. cake.2 = haddock
  526. cake.3 = place
  527. cake.SELECT = 1
  528.  
  529. Also the commands
  530.  
  531. options results
  532. read label NUMBER
  533.  
  534. will give RESULT = 1.
  535. If no item is selected in the listview then stem.SELECT = 0.
  536.  
  537. 5.2.2.12. Spawn
  538. ---------------
  539. spawn PORTNAME/A,PS/K
  540. This command allows you to have more than one window open on the screen at
  541. once. It works in the same way as the load command. except that instead of
  542. loading a new .gui file. It merely clones the already loaded one. The 
  543. command returns a new VAREXX.## portname in the RESULT field.
  544.         options results
  545.         ...
  546.         
  547.         address VAREXX
  548.  
  549.         call openport("SQUID") 
  550.  
  551.         'load dh1:c_src/Varexx2/gui/test.gui SQUID PS=MYSCREEN'
  552.         host = result
  553.         address value host
  554.         show window_one
  555.  
  556.         call openport("SQUID.1") 
  557.  
  558.         'spawn SQUID.1 PS=MYSCREEN2'
  559.  
  560.         host2 = result
  561.  
  562.         address value host2
  563.  
  564.         show window_two
  565.  
  566. This opens the 'window_one' on the MYSCREEN public screen and 'window_two' 
  567. on MYSCREEN2.
  568. Each window must be passed a hide unload command to free up the memory
  569. connected with it. However the order in which these are sent doesn't 
  570. matter.
  571.  
  572. 5.4. Messages from Varexx
  573. -------------------------
  574. Varexx sends messages to the port your script when events occur. Most of
  575. these messages will be as a result of user action. Every time a gadget
  576. is clicked a message is sent consisting the gadgets label and some 
  577. information. The information is dependant on the gadgets type.
  578.  
  579. BUTTON_KIND, FILE_KIND - No information. Just the gadget name is sent.
  580.  
  581. STRING_KIND - The text entered by the user into the gadget.
  582.  
  583. NUMBER_KIND - The number entered into the gadget
  584.  
  585. MX_KIND, CYCLE_KIND - The option number selected.
  586.  
  587. CHECKBOX_KIND - TRUE if the gadget is ticked otherwise FALSE.
  588.  
  589. SLIDER_KIND, SCROLLER_KIND - The slider numeric position.
  590.  
  591. LISTVIEW_KIND - The contents of the selected item.
  592.  
  593. When the user selects the close window gadget a message of 'CLOSEWINDOW' 
  594. is sent.
  595.  
  596. If the correct flags have been set in the IDCMP section of Gadtoolsbox 
  597. then these messages may be received.
  598.  
  599.     ACTIVEWINDOW 
  600.     INACTIVEWINDOW
  601.     DISKINSERTED
  602.     DISKREMOVED
  603.     NEWSIZE
  604.     CHANGEWINDOW
  605.  
  606. It is left as an exercise for the reader to decide what events can cause 
  607. each one ? ( Hint - Look in section 5.1 :-)
  608.  
  609. Some Arexx commands ( WINDOW ) may cause some of these messages to be 
  610. sent so it is possible to get stuck in a loop situation.
  611.  
  612. When windows that have been spawned the CLOSEWINDOW, ACTIVEWINDOW, 
  613. INACTIVEWINDOW, NEWSIZE and CHANGEWINDOW window messages will append the
  614. name of the window they came from (if and only if they come from a 
  615. spawned window.) This allows two windows to share the same port in an 
  616. arexx script.
  617.  
  618. 6. Thanks - Could not be done without ?
  619. ---------------------------------------
  620. And now for something tacky
  621.  
  622. Thanks to
  623.     Jan van den Baard   - For Gadtoolsbox.
  624.     Nico Francois       - For reqtools and many other programs.
  625.     Richard Rauch       - Some early ideas.
  626.     Fergus Duniho       - For AlphaSpell and relighting my interest in
  627.                           this project with his gui's for XES and
  628.                           ideas and help.
  629.     Matt Dillon         - For DICE.
  630.     Peter Miller        - A PC programmer but with a knowledge of
  631.                           68000 assembler and constant source of 
  632.                           (dis)couragement.
  633.     Stephan Sürken      - For Text2Guide.
  634.     Douglas Keller      - The ButClass code. (It on the Aminet in dev/gui).
  635.     Escom               - For this new A1200.
  636.     Commodore           - For this A500.
  637.  
  638.     These people and others have lent ideas, bug reports, moans and even
  639.     in some cases actually used Varexx.
  640.  
  641.     Kevin Phair, Jim Hines, John Collett, Boris Folgmann, Gregg Green,
  642.     Nick Ring.
  643.  
  644.         (Sounds for people being sick offstage.)
  645.  
  646. Cheers
  647.  
  648. Andy Cook
  649.  
  650. Email 'amc93el@soton.ac.uk'
  651.  
  652. Varexx                  Copyright (c)1995 Andrew Cook
  653. Arexxport.library       Copyright (c)1995 Andrew Cook
  654. reqtools.library        Copyright (c) Nico Francois
  655. rexxreqtools.library    Copyright (c)1992-1994 Rafael D'Halleweyn.
  656. AlphaSpell              Copyright (c)1995 Fergus Duniho.
  657. Text2Guide 03.10        Copyright (c)1994 Stephan Sürken
  658.  
  659. All other copyrights, trademarks etc acknowledged.
  660.  
  661. The button class and file_kind gadgets where created with BOOPSI objects
  662. based on those by Douglas Keller.
  663.  
  664. 7. Arexxport Library - What is that ?
  665. -------------------------------------
  666. This is a shared library I wrote to allow the easy, yet flexible 
  667. implementation of Arexx ports in programs. If you would like the 
  668. (brief) documentation and support files. Drop me a line.
  669.  
  670. 8. Todo - What's left ? 
  671. -----------------------
  672. Features To Add ( possible )
  673.  
  674. - Use the IDCMP flags to get mouse and keyboard events.
  675. - The GadToolsBox program allows you to define beveled boxes, and
  676.   fixed text neither of these are rendered by Varexx at the moment.
  677. - Number option on setlist (Suggested by Fergus). 
  678. - Cursor keys to control listviews.
  679. - Opening / closing of custom screens.
  680. - Menus.
  681. - Read and set X and Y co-ords of windows. Using a READCORDS SETCORDS
  682.   commands.
  683. - Locale.
  684. - Use of the backfill window tag thing. Option on Show.
  685. - Ability to set Text in gadgets from Scripts. Would allow the use of 
  686.   the locale.library easilly.
  687. - Adding items to Cycle gadgets.
  688.  
  689. If you want / need one of these (or anything else) email me.
  690.  
  691. 9. History - What was done when ?
  692. ---------------------------------
  693. 9.1. v0.0 To v0.5
  694. -----------------
  695.  v0.2
  696.  02-09-95  - First beta test version.
  697.  
  698.  06-09-95  - Added the Window ZIP/S,FRONT/S,BACK/S,ACTIVATE/S command.
  699.  
  700.  v0.3
  701.  09-09-95  - Added stem/A option to setlist command that adds items to
  702.              list view from rexx variables. Suggested by Fergus.
  703.            - Added a /M option to the set command allows enabling and
  704.              disabling of many gadgets in one line.
  705.  
  706.  10-09-95  - When the close gadget is clicked now returns CLOSEWINDOW
  707.              rather than closewindow. This is more consistent but
  708.              breaks all scripts so far written. :-(
  709.  
  710.  14-09-95  - Some internal clean up.
  711.            - BUGFIX Text_kind gadgets now work properly.
  712.            - Removed the ALL/S option from read command. It didn't do
  713.              anything !
  714.            - read and setlist now can make use of a stem.SELECT 
  715.              variable.
  716.            - Added NUMBER/S option to read command.
  717.  
  718.  v0.4
  719.  17-09-95  - Cleaned up error reporting code.
  720.            - Added code to close the window is the port to which it 
  721.              should send messages is closed. Ie when the script dies.
  722.  
  723.  30-09-95  - BUGFIX Varexx died if the libs weren't installed. Now it 
  724.              doesn't you get a nice error message instead. Unless of 
  725.              course it was the intuition.library that could not be 
  726.              loaded. In which case your Amiga may be sick. Reported by 
  727.              Boris.
  728.            - BUGFIX Fixed string bugs that caused enforcer hits. Again 
  729.              thanks to Boris.
  730.  
  731.  01-10-95  - BUGFIX Located the bug that caused Guru's after exit. Fixed 
  732.  
  733.              but had to removed key short cuts. Boris and enforcer at 
  734.              work again.
  735.            - BUGFIX Can now read properly from unclicked gadgets.
  736.  
  737.  v0.5
  738.  02-10-95  - Added my own key handling functions.
  739.  
  740.  04-10-95  - Wrote a routine to load the .gui files myself. Thus 
  741.              removing the need for GadToolsBox.library.
  742.            - Then replaced the nofrag library with the exec libpooled 
  743.              functions.
  744.  
  745.  05-10-95  - BUGFIX In List view selection. When the current item
  746.              was deleted the selection was not cleared. Reported by 
  747.              Fergus.
  748.  
  749. 9.2. v1.0, v1.1
  750. -----------------
  751.  v1.0        
  752.  05-11-95  - First non-beta release.
  753.  
  754.  07-11-95  - Minor change to window command. Doesn't call 
  755.              WindowToFront() or WindowToBack if not needed.
  756.  
  757.  09-11-95  - Removed the GET command.
  758.  
  759.  20-11-95  - BUGFIX In settext parsing. Reported by Fergus.
  760.  
  761.  v1.1        
  762.  20-11-95  - BUGFIX The layout of gadgets with different fonts works 
  763.              correctly.
  764.  
  765.  21-11-95  - Added support for disk, windowsize, windowactive events.
  766.  
  767.  21-11-95  - BUGFIX Check box gadget now sends the correct messages.
  768.  
  769.  22-11-95  - BUGFIX Large number of selections in cycle gadgets caused
  770.              guru's. Reported by Nick Ring.
  771.  
  772.  22-11-95  - Add default path for .gui support.
  773.  
  774. 9.3. v1.2 To v1.4
  775. -----------------
  776.  v1.2
  777.  22-11-95  - Second public release.
  778.  
  779.  27-11-95  - Can now use set to disable MX_KIND and LISTVIEW_KIND. However
  780.              operation only has an effect on v39+ versions of gadtools. 
  781.  
  782.  28-11-95  - Added spawn command. Allows more than one window to open from
  783.              one GUI at a time.
  784.  
  785.  30-11-95  - BUGFIX Read command now returns 0 in stem.SELECT if not item
  786.              is selected in the list view. Reported by Nick Ring.
  787.  
  788.  04-12-95  - Tidied up the spawn command. 
  789.  
  790.  v1.3
  791.  04-12-95  - Added a version command.
  792.  
  793.  04-12-95  - Now remembers location of windows when they are closed.
  794.  
  795.  05-12-95  - Now supports GET_FILE gadgets (suggested by Nick Ring) and
  796.              correctly supports shortcuts for buttons.
  797.  
  798.  06-12-95  - Settext with no line, now clears the gadgets.
  799.  
  800.  06-12-95  - BUGFIX Dealt with enforcer hits reported by Kevin Phair.
  801.  
  802.  07-12-95  - Tided up the distribution
  803.  
  804.  08-12-95  - MX_KIND gadgets now respond to key strokes.  
  805.  
  806.  11-12-95  - BUGFIX Some problems with the setlist command.
  807.  
  808.  v1.4
  809.  14-12-95  - Third public release.
  810.  
  811.  
  812.  
  813.