Date:  02-28-2006

Subject: RELEASE 9.1 Runtime Files

    Files included with this release are:

         EMBEDINI        9.1   28 Feb 2006     9,1,0,0
         MAKEDEF         9.1   28 Feb 2006     9,1,0,0
         MAKECLI         9.1   28 Feb 2006     9,1,0,0
         MAKECON         9.1   28 Feb 2006     9,1,0,0
         ODSBAC32.DLL    9.1   28 Feb 2006
         PLBCLICON       9.1   28 Feb 2006     9,1,0,0
         PLBCLIENT       9.1   28 Feb 2006     9,1,0,0
         PLBCON          9.1   28 Feb 2006     9,1,0,0
         PLBDSIGN        9.1   28 Feb 2006     9,1,0,0
         PLBSERVE        9.1   28 Feb 2006     9,1,0,0
         PLBWIN          9.1   28 Feb 2006     9,1,0,0
         PLBWSEC.DLL     9.1   28 Feb 2006     9,1,0,0
         SA_DLL32.DLL    9.1   28 Feb 2006     9,1,0,0
         SETGUID         9.1   28 Feb 2006     9,1,0,0
         SUNAAMDX        9.1   28 Feb 2006     9,1,0,0
         SUNINDEX        9.1   28 Feb 2006     9,1,0,0
         SUNMOD          9.1   28 Feb 2006     9,1,0,0
         SUNSORT         9.1   28 Feb 2006     9,1,0,0
         SUNWADO.DLL     9.1   28 Feb 2006     9,1,0,0
         SUNWMSQL.DLL    9.1   28 Feb 2006     9,1,0,0
         SUNWODBC.DLL    9.1   28 Feb 2006     9,1,0,0
         SUNWSRV.DLL     9.1   28 Feb 2006     9,1,0,0

         PLBCMP.PLC      9.1   28 Feb 2006
         PLBDBUG.PLC     9.1   28 Feb 2006
         WATCH.PLC       9.1   28 Feb 2006

         ADMEQU.INC      9.1   28 Feb 2006
         PLBEQU.INC      9.1   28 Feb 2006
         PLBMETH.INC     9.1   28 Feb 2006

*==============================================================================
Notes for some NEW Items:

         - Added file replication to SUNFM.

         - Added RUNNAME property for every GUI object.

         - Added FILE/AFILE/IFILE array support.

         - Added new instructions FPOSITA and REPOSITA.

         - Added *CLIPTEXT control for PRTPAGE.

         - Added support for PLBCS_SINGLEUSE keyword at PLBSERVE server.

         - Added new instruction named MAILSEND.

         - SUNFHSYS.DLL and SUNFHDLL.DLL are NOT used for the 9.1 release.

*==============================================================================
The following files have been changed as follows:

-------------------------------------------------------------------------------
PLBSERVE - Modified the runtime child connection logic to prevent the
           connection count from going negative. This change is being made
           to prevent the possibility of a problem where no users could
           logon because the maximum connection count was exceeded.

         - Modified the application server to provide logon child count data
           to the ADMIN services. This information is provided via the
           ADMGETINFO instruction to determine the largest server child count
           since the server has started.

         - Corrected a problem where some logon message error responses might
           be lost.  If an error response was lost, then the client would
           give a generic error message instead of the true reason for a
           connection failure.

