Date: 09-01-2011 Subject: RELEASE 9.5A Runtime Files These release notes pertain to the following programs or files: PLBCLI 9.5A 01 Sep 2011 9,5,1,600 PLBCLIENT 9.5A 01 Sep 2011 9,5,1,500 PLBCLINET 9.5A 01 Sep 2011 9,5,1,500 PLBCLICON 9.5A 01 Sep 2011 9,5,1,500 PLBCON 9.5A 01 Sep 2011 9,5,1,500 PLBCONET 9.5A 01 Sep 2011 9,5,1,500 PLBNET 9.5A 01 Sep 2011 9,5,1,500 PLBRUN 9.5A 01 Sep 2011 9,5,1,600 PLBSERVE 9.5A 01 Sep 2011 9,5,1,500 PLBSERVET 9.5A 01 Sep 2011 9,5,1,500 (Threaded Server) PLBWIN 9.5A 01 Sep 2011 9,5,1,500 ODSBAC32.DLL 9.5A 01 Sep 2011 ODSBAC64.DLL 9.5A 01 Sep 2011 PLBNETSUP.DLL 9.5A 01 Sep 2011 9,5,1,500 Required for PLBNET PLBWSEC.DLL 9.5A 01 Sep 2011 9,5,1,500 Req'd PLBWIN/PLBNET SA_DLL32.DLL 9.5A 01 Sep 2011 9,5,1,500 PLBCMP.PLC 9.5A 01 Sep 2011 PLBDBUG.PLC 9.5A 01 Sep 2011 SUNIDE.PLC 9.5A 01 Sep 2011 DBGIFACE.PLC 9.5A 01 Sep 2011 EDITOR.PLC 9.5A 01 Sep 2011 DESIGNER.PLC 9.5A 01 Sep 2011 WATCH.PLC 9.5A 01 Sep 2011 SCHEMAEDITOR.PLC 9.5A 01 Sep 2011 DBEXPLORER.PLC 9.5A 01 Sep 2011 SUNCS21.OCX 9.5A 01 Sep 2011 ADMEQU.INC 9.5A 01 Sep 2011 PLBEQU.INC 9.5A 01 Sep 2011 PLBMETH.INC 9.5A 01 Sep 2011 msvcm80.dll 8.0.50727.6195 msvcp80.dll 8.0.50727.6195 msvcr80.dll 8.0.50727.6195 Microsoft.VC80.CRT.manifest 8.0.50727.6195 *============================================================================== Notes for DOCUMENTATION: - Add a note number 27 for the 'PREPARE {IFILE}' descriptions as follows: "27. When SQLIO support is being used, the {keyspecs} and {maxreclen} parameters in the PREPARE instruction are not used and do not alter the SQLIO schema definitions. However, the {keyspecs} are still validated by normal native index key spec processing in the runtime." - Add a note number 29 for the 'PREPARE {AFILE}' descriptions as follows: "29. When SQLIO support is being used, the {keyspecs} and {maxreclen} parameters in the PREPARE instruction are not used and do not alter the SQLIO schema definitions. However, the {keyspecs} are still validated by normal native index key spec processing in the runtime." - Add a note for the PREPARE AFILE and IFILE description in the 'SQLIO Language Changes' as follows: "When SQLIO support is being used, the {keyspecs} and {maxreclen} parameters in the PREPARE instruction for an AFILE or IFILE are not used and do not alter the SQLIO schema definitions. However, the {keyspecs} are still validated by normal native index key spec processing in the runtime." - In the PL/B Runtime Reference, add the following subcode values for the I14 error in the description for the error messages: Subcode 21 - Error no key specifications defined! 22 - Invalid key syntax! 23 - Invalid Key Spec Entry Values! 24 - Keys overlap! 25 - Too many key specs used! 26 - Invalid Primary option syntax! 27 - Invalid Primary Entry Values! 28 - Too many 'P' options! - In the PL/B Runtime Reference, add the following format error value: F11 - The MODE value for a HASH instruction is invalid. The acceptable values must be 0 to 4 or 100 to 104. - In the PL/B Language Reference, add the following information to the 'SQLIO Overview' section: "All SQL tables created, accessed, and manipulated by PL/B IO using SQLIO requires a unique SQL data column that is used to sequence the SQL table rows. This unique column is required to provide consistent/expected behaviors as PL/B IO operations are executed. When an SQLIO table is created, there is a required column named 'sun_recno' that is created. The 'sun_recno' column is defined to provide unique values that are used to support all PL/B IO instructions including direct, isam, and aam io. 'sun_recno' is automatically created and maintained by the runtime and is transparent to the end-user application." - In the PL/B Language Reference, change the description in the ADMGETINFO instruction for the $ADMITEMIDLETIME to read as follows: "The number of minutes the child task has been idle since the last socket message was received from the client. Under normal conditions, this value should be reported as a zero value since the client and server have persistent communications. However, if there is some kind of communications problem that causes the child task to not receive any socket message for a period of time longer than one minute, the value is reported as the number of minutes since the last message was received from the client." - Added new untrapped errors to support the user-defined VERB usage as follows: U61 - Invalid instruction usage for the GETPARM and LOADPARM instructions. This error occurs when a GETPARM or LOADPARM is performed when the verb execution call stack is empty. These instructions can only be executed from within a logic that has been called into. U62 - Invalid numeric/string literal usage. The U62/U63 errors were U63 implemented to report an error when a pointer has been changed to reference a DIM/FORM and the pointer is used in a PL/B instruction as a destination variable. The user-defined VERB execution is the means by which a pointer can be assigned to a literal that causes this error. The U62 error reports a bad literal reference in a normal PL/B instruction that attempts to change the literal. The U63 error reports a bad literal reference as GUI event data is being passed a event parameters. *============================================================================== The following files have been changed as noted: ------------------------------------------------------------------------------- PLBSERVET (Windows) - Corrected a problem where OS handles could be lost when a SCHEMA instruction was executed to import a schema. Repeated execution of the SCHEMA instruction at the Application Server could eventually cause an unexpected I85 or I86 error with a subcode of 203. This problem ONLY occurs when importing a schema from an SQLIO xml schema file. ------------------------------------------------------------------------------- PLBWIN, PLBNET - Modified the GUI runtimes so that they do not implicitly DESTROY any GUI objects that may be created by the PLBDBUG character designer. This change is required to eliminate GPF and indeterminate execution by the PLBDBUG debugger when it is executing in the background for the GUI debugger. This corrects unexpected GPF and O105/O125 errors by the PLBDBUG debugger when interfacing with the GUI debugger. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX) - Modified the runtimes to support the keywords named PLB_OPENUSESQL and PLB_PREPUUSESQL. These keywords can be placed into the [environment] section of the INI for a runtime to automatically redirect the OPEN and PREP instructions using a tag definition. The new keywords are documented as follows: PLB_OPENUSESQL={sqltag} The use of this keyword allows all filenames in OPEN statements to have the {sqltag} data appended the name. If the tag is not specified in the file name for a PLB OPEN instruction, the {sqltag} is enclosed as and appended to the file name. See the GETMODE/SETMODE *OPENUSESQL instruction for more information. PLB_PREPUSESQL={sqltag} The use of this keyword allows all filenames in PREP statements to have the {sqltag} data appended the name. If the tag is not specified in the file name for a PLB PREP instruction, the {sqltag} is enclosed as and appended to the file name. See the GETMODE/SETMODE *PREPUSESQL instruction for more information. - Modified the *OPENUSESQL and *PREPUSESQL keywords for the SETMODE instruction to clear the current setting when the {sqltag} DIM variable is NULL. If the {sqltag} DIM variable contains all blanks, the current setting for the specified keyword is set to ''. This change resolves a problem where a user was unable to clear the *OPENUSESQL and *PREPUSESQL keyword settings. - Added a new tag attribute keyword named 'NOTXTCHECK'. When this new keyword attribute is specified for an IFILE or AFILE PREPARE using SQLIO, the text file name specified is not validated against the schema data. In this case, the schema data file_name is always used without any validation. - Modified the schema key_info for an AFILE to allow/include explicit column names to be specified instead of field/column position values. Example of AFILE Schema key_info specification: key_info - "U,COLNAME,x20-25" Where: U - If there is no SQL column named 'U', then this key parameter specifies non-case sensitive searches. COLNAME - This is a column name. Otherwise, the key data is processed by the runtime as a key specification and gives an appropriate key specification error. If a schema column name is found, the column starting and ending positions are used for the AAM key. x20-25 - In this case, the 'x' is ignored for SQLIO usage. The '20-25' defines the field position to be used for the AAM key. - Modified to allow blank characters between the tag and the file name when using SQLIO. Example: OPEN FILE, "customer " - Modified the trace output to include the port number and the IP address being used for a MAILSEND instruction. - Modified the runtimes to automatically disconnect DBFILE connections for CHAIN, STOP, or SHUTDOWN operations. Any DBFILE variables that are in common are not disconnected for the chaining process. This change corrects a problem where DBFILE connections could remain connected to an SQL database engine unexpectedly. Likewise, this corrects a problem where a DBFILE connection to a Sunbelt Data Manager could remain active even after a program was terminated. - Added a new PLB instruction named HASH as follows: The HASH instruction evaluates an input source string and uses a cryptographic hash function that returns a fixed-sized bit string. The resulting hash string has a length depending on the type of cryptographic hash function that is used. The instruction uses the following format: Format: [label] HASH {source}{sep}{dest}[{sep} MODE={hashtype}] Where: label Optional. A Program Execution Label. source Required. A previously defined Character String Variable or Literal that is evaluated to generate a hash string. sep Required. A comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, or INTO. dest Required. A previously defined character variable the receives the cryptographic hash string result. This variable must have a size as determined by the type of hash function that is being executed. hashtype Optional. A Decimal Number or a Numeric Variable that specifies the type of cryptographic hash function to be executed. If the {hashtype} is not specified, the MD5 has function is used as the default. Flags Affected: ZERO, EOS Note the following: 1. Only the Logical String of the {source} variable is evaluated to generate the hash string. 2. The optional MODE value identifies that type of cryptographic hash function that is to be executed. If the MODE value is not specified, the default hash function is executed using the MD5 algorithm. If the MODE value is invalid, a F11 error occurs. The acceptable MODE values are defined as follows: Mode Value Hash Function Type 0 MD5 with context initialization 1 SHA-256 with context initialization 2 SHA-384 with context initialization 3 SHA-512 with context initialization 4 SHA1 with context initialization 100 MD5 without context initialization 101 SHA-256 without context initialization 102 SHA-384 without context initialization 103 SHA-512 without context initialization 104 SHA1 without context initialization 3. The {dest} DIM variable size is determined based on the type of cryptographic hash function that is executed. The EOS flag is set if the {dest} DIM variable size is too small to receive all of the hash string data. The required sizes are defined as follows: Hash Function Destination Size MD5 16 bytes SHA1 20 bytes SHA-256 32 bytes SHA-384 48 bytes SHA-512 64 bytes 4. The EQUAL flag is set to a TRUE state if the hash string is generated. Otherwise, the ZERO flag is set to a FALSE state. The ZERO flag is only set to a FALSE state if the {source} string is a NULL variable. 5. The HASH types without context initialization can be used to generate a hash string value that is accumulated using multiple parts of a hash data stream. This means that an application can create an accumulated hash string value by executing the HASH for multiple strings. As an example, a hash string value could be accumulated against multiple fields in a record without having all of the fields packed into a single DIM. Also, a hash string value could be accumulated for the data in a file by reading and hashing multiple records from a file. The following steps are required to generate an accumulated hash string value. a. Execute a HASH instruction using a hash type with context initialization for the first data string included in the hash. This requires a hash type value less than 100. All hash type values less than 100 perform an initialization of the hash context before the hashing is started. b. Execute HASH instructions without context initialization for multiple partial strings being hashed for a data stream. The hash types without context initialization have values from 100 to 199. Make sure that the same hashing algorithm is being used for steps (a.) and (b.). c. The last hash string value returned after the last partial data string is the final hash string value. d. A new accumulated hash string value can be started with step (a.). Example: Hash1 DIM 16 Hash2 DIM 16 . Str1 INIT "Hello " Str2 INIT "Sunbelt " Str3 INIT "World!" . PACK S$CMDLIN, Str1, Str2, Str3 HASH S$CMDLIN, Hash1, Mode=0 ;Context initialized . HASH Str1, Hash2, Mode=0 ;Context initialized HASH Str2, Hash2, Mode=100 ;Context not initialized HASH Str3, Hash2, Mode=100 ;Context not initialized . IF ( Hash1 == Hash2 ) DISPLAY "Hash values are same!" ELSE DISPLAY "Hash values are different!" ENDIF KEYIN "Hit enter to exit:",S$CMDLIN 6. The MD5 hash string is generated using the RSA Data Security, Inc. MD5 Message-Digest Algorithm. 7. The SHA1/SHA2 hash functions for the PLB HASH statement provides the SHA1, SHA-256, SHA-384, and SHA-512 secure hash algorithms. The logic that is used has been written and provided under the open source BSD licensing. This logic has a copyright and is provided with the following disclaimer: THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTOR(S) ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) OR CONTRIBUTOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - Modified the GETFILE instruction to support a keyword named 'FILELISTNAMES={svar}' for a FILELIST. This keyword can be used to retrieve the 'NAME={filename}' declaration keyword information for the AFILE/IFILE file variables that have been include in the FILELIST. The GETFILE descriptions are changed as follows: 1. The GETFILE description is changed as follows: 'The GETFILE instruction retrieves information from a file or FILELIST variable. The instruction uses the following format:' 2. The {file} description is changed as follows: file Required. A previously defined AFILE, DBFILE, FILE, IFILE, COMFILE, PFILE, or FILELIST variable. 3. A new note number 17 is added for the GETFILE instruction as follows: 17. The following keyword is associated with a FILELIST. FILELISTNAMES={svar} This keyword is used to retrieve the 'NAME={filename}' keyword that can be used for an AFILE/IFILE file declaration. The data returned in the {svar} is a semi-colon delimited string that has the filename information for the AFILE/IFILE declarations in the FILELIST. The FILELISTNAMES information can be retrieve when the AFILE/IFILE file variables are closed or opened. Example: FL FILELIST A IFILE NAME="c:\path\name.isi" B AFILE NAME="c:\path\name.aam" C IFILE X IFILE NAME="c:\path\namex.isi" FILELISTEND . GETFILE FL, FILELISTNAMES=S$CMDLIN . . Expected result of data in S$CMDLIN . . "c:\path\name.isi;c:\path\name.aam;;c:\path\namex.isi;" . 4. For each file variable declaration found in a FILELIST, there is a single ';' character inserted into the output data after a NAME keyword filename. A ';' delimiter character is always inserted into the output data. Even where the NAME keyword is not specified for a file variable in a FILELIST. Therefore, the returned data string always contains data regardless of whether the NAME keywords are specified or not. The user application can use the OCCURS instruction to count the number of ';' characters and this gives the number of file variables in the FILELIST variable. - Modified the runtimes to execute user-defined verbs that have been implemented. See the PLBCMP section for the detailed description of the user-defined verb support. - Modified the OPEN/PREP XFILE instructions to all support new MODE bit mask values for special output formatting controls that are defined as follows: XFILE_XMLOUTFMTUSETABS 0x00001000 Use a tab character to indent when outputting XML tags. XFILE_XMLOUTFMTSPCSUPRESS 0x00002000 Suppress leading and trailing spaces when outputting XML data. XFILE_XMLOUTFMTESCALWAYS 0x00004000 Always escape double-quote (") and single-quote (') characters when outputting XML element data. This format control allows double-quote and single-quote characters to be escaped for the element data in the same manner as they are escaped for attribute data. When this control is not used, the default behavior is to only escape these characters in the attribute data as defined in the W3C XML specification. XFILE_XMLOUTFMTCVTTOSPC 0x00008000 Convert any character less than 0x20 to 0x20. This output format control SHOULD ONLY be used when XML output data contains binary data that the user does not want to be escaped. - Modified the GETFILE and SETFILE XFILE instructions to support new XMLFORMAT bit mask values to control the output of XML data to a XML data file. The definition of the new bit mask values is described as follows: XMLOUTFMTSPCSUPRESS 0x08 Suppress leading and trailing spaces when outputting XML data. XMLOUTFMTESCALWAYS 0x10 Always escape double-quote (") and single-quote (') characters when outputting XML element data. This format control allows double-quote and single-quote characters to be escaped for the element data in the same manner as they are escaped for attribute data. When this control is not used, the default behavior is to only escape these characters in the attribute data as defined in the W3C XML specification. XMLOUTFMTCVTTOSPC 0x20 Convert any character less than 0x20 to 0x20. This output format control SHOULD ONLY be used when XML output data contains binary data that the user does not want to be escaped. - Increased the DBSEND buffer size from 65535 to be 1048576 for a DBFILE that has been opened using a DBOPEN instruction. - Modified the TYPE instruction to detect a string/numeric literal data type that can be assigned to a pointer via the user-defined verb implementation. The string and numeric literal data types are reported with the following values: Date Type Sunbelt SWDBC Note DIM Literal 288(0x120) 257(0x101) DIM type plus 0x100 FORM Literal 272(0x110) 258(0x102) FORM type plus 0x100 - Corrected a problem where an unexpected IO error would occur when a period character would found in the attribute specifications. This change corrects a problem where a default extension was not being used when a period existed in the attribute data. - Corrected a problem for the HTTP instruction where the first character of a result was being lost when the *FLAGS value had the drop header bit value of 2 specified. - Corrected a receive message buffer corruption problem for the HTTP instruction that might occur when the response buffer was too small and it had to be resized. - Corrected a problem for SQLIO where an apostrophe in a data field would cause unexpected SQL instruction errors. - Corrected a problem where the SETMODE *OPENUSESQL keyword did not work as expected/documented. - Corrected a problem where an I86 subcode 1 ( not enough memory ) was erroneously being reported for PREP instruction with an invalid key specification. The correct error is now being reported as an I49 error in this case. - Corrected a GPF error where the runtime buffers were not being resized properly for SQLIO SQL statements. - Corrected a GPF error that would occur when a AFILE schema key specification size covered more than 1 column in an SQLIO table. - Corrected an I14 subcode 22 error that would occur when a 'n$' key spec sequence was included in the {keyspecs} parameter for a PREPARE of an IFILE. - Corrected a READKS problem could return the same data as a previous keyed READ that was successful. - Corrected a problem using SQLIO where a FILEPI on a FILELIST would cause an unexpected I86 error. - Corrected a GPF error that would occur if a DBFETCH was executed against an SQLite database and a column with no data (i.e. empty) was encountered. - Modified the GPF crash handler for a child thread to close all SQL database connections. This change must be done to avoid a situation where an SQL database could become inaccessible when a child thread crashed. - Corrected a problem where the READKEY instruction would return an unexpected key after an I44 error occurred in a READKS instruction. The same kind of problem would occur for any error that could be generated by a READKS or READKP instruction when physically accessing the data record pointed to by an ISI key. - Corrected a problem where the FINDDIR instruction was reporting an invalid file size value when the file size was larger than 4GB. - Corrected a problem where the HTTP instruction data could be truncated prematurely. - Corrected a problem where a GPF error could occur using SQLIO operations when SQLIO Schema column type was set to a PLB INTEGER type. - Corrected a problem where an INTEGER PLB type with a 3 byte size was not supported for an SQLIO schema column. With this change, an appropriate I86 error occurs if an SQLIO schema type specifies an INTEGER PLB type with a size other than 1, 2, 3, 4, or 8 bytes. - Corrected a gpf error that could occur when duplicating column information for AFILE keys using SQLIO operations. This problem was occurring when executing a TRANSACTION START instruction. - Corrected a problem where an unexpected I86 subcode 5 error could occur for a READ IFILE using SQLIO after a 'TRANSACTION COMMIT' instruction was executed. - Corrected a problem that could cause a GPF or indeterminate program execution after a CHAIN was executed from within a FUNCTION. - Corrected a GPF error that could occur when the source data variable was smaller than the destination variable in a LOWERCASE or UPPERCASE instruction and the source was a dynamic DIM pointer variable. - Modified the SQL VIEW implementation to eliminate unexpected I85 subcode 122 errors that could occur when multiple user applications attempted to open a file with a VIEW at the same time. - Corrected a problem where loading an old PLBDESIGN '.PLF' form could generate unexpected event label names. This problem could occur when a single CALL instruction with parameters was coded using a compact syntax as follows for the event logic: "CALL mylabel,data,data1" - Corrected a problem where an unexpected error could occur when using the SSL mode in an HTTP instruction. - Corrected a HTTP instruction problem where an error was being reported when the server response header did not have the Content Length and the received data length was zero bytes on the first receive operation after the header. This problem was very intermittent depending on whether the Web Server returned all of the response data in a single message or in multiple messages. - Corrected a SQLIO problem where a READKS might not return the expected results when the Isam key was created from multiple SQL table columns. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE - Corrected a problem where a READ PRIOR (-4) for a FILE variable might not set the OVER flag when the beginning of the file was encountered and the record(s) at the being of the text file were deleted. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, ALL GUI CLIENTS - Modified the LISTVIEW SetItemTextAll method to support a new optional keyword named '*Param={param}'. This keyword can be used to set/change the user-defined value of an item specified by the {index} parameter of the SetItemTextAll method. [label] {object}.SetItemTextAll [GIVING {return}]: USING [*Index=]{index}: [*Text=]{text}[: [*Delimiter=]{delim}][: [*Options=]{options}][: [*Param=]{param}] Where: {param} Optional. A decimal number or Numeric Variable that specifies a new user-defined value. - Modified the LISTVIEW SetColumnWidth method to support a new optional keyword named '*Flags={flags}'. This keyword can be used to provide additional features/operations when setting the width of the columns in a LISTVIEW object. [label] {object}.SetColumnWidth [GIVING {return}] USING [*Index=]{index}: [*Width=]{width}: [*Flags=]{flags} Where: {flags} Optional. A decimal number or Numeric Variable that specifies a bit mask value that controls the execution of the SetColumnWidth method. Note: 6. The {flags} bit mask definitions to control the operations of the SetColumnWidth method are described as follows: $LV_SCW_EXTENDED 0x00000001 This bit definition causes the SetColumnWidth method to enable expanded operations. Execution of the method with ONLY this bit set causes the column width to be set to the specified {width} value. $LV_SCW_AUTOSIZE 0x00000003 The autosize bit mask requires both the $LV_SCW_EXTENDED bit value plus 0x00000002 to invoke the action. In this case, the column width is automatically changed to the size of the largest data string found in an item in the column. If there is no data found in the column, the default OS behavior is to resize the column to a small value. $LV_SCW_AUTOSIZEHEADER 0x00000005 The autosizeheader bit mask requires both the $LV_SCW_EXTENDED bit value plus 0x00000004 to invoke the action. In this case, the column width is automatically changed to the size of column header when there is no data found in the column. However, when there is data found in the column, the column width is set like the $LV_SCW_AUTOSIZE action. $LV_SCW_ALLCOLUMNS 0x00008000 The allcolumns bit mask value is optional and can be used with the $LV_SCW_EXTENDED, $LV_SCW_AUTOSIZE, or $LV_SCW_AUTOSIZEHEADER actions. This bit mask action is ignored unless the $LV_SCW_EXTENDED bit is being used. When this bit value is used, the extended action is applied to all of the columns in the LISTVIEW. The following bit definition values can be used. $LV_SCWALL_EXTENDED 0x00008001 $LV_SCWALL_AUTOSIZE 0x00008003 $LV_SCWALL_AUTOSIZEHEADER 0x00008005 - Modified the WINDOW object to support 3 new methods name 'MdiChildPrev', 'MdiChildNext', and 'GetLocaleInfo'. These methods are described as follows: ............................................................... . MdiChildPrev Method . The MdiChildPrev method activates the MDI child window that is immediately before the currently active child window. The method uses the following format: [label] {object}.MdiChildPrev [GIVING {return}] Where: {label} is an optional Program Execution Label. {object} is a required WINDOW object to be accessed. {return} is an optional Numeric Variable that indicates the success or failure of the method. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to a TRUE state to indicate that the method executed successfully. Otherwise, the ZERO flag is cleared to indicate that the method execution was unsuccessful. 2. The OVER flag is set to be TRUE if the destination numeric variable was too small to receive the result without being truncated. 3. If the WINDOW object is a WinTypeMdiClient, this method activates the child window that is immediately before the currently active child window. 4. If the WINDOW object is a WinTypeMdiChild, this method activates the child window that is immediately before this child window. ............................................................... . MdiChildNext Method . The MdiChildNext method activates the MDI child window that is immediately after the currently active child window. The method uses the following format: [label] {object}.MdiChildNext [GIVING {return}] Where: {label} is an optional Program Execution Label. {object} is a required WINDOW object to be accessed. {return} is an optional Numeric Variable that indicates the success or failure of the method. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to a TRUE state to indicate that the method executed successfully. Otherwise, the ZERO flag is cleared to indicate that the method execution was unsuccessful. 2. The OVER flag is set to be TRUE if the destination numeric variable was too small to receive the result without being truncated. 3. If the WINDOW object is a WinTypeMdiClient, this method activates the child window that is immediately after the currently active child window. 4. If the WINDOW object is a WinTypeMdiChild, this method activates the child window that is immediately after this child window. ............................................................... . GetLocaleInfo Method . The GetLocaleInfo method allows a user application to retrieve the current locale settings for a workstation. The locale settings for the user or the system locale settings can be retrieved. The method uses the following format: [label] {object}.GetLocaleInfo [GIVING {return}]: USING [*Type=]{type}[: [*Flags=]{flags}] Where: {label} is an optional Program Execution Label. {object} is a required WINDOW object to be accessed. {return} is a Character string Variable that receives the requested information for the locale type. {type} is required and is a decimal number or Numeric Variable that specifies the type of locale data to be retrieved. {flags} is optional and is a decimal number or Numeric Variable that specifies a bit mask value to control the behavior of the method. Flags Affected: EOS Note the following: 1. The EOS flag is set to be TRUE if the {return} variable is to small to receive all of the data without being truncated. Otherwise, the EOS flag is cleared. 2. The {flags} value is a bit mask whose bit settings define special behaviors for executing the GetLocaleInfo method. The bit mask definitions are described as follows: Bit Mask Value Comment 0x00000000 - Default to retrieve the locale data defined as 'LOCALE_USER_DEFAULT'. 0x00000001 - This bit specifies that the locale data is to be retrieved for the 'LOCALE_SYSTEM_DEFAULT' data set. 3. The allowed values to identify the type of locale data to be retrieved are defined as follows. These values are described in the Microsoft MSDN documentation for the 'GetLocaleInfo' api. Also, PL/B INTEGER values of these types have been included in the 'plbmeth.inc' include file with a simple comment about the type value. By default, all of the data retrieved is returned as a character string by the execution of the OS GetLocaleInfo api. Type Name Value LOCALE_ILANGUAGE 0x00000001 LOCALE_SLANGUAGE 0x00000002 LOCALE_SABBREVLANGNAME 0x00000003 LOCALE_SNATIVELANGNAME 0x00000004 LOCALE_ICOUNTRY 0x00000005 LOCALE_SCOUNTRY 0x00000006 LOCALE_SENGCOUNTRY 0x00001002 LOCALE_SABBREVCTRYNAME 0x00000007 LOCALE_SNATIVECTRYNAME 0x00000008 LOCALE_IGEOID 0x0000005B LOCALE_IDEFAULTLANGUAGE 0x00000009 LOCALE_IDEFAULTCOUNTRY 0x0000000A LOCALE_IDEFAULTCODEPAGE 0x0000000B LOCALE_IDEFAULTANSICODEPAGE 0x00001004 LOCALE_IDEFAULTMACCODEPAGE 0x00001011 LOCALE_SLIST 0x0000000C LOCALE_IMEASURE 0x0000000D LOCALE_SDECIMAL 0x0000000E LOCALE_STHOUSAND 0x0000000F LOCALE_SGROUPING 0x00000010 LOCALE_IDIGITS 0x00000011 LOCALE_ILZERO 0x00000012 LOCALE_INEGNUMBER 0x00001010 LOCALE_SNATIVEDIGITS 0x00000013 LOCALE_SCURRENCY 0x00000014 LOCALE_SINTLSYMBOL 0x00000015 LOCALE_SMONDECIMALSEP 0x00000016 LOCALE_SMONTHOUSANDSEP 0x00000017 LOCALE_SMONGROUPING 0x00000018 LOCALE_ICURRDIGITS 0x00000019 LOCALE_IINTLCURRDIGITS 0x0000001A LOCALE_ICURRENCY 0x0000001B LOCALE_INEGCURR 0x0000001C LOCALE_SDATE 0x0000001D LOCALE_STIME 0x0000001E LOCALE_SSHORTDATE 0x0000001F LOCALE_SLONGDATE 0x00000020 LOCALE_STIMEFORMAT 0x00001003 LOCALE_IDATE 0x00000021 LOCALE_ILDATE 0x00000022 LOCALE_ITIME 0x00000023 LOCALE_ITIMEMARKPOSN 0x00001005 LOCALE_ICENTURY 0x00000024 LOCALE_ITLZERO 0x00000025 LOCALE_IDAYLZERO 0x00000026 LOCALE_IMONLZERO 0x00000027 LOCALE_S1159 0x00000028 LOCALE_S2359 0x00000029 LOCALE_ICALENDARTYPE 0x00001009 LOCALE_IOPTIONALCALENDAR 0x0000100B LOCALE_IFIRSTDAYOFWEEK 0x0000100C LOCALE_IFIRSTWEEKOFYEAR 0x0000100D LOCALE_SDAYNAME1 0x0000002A LOCALE_SDAYNAME2 0x0000002B LOCALE_SDAYNAME3 0x0000002C LOCALE_SDAYNAME4 0x0000002D LOCALE_SDAYNAME5 0x0000002E LOCALE_SDAYNAME6 0x0000002F LOCALE_SDAYNAME7 0x00000030 LOCALE_SABBREVDAYNAME1 0x00000031 LOCALE_SABBREVDAYNAME2 0x00000032 LOCALE_SABBREVDAYNAME3 0x00000033 LOCALE_SABBREVDAYNAME4 0x00000034 LOCALE_SABBREVDAYNAME5 0x00000035 LOCALE_SABBREVDAYNAME6 0x00000036 LOCALE_SABBREVDAYNAME7 0x00000037 LOCALE_SMONTHNAME1 0x00000038 LOCALE_SMONTHNAME2 0x00000039 LOCALE_SMONTHNAME3 0x0000003A LOCALE_SMONTHNAME4 0x0000003B LOCALE_SMONTHNAME5 0x0000003C LOCALE_SMONTHNAME6 0x0000003D LOCALE_SMONTHNAME7 0x0000003E LOCALE_SMONTHNAME8 0x0000003F LOCALE_SMONTHNAME9 0x00000040 LOCALE_SMONTHNAME10 0x00000041 LOCALE_SMONTHNAME11 0x00000042 LOCALE_SMONTHNAME12 0x00000043 LOCALE_SMONTHNAME13 0x0000100E LOCALE_SABBREVMONTHNAME1 0x00000044 LOCALE_SABBREVMONTHNAME2 0x00000045 LOCALE_SABBREVMONTHNAME3 0x00000046 LOCALE_SABBREVMONTHNAME4 0x00000047 LOCALE_SABBREVMONTHNAME5 0x00000048 LOCALE_SABBREVMONTHNAME6 0x00000049 LOCALE_SABBREVMONTHNAME7 0x0000004A LOCALE_SABBREVMONTHNAME8 0x0000004B LOCALE_SABBREVMONTHNAME9 0x0000004C LOCALE_SABBREVMONTHNAME10 0x0000004D LOCALE_SABBREVMONTHNAME11 0x0000004E LOCALE_SABBREVMONTHNAME12 0x0000004F LOCALE_SABBREVMONTHNAME13 0x0000100F LOCALE_SPOSITIVESIGN 0x00000050 LOCALE_SNEGATIVESIGN 0x00000051 LOCALE_IPOSSIGNPOSN 0x00000052 LOCALE_INEGSIGNPOSN 0x00000053 LOCALE_IPOSSYMPRECEDES 0x00000054 LOCALE_IPOSSEPBYSPACE 0x00000055 LOCALE_INEGSYMPRECEDES 0x00000056 LOCALE_INEGSEPBYSPACE 0x00000057 ..... . The following required WINVER >= 0x0400 . Windows 2000 and higher . LOCALE_FONTSIGNATURE 0x00000058 LOCALE_SISO639LANGNAME 0x00000059 LOCALE_SISO3166CTRYNAME 0x0000005A ..... . The following required WINVER >= 0x0500 . Windows XP and higher . LOCALE_IDEFAULTEBCDICCODEPAGE 0x00001012 LOCALE_IPAPERSIZE 0x0000100A LOCALE_SENGCURRNAME 0x00001007 LOCALE_SNATIVECURRNAME 0x00001008 LOCALE_SYEARMONTH 0x00001006 LOCALE_SSORTNAME 0x00001013 LOCALE_IDIGITSUBSTITUTION 0x00001014 ..... . The following required WINVER >= 0x0600 . Windows Vista and higher . LOCALE_SNAME 0x0000005c LOCALE_SDURATION 0x0000005d LOCALE_SKEYBOARDSTOINSTALL 0x0000005e LOCALE_SSHORTESTDAYNAME1 0x00000060 LOCALE_SSHORTESTDAYNAME2 0x00000061 LOCALE_SSHORTESTDAYNAME3 0x00000062 LOCALE_SSHORTESTDAYNAME4 0x00000063 LOCALE_SSHORTESTDAYNAME5 0x00000064 LOCALE_SSHORTESTDAYNAME6 0x00000065 LOCALE_SSHORTESTDAYNAME7 0x00000066 LOCALE_SISO639LANGNAME2 0x00000067 LOCALE_SISO3166CTRYNAME2 0x00000068 LOCALE_SNAN 0x00000069 LOCALE_SPOSINFINITY 0x0000006a LOCALE_SNEGINFINITY 0x0000006b LOCALE_SSCRIPTS 0x0000006c LOCALE_SPARENT 0x0000006d LOCALE_SCONSOLEFALLBACKNAME 0x0000006e LOCALE_SLANGDISPLAYNAME 0x0000006f ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Modified the runtimes to eliminate the restriction on the number of columns that could be created/used for a LISTVIEW object. Prior to this change, the runtimes would track up to 255 columns for a LISTVIEW. Even though a program could put more columns in a LISTVIEW object than 255, the runtimes actually could only maintain 255 columns. One symptom was that an invalid number of columns was reported by the GetColumnCount method. With this change, the number of columns and the visual access to those columns for a LISTVIEW depends on the Windows OS limitations. - Corrected a problem where menu hot key operations would stop working after a top level MENU was created and destroyed 590 times during a single load instance of a Windows runtime or client. Also, note that a single load instance of a Windows runtime or client can not have more than 291 MENU objects created at the same time that insures unique OS identification tag values. - Corrected a problem where some objects like a BUTTON and EDITTEXT in a COLLECTION was not being painted properly when the COLLECTION was activated or was set visible using a SETPROP. - Corrected a problem where the advanced print controls named *MARGINL and *MARGINT were not taking affect if a spool file output was started on a print page after the print page that contained these controls. - Corrected a problem where a MENU window remained active and visible on top of a help window after a F1 help was invoked. - Corrected a problem where LISTVIEW scaling might not as expected with column resizing was disabled using the SetColResizeFlag method. ------------------------------------------------------------------------------- PLBNET, PLBCLINET - A Microsoft SECURITY update has been applied to the .NET modules that requires the following Microsoft redistribution modules: msvcm80.dll 8.0.50727.6195 msvcp80.dll 8.0.50727.6195 msvcr80.dll 8.0.50727.6195 Microsoft.VC80.CRT.manifest 8.0.50727.6195 If the end-user application gets the following Microsoft error attempting to load the PLBNET runtime, then the 8.0.50727.6195 version of the Microsoft redistribution modules must be used. "Error: The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log for more detail." - Corrected a problem where a NETCONTROL could have a white or gray border when it was created. A white/gray unexpected border has been removed. - Modified the .NET runtime/client to provide specialize logic to cause TAB key actions to change the focus to the next NETOBJECT as per the current tabbing sequence for the objects. This corrects a problem where TAB key actions were not occurring for NETOBJECT objects. - Modified the Sunbelt SETFOCUS instruction to force the focus to be set to a NETOBJECT. This change requires the Sunbelt runtime/client to track and identify which object is expected to receive the focus for all objects on a form including NETOBJECTs. This works around a problem where a user application was trying to set the focus to a .NET object before it was visible. NOTE: The Microsoft documentation for .NET objects states the following with regard to setting focus for the .NET objects: "A control can be selected and receive input focus if all the following are true: the 'Selectable' value of ControlStyles is set to true, it is contained in another control, and all its parent controls are both VISIBLE and enabled." - Corrected a problem where an Alt+key sequence was not working when the WINDOW object had the System Menu set to FALSE. This problem has been corrected. - Modified the .NET runtime/client to support the Sunbelt $VALIDATE event for all controls and containers including normal Windows controls and NETOBJECT controls. This change is being implemented because a user application was encountering a problem where a .NET 'validating' event was not being triggered when a Windows GUI object (not .NET object) was getting the focus. This change provides a work around to the problem when normal Windows GUI objects are being mixed with .NET objects. Please note the following: 1. When using a form that contains both .NET and standard PL/B objects, the Sunbelt $VALIDATE must be used by all objects. 2. A .NET Validating/Validated event only occurs when the object getting focus is also a .NET object within the same .NET container. 3. The Sunbelt $VALIDATE is setup to work across all controls and containers. An example program change would be: EVENTREG Form1TextBox1,$VALIDATE,edt3Validate ------------------------------------------------------------------------------- PLBCMP - Modified the TRANSACTION START instruction to require at one file variable. This is being done to eliminate unexpected I27 errors. - Added support for the HASH instruction. See above in the description for the runtime documentation section. - Modified the GETFILE instruction to support a keyword named 'FILELISTNAMES={svar}' for a FILELIST. This keyword can be used to retrieve the 'NAME={filename}' declaration keyword information for the AFILE/IFILE file variables that have been include in the FILELIST. - Added new instructions to allow user-defined verbs to be executed with user-defined parameters described as follows: ...................................................................... VERB {proto-list} This instruction is implemented as a compiler directive that identifies the parameters and data types that can be used for an user defined verb. This instruction has no impact on the generation of the a PLB program until a user creates a PLB sub-routine, LROUTINE, ROUTINE, PROCEDURE, or FUNCTION whose execution label is the same as the label specified for the VERB definition. Format: [label] VERB [{poslist}][,{nonposlist}][,{keylist}] Where: There are three basic parameter prototypes that can be included in the VERB parameter list definitions as follows: {poslist} The positional parameters must precede all other parameter definitions in the VERB parameter list. The positional parameters define prototypes of variables the must be specified when the user-defined verb is used in a program. The positional parameters are compiled as parameters on the generated CALL instruction when the user-defined verb is executed. The positional program types can be any of the allowed prototype definitions declared using the following format: #type Example: MyVerb VERB #varlit MyVerb1 VERB #varlit, #any {nonposlist} A single non-positional parameter can be defined in the VERB parameter list. This parameter defines the type(s) of parameters that can be included in the user-defined verb variable list. This parameter definition can be defined in the VERB parameter list anywhere after the {poslist} parameters. The non-positional program types can be any of the allowed prototype definitions declared using the following format: =type Example: MyVerb VERB =any MyVerb VERB #varlit, #nvarlit, =any {keylist} Multiple keyword parameters can be defined in the VERB parameter list. The keyword parameters can be declared in the VERB parameter list after the {poslist} parameters. The keyword parameters can be specified in the VERB parameter list with or without up to 5 operands that are assigned to the keyword using a equal sign (=). The optional keyword operands must follow an equal sign and are delimited by a colon (:) character when more than 1 operand is declared. The keyword name must be provided using the same characters as allows for a PLB label. The keyword parameter program types can be any of the allowed prototype definitions declared using the following formats: keyword keyword=type keyword=type:type keyword=type:type:type keyword=type:type:type:type keyword=type:type:type:type:type Example: MyVerb VERB ABC MyVerb1 VERB ABC=any MyVerb2 VERB ABC=any:varlit MyVerb5 VERB ABC=any:any:any:varlit:nvar MyVerbX VERB ABC=any,FILENAME=afile:cvarlit Example: MyVerb VERB #IFILE, NAME=cvarlit, EXCLUSIVE Note: 1. After VERB definition has been declared, the end-user application must provide a sub-routine, LROUTINE, ROUTINE, PROCEDURE, or FUNCTION that has the same execution label name as specified for the VERB definition. 2. Once the VERB definition has been declared, the user-defined verb can be invoked like any normal PLB statement. The positional parameters for the VERB parameter definitions must be specified and the appropriate data types must match the prototype data type(s) that have been defined. The non-positional and keyword parameters are optional and must be specified after the positional parameters. The non-positional and keyword parameters are retrieved from the VERB parameter list using the GETPARM and LOADPARM instructions after the user-defined routine has started executing. 3. The allowed VERB prototype types are defined as follows: ARRAY - any array variable AFILE - an afile variable ANY - any type of variable CARRAY - 1, 2, or 3 dimensional array CARRAY1 - a 1 dimensional character variable array CARRAY2 - a 2 dimensional character variable array CARRAY3 - a 3 dimensional character variable array CNVAR - any character or numeric variable CNVARLIT - any character or numeric variable COMFILE - a comfile variable CVAR - any character variable CVARLIT - a character variable or literal FILE - a file variable IFILE - an ifile variable LIST - a list or varlist LABEL - a program label (To be implemented 9.5B) NVAR - a numeric variable NVARLIT - a numeric variable, numeric literal, or decimal constant NARRAY - a numeric array variable NARRAY1 - a 1 dimensional numeric array variable NARRAY2 - a 2 dimensional numeric array variable NARRAY3 - a 3 dimensional numeric array variable PFILE - a pfile variable OBJECT - an object variable VAR - any single valued variable VARLIT - any single valued variable or literal Example of VERB and User-defined verb usage: .... . User-defined VERB definition . DoVerb VERB #varlit .... TEST BUTTON STAT STATUSBAR RES FORM 2 . CREATE TEST=8:9:5:20, "Verb" ACTIVATE TEST, ClkVerb, RES . LOOP WAITEVENT REPEAT .... ClkVerb DoVerb "Verb button has been used!" PAUSE "2" DoVerb "Try again!" PAUSE "2" DoVerb "" RETURN .... . User-Defined Routine . DoVerb FUNCTION Msg DIM 100 ENTRY . TS DIM 14 TEST STAT IF ZERO CREATE STAT=20:21:5:50, DOCK=1 ;Dock bottom SETPROP STAT, VISIBLE=1 ENDIF . TYPE Msg IF EOS CLEAR S$CMDLIN ELSE CLOCK TIMESTAMP, TS PACK S$CMDLIN, TS, "...: ", Msg ENDIF SETPROP STAT, TEXT=S$CMDLIN . FUNCTIONEND ....................................................................... GETPA The GETPARM instruction retrieves non-positional and keyword parameters from the execution parameter list for a user-defined verb. Starting with the first non-positional or keyword parameter specified in the execution parameter list, the parameters are returned one at time for each GETPARM instruction that is execution. The GETPARM returns the keyword name of the user-defined verb along with any optional operands for the parameter. If a non-positional parameter is encountered, the keyword that is returned is NULL. Also, the non-positional and keyword parameters can be specified as many times as needed when the user-defined verb is executed. Format: GETPARM {keyvar} GETPARM {keyvar}, {var1} Where: {keyvar} Required. This parameter can be a character string variable or a typeless VAR variable pointer. This variable receives the keyword name of the next parameter in the user-defined verb execution list. If the next parameter is a non-positional parameter, the {keyword} variable is a NULL variable. Otherwise, the {keyword} variable contains the keyword name. {var1} to {var5} Optional. These parameters must be a typeless VAR variable pointer that receives the address of any operand(s) that have been assigned to the next parameter in the user-defined verb execution list. For any unused typeless VAR variables, the VAR pointer address is cleared such that the TYPE instruction returns a zero value for the type value. Flags: OVER Note: 1. The OVER flag is set if there are not more parameters in the user-defined verb execution list. Otherwise, the OVER flag is cleared. 2. The RESETPARM instruction an be used to reset the execution parameter list such that the next GETPARM instruction that is executed retrieves the first parameter in the user-defined verb execution list. 3. When a user-defined verb is executed, the parameter execution list can contain the same keyword reference in list of parameters more than once. 4. The user-defined execution list instance exists only for the current call/return stack level that was established when the user-defined verb was executed using an implicit CALL instruction. If the user-defined routine calls to another routine, the previous call/return stack level preserves the user-defined execution list pointers. This allows user-defined verbs to be executed, nested, and returned to any call/return stack level while keeping the execution list parameter pointers valid for that stack level. 5. The GETPARM only retrieves the non-positional and keyword parameters from the user-defined execution list which are optionally included by the execution of the user-defined verb. ....................................................................... LOADPARM The LOADPARM instruction retrieves non-positional and keyword parameters from the execution parameter list for a user-defined verb using an index into the execution parameter list. The LOADPARM instruction performs a GETPARM instruction on the parameter in the user-defined verb execution list using an index into the parameter list. Format: LOADPARM {index},{keyvar} LOADPARM {index},{keyvar},{var1} LOADPARM {index},{keyvar},{var1},{var2} LOADPARM {index},{keyvar},{var1},{var2},{var3} LOADPARM {index},{keyvar},{var1},{var2},{var3},{var4} LOADPARM {index},{keyvar},{var1},{var2},{var3},{var4},{var5} Where: {index} Required. This parameter is a numeric variable or numeric expression whose value is used as an index into a user-defined verb execution list. {keyvar} Required. This parameter can be a character string variable or a typeless VAR variable pointer. This variable receives the keyword name of the next parameter in the user-defined verb execution list. If the next parameter is a non-positional parameter, the {keyword} variable is a NULL variable. Otherwise, the {keyword} variable contains the keyword name. {var1} to {var5} Optional. These parameters must be a typeless VAR variable pointer that receives the address of any operand(s) that have been assigned to the next parameter in the user-defined verb execution list. For any unused typeless VAR variables, the VAR pointer address is cleared such that the TYPE instruction returns a zero value for the type value. Flags: OVER Note: 1. If the {index} value is less than 1 or greater than the number of parameters in the user-defined execution list, the OVER flat is set to be TRUE. Otherwise, the OVER flag is cleared. 2. When a user-defined verb is executed, the parameter execution list can contain the same keyword reference in list of parameters more than once. 3. The user-defined execution list instance exists only for the current call/return stack level that was established when the user-defined verb was executed using an implicit CALL instruction. If the user-defined routine calls to another routine, the previous call/return stack level preserves the user-defined execution list pointers. This allows user-defined verbs to be executed, nested, and returned to any call/return stack level while keeping the execution list parameter pointers valid for that stack level. 4. The LOADPARM only retrieves the non-positional and keyword parameters from the user-defined execution list which are optionally included by the execution of the user-defined verb. ....................................................................... RESETPARM The RESETPARM instruction resets the user-defined verb execution list position such that the next GETPARM retrieves the first parameter in the list. Format: RESETPARM Flags: None Note: 1. The RESETPARM only resets the optional parameters that are included by the execution for the user-defined verb. - Corrected a problem where the OUTPUT parameter for a SORT, INDEX, or AAMDEX instruction did not give a compilation error when a variable type other than a DATALIST was specified. - Corrected a problem where a DBFILE was being aligned on a 2 byte boundary. This would cause a alignment error to occur for a PLBWCENE runtime when executing a DBxxxx statement. - Corrected a problem where the key length for a PREPARE of an IFILE was being limited to 100 instead of 150 as allowed by the runtimes. ------------------------------------------------------------------------------- PLBDBUG - Modified the debugger to output error information when a SDB file can not be opened. - Modified the debugger to prevent a string/numeric literal from being changed via debugger commands. - Modified the debugger to correct a command size problem where a GUI watch variable name size a XFILE was too large to be used in the debugger. This problem is now corrected and can handle a GUI watch name length up to 500 characters. - Corrected a problem where a 'DV XFILE' command could prematurely terminate the debugger. - Corrected a problem that could cause a GPF error or O105/O125 error when the PLBDBUG debugger was being executed by the GUI debugger to report Watch Variable data. If this 9.5A PLBDBUG debugger is being executed by a runtime version prior to 9.5A to support to the GUI debugger, the Watch Variable processing reverts to an older algorithm that does not use any GUI objects. This avoids any unexpected issues when using older runtimes with the newer PLBDBUG debugger and may perform slower. ------------------------------------------------------------------------------- ADMEQU.INC - Updated for the 9.5A release. ------------------------------------------------------------------------------- PLBEQU.INC - Updated for the 9.5A release. ------------------------------------------------------------------------------- PLBMETH.INC - Updated for the 9.5A release. ------------------------------------------------------------------------------- ADMIN - New ADMIN data items have been added for the Data Manager. These keywords are used in the AdmGetInfo instruction. The new keywords are described as follows: AdmitemSrvWalMain (136) Returns the current write position of the WAL file. AdmItemSrvWalMan (137) Returns the current processed position of the WAL file by the managed transaction handler on a Secondary/Backup server. AdmitemSrvWalUnMan (138) Returns the current processed position of the WAL file by the unmanaged transaction handler on a Secondary/Backup server. ------------------------------------------------------------------------------- SUNIDE.PLC - Corrected a problem loading a cross reference that contained variable that were defined in a section that was in a %XREFOFF section of source. - Corrected an O105 error that could occur when the PLB_FNC keyword was set to "mixed" and running the new designer. - Corrected a potential F02 error that can occur when showing the tab control tool tip. - Added option to Find in Files to only search project files. - Added lines of context options for find in files results. - Added "Whole Word Only" option to find in files dialog. - Corrected a problem that was causing an O105 error in the designer the second time it is started if the designer exits with an error. - Reduced open files tabcontrol 'jitter' that can occur when switching between files. - Modified debugger startup when running it as a separate process to limit the impact on the command line size limits. - Made changes so when files are opened in the find in files results, the cross reference for the program is loaded if the file is part of the currently opened project. - Made changes to prevent the IDE from opening the same file twice when sources are in a sub directory from a projects working directory. - Modified the post build process to not unload browse labels information for programs that were not compiled. ------------------------------------------------------------------------------- DBGIFACE.PLC - Addressed a Designer/debugger interaction where if both are running in the IDE, menu hot keys may stop working. - Modified startup to use alternate locations for scratch files needed for watch performance enhancement added in 9.5 - Corrected a bug that prevented a user from modifying the contents of a variable in the watch variables dialog. - Corrected enhanced Watch update to be XP friendly - Added additional error checking in setting up the enhanced watch dialog. ------------------------------------------------------------------------------- EDITOR.PLC - Made changes to prevent O105 error after closing a file. - Made changes to prevent O105 errors when looking up variable data when running under designer. - Modified initialization to prevent O105 errors on OPEN caused by residual data from prior instance. ------------------------------------------------------------------------------- SUNCS21.OCX - Corrected a bug in auto indentation where if a dollar sign ($) appeared in an execution label and a verb was on the same line, the dollar signs would be copied to a new line when the user pressed enter. - Corrected a syntax help tooltip size problem that cause syntax quick help for methods be unusable. - Modified the control to honor the Windows "Hide pointer while typing" control panel mouse setting. - Corrected a problem with find where the control could hang if a search was done against an empty file. ------------------------------------------------------------------------------- DESIGNER.PLC - Corrected the setting of the integrated mode right tab control tooltip when no form is active. - Corrected handling of a mouse click on the right tab control when no form is active. - Corrected cut, copy, paste, delete, and select all functions when a property edit is active and integrated mode is used. - Modified the edit menu function enabling to support property edits. - Backed out the 9.5 modification to store the designer.ini in the $AppData folder. - Now shows the file name if available rather than the form object name on the code tab in the integrated mode. - Corrected an issue where the single event code window was not displayed when switching from full code view. - When building the recent file list, files that no longer exists are omitted. - Added a positioning routine for the top and left properties of the form when using the integrated layout. - Double clicking an object in the non-drawn window will open the code window for the form and position to the object's first defined event. - Corrected an O105 that could occur if the PLB_FNC keyword is set and running under the IDE. - Corrected issues with the Edit Find, Replace, and Goto functions when in single event edit mode. - Corrected issues with editing event labels in the properties window. - Corrected the updating of the object combobox of the code window when creating array objects. - Corrected the Properties and Toolbox checkmarks in the shortcut menu when using the individual windows layout. - Corrected the collapsing of the unpinned toolbox/properties/outline tab control when using the integrated layout. - Added logic to correctly detect tab controls with designer generated change code. - Corrected the determination of applicable NetObject properties for the extension file. - Corrected the right mouse indicator when clicking on netobjects. - Corrected the pasting location for netobjects. - Items in the non-drawn listview of the integrated display are now sorted for display - Non-drawn object names are now updated in the listview when using the integrated display mode. - Corrected double-clicking of events in the outline to open and position the code window. - Added a shortcut menu to the non-drawn objects listview. - Corrected the call stack before returning from a fatal error when running as a loadmod. - Corrected enabling of the paste toolbar button when editing in the code window. - Corrected an issue with resizing a netobject using the keyboard sequence. - Added code to ensure the mouse up event would be processed when selecting or moving net controls and objects. - Corrected use of the default event name for netcontrols and netobjects. - To allow a user defined .Net object inherited from a .Net container such as a panel to be identified as a container once added to the .Net toolbox, add the following designer attribute just before the class definition in your object's source code and include a reference to "system.design" before building your object: "_" - Modified the outline to show events for the secondary array objects rather than just the primary object. - Corrected issues with updating the event entries within the outline. - Added a Reset Colors button to the window options page. - Corrected issues regarding the application of the object prefix property when changed in the form's property window. - Corrected setting of the default text in a datalist when the object was renamed. - Greatly improved the performance of the object rename function. - Added and updated icons for various windows. - Added a refresh button to the outline window. - Added resources (icons, pictures, sounds) to the Outline window. Double- clicking a resource will open the resource editor. - Added the ability to restart the designer when the layout is changed. - Corrected the setting of the listview column resizing flag by the designer. ------------------------------------------------------------------------------- DBEXPLORER.PLC - Modified to accept characters for the char sql type during data entry. - Modified the column affinity checking per the SQLite rules. - Corrected the length and scale settings for data entry. - Ensure any newly added row to the various listviews is visible - Correct an error that occurred when adding the first view to the treeview. - Added tabcontrol icons. - Added icons and a configurable background color to the message window. ------------------------------------------------------------------------------- SCHEMAEDITOR.PLC - Completely reworked the entire utility. - Modified the icons used throughout the utility. - Corrected an issue in the import PLB logic for FORM variables. - Expanded the keyinfo buffer to accommodate larger key specs. - Added a browse button for the host parameter on the data source table - Added logic to catch duplicate names. - Corrected an issue with the rename function that would cause a file to lose its ifile and afile associations. - All dialogs show in the parent center position. - Added the Ext and Flags options for SQLIO data sources. - Added logic to do case insensitive compares when checking for duplication names. - Added tooltip to key info for aam files to identify PREP keyspecs or column names as valid. ------------------------------------------------------------------------------- WATCH.PLC - Added logic to ensure the saved screen position is valid before restoring. - Added a vertical and horizontal splitter to allow panel resizing. - Updated the toolbar icons. - Added icons to the treeview, tabcontrol, and message window. - Added a configurable (Tools/Option) message window background color. - Added a Reset Colors button to the options dialog - Added help selection for the Application Server and the Data Manager. The location of the help file is configured in the options dialog. - Removed the refreshing progress bar and replaced it with a status panel. - Modified logic to not update the tabcontrol labels during the refresh function unless changed. - The refresh timer is now stopped during the refresh operation. - Corrected an issue in the storing of aliases in the configuration file. - Added icons to various dialogs. - Added a help file for the utility. - Enhanced the alias addition routines. -------------------------------------------------------------------------------