Date: 09-10-2007 Subject: PATCH RELEASE 9.2A Runtime Files These release notes pertain to the following programs or files: ADMEQU.INC 9.2A 10 Sep 2007 DBGIFACE.PLC 9.2A 10 Sep 2007 EDITOR.PLC 9.2A 10 Sep 2007 ODSBAC32.DLL 9.2A 10 Sep 2007 PLBCON 9.2A 10 Sep 2007 9,2,1,0 PLBCLICON 9.2A 10 Sep 2007 9,2,1,0 PLBCLIENT 9.2A 10 Sep 2007 9,2,1,0 PLBCLINET 9.2A 10 Sep 2007 9,2,1,0 PLBCMP 9.2A 10 Sep 2007 PLBDSIGN 9.2A 10 Sep 2007 9,2,1,0 PLBNET 9.2A 10 Sep 2007 9,2,1,0 PLBSERVE 9.2A 10 Sep 2007 9,2,1,0 PLBWIN 9.2A 10 Sep 2007 9,2,1,0 SA_DLL32.DLL 9.2A 10 Sep 2007 9,2,1,0 SUNCX21.OCX 9.2A 10 Sep 2007 SUNIDE.PLC 9.2A 10 Sep 2007 *============================================================================== Notes for DOCUMENTATION: - Added two new subcodes for the O103 object error. The subcodes are described as follows: 100 - PLB FORM value is too large for .NET data variable. 101 - PLB FORM negative value is invalid for the .NET data type. *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - Changed the startup messages for the PLBCS_KEYFILE keyword to read as follows: "Client Logon Keys are required!" and "Client Logon Keys are NOT required!" - Modified the application server to honor the hard shutdown command to immediately exit while waiting to receive a message from the Data Manager. Prior to this change, the application server would wait indefinitely until a message was received from the Data Manager before terminating the child process. - Modified the application server socket error log data to report the process ID for a socket error of a child process. ------------------------------------------------------------------------------- PLBSERVE, PLBCLIENT - Modified Application Server client and server components to allow the FINDFILE instruction to access and provide statistical data for files at the client workstation. When the {filename} contains a leading '!' character, the findfile operation executes at the client workstation. A leading '!' character in the {filename} is ignored for all runtimes other than the Application Server. Note: 1. If an old PLBCLIENT client is used to execute a program with a FINDFILE with a leading '!' character in the {filename} and the PLBSERVE is a 9.2A version, then the FINDFILE instruction causes the EOS, OVER, and ZERO flags to be set to a FALSE state just like a file is not found. - Modifications have been made to properly propagate INTEGER 8 data between the client and server processes. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX) - Added a new keyword named DMKEEPALIVE={dnumnvar} for the GETMODE and SETMODE instructions. If this keyword is set to a non-zero value, then any connection to a SUNDM Data Manager remains active indefinitely even after a program log off action occurs. In this case, any subsequent log on actions are executed faster since the TCP/IP connection to the server already exists. If the SETMODE DMKEEPALIVE is set to a zero value, then the TCP/IP socket connection is closed when all managed files are closed. - Modified the PATH instruction to allow path operations at the SUNDM Data Manager when the 'DM_ALLOWPATH=ON' is set in the SUNDM CFG file. If the 'DM_ALLOWPATH=ON' keyword is not set in the SUNDM CFG file, then the default action is that the PATH instruction is not allowed and an I82 error with a subcode of 33 occurs. When the SUNDM Data Manager has the 'DM_ALLOWPATH=ON' keyword specified in the SUNDM CFG file, then the data format for the PATH instruction allows the TCP/IP address of the SUNDM to be specified. This causes the execution of the path operation to be redirected to the SUNDM Data Manager. (1) [label] PATH {mode}{sep}{path} (2) [label] PATH {mode}{sep}{path[|{tcpip id:port}]} Where: path Required. A previously defined Character String Variable or a string Literal that specifies or receives the path information based upon the mode. tcpip id:port Optional. String literal data that contains the IP address and port number of the server executing the Data Manager where the path instruction is to be executed. Notes: 1. When the {tcpip id:port} address is provided as part of the {path} variable or literal, then the PATH instruction is executed at the server where the Data Manager is executing. In this case, the path instruction logs on to the Data Manager, performs the operation, and logs off from the Data Manager for the following keyword actions. PATH CREATE PATH DELETE PATH EXIST PATH CURRENT 2. If the {tcpip id:port} address is used with the PATH CHANGE keyword, then the path instruction can only take affect at the Data Manager when the PLB_CURDIR keyword has been specified in the SUNDM CFG file. In this case, the logical current working directory for the child thread is changed at the Data Manager. If the PLB_CURDIR keyword is not used by the Data Manager, then the PATH CHANGE instruction is not executed and the OVER flag is set. Warning: If the PATH CHANGE takes affect, then client program logs on to the SUNDM Data Manager and the connection to the SUNDM Data Manager remains connected indefinitely. This connection remains active until the program is terminated or until the 'SETMODE DMKEEPACTIVE=0' instruction is executed. Please notice, that a CHAIN instruction DOES NOT cause this connection to be disconnected. See the GETMODE/SETMODE DMKEEPACTIVE description for more information. Examples: SVAR DIM 150 PATH CREATE,"c:\temp\subdir|192.168.1.10:3934" PATH EXIST,"c:\temp\subdir|192.168.1.10:3934" PATH DELETE,"c:\temp\subdir|192.168.1.10:3934" MOVE "|192.168.1.10:3934",SVAR PATH CURRENT,SVAR PATH CHANGE,"c:\temp" ;PLB_CURDIR required at SUNDM! - Modified the SEARCHPATH instruction to allow searchpath operations at the SUNDM Data Manager when the 'DM_ALLOWPATH=ON' is set in the SUNDM CFG file. If the 'DM_ALLOWPATH=ON' keyword is not set in the SUNDM CFG file, then the default action is that the SEARCHPATH instruction is not allowed and an I82 error with a subcode of 33 occurs. When the SUNDM Data Manager has the 'DM_ALLOWPATH=ON' keyword specified in the SUNDM CFG file, then the data format for the SEARCHPATH instruction allows the TCP/IP address of the SUNDM to be specified. This causes the execution of the searchpath operation to be redirected to the SUNDM Data Manager. (1) [label] SEARCHPATH {mode},{path} (2) [label] SEARCHPATH {mode},{path[|{tcpip id:port}]} Where: path Required. A previously defined Character String Variable or a string Literal that specifies or receives the searchpath information based upon the mode. tcpip id:port Optional. String literal data that contains the IP address and port number of the server executing the Data Manager where the searchpath instruction is to be executed. Notes: 1. When the {tcpip id:port} address is provided as part of the {path} variable or literal, then the SEARCHPATH instruction is executed at the server where the Data Manager is executing. In this case, the SEARCHPATH instruction logs on to the Data Manager, performs the operation, and logs off from the Data Manager for the following keyword actions. SEARCHPATH ADD SEARCHPATH GET SEARCHPATH REMOVE SEARCHPATH SET Warning: When the SEARCHPATH ADD, REMOVE, or SET instructions are executed, then a client program logs on to the SUNDM Data Manager and the connection to the SUNDM Data Manager remains connected indefinitely. This connection remains active until the program is terminated or until the 'SETMODE DMKEEPACTIVE=0' instruction is executed. Please notice that a CHAIN instruction DOES NOT cause this connection to be disconnected. See the GETMODE/SETMODE DMKEEPACTIVE description for more information. Examples: SVAR DIM 150 SEARCHPATH ADD,"c:\temp\subdir|192.168.1.10:3934" MOVE "|192.168.1.10:3934",SVAR PATH CURRENT,SVAR - Modified the FLUSH XFILE operation to not write an empty XML tag for a record set that is empty. This change avoids I83 subcode 14 errors (tag type conflict) when an empty XML tag is assigned to a XFILE record set in a READ XFILE operation. - Corrected a problem where a filter key for a XFILE read was causing an I83 subcode 11 error when an escape character with a single or double quote character was specified in a LIKE string. - Corrected a GPF problem that would occur when an un-initialized auto-load DIM pointer array is encountered in a LROUTINE/ROUTINE instruction. Example of Error: X DIM 30(5),("1"),("2"),("3"),("4"),("5") . CALL XXX USING X . KEYIN "HIT ENTER TO EXIT:",S$CMDLIN STOP ...... A DIM ^30(5) . XXX LROUTINE A DISPLAY "A:",*LL,A,"<<<" RETURN ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Modified the ALERT instruction to set the messagebox Window to be the current foreground active window. - Added a new keyword named '*EDITFOCUSBGCOLOR={dnumnvar}' for the GETMODE and SETMODE instructions. The EDITFOCUSBGCOLOR keyword sets a background focus color that is used to set the default focus background color when an EDITTEXT or EDITNUMBER object is created. If an EDITTEXT or EDITNUMBER object is created with the EDITFOCUSBGCOLOR enabled, then the expected behavior is that the EDITTEXT or EDITNUMBER background color is set the EDITFOCUSBGCOLOR value when the object gains focus. When the objects lose focus, then the background is set to the normal background color. The {dnumnvar} value may specify the color as a BGR value or a Windows system color index. The {dnumnvar} is a four-byte integer. When the high order byte contains a value of 0x00, the next three bytes (twenty-four bits) are interpreted as a BGR value. When the high order byte has a value of 0x80, the lower order byte is an index value into the Windows system colors. When the {dnumnvar} value evaluates to be '0xFFFFFFFF', then the EDITFOCUSBGCOLOR keyword is disabled and any EDITTEXT or EDITNUMBER objects create while EDITFOCUSBGCOLOR is disabled do not used a focus background color. Example: COLOROFF INTEGER 4,"0xFFFFFFFF" ;Disable EDITFOCUSBGCOLOR BLUEBGR INTEGER 4,"0x00FF0000" GREENBGR INTEGER 4,"0x0000FF00" REDBGR INTEGER 4,"0x000000FF" LTBLUEBGR INTEGER 4,"0x00FDFED8" ;Light Blue BGR ( BLUE,GREEN,RED ) . E EDITTEXT E1 EDITTEXT EN EDITNUMBER . SETMODE *EDITFOCUSBGCOLOR=LTBLUEBGR . CREATE E=5:6:5:25, TABID=10, BORDER=1 CREATE E1=8:9:5:25, TABID=20, BORDER=1 CREATE EN=11:12:5:25, TABID=30, BORDER=1 . SETITEM E,0,"EditText" SETITEM E1,0,"EditText" SETITEM EN,0,"0" . ACTIVATE E ACTIVATE E1 ACTIVATE EN . SETFOCUS E . LOOP WAITEVENT REPEAT - Enhanced the DRAGITEM operation for the LISTVIEW object to allow end user actions when the MULTISELECT property is ON. This change allows the control key to be used when selecting multiple rows while the DRAGITEM mode is on for the LISTVIEW object with the MULTISELECT property set ON. - VARIANT objects have been updated to process the variant types for $VT_I8 and $VT_UI8. Prior to this change a VARTYPE for an I8 type would result in an O133 error. - Modified the TOPMOST property behavior for a WINDOW object to allow the PLB window to not remain on top when the PLB application becomes inactive. This corrects a problem where the PLB WINDOW with the TOPMOST property on was remaining on top even though another application window was active with the current OS focus. - Corrected a problem where the ResetImageListHot method caused a GPF error when the TOOLBAR currently used an imagelist without having a hot imagelist previously set. - Corrected a problem where the background color of a LISTVIEW object did not refresh the object when the BGCOLOR property was changed. - Corrected a problem where a GETPROP of a CLASS property for a CONTROL object did not work. - Corrected a problem that could cause indeterminate program execution for any advanced print PLB instruction that would open a printer. For this problem, a program could cause a GPF or simply execute abnormally like bypassing the presentation of the Open Dialog. This problem was reported for a PRTPLAY instruction as follows: PRTPLAY "","@",CANCELKEY=NVAR This instruction expects to present an Open Dialog to the End-user. - Corrected a problem where an invalid TOOLBAR item click event could occur after a TOOLBAR button double click. - Corrected a problem for a TREEVIEW that contained multiple root level nodes where the XML file created by the SaveXMLFile method could not be loaded fully by the LoadXMLFile method. The correction for this problem was to add a root XML tag named '' when the TREEVIEW object has multiple root level nodes. The '' XML tag is stripped by the LoadXMLFile method. ------------------------------------------------------------------------------- PLBNET - Modified to allow up to 15 parameters for a WINAPI instruction. Prior to this change, the number of parameters for WINAPI under PLBNET was limited to 10. Note, that PLBWIN does not have this restriction. - Integer 8 support has been implemented for NETOBJECT conversions. The following PLB to .NET data type table has been updated to reflect the Integer 8 changes. Also, when a FORM variable does not have a decimal point, the conversions to a signed .NET data type has been modified to use the FORM size and the FORM value to determine the .NET data type. The following shows how a simple PLB data variable converts to/from a .NET data variable type. PLB Data Type NET Data Type DIM System.String INTEGER (1 byte) System.Byte INTEGER (2 byte) System.UInt16 INTEGER (3 byte) System.Int32 INTEGER (4 byte) System.Int32 INTEGER (8 byte) System.Int64 VARIANT (VT_BSTR) System.String VARIANT (VT_BOOL) System.Boolean VARIANT (VT_I1) System.SByte VARIANT (VT_UI1) System.Byte VARIANT (VT_I2) System.Int16 VARIANT (VT_UI2) System.UInt16 VARIANT (VT_I4) System.Int32 VARIANT (VT_UI4) System.UInt32 VARIANT (VT_I8) System.Int64 VARIANT (VT_UI8) System.UInt64 VARIANT (VT_R4) System.Single VARIANT (VT_R8) System.Double FORM(with decimal pt) System.Double FORM(no decimal pt and positive values) SIZE > 19 System.Double SIZE = 19 & Value > 9223372036854775807 System.Double SIZE = 19 & Value <= 9223372036854775807 System.Int64 SIZE > 10 System.Int64 SIZE = 10 & value > 2147483647 System.Int64 SIZE <= 10 & value <= 2147483647 System.Int32 FORM(no decimal pt and negative values) SIZE > 20 System.Double SIZE = 20 & Value < -9223372036854775808 System.Double SIZE = 20 & Value >= -9223372036854775808 System.Int64 SIZE > 11 System.Int64 SIZE = 11 & value < -2147483648 System.Int64 SIZE <= 11 & value >= -2147483648 System.Int32 - It is possible to create any of the following basic .NET data types as a NETOBJECT with an initial assigned value. "System.String" - Text as a series of Unicode characters "System.Boolean" - Boolean value "System.SByte" - 8-bit signed integer "System.Byte" - 8-bit unsigned integer "System.Int16" - 16-bit signed integer "System.UInt16" - 16-bit unsigned integer "System.Int32" - 32-bit signed integer "System.UInt32" - 32-bit unsigned integer "System.Int64" - 64-bit signed integer "System.UInt64" - 64-bit unsigned integer "System.Single" - Single-precision floating-point number "System.Double" - Double-precision floating-point number Example: NETSTR NETOBJECT CLASS="System.String", ASSEMBLY="mscorlib" NETBYTE NETOBJECT CLASS="System.Byte", ASSEMBLY="mscorlib" NETINT16 NETOBJECT CLASS="System.Int16", ASSEMBLY="mscorlib" . DIMX INIT "TEST" F2 FORM "21" I2 INTEGER 2,"0x7F" . CREATE NETSTR, *$=DIMX CREATE NETSTR, *$="abc" . CREATE NETBYTE, *$=F2 . CREATE NETINT16, *$=I2 Note: 1. When any of the following .NET data types is being created and a PLB FORM value is used for the assigned value, the following tables identify the rules for conversion that are used. "System.SByte" - 8-bit signed integer "System.Byte" - 8-bit unsigned integer "System.Int16" - 16-bit signed integer "System.UInt16" - 16-bit unsigned integer "System.Int32" - 32-bit signed integer "System.UInt32" - 32-bit unsigned integer "System.Int64" - 64-bit signed integer "System.UInt64" - 64-bit unsigned integer Where: E - Error occurs because assignment is not allowed. Y - NETOBJECT is created with assigned value. .NET Data Types FORM VALUE SByte Byte Int16 UInt16 Int32 UInt32 Int64 UInt64 (positive) 0 - 127 Y Y Y Y Y Y Y Y 128 - 255 E Y Y Y Y Y Y Y 256 - 32767 E E Y Y Y Y Y Y 32768 - 65535 E E E Y Y Y Y Y 65536 - 2147483647 E E E E Y Y Y Y 2147483648 - 4294967295 E E E E E Y Y Y 4294967296 - 9223372036854775807 E E E E E E Y Y 9223372036854775808 - 18446744073709551615 E E E E E E E Y Greater Than 18446744073709551615 E E E E E E E E .NET Data Types FORM VALUE SByte Byte Int16 UInt16 Int32 UInt32 Int64 UInt64 (Negative) -1 - -128 Y E Y E Y E Y E -129 - -256 E E Y E Y E Y E -257 - -32768 E E Y E Y E Y E -32769 - -65536 E E E E Y E Y E -65538 - -2147483648 E E E E Y E Y E -2147483649 - -4294967296 E E E E E E Y E -4294967297 - -9223372036854775808 E E E E E E Y E -9223372036854775809 - -18446744073709551616 E E E E E E E E Less Than -18446744073709551616 E E E E E E E E ------------------------------------------------------------------------------- PLBCMP - Modified the PLBCMP compiler to accept and compile new .NET control objects as implemented in the runtime used to execute the compiler. This change allows the compiler to dynamically compile any .NET control objects that have been statically implemented into a runtime without prior knowledge of any graphical options. Since the .NET control objects can only be created using the PLBNET runtimes. The compiler will ONLY give compiler errors for unknown properties and events when the compiler is executed using PLBNET. - Corrected a problem where the label on the SETFOCUS instruction was being ignored. - Corrected a problem where the compiler could hang in an endless loop giving a compiler error when an invalid variable type was encountered in a RECORD. ------------------------------------------------------------------------------- PLBDSIGN - Corrected a problem that would cause either a GPF error or cause the designer to execute in an indeterminate manner. This problem could occur when the designer was executing in full edit mode and an ActiveX control that had very long event names was being used. The problems could occur when the combined object name plus the ActiveX event names exceeded the total size of 50 characters. ------------------------------------------------------------------------------- SUNSORT - Corrected a problem where a SUNSORT sort key length of 149 or 150 bytes would cause a buffer overflow when executing on a forward byte order platform under Unix. ------------------------------------------------------------------------------- ADMEQU.INC - Corrected a syntax error for the $AdmItemSrvMemCommittedBytes definition. ------------------------------------------------------------------------------- ODSBAC32.DLL - Modified to apply a non-zero restriction number to all columns for a table. If a column does not have a pre-existing ISI file declared in the schema, then as a default action this change causes a temporary ISI file to be used for any column used in a SQL operation. With this default restriction number change, a user must specify a zero restriction value in a column declaration string in the schema file to prevent the use of a temporary isam file. Also, the user can still provide specific restriction numbers for columns to be used. Restriction numbers are used by the optimization algorithms in the Sunbelt ODBC driver to determine the most unique columns for a table. This helps determine the best manner to process the data files for a table when retrieving SQL data. The intent of this default restriction number change is to give the best possible performance for the Sunbelt ODBC driver without having to modify the basic schema declarations. The default restriction number value of 10 is used for any columns that does not have a restriction number specified in the schema file. If a default restriction number is to be applied to the column for the first part of a declared multi-part index key, then a restriction value of 15 is used for that column. Example Schema Column Declaration: [Department] DATAFILE=c:\temp\data.txt COL001=DeptID Char Width 5 Primary ;Default restriction level 10 COL002=DeptDesc 0 Char Width 50 ;Zero restriction level ------------------------------------------------------------------------------- SA_DLL32.DLL - Modified to provide standard Sunbelt version information. ------------------------------------------------------------------------------- Dgbiface.plc - If PLB_SYSTEM is not defined in the ini file, the gui interface now also searches the environment. - Corrected a problem where doing a PGUP above the fist line or PGDN below the last line, an O145 could occur. - Corrected a double click on dim problem where the contents may not show correctly. - Modified the F3 key to be both step out or find next based on the last operation. This way F3 will work as both the traditional debugger step out, and the standard windows findnext key. ------------------------------------------------------------------------------- suncs21.ocx - Added Indent size property for auto indenting. ------------------------------------------------------------------------------- Editor.plc - Added notice if ocx control without auto indent size property was being used. ------------------------------------------------------------------------------- SunIDE.plc - Corrected a problem where if the IDE is closed while minimized, it could save bogus coordinates causing the next startup to reset the default window size. - Corrected a problem where a wrong end of record type could be used when saving the project file. This can lead to compression type errors when trying to open the ppj. - Corrected an F02 error that can occur if a project ini file was zero bytes in size. - Corrected a potential F02 error during Find in Files. ------------------------------------------------------------------------------- DESIGNER.PLC - Corrected the display of duplicate categories when showing events in the categorized view. - Added code to ensure that the currently selected property or event is always selected and visible after changing views from alphabetic to categorized and vice versa. - Corrected a "lvEvents positioning error" that occurred when a form was saved and an object other than the form was selected. - Added logic to ensure that new items added with the specialized editors for menus, listviews, statusbars, and toolbars always generate a unique name. - Added code to prevent the creation of a duplicate item name in the specialized editors. - Corrected a GPF error when creating an object on a report and an object other than a report section was selected. - Corrected issues in objects with non-local or non-owner events. - Corrected the output of duplicate RETURN statements in the code. - Drag and drop of new objects now uses the same height and width values as double-clicking the toolbox item. - Corrected logic in object lookup by name. - Modified assignment of the parent object pointer during object creation. - Added logic to handle situations from the original designer where the form name was the same as another object name. - Forced update of top, left, height, and width properties and the selected object size and position values when the Units property is changed on a form. - Added a comment line (.========) when importing code from the original designer. - Added logic to support form create in Units other than pixels. - Corrected bug that would truncated the selected object number to two digits. - Corrected bug that failed to initialize the parent pointer during file opens. - Corrected issue when pasting objects to a Panel. - Corrected issues when moving multiple selected objects. - Corrected display of the quick help when toggling between properties and events. - Added AutoHide feature for the properties, toolbox, object tree, and field list windows. - Corrected handling and definition of the ShowTips property for Toolbars. - Added the ShowGrid and AlignToGrid tool bar buttons. - All Designer forms are maintained by the designer itself. - Added display of the Window Units property to the Main Window. ------------------------------------------------------------------------------- WATCH.PLC - Corrected retrieval of file properties. - Added trap to catch version incompatibilities with FINDFILE. - Corrected determination of the server type. - Corrected calculation of the idle time minutes. - Added the server memory statistics. - Modified the client display to show the CPU time as hundredths of a second. - Disabled the display of CPU time on the client display for Data Managers. -------------------------------------------------------------------------------