*******************************************************************************
*                                                                             *
*    IBM Object REXX for Linux                                                *
*    (c) Copyright International Business Machines Corporation 1998, 2000     *
*    All Rights Reserved                                                      *
*                                                                             *
*******************************************************************************

  This is the installation package of:  IBM Object REXX for Linux V2.1

  THE INSTALLATION OF THIS PACKAGE IS AT YOUR OWN RISK (see agreement text).
            DO NOT INSTALL IF YOU DO NOT AGREE TO THE CONDITIONS.


  This README file contains the following:

                        1. Agreement Text
                        2. Installation Information
                        3. Documentation
                        4. Programming Examples
                        5. REXX TCP/IP Sockets Support
                        6. REXX FTP Support
                        7. Undocumented features
                        8. Hints and Tips
                        9. Known problems
                       10. IMPORTANT
                       11. What has been fixed
                       12. Contacts

1. Agreement Text
        LICENSE AGREEMENT FOR OBJECT REXX FOR LINUX
   BEFORE INSTALLING THE PROGRAM, YOU SHOULD CAREFULLY READ
   THE FOLLOWING TERMS AND CONDITIONS.  INSTALLING THE PROGRAM
   INDICATES YOUR ACCEPTANCE OF THE TERMS AND CONDITIONS.  IF
   YOU DO NOT AGREE TO THE TERMS OF THIS AGREEMENT, DO NOT
   INSTALL THE PROGRAM.

   GRANT OF LICENSE:  The Program, Object REXX for LINUX, is
   owned by International Business Machines Corporation or one
   of its subsidiaries (IBM) and is copyrighted and licensed,
   not sold.  IBM grants you a non-transferable, non-exclusive
   license to use the Program.  As this Program is an
   application development tool, you may distribute
   applications created using the Program.

   You may not reverse assemble, reverse compile, otherwise
   translate or discover the source code of the Program, except
   as permitted by law without the possibility of contractual
   waiver.  In addition, unless otherwise specified, you may
   not rent , lease, sublicense, assign or distribute the
   Program to any third party.  You agree that any information
   or feedback you may provide to IBM in reference to the
   Program or this Agreement is non-confidential and you grant
   IBM a worldwide, fully paid up and irrevocable license to
   use this information/feedback for IBM business activities.

   CHARGE:  IBM is offering the Program to you at no charge
   under this Agreement.

   TERM AND TERMINATION:  You may terminate your license at any
   time by destroying all your copies of the Program.  IBM may
   terminate your license if you fail to comply with the terms
   of this Agreement.

   DISCLAIMER OF WARRANTY AND SUPPORT:  IBM will not provide
   any service or support for the Program whatsoever.

   THE PROGRAM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND
   EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
   IMPLIED WARRANTY OF MERCHANTABILITY AND FITNESS FOR A
   PARTICULAR PURPOSE.  THE ENTIRE RISK ARISING OUT OF THE USE
   OR PERFORMANCE OF THIS PROGRAM AND DOCUMENTATION REMAINS
   WITH YOU.  IN NO EVENT WILL IBM BE LIABLE FOR ANY LOST
   PROFITS, LOST SAVINGS, INCIDENTAL OR INDIRECT DAMAGES OR
   OTHER ECONOMIC CONSEQUENTIAL DAMAGES, EVEN IF IBM OR ITS
   AUTHORIZED SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF
   SUCH DAMAGES.  IN ADDITION IBM AND ITS SUPPLIERS WILL NOT BE
   LIABLE FOR ANY DAMAGES CLAIMED BY YOU BASED ON ANY THIRD
   PARTY CLAIM.

   Some jurisdictions do not allow the exclusion of implied
   warranties, or the limitation for consequential damages, so
   the above may not apply to you.

   Note to U.S. Government Users - Documentation related to
   Restricted Rights-Use, duplication, or disclosure is subject
   to restrictions set forth in GSA ADP Schedule Contract with
   IBM Corporation.

   This Agreement is entered into in the State of New York,
   U.S.A. and governed by the laws of the State of New York
   without regard to conflict of law principles.  Regardless
   of where you access this Program from, you agree to comply
   with all applicable United States laws including those
   regarding the export of data.


2. Installation Information

   Object REXX comes in two different packages. If you want to install
   the 'tgz' package you must at least have "tar" and "gzip" on your
   system.  The Red Hat Package Manager (RPM), which is part of most
   distribution packages, must be installed if you want to use the
   'rpm' package.
   If you already have an earlier version of Object REXX for LINUX
   on your system you must REMOVE this version before starting with
   the installation of this package.


