*
* Component:  IBM* Workstation APL2* Version 2.0 Runtime Library
*
* Function:   README for Linux*
*
* Copyright:  (c) Copyright IBM Corp. 2002
*             Licensed Materials - Property of IBM
*             All Rights Reserved.
*
*             US Government Users Restricted Rights -
*             Use, duplication or disclosure restricted by
*             GSA ADP Schedule Contract with IBM Corp.
*
========================================================================

CONTENTS

     1. Introduction
     2. Pre-requisites
     3. Installation
     4. Invocation
     5. Additional information
     6. Service Information

========================================================================

1. Introduction

   ABOUT THIS MEMO

   The information in this memo consists of hints for configuring the
   system, specific installation and update instructions, and
   information on fixes included in this level of the system.

   This is the May, 2007 edition of this document, for Service
   Level 10.  See section 6 for detailed information on the fixes and
   other changes in this level.

   ABOUT THE APL2 RUNTIME LIBRARY

   The APL2 Runtime Library is a subset of the full APL2 system.
   It provides the environment necessary to run applications
   written using the full APL2 system, but within the restrictions
   documented for the Runtime Library.

   The APL2 Runtime Library can be used to run:

   - Namespaces created using the external function CNS, using the
     -rns invocation option
   - APL2 statements and scripts, using the -input and -sm piped
     invocation options.

   The APL2 Runtime Library cannot be used to run applications which
   require interactive input through the session manager or use library
   system commands (such as )LOAD) to manage the application code.

   See the APL2 User's Guide for complete information on the restrictions
   for applications running on the APL2 Runtime Library.

   The APL2 Runtime Library may be redistributed without charge.
   You must distribute the complete installation file as provided.
   Individual components of APL2 may not be redistributed.

   Your application containing the APL2 Runtime Library must be labeled
   as follows:

    "CONTAINS Workstation APL2 Runtime Modules
     (c) Copyright IBM Corporation 1991-2002
     All Rights Reserved"

   See the LICENSE INFORMATION section of the README file in the main
   APL2 directory for complete terms and conditions of redistribution.

========================================================================

2. Pre-requisites

   - APL2 for Linux is intended for PC compatible hardware only.

   - APL2 for Linux requires the following software:

     - glibc 2.3.2 (or later)
     - Motif* 2.2 (or later)
     - X Window System X11R6 (or later)

     Note: The pre-requisite for glibc 2.3.2 is new as of Service Level 7.
           You can check your level of glibc with the following command:

             rpm -qa | grep glibc

           If you do not have level 2.3.2 or later,
           DO NOT INSTALL THIS SERVICE LEVEL.  APL2 will not run.

   - AP 124 and AP 207 use Motif services and have a runtime dependancy
     on Motif shared libraries.  Please note that Motif libraries do
     not come with all Linux distributions, so if your application uses
     AP 124 or AP 207 it is possible you will have to obtain and install
     them.

     If Motif is not available as an option on your Linux distribution's
     installation media,

        Lesstif is available for download at:
           http://www.lesstif.org
        Open Motif is available at:
           http://www.openmotif.com

     The affected APL2 components require the Motif shared library files
     to be at level 3 (for example, libXm.so.3).  If you do not have this
     level of the required libraries available, AP 124 and AP 207 will
     not start.  Messages stating which Motif files are required will be
     displayed in the APL2 console window.

     Although correct operation of APL2 is not guaranteed, if
     you have a different level of Motif, you may be able to bypass
     the problem by creating links between the files required by APL2
     and the files you have.  For example, if you have level 4, you can
     create links to your level 4 files using the names for level 3:

        ln -s libMrm.so.4 libMrm.so.3
        ln -s libXm.so.4 libXm.so.3

   - Some components (AP 119, AP 127, AP 227, the TCL external routine,
     Processor 10, Processor 14 and Calls to APL2 from Java*)
     have additional pre-requisites and/or installation steps.
     Please refer to the provider of the application you will be running
     for information on further pre-requisites for the application.

========================================================================