-------------------------------------------------------------------------------
PLBSERVE - Modified the server to support the PLBCS_SINGLEUSE keyword when
PLBCLIENT  it is specified in the PLBSERVE INI file. The format of the
           PLBCS_SINGLEUSE keyword is the same a currently document for the
           PLBCLIENT usage. When the PLBCS_SINGLEUSE is specified with a
           non-zero client limit value, then the following processing is
           applied to the PLBCLIENT clients that access the server.

           1. The version of the PLBCLIENT client MUST be a version 9.1 or
              later. Otherwise, a bad version message occurs when a client
              attempts to logon to a server.

           2. The PLBSERVE server rejects a client logon when the number of
              current PLBCLIENT processes at a workstation exceed the current
              PLBCS_SINGLEUSE limit specified at the server.

           3. If a PLBCLIENT logon is rejected by the server because of the
              PLBCS_SINGLEUSE limit has been exceeded, then the PLBCLIENT
              activates the last visible PLBCLIENT process that was found
              in the Windows OS active window list. This is consistent with
              the processing for the PLBCS_SINGLEUSE keyword that may be
              set in a PLBCLIENT INI file.

           4. If PLBCS_SINGLEUSE keyword in the PLBSERVE INI can be reset or
              disabled when a 'PLBSERVE -r' reset license command is executed.
              Appropriate messages are logged when the PLBCS_SINGLEUSE keyword
              setting is changed.

           5. When the PLBSERVE server rejects a client logon because the
              PLBCS_SINGLEUSE limit has been exceeded, then the following
              message is logged in the PLBSERVE log file:

                  "Workstation clients exceed PLBCS_SINGLEUSE setting!
                   (Child Task NOT STARTED!)"

           6. The PLBCS_SINGLEUSE can be used at either the client or server.
              Also, this keyword can be used on both sides at the same time.
              The client side setting of PLBCS_SINGLEUSE can be more
              restrictive than the server side. However, if the client side
              limit is larger than the server setting, then the server side
              limit always applies.

           7. The format of the PLBCS_SINGLEUSE keyword is as follows:

              Format:
                     PLBCS_SINGLEUSE=on  - Only allow a single instance of the
                                           PLBCLIENT at the client workstation.

                     PLBCS_SINGLEUSE=nnn - Allow 'nnn' instances of the
                                           PLBCLIENT to be executed a the same
                                           time at the client workstation.

         - Corrected a problem where SPLOPEN to 'COM1:' did not work.