2.1 System Requirements

   You need about 11MB free disk space for the installation of
   Object REXX for Linux including all documentation.

   You need an ELF system (i386) and your kernel must support System V IPC.
   Object REXX must run with Linux kernel version 2.2.10 or higher,
   libc.so.6.1.1 or higher, and ld.so.1.7.14 or higher.

   Object REXX was tested on the following Linux distributors, but it should
   also run on others:

     - GNU/Debian
     - SuSE 6.2
     - Red Hat 6.1
     - Caldera

2.2 Installation of the 'tgz' Package

   If you have the package maintainance tool 'pkgtool' on your system, you can
   use this to install or deinstall Object REXX via a graphical tool. Start
   pkgtool as 'root' and install the orexx-2-0.i386.tgz package. All files
   will be copied to the directory '/usr/local/orexx/' and its subdirectories.

   If pkgtool is not available you can install Object REXX by copying the
   orexx-2-0.i386.tgz file to the root directory ( / ) and decompress the
   package with the following command:

     tar zxvf orexx-2-0.i386.tgz

   If Object REXX for Linux does not run on your machine, you must set some
   environment variables.  The easiest way to do this is to use one of the
   shell scripts you will find in the directory '/usr/local/orexx/etc', namely:

     - rexx.sh
        type: '. /usr/local/orexx/etc/rexx.sh' if you use the bourne- or
        korn-shell (also bash)

     - rexx.csh
        type: 'source /usr/local/orexx/etc/rexx.csh' if you use the c-shell

   If necessary, add the appropriate script to your login-script to
   make Object REXX generally available.  If there are other users who
   want to improve their work by using Object REXX they must have access
   to the script and the directories where Object REXX is installed.

   You must add the following links:

ln -s -f /usr/local/orexx/lib/librexx.so.2.1       /usr/lib/librexx.so.2.1
ln -s -f /usr/local/orexx/lib/librexx.so.2.1       /usr/lib/librexx.so.2
ln -s -f /usr/local/orexx/lib/librexx.so.2.1       /usr/lib/librexx.so
ln -s -f /usr/local/orexx/lib/librexxapi.so.2.1    /usr/lib/librexxapi.so.2.1
ln -s -f /usr/local/orexx/lib/librexxapi.so.2.1    /usr/lib/librexxapi.so.2
ln -s -f /usr/local/orexx/lib/librexxapi.so.2.1    /usr/lib/librexxapi.so
ln -s -f /usr/local/orexx/lib/librexxutil.so.2.1   /usr/lib/librexxutil.so.2.1
ln -s -f /usr/local/orexx/lib/librexxutil.so.2.1   /usr/lib/librexxutil.so.2
ln -s -f /usr/local/orexx/lib/librexxutil.so.2.1   /usr/lib/librexxutil.so
ln -s -f /usr/local/orexx/lib/librxsock.so.2.1     /usr/lib/librxsock.so.2.1
ln -s -f /usr/local/orexx/lib/librxsock.so.2.1     /usr/lib/librxsock.so.2
ln -s -f /usr/local/orexx/lib/librxsock.so.2.1     /usr/lib/librxsock.so
ln -s -f /usr/local/orexx/lib/librxftp.so.2.1      /usr/lib/librxftp.so.2.1
ln -s -f /usr/local/orexx/lib/librxftp.so.2.1      /usr/lib/librxftp.so.2
ln -s -f /usr/local/orexx/lib/librxftp.so.2.1      /usr/lib/librxftp.so
#
ln -s -f /usr/local/orexx/bin/rexx                 /usr/bin/rexx
ln -s -f /usr/local/orexx/bin/rexx.img             /usr/bin/rexx.img
ln -s -f /usr/local/orexx/bin/rexxc                /usr/bin/rexxc
ln -s -f /usr/local/orexx/bin/rxqueue              /usr/bin/rxqueue
ln -s -f /usr/local/orexx/bin/rxsubcom             /usr/bin/rxsubcom
ln -s -f /usr/local/orexx/bin/rexxtry              /usr/bin/rexxtry
ln -s -f /usr/local/orexx/bin/rxdelipc             /usr/bin/rxdelipc