3. Installation

   1. Copy the apl2lr20.tgz and apl2lr20 files in binary mode to a
      temporary directory on the target Linux machine.

   2. "cd" to the directory where the apl2lr20.tgz and apl2lr20
      files have been copied.

   3. Make the apl2lr20 file into an executable file:

      chmod 755 apl2lr20

   4. Switch to root authority ("su" command)

   5. Run the installation script and follow the prompts:

      ./apl2lr20

   6. Exit from root authority

   The install files can be removed after the installation.
   Copies of the README and install script are saved into the
   APL2run directory for your future reference.

   After the installation is complete, you will need to modify the
   .bash_profile (or appropriate shell profile) on all userid's that
   will be running apl2 to add access to the apl2 fonts:

      xset fp+ /usr/APL2run/fonts/X11
      xset fp rehash


   National Language Selection

   When APL2 is started, the apl2run shell script attempts to select
   from the available national languages for APL2 based on the value
   of the system environment variable LANG.   It contains logic to map
   some of the common names for these languages to the names used by
   APL2 (En_US, En_UK, Fr_FR, Gr_GR, and It_IT).

   If LANG is not set, or is not one of the values recognized by the
   shell script, English will be used for system messages, and the
   X resource files used will be those that contain mapping for the
   USA standard keyboard.  Local modification of the apl2run shell
   script may be necessary if another national language setting is
   desired for APL2.


   AP 127 Installation

   This refresh of APL2 contains an updated version of AP 127.
   If you are using AP 127 to access DB2* you must re-bind the APL2
   packages at their new level.  Please refer to the apldb2 shell
   script comments for instructions on using it to do the binds.

========================================================================

4. Invocation

   To run the APL2 Runtime Library, execute the command:

      apl2run [invocation parameters]

   Appropriate invocation parameters for starting an application
   written for the APL2 Runtime Library must be provided.

========================================================================

5. Additional Information

 - KDE 3.0 "kicker" or "klipper" Termination

   On some systems with KDE 3.0, the KDE panel ("kicker") or clipboard
   tool ("klipper") may terminate when APL2 starts.
   This problem has been traced to the apl2run shell script's use
   of the xterm option "-iconic" with a custom icon to create the
   environment required by the apl2run default option "-hostwin icon".
   It has been reproduced outside of APL2.  Until KDE 3.1 can be
   isntalled, the bypass for APL2 users is to specify apl2run option
   "-hostwin off" or "-hostwin on".

 - Insufficient message queues

   APL2 uses Linux message queues for cross-process communication.
   If the number of message queues allowed is too small, symptoms may
   include auxiliary processors unable to start or shared variable
   offers being refused.

   To query the current settings, issue the following command:

      ipcs -l

   The typical problem is a small number (less than 128) for setting
   "max queues system wide" under "Messages: Limits".  To correct this
   for the current session only issue the following command as root:

      sysctl -w kernel.msgmni=128

   To set the msgmni kernel parameter at boot time, add the following
   lines to /etc/sysctl.conf:

      # Sets maximum number of message queues to 128
      kernel.msgmni = 128

   or, if a line setting kernel.msgmni already exists in the file,
   increase the number specified.

 - Keyboard modifiers used by AP 124 and AP 207

   AP 124 and AP 207 use a common keyboard mapping scheme.  This scheme
   uses the <Mod3> modifier to determine whether APL mode is on or off,
   and it uses the <Mod5> modifier to determine if NumLock is set.
   On your Linux system, the key modifier usage may be customized -
   NumLock may be assigned to a different modifier, and/or <Mod3> may be
   in use for another function.  The Unix command "xmodmap" may be used
   to query and/or change the assignment of the key modifiers if needed
   to obtain the desired behavior from AP 124 and AP 207.

========================================================================

6. Service Information

================================================================================
 APL2 for Linux -- Service Level 10
================================================================================

================================================================================
 Enhancements Added in Service Level 10
================================================================================

 Invocation
  - Support has been added for the use of a configuration file (.ini)
    to specify APL2 options and settings.
  - New invocation options -p11, -207fl and -prtg
  - A negative value may be passed to the -id parameter

 Java Interfaces
    Java objects may now be passed directly to APL2

================================================================================
 Problems Fixed by Service Level 10
================================================================================

 Interpreter
    KOB0392  Interpreter should discard stack on Interrupt
    KOC1270  DOMAIN ERROR from matrix divide
    KOC1279  SYSTEM ERROR on disclose with fill from scalar
    KOC1283  QuadFX does not blow down single byte character strings

 AP 127/AP 227
    KOC0941  Double colon in SQL statement rejected by AP 227

 Supplied External Routines
    KOC1277  Color customization for EDITOR_2
    KOC1300  OPTION fails for names longer than 11 characters

================================================================================
 Enhancements Added in Previous Service Levels
