Date: 02-17-2014 Subject: RELEASE 9.6C Runtime Files These release notes pertain to the following programs or files: EMBEDINI 9.6C 17 Feb 2014 9,6,3,500 EMBEDINI64 9.6C 17 Feb 2014 9,6,3,500 HEXDUMP 9.6C 17 Feb 2014 9,6,3,500 HEXDUMP64 9.6C 17 Feb 2014 9,6,3,500 MAKECLI 9.6C 17 Feb 2014 9,6,3,500 MAKECON 9.6C 17 Feb 2014 9,6,3,500 MAKECONET 9.6C 17 Feb 2014 9,6,3,500 MAKEDEF 9.6C 17 Feb 2014 9,6,3,500 MAKEMFD 9.6C 17 Feb 2014 9,6,3,500 MANAGECE 9.6C 17 Feb 2014 9,6,3,500 OBJMATCH 9.6C 17 Feb 2014 9,6,3,500 OBJMATCH64 9.6C 17 Feb 2014 9,6,3,500 ODBCINST64 9.6C 17 Feb 2014 9,6,3,500 PLBCGI 9.6C 17 Feb 2014 9,6,3,500 PLBCLICON 9.6C 17 Feb 2014 9,6,3,500 (ComCtl 6) PLBCLIENT 9.6C 17 Feb 2014 9,6,3,500 (ComCtl 6) PLBCLINET 9.6C 17 Feb 2014 9,6,3,500 (ComCtl 6) PLBCON 9.6C 17 Feb 2014 9,6,3,500 (ComCtl 6) PLBCONET 9.6C 17 Feb 2014 9,6,3,500 (ComCtl 6) PLBDSIGN 9.6C 17 Feb 2014 9,6,3,500 PLBNET 9.6C 17 Feb 2014 9,6,3,500 (ComCtl 6) PLBSERVE 9.6C 17 Feb 2014 9,6,3,500 PLBSERVET 9.6C 17 Feb 2014 9,6,3,500 (Threaded Server) PLBWIN 9.6C 17 Feb 2014 9,6,3,500 (ComCtl 6) SETGUID 9.6C 17 Feb 2014 9,6,3,500 SUNAAMDX 9.6C 17 Feb 2014 9,6,3,500 SUNAAMDX64 9.6C 17 Feb 2014 9,6,3,500 SUNINDEX 9.6C 17 Feb 2014 9,6,3,500 SUNINDEX64 9.6C 17 Feb 2014 9,6,3,500 SUNLS 9.6C 17 Feb 2014 9,6,3,500 SUNMOD 9.6C 17 Feb 2014 9,6,3,500 SUNMOD64 9.6C 17 Feb 2014 9,6,3,500 SUNSORT 9.6C 17 Feb 2014 9,6,3,500 SUNSORT64 9.6C 17 Feb 2014 9,6,3,500 WININST 9.6C 17 Feb 2014 9,6,3,500 PLBCLICON5 9.6C 17 Feb 2014 9,6,3,500 (ComCtl 5) PLBCLIENT5 9.6C 17 Feb 2014 9,6,3,500 (ComCtl 5) PLBCLINET5 9.6C 17 Feb 2014 9,6,3,500 (ComCtl 5) PLBCON5 9.6C 17 Feb 2014 9,6,3,500 (ComCtl 5) PLBCONET5 9.6C 17 Feb 2014 9,6,3,500 (ComCtl 5) PLBNET5 9.6C 17 Feb 2014 9,6,3,500 (ComCtl 5) PLBWIN5 9.6C 17 Feb 2014 9,6,3,500 (ComCtl 5) ODSBAC32.DLL 9.6C 17 Feb 2014 ODSBAC64.DLL 9.6C 17 Feb 2014 PLBNETSUP.DLL 9.6C 17 Feb 2014 9,6,3,500 Required for PLBNET PLBWSEC.DLL 9.6C 17 Feb 2014 9,6,3,500 Req'd PLBWIN/PLBNET SA_DLL32.DLL 9.6C 17 Feb 2014 9,6,3,500 SUNWADO.DLL 9.6C 17 Feb 2014 9,6,3,500 SUNWADO25.DLL 9.6C 17 Feb 2014 9,6,3,500 SUNWADO28.DLL 9.6C 17 Feb 2014 9,6,3,500 SUNWMSQL.DLL 9.6C 17 Feb 2014 9,6,3,500 SUNWODBC.DLL 9.6C 17 Feb 2014 9,6,3,500 SUNWSRV.DLL 9.6C 17 Feb 2014 9,6,3,500 PLBCMP 9.6C 17 Feb 2014 PLBDBUG 9.6C 17 Feb 2014 ADMEQU.INC 9.6A 08 Mar 2013 PLBEQU.INC 9.6A 08 Mar 2013 PLBMETH.INC 9.6B 01 Aug 2013 PLBCLI.ZIP 9.6C 17 Feb 2014 9,6,3,600 (ComCtl 6) PLBRUN.ZIP 9.6C 17 Feb 2014 9,6,3,600 (ComCtl 6) *============================================================================== Notes for WARNINGS: - With the 9.6C patch release, the default for the PLB_ISI_CACHE keyword is changed to enable the ISI caching for all IFILE variables. By default the ISI cached sector maximum is set to be 50% of the maximum allowed. The maximum ISI cached sectors allows is currently to 200 sectors. If a user DOES NOT want to have ISI caching enabled, the ISI caching can be disabled by one of the following: 1. Place 'PLB_ISI_CACHE=0' in the runtime INI file in the [Environment] section. 2. Used the 'SETMODE *ISICACHE=0' instruction. 3. Used the 'ISICACHE=0' keyword in an IFILE OPEN or PREP instruction. Note: 1. The ISI caching is ONLY enabled and disabled in the OPEN or PREP instructions for an IFILE variable. *============================================================================== Notes for DOCUMENTATION: - In the PL/B Runtime reference manual, change the description for the PLB_ISI_CACHE keyword as follows: "This keyword controls ISI sector caching by the runtime. ISI caching improves application performance by reducing operating system IO when reading the ISI tree structure, repeatedly. By default the ISI caching is turned ON and the default ISI cache sector count is 50% of the maximum sectors allowed. The {cachesize} defines the default cache size for every IFILE that is opened in a PLB program." - In the PL/B Language reference manual, change the description of the HTTP error number 23 to read as follows: "Unable to locate/open the 'OpenSSL library required to provide SSL support. This error causes a U66 error to occur when this error value is generated. In this case, the user must install the SSL support libraries to prevent a U66 error." - In the PL/B Runtime reference manual, add a U66 error described as follows: U66 - The SSL support libraries can not be found and loaded by the PL/B runtime. For a Windows environment, the SSL libraries ( ssleay32.dll and libeay32.dll ) must be installed on the system executing the runtime. For a Unix environment, the SSL shared libraries ( libssl.so and libcrypto.so ) must be installed on the Unix system executing the runtime. - In the PL/B Language reference manual, added the array initialization format to any data variables that support arrays as follows: "[label] datatype ^(arraysize)" Where: 'datatype' is a PL/B data variable declaration types such as DIM, FORM, INTEGER, etc... I am finding that the following PL/B data variable types need to have the array initialization syntax provided. [label] ADMIN ^(arraysize)[,({target}),...,({targetN})] [label] AFILE ^(arraysize)[,({target}),...,({target})] [label] DIM ^(arraysize)[,({target}),...,({target})] [label] FILE ^(arraysize)[,({target}),...,({target})] [label] FORM ^(arraysize)[,({target}),...,({target})] [label] IFILE ^(arraysize)[,({target}),...,({target})] [label] INTEGER ^(arraysize)[,({target}),...,({target})] [label] VAR ^(arraysize)[,({target}),...,({target})] [label] XFILE ^(arraysize)[,({target}),...,({target})] Where: {target} is a previously declared data item of the same type. Examples of Array Initialization: . ADMIN1 ADMIN ADMIN2 ADMIN ADMINARR ADMIN ^(2), ( ADMIN1 ), ( ADMIN2 ) . AFILE1 AFILE AFILE2 AFILE AFILEARR AFILE ^(2), ( AFILE1 ), ( AFILE2 ) . D1 DIM 1 D2 DIM 2 DARR DIM ^(2), ( D1 ), ( D2 ) . FILE1 FILE FILE2 FILE FILEARR FILE ^(2), ( FILE1 ), ( FILE2 ) . F1 FORM 1 F2 FORM 2 FARR FORM ^(2), ( F1 ), ( F2 ) . IFILE1 IFILE IFILE2 IFILE IFILEARR IFILE ^(2), ( IFILE1 ), ( IFILE2 ) . I1 INTEGER 1 I2 INTEGER 2 IARR INTEGER ^(2), ( I1 ), ( I2 ) . VAR1 VAR ^ VAR2 VAR ^ VARARR VAR ^(2), ( VAR1 ), ( VAR2 ) . XFILE1 XFILE XFILE2 XFILE XFILEARR XFILE ^(2), ( XFILE1 ), ( XFILE2 ) . - In the PL/B Language reference manual under the SQLIO Limitation section, add the following note: "7. SQLIO can not simulate any PL/B IO operations that use data that can not be stored and represented in a SQL database as appropriate for the SQL data types being used." - In the PL/B Runtime reference manual, add two additional notes as follows: "5. In release 9.6B, the runtimes were modified to automatically enable the PLBWIN_XPIO validation operation by default only when a Windows XP system is being used to execute the runtime. Otherwise, the default for PLBWIN_XPIO is to be disabled. On a Windows XP system, the 'PLBWIN_XPIO=OFF' can be used to disable this keyword operations. 6. The original EOF issue occurred when a Windows XP system was accessing data on a Windows 98 system. However, it should be noted that similar EOF issues have occurred when a Windows XP system has accessed data on OS versions other than a Windows 98 system. Therefore, the PLBWIN_XPIO keyword may be needed in those other networked scenarios." - To better describe the affects when a Windows control is disabled by setting the ENABLED property to FALSE. Change the PL/B Language reference manual in the following sections: ENABLED Property 6. When the ENABLED property is used to disable a PL/B object that is created as a Windows control, there are Windows behaviors that occur as follows: - The mouse and keyboard input is disabled. This prevents any object events from occurring. - Windows grays out the PL/B object and text. If a SETPROP is used to change the FGCOLOR of a disabled object, the foreground color does not change until the object is enabled. The graying out behavior is strictly dependent and controlled by the Windows OS. FGCOLOR Property 4. If the FGCOLOR property is changed for a PL/B object that is created as a Windows control, the foreground color change does not take affect if the object is disabled. The Windows OS grays out the text of a disabled object until the object is enabled by setting the ENABLED property to $ON. The FGCOLOR change takes affect after the object is enabled. This behavior is only expected for Windows controls. This FGCOLOR behavior does not occur for a GROUPBOX, PROGRESS, or STATTEXT because these objects are not created as Windows controls. - In the PL/B Runtime reference manual, change the I45 error description to read as follows: I45 - This error occurs while accessing the .AAM key file for read, positioning, and writing operations. This error can be caused by any of the following reasons: A. An OS IO operation has failed with an error when accessing the AAM key file. The reason for such a failure could be: - Insufficient access rights to the AAM key file. - Disk resource issues causing OS IO errors caused by insufficient disk space. - Unexpected control of the AAM key file by third party applications for backup, virus scanning, etc... B. If the AAM key file size is shorter than expected, the I45 error can occur if the AAM hash code file data does not exist where no data is read. Under normal operations the size of the AAM key file should exist as follows: AAM_File_Size = 768 This size can exist for a newly created AAM file with no existing text records. AamFileSize = 768 + ( n * 65536 ) After an AAM hash value is written for an AAM record block, the expected AAM file size is a multiple of 65536 plus the header of 768 bytes. - Change the PL/B Language Reference manual for the HTTP instruction to have the description of the error value 28 under Note (10.) to read as follows: 28 - The web server response does not contain a HTTP header. All responses from a web server must contain a HTTP header when the *FLAGS $HTTP_FLAG_RAW_RESULT bit is not being used. If the *FLAGS $HTTP_FLAG_RAW_RESULT is being used, this error does not occur and the HTTP instruction returns the response data exactly as received from the web server. - In the PL/B Language Reference Manual, change the note (1.) under the 'SQLIO Getting Started' section to read as follows: "1. Add a PLB_SQLIO_HOST, PLB_SQLIO_DRIVER, and PLB_SQLIO_SQLTYPE keyword to the PLBWIN INI file. These keywords specify the database source, driver type, and SQL language syntax type used to make a connection to a SQL database engine that contains the SQLIO system tables used to define the SQLIO schema record layouts. See SQLIO Runtime Keywords for additional information." - In the PL/B Language Reference Manual, add a note (1.) in the 'SQLIO Runtime Keywords' section to read as follows: " Note: 1. The keywords PLB_SQLIO_HOST, PLB_SQLIO_DRIVER, and PLB_SQLIO_SQLTYPE can be specified in the runtime INI file to specify the initial\default SQL data engine where the SQLIO schema administrative tables are located. If these keywords are not specified, the runtime uses the default SQLite Database engine to retrieve the initial\defaults SQLIO schema tables. Optionally, the SQLIO user data tables can exist in this same SQL database engine source or they can be located on in a different SQL database engine source reference using the user defined database names located in the 'Sun_Sqlio_Databases' table described in the 'SQLIO Administrative Tables' section." - In the PL/B Language Reference Manual, change the note (4.) in the 'CREATE ICON' section to read as follows: "4. If {data} is a numeric variable or decimal constant, it specifies the resource number of the icon image. A set of standard icons has been provided as internal resources in the Sunbelt runtimes. The resource numbers in the range of 10,000 to 10,999 are reserved as the Sunbelt resource numbers for the runtime standard icons." - In the PL/B Language Reference Manual, rename note (5.) in the 'CREATE ICON' section to be note (6.) and insert a new note (5.) as follows: "5. If {data} is a numeric variable or decimal constant with a resource value from 11,000 to 11,500, the Sunbelt runtime loads and uses the icon as a 16x16 small icon. The icon resource numbers in this range of 11,000 to 11,500 are now available as user resource numbers with the stipulation that these icons are loaded as small icons." - In the PL/B Language Reference Manual, change the note (2.) in the 'CREATE ICON' section to read as follows: "2. If {data} is a Character String Variable, it specifies the name of an icon file. If the icon file name does not have an extension, a default extension of '.ico' is assumed. The name supports $MACRO and :VOL name formats and the runtime attempts to locate the file using the PLB_PATH specification. If the file name of the resolved icon file name begins with a less-than '<' character, the runtime loads and uses this icon file as a 16x16 small icon. The '<' in the resolved icon file named MUST be specified before an other special characters." - In the PL/B Language Reference Manual, change the notes (2.) and (6.) in the 'ICON Property' section to read as follows: "2. If {value} is a Character String Variable, it specifies the name of an icon file. If the file name of the resolved icon file name begins with a less-than '<' character, the runtime loads and uses this icon file as a 16x16 small icon. The '<' in the resolved icon file named MUST be specified before an other special characters." "6. If {value} is a Numeric Variable or decimal constant, it specifies the resource number of the image. A set of standard icons has been provided as internal resources in the Sunbelt runtimes. The resource numbers in the range of 10,000 to 10,999 are reserved as the Sunbelt resource numbers for the runtime standard icons. If the {value} resource number has a value from 11,000 to 11,500, the Sunbelt runtime loads and uses the icon as a 16x16 small icon. The icon resource numbers in this range of 11,000 to 11,500 are now available as user resource numbers with the stipulation that these icons are loaded as small icons." - In the PL/B Language Reference Manual, change the note (9.) for the LISTVIEW 'SortColumn' method to read as follows: 9. The numeric sort type can have a filter applied to the numeric data before the data is sorted. The following numeric sort filter identification strings in {mask} parameters are supported: The numeric sort type {mask} must be specified using the format of '(n)' which includes the parentheses characters and the 'n' value is in the range of '0' to '3'. Otherwise, the numeric sort type defaults to use 'No Filtering'. Filter String as '(n)' Numeric sort Filter ... Example: LV.SORTCOLUMN USING *Column=0,*TYPE=3,*Mask="(1)" Execution of this SORTCOLUMN method applies a numeric filter mask that removes the '$' and ',' characters from the ListView data item string being used. - In the PL/B Language Reference Manual, add the note (25.) for the COPYFILE instruction as follows: 25. The COPYFILE {source} and {dest} names must contain a fully qualified file name including a path. Otherwise, the {source} must exist in the current working directory of the runtime, client, or Data Manager before the file can be found and used. Likewise, the {dest} is output to the current working directory runtime, client, or Data Manager when a path is not specified. - In the PL/B Language Reference Manual under the PDF 'Supported Print Controls' section, change the note (1.) description for the PRTPAGE *ENCRYPT keyword to read as follows: Permissions = D7+D6+D5+D4+D3+D2+D1+D0 D0 - Reserved must be 0 D1 - Reserved must be 0 D2 - Allow document to be printed. Add a value of (4) to enable this permission. D3 - Allow the contents of the PDF document to be modified. Add a value of (8) to enable this permission. D4 - Allow text and graphics to be copied or extracted from the PDF document. Add a value of (16) to enable this permission. D5 - Allow additions and modifications for document text annotations. Also, allow interactive form fields to be filled. In addition, if the D3 permission is enabled, allow form fields to be set, created, or modified. Add a value of (32) enable this permission D6 - Not used D7 - Not used Where each 'Dn' represents the corresponding bit in the permissions byte bit mask value. - In the PL/B Runtime reference manual, add the following internal debug descriptions to the 'Command Line' sections appropriate for the different platform runtime types: The PLB runtimes support specialized internal debugging capabilities that can be used to record PLB program execution data. There are two data collection formats that are generated depending on the debug option '-dN' that is specified. I) Special Internal Runtime Debugging The first internal debugging data collection format is invoked using the '-dN' options where the N can be a 0, 1, 2, 3, or 4 value. This type of internal debugging data should ONLY need to be collected upon request by Sunbelt personnel where the resulting debug data is to be analyzed by Sunbelt personnel. In general, this form of internal debugging allows Sunbelt personnel to determine the PLB program flow and the exact PLB instructions that are being executed for some PLB program scenario being evaluated. The follow descriptions apply when using the form of internal debugging: Option Description d0 - This option identifies that the runtime internal debugging is turned off. This is the default behavior when the '-dN' option is NOT specified. d1 - This option is reserved for Sunbelt use. d2 - This option invokes runtime internal debugging level 2 to create and store runtime administrative data into a single file named as follows. When this runtime debug option is invoked, the PLB runtime requires that an end-user to start the program execution by responding to an appropriate debug start dialog for a Windows runtime or a key input for a Unix runtime. 'plbwin.log' - Windows runtime 'plb.log' - Unix runtime 'plbwin_NNNN.log' - Windows Plbserve runtime where NNNN is a process or thread ID of the runtime. 'plb_NNNN.log' - Unix Plbserve runtime where NNNN is a process or thread ID of the runtime. d3 - This option invokes runtime internal debugging level 3 that records both runtime administrative data as described for '-d2' along with additional PLB program execution data that is captured in a snapshot of PLB program instruction codes. Like the '-d2' option, this '-d3' debug option requires the end-user to start the PLB internal debugging session manually the same as described in the '-d2' option. When this '-d3' debug option is used, the PLB runtime captures and stores program codes into alternating log files named as follows. These log files are limited to a size of '100,000' bytes resulting in a maximum program execution window of '200,000' program instruction codes that can be analyzed by the Sunbelt personnel. 'plbwin1.log' and 'plbwin2.log' - Windows runtime program debug log files. 'plb1.log' and 'plb2.log' - Unix runtime program debug log files. 'plbwin1_NNNN.log' or 'plbwin2_NNNN.log' - Windows Plbserve runtime program log files where NNNN is a process or thread ID of the runtime child task. 'plb1_NNNN.log' or 'plb2_NNNN.log' - Unix Plbserve runtime runtime program log files where NNNN is a process or thread ID of the runtime child task. d4 - This option invokes runtime internal debugging the same as described for the '-d3' option except the end-user is NOT required to manually start the debugging session. Note: 1. These runtime internal debugging options are ONLY intended to capture information that can be analyzed by Sunbelt personnel when evaluating some end-user scenario that requires details not available otherwise. 2. The PLB runtime keyword named 'PLB_DEBUG={type}' can be used to cause the runtimes to automatically invoke internal runtime debugging. See the description of this keyword for more details. The '-d2', '-d3', or '-d4' options override the 'PLB_DEBUG' keyword setting when both the keyword and command line option is used. 2. Starting with changes made in release 9.5C, any log files are created by default in the directory location specified by the 'PLB_SYSTEM' keyword. 3. Also, implemented in release 9.5C, additional internal runtime keywords have been implemented to expand the debugging flexibility. These runtime keywords should ONLY be used in special debugging scenarios. PLB_DEBUGLOGFILESIZE=NNNNNNNNN This keyword can be used to change the default internal log file size from '100,000' to some other size. The 'NNNNNNNNN' can be specified with a value of '65535' to '500000000'. The 'NNNNNNNNN' value applies to each program log file created as described for the '-d3' option. PLB_DEBUGLOGNAME={name} This keyword can be used to specify a user defined log file {name} to be used in place of 'plbwin' or 'plb' as described for the '-d2' and '-d3' debug options. In this case, the {name} DOES NOT contain the path. PLB_DEBUGLOGPATH={path} This keyword can be used to specify a user defined {path} where the log files as described for the '-d2' and '-d3' options are to be created. In this case, the {path} is used instead of the path specified by the 'PLB_SYSTEM' keyword for the location of internal debug log files. 4. The PLB internal runtime debugging may be changed at the discretion of the Sunbelt personnel to allow special internal debugging data to be collected and analyzed when resolving end-user issues. II) Runtime Profiling The second internal debugging data collection format is implemented to generate runtime program data such that an end-user can execute a PLB profile analyzer program when evaluating PLB performance issues. The profile internal debugging can be invoked using the '-dN' options where the N can be a 5, 6, 7, or 8 value. The PLB profiling data is stored in binary format to allow as much data as possible to be collected while minimizing the profile data file size. The follow descriptions apply when using the form of profile debugging: Option Description d5 - This option enables the runtime data collection of PLB program instruction codes and times that allow a PLB profiling program to analyze the performance of PLB instructions and logic. The '-d5' option, requires the end-user to start the PLB profile debugging session manually using a dialog for a Windows runtime and a keyed response for a Unix runtime. When the '-d5' option is used, a profile data file is created as follows. There is no limit on the profile data file size. 'profile_NNNN.log' - Windows runtime profile log file where NNNN is a process or thread ID of the runtime task that is executing. d6 - This option enables the runtime profiling data the same as described for the '-d5' option with the exception that the debugging session is started without end-user manual interaction. d7 - This option enables the runtime profiling data the same as described for the '-d5' option except it is ONLY used for the PLB Application Server (plbserve). This profile debug option allows an expanded 'plbserve' data format to be collected and analyzed for the Application Server programs. d8 - This option enables the runtime profiling data the same as described for the '-d7' option with the exception that the debugging session is started without end-user manual interaction. - In the PL/B Runtime reference manual, add the following description for runtime 'q' option in the appropriate 'Command Line' runtime options sections. Option Description q - This runtime command line option causes the runtime to start program execution in a quiet mode. The PLB runtime does not output the Sunbelt runtime greeting\banner when the quiet mode option is used. Also, see the runtime 'PLB_QUIET' keyword. - In the PL/B Runtime reference manual, add the following F13 description into the F(Format) Errors section. F13 - A FINDDIR instruction was unable to create a DMAKE buffer for for a destination DIM pointer. This failure can only happen if the internal runtime FINDDIR operation was unable allocate memory for a DMAKE DIM variable. *============================================================================== The following files have been changed as noted: ------------------------------------------------------------------------------- PLBSERVE - Corrected a problem where the IFILE read operations were initializing the IO Cancel mode at the client when IO Cancel mode was not being used. this problem was causing a client message for every IFILE read operation that wasted time. - Corrected a problem where a CREATE instruction using a PLBSERVE runtime was internally accessing the client for a PLB designer status. This check was causing unexpected behaviors with indeterminate consequences. The symptoms could be premature connection lose, GPFs, or hanging when a PLB program was the using CACHELIST instruction. Otherwise, the symptom was poor performance when multiple CREATE statements are grouped together. ------------------------------------------------------------------------------- PLB(UNIX), PLBSERVE(UNIX) - Corrected a problem where the ISI tree could be changed erroneously when performing DELETE IFILE operations and the Unix\Linux OS version V6.4 was being used. This problem was indeterminate and produced random results depending on the ISI tree structure and the order of the ISI keys being deleted. In addition, the ISI tree structure could be changed with unexpected results as the ISI tree key ordering was manipulated for normal IFILE write, update, and insert operations. ------------------------------------------------------------------------------- PLBWIN, PLBNET - Corrected a problem where the runtime crashing handling logic would prematurely generate a secondary GPF when the Windows OS caused a GPF after the memory for the runtime process was freed. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX) - In the 9.6 release, the ISI caching was implemented. The ISI caching in the 9.6C patch release is now enabled by default. The initial default ISI cached sector count is 50% of the maximum allowed sectors which currently 200 sectors maximum. With this change, every IFILE that is opened or prepared in a PLB program is automatically cached. If an end user does not want ISI caching turned on, the ISI cache can be turned off using one of the following: 1. Place 'PLB_ISI_CACHE=0' in the runtime INI file in the [Environment] section. 2. Used the 'SETMODE *ISICACHE=0' instruction. 3. Used the 'ISICACHE=0' keyword in an IFILE OPEN or PREP instruction. Note: 1. The ISI caching is ONLY enabled and disabled in the OPEN or PREP instructions for an IFILE variable. 2. The PLB ISI caching is implemented to improve the overall performance of IFILE operations when the same records in an IFILE are being accessed repeatedly. If there are ISI files that are predominately static and being accessed over a mapped network drive, ISI caching can improve the performance of the PLB programs using IFILEs when the same records in an IFILE are being read multiple times. 3. Use of the PLB_ISI_CACHE increases the runtime memory usage since an ISI cache buffer is created for each IFILE unless it is turned off for specific IFILE variables. - Added a new keyword named '*ISICACHE={nvardnum}' to the SETMODE instruction. This keyword can be used to set the current runtime ISI caching size to be applied to each IFILE variable that is opened and\or prepared in a PLB program. The basic description of this SETMODE keyword is the same as defined for the runtime 'PLB_ISI_CACHE' keyword. If IFILE variables are currently opened when the SETMODE *ISICACHE keyword is changed, those opened IFILE variables are unaffected by the changed until they are opened again. - Added a new keyword named 'ISICACHE={nvardnum}' to the OPEN\PREP IFILE instructions. This keyword can be used to override the current runtime ISI caching default setting. By default the PLB runtimes enable ISI caching with the cached sector count set to 50% of the maximum count allowed. The maximum allowed count is 200 sectors. The {nvardunum} value can be specified from 0 to 200. A value of 0 disables the ISI caching. - Added a new OPEN\PREP MODE bit value named 'CMP_NOSHRINK' for AFILE\IFILE\FILE file variables. This mode bit value can be specified to indicate that the TXT data file NEVER gets smaller. This means that the TXT data files only grows. When the 'CMP_NOSHRINK' open mode bit is specified, the runtime can optimize for READ sequential operations. The description of this bit value is: CMP_NOSHRINK 0x400000 The TXT data file does not get smaller. The PL/B runtime can optimize direct READ operations using the TXT data file. - Modified the HTTP instruction to give a U66 error if the SSL libraries (ssleay32.dll or libeay32.dll) cannot be found\loaded when the SSL flag is turned on in the HTTP instruction. - Modified the runtimes to support new keywords named '*TRACE={svarlit}' and '*TRACEAPPEND={svarlit}' for the HTTP instruction. These new keywords allow HTTP send\receive data to be logged into a trace file specified in the {svarslit} string. The description of these keywords in a HTTP instruction can be found in the PLBCMP section. - Added a new FLAGS bit definition for the PRTOPEN and PRTPLAY instructions to enable Windows Ansi encoding for PDF output when national characters with character values greater than 0x7F are being used. The new FLAGS bit value is: PDF_FLAGS_WIN_ANSI_ENCODING EQU 128 When this bit is turned on, the PDF output is set to enable Windows Ansi encoding when national characters with character values greater than 0x7F are used. This Windows Ansi encoding causes PDF readers to properly interpret and present the national characters. - Modified the PRTOPEN instruction for PDF output to support the PL/B file name formats including the keyword substitution for Datapoint and '$' macro formats. This enhanced file name support applies to the 'PDFNAME' option and the {jobname} parameter when the {device} is directed to the 'pdf:' output device. - Modified the PRTPLAY instruction for PDF output to support the PL/B file name formats including the keyword substitution for Datapoint and '$' macro formats. This enhanced file name support applies to the 'PDFNAME' option and the JOBNAME option when the {prtname} is directed to the 'pdf:' output device. - Modified the ISI compact operations to use an expanded Isam tree stack level. This change is being made to allow the ISI compact operation to execute properly when an ISI file is being compressed with a ISI treelevel larger than allowed under normal runtime operations. The normal treelevel allowed by a runtime is a stack treelevel of 18. The expanded ISI compact treelevel can work to a treelevel of 48. - Modified the '-d3' output to include dataBase and codeBase values for each program\load module accessed. This information can be useful when tracking issues where program memory addresses for specific program modules are to be determined. In addition, information identifying the current PLC program is now being included in the debug log file. - Modified the PREPARE AFILE instruction to skip any leading '-' characters specified in the {keyspecs}. - Corrected a problem where a ISI compact operation could damage the ISI structure. This problem could cause the ISI tree structure to contain an Isam tree sector from the ISI file that existed before the compact operation was performed. This residual tree sector could cause an unexpected I62 or other indeterminate errors. - Corrected a problem using SQLIO where conversion of data in scientific notation in a SQL table to a FORM variable was invalid. Example of SQLIO conversion problem: SQL Table FORM variable '1.8' format 4.23e-05 --> .00000000 //Bad conversion prior to fix! 4.23e-05 --> .00004230 //Correct conversion! - Corrected a problem using DBFETCH where conversion of data in scientific notation in a SQL table to a FORM variable was invalid. Example of SQLIO conversion problem: SQL Table FORM variable '1.8' format 4.23e-05 --> .00000000 //Bad conversion prior to fix! 4.23e-05 --> .00004230 //Correct conversion! - Corrected a problem where the MAILSEND instruction would truncate trailing blanks from a DIM literal used for an input parameter. With this change, all MAILSEND DIM input variable data is preserved. - Corrected a GPF error that could occur if the size of the data without trailing blanks in the MAILSEND {outgoing} parameter was larger than 73 characters. - Corrected a problem where the HTTP instruction would truncate trailing blanks from a DIM literal used for an input parameter. With this change, all HTTP DIM input variable data is preserved. - Corrected a problem in MAILSEND where the AUTH or DSN response was being ignored when the AUTH or DSN response was the last line in a group of responses received. This problem could cause unexpected MAILSEND errors like 'M08 subcode 39'. - Corrected a SQLIO issue where the UPDATE instruction could give an unexpected OVER flag (i.e. TRUE) when the prior READ operation used a ';' character to terminate the READ variable list. - Corrected a problem where the SQLIO sql 'char' data type was limited to 255 bytes for MySQL and 8000 bytes for SQL Server. A change has been made to use the 'text' sql data type if these limits are exceeded. - Corrected a problem that caused the MySQL server to give a SQL syntax error when the SQL statements total size required to perform a PL/B IO instruction was larger than 1024 bytes. This problem would cause an I86 subcode 36 error to occur. - Corrected a problem where the HTTP instruction could generated a GPF error when receiving a web server response in chunked mode. - Corrected issue where a SQLIO READ instruction did not clear the variable list when an OVER condition was generated. - Corrected a problem where the PDF permissions for the PRTPAGE *ENCRYPT keyword was not being properly initialized. This problem resulted in unexpected permission behaviors. - Corrected a problem for PDF output where text data vertical positioning did not exactly match the output for direct printing. With this change, the runtimes dynamically calculate a vertical positioning offset based on the text font size being used. - Corrected a problem where the PDF output for text data was being misplaced by '1' to 'n' pixels as compared to direct printed output depending on the specific font being used. This problem was occurring because the Sunbelt PDF was not taking into account the TTF ascender and descender metrics for a given TTF font. - Corrected a problem where the XFILE OPEN Mode named 'XFILE_ALLCHARS' was not taking affect and could cause an unexpected I83 subcode 216 error. - Corrected a problem in the FUNCTION cleanup logic where a DMAKE buffer was not properly released when a DIM pointer to a DIM pointer was being used. This could cause a memory leak to occur when the PLB FUNCTION was executed. - Corrected a problem for the MOVEPTR instruction where an ARRAY pointer was being corrupted when the source operand was an array of pointers and the destination was an ARRAY pointer. After the ARRAY pointer was corrupted, any PLB instruction that used the ARRAY pointer would execute with indeterminate results including a possible GPF error. The 9.6C compiler has been modified to give an appropriate compiler error when the MOVEPTR instruction syntax specifies the source as an array of pointers and the destination is an ARRAY pointer. See the PLBCMP section for more details on the compiler change. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE (Windows) - Added a new keyword named '*PLBWINXPIO=' for the GETMODE and SETMODE instructions. This keyword provides program control to enable and disable operations for keyword named PLBWIN_XPIO. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, ALL GUI CLIENTS - Added a method named 'GetUnicode' for a RICHEDITTEXT object. The GetUnicode method retrieves the raw Unicode (UTF-16) data from a RICHEDITTEXT object. ............................................................... . GetUnicode Method for WINDOW . The GetUnicode method retrieves the raw Unicode (UTF-16) data from an EDITTEXT object. The method uses the following format: [label] {object}.GetUnicode [GIVING {return}]: USING [*Flags=]{flags} Where: label Optional. A Program Execution Label. object Required. A RICHEDITTEXT object that is accessed. return Optional. A Character String Variable that receives the Unicode (UTF-16) data. flags Optional. A Numeric Variable or decimal number that controls operational behaviors for this method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The OVER and ZERO flags are always cleared. 2. The EOS flag is set to a TRUE state if the returned data is truncated because the {return} variable is too small. Otherwise, the EOS flag is cleared. 3. The bit mask definitions for the {flags} parameter are defined as follows: Value Behavior 0x00000001 Strip trailing Unicode NULL termination characters. 4. The CONVERTUTF instruction can be used to perform UTF conversions to and from UTF-16 formatted data strings. - Modified the 'SetUnicode' method for an EDITTEXT object to ignore leading Unicode identifier of '0xFFFE' or '0xFEFF' in the first two bytes of the input data. - Modified the 'SetUnicode' and 'GetUnicode' methods to preserve the current Clipboard Unicode contents when these methods are executed. - Added a method named 'SetUnicode' for a RICHEDITTEXT object. The SetUnicode method transfers raw Unicode (UTF-16) data to a RICHEDITTEXT object. ............................................................... . SetUnicode Method for WINDOW . The SetUnicode method transfers raw Unicode (UTF-16) data to a RICHEDITTEXT object. The method uses the following format: [label] {object}.SetUnicode [GIVING {return}]: USING [*String=]{string}[: [*Flags=]{flags} Where: label Optional. A Program Execution Label. object Required. A RICHEDITTEXT object that is accessed. return Optional. A Numeric variable that returns the results for the execution of the method. string Required. A Character String variable that contains the Unicode (UTF-16) data to be transferred to the RICHEDITTEXT object. flags Optional. A Numeric Variable or decimal number that controls operational behaviors for this method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is set to a TRUE state when the {return} value zero. Otherwise the ZERO flag is cleared. 2. The OVER flag is set to a TRUE state if the value returned is too big to be stored into the {return} variable. 3. The EOS flag is always cleared. 4. The bit mask definitions for the {flags} parameter are currently not defined. 5. The CONVERTUTF instruction can be used to perform UTF conversions to and from UTF-16 formatted data strings. 6. The {return} Numeric variable is set to a value of zero when data has been transferred to the RICHEDITTEXT object. If there is no data transferred to the EDITTEXT using this method, the {return} returns a value of one. 7. This method ignores a leading Unicode identifier of '0xFFFE' or '0xFEFF' in the first two bytes of the input data. - Modified the LINE object to support the VISIBLE property. - The runtimes have been modified to allow the PLB Designer to detect and implement the PLF internal property named 'LoadObject'. This property was originally implemented in the obsolete 'plbdsign' designer tool to allow selected GUI objects to be ignored during the FORMLOAD operations. The 9.6C runtimes have been changed to allow the PLB Designer to properly process the 'LoadObject' internal property. With this change the PLB Designer can support the 'LoadObject' PLF property as originally intended\implemented. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX), ALL GUI CLIENTS - Modified the FINDDIR instruction to support a new keyword named 'DELIMITER={svarslit}'. See the PLBCMP description for more details. - Modified the FINDDIR instruction to support a DATALIST GUI object as {dest} operand. Also, two additional keywords named 'DMAKEDEST' and 'MAXSIZE={maxsize}' have been added to the FINDDIR instruction. See the PLBCMP descriptions for more details. - Corrected the '*ClipText' control for a PRTPAGE to properly save\restore the background and foreground colors for PDF output. This problem would appear with a symptom where rectangles would show around text on a PDF page. This problem would not occur if the '*OVERLAYON' was being used. ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - In release 9.6, the runtimes were changed to allow small icons with a 16x16 size to be loaded and used in a PL/B program. Prior to release 9.6, the smallest icon size was 32x32 where any 16x16 icons were being stretched by the Windows OS to the 32x32 size. Here is a description of the small icon support implemented in 9.6: 1. If an icon is being specified as a file name in an CREATE {icon} instruction or for the ICON property, the first character of the file name can now be a less-than character (<) that MUST exist before any other characters in the icon file name string including any other special characters. The '<' character informs the runtime to load and use the icon with a size 16x16 bits. Example of ICON property: ICON="' to the GETMODE and SETMODE instructions. - Added a new instruction named 'MOVELIST' that performs a member to member move operation from a source record\varlist to a destination record\varlist. Also, this instruction allows a record\varlist pointer to be specified for the source or destination operands. MOVELIST RECORD\VARLIST to RECORD\VARLIST The MOVELIST RECORD\VARLIST to RECORD\VARLIST instruction allows transfer of the values for each member in the source operand to the corresponding member of the destination operand with a single instruction where the source and destination operands must be a RECORD or VARLIST type. It uses one of the following formats: [label] MOVELIST {source}{sep}{dest} Where: label Optional. A Program Execution Label. source Required. A RECORD or VARLIST variable that serves as the source operand. sep Required. A comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, or INTO. dest Required. A RECORD or VARLIST variable that serves as the destination operand. Flags Affected: EOS, LESS, OVER, ZERO Note the following: 1. The {source} and {dest} RECORDs and VARLISTs do not have be identical when using a MOVELIST. 2. Each RECORD or VARLIST variable in the {source} is moved to the corresponding variable in the {dest} according to the rules of a MOVE for that variable type. 3. The MOVELIST allows a RECORD or VARLIST pointer to be specified for the {source} or {dest} operands. Example: REC1 RECORD A FORM "1" B FORM "9" RECORDEND . RECX RECORD A INIT "5" B INIT "6" RECORDEND . CALL DISP . MOVELIST REC1, RECX . CALL DISP . KEYIN "HIT ENTER TO EXIT:",S$CMDLIN SHUTDOWN . DISP DISPLAY "REC1...:",REC1,*N: "RECX...:",RECX RETURN - Corrected a problem where the compiler was erroneously allowing a MOVEPTR instruction syntax when the source was an array of pointers and the destination was an Array pointer. The compiler give a compilation error for this MOVEPTR usage. For this scenario, the proper way to assign the Array pointer is to use the MOVEADR instruction. Example: pArr DIM 1(5) ;An array of pointers! ArrPtr DIM () ;An ARRAY pointer! . MOVEPTR pArr, ArrPtr ;Compiler error EXPECTED! . MOVEADR pArr, ArrPtr ;Assigns array pointer to the ;ARRAY pointer! . ------------------------------------------------------------------------------- PLBDBUG - Corrected a GPF error caused when executing a DV, MV, and another DV command in this order. This problem was caused by changes made in 9.5B for the character debugger. ------------------------------------------------------------------------------- SUNAAMDX, SUNINDEX, SUNSORT - Corrected a problem where the '-i {inifile}' command line option did not work when the {inifile} was enclosed by double quote characters. Example of utility command line problems corrected: sunindex -i".\path\myenv" test.txt:GM -1-5 sunindex -i ".\path\myenv" test.txt:GM -1-5 ------------------------------------------------------------------------------- UNIXINST - Corrected a problem where a debug message was being shown by mistake. ------------------------------------------------------------------------------- DESIGNER.PLC - Added support for the Load Object property. - Corrected an issue that would cause a save error if the Designer was running from the IDE, A new file was created, and it was never named. - Corrected an issue that would cause the designer code to not be completely processed if a listview column with a null name was encountered. - Added Bring to Front and Send to Back shortcut menu items for NetObjects to aid in positioning of docked items. - Corrected an issue in the menu editor that would inadvertently remove empty submenus. - Added the DragDrop event to the treeview definitions. - Corrected an issue regarding line object positioning during form opens. - Corrected setting of the internal indicator that the code window is active. - Added shortcut toolbars to the form pages when in integrated mode. - Corrected setting of the designer font when in individual layout mode. - Corrected an issue regarding old version forms and optimized event registrations. - Corrected an issue with setting and retrieving list data for a combobox. - Modified to generate a trace file when emailing reproduction packages. - Now generates an error text file when packaging error reports. - Corrected an issue regarding old version forms and optimized event registrations. - Corrected an issue resulting in an O105 error when auto backup was enabled. - Corrected an issue within the editor involving the renaming of event labels during a paste operation. - Corrected an issue resulting in an I05 error during recovery. - The backup and recovery timers are now destroyed upon a fatal error. - Ensure the correct events stream is attached during IDE requested saves and SaveAll. - Added logic for old version forms during open. - Added an alert to notify the user when the designer.ini file is not found. The user may continue or stop the program execution. - Added the name of the designer.ini file in use to the bottom of the Options window. - Corrected an issue in the size calculation for listview design panels. - Added logic to use the original form number when replaying an error. - Corrected an issue causing an 0105 when an imagelist edit was saved. - Removed code that could result in errors during the error reporting function. - Corrected issues when working with a form that had its units something other than pixels. - Corrected saving of the Min, Max, and Shift properties for HScrollBars, VScrollBars and Sliders. - Added visible property support to the Line object. ------------------------------------------------------------------------------- SUNIDE.PLC - Corrected an F04 in the user tools section. - Increased the number of files in a project from 500 to 1,000. ------------------------------------------------------------------------------- SCHEMAEDITOR.PLC - Re-attached the recent menu submenu. - Corrected form objects's state when a schema was closed. - Added an SQL forcing character to Aamdex key specifications when required. - Corrected the offset calculation when importing PLB code arrays. - Expanded the size of the keyinfo to 4096 bytes to allow larger key specs. - Added support for the native multiple column key indicator to the SQLIO. ------------------------------------------------------------------------------- WATCH.PLC - Added a minimum runtime version check. ------------------------------------------------------------------------------- DBEXPLORER.PLC - Now provides an option that allows the user to select a font used throughout the program. -------------------------------------------------------------------------------