Date: 02-21-2007 Subject: Patch RELEASE 9.1E Runtime Files These release notes pertain to the following programs or files: ADMEQU.INC 9.1E 21 Feb 2007 DBGIFACE.PLC 9.1E 21 Feb 2007 EDITOR.PLC 9.1E 21 Feb 2007 ODSBAC32.DLL 9.1E 21 Feb 2007 PLBCLICON.EXE 9.1E 21 Feb 2007 9,1,5,0 PLBCLIENT.EXE 9.1E 21 Feb 2007 9,1,5,0 PLBCMP.PLC 9.1E 21 Feb 2007 PLBCON.EXE 9.1E 21 Feb 2007 9,1,5,0 PLBDBUG.PLC 9.1E 21 Feb 2007 PLBDSIGN.EXE 9.1E 21 Feb 2007 9,1,5,0 PLBEQU.INC 9.1E 21 Feb 2007 PLBMETH.INC 9.1E 21 Feb 2007 PLBSERVE.EXE 9.1E 21 Feb 2007 9,1,5,0 PLBWIN.EXE 9.1E 21 Feb 2007 9,1,5,0 PROFILER.PLC 9.1E 21 Feb 2007 SA_DLL32.DLL 9.1E 21 Feb 2007 9,1,5,0 SUNIDE.PLC 9.1E 21 Feb 2007 SUNINDEX.EXE 9.1E 21 Feb 2007 9,1,5,0 SUNWMSQL.DLL 9.1E 21 Feb 2007 9,1,5,0 *============================================================================== Notes for some NEW Items: - Added %XREFOFF and %XREFON compiler directives. - Added CMPVER compiler directive. - Enhanced events for ANIMATE object. - PLBCS_MULTISERVER={on|off} for PLBCLIENT. - FMLONGKEEPALIVE={mode} keyword for GETMODE/SETMODE instructions. - FMLONGUSECOUNT={nvar} keyword for GETMODE instruction. - FMISCONNECTED={nvar} keyword for GETFILE instruction. - Added HWND property for PANEL object. *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - Corrected an O121 error when a PANEL object was used as the parent window for a CREATE of an object. This problem was occurring when the CREATE of the PANEL and the CREATE of the GUI object were back to back instructions. ------------------------------------------------------------------------------- PLBCLIENT- Added a new keyword named 'PLBCS_MULTISERVER={on|off}'. This keyword PLBCLICON can be specified in the client INI settings. If this keyword is set to be ON, then the plbclient processes the logon sequence by randomly starting with the PLBCS_HOSTNAMEnn server identified in the client INI settings. Once the starting PLBCS_HOSTNAMEnn server is determined, then the normal logon process continues sequentially until a server logon is successful. The general purpose of the PLBCS_MULTISERVER is to allow multiple PLBSERVE servers to be configured and used to support multiple clients simultaneously. A user may need to consider this PLBSERVE configuration/usage when a single server encounters OS limitations required to support a large number of clients. For example, the 2GB limit is exceeded for a Windows OS a single PLBSERVE server when a large number of clients access the one server. Note: 1. The PLBCS_HOSTNAMEnn keyword is limited to a maximum of 40 addresses. ------------------------------------------------------------------------------- PLBWIN - Added a new keyword named '*FMLONGKEEPALIVE={mode}' for the SETMODE PLBSERVE and GETMODE instructions. When the FMLONGKEEPALIVE {mode} is set PLB(UNIX) to a non-zero value, then the keepalive processing by the runtime is executed as follows: 1. The new keyword named 'FM_LONGKEEPALIVE={minutes}' can be specified in the SUNFM CFG file. This keyword can be specified in the [environment] section of the SUNFM CFG file. The {minutes} value has a minimum of 3 minutes. If this keyword is not specified, then the default long keepalive time is 60 minutes. This SUNFM keyword takes affect when the file manager creates any new child thread. 2. When the SUNFM file manager receives a long keepalive message from a client runtime, then the file manager waits for the current long keepalive time frame to receive the next message. If the file manager does not receive another message from the client runtime within the long keepalive time duration, then the file manager child thread is terminate after a child recovery is attempted. If the file manager receives a message from the client runtime before the long keepalive time duration expires, then the SUNFM file manager reverts to the normal keepalive processing. The normal keepalive processing expects that a normal keepalive message must be received by the file manager child thread within the keepalive time specified by the 'FM_KEEPALIVE={minutes}' time frame. 3. If the SETMODE *FMLONGKEEPALIVE {mode} is set to a zero value, then the client runtime sends a message to all file managers currently being accessed that causes the normal keepalive processing to be used. 4. When the SETMODE *FMLONGKEEPALIVE {mode} is set to a non-zero value, then only long keepalive messages are sent to the file managers. Once the SETMODE *FMLONGKEEPALIVE {mode} is set to a non-zero value, then the execution of a PLB WINAPI or PLB method for an AUTOMATION, CONTAINER, or CONTROL object causes a long keepalive message to be sent to the SUNFM file manager. This implementation is needed to prevent unexpected termination of file manager child threads caused by excessively long execution times for these PLB instructions. This can prevent unexpected I81 errors. - Added a new keyword named '*FMLONGUSECOUNT={nvar}' for the GETMODE instruction. The execution of a GETMODE for the FMLONGUSECOUNT keyword returns a count of the number of file managers being accessed that are currently set for long keepalives. - Added a new keyword named 'FMISCONNECTED={nvar}' for a GETFILE instruction. The GETFILE FMISCONNECTED keyword returns a value that identifies whether a file variable is currently connected to a SUNFM file manager and is the file manager connection good. Returned Values 0 - The file variable is not connected to a SUNFM file manager. 1 - The file variable is connected to a SUNFM file manager and the socket connection is good. 2 - The file variable is connected to a SUNFM file manager and the socket connection is closed. Note: 1. The FMISCONNECTED keyword for a GETFILE can be used to determine the current working state for the connection to a SUNFM file manager. If the current working state for the connection is determined to be bad, then the file variable can be re-opened without having any I81 errors. - Corrected a problem where the INDEX instruction did not index a file properly when a key length of 149 or 150 bytes was specified. For this problem, the INDEX instruction was exiting without giving any errors. However, the ISI file would only contain a single key. - Corrected a problem where the WHEREIS and WHEREISLAST instructions did not find the {source} string given the following where the {source} length is N bytes: 1. The {source} string is actually found in the last 2N-1 bytes of string. 2. There is another occurance of the 1st character of {source} in the last 2N bytes of the string and before {source}. Problem Example: WHEREIS "Tennessee","John Doe, 1234 Some St, Tyler, Tennessee",NVAR In this example, N=9, since the length of "Tennessee" is 9. There is an occurance in the last 17 bytes of the string, but it would not have been found because there is a 'T' in the last 18 bytes that is not part of 'Tennessee', namely the 'T' in Tyler. - When a READ of a XFILE gives a RECORDSET with one record, then the first READ of the XFILE for the RECORDSET would work properly. However, all subsequent reads of the RECORDSET would fail with the OVER flag set. - Corrected a problem where an OPEN instruction was causing unexpected I81 errors when it was executed after multiple file variables were opened as managed files and the file manager thread was prematurely terminated. - Corrected a problem where a COMATTACH instruction would overwrite the existing socket handle for a COMFILE. This would cause socket handles to be lost. - Corrected a problem where an IFILE operation that required an isam key to be deleted from the ISI file could cause indeterminate results when the key length was larger than 114 bytes. The indeterminate results could be unexplained program errors that could include I60 errors. Also, indeterminate results might cause GPF/SEGV errors. Some PLB instructions like DELETED, DELETEDK, and FILELIST IO instructions were more likely to cause this problem depending on the layout of the keys in the ISI file. - Corrected a problem where a SPLOPEN that specified a Windows device was causing an erroneous S10 error. This problem was caused by a change that was made in release 9.1D. ------------------------------------------------------------------------------- PLBWIN - Modified the ANIMATE object to support the following events. CLICK DRAGDROP DRAGOVER MOVE MOUSEDOWN MOUSEUP MOUSEMOVE These events were added to support the PLB Designer - Modified the DRAGITEM instruction to support the ANIMATE object. - Modified the PANEL object to support the HWND property. With this change it is possible to use the FormToPict method for a WINDOW object and capture the PANEL window image. - Modified the PLBWIN GPF crash handler to try and free any font resources used by the PLB program that has crashed. - Corrected a problem where a change to the TOPMOST property state was causing a window to be the active window with the focus. - Corrected a problem where a long keepalive was not being used when a ChooseColor method was executed for a COLOR object. - Corrected a problem where a long keepalive was not being used when a ChooseFont method was executed for a FONT object. - Modified the runtime to avoid a GPF error that could occur when the Windows OS Fonts included an unusable SDBWIN font. Now, if a bad SDBWIN font is detected, the runtime continues the loading process and allows a default font to be selected. If the '-d3' debug log file is used, then an appropriate error message is logged when a bad SDBWIN font is detected. Note: 1. The SDBWIN font is only added as a Windows OS font resource when the PLB_DOSFONT keyword or the PLBWIN.FON font file is used by the PLBWIN runtime. 2. The SDBWIN font is normally removed as a Windows OS font resource when the PLBWIN runtime is shutdown. 3. If a user uses the Windows Task Manager to prematurely terminate the PLBWIN runtime while the SDBWIN font exists as a Windows OS font resource, then Windows OS DOES NOT remove the SDBWIN font when the PLBWIN task is terminated. In this case, the SDBWIN font remains as a Windows OS until a system re-boot is performed. In addition, if the Windows OS sets the SDBWIN to an empty font, then this font can not be used and this was causing the GPF problem. - Corrected a problem where the LoadXmlFile method for the LISTVIEW and TREEVIEW object was not returning an error when the XML file could not be parsed because of bad data. With this change, the LoadXmlFile method returns an appropriate error code when a XML data file can not be parsed. With this change a new base XML handler subcode error has been added as follows: 16 - Error detected parsing XML data file. ------------------------------------------------------------------------------- PLBCMP - Added two new compiler directives named '%XREFOFF' and '%XREFON'. These compiler directives take affect when the '-x' compiler option is used to generate a cross-reference output. FORMAT: %XREFOFF %XREFON Note: 1. The %XREFOFF compiler directive turns the cross reference label output off when the '-x' option has been specified when the compile started. 2. The %XREFON compiler directive turns the cross reference label output on when the '-x' option has been specified when the compile started. 3. The implementation for the %XREFOFF and %XREFON directives is nested relative to the INCLUDE file levels. This implementation insures consistent control of the cross label references without include file interactions. - Added a new compiler directive named 'CMPVER({verid})'. The CMPVER compiler directive gives an EQU value that represents the version value that is created for the {verid} string. Format: CMPVER({verid}) Where: {verid} is a special formatted string that identifies the compiler version used to calculate the version value. Note: 1. The S$CMPVER$ compiler directive is a special compiler directive that represents the current compiler version that is being used when a program is compiled. 2. The CMPVER compiler directive requires an input string that is processed to give the expected EQU value that gives the expected numeric value for any compiler version. 3. Since the S$CMPVER$ and CMPVER directive values are represented as equated values, then any given value CAN NOT be larger than 0xFFFF. 4. The S$CMPVER$ and CMPVER compiler directives are calculated by the compiler as follows: Compiler Version: 'MNP' Where: M - Major version number. This character must be a valid HEX digit. ( 0 to F ) N - Minor version number. This character must be a valid HEX digit. ( 0 to F ) P - Patch release identifier. This character must be a character specified as ( 0 to 9 ) or ( A to Z ). The value of the 'P' character in this case is transformed into a Base 36 value. (i.e. Value is 0 to 35 decimal ) Using the 'MNP' format, the compiler version is calculated by the following expression: VERVALUE = ( ( ( ( M * 16 ) + N ) * 256 ) + P ) CMPVER(91) --> VERVALUE = 0x9100 CMPVER(91E) --> VERVALUE = 0x910E CMPVER(91F) --> VERVALUE = 0x910F CMPVER(91G) --> VERVALUE = 0x9110 CMPVER(91Z) --> VERVALUE = 0x9123 Examples: eVER91E EQU CMPVER(91E) . eVER91Z EQU CMPVER(91Z) . iVER91E INTEGER 2,eVER91E . iVER91Z INTEGER 2,eVAR91Z . ....... . %IF S$CMPVER$ >= CMPVER(91E) . DISPLAY "DO NEW CODE!" . %ELSE . DISPLAY "DO OLD CODE!" . %ENDIF - Modified the GETMODE instruction to support a new keyword named '*FMLONGKEEPALIVE={nvar}'. This keyword returns the current long keepalive mode state value that is being used by the runtime. See the description above for more details. - Modified the SETMODE instruction to support a new keyword named '*FMLONGKEEPALIVE={mode}'. This keyword can be used to enable and disable the long keepalive mode for the runtime. See the description above for more details. - Modified the GETMODE instruction to support a new keyword named '*FMLONGUSECOUNT={nvar}'. This keyword can be used to retrieve the number of SUNFM file managers that are currently set to use long keepalives. See the description above for more details. - Modified the GETFILE instruction to support a new keyword named 'FMISCONNECTED={nvar}'. This keyword can be used to report the current status of the SUNFM socket connection for a managed file variable. See above for more details. - In the 9.1D patch release, the S$CMPVER$ equated value was being generated as an equated value of '0x91D'. Even though the 9.1D PLBCMP compiler generated the '0x91D' value. That value was invalid as compared to S$CMPVER$ values that are generated by the 9.1E compiler and later. Starting with the 9.1E compiler, the S$CMPVER$ directive generates compiler version consistent with the CMPVER(current) directive. See the description for the CMPVER directive. - Corrected a problem where a compiler error message was scrolling off the screen when the following compiler command line was used: Example: plbcon plbcmp program -L=33 ------------------------------------------------------------------------------- PLBDBUG - Corrected a problem where a Function key current state flag was not being cleared in the debugger control window. ------------------------------------------------------------------------------- PLBDSIGN - Modified the designer to support the following events: CLICK DRAGDROP DRAGOVER MOVE MOUSEDOWN MOUSEUP MOUSEMOVE ------------------------------------------------------------------------------- UTILITY - Corrected a problem where the SUNINDEX utility did not index a file properly when a key length of 149 or 150 bytes was specified. For this problem, the SUNINDEX utility was exiting without giving any errors. However, the ISI file would only contain a single key. ------------------------------------------------------------------------------- ADMEQU.INC - Modified to use the %XREFOFF and %XREFOFF compiler directives to prevent unnecessary labels in a cross-reference when the compiler '-x' option is used. ------------------------------------------------------------------------------- PLBEQU.INC - Modified to use the %XREFOFF and %XREFOFF compiler directives to prevent unnecessary labels in a cross-reference when the compiler '-x' option is used. - Update the TOPMOST property description. ------------------------------------------------------------------------------- PLBMETH.INC- Modified to use the %XREFOFF and %XREFOFF compiler directives to prevent unnecessary labels in a cross-reference when the compiler '-x' option is used. ------------------------------------------------------------------------------- ODSBAC32.DLL - Corrected a problem where an index operation did not index a file properly when a key length of 149 or 150 bytes was specified. For this problem, the index operation was exiting without giving any errors. However, the ISI file would only contain a single key. The problem could be an issue when a temporary index is being used while 149/150 byte keys were used. ------------------------------------------------------------------------------- SA_DLL32.DLL - Corrected a problem where the SA_INDEX function did not index a file properly when a key length of 149 or 150 bytes was specified. For this problem, the SA_FUNCTION function was exiting without giving any errors. However, the ISI file would only contain a single key. ------------------------------------------------------------------------------- SUNWMSQL.DLL - Corrected a problem where a GPF (Windows) or SEGV (Unix) could occur when a connection to a MySql Database engine was closed. ------------------------------------------------------------------------------- SUNIDE - Modified Project options dialog to allow the project's Name to be changed. - Internal changes to prevent instance collisions with new designer. - Modified IDE logic to use FINDDIR instead of datalist .dir method for various functions. - Made Modifications to use BrowseforFolder method. - Corrected a bug where if a user opens the IDE Options Window, some internal state flags get reset causing problems the next time the IDE is started. - Restructured Help Logic to use CHM files by default if available and prevent trying to use HLP files if running under VISTA. - Redesigned IDE Options Misc tab to be categorized to make options easier to find. - Added option to disable runtime version checking to detect when runtime version being used changed in order to alert the user of possible incorrect settings in the IDE options. - Modified startup defaults to always get the path of the runtime during initialization. - More tab key emulation cleanup. ------------------------------------------------------------------------------- EDITOR - Modifications for new designer support. - Restructured Help Logic to use CHM files by default if available and prevent trying to use HLP files if running under vista. ------------------------------------------------------------------------------- DBGIFACE - Fixed a Bug where the Function Key Flag was not displaying as a result of changes in the 9.0G release. - Fixed up dialogs to set keyboard focus appropriately when they become active. - Fixed dialog so debug command keys work while focus is on the dialog: F3, F5, F8. F7/F10, and arrow keys. - Corrected a bug that would cause the IDE to loose the location of its scratch folder. This could result in a SCRATCH folder being created in the root directory or in the current directory depending on operations. ------------------------------------------------------------------------------- PROFILER - Added -OldData command line option to re-show last profile. - Modified processing to cut initial processing in half. - Modified call count to be an integer 4 for when routines are called more than 10,000 times. - Made numeric columns in listview right justified. - Modified display times to be in seconds. 1.234 - Corrected a problem were events dispatched from a modal window may not be properly placed in the treeview.