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

  IBM* PL/I for OS/2* Professional Edition READ.ME file.

  This file contains information that may not be available in the
  documentation you receive with PL/I for OS/2 Professional Edition.

  IBM PL/I for OS/2 Professional Edition Version 1 Release 1
  (C) Copyright IBM Corp. 1994. All Rights Reserved. US Government
  Users Restricted Rights--Use, duplication or disclosure restricted
  by GSA ADP Schedule Contract with IBM Corp.

  PL/I for OS/2 Professional Edition is a follow on to PL/I Package/2.

  =================================================================
  ********************************************
  * Corrective Services Diskette (CSD) #0004 *
  ********************************************

  - The NONNATIVE attribute now applies to AREAs. When
    in effect for an AREA variable, the offsets managed by the
    compiler in the AREA variable are held in 370 format.
    This allows you to download a file containing an AREA
    variable and process it in a program running on OS/2.

  - The NONNATIVE attribute now also applies to POINTERs.
    However, while DEFAULT(NONNATIVE) applies this attribute to
    all FIXED BIN, OFFSET, ORDINAL, AREA and VARYING string
    variables, it has no effect on POINTERs.  There is a new
    suboption (NATIVEADDR or NONNATIVEADDR) of the DEFAULT
    option.  Specifying NONNATIVEADDR applies the NONNATIVE
    attribute to all POINTERs.

  - 'Normal return' for ZERODIVIDE has been changed.
    Under the following conditions, the ERROR condition
    is raised:

     1) ZERODIVIDE is raised and a ZERODIVIDE ON-unit
        entered.
     2) Control does not leave the ON-unit through a
        GOTO statement.

     Prior to this CSD, these conditions produced
     unpredictable results.

  - The VALIDDATE built-in function is now supported.
    VALIDDATE(x,y) returns a '1'B if the string x holds a
    date/time value that matches the pattern y.

    x specifies the input date as a character string representing
    the date and time according to the pattern y.

    If present, y specifies the date/time pattern of x.  If y is
    missing, it is assumed to be the default date/time pattern of
    'YYYYMMDDHHMMSS9999'.

  - IBM.DISPLAY (dropped in CSD #0003) has been restored.

 =================================================================
  ********************************************
  * Corrective Services Diskette (CSD) #0003 *
  ********************************************

  The following list includes corrections or enhancements that
  have been made to the June 1994 release of the PL/I for OS/2
  Professional Edition since CSD#2:

  - In some instances PL/I DLL's under WARP were prevented
    from being called from non-PL/I EXE's and DLL's.  This
    problem has been fixed.


  - Host compatibility has been improved:

    - There are 3 new suboptions of the DEFAULT compiler option:

      EVENDEC or NOEVENDEC
        This option controls the compiler's tolerance of fixed
        decimal variables declared with an even precision.
        Under EVENDEC, attempting to assign a value one digit too
        large triggers the SIZE condition.  Under NOEVENDEC,
        the precision for any fixed decimal variable is
        rounded up to the next highest odd number.

        For example, if you specify EVENDEC and then assign
        123 to a FIXED DEC(2) variable, the SIZE condition
        is raised.  If you specify NOEVENDEC, however, the SIZE
        condition is not raised (just as it would not be raised
        if you were using mainframe PL/I).

        EVENDEC is the default.

      INITFILL or NOINITFILL
        This suboption controls the default initialization of
        automatic variables.  If you specify INITFILL, all
        automatic variables receive the value '00'x unless otherwise
        explicitly initialized.  NOINITFILL does no initialization
        of these variables.

        INITFILL can cause programs to run significantly slower
        and should not be specified in production programs.

        NOINITFILL is the default.

      NULLSYS or NULL370
        This suboption determines which value is returned
        by the NULL built-in function.  If you specify
        NULLSYS, binvalue(null()) is equal to 0.  If you
        want binvalue(null()) to equal 'ff_00_00_00'xn as
        is true with mainframe PL/I, specify NULL370.

        NULLSYS is the default.

    - There is a new compiler option: CURRENCY.
        This option specifies the character that the compiler and
        runtime should recognize and accept as the 'dollar sign' in
        picture strings.

        The default CURRENCY symbol has the hex value '24'x.

    - So-called batch compilations are now partially supported:
        The source file in a compilation can contain several
        programs separated by *PROCESS statements.  All but the
        first set of *PROCESS statements are ignored, and the
        compiler assumes a PACKAGE EXPORTS(*) statement before
        the first procedure.

    - G literals may now start and end with a DBCS quote followed
      by either a DBCS G or an SBCS G.

    - The maximum size of a string literal is now the same as for
      the corresponding string variable:
             32767 for character and bit strings
             16383 for graphic strings


  - Some changes have been made to I/O:

    - SYSPRINT is now directed to stdout by default.  DISPLAY output
      is also directed to stdout.

    - SYSIN is now read from stdin by default.  The REPLY in DISPLAY
      statements is also read from stdin.

    - EA's are no longer written to nor read from files except
      DDM files.

    - Except for TYPE(FIXED) files, if the LRECL is not specified
      and not implied by a LINESIZE value, it defaults to 1024.

    - READ statements can access data from stdin, however, they
      must specify an LRECL equal to 1.

    - If a CONVERSION condition occurs during an i/o statement,
      the ONFILE built-in function does not return the name
      of the file.


  - Various performance enhancements have been made:

    - Assignments of GRAPHIC strings to GRAPHIC variables are now
      inlined.

    - REVERSE applied to aligned bit(8) strings is now inlined.

    - SELECT statements dominated by a CHAR(1) variable with WHEN
      clauses all specifying CHAR(1) literals are now converted into
      a branch table.

    - More assignments of small bit strings are now inlined.

    - MOD applied to an UNSIGNED fixed bin is now faster than
      when applied to a SIGNED fixed bin.

    - The datetime routines are now faster.


  - When using PLITEST, you no longer have to explicitly
    qualify variables that are based on pointers which are
    members of static structures.

  - When the ERROR condition is raised due to insufficient stack
    storage, the ONCODE built-in function returns the value 8098.

  - The RANK built-in function is now supported.  It has one
    argument which must have the attributes CHAR(1) NONVARYING.
    RANK(x) is defined as index(x,collate())-1.


  - A problem could occur in some instances when using GOTOs under
    the following conditions:
       The GOTO and its target were in the same block
       The target was a member of a label array
    This problem has been fixed.

  - Various other small bugs have been fixed.


  Fixes to the SQL Preprocessor
  -----------------------------

    - In some cases, when a host variable and its indicator
      variable had the same name and were both members of a
      structure, an SQL error was raised.  This problem has
      been fixed.

    - When specifying either the EBCDIC or NONNATIVE compiler
      suboptions, the SQLSTATE variable was not being properly
      updated.  This problem has been fixed.


  =================================================================
  ********************************************
  * Corrective Services Diskette (CSD) #0002 *
  ********************************************

  The following list includes corrections or enhancements that
  have been made to the June 1994 release of the PL/I for OS/2
  Professional Edition since CSD#1 (see below):

  The new runtime DLLs fix the following problems:

  - The library was not freeing up some system resources upon
    return from FROMALIEN routines.

  - Some library routines were not probing the stack when necessary,
    which could lead to errors when invoked on other than the
    main thread.

  - Redirected input was not always handled correctly.

  - The buffering of some input files was incorrect.

  The new compiler contains fixes for the following problems:

  - Labels referenced only in other blocks via calls to unprototyped
    ENTRYs led to an internal compiler error (this tended to show up
    in some CICS compilations).

  - An internal compiler error could occur sometimes when the target
    in a compound assignment was an array reference (as in a(i,j) += 1).

  Additionally:

  - The built-in functions FIXED and FLOAT are now handled in the
    same manner as the 370 compiler handles them no matter how many
    parameters are specified.

  - MEDIUM and other VSE keywords are now tolerated by the compiler.

  - PLITEST now looks in directories specified in the
    IBM.SOURCE environment variable if it cannot find a file in
    the directory it was in at compile time.

  - Various small corrections have been made to bsedos.cpy and
    other files in the include directory

  - Various other small problems in the product have been fixed
    and performance improvements made.


  PL/I Actions Profile for WorkFrame/2
  ------------------------------------

  The "PL/I for OS/2 WorkFrame/2 Guide" describes how to create an
  Actions Profile for use with WorkFrame/2 Version 2.1.  However,
  you may find it easier to use the PL/I Actions Profile provided
  with this CSD instead.  If you had WorkFrame/2 Version 2.1
  installed on your system when you installed this CSD, you will
  find the PL/I Actions Profile in your PL/I for OS/2 folder.  The
  sections below describe how to use it.

  If your project already has a WorkFrame/2 project folder:

  1. Open the Settings notebook for your project's WorkFrame/2
     project folder.

  2. Open the "Profile" page of the notebook.

  3. Drag the PL/I Actions Profile icon from the PL/I for OS/2
     folder, and drop it into the "Actions Profile" field of the
     Settings notebook.

  If your project does not yet have a WorkFrame/2 project folder:

  1. Drag the WorkFrame/2 Project icon from the Templates folder,
     and drop it in a convenient location.

  2. In the Settings notebook for your new WorkFrame/2 project
     folder:

     - On the 'Source' page, enter the source directory for your
       project.
     - On the 'Target' page 1, set the name of your makefile
       if you plan to use one.
     - On the 'Target' page 2, set the target program filename.
       This is the name you want for your executable file.
     - On the 'General' page, change the title field to the name
       you want to give to your project.
     - On the 'Profile' page, drag the PL/I Actions Profile icon
       from the PL/I for OS/2 folder, and drop it into the 'Actions
       Profile' field of the Settings notebook.
     - Other notebook settings can be adjusted as you desire.


  =================================================================
  ********************************************
  * Corrective Services Diskette (CSD) #0001 *
  ********************************************

  The following list includes corrections or enhancements that
  have been made to the June 1994 release of the PL/I for OS/2
  Professional Edition.

  - All restrictions have been removed from the following:
       -- STRING built-in function and pseudovariable
       -- Multiple REFERs

  - The FILEID built-in function is now supported.  The FILEID
    built-in function returns a FIXED BIN(31) value that is the
    system token for a PL/I file constant or variable.  This token
    should not be used for any purpose which could be accomplished
    by a PL/I statement.

  - RETURN statements with expressions are now allowed inside
    BEGIN blocks if the containing PROCEDURE has the RETURNS attribute.

  - Various small enhancements and fixes have been made to several
    of the header files shipped with the product.

  - Problems involving the redirecting of SYSIN have been fixed.

  - PLITEST now supports "Goto Cursor and Halt" in addition to
    "Goto Cursor" which is currently supported. "Goto Cursor and Halt"
    transfers control to the statement at which the cursor is
    currently positioned and causes PLITEST to wait until you take
    further action.

  - The following items are no longer flagged:
       -- Unreferenced INLINE procedures
       -- The use of REORDER outside of OPTIONS

  - STREAM output is now buffered.  Unlike RECORD output, however,
    STREAM output is not buffered by default.

  - Run-on %INCLUDEs (as in "%INCLUDE X, Y;") are now supported
    by the compiler (but not yet by the macro facility).

  - Tab characters are now accepted by the macro facility where
    blanks would be accepted (as they have been by the compiler).

  - NOMAP, NOMAPIN and NOMAPOUT are now accepted and ignored
    if no parameter is given with the keyword.

  - Under the XINFO(SYM) option, information is now produced for
    identifiers with adjustable extents.  The XINFOSYM sample
    program has been changed accordingly.

  - TILED is now included in the OPTIONS section of the listing.

  - When a procedure contains ENTRY statements and some, but not
    all of its entry points have the RETURNS attribute, two run-time
    errors are now detected:

    a) If the code executes a RETURN statement with an expression
       when the procedure was entered at an entry point which did
       not have the RETURNS attribute.

    b) If the code executes a RETURN statement without an expression
       when the procedure was entered at an entry point which did
       have the RETURNS attribute.

  - The CICS preprocessor restriction of using 2 for the left
    margin of the MARGIN option been eliminated by this CSD.

  - Various other small bugs have been fixed.


  HINT FOR SQL USERS
  ------------------
  The following information is to supplement the instructions
  given in the PL/I for OS/2 Programming Guide:

  If you are using EXEC SQL statements in your program, you
  must specify the SQL library in the LINK386 command.
  If you are using SDK/2, follow the instructions in the
  Programming Guide.

    Sample link command using SQL
    -----------------------------
    link386 myprog /pm:vio /noe /noi /co /stack:7000000,,load.map,
      ceelink+ibmlink+sql_dyn,nul.def


  TRADEMARKS
  __________

  The following items are trademarks of the IBM Corporation:
      IBM
      OS/2