================================================================================

 Calls to APL2
  - The APL2 interpreter has been re-packaged into a shared library which
    is callable by other programs.
  - APL2 is added to the list of languages and programs that are
    supported by the APL2 Program Interface.

 Interpreter
  - QuadPW is now a session variable
  - The maximum rank of an array has been increased from 63 to 64
  - 4-byte characters are now allowed in function and operator
    definitions, in both comments and character constants.
  - Correct character justification in nested arrays
  - Correct fill items for disclose, expand, replicate and take
  - Correct partition results with empty arguments
  - Correct depth of result of monadic format of nested arrays

 AP 119
    Support for datagram sockets

 AP 127/AP 227
  - New invocation option -isol
  - New commands ODBC and ODBCOPEN
  - BLOB indicator for value list indices

 AP 207
  - The 'CURSOR' command has been enhanced to support eleven additional
    cursor images.
  - Hand cursor image for CURSOR command
  - New GRDATA command

 Processor 11
    Support is added for searching more than one names file for an
    external routine's descriptor.

 Processor 12
    Simple character vector view of file

 Java Interfaces
  - A new associated processor, Processor 14, provides the ability
    to call Java from APL2.
  - New invocation option"-javaxmx" controls Java memory heap size

 Supplied External Routines
  - ZIP, UNZIP, ZIPWS and UNZIPWS workspace compression facilities.
  - Monadic ATR and RTA
  - The follow new external functions have been added:
    CHECK_ERROR gets the text associated with a system error number.
    OPTION      queries and sets APL2 invocation and session options.
    DIR         Return a directory listing
    ERASE       Erase a file
    HOST        Execute a operating system command
    LIBS        Return the list of defined APL2 workspace libraries
    MKDIR       Make a directory
    PIPE        Redirect input and output to a command
    RENAME      Rename a file
    RMDIR       Remove a directory
  - New external functions COPY, PCOPY and LIB
  - New namespaces  FILE, GRAPHPAK, MATHFNS and SQL
  - When passed a null right argument, the OPTION external function
    will return the APL2 command line.
  - TIME 4 queries the current state of timing

================================================================================
 Problems Fixed by Previous Service Levels