2.3 Install/Remove the 'rpm' Package

   To install the rpm-package, use your rpm-package-manager. Select the
   orexx_2-1.i386.rpm package for the installation. Refer to your package
   manager for further information. The package manager adds orexx to your
   local rpm-database.
   The command with the command line rpm-package-manager is:

      rpm -i orexx-2-1.i386.rpm

   Object REXX is installed in the directory /usr/local/orexx.  All required
   files are placed there.

   If Object REXX for Linux does not run on your machine, you must set some
   environment variables. The easiest way to do this is to use one of the
   shell scripts you will find in the directory '/usr/local/orexx/etc', namely:

     - rexx.sh
        type: '. /usr/local/orexx/etc/rexx.sh' if you use the bourne- or
        korn-shell (also bash)

     - rexx.csh
        type: 'source /usr/local/orexx/etc/rexx.csh' if you use the c-shell

   If necessary, add the appropriate script to your login-script to make
   Object REXX generally available.  If there are other users who want
   to improve their work by using Object REXX they must have access
   to the script and the directories where Object REXX is installed.

   The command 'rpm' can also be used to remove the package from the database
   if it is entered at the command line:

      rpm -e orexx-n-n

   Note that RPM removes the whole Object REXX directory tree /usr/local/orexx.


3. Documentation

   You can find the following documents in the directory
   /usr/local/orexx/doc/

     "Object REXX Reference"            - file: rexxref.pdf
     "Object REXX Programming Guide"    - file: rexxpg.pdf
     "RxSock Reference"                 - file: rxsock.pdf
     "RxFtp Reference"                  - file: rxftp.pdf

   The documentation is provided in Adobe Acrobat (*.pdf) format for viewing
   using the Adobe Acrobat reader acroread.  The Acrobat reader can be
   downloaded at no charge from URL

         http://www.adobe.com/prodindex/acrobat/readstep.html

   After downloading, follow the installation instructions to make it available
   on your Linux system. Make sure you provide the acroread link in the
   /usr/bin directory.

   Object REXX for Linux provides man-pages that can be displayed by typing

     man rexx

   in the command line.  In this way, initial usage information and service
   contacts are provided.


4. Programming Examples

   To help you explore programming in Object REXX, the following
   sample programs are provided (with source code):

     - ccreply.cmd   concurrent program using REPLY
     - complex.cmd   complex number class
     - factor.cmd    factorial program
     - greply.cmd    concurrent program using WAIT and NOWAIT
     - guess.cmd     a guessing game
     - ktguard.cmd   concurrent program using START and GUARD
     - month.cmd     displays days of the month of January
     - pipe.cmd      a pipeline implementation
     - qdate.cmd     date query program
     - qtime.cmd     time query program
     - semcls.cmd    semaphore class
     - stack.cmd     program which uses a stack class
     - usecomp.cmd   program which uses complex number class
     - usepipe.cmd   program which uses pipeline implementation

   You will find them in the directory '/usr/local/orexx/samples/'.
   The sample program files have the extension .cmd to be compatible
   with the other system environments Object REXX is running on.
   These programs are executable without any change on Windows 95/98,
   Windows NT, AIX, LINUX, and OS/2.

   Additional programming samples are provided to demonstrate the use of the
   Object REXX macro facility and the programming APIs. These can be found
   in separate subdirectories, called macro and api.  In each of these
   subdirectories you will find an associated README file explaining the
   specific programming sample.


5. REXX TCP/IP Sockets Support

   Object REXX supports TCP/IP sockets through the REXX Sockets interface
   "rxsock" implemented by the dynamic-load library librxsock.so. A description
   of the REXX Sockets interface is provided in the documentation for Object
   REXX for Linux in file rxsock.htm.  Use the ADOBE Acrobat Reader acroread
   to view this document.  Programming examples using TCP/IP sockets are
   provided on the Object REXX home page at:

        http://www.ibm.com/software/ad/obj-rexx/ibmrexx.html


6. REXX FTP Support

   Object REXX supports TCP/IP FTP through the REXX FTP interface "rxftp"
   implemented by the dynamic-load library librxftp.so.
   A description of the REXX FTP interface is provided in the documentation
   for Object REXX for Linux in the file rxftp.pdf.  Use the Adobe Acrobat
   Reader acroread to view this document. Programming examples using TCP/IP FTP
   are provided on the Object REXX home page at:

        http://www.ibm.com/software/ad/obj-rexx/ibmrexx.html


