Date: 12-01-2009 Subject: PATCH RELEASE 9.3C Runtime Files These release notes pertain to the following programs or files: PLBCLI 9.3C 01 Dec 2009 9,3,3,600 PLBCLICON 9.3C 01 Dec 2009 9,3,3,500 PLBCLIENT 9.3C 01 Dec 2009 9,3,3,500 PLBCLINET 9.3C 01 Dec 2009 9,3,3,500 PLBCON 9.3C 01 Dec 2009 9,3,3,500 PLBCONET 9.3C 01 Dec 2009 9,3,3,500 PLBDSIGN 9.3C 01 Dec 2009 9,3,3,500 PLBNET 9.3C 01 Dec 2009 9,3,3,500 PLBRUN 9.3C 01 Dec 2009 9,3,3,600 PLBSERVE 9.3C 01 Dec 2009 9,3,3,500 PLBSERVET 9.3C 01 Dec 2009 9,3,3,500 (Threaded Server) PLBWIN 9.3C 01 Dec 2009 9,3,3,500 SUNINDEX 9.3C 01 Dec 2009 9,3,3,500 SA_DLL32.DLL 9.3C 01 Dec 2009 9,3,3,500 DBGIFACE.PLC 9.3C 01 Dec 2009 DESIGNER.PLC 9.3C 01 Dec 2009 EDITOR.PLC 9.3C 01 Dec 2009 PLBCMP.PLC 9.3C 01 Dec 2009 PLBDBUG.PLC 9.3C 01 Dec 2009 SUNIDE.PLC 9.3C 01 Dec 2009 SUNCS21.OCX 9.3C 01 Dec 2009 9,3,3,500 *============================================================================== Notes for DOCUMENTATION: - Add a U58 error described as follows: The U58 can only occur when executing a PLBSERVE runtime and there is a problem sending a cleanup message to a PLBCLIENT during a chaining operation. This error indicates that the runtime was unable to send a cleanup to a client and indeterminate program execution could cause possible GPF errors. *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - Modified the chaining operation to give a U58 error if an error is detected twice when the server attempts to send a cleanup message to the PLBCLIENT. The U58 error is given to prevent possible indeterminate program execution that could result in GPF errors. The U58 error can only occur when executing the PLBSERVE runtime and there is an problem sending a cleanup message to a PLBCLIENT. - Modified the server logging to eliminate unnecessary log messages that can occur after the socket connection is lost between the server and the client. - Corrected a SETPROP buffering problem when a PANEL was setting the VISIBLE property. This problem could cause an indeterminate error to be reported. - Corrected a problem where an unexpected error would occur when SETPROP instructions were buffered and then a SETPROP COLLECTION instruction was encountered. - Corrected a problem where the Application Server did not initialize the console window during startup for Plbclicon and Plbcliunx. This problem was caused by a change in the 9.2 release. - Modified to ignore an ACTIVATE/DEACTIVATE of an AUTOMATION object that is created at the PLBSERVE server (i.e. a server side object). Otherwise a GPF error can occur at the PLBCLIENT. - Corrected a problem to prevent a GPF error at the PLBCLIENT when the following conditions existed in a program: 1. An AUTOMATION object was created to exist on the PLBSERVE server side. 2. The server side AUTOMATION object was put into a COLLECTION object. 3. A SETPROP COLLECTION was executed with the server side AUTOMATION object included in the COLLECTION. This would cause a GPF error to occur at the client module. ------------------------------------------------------------------------------- PLBSERVE, PLBCLIENT, PLBCLICON, PLBCLINET - Corrected a problem where a GPF error would occur at the client module when an AUTOMATION object created for the server side was sent to the client module as a parameter. An appropriate error is now given. ------------------------------------------------------------------------------- PLB(UNIX), PLBSERVE(UNIX) - Corrected a problem opening an 8.7 ISI where unexpected Extended Data was being reported when an I03 error occurred and the 8.7 data file contained no records. The unexpected Extended Data only appeared executing under Unix. ------------------------------------------------------------------------------- PLBWIN, PLBNET - Updated the PLBWIN usage output using 'PLBWIN -?' to include the NT Service command line options. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE - Modified the SPLOPEN instruction to allow keyword evaluation for PLBVOL and PLBENV keywords to occur at the Sundm Data Manager when the keywords do not exist in the runtime configuration INI file. - Modified the OPEN/PREP instructions for an AFILE/IFILE to support the PLBWIN_QNAME keyword when verifying that the TXT and AAM/ISI files are not the same. This change is required to work around a problem where the OS API file data required to determine file uniqueness was unreliable when a Novell network was used under System 7. To go along with this change, new subcode values are generated for an I11 error as follows: 196 - The Windows OS data was unreliable when checking for same files while performing a OPEN operation for an IFILE. 198 - The Windows OS data was unreliable when checking for same files while performing a PREPARE operation for an IFILE. 197 - The Windows OS data was unreliable when checking for same files while performing a OPEN operation for an AFILE. 199 - The Windows OS data was unreliable when checking for same files while performing a PREPARE operation for an AFILE. If an I11 with any of the new subcode values are encountered, then the end user should consider using the PLBWIN_QNAME keyword for file validation as this indicates that the OS API to verify file handle information either fails or is unreliable. - Corrected a problem where an untrapped error could be reported with an erroneous error code in a SETPROP. For example, a U01 could be reported as an 'x46' error where the 'x' was a garbage character. - Corrected a problem where a MOVEADR instruction would not move a source array variable address to a destination array pointer variable when the source array was declared with only one element. Example of problem: Onearr dim 10(1) dimPtr dim ^(10) . Moveaddr Onearr,dimPtr move "a",dimPtr(1) //F04 prior to 9.3C runtime version. - Corrected a protocol problem for the MailSend where a mail protocol message contained an extra ';' character. This might cause some mail engines to not properly process/display the malformed message. - Corrected a problem where a record array with a variable index did not properly resolve to a record in a ROUTINE when the record members were pointers. Example of problem: RecDef RECORD DEFINITION a FORM 1 b DIM 2 RECORDEND . RecDefPtr RECORD DEFINITION a FORM ^ b DIM ^ RECORDEND . RecArr RECORD (3) LIKE RecDef Ndx INTEGER 1 . MOVE "3", RecArr(3).a MOVE "C", RecArr(3).b MOVE "3", Ndx CALL Func USING RecArr(Ndx) . KEYIN "Hit enter to exit:",s$cmdlin SHUTDOWN ............................................ . Func FUNCTION p RECORD LIKE RecDefPtr ENTRY . DISPLAY "Record Data:", p //Expect '3C' to be Good! FUNCTIONEND - Corrected a GPF error that could occur for a EXCEPTSET instruction when the GIVING parameter was a pointer. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, ALL GUI CLIENTS - Modified the runtimes to allow variant array data to be stored into a single DIM variable with a delimiter (0x0A) character after each array string. This change was implemented to allow the safearray data from an AUTOMATION object to be retrieved directly into a DIM variable without having to use a PLB VARIANT object. Example: AUTO AUTOMATION SafeArrayData DIM 1024 ELEM DIM 50 COUNT FORM 5 I FORM 5 X0A INIT 0x0A . CREATE AUTO, ... GETPROP AUTO,*SomeProperty=SafeArrayData . OCCURS X0A, SafeArrayData, COUNT . FOR I, 1, COUNT EXPLODE SafeArrayData, X0A, ELEM DISPLAY "ELEM DATA:", *LL, ELEM, "<<<" REPEAT . - Added a new method named 'GetAllData' for a VARIANT object. This method retrieves all of the elements from a VT_ARRAY VARIANT object and stores each array element as a VT_BSTR data string into a single DIM variable where each VT_BSTR data string is terminated with a 0x0A character. ............................................................... . GetAllData Method (VARIANT) . The GetAllData method gets all of the elements of a VARIANT object with a VT_ARRAY variant type and stores them into a single DIM. Each VT_ARRAY data element is stored as a VT_BSTR data string and is terminated with a 0x0A character. The method uses the following format: [label] {object}.GetAllData GIVING {return} Where: label Optional. A Program Execution Label. object Required. A VARIANT object that is accessed. return A character string variable that receives the VT_ARRAY data elements. Flags Affected: EOS, OVER, ZERO Note the following: 1. The EOS flag is set if the size of the {return} DIM variable is too small to hold all of the VARIANT array data. 2. The ZERO and OVER flags are always set to FALSE. 3. The count for the number of VT_ARRAY elements retrieved from the VARIANT object can be determined by count the number of 0x0A in the {return} DIM variable. The OCCURS instruction can be used to determine the array element count. ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Modified cleanup for GUI objects to prevent any events from being put on the user event queue while the cleanup processing is executing. This is being done to prevent the possibility of having any unexpected user events for objects that are being destroyed in the cleanup process. - Modified GetFName to increase the output from 4096 to be 40960 bytes. This change can allow a larger number of file names to be returned for a multi-select user action. - Modified GetFName to set the OVER flag and return a message as 'OS buffer overflow!' when the OS API can not return any file name data because there is more than 40960 bytes to be returned. This buffer overflow situation can only happen when the GetFName is setup to allow multiple file names to be selected and there is a very large number of file names that have been selected by an end user. - Modified the PANEL and WINDOW objects to support a Mouse Wheel to scroll when these objects are using the AUTOSCROLL property. Please note the following for a scrolling action using a Mouse Wheel: 1. The scrolling action only take places when the AUTOSCROLL property is set TRUE for the PANEL or WINDOW and the MINSCROLLH/MINSCROLLV properties have been initialized to allow scrolling. 2. The scrolling action can only occur when the mouse pointer is located on a specific PANEL or on the WINDOW. 3. While the current focus exists on a GUI object on a WINDOW object, the Mouse Wheel can cause a scrolling action when the mouse pointer is located over another GUI object on the same WINDOW object. - Modified the drag/drop actions for a LISTVIEW object as follows: 1. A mouse down/up event is now generated for the left and right mouse events for a LISTVIEW object when the DRAGITEM DROP mode is active. 2. A right mouse action now selects a LISTVIEW line item when the DRAGITEM DROP mode is active. 3. A right mouse click event can now be generated by an immediate mouse down/up action without moving the mouse between the mouse down and the mouse up actions. - Normally, the PLB runtimes do not have to perform any special operations when an ampersand character (&) is embedded in a text/title string. The Windows OS controls the presentation for the ALT-Key character that is displayed in the GUI object. When the Windows OS detects the existence of the '&' character, the next character in the text string is underlined to give a visual indication of a Keyboard Accelerator Cue. However, the Keyboard Accelerator Cue may or may not appear depending on whether the end-user is using a manifest or not. Also, the presentation of the Keyboard Accelerator Cue may vary from one version of Windows to the next. Modifications have been made in the PLB runtimes to force the Ampersand UI State for all GUI objects that are created with a window so that the Keyboard Accelerator Cue (underlined ALT-Key character) appears when the '&' character is included in a text/title string. Note: 1. The ability to force the ampersand UI State is not available for Windows 98 and Windows ME. - Corrected a problem where a FLOATMENU was not being created at the mouse down point when a container offset was applied because a scrollbar offset existed for the container. ------------------------------------------------------------------------------- PLBNET - Corrected a problem where some error dialogs were reporting a PLBWIN runtime instead of a PLBNET runtime. - Corrected a problem where a .NET Button on a native PLB PANEL object was not responding to an ampersand ALT-Key sequence. ------------------------------------------------------------------------------- PLBNET, PLBCLINET - Corrected a problem where the image encoding for a .NET object could result in a normalized data string longer than 65535 bytes. This would cause a problem where a PLF would not load when a .NET object had a property with a large image for its parameter. This problem was causing an error in the PLB Designer when it tried to save a PLF with a .NET object as described. - Added special logic to the .NET runtimes to detect that a CellValidating event is being used for a .NET DataGridView object. When the end-user is editing a DataGridView cell and the focus is lost, the runtime performs special operations on the DataGridView cell to force the CellValidating event action. This change is needed to work around a problem where the CellValidating event action was not occurring when a DataGridView cell was in an edit mode and the focus was lost. - Modified the .NET runtimes to force a focus change when a .NET control has a Keyboard Accelerator Cue (ALT-Key underlined character) and the end-user keys the ALT-Key character. This change is being made to force a Windows OS focus rectangle to appear on the destination object assigned to the ALT-Key character. This change is needed to force a focus rectangle when it was not appearing otherwise. ------------------------------------------------------------------------------- PLBCMP - Modified to double the size of the symbol tables for UDA symbols and EXE symbols. - Corrected a problem where the following PLB source line was not being output to a program listing: "X RECORD ^" - Corrected a problem where the AAMDEX, INDEX, or SORT instruction would create invalid pcode when the 'OUTPUT={datalist}' was used and the {datalist} object was undefined. Now, the compiler give an appropriate error for the undefined {datalist}. ------------------------------------------------------------------------------- PLBDBUG - Modified to support '.sdb' files that have the symbol tables doubled in size. The 9.3C compiler can generate a '.sdb' debug file with a symbol table size that has been doubled. In this case, the '.sdb' debug file can not be opened/used by any older debugger versions. - Corrected a problem where the open absolute mode was not being reset when the PLBDBUG debugger exited with an error. This program could cause PLB OPEN/PREP instructions to fail with unexpected I10 or I04 errors with an OS sharing violation. - Corrected a problem that would cause the GUI debugger to be disabled when a PLC without a SDB file was encountered. ------------------------------------------------------------------------------- PLBDSIGN - Corrected a problem where the 'Text' property was not being output for object when an Export Code operation was performed. ------------------------------------------------------------------------------- SUNINDEX - Corrected a problem where SUNINDEX was allowing leading white space characters for an argv parameter. This was causing Sunindex to give an unexpected option error. The unexpected error would occur when more than 1 blank character existed in the command line between the '-l' and the 'i' options. Example: sunindex -lxxx.log -imy.ini testfile.TXT -1-5 ------------------------------------------------------------------------------- SA_DLL32.DLL - Release to include file IO runtime changes. ------------------------------------------------------------------------------- DESIGNER.PLC - Added registered events to the object tree display. - Corrected logic that deals with apostrophes in ActiveX control names. - Corrected the definitions file to add the DragDrop event for Listviews. - Corrected the definitions file to remove the No Border list value for the Panel Border Style property. - Added validation logic for event routine labels entered through the events page of the property grid. - Enhanced the checking of support for the TabID property on .Net objects and controls during tabid renumbering. - Added the display of .Net nested collection objects to the object tree. - Added a Rename shortcut menu item to .Net nested collection objects that don't support a Name property in the property grid. - Added a Reset shortcut menu item to .Net property grid image items to reset the object back to its original initialized state of no image. - Added the WebBrowser control to the .Net toolbox although the object doesn't support mouse events and a number of designer functions (i.e., moving) must be done by alternate means such as the cursor keys or property grid. - Enhanced the designer to make working with .Net SplitContainers easier. - Corrected the output of some font attributes when exporting a form to a PLS file. ------------------------------------------------------------------------------- SUNIDE.PLC - Corrected a problem where the IDE did not handle maximizing correctly so it did not save the maximized state between sessions. - Corrected a bug where a "Tab1" would appear in the files tab control when the IDE first starts. - Alternate Compiler output extension now defaults to "PLC". - Corrected an issue when working with multiple profiles in a project that profile changes were not saved when changing or creating a new profile. - Corrected an issue where a GOTO LABEL command or double clicking an error in the output window would go to the correct line in the wrong file. - Added Option to the IDE Options Misc tab to display the source map with includes unsorted. - Corrected a problem where "Save Project As" did not work. - Corrected an issue where "Autocomplete" may not work correctly. ------------------------------------------------------------------------------- EDITOR.PLC - Addressed an issue in the editor.plc where it could hang if the server where a file is stored does not update the file timestamp after a Save. - Corrected a bug where line continuation did not work reliably. - Corrected a bug on save settings where the IDE would crash if using an older OCX. - Added crash recovery logic. The editor now maintains a working scratch file that is saved every minute so if the IDE is unexpectedly terminated, it can recover your changes. ------------------------------------------------------------------------------- DBGIFACE.PLC - Corrected a bug in the debugger where the current executing line may not be highlighted if trace points were active. - Corrected a possible runaway condition in the debugger that would cause the program to execute till it stopped and never return to the debugger. - Modified the debugger watch variable window to select all the data when editing it's contents. - Corrected a problem in the watch variable window where the value edit edittext could be larger than the listview. This could cause problems when modifying the value. - Corrected a bug in the cleanup of the debugger where memory may not be released. This could cause invalid data to be used in subsequent sessions when running in the IDE. ------------------------------------------------------------------------------- SUNCS21.OCX - Corrected line continuation processing bugs where the first displayed line in the view may not be highlighted - Corrected a problem where code outlining may not identify all the structure keywords. - Corrected a GPF type error that could occur when typing the initial quote for a string literal. -------------------------------------------------------------------------------