================================================================================

 Interpreter
    KOA0105  Transfer form accepts period after object name
    KOA0128  QuadFX will not accept empty numeric
    KOA0133  QuadFX behavior does not match host
    KOA0145  Reduce with axis fuzz problem
    KOA0274  System fuzz not working for booleans
    KOA0353  No prompt for 1st input with -sm off -quiet on
    KOA0387  Reduce 0-wise (from slash) w/scalar dyadic fns
    KOA0445  Inner product documentation discrepancy
    KOA0489  Called functions do not inherit "Ignore attention" property
    KOB0033  Enclose along axis of empty does not reduce rank
    KOB0111  QuadPR inserted in reply to empty QuoteQuad prompt
    KOB0155  QuoteQuad input reprompts with 6 blanks after ENTRY ERROR
    KOB0470  1 QuadTF ignores non-blank extra characters
    KOB0543  Behaviour of wrapping on error lines
    KOB0548  AP1 does not send system variables always
    KOB0869  AXIS ERROR from some cases of inner/outer product with axis
    KOB1700  Inconsistancy in scalar extension with nulls
    KOB1887  Selective spec works on APL2/PC, fails on new APL2
    KOB1962  Quad Input not allowed under QuadEC
    KOB2472  Checkws errors or hang interrupting output of large array
    KOB2663  Interpreter does not sign off SVP on Ctrl-Break
    KOB2739  Bad format of array with positive and negative floating point
    KOB2808  Handle 4-byte character arguments to Quad functions
    KOC0039  Wrong error when function result shared or not a variable
    KOC0206  AP 1 does not handle requests after )HOST
    KOC0218  Can not open object when interpreter runs app
    KOC0268  Invalid SYNTAX ERROR doing outer product each
    KOC0287  EXP while running under an EXP doesn't work
    KOC0301  System Error using QuadEC under EXP
    KOC0302  Interpreter terminates using QuadCR under EXP
    KOC0306  )LOADing PRML workspace crashes interpreter
    KOC0307  QuadEC and QuadEA problems under EXP
    KOC0309  Checkws messages on )SAVE
    KOC0310  Problems in vector specification with external name
    KOC0311  Overbar invalid in )VARS, )FNS, )OPS, )NMS
    KOC0319  Cleanup of external names incomplete on )CLEAR
    KOC0328  APL2 terminates on repeat QuadNA from namespace
    KOC0329  SYSTEM ERROR copying workspace with external name
    KOC0330  SYSTEM ERROR, selective spec of Boolean into float
    KOC0331  Incorrect output from 0 2 format
    KOC0332  Cannot use nameclass to access object in namespace
    KOC0333  Wrong error from QuadES under EXP with numeric event
    KOC0334  QuadET incorrect after reference inside function
    KOC0337  AP 1 reports )SAVEd association to namespace is class 0
    KOC0353  Residue wrong on maximum left arg
    KOC0356  Checkws messages after failed association
    KOC0357  Circle Left Argument fuzz problem
    KOC0358  Interpreter crashs if error in long input
    KOC0360  Checkws messages after PFA of depth 182 array
    KOC0361  Interpreter abends with invalid CONTINUE
    KOC0362  )COPY from a Version 2 workspace corrupts ws
    KOC0363  Checkws messages after MOD1165 test case 365
    KOC0365  Checkws msg after WS FULL doing +/[2]...
    KOC0367  DOMAIN ERROR from decode, residue
    KOC0368  Catenate allows creation of high-rank objects
    KOC0369  Editor 1 Function Display Problems
    KOC0372  Garbage in replicate fill items
    KOC0373  Bad answer, magnitude of largest negative integer
    KOC0386  Checkws messages after using namespace
    KOC0387  Segmentation fault (SIGSEGV) assigning long name
    KOC0401  Interpreter error msgs not wrapped at QuadPW
    KOC0427  Shared variable system function edge conditions
    KOC0428  Garbage in QuadEM after execute with DBCS
    KOC0433  Left operand to expand not fuzzed to Boolean
    KOC0434  System fuzz not used for monadic grade
    KOC0435  QuadDL right argument not fuzzed to float
    KOC0480  Disclose with empty object leads to System Error
    KOC0485  SYSTEM ERROR after using namespaces
    KOC0508  QuadEC returns 4 byte error messages
    KOC0518  QuoteQuad input uses old prompt after ENTRY ERROR
    KOC0524  CHECKWS after catenation of large matrices
    KOC0533  SYSTEM ERROR after WS FULL replacing column of mixed matrix
    KOC0552  NOT COPIED: message from )IN
    KOC0555  QuadTF fails to fix function missing trailing quote
    KOC0562  System Error accessing QuadTF in namespace
    KOC0565  Stop and trace vectors can be set on namespace function
    KOC0567  System Error using object in namespace
    KOC0574  DOMAIN ERROR from Dyadic Format
    KOC0575  RANK ERROR from reduce of empty
    KOC0581  Error behavior wrong in operand across namespace boundary
    KOC0590  Abend after error in defined function
    KOC0592  Abend opening a locked function
    KOC0595  DOMAIN ERROR multiplying float by null
    KOC0604  Assignment to Quad fails under EXP
    KOC0609  Abend after re-association of namespace value
    KOC0610  Abend using TIME inside namespace
    KOC0611  QuadEC of namespace function produces wrong QuadEM
    KOC0612  Bad answer from or-scan of integer argument
    KOC0627  Function display loses data when QuadPW is exceeded
    KOC0643  SYSTEM ERROR trying to display namespace function
    KOC0648  )NMS wrong on QuadNA'ed object in namespace
    KOC0654  EXP allows assignment to primitive functions
    KOC0656  GETENV in namespace causes system error
    KOC0665  Checkws msg after )LOAD w/namespace suspended
    KOC0687  SYSTEM ERROR from 2 QuadAT of function in namespace
    KOC0689  QuadTS returns '' in rare cases
    KOC0693  "Namespace modified" message after )COPY of external object
    KOC0701  Double-click edit of external abends the interpreter
    KOC0707  Prompt written for Quad input under runtime
    KOC0712  QuadES should accept nested vectors of integer scalars
    KOC0726  System Error using external variable on left of compress
    KOC0729  CHECKWS msgs after member/index on Unicode data
    KOC0736  Nested array of scalars not accepted on left of compress
    KOC0737  Handle external variables as arguments to external functions
    KOC0742  Back off KOC0575 fix until KOC0650 fix is available
    KOC0753  )OUT external with long name abends interpreter
    KOC0756  Wrong answer subtracting largest negative integer from 0
    KOC0760  )IN with namelist fails on P12 variable with no surrogate
    KOC0773  QuadNA allows Quadname surrogates
    KOC0782  No INDEX ERROR when index is invalid APV
    KOC0791  Bad data, checkws messages after error during P12 catenate
    KOC0795  Incorrect data for external var indexed assignment
    KOC0799  2 (5 5) return from 2-take-QuadEC
    KOC0806  SYSTEM ERROR modifying copy of simple external var
    KOC0807  Last input line lost if no trailing LF on file
    KOC0808  Inaccurate result from binomial
    KOC0813  Wrong item replaced, selective spec with pick of squad
    KOC0814  Inaccurate result from complex logarithm
    KOC0817  Abend during )IN of mainfame apltf with DBCS
    KOC0824  Storage overwritten during error recovery
    KOC0828  Format produces garbage on Linux
    KOC0830  Branch to bracket indexed assignment fails
    KOC0839  Stops not honored by QuadEA
    KOC0843  Dyadic grade with DCS on left does not sort correctly
    KOC0858  QuadNLT reference returns garbage after CSD 4
    KOC0864  -input "''" causes initialization error
    KOC0868  QuadCR on locked function in namespace yields System Error
    KOC0880  Result of catenate to null matrix has wrong prototype
    KOC0881  Wrong type produced by enlist of null
    KOC0884  Interpreter terminates on second overflow, SuSE* 9.2
    KOC0889  No message after APL error in callback
    KOC0894  Extra spaces in format of nested arrays
    KOC0898  Matrix inverse returns result for singular matrix
    KOC0900  Null result from '' + 'A' has wrong type
    KOC0901  Wrong error with negative left argument to reshape
    KOC0902  Wrong error code from take left arg greater than max rank
    KOC0903  Wrong error from invalid vector specification
    KOC0906  Improve error checking in dyadic format
    KOC0907  Wrong error from pick with numeric left arg
    KOC0926  Wrong message and/or abend after error inside namespace
    KOC0930  SYSTEM ERROR, selective spec of empty with pick
    KOC0935  Fraction lost in result of factorial and binomial
    KOC0937  Dyadic Grade result bad after KOB0033
    KOC0948  System Error after Divide by 0 with Axis
    KOC0952  Incorrect answers from edge cases of floor with fuzz
    KOC0953  Type of result from encode/decode should be reduced
    KOC0954  Match mainframe behavior on Tdelta, Sdelta assigment
    KOC0956  QuadTF accepts large left argument
    KOC0964  SIGSEGV on fpreset() after floating point excecption handled
    KOC0965  Some system variables not allowed in vector specification
    KOC0967  VALUE ERROR referencing QuadNLT after localization
    KOC0968  Cannot associate to session quads
    KOC0969  Cannot ref or spec associated QuadSVE
    KOC0986  Termination problems after failing to edit namespace object
    KOC0994  Column missing from display of floats after KOB2739
    KOC0997  Interpreter crash after call to external function
    KOC1018  Matrix-Add-Downards fails when packaged
    KOC1030  QuadDL 0 does not always return 0
    KOC1037  Right caret can be lost if error output wraps
    KOC1047  System Error when using EXP to reference P12 variable
    KOC1056  Nameclass of some associated system variables reported as 3
    KOC1057  1 QuadAT result 0 0 0 for associated quad names
    KOC1062  QuadES suspends at entry to namespace rather than at call
    KOC1064  No result from each with null arg and namespace function
    KOC1065  Imprecise display of floating point numbers in editors, TF
    KOC1069  4 QuadAT thru EXP of shared variable causes interpreter crash
    KOC1097  Disallow association to Quadname without surrogate
    KOC1122  Leading blanks not tolerated in APLxxxxx envvar values
    KOC1180  Incorrect shape, display of null nested arrays
    KOC1203  Reassociating names after )COPY makes names useless

 Shared Variable Processor
    KOC0651  SVP does not recover from abend in apserver AP
    KOC0717  getpeername prohibits share through intermediate server
    KOC0833  AP signs on using wrong id with multiple sessions
    KOC0844  Cross-system share fails after KOC0717
    KOC1172  Timing problems on SVP startup

 AP 100
    KOC0896  RC 10 from AP 100, )HOST, even on success

 AP 119
    KOC1072  Integer form of SELECT does not accept APVs

 AP 124
    KOB1024  Alt+Fkey behaviors over-ridden by operating system
    KOC0321  Hang in AP 124 attempting to clear screen before format
    KOC0346  Handle commands 21 and 22 before command 1

 AP 127/AP 227
    KOC0326  'CONNECT' '' invalid for AP 227
    KOC0739  AP 127/227 should not build nested arrays of numeric scalars
    KOC0812  Correct handling of extended characters
    KOC0819  Message 149 issued with wrong token
    KOC0827  AP 127 error 148 on DESCRIBE with BOTH
    KOC0974  PREPARE not completed after internal describe warning
    KOC1034  CONNECT warning codes not returned
    KOC1133  AP 227 FETCH abend after PREP/OPEN of non-SELECT

 AP 207
    KOC0377  PostScript FONT command hangs on Linux with vector font
    KOC1017  No error check for missing DISPLAY environment variable

 AP 210
    KOC0499  AP 210 open returns 1 for filenames with commas

 AP 211
    KOC0755  Timestamps not correctly adjusted for time zone
    KOC1010  Negative numbers corrupted converting DOS AP 211 files

 Processor 11
    KOB1360  P11 passes scalar Char, Short and Float incorrectly
    KOB2709  P11 can return enclosed scalar in result
    KOC0143  Namescan does not validate tag data length
    KOC0772  P11 does not read names file without trailing LF
    KOC0890  Default P11 names file for Unix
    KOC1091  Abend calling C routine using B1 pattern
    KOC1137  Tabs in names files should be ignored

 Processor 12
    KOC0388  Toleration of scalars during P12 association
    KOC0426  P12 expand does not does not allow for replication
    KOC0617  P12 abend after garbage collection
    KOC0738  P12 should not return nested vectors of scalars
    KOC1084  Wrong prototype generated for 4-byte characters

 Java Interfaces
    KOC0769  Use of floatValue makes JVM hang or crash
    KOC0770  Use of invalid instance handle makes JVM crash
    KOC0771  Make Apl2exception constructors public
    KOC0790  Apl2object constructor with arbitrary object hits System Error
    KOC0797  Apl2object native array constructor fails
    KOC0802  Redesign code to prevent illegal callbacks
    KOC0804  Apl2object(String[]) yields array of integers
    KOC0809  Errors during callback result in system error
    KOC0840  Intermittent exception under WebSphere*

 Supplied External Routines
    KOC0304  Default TCL library names missing lib prefix
    KOC0354  STA yields DOMAIN ERROR converting mainframe floating point
    KOC0390  FILE/FSTAT do not blow down 4 byte characters
    KOC0467  Variable length pattern with RTA causes System Error
    KOC0644  OPTION 'CHECKWS' terminates APL2
    KOC0874  OPTION handling of 4-byte characters
    KOC0888  Change default Tcl/Tk level to 8.4
    KOC0929  ATR and ATS pad bytes contain random data
    KOC0942  Monadic RTA incorrect result with null APV inside nested
    KOC0988  Use GMT timestamps in ZIPWS function
    KOC1059  IN does not handle filenames with blanks or missing CRLFs
    KOC1066  RTA hits protection exception
    KOC1186  ATR does not handle zero and negative numbers with E4
    KOC1208  Improve IN and PIN detection of invalid files

 Fonts
    KOC0514  Courier APL2 .pfa files not usable

 Invocation
    KOC0743  Avoid multiple svp trace windows on Unix

 Documentation
    KOC0539  APL2 stops kicker on KDE3
    KOC0539  Cannot start APL2 due to missing .so files
    KOC0606  Document action for insufficient message queues on Linux

================================================================================
 Support
================================================================================

 We'd like to hear from you!

 Please report any comments, suggestions, or problems through one of the
 following channels:

   Email:       apl2@vnet.ibm.com

   Newsgroup:   news.software.ibm.com/ibm.software.apl

   RETAIN:      Queue CAPL2W

   FAX:         1-408-463-4488

   Phone:       1-408-463-APL2  (1-408-463-2752)

   Mail:        APL Products & Services
                IBM Silicon Valley Laboratory, H36/F40
                555 Bailey Ave.
                San Jose, CA 95141

================================================================================
 Trademarks
================================================================================

 Trademarks are denoted by an asterisk (*) when they first appear in
 the text.

   APL2, DB2, IBM and WebSphere are trademarks of the IBM Corporation.
   Java is a trademark of Sun Microsystems, Inc.
   Linux is a trademark of Linus Torvalds.
   Motif is a trademark of The Open Group.
   SuSE is a trademark of SuSE AG.