7. Undocumented features

   The following functions are available as system utilities in Object REXX
   for Linux but are not documented yet:

    - SysDumpVariables
    - SysGetFileDateTime
    - SysSetFileDateTime
    - SysStemCopy
    - SysStemDelete
    - SysStemInsert
    - SysStemSort


   SysDumpVariables
   ----------------

   Syntax:    rc = SysDumpVariables([filename])

   Parameter:
              filename - The name of the file to which variables are appended.
                         The dump is written to STDOUT if you omit this parameter.

   Function:  This function dumps all variables in the current scope either
              to the specified file (new data is appended) or to STDOUT
              if you omit filename. The output contains one variable per line:

              Name=MYVAR, Value="This is the content of MYVAR"

   Return codes:
               0 - Dump completed successfully
              -1 - Dump failed

   Examples:
              Call SysDumpVariables "MyVars.Lst" /* append vars to file */
              Call SysDumpVariables              /* list vars on STDOUT */



   SysGetFileDateTime
   ------------------

   Syntax:    rc = SysGetFileDateTime(filename [,timesel])

   Parameters:
              filename - The name of the file to be queried.
              timesel  - The file time to be queried, namely CREATE, ACCESS, WRITE.

   Function:  Returns the selected data and time attribute of the file filename
              provided that this is supported by the operating and file system.
              FAT, for example, does not support Create/Access.

              The selector for the time to be returned can be abbreviated to the
              first character.

              The filename can also be a directory name.
              The file that you want to query must not be opened by another process
              or must at least allow shared writes to query the timestamp.

   Return codes:
              The date and time in the format YYYY-MM-DD HH:MM:SS, or
              -1 to indicate that the file date and time query failed.

   Examples:
              Say "File creation time:" SysGetFileDateTime("MyFile.Log", "C")
              Say "File last access time:" SysGetFileDateTime("MyFile.Log", "A")
              Say "File last update time:" SysGetFileDateTime("MyFile.Log", "W")
              Say "Directory creation time:" SysGetFileDateTime("/usr/Mydir/", "C")



   SysSetFileDateTime
   ------------------

   Syntax:    rc = SysSetFileDateTime(filename [,newdate] [,newtime])

   Parameters:
              filename - The name of the file to be updated.
              newdate  - The new date for the file to be specified in the format
                         YYYY-MM-DD, where YYYY > 1800.
              newtime  - The new time for the file to be specified in the format
                         HH:MM:SS (24 hour format).

   Function:  Modifies the "Last Modified" date and time of file filename.
              If no new date or time is specified the file date or time is
              set to the current time (TOUCH). If only the date is omitted,
              the "Last Modified" date remains unchanged. If only the time
              is omitted, the "Last Modified" time remains unchanged.
              The file name can also be a directory name.

              The file that you want to change must not be opened by another
              process or must at least allow shared writes to update the timestamp.

   Return codes:
               0 - The file date and time were updated correctly.
              -1 - The update of the file date or time failed.

   Examples:
              Call SysSetFileDateTime "MyFile.Log"          /* touch file */
              Call SysSetFileDateTime "MyFile.Log", "1998-12-17"
              Call SysSetFileDateTime "MyFile.Log",, "16:37:21"
              Call SysSetFileDateTime "MyFile.Log", "1998-12-17", "16:37:21"
              Call SysSetFileDateTime "/usr/MyDir"



   SysStemCopy
   -----------

   Syntax:    rc = SysStemCopy(fromstem, tostem, [from], [to], [count] [,insert])

   Parameters:
              fromstem - The name of the source stem.
              tostem   - The name of the target stem.
              from     - The first index in the source stem to be copied.
              to       - The position at which the items are to be inserted in
                         the target stem.
              count    - The number of items to be copied or inserted.
              insert   - Either of the following values:
                         I - Insert items.
                         O - Overwrite items.

   Function:  Copies items from the source stem to the target stem. Items in the
              source stem are copied starting at the from index (default is 1)
              into the target stem beginning at the to index (default is 1).
              The number of items to be copied to the target stem can be specified
              with the count. The default is to copy all items in the source stem.
              You can also specify that the items are to be inserted into the
              target stem at the to position and the existing items are shifted
              to the end.
              This function operates only on stem arrays that specify the number
              of items in stem.0 and all items must be numbered from 1 to n without
              omitting an index.

   Return codes:
               0 - The stem was copied successfully.
              -1 - Copying the stem failed.

   Examples:
              Source.0 = 3
              Source.1 = "Hello"
              Source.2 = "from"
              Source.3 = "REXX"
              Call SysStemCopy "Source.", "Target."
              Call SysStemCopy "Source.", "Target.", 1, 5, 2, "I"



   SysStemDelete
   -------------

   Syntax:    rc = SysStemDelete(stem, startitem [,itemcount])

   Parameters:
              stem      - The name of the stem from which the item is to be deleted.
              startitem - The index of the item to be deleted.
              itemcount - The number of items to be deleted if more than one.

   Function:  Deletes the specified item at the index startitem in the stem.
              If more than one item is to be deleted the itemcount must be
              specified. After deleting the requested items the stem is
              compacted, which means that items following the deleted items
              are moved to the vacant positions.
              This function operates only on stem arrays that specify the
              number of items in stem.0 and all items must be numbered from
              1 to n without omitting an index.

   Return codes:
               0 - Deleting was successful.
              -1 - Deleting failed.

   Examples:
              Call SysStemDelete "MyStem.", 5
              Call SysStemDelete "MyStem.", 5, 4



   SysStemInsert
   -------------

   Syntax:    rc = SysStemInsert(stem, position, value)

   Parameters:
              stem     - The name of the stem in which an item is to be inserted.
              position - The index at which the new item is to be inserted.
              value    - The value of the new item.

   Function:  Inserts a new item at position in the stem. All items in the
              stem following this position are shifted down by one position.
              This function operates only on stem arrays that specify the
              number of items in stem.0 and all items must be numbered from
              1 to n without omitting an index.

   Return codes:
               0 - Inserting was successful.
              -1 - Inserting failed.

   Example:
              Call SysStemInsert "MyStem.", 5, "New value for item 5"



   SysStemSort
   -----------

   Syntax:    rc = SysStemSort(stem, order, type, start, end, firstcol, lastcol)

   Parameters:
              stem     - The name of the stem to be sorted.
              order    - Either "A" for ascending or "D" for descending.
                         The default is "A".
              type     - The type of comparison: either "C" for case or "I" for
                         ignore. The default is "C".
              start    - The index at which sorting is to start. The default is 1.
              end      - The index at which sorting is to end. The default
                         is the last item.
              firstcol - The first column to be used as sort key. The default is 1.
              lastcol  - The last column to be used as sort key. The default is
                         the last column.

   Function:  Sorts all or the specified items in the stem. The items can
              be sorted in ascending or descending order and the case of
              the strings being compared can be respected or ignored.
              Sorting can be further narrowed by specifying the first and
              last item to be sorted or the columns used as sort keys.
              Because the sort uses a quick-sort algorithm, the order of
              items according to the sort key is undetermined.
              This function operates only on stem arrays that specify the
              number of items in stem.0 and all items must be numbered from
              1 to n without omitting an index.

   Return codes:
               0 - The sort was successful.
              -1 - The sort failed.

   Examples:
              /* sort all elements descending, use cols 5 to 10 as key     */
              Call SysStemSort "MyStem.", "D",,,,5, 10
              /* sort all elements ascending, ignore the case              */
              Call SysStemSort "MyStem.", "A", "I"
              /* sort elements 10 to 20 ascending, use cols 1 to 10 as key */
              Call SysStemSort "MyStem.",,,10, 20, 1, 10