-------------------------------------------------------------------------------
PLBWIN   - Modified the GETMODE instruction to support 7 new keywords that
PLBSERVE   retrieve memory usage information for a program memory and global
PLB (UNIX) memory as follows:

               *CURPROGMEM={nvar}
                   This keyword returns the current program memory size that
                   is being used for the main program and all loadmod
                   programs that are loaded.

               *MAXPROGMEM={nvar}
                   This keyword returns the maximum memory size available
                   to load a main program and loadmod programs.

               *CURGLOBMEM={nvar}
                   This keyword returns the current global memory size
                   being used in the global memory space.

               *MAXGLOBMEM=(nvar}
                   This keyword returns the maximum global memory size
                   available for program use.

               *HIGHPROGMEM={nvar}
                   This keyword returns the highest program memory size that
                   has been used since the first PL/B program was started.
                   The return value is a high water mark value for the
                   *CURPROGMEM values.

               *HIGHHEAPMEM={nvar}
                   This keyword returns the highest runtime heap memory that
                   has been used since the first PL/B program was started
                   for a PLBSERVE Windows runtime. The return value is a
                   high water mark value.

               *HIGHLOCALMEM={nvar}
                   This keyword returns the highest runtime local memory that
                   has been used since the first PL/B program was started.
                   The return value is a high water mark value.

         - Modified the GETFILE to support a new keyword named
           'CURFIELDS={svar}' for a XFILE.  The CURFIELDS keyword retrieves
           a comma delimited list of field tag names that are defined for
           the current record in a recordset that has been read.

           Please note that the CURFIELDS keyword gives the field tag names
           for the current record in a recordset. Also note, that the FIELDS
           keyword gives the accumulated union of all of the field names for
           all of the records accessed in a recordset.

         - Modified the runtimes to support AFILE, FILE, and IFILE array
           variables.

         - Added two new instructions named FPOSITA and REPOSITA. These
           instructions are implemented for the AFILE file variable to
           allow the AAM index position to be saved using the FPOSITA and
           to be restored using the REPOSITA.

               ------------------------------------------
               FPOSITA Instruction
                  The FPOSITA instruction retrieves the current index position
                  for an AFILE file variable. It uses following format;

                  [label]  FPOSITA {afile},{pos}

                  Where:
                   label
                    Optional. A Program Execution Label.

                   afile
                    Required. A previously defined and opened AFILE variable
                              whose current index position is returned.

                   pos
                    Required. A previously defined Character String Variable
                              that receives the current index position data
                              for the {afile} file variable.

                  Flags Affected: None

                  Note the following:

                  1. All of the data stored into the {pos} data variable is
                     required to be provided to the REPOSITA instruction
                     to re-establish the AAM index current position. This
                     allows the READKG or READKGP instructions to be performed
                     without having to execute a READ AAM with key instruction.

                  2. The data stored into the {pos} is composed of two basic
                     sets of components. The first set of components is the
                     basic parameters required to reset the AAM index
                     position. The second set of components found in the {pos}
                     data is the user key data strings that is in use for
                     the AFILE when the FPOSITA instruction is executed. The
                     size of the {pos} is determined by the size of the two
                     sets of components. The size of the first set depends
                     on the operation system where the runtime is being
                     executed. The size of the second set of key data depends
                     on the user application keys that are in use when the
                     FPOSITA is executed.

                     The size of {pos} can be calculated as follows:

                        possize = indexsize + keysize1 + keysize2...+ keysizeN

                        Where:
                              indexsize - This is the size of the AAM index
                                          data that is required to restore
                                          the AAM index position. This size
                                          depends on the OS where the runtime
                                          is executed.

                                             Windows runtimes - 24 bytes

                              keysize1  - This is the size of the first user
                                          key string plus one.

                              keysize2  - This is the size of the second user
                                          key string plus one.

                              keysizeN  - This is the size of the Nth user
                                          key string plus one.

                        Example:
                              .
                              . The MINIMUM size of AAMPOS is calculated as
                              . follows when using a Windows runtime and the
                              . key as shown:
                              .
                              .  size = 24 + 7 = 31
                              .
                              AAMPOS    DIM     31
                              AFILE     AFILE
                              KEY1      INIT    "01XABC"
                              .
                                        OPEN    AFILE...
                              .
                                        READ    AFILE,KEY1;S$CMDLIN

                                        FPOSITA AFILE,AAMPOS

                  3. An I29 error can occur for the execution of the FPOSITA
                     instruction. The following subcodes help identify the
                     specific problem.

                     I29 subcodes:

                         20 - The AAM index position data received from a
                              SUNFM file manager is too large for the FPOSITA
                              output variable. Under normal circumstances
                              this error should never occur.

                         21 - The output index DIM variable is too small for
                              the FPOSITA data.

                         99 - The SUNFM file manager that is being accessed for
                              the AFILE does not support the FPOSITA and
                              REPOSITA instructions.

               ------------------------------------------
               REPOSITA Instruction
                  The REPOSITA instruction uses the AAM index position data as
                  returned by FPOSITA instruction to set the current AAM index
                  file variable position. This allows the READKG and READKGP
                  instructions to execute and retrieve the next appropriate
                  record after the REPOSITA instruction is executed. The
                  instruction format is a follows:

                  [label]  REPOSITA {afile},{pos}[,{key}[...]]

                  Where:
                   label
                    Optional. A Program Execution Label.

                   afile
                    Required. A previously defined and opened AFILE variable
                              whose current index position is being restored.

                   pos
                    Required. A previously defined Character String Variable
                              that contains the FPOSITA data that is used to
                              restore the current AAM index position for the
                              {afile} file variable.

                   key
                    Optional. One or more previously defined Character String
                              Variables or VARLISTs of Character String
                              Variables that contain specific key data used
                              reset the current AAM index position.

                  Flags Affected: None

                  Note the following:

                  1. The data in the {pos} Character String Variable must
                     contain data returned by a FPOSITA instruction.
                     Otherwise, an I29 error occurs.

                  2. If the {key} data variables are provided, then this
                     key data replaces the key data in the {pos} variable
                     before the AAM index position is reset.

                  3. The format of the {key} data is the same as for
                     READ AFILE instruction.

                  2. An I29 error can occur for the execution of the REPOSITA
                     instruction. The following subcodes help identify the
                     specific problem.

                     I29 subcodes:

                         40 - Key data is required.

                         41 - The input AAM index position data is too small
                              and can not be used to restore the AAM index
                              position.

                         42 - Key data must be provided. This is an internal
                              error and should not occur under normal
                              circumstances.

                         43 - The input AAM index position data variable can
                              not be a NULL variable.

                         44 - The input AAM index position data variable is
                              corrupted. This is an internal error and
                              should not occur under normal circumstances.

                         99 - The SUNFM file manager that is being accessed for
                              the AFILE does not support the FPOSITA and
                              REPOSITA instructions.

         - Modified the GETFILE to support a new keyword named
           'FPOSITASIZE={nvar}' for an AFILE. The FPOSITASIZE keyword retrieves
           the current minimum size required for the {pos} Character String
           variable in the FPOSITA instruction. Please note that the
           FPOSITASIZE size can vary depending on the current AAM keys that
           were used for the last AFILE IO operation.

         - Modified the runtimes to support a new keyword named PLB_FMALTIP.
           This keyword is used to specify the IP/URL addresses for the
           SUNFM servers that a client runtime is to use when an application
           opens a managed file. The order of the IP/URL addresses specifies
           the order from left to right that is to be used when connecting
           to a network of SUNFM servers.

           The format for this keyword is:

               PLB_FMALTIP={first}[|{second1}[|{second2}[...|{secondN}]]]

               Where:

                     {first  }  - This is the IP/URL for the first SUNFM
                                  server that an application attempts to
                                  connect access. This

                     {second1}  - This is the IP/URL for the next SUNFM
                                  server that a runtime attempts to connect
                                  to when the {first} server can not be
                                  accessed.

                     {secondN}  - This is the IP/URL for the next SUNFM
                                  server that a runtime attempts to connect
                                  to when the previous {secondX} serve can
                                  not be accessed.

         - Modified the GETMODE and SETMODE instructions to support a new
           keyword named '*FMALTIP={svar}'. The *FMALTIP keyword data string
           has the same format and functionality as the PLB_FMALTIP INI
           keyword described above.

         - Corrected a problem where two WRITE operations for a data size less
           than 256 bytes executed under a TRANSACTION could cause the data
           output to be corrupted. This problem would occur when the second
           WRITE operation was executed at a file offset of 256 bytes from the
           start of the first WRITE operation.

         - Modified the PREP IFILE operation to perform a Windows OS file
           commit operation after the ISI header has been written. This
           works around a problem where the ISI could be truncated when the
           ISI/TXT files existed on a Win95/98/ME system and they were being
           accessed via a network-shared drive. This is a Windows OS network
           problem when the files were written via a network-shared drive. The
           truncated header in this case would cause an I60 error to occur
           when the ISI was subsequently used. The PLB logic that caused the
           truncated ISI header is demonstrated as follows:

           Example:
                   IFILE       IFILE
                   IFILE1      IFILE
                   .
                               ERASE   "x60.txt"
                               ERASE   "x60.isi"
                   .
                               PREP    IFILE,"x60","x60","1-5","10"
                               OPEN    IFILE1,"x60"
                   .
                               WRITE   IFILE;"1234567890"
                   .
                               WRITE   IFILE1;"ABCDEFGHIJ"  ;I60 Error!!!
                   .
                               STOP

         - Modified the OPEN XFILE operation to allow a XML file and schema to
           be opened in a READ Only mode. The MODE option has been modified
           to support a bit definition that causes the files to be opened in
           READ only mode as follows:

               Keyword            Value       Meaning

               XFILE_OPENREADONLY 0x00000100  Open XML and schema in READ Only

         - A new instruction named MAILSEND has been added for the PLB
           language. This instruction allows a PLB user application to send
           an e-mail message with associated attachments.

           Format:
                  MAILSEND {outgoing},{sendto},{sendfrom},{subject}:
                           {message}[,{options}]

           Where:
                  {outgoing}
                      This operand is required and it contains the SMTP
                      outgoing mail server name (URL) or IP address. This
                      operand is a {svarlit} variable.

                  {sendto}
                      This operand is required and it contains the e-mail
                      address(es) of the recipients. This operand is a
                      {svarlit} variable. The data provided for this
                      operand can be a single e-mail address or it can
                      be multiple e-mail addresses that are separated by
                      a comma character.

                  {sendfrom}
                      This operand is required and it contains the e-mail
                      address of the sender. This operand is a {svarlit}
                      variable. The data provided for this operand can be
                      a single e-mail address.

                  {subject}
                      This operand is required and it contains the subject
                      for the message. This operand is a {svarlit} variable.

                  {message}
                      This operand is required and it contains the message
                      body to be sent. This operand is a {svarlit} variable.
                      The default message type used for the message body
                      is text/plain. The optional *TYPE keyword can be used
                      when another message body subtype is to be specified.

                  {options}
                      The parameters that follow the required operands are
                      optional and can be specified in any order using
                      keywords as follows:

                      *ATTACHMENT={svarlit}
                          This optional parameter specifies one or more file
                          names that identify the files to be sent with the
                          e-mail message as attachments. When more than one
                          file name is specified, then the semi-colon ';'
                          character is used to separate the file names.

                      *BCC={svarlit}
                          This optional parameter specifies the e-mail
                          address(es) of the Blind Copy recipients. This
                          parameter can contain one or more recipient
                          addresses. If more than one e-mail recipient is
                          specified, then a comma ',' character is used to
                          separate the e-mail addresses.

                      *CC={svarlit}
                          This optional parameter specifies the e-mail
                          address(es) of the Copy recipients. This parameter
                          can contain one or more recipient addresses. If more
                          than one e-mail recipient is specified, then a comma
                          ',' character is used to separate the e-mail
                          addresses.

                      *ERROR={svar}
                         This optional parameter specifies a Character String
                         variable that is to receive any error information
                         caused by the MAILSEND instruction. If this parameter.
                         is not specified, then any error information is
                         stored into the S$ERROR$ variable.

                      *PASSWORD={svarlit}
                          This optional parameter specifies the password to be
                          used for the login to the {outgoing} e-mail server.

                      *PORT={dnumnvar}
                          This optional parameter specifies the port number to
                          be used when logging on to the {outgoing} e-mail
                          server. If this parameter is not specified, then the
                          default port number of '25' is used.

                      *TIMEOUT={dnumnvar]
                          This optional parameter specifies the timeout value
                          to be used when communicating with the {outgoing}
                          e-mail server. If this parameter is not specified,
                          then the default timeout of '60 seconds' is used.
                          There are no restrictions placed on the TIMEOUT
                          values used.

                      *TRACE={svarlit}
                          This optional parameter specifies the file name
                          to be created and used to store all data messages
                          sent and received when communicating with the
                          {outgoing} e-mail server. Note that a trace file
                          over written for a given MAILSEND instruction.

                      *TYPE={dnumnvar}
                          This optional parameter is used to specify the body
                          Content-Type to be used for the e-mail message. The
                          {dnumnvar} value can be one of the following values:

                              0 - The Content-Type is text/plain with the
                                  character set of us-ascii specified.  The
                                  e-mail body is a simple text message.

                              1 - The Content-Type is text/html. The e-mail
                                  body is in HTML format.

                              2 - The Content-Type is text/richtext. The e-mail
                                  body is in a richtext e-mail format. The
                                  RFC 1341 describes this simple subtype.

                              3 - The Content-Type is text/plain with the
                                  character set of iso-8859-1 specified. The
                                  e-mail body is a simple text message.

                          Any other values are considered invalid and the
                          default value of zero is used.

                      *USER={svarlit}
                          This optional parameter specifies the username to be
                          used for the login to the {outgoing} e-mail server.

           Flags affected: ZERO, EOS

               ZERO
                   If this flag is set to be TRUE, then the MAILSEND
                   instruction was executed successfully.

                   If this flag is set to be FALSE, then the MAILSEND
                   instruction failed. In this case, any error information
                   is stored into S$ERROR$ or the *ERROR data variable.

               EOS
                   If this flag is set to be TRUE, then the error variable
                   is too small to contain all of the error information and
                   some error information has been truncated.  Otherwise,
                   this flag is set to be FALSE.

           Notes:
                 1. When an error occurs during the execution of the
                    MAILSEND instruction. Then any error data is stored into
                    the S$ERROR$ or svar variable specified by the *ERROR
                    keyword. The error information is stored using one of
                    the following formats:

                       "Mnn Subcode: sss

                            or

                       "Mnn Subcode: sss OsError: ooo"

                       Where:
                             Mnn - This field specifies the operand in the
                                   MAILSEND instruction that is related to
                                   error being reported. The 'nn' value
                                   identifies the operands/options as
                                   follows:

                                     01 - *ATTACHMENT option
                                     02 - *BCC option
                                     03 - *CC option
                                     04 - *ERROR option
                                     05 - *PASSWORD option
                                     06 - *PORT option
                                     07 - *TIMEOUT option
                                     08 - *USER option
                                     09 - reserved
                                     10 - reserved
                                     11 - reserved
                                     12 - *TRACE option
                                     13 - *TYPE option
                                     80 - {outgoing} operand
                                     81 - {sendto} operand
                                     82 - {sendfrom} operand
                                     83 - {subject} operand
                                     84 - {message} operand

                             sss - The field value specifies a subcode
                                   that is used to qualify the error
                                   that has occurred. The following
                                   subcode values can be given.

                                     31 - Insufficient memory!
                                     32 - Unable to create TRACE file!
                                     33 - Did not receive ready message
                                          from the e-mail server during
                                          the logon process.
                                     34 - Invalid e-mail server response
                                          for a QUIT action.
                                     35 - Invalid e-mail server response
                                          when OK response expected.
                                     36 - Invalid e-mail server response
                                          for an OPEN command to start
                                          a connection.
                                     37 - Invalid e-mail server response
                                          from server after sending the
                                          e-mail message data header.
                                     38 - The e-mail server rejected the
                                          {sendfrom} e-mail address.
                                     39 - The e-mail server AUTH login is
                                          not available when using the
                                          *USER/*PASSWORD settings.
                                     40 - Invalid e-mail server response
                                          to a AUTH LOGIN command.
                                     41 - The *USER name has been rejected.
                                     42 - The e-mail server did not send a
                                          PASSWORD response while processing
                                          the *PASSWORD option.
                                     43 - The *PASSWORD option is invalid.
                                     44 - Recipient e-mail address.
                                     45 - Unable to open attachment.
                                     46 - Error while reading attachment file.
                                     60 - Error accessing library used for
                                          socket support. For the Windows OS
                                          this means that an error has occurred
                                          while accessing the WS2_32.DLL or the
                                          WSOCK32.DLL.
                                     61 - Unable to resolve the {outgoing}
                                          e-mail server URL/IP address.
                                     62 - Unable to create a socket when
                                          connecting to the {outgoing} e-mail
                                          server.
                                     63 - Unable to connect a socket during
                                          the logon process to access the
                                          {outgoing} e-mail server.
                                     70 - Error occurred while sending a
                                          message to the {outgoing} e-mail
                                          server.
                                     80 - Error occurred while receiving a
                                          message from the {outgoing} e-mail
                                          server.
                                     81 - Timeout occurred while waiting to
                                          receive a message from the
                                          {outgoing} e-mail server.
                                     82 - Socket error occurred during a
                                          receive operation.
                                     83 - Lost connection while waiting for
                                          a socket receive operation.
                                     84 - Receive select error has occurred
                                          while waiting to receive a message.

                             ooo - The 'ooo' value is an OS specific error
                                   code. Under UNIX this code is an appropriate
                                   errno value.  Under Windows this code is
                                   a Windows error code.

           Example:
                Out     INIT    "www.outgoing.com"
                From    INIT    "Me@sunbelt-plb.com"
                To      INIT    "Someone@sunbelt-plb.com"
                Subject INIT    "Test Mail Message"
                Body    INIT    "Hello World!"
                CC      INIT    "one@sunbelt-plb.com,two@sunbelt-plb.com"
                .
                        MAILSEND        Out, From, To, Subject, Body
                .
                        MAILSEND        Out, From, To, Subject, Body, *CC=CC
                .
                        MAILSEND        Out, From, To, Subject, Body, *CC=CC:
                                        *ERROR=S$CMDLIN, *TIMEOUT=5

         - Corrected a problem where a MFD file could destroyed when a
           FILE, AFILE, or IFILE prep was executed using the MFD file and
           the PLB_PREPUSEIP keyword is being used.

         - Modified the XML header keyword output from "utf-8" to be "UTF-8".
           This corrects a problem on some XML parsers.

-------------------------------------------------------------------------------
PLBWIN   - A new property named 'RUNNAME={svarslit}' has been added for all
           GUI objects. The RUNNAME property can be set using to a user
           defined string name when it is specified in a CREATE or SETPROP
           instruction. The GETPROP instruction can be used to retrieve the
           current RUNNAME property string value.

           Notes:

           1. Two new PLBCMP compiler directives named %RUNNAMEON & %RUNNAMEOFF
              have been added to allow the RUNNAME property to be automatically
              assigned to the GUI object data label reference in a CREATE
              instruction.  If the RUNNAME property is explicitly specified
              in a CREATE instruction, then it takes precedent over the
              compiler directive operation.

         - Modified the WINPOS property for a WINDOW object to support new
           position values for Maximize (4) and Minimize (5) when a WINDOW is
           activated.

         - Added a new control named '*CLIPTEXT=t:b:l:r:{varlit} for a PRTPAGE
           instruction. This control is provided to clip/restrict the {varlit}
           text output to the rectangle specified by the 't', 'b', 'l', and 'r'
           page position parameters.  By default the {varlit} text output is
           left justified in the clipping rectangle unless the *ALIGNMENT
           control is used. Any data output outside the bound of the clipping
           rectangle is clipped/truncated.

           The *ALIGNMENT control can be used to control the {varlit} text
           output in the clipping rectangle as follows:

               *ALIGNMENT=*{CENTER|DECIMAL|LEFT|RIGHT}

                   CENTER

                      In this case, the {varlit} text is split in half. The
                      left half of the {varlit} text is output to the left
                      of the center point for the clipping rectangle. The
                      right half of the {varlit} text is output to the right
                      of the center point for the clipping rectangle. Text
                      is clipped/truncated from the beginning and ending of
                      the data when the size of the data is too large to
                      fit in the clipping rectangle.

                   DECIMAL

                      In this case, the {varlit} text data is centered
                      around a decimal point that exists. The decimal point
                      is positioned to the center of the *CLIPTEXT clipping
                      rectangle.  If the {varlit} text data does not contain
                      a decimal point, then the {varlit} data is right
                      justified to the center of the clipping rectangle. Text
                      is clipped/truncated from the beginning and ending of
                      the data when the data can fit in the clipping
                      rectangle.

                   LEFT

                      In this case, the {varlit} text data is left justified
                      in the clipping rectangle. If the *ALIGNMENT is not
                      used for the *CLIPTEXT control, then this the default
                      justification used for the {varlit} text data. The
                      text data can be clipped/truncated at the end of data.

                   RIGHT

                      In this case, the {varlit} text data is right justified
                      in the clipping rectangle. Text is clipped/truncated
                      from the beginning of the data when the size of the
                      data is too large to fit in the clipping rectangle.

         - Modified the *ALIGNMENT control for the PRTPAGE instruction to
           allow a {dnumnvar} variable to be used as follows:

           Format:
                  *ALIGNMENT=*{DECIMAL|LEFT|RIGHT|CENTER}|{dnumnvar}

           Note:
                1. If the {dnumnvar} syntax format is used, then the alignment
                   values are defined as follows:

                       DECIMAL   = 1
                       LEFT      = 2 (Default)
                       RIGHT     = 3
                       CENTER    = 4

                2. If the {dnumnvar} value is invalid, then the default
                   alignment value for 'LEFT' is used.

         - Modified the GETINFO instruction to support a FONT object output
           for the FONTS keyword.  The FONTS description is changed as follows:

           FONTS  the available Windows fonts. The {dest} may be a DATALIST
                  object, FONT object, or a string variable. If the {dest}
                  is a FONT object or a string variable, the default font is
                  returned. If the {dest} is a FONT object and the
                  PRINTER={pfile} is not used, then the default font of the
                  MAINWINDOW is returned. If the {dest} is a FONT object and
                  the PRINTER={pfile} is used, then the current printer font
                  for the {pfile} is returned. Note, that the PRINTER {pfile}
                  must be opened with a PRTOPEN instruction to have data
                  returned.

         - Corrected a problem where a second fastevent was dispatched while
           a first fastevent was being processed when a SETFOCUS instruction
           was executed.  This could cause indeterminate program execution. One
           symptom of this problem might be a U01 error.

         - Corrected an O108 error that would occur when a font file resource
           was being used with the following font string format:

            " '>c:\temp\c39h12l3.tff.C39 High 12pt LJ3' "

         - Modified the PREP IFILE operation to perform a Windows OS file
           commit operation after the ISI header has been written. This
           corrects a problem where the ISI could be truncated when the
           ISI/TXT files existed on a Win95/98/ME system and were being
           accessed via a network-shared drive.

         - Corrected a problem with PATH EXIST that would always return an OVER
           condition if the specified path ended with a '/' character.

-------------------------------------------------------------------------------
PLBCMP   - Modified the GETFILE instruction to support the CURFIELDS={svar}
           keyword.

         - Modified the FILE/AFILE/IFILE file variables to be able to declare
           an array format as follows:

           [label] file [({arraysize},...,{arraysize})][{parm}]
           [label] file [*][({arraysize},...,{arraysize})][{parm}]
           [label] file [%][({arraysize},...,{arraysize})][{parm}]
           [label] file [%%][({arraysize},...,{arraysize})][{parm}]
           [label] file [^][({arraysize},...,{arraysize})][,({target})]

           Where:

            file
             Required. This operand can be a FILE, AFILE, or IFILE file
                       variable.

            arraysize
             Optional. An Integer decimal constant, CONST variable or equated
                       value indicating the number of array items.

            parm
             Optional. This parameter is the same as documented for the
                       FILE/AFILE/IFILE file variables.

            target
             Optional. This parameter is the same as documented for the
                       FILE/AFILE/IFILE file variables.

            Note:

               1. A AFILE/IFILE file variable array can be declared within
                  a FILELIST/FILELISTEND declaration.

            Examples:

                     FILEARR    FILE    (2) BUFFER=1024
                     $3         INTEGER 1,"3"
                     .
                                OPEN    FILEARR(2),"TEST2"
                                PREP    FILEARR($3),"TEST3"

         - Corrected a problem where a compilation error would occur when
           compiling a RETURN instruction with a comment as follows:

               RETURN   ;Comment

         - Corrected a problem where a RECORD declaration as an input
           parameter for a FUNCTION would cause a GPF error when the FUNCTION
           was called during program execution.

-------------------------------------------------------------------------------
PLBDSIGN - Modified the WINPOS property for the WINDOW object to support a
           Maximize and Minimize position.

-------------------------------------------------------------------------------
UTILITY  - Modified the Windows OS utilities for SUNAAMDX, SUNINDEX, and
           SUNSORT to support the PLB_FNC keyword. This allows file names
           to be forced to a lowercase or mixed case when they are created.

         - Modified the PLB_FNC support for the utilities to support a
           'MIXED' value. When the 'MIXED' string value is specified, then
           the SUNAAMDX, SUNINDEX, and SUNSORT utilities DO NOT change the
           case for the filenames as specified by the user command line.

-------------------------------------------------------------------------------
ADMEQU.INC - Added the $ADMITEMSRVPROGMEM, $ADMITEMSRVHEAPMEM,
             $ADMITEMSRVLOCALMEM, and $ADMITEMSRVCHILDCOUNT equates.

-------------------------------------------------------------------------------
PLBEQU.INC - Updated the object types.

           - Added $MAXIMIZE and $MINIMIZE equates.

           - Added PANEL object for CLIPCTRL property.

           - Added STATUSBAR and TOOLBAR equates that were missing.

-------------------------------------------------------------------------------
SUNWODBC.DLL- Corrected a problem where a DBDISCONNECT could cause a GPF
              error to occur.

-------------------------------------------------------------------------------
ADMIN    - The ADMGETINFO data has been modified to include the following
           data items for the application server.

           $ADMITEMSRVPROGMEM  = 117
             This ADMIN server data item retrieves the largest program memory
             size used by one of the clients that has connected to the
             application server.  This value is a high water mark value and it
             never decreases. The returned value in this case can be used to
             help determine the largest setting required for a the runtime
             command line '-m' or '-mv' options.

           $ADMITEMSRVHEAPMEM  = 118
             This ADMIN server data item retrieves the largest heap memory
             size used by one of the clients that has connected to the
             application server. This value is a high water mark value and it
             never decreases.

           $ADMITEMSRVLOCALMEM = 119
             This ADMIN server data item retrieves the largest local memory
             size used by one of the clients that has connected to the
             application server.  This value is a high water mark value and it
             never decreases.

           $ADMITEMSRVCHILDCOUNT = 120
             This ADMIN server data item retrieves the largest logon child
             count since an application or file manager server has started.
             This value is a high water mark value and it never decreases.

-------------------------------------------------------------------------------
SUNIDE   - Added trap for potential I11 error during CLEAN process.

         - Corrected email address in error dialog.

         - Improved startup time.

         - Corrected communications compression problem.

         - Added Remode debugging capability.
         
           On the system with the program to be debugged, the port number must
           be specified.  It is this specification that tells the debugger to
           use the remote capabilities.  The default is 24240 and can be
           defined in either the UET or .INI file.  Example:

                PLBDBG_PORTNUM=24240

           On the system with the GUI debugger, set the IP address and port
           number.  The IP address is the address of the system running the
           program to be debugged.  The Port number defaults to 24240 if not
           specified.  The variable must be set in the UET and cannot be in the
           .INI file.  Example:

                PLBDBG_HOST=192.168.2.10:24240

           Start the GUI debugger with the following command:
           
                plbwin dbgiface

           It will alert you when to start the program to be debugged.  When
           prompted, start the program to be debugged as you normally would
           when debugging:

                plbwin -d program.

           Click "Ok" to let the GUI debugger know the program is running. If
           the GUI debugger is not able to establish a connection within 30
           seconds, the character debugger will initialize on the system
           running the program to be debugged and the client GUI debugger will
           terminate.

-------------------------------------------------------------------------------
WATCH    - Added support for new ADMIN counters specified above.

-------------------------------------------------------------------------------