Date: 11-17-2006 Subject: Patch RELEASE 9.1C Runtime Files These release notes pertain to the following programs: ANSWER MASTER PLBCLIENT 9.1C 17 Nov 2006 9,1,3,0 PLBCLICON 9.1C 17 Nov 2006 9,1,3,0 PLBCMP 9.1C 17 Nov 2006 PLBCON 9.1C 17 Nov 2006 9,1,3,0 PLBDBUG 9.1C 17 Nov 2006 PLBDSIGN 9.1C 17 Nov 2006 9,1,3,0 PLBEQU.INC 9.1C 17 Nov 2006 PLBMETH.INC 9.1C 17 Nov 2006 PLBSERVE 9.1C 17 Nov 2006 9,1,3,0 PLBWIN 9.1C 17 Nov 2006 9,1,3,0 SA_DLL32 9.1C 17 Nov 2006 9,1,3,0 SUNWSRV 9.1C 17 Nov 2006 9,1,3,0 DESIGNER 9.1C 17 Nov 2006 *============================================================================== New Information: - A new PL/B Form Designer is included with this release. This is a general PUBLIC BETA prior to it's official release. This designer has many new and inovative features. Please see the seperate documentation included for the details. - A new ANSWER/MASTER system has been included with this release. - Many new sample programs and applications have been included to show techniques and various features of the language. The new demo programs are: - ACLOCK - Analog Clock - AUTOEXP - Auto Expense Tracking - CAL - Calendar - CHECKBOOK - Ledger - TASKLOG - Journaling or Diary The full source is included and you can make whatever changes you want. *============================================================================== Notes for WARNINGS: - The Unix PLBSERVE runtimes have been modified to support keepalives when the SUNFM enables the FM_KEEPALIVE keyword. - The COMCHECK instruction has been changed to clear an active FILEPI. *============================================================================== Notes for DOCUMENTATION: - The 9.0H readme information should be reviewed. It appears that some of the changes made in the 9.0H release are not documented. - The documentation for the READ and WRITE instructions of a FILE, AFILE, and IFILE indicates that the {list} is required. The PLBCMP compiler syntax checking does not require any list variables with or without a trailing ';' character for these instructions. - The C15 error can have a subcode value of 29. The subcode value of 29 is described as follows: C15 error SubCode 29 When using dynamic load modules, there is insufficient memory available to load the load module. - The runtime reference manual error description for the 208 subcode for the U48 error should be changed as follows: "Optimistic file IO is not supported by the runtime. In this case, all of the file variables used in file IO instructions while a TRANSACTION is active must be specified in the TRANSACTION START instruction file list." - In the PL/B Language Reference Manual, change all of the PL/B instructions like 'READ (XML)', 'WRITE (XML)', etc... to read as 'READ (XFILE)', 'WRITE (XFILE)', etc... - Added an O199 error that indicates that a GPF error has occurred when executing a Windows OS function while executing a PL/B method. *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - Modified the PLBSERVE server to receive an end session message from the client modules. In this case, the server terminates that child thread/program and logs an appropriate message in the log file. - Modified the PLBSERVE server to not check the status of the PLBCLIENT while a FILEPI is active. This prevents the possibility of hanging because of a communications error while the FILEPI is active. - Modified the EVENTQUEUE instruction to be ignored under PLBSERVE when a FILEPI is active. This change prevents the possibility of hanging because of a communications error while the FILEPI is active. - If the SPLOPEN is waiting to open an 'LPTn' print port, then the runtime waits until this print port can be opened exclusively. The PLBSERVE runtime has been modified to detect a user abort action while waiting to open the 'LPTn' print port. With this change, the user program will now abort as expected in this case. - A new keyword named 'PLBCS_RECOVERYWAITTIME={seconds}' has been added for the PLBSERVE server. This keyword can be used to set the number of seconds that the PLBSERVE server will wait to detect a client recovery action. If this keyword is not used or evaluates to a zero value, then the default value is 120 seconds. Once the recovery wait time expires, then the child thread is terminated after appropriate cleanup actions are executed. Also, this keyword only take affect for a Windows OS version of PLBSERVE. - Corrected a problem where a fast event could be dispatched in the middle of the COMCHECK instruction. This would cause indeterminate results when the logic for a fast event was completed. ------------------------------------------------------------------------------- PLBSERVE (UNIX) - The Unix PLBSERVE runtimes have been modified to support keepalives when the SUNFM enables the FM_KEEPALIVE keyword. In addition, the keywords PLB_FMCHILDRECOVERY and PLB_FMKEEPALIVE are now enabled for the Unix PLBSERVE runtime. Note: When the SUNFM configuration file enables the FM_KEEPALIVE keyword, then the default operation of the Unix PLBSERVE runtime is to have keepalives enabled by default. This also means that SUNFM connection recovery is now enabled by default when the FM_KEEPALIVE keyword is used. ------------------------------------------------------------------------------- PLBCLICON- Modified the console client to detect the 'x' close window click action. In this case, the same action as for a CONTROL-C action is executed. ------------------------------------------------------------------------------- PLBCLIENT- Modified the client modules to detect the user LOGOFF and PLBCLICON workstation SHUTDOWN actions. When one of these actions is detected, then the client sends an end session message to the PLBSERVE server. The PLBSERVE server closes files, modules, and terminates the child thread. The PLBSERVE server logs a message that indicates that the client has terminated by a LOGOFF or SHUTDOWN action. - Modified the client modules to use the SETMODE *SHUTDOWN setting. When the '*SHUTDOWN=OFF' setting is used, then the program continues to execute to completion when a client workstation LOGOFF or SHUTDOWN action is executed by the end user. - Corrected problems where the PLBCLIENT client could hang indefinitely when a fast event was generated and dispatched to the application server to be processed. The consequences of this problem are unpredictable since the fast events could be executed at undefined points in the user program. If this hanging situation occurred while a FILEPI was active, then a network hanging situation would occur as long has the client was hung. ------------------------------------------------------------------------------- PLBWIN - Modified the runtimes to give a U55 error when there is a problem PLBSERVE the FUNCTION stack usage for a PL/B program. When a U55 error with PLB (UNIX) a subcode of 999 is encountered, then the user should recompile the PL/B program using a 9.1C compiler. The U55 error indicates subcode 999 indicates that there is the potential that a programs UDA can be corrupted and indeterminate program execution might occur. - Modified the schema output for a XFILE to place any attribute tags and attribute group references at the end of a 'xsd:complexType' definition. This change corrects a problem where the XML schema standard recommendations require that this format must be used. This change eliminates conflicts caused for third party schema development tools that require this schema format for a complexType. - Modified the '-d3' logging to store the Abort program log entries in both the control and program log files. - Modified the COMCHECK instruction to clear a active FILEPI. This change prevents the possibility of hanging applications that are blocked by a FILEPI until the COMCHECK is completed. - Added a new keyword for the GETFILE instruction named AAMDEXINFO. The 'AAMDEXINFO={svar}' keyword builds a command line for an AFILE that would be used to create the .AAM file using the sunaamdx utility. Since the .AAM file does not contain the actual command line, the AAMDEXINFO keyword builds the command line in the same manner as if the 'sunaamdx aamfile -i' command were executed. - Modified the client runtimes to send the client user serial number to the SUNFM file manager. When the SUNFM file manager sets the ADMIN_LOGLEVEL to 2, then the client serial number is logged in the SUNFM log file when the SUNFM child task starts. - Added a new instruction named WHEREISLAST. This instruction is the same as the WHEREIS instruction except the source logical string is searched backwards from the end of the logical string. This instruction locates and reports the FP position for the last occurrence of the search character/string in the source logical string. - Corrected a GPF error that could occur when a filtered READ for a XFILE was executed after the XFILE has been opened using a .XML file that has no XML tag structure. With this change, an appropriate I83 error is now given for the filtered READ. - Corrected a problem for a GETFILE instruction where the program UDA would be corrupted when the output {value} was a SVAR and it was too small to contain all of the data. When this data overflow occurred, then the program would execute in an indeterminate manner that could cause a GPF error, C09 errors, or unexplained PLB instruction failures when a corrupted variable was used. - Corrected a problem where an invalid formatted AAM key was being used without causing an I42 error. - Modified the PLB_PUBLIC and PLB_LOGON keywords to stop processing the key data when a blank character is encountered. This corrects a U44 error that would occur when the key data had trailing blanks. - Corrected a GPF error that could occur while using TRANSACTION operations. The cause for the GPF error depended on the sequence of file IO instructions and the location of data in the files being written. The nature of the causes for the problem makes the problem unpredictable. ------------------------------------------------------------------------------- PLBWIN - It was documented that these runtimes supported a keyword named PLBSERVE 'PLB_CHILDRECOVERY' that could be used to turn off SUNFM connection child recovery support in the client application. Unfortunately, these runtimes were looking for a keyword named 'PLB_FMCHILDRECOVERY'. Therefore, a change as been made to support both keyword names. ------------------------------------------------------------------------------- PLBCON - Modified the console runtime to detect the 'x' close window click action. In this case, the same action as for a CONTROL-C action is executed. - Modified the console runtime to detect the user LOGOFF and SHUTDOWN actions. When one of these actions is detected, then the console runtime performs a SHUTDOWN while closing files, load modules and releasing resources. - Modified the console runtime to use the SETMODE *SHUTDOWN setting. When the '*SHUTDOWN=OFF' setting is used, then the program continues to execute to completion. The Windows OS 'End Program' dialog may appear to the end user with the option of ending the PLBCON runtime. ------------------------------------------------------------------------------- PLBWIN - Added the HELPID property for the MENUITEM object. When a MENU, SUBMENU, or FLOATMENU menu item is highlighted and the F1 function function key is pressed, then the help topic for a specified HELPID is presented to the end user from a Windows Help file. The PLB application can use the GETPROP and SETPROP for a MENUITEM object to retrieve and change the HELPID property for a menu item. In addition, the 'AddItem' method for the MENU, SUBMENU, and FLOATMENU objects has been changed to support a new optional parameter named '*HELPID={dnumnvar}'. AddItem Method Format: [label] {object}.Additem [GIVING {return}]: USING [[*Checked=]{checked}]: [*Default=]{default}]:[ [*Enabled=]{enabled}]:[ [*ItemPos=]{itempos}]:[ [*Separator=]{separator}]:[ [*ShortCut=]{shortcut}]:[ [*SpcMenu=]{spcmenu}]:[ [*SubMenu=]{submenu}]:[ [*Tab=]{tag}]:[ [*Text=]{text}]:[ [*RunName=]{runname}]:[ [*HelpId=]{helpid}] Where: All existing method parameters are the same as documented. {helpid} Optional. A numeric variable or decimal number that specifies the menu item top number as defined in a user generated Windows help file. - The {menu-data} special character controls used in the CREATE of the FLOATMENU, MENU, and SUBMENU objects has been modified to support a '?nnnn' control. The '?nnnn' special character sequence is used to specify the HELPID value for any menu items. Example: MENU MENU MDATA INIT "XMENU;First First Item?1001;Second Item?1002" . CREATE MENU,MDATA . . The value of '1001' specifies the HELPID for the first . item in the menu items. The value of '1002' is specifies . the HELPID for the second item in the menu items. - The 'MDILIST={dnumnvar}' property was implemented for the MENU object. When this property is set to a non-zero value, then a MDI window menu list is appended to the MENU object list. The text data for each MDI window menu item is the MDI child window title data string. If the MDILIST property is not used, then the default value is zero. In this case, the MDI window menu list is not used. Note: 1. The Windows OS controls the implementation for the MDILIST property state for a MENU object. The PL/B user application should only have one active MENU object with the MDILIST property turned on. - Modified the TOOLBAR object to support three new methods that can be used to reset the imagelist usage for the TOOLBAR as if the object was created without specifying the IMAGELIST, IMAGELISTHOT, or the IMAGELISTDISABLED properties. The new TOOLBAR methods are defined as follows: ............................................................... . ResetImageList Method . The ResetImageList method resets the TOOLBAR object to use the runtime internal default tools imagelist. The IMAGELIST property is set to NULL when this method is executed. The method uses the following format: [label] {object}.ResetImageList [GIVING {return}] Where: {label} is an optional Program Execution Label. {object} is a required TOOLBAR object to be accessed. {return } is an optional Numeric Variable that receives the pass or fail result for the execution of the method. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to a TRUE state when the {return} value is zero. Otherwise the ZERO flag is cleared. The {return} value is zero when the method execution is unsuccessful. The return value is one when the method execution is successful. 2. The OVER flag is set to a TRUE state if the {return} variable is too small and the returned value is truncated. Otherwise, the OVER flag is cleared. ............................................................... . ResetImageListDisabled Method . The ResetImageListDisabled method resets the TOOLBAR object to have the IMAGELISTDISABLED property set to a NULL state. The method uses the following format: [label] {object}.ResetImageListDisabled [GIVING {return}] Where: {label} is an optional Program Execution Label. {object} is a required TOOLBAR object to be accessed. {return } is an optional Numeric Variable that receives the pass or fail result for the execution of the method. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to a TRUE state when the {return} value is zero. Otherwise the ZERO flag is cleared. The {return} value is zero when the method execution is unsuccessful. The return value is one when the method execution is successful. 2. The OVER flag is set to a TRUE state if the {return} variable is too small and the returned value is truncated. Otherwise, the OVER flag is cleared. ............................................................... . ResetImageListHot Method . The ResetImageListHot method resets the TOOLBAR object to have the IMAGELISTHOT property set to a NULL state. The method uses the following format: [label] {object}.ResetImageListHot [GIVING {return}] Where: {label} is an optional Program Execution Label. {object} is a required TOOLBAR object to be accessed. {return } is an optional Numeric Variable that receives the pass or fail result for the execution of the method. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to a TRUE state when the {return} value is zero. Otherwise the ZERO flag is cleared. The {return} value is zero when the method execution is unsuccessful. The return value is one when the method execution is successful. 2. The OVER flag is set to a TRUE state if the {return} variable is too small and the returned value is truncated. Otherwise, the OVER flag is cleared. - In release 9.1A, the WINTYPE property was modified to support four new Window types that are to be used for programs executed under the Windows CE runtimes. CE WINTYPE Values $CEMODALNOMENU EQU 8 Same as $MODAL without any CE MENU support. $CEMODELESSNOMENU EQU 9 Same as $MODELESS without any CE MENU support. $CEFIXEDNOMENU EQU 10 Same as $PRIMARYFIXED without any CE MENU support. $CESIZEABLENOMENU EQU 11 Same as $PRIMARYSIZE without any CE MENU support. Note: 1. The $CEMODALNOMENU, $CEMODELESSNOMENU, $CEFIXEDNOMENU, and $CESIZEABLENOMENU types only apply to the CE Pocket PC runtime versions. If these values are executed for any other CE versions, then they automatically default to to a $PRIMARYSIZE window type. 2. If these new WINTYPE values are used while executing under PLBWIN, then they are implemented to execute as the normal Windows OS window type. Since the CE MENU support does not apply for the normal Window OS environment, it is ignored for PLBWIN. - Added support for methods for the TABCONTROL object. A new method named 'HITTEST' was added for the TABCONTROL object. The new TABCONTROL method is defined as follows: ............................................................... . HitTest Method . The HitTest method determines which tab of a TABCONTROL object, if any, is at the specified screen position as specified by x and y input coordinates. The x and y input coordinates must provided as client coordinates relative to the TABCONTROL object. The method uses the following format: [label] {object}.HitTest [GIVING {return}] USING [*X=]{xcoor}: [*Y=]{ycoor} Where: {label} is an optional Program Execution Label. {object} is a required TABCONTROL object to be accessed. {return } is an optional Numeric Variable that receives the tab selection result for the execution of the method. {xcoor} is a required Numeric Variable or decimal value that is the x-coordinate relative to the TABCONTROL object to be tested. {ycoor} is a required Numeric Variable or decimal value that is the y-coordinate relative to the TABCONTROL object to be tested. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to a TRUE state when the {return} value is zero. Otherwise the ZERO flag is cleared. The {return} value is zero when the {xcoor} and {ycoor} client coordinates are not on a selection tab for the TABCONTROL object. If the {xcoor} and {ycoor} client coordinates are on a selection tab for the TABCONTROL object, then a one relative value is returned that identifies the selection tab number. 2. The OVER flag is set to a TRUE state if the {return} variable is too small and the returned value is truncated. Otherwise, the OVER flag is cleared. 3. The {xcoor} and {ycoor} client coordinates specified as input parameters for this method can be determined from the {result} value as returned by a MOUSEDOWN event for a TABCONTROL object. - Modified the SetItemTextAll method for the LISTVIEW object to provide two new options named $LV_SETITEM_REPLACEROW and $LV_SETITEM_SKIPNULL. When the Options parameter has the $LV_SETITEM_REPLACEROW bit set, then the SetItemTextAll replaces the data in the LISTVIEW row that is specified by the Index parameter value. $LV_SETITEM_REPLACEROW 0x0020 When this bit is set in the Options parameter value, then the SetItemTextAll method replaces the data in the LISTVIEW object for the row that is specified by the Index parameter value. $LV_SETITEM_SKIPNULL 0x0040 This Options parameter value bit is only valid when the $LV_SETITEM_REPLACEROW bit is set. When the $LV_SETITEM_SKIPNULL bit is set in the Options parameter value and the $LV_SETITEM_REPLACEROW is also set, then a null field (back to back delimiter characters) is skipped. Thus, the relative column data is not changed/blanked by the null field. - Modified the MODIFYFLAG for the RICHEDITTEXT object to return a value of 1 or 0; - Modified the EDITNUMBER, EDITTEXT, and RICHEDITTEXT objects to only clear the Windows OS modify state flag when a lost focus event is registered and dispatch to the PLB user program. This change corrects a problem where the MODIFYFLAG property did not reflect the true modification state after one of these objects lost the focus. - Modified the PICT object to support a new method named WriteBmpFile. This new method allows the picture image to be stored into a BMP image file. ............................................................... . WriteBmpFile Method . The WriteBmpFile method writes the PICT picture image into a BMP file that is specified by the FILENAME parameter. The method uses the following format: [label] {object}.WriteBmpFile [GIVING {return}]: USING [*FILENAME=]{filename} Where: {label} is an optional Program Execution Label. {object} is a required PICT object to be accessed. {return } is an optional Numeric Variable that receives the pass or fail result for the execution of the method. {filename} is a required Character String Variable or literal that identifies a BMP file to be written. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to a TRUE state when the {return} value is zero. Otherwise the ZERO flag is cleared. The {return} value is zero when the method execution is successful. If the {return} value is non-zero, then the WriteBmpFile method execution has failed. 2. The OVER flag is set to a TRUE state if the {return} variable is too small and the returned value is truncated. Otherwise, the OVER flag is cleared. 3. The following {return} values describe possible error codes that can be returned by the WriteBmpFile method. Error Code Comment -103 - Unable to create/access the BMP file specified by the FILENAME parameter. -104 - Unable to write the BITMAPFILEHEADER data to the BMP file. -105 - Unable to write the BITMAPINFOHEADER and the RGBQUAD color table to the BMP file. -106 - Unable to write the BMP color pixel data to the BMP file. -107 - An error occurred while closing the BMP file. - Modified the IMAGELIST object to support a new method named WriteBmpFile. This new method allows the IMAGELIST BMP image to be stored into a BMP image file. ............................................................... . WriteBmpFile Method . The WriteBmpFile method writes the IMAGELIST bmp image into a BMP file that is specified by the FILENAME parameter. The IMAGELIST bmp image is written as an image strip where all of the images exist in a single image row. The image strip is required to ensure that this BMP file can be used in the ADDBMP or ADDBMPMASK methods to restore all of the imagelist images. The method uses the following format: [label] {object}.WriteBmpFile [GIVING {return}]: USING [*FILENAME=]{filename} Where: {label} is an optional Program Execution Label. {object} is a required IMAGELIST object to be accessed. {return } is an optional Numeric Variable that receives the pass or fail result for the execution of the method. {filename} is a required Character String Variable or literal that identifies a BMP file to be written. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to a TRUE state when the {return} value is zero. Otherwise the ZERO flag is cleared. The {return} value is zero when the method execution is successful. If the {return} value is non-zero, then the WriteBmpFile method execution has failed. 2. The OVER flag is set to a TRUE state if the {return} variable is too small and the returned value is truncated. Otherwise, the OVER flag is cleared. 3. The following {return} values describe possible error codes that can be returned by the WriteBmpFile method. Error Code Comment 1 - The imagelist does not contain an imagelist handle. 2 - The imagelist does not contain any images. 3 - An error occurred while restoring the color mask for the imagelist images. 4 - The {filename} string name does contain any data. 5 - Invalid imagelist image color bit count while extracting the image. Image color bit count must be 1, 4, 8, 16, 24 or 32. 6 - Insufficient memory detected while building the image strip. -1 - Insufficient resources to process imagelist BMP data. -3 - Imagelist BMP data is not created and can not be processed. -6 - Insufficient memory to process imagelist BMP data. -103 - Unable to create/access the BMP file specified by the FILENAME parameter. -104 - Unable to write the BITMAPFILEHEADER data to the BMP file. -105 - Unable to write the BITMAPINFOHEADER and the RGBQUAD color table to the BMP file. -106 - Unable to write the BMP color pixel data to the BMP file. -107 - An error occurred while closing the BMP file. - Modified the TOOLBAR object to support a new method named WriteImageListBmp. This new method allows imagelists for the TOOLBAR object to be written to BMP image files. ............................................................... . WriteImageListBmp Method . The WriteImageListBmp method retrieves a BMP image from the imagelists that are associated with a TOOLBAR object. The BMP imagelist images retrieved can be the imagelist for the images, the imagelist for the disabled images, or the imagelist for the hot images. The BMP file is written as a image strip where all of the images exist in a single image row. The image strip is required to ensure that this BMP file can be used in the ADDBMP or ADDBMPMASK methods for an IMAGELIST object to restore all of the imagelist images. The method uses the following format: [label] {object}.WriteImageListBmp [GIVING {return}]: USING [*FILENAME=]{filename}: [*TYPE=]{type} Where: {label} is an optional Program Execution Label. {object} is a required TOOLBAR object to be accessed. {return } is an optional Numeric Variable that receives the pass or fail result for the execution of the method. {filename} is a required Character String Variable or literal that identifies a BMP file to be written. {type} is an optional Numeric Variable or decimal value that gives a value to identify the kind of imagelist to be retrieved from the TOOLBAR object. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to a TRUE state when the {return} value is zero. Otherwise the ZERO flag is cleared. The {return} value is zero when the method execution is successful. If the {return} value is non-zero, then the WriteImageListBmp method execution has failed. 2. The OVER flag is set to a TRUE state if the {return} variable is too small and the returned value is truncated. Otherwise, the OVER flag is cleared. 3. The following {type} values identify the TOOLBAR imagelist to be written: Type Value Comment 0 - The TOOLBAR images imagelist is used. 1 - The TOOLBAR disabled images imagelist is used. 2 - The TOOLBAR hot images imagelist is used. If the {type} parameter is not specified, then this method defaults to use the TOOLBAR images imagelist. 4. The following {return} values describe possible error codes that can be returned by the WriteImageListBmp method. Error Code Comment 1 - The TOOLBAR does contain an imagelist or {type} value is invalid. 2 - The requested imagelist does not contain any images. 3 - An error occurred while restoring the color mask for the requested imagelist images. 4 - The {filename} string name does contain any data. 5 - Invalid imagelist image color bit count while extracting the image. Image color bit count must be 1, 4, 8, 16, 24 or 32. 6 - Insufficient memory detected while building the image strip. -1 - Insufficient resources to process imagelist BMP data. -3 - Imagelist BMP data is not created and can not be processed. -6 - Insufficient memory to process imagelist BMP data. -103 - Unable to create/access the BMP file specified by the FILENAME parameter. -104 - Unable to write the BITMAPFILEHEADER data to the BMP file. -105 - Unable to write the BITMAPINFOHEADER and the RGBQUAD color table to the BMP file. -106 - Unable to write the BMP color pixel data to the BMP file. -107 - An error occurred while closing the BMP file. - Modified the LoadXmlFile method for the TREEVIEW object to provide a new option named $TV_XMLRD_ADDLAST that can be used to reverse the order of the sub-items being added. $TV_XMLRD_ADDLAST 0x0004 When this bit is set in the Options parameter value, then the data for sub-item element fields is added to the end of a list of sub-items in the TREEVIEW. - Modified the GETINFO SYSTEM instruction to set the Operating System Version identifier for Windows Vista to be the character '7'. - Modified the FONT ChooseFont method to initialize the Font Dialog using the *COLOR parameter object RGB value. If the *COLOR parameter is not used, then the Font Dialog defaults to the use the RGB value for Black. - Modified the TREEVIEW object to give an O199 error when bad parameter data passed as a parameter in a Treeview method causes the Windows OS Gui functions to give a GPF error. The O199 error is being implemented because there is no method where the runtime can pre-qualify the input user data. - Corrected a problem where the MERGETYPE property was not being set for the CREATE instruction of a MENU object. - Corrected a problem where the MENUORDER property was not being set for the CREATE instruction of a MENU object. - Corrected a GPF error that could occur when a SUBMENU object was referenced using an alternate GENERIC definition after the SUBMENU object has been destroyed. With this change the runtime internal submenu object is not destroyed until all program variable references are destroyed. - Corrected a problem where the tool buttons for a TOOLBAR object were not being reset when the IMAGELIST property was set. This problem caused problems where the tool buttons did not wrap as expected. Also, the tool buttons might not repaint properly. - Corrected a problem where the PICTURE/ICON properties for a BUTTON object could not be set using a SETPROP when the BUTTON was in a COLLECTION object. - Corrected a problem where the ICON & PICTURE properties did not find the correct resource when the resource only existed for the parent window for a BUTTON object. This problem caused the wrong resource to be displayed on the BUTTON object or it caused no resource to be displayed on the BUTTON object. - Corrected a problem where the BTNHEIGHT and BTNWIDTH properties for a TOOLBAR were being reported with unexpected values after the FONT property was changed for the TOOLBAR object. Also, these property values were reported with unexpected values after a button was added to the TOOLBAR. In both of these case, the unexpected values occurred when the TOOLBAR was not activated. - Corrected a problem where a COMREAD using PLBWIN might not receive all of the data when a server closed a socket immediately after the data was written. - Corrected a problem where a VARIANT object with a VARTYPE property set to ($VT_ARRAY+$VT_VARIANT) did not work properly. This would cause unexpected results when this VARIANT object was used. This problem was originally reported with symptoms where a user program received a 'type mismatch' error from ADO during a 'seek' operation on an ADODB recordset. - Corrected a problem where an active FILEPI was not being cleared when a SPLOPEN PFILE operation was executed that caused a prep dialog requiring user input to be activated. Prior to this change, it was possible that all user applications would hang on a FILEPI while waiting for the prep dialog user action to be completed. - Corrected a problem when a PRTCLOSE instruction activates a Print Preview window with a FILEPI currently active for a file that has been opened via SUNFM. This can cause a 'Receive timeout keepalive' error to occur at the SUNFM server for this client. After this error, then an unexpected I81 error can occur in a PLB user program. Please notice that the FILEPI in this case is automatically cleared when the Print Preview window is activated. Also notice that the clearing of the FILEPI has always been done event prior to this change. - Corrected a problem where the droplist window could be visible at the old object coordinates after the LEFT or TOP object property value was changed by a SETPROP instruction. - Corrected a problem where the FONT ChooseFont method would fail with a error result of 5 when the CF_INITTOLOGFONTSTRUCT flag was used. - Corrected a GPF error that might occur in a LISTVIEW.SortColumn method when the LISTVIEW object contained subitem data sizes that were larger then 4096 bytes. - Corrected an O104 error that could occur during a FORMLOAD instruction when a GUI object was anchored with a (TOP,LEFT,RIGHT) setting and the GUI object had a negative WIDTH or HEIGHT. The negative values for WIDTH or HEIGHT could occur in a design phase when the parent of the anchored GUI object was resized to a small WIDTH or HEIGHT. - Corrected a GPF error that would occur in the Automation Server when the Quit method for the Application Object was executed. - Corrected a problem where a FASTEVENT for the AUTOMATION, CONTAINER, and CONTROL objects might not executed properly. This problem was caused with the 9.1 release. ------------------------------------------------------------------------------- PLB(UNIX)- Corrected a SEGV error that was occurring when a FUNCTION was used in a program executed by a Solaris runtime. - Modified the signal crash handler to terminate immediately if a secondary signal error occurs while processing the first signal error. This prevents unexpected results. Please notice that this change only affects the logged data after an abnormal termination of a program occurs. ------------------------------------------------------------------------------- PLBCMP - The TRANSACTION START instruction was modified to allow up to 50 file variables to be specified in the file variable list. - Added a new instruction named NOBREAK that can be used in the CASE clause within the scope between the SWITCH/ENDSWITCH instructions. The NOBREAK instruction can also be used in the WHEN clause within the scope between the SELECT/ENDSELECT instructions. The NOBREAK instruction allows execution for one CASE/WHEN clause to fall into the logic for the next CASE/WHEN/DEFAULT clause. Example: ABC INIT "ABC" . ... . SWITCH ABC . CASE "ABC" DISPLAY "TESTING ABC..." NOBREAK . CASE "DEF" DISPLAY "TESTING DEF..." . DEFAULT DISPLAY "TESTING DEFAULT..." . ENDSWITCH - Corrected a problem where the compiler was giving a compilation error when a READ or WRITE file IO instruction did not have any list variables specified and contained trailing blanks. Example: SEQ FORM "-1" FILE FILE .... . The following instruction was causing a compilation error . when trailing blanks existed after the ';' character. . WRITE FILE,SEQ; - Corrected a problem where the '-ZV' option was not detecting the Function Flags. With this change the '-ZV' compiler option gives an compiler error for any labels that are the same as the Condition or Function Flags. See the 'Flags' section in the Language Reference Manual for a complete list of flags that are detected. - Corrected a problem where the '-ZV' option was causing errors for FLAG conflicting label references declared in a RECORD. The label references in a RECORD no longer cause an error with this change when the '-ZV' option is used. - Corrected a problem where the compiler was always outputting the %ENDIF and CENDIF conditional directives into a source listing. Example Source: %IFNZ 0 %IFZ 0 MOVE ABC,XYZ %ENDIF %ENDIF Example of Bad Source Listing: %IFNZ 0 %ENDIF %ENDIF Example of Good Source Listing after compiler correction: %IFNZ 0 %ENDIF - Corrected a problem where the compiler was reporting a bad label for an undefined execution label when the label size was 1 or 2 characters in length. - Corrected a compiler problem that caused an execution U51 error when the following data variables were used in a program. Example: A DIM 2(3) F FORM 1 . X LIKE A - Corrected a problem where the compiler was giving the wrong error for a RECORD DEFINITION that had a duplicate label reference. Example: A RECORD DEF X DIM 1 RECORDEND . A RECORD DEF X DIM 1 RECORDEND - Corrected a problem where the compiler would give invalid compile errors for a CREATE statement of a SUBMENU when the following code was compiled. This problem could occur when the CREATE of the SUBMENU only specified properties and used the ':' continuation source line character as shown below. Example: FrmMain WINDOW SubVertSpace SUBMENU . CREATE FrmMain;SubVertSpace: RUNNAME="SubVertSpace": OBJECTID=0 - Corrected a problem where the compiler was allowing the HEIGHT property to be compiled in a CREATE/GETPROP/SETPROP for the IMAGELIST object. This property is not allowed for an IMAGELIST. - Corrected a problem where the compiler was giving an invalid compiler error for the following code when the 'zr="."' option was used: Example: a form 1 b form 1 . if ( a="1" or b="1" ) display "xxx" endif - Corrected a problem where an decimal immediate value larger than '99999999' was causing the PLB program code to be invalid for an instruction. This problem was reported for a DMAKE instruction as follows: Example: x dim ^ . dmake x,100000001 ------------------------------------------------------------------------------- PLBDBUG - Corrected a problem that could hang the debugger when the size of the source in the SDB file was larger than '16,777,215' bytes long. - Corrected a problem where the debugger may not close the symbol file when running under plbserve causing it to be locked until plbserve is terminated. - Corrected a problem where the debugger did not close the comfile used for the gui interface during remote debugging when running under plbserve. As a result, the remote mode could only be used one time. ------------------------------------------------------------------------------- PLBDSIGN - Added support for the HELPID property for menu items. - Modified the PROGRESS properties to allow the FONT property data to be specified/changed. - Corrected a problem where a TOOLBUTTON for a TOOLBAR was not being repainted when the AUTOSIZE property for a TOOLBUTTON was changed. - Corrected a designer load error that would occur when a GUI object on a PLF form was anchored with a (TOP,LEFT,RIGHT) setting and the GUI object had a negative WIDTH or HEIGHT. The negative values for WIDTH or HEIGHT could occur in a design phase when the parent of the anchored GUI object had been resized to a small WIDTH or HEIGHT in a prior design session. ------------------------------------------------------------------------------- PLBEQU.INC - Updated for the 9.1C patch release. ------------------------------------------------------------------------------- PLBMETH.INC- Updated for the 9.1C patch release. ------------------------------------------------------------------------------- SA_DLL32.DLL- Modified Sunaccess to support the following keywords. The operational description for the keywords are the same as described in the PL/B Runtime Reference Manual. The keywords for Sunaccess can be placed in the [Environment] section in the 'Sunacces.ini' control file. In addition, a new function named 'SA_CONFIG' has been added to set and get keyword settings under program control. A new Sunaccess Error Code has been added for indicate a bad keyword has been encountered: -101 /* Bad KEYWORD encountered in 'sunacces.ini' */ The keywords for Sunaccess are: PLB_AAMUPPER PLB_CHECKFILE2GB PLB_CHKDRN PLB_COPYFILEBUFFSZ PLB_DPTFILENAME PLB_EOR PLB_FMALTIP PLB_FNC PLB_LOCKIO PLB_NDUP PLB_OPENABS PLB_OPENUSEIP PLB_PATH PLB_PREPUSEIP PLB_PREP87 PLB_RDCLR PLBWIN_XPIO PLBWIN_W33RETRY - Added a new keyword for Sunaccess named 'SA_PRE87B={on|off}'. This keyword controls whether the output buffer for Sunaccess read functions is to be pre-initialized to a null string or not. Prior to the 8.7B Sunaacess version, the output buffer was never pre-initialized. Starting with version 8.7B, the output buffer is always pre-initialized to a null string. When this keyword is set to 'ON', then the output buffer is not pre-initialized. If this keyword is not specified, then the output buffer is pre-initialized by default the same as when the keyword is set to 'OFF'. This keyword affects the following Sunaccess functions: SA_AamRead SA_AamReadLast SA_AamReadKG SA_AamReadKGP SA_IsiRead SA_IsiReadKS SA_IsiReadKP SA_TxtRead - Added a new SA function named 'SA_Config'. This function allows a SunAccess application to change/set keywords settings to control the operations of the SA_DLL32 dll. This means that a Sunaccess program can get/set the settings for runtime keywords without using keywords in the 'sunacces.ini' control file. This function is documented as follows: SA_Config configures specific optional controls for the execution of the sa_dll32 operations. int SA_Cofig ( u32 KeyValue, u32 ConfigValue, u8 *Buffer, u32 BuffLen ); Parameters: KeyValue The KeyValue value identifies the specific keyword control to be used. This value also identifies whether a Get or Set operation is being executed for the keyword. See the notes for the specific KeyValue definitions. ConfigValue This parameter is an input value that may be used when setting a keyword state. See the notes for specific details. Buffer This parameter can be used both as an input and an output. This parameter is always a u8 pointer to a buffer that the calling logic has allocated and initialized. This buffer can contain input data when setting a keyword and may be contain output data when getting a keyword. See the notes for specific keyword details of usage. BuffLen This parameter is an input u32 value that identifies the byte size for the data in the 'Buffer' parameter when it is used as an input parameter. The BuffLen value identifies the maximum buffer size when the the Buffer parameter is used for output. See the notes for specific details of usage. Note the following: 1. The function return integer value may indicate an error or success of the function. In some cases, the return value indicates the number of characters returned to the calling logic in the Buffer parameter. Value Meaning 0 Success. +nn Success and value depends on KeyValue. -nn Error as described in Sunaccess Error keywords. 2. The KeyValue control values can be specified with one of the following values: GET_PLB_CHECKFILE2GB 0 SET_PLB_CHECKFILE2GB 1 GET_PLB_CHKDRN 2 SET_PLB_CHKDRN 3 GET_PLB_COPYFILEBUFFSZ 4 SET_PLB_COPYFILEBUFFSZ 5 GET_PLB_DPTFILENAME 6 SET_PLB_DPTFILENAME 7 GET_PLB_EOR 8 SET_PLB_EOR 9 GET_PLB_FNC 10 SET_PLB_FNC 11 GET_PLB_LOCKIO 12 SET_PLB_LOCKIO 13 GET_PLB_NDUP 14 SET_PLB_NDUP 15 GET_PLB_OPENABS 16 SET_PLB_OPENABS 17 GET_PLBWIN_W33RETRY 18 SET_PLBWIN_W33RETRY 19 GET_PLBWIN_XPIO 20 SET_PLBWIN_XPIO 21 GET_PLB_OPENUSEIP 22 SET_PLB_OPENUSEIP 23 GET_PLB_PREPUSEIP 24 SET_PLB_PREPUSEIP 25 GET_PLB_FMALTIP 26 SET_PLB_FMALTIP 27 GET_PLB_PATH 28 SET_PLB_PATH 29 GET_PLB_AAMUPPER 30 SET_PLB_AAMUPPER 31 GET_PLB_PREP87 32 SET_PLB_PREP87 33 GET_PLB_RDCLR 34 SET_PLB_RDCLR 35 GET_SA_PRE87B 100 SET_SA_PRE87B 101 2. The following KeyValue control values use the function parameters as described below. In each of the tables, the following table values are defined as: Req - The KeyValue is always required and it has a value as defined in the note (2.) description. NA - The SA_Config parameter is not used and is not applicable. Key Config Return Value Value Buffer BuffLen ----------------------------------------------------------- GET_PLB_CHECKFILE2GB 0/1/-nn Req NA NA NA GET_PLB_CHKDRN 0/1/-nn Req NA NA NA GET_PLB_DPTFILENAME 0/1/-nn Req NA NA NA GET_PLB_FNC 0/1/-nn Req NA NA NA GET_PLB_LOCKIO 0/1/-nn Req NA NA NA GET_PLB_NDUP 0/1/-nn Req NA NA NA GET_PLB_OPENABS 0/1/-nn Req NA NA NA GET_PLBWIN_W33RETRY 0/1/-nn Req NA NA NA GET_PLBWIN_XPIO 0/1/-nn Req NA NA NA GET_PLB_PREP87 0/1/-nn Req NA NA NA GET_PLB_RDCLR 0/1/-nn Req NA NA NA GET_SA_PRE87B 0/1/-nn Req NA NA NA Where: 0/1/-nn - The returned value can be a zero, one, or an error value. The '-nn' value in this case indicates an error has occurred. Key Config Return Value Value Buffer BuffLen ---------------------------------------------------------- SET_PLB_CHECKFILE2GB 0/-nn Req 0/1 NA NA SET_PLB_CHKDRN 0/-nn Req 0/1 NA NA SET_PLB_DPTFILENAME 0/-nn Req 0/1 NA NA SET_PLB_FNC 0/-nn Req 0/1 NA NA SET_PLB_LOCKIO 0/-nn Req 0/1 NA NA SET_PLB_NDUP 0/-nn Req 0/1 NA NA SET_PLB_OPENABS 0/-nn Req 0/1 NA NA SET_PLBWIN_W33RETRY 0/-nn Req 0/1 NA NA SET_PLBWIN_XPIO 0/-nn Req 0/1 NA NA SET_PLB_PREP87 0/-nn Req 0/1 NA NA SET_PLB_RDCLR 0/-nn Req 0/1 NA NA SET_SA_PRE87B 0/-nn Req 0/1 NA NA Where: 0/-nn - The returned value can be either a zero or an error value. The '-nn' value in this case indicates an error has occurred. 0/1 - The input value for the ConfigValue parameter is either a 0 or 1. In this case, any non-zero value can be used. Key Config Return Value Value Buffer BuffLen ----------------------------------------------------------- GET_PLB_COPYFILEBUFFSZ nn/-nn Req NA NA NA Where: nn/-nn - The returned value is either the current PLB_COPYFILEBUFFSZ value or it is an error value returned as a negative value. Key Config Return Value Value Buffer BuffLen ----------------------------------------------------------- SET_PLB_COPYFILEBUFFSZ 0/-nn Req n>1024 NA NA Where: 0/-nn - The returned value is either a zero that indicates the new PLB_COPYFILEBUFFSZ has been set or a negative value is returned to indicate that an error has occurred. n>1024 - The input value for the ConfigValue must be greater than 1024. Key Config Return Value Value Buffer BuffLen ----------------------------------------------------------- GET_PLB_EOR eorId/-nn Req NA NA NA Where: eorId/-nn - The returned value is either an 'eorId' value or it is an error value. The expected 'eorId' values can be one of the following values: CFG_EOR_CR 1 CFG_EOR_CR_NOAUTO 2 CFG_EOR_LF 3 CFG_EOR_LF_NOAUTO 4 CFG_EOR_CRLF 5 CFG_EOR_CRLF_NOAUTO 6 CFG_EOR_LFCR 7 CFG_EOR_LFCR_NOAUTO 8 See the description of PLB_EOR for more details. Key Config Return Value Value Buffer BuffLen ----------------------------------------------------------- SET_PLB_EOR 0/-nn Req eorId NA NA Where: 0/-nn - The returned value can be either zero that indicates that the PLB_EOR keyword was set successfully or a negative value is returned to indicate an error. eorId - The input ConfigValue parameter must be one of the 'eorId' values as described for the GET_PLB_EOR keyword control. Key Config Return Value Value Buffer BuffLen ----------------------------------------------------------- GET_PLB_OPENUSEIP nn/-nn Req NA bufPtr maxSize Where: nn/-nn - The returned value can be either the number of bytes that have been stored into the output buffer or it is a negative value that indicates an error has occurred. A returned value of zero in this case indicates that the PLB_OPENUSEIP buffer contains zero bytes. bufPtr - The Buffer input parameter is a pointer to a buffer that is to receive the PLB_OPENUSEIP data. maxSize - The maximum number of bytes that can be stored into the bufPtr buffer. Key Config Return Value Value Buffer BuffLen ----------------------------------------------------------- SET_PLB_OPENUSEIP 0/-nn Req NA bufPtr bufSize Where: 0/-nn - The returned value can be either a zero that indicates that the PLB_OPENUSEIP was successfully set or it is a negative value that indicates that an error has occurred. bufPtr - This is a u8 pointer to a buffer that contains the input data to be stored for the PLB_OPENUSEIP keyword. If the bufPtr is NULL, then the PLB_OPENUSEIP buffer is cleared. bufSize - This value identifies how many bytes of data are provided in the input buffer and is to be stored for the PLB_OPENUSEIP keyword. If the bufSize value is zero, then the PLB_OPENUSEIP buffer is cleared. Key Config Return Value Value Buffer BuffLen ----------------------------------------------------------- GET_PLB_PREPUSEIP nn/-nn Req NA bufPtr maxSize Where: nn/-nn - The returned value can be either the number of bytes that have been stored into the output buffer or it is a negative value that indicates an error has occurred. A returned value of zero in this case indicates that the PLB_PREPUSEIP buffer contains zero bytes. bufPtr - The Buffer input parameter is a pointer to a buffer that is to receive the PLB_PREPUSEIP data. maxSize - The maximum number of bytes that can be stored into the bufPtr buffer. Key Config Return Value Value Buffer BuffLen ----------------------------------------------------------- SET_PLB_PREPUSEIP 0/-nn Req NA bufPtr bufSize Where: 0/-nn - The returned value can be either a zero that indicates that the PLB_PREPUSEIP was successfully set or it is a negative value that indicates that an error has occurred. bufPtr - This is a u8 pointer to a buffer that contains the input data to be stored for the PLB_PREPUSEIP keyword. If the bufPtr is NULL, then the PLB_PLBUSEIP buffer is cleared. bufSize - This value identifies how many bytes of data are provided in the input buffer and is to be stored for the PLB_PREPUSEIP keyword. If the bufSize value is zero, then the PLB_PREPUSEIP buffer is cleared. Key Config Return Value Value Buffer BuffLen ----------------------------------------------------------- GET_PLB_FMALTIP nn/-nn Req NA bufPtr maxSize Where: nn/-nn - The returned value can be either the number of bytes that have been stored into the output buffer or it is a negative value that indicates an error has occurred. A returned value of zero in this case indicates that the PLB_FMALTIP buffer contains zero bytes. bufPtr - The Buffer input parameter is a pointer to a buffer that is to receive the PLB_FMALTIP data. maxSize - The maximum number of bytes that can be stored into the bufPtr buffer. Key Config Return Value Value Buffer BuffLen ----------------------------------------------------------- SET_PLB_FMALTIP 0/-nn Req NA bufPtr bufSize Where: 0/-nn - The returned value can be either a zero that indicates that the PLB_FMALTIP was successfully set or it is a negative value that indicates that an error has occurred. bufPtr - This is a u8 pointer to a buffer that contains the input data to be stored for the PLB_FMALTIP keyword. If the bufPtr is NULL, then the PLB_FMALTIP buffer is cleared. bufSize - This value identifies how many bytes of data are provided in the input buffer and is to be stored for the PLB_FMALTIP keyword. If the bufSize value is zero, then the PLB_FMALTIP buffer is cleared. Key Config Return Value Value Buffer BuffLen ----------------------------------------------------------- GET_PLB_PATH nn/-nn Req NA bufPtr maxSize Where: nn/-nn - The returned value can be either the number of bytes that have been stored into the output buffer or it is a negative value that indicates an error has occurred. A returned value of zero in this case indicates that the PLB_PATH buffer contains zero bytes. bufPtr - The Buffer input parameter is a pointer to a buffer that is to receive the PLB_PATH data. maxSize - The maximum number of bytes that can be stored into the bufPtr buffer. Key Config Return Value Value Buffer BuffLen ----------------------------------------------------------- SET_PLB_PATH 0/-nn Req NA bufPtr bufSize Where: 0/-nn - The returned value can be either a zero that indicates that the PLB_PATH was successfully set or it is a negative value that indicates that an error has occurred. bufPtr - This is a u8 pointer to a buffer that contains the input data to be stored for the PLB_PATH keyword. If the bufPtr is NULL, then the PLB_PATH runtime buffer is cleared. bufSize - This value identifies how many bytes of data are provided in the input buffer and is to be stored for the PLB_PATH keyword. If the bufSize value is zero, then the PLB_PATH runtime buffer is cleared. Key Config Return Value Value Buffer BuffLen ----------------------------------------------------------- GET_PLB_AAMUPPER 0/256/-nn Req NA bufPtr bufSize Where: 0/256/-nn - The returned value can be zero, 256, or a negative value. If the returned value is zero, then the PLB_AAMUPPER keyword buffer does not have any data. If the returned value is 256, then the 256 bytes of data have been returned in the bufPtr buffer. If a negative value is returned, then an error has occurred. bufPtr - The Buffer input parameter is a pointer to a buffer that is to receive the PLB_AAMUPPER data. maxSize - The maximum number of bytes that can be stored into the bufPtr buffer. Key Config Return Value Value Buffer BuffLen ----------------------------------------------------------- SET_PLB_AAMUPPER 0/-nn Req NA bufPtr bufSize Where: 0/-nn - The returned value can be either a zero that indicates that the PLB_AAMUPPER was successfully set or it is a negative value that indicates that an error has occurred. bufPtr - This is a u8 pointer to a buffer that contains the input data to be stored for the PLB_AAMUPPER keyword. The bufPtr must contain 256 bytes of data used to perform uppercase translations. See the PLB_AAMUPPER keyword description for more details. If the bufPtr pointer is NULL, then the PLB_AAMUPPER runtime buffer is cleared. bufSize - This value identifies how many bytes of data are provided in the input buffer and is to be stored for the PLB_AAMUPPER keyword. This value can be either zero or a value of 256 If a bufSize of zero is specified, then the PLB_AAMUPPER runtime buffer is cleared. 3. The following error values have been added to support the SA_Config function. -102 /* Invalid SET_PLB_EOR ConfigValue */ -103 /* Invalid SA_CONFIG KeyValue */ -104 /* Invalid BufLen for SA_CONFIG */ -105 /* Unable to allocate memory for SA_CONFIG */ -106 /* Error setting SET_OPENUSEIP, SET_PREPUSEIP, or SET_FMALTIP */ -107 /* Invalid ConfigValue for SET_PLB_COPYFILEBUFFSZ */ - Corrected a problem where the wrong error codes were being reported for the 9.1, 9.1A, and 9.1B versions of SA_DLL32. This problem was caused when the SA_DLL32 and SUNFHDLL DLLs were merged. - Corrected a problem where optional keywords were not being accessed in the 'sunacces.ini' file. ------------------------------------------------------------------------------- SUNWSRV.DLL - Modified the NT Service DLL to allow server interaction with the Windows Desktop. ------------------------------------------------------------------------------- ADMIN - Corrected a GPF error that occurred while reading log data using the ADMGETINFO instruction. ------------------------------------------------------------------------------- SUNIDE - Fixed up TABIDs on the various dialogs. - Fixed a problem in identifying includes where if an include file's name is entirely part of another include's name, the file would not be added to the source map. - Corrected a bug where if you right clicked on a label, then selected 'goto label', the editor would hang. - Added a context menu to right click on tab control. - Corrected Compare files output when the two files are the same to report no differences instead of an invalid range. - Added beyond end of file difference detection to Compare files function. - Modified the editor got focus to check to see if the disk file has changed since it was last loaded. - Added file timestamp tracking for build process to Try to detect time skew between systems. - Corrected problems where clicking on files in the tab Control would not activate minimized windows. Problem became obvious after a compare files operation. - Corrected a bug where if a variable name started with an include directive, it would incorrectly identify it as an include. (example: INC_REC ) - Fixed Shift TAB when multiple lines are selected to Un-Indent selection. When nothing is selected, tab and shift tab are the same thing. - Corrected a problem where when different programs included a file of the same name with different path direction, only the first one that appeared in the project could be opened. - Corrected a bug where if a compiler error occurred in a record definition, the IDE would not see it and assume a successful compile. - IDE now looks at compiler summary in list file to determine if errors have occurred before trying to run a program after a build. This is to prevent trying to run a program after a bad compile regardless of the IDE actually seeing the error output. - Fixed up About dialog to show both the IDE and Runtime versions. DBGIFACE - Corrected an initialization problem where running multiple times from the IDE could cause the debugger to hang - Increased the communications timeout period to work better when remote debugging - Corrected a problem where the GUI interface may not detect when the debugger exits leaving a hung window. - Modified to check the current ini file for the PLBDBG_HOST keyword. Previous version required this to be set in the environment. -------------------------------------------------------------------------------