8. Hints and Tips

   A. This Object REXX for LINUX program package is made available on an
      'AS-IS' basis, but error reports are welcome to improve the quality of
      future distributions of Object REXX for LINUX.

   B. You can call REXX using the following syntax:

         rexx [-v] filename [arguments]

      If the first line is:

      #! /usr/local/orexx/bin/rexx

      the REXX interpreter can be invoked directly by entering

         filename [arguments]

      if the file is an executable.

      NOTE: The first line is removed by the shell in use before the REXX
      interpreter sees the contents of the command file.

      On UNIX based system platforms this first line has to be adjusted to the
      installation path of Object REXX  >>>#! /usr/lpp/orexx/bin/rexx<<<.
      On the system platforms Windows 95/98 and Windows NT with Object REXX
      version 1.0.3, this first line is recognized as a comment and the REXX
      code will run without a change if the latest update is installed.

      On OS/2 Warp system platforms, REXX code containing this type of shell
      prefix line will fail because OS/2 requires a comment to invoke
      the REXX interpreter!  To be able to execute the Object REXX code in
      this system environment you have to comment out the shell prefix line.

   C. Every time you submit a command to the system shell or you want to
      call another external REXX program from REXX you must put the command
      in quotes.  This causes the REXX interpreter to handle the command
      as a case sensitive string.  If the quotes are omitted, the interpreter
      will put the string into uppercase and LINUX will not recognize this
      command. This is important if you want to run REXX programs developed
      under OS/2, Windows95/98/NT, or other non-Unix platforms.

   D. If you want to load a function from an external library, remember that
      the library is case-sensitive.  For example, if the library name is
      librexxutil.so you have to type:

         rxfuncadd 'SysSleep','rexxutil','SysSleep'

      If you type:

         rxfuncadd 'SysSleep','Rexxutil','SysSleep'

      the interpreter will not find the library and the call will fail.

   E. There is an additional API called RexxShutDownAPI. If you call this
      API your process-shared data (shared memory) will be deleted.
      Be careful when using this feature.  Use it only if no other
      REXX program is running!
      Also the binary called "rxdelipc" can be used for the deletion.

   F. The number of external data queues is limited to 15 queues per user
      (one SESSION queue per process included).

   G. Every process-shared data is user-specific.  The limit is 16MB for
      each of the following data:

      - External data queues

      - Macro space and registations (external functions, subcommand handlers,
        system exits).

   H. The number of semaphores accessible via the REXX utility semaphore
      functions is limited to 32 per user.

   I. The name for external functions, subcommand handlers, system exits,
      external data queues, libraries, and semaphores can be up to 127
      characters long.


9. Problem fixing

   The development team of Object REXX for LINUX will provide fixes as soon as
   they are available but without any obligation to do so!


10. IMPORTANT:

   Object REXX on LINUX uses a shared memory for function registration and
   data exchange between different REXX processes.
   If a running REXX process must be interrupted (command: kill -9 pid)
   the shared memory might be left in disorder.  In this case, the inter-
   preter tries to restore the order of the shared memory. If this fails,
   use the binary  > rxdelipc <  to delete the shared memory.

   By default, Object REXX on LINUX uses the environment variable $HOME
   for shared-memory creation. From version 2.0 upwards, an environment
   variable  $RXHOME  can be set with a directory or file name that has
   group permission for read and write.  This enables REXX to exchange
   data between different users in addition to the data exchange of REXX
   processes. All users must belong to the same >primary< group and must
   have the same definition of RXHOME.

   The  > rxdelipc <  procedure first checks for the  $RXHOME  variable
   and, if it is set, the shared memory connected to it is deleted.
   If the environment variable $RXHOME is not set, the directory
   setting of the $HOME variable is checked for the file entry
   $HOME/..IBM_OREXXV#.R#.M#.F#. If there is no access permission to
   the $HOME directory, the '/tmp' directory is searched for the file named
   /tmp/..IBM_OREXXV#.R#.M#.F#userID.

   The > rxdelipc < procedure does not delete the shared memory if REXX
   is still running.
   Note: The $RXHOME variable can also be set to delete the
         shared memory connected to file $HOME/..IBM_OREXXV#.R#.M#.F#
         or to file /tmp/..IBM_OREXXV#.R#.M#.F#userID (owner).

         If you use REXX normally, REXX takes care of the shared memory.


11. What has been fixed:

   1. Fix of looping if rexx.cat cannot be found.
      The message catalog must reside in the directory /usr/local/orexx.

   2. Fix of reload failure if a library could not be loaded.

   3. Fix of hang when concurrent processes destroy the chain of
      session queues.

   4. If the Object REXX interpreter runs in the background
      (cgi-application) it tries to get the HOME directory of the
      effective user ID when the $RXHOME environment variable is
      not set (for more information, see Item 10 "IMPORTANT").

   5. Function registration is kept for each REXX process
      until it ends.  This prevents a memory leak by loading
      libraries each time a function is called and improves
      the performance of REXX.
      Note: Registered functions remain in the shared memory
            if the REXX process has been  "killed" (for more
            information about rxdelipc, see Item 10 "IMPORTANT").

   6. The shared memory anchor point is now a file named:
      ..IBM_OREXXV#R#M#F#. It resides in the $HOME directory and
      if this is not possible, it is in the /tmp directory, appended
      by the user ID.

   7. The RxFTP API has been fixed to tranfer binaries.

12. Contacts

   Please address any comments and problem reports to:

   the preferred way via our home page's problem reporting facility:
      http://www.ibm.com/software/ad/obj-rexx

 or
   Email: rexxhelp@vnet.ibm.com

 or
   Postal address:
   IBM Deutschland Entwicklung GmbH
   REXX Development, Department 7804
   Postbox 1380
   D-71003 Boeblingen
   Germany

