Date: 06-05-2009 Subject: PATCH RELEASE 9.3A Runtime Files These release notes pertain to the following programs or files: MAKECONET 9.3A 05 Jun 2009 9,3,1,500 New PLBCLI 9.3A 05 Jun 2009 9,3,1,500 PLBCLICON 9.3A 05 Jun 2009 9,3,1,500 PLBCLIENT 9.3A 05 Jun 2009 9,3,1,500 PLBCLINET 9.3A 05 Jun 2009 9,3,1,500 PLBCON 9.3A 05 Jun 2009 9,3,1,500 PLBCONET 9.3A 05 Jun 2009 9,3,1,500 New PLBDSIGN 9.3A 05 Jun 2009 9,3,1,500 PLBNET 9.3A 05 Jun 2009 9,3,1,500 PLBRUN 9.3A 05 Jun 2009 9,3,1,500 PLBSERVE 9.3A 05 Jun 2009 9,3,1,500 PLBSERVET 9.3A 05 Jun 2009 9,3,1,500 (Threaded Server) PLBWIN 9.3A 05 Jun 2009 9,3,1,500 SUNAAMDX 9.3A 05 Jun 2009 9,3,1,500 SUNINDEX 9.3A 05 Jun 2009 9,3,1,500 SUNSORT 9.3A 05 Jun 2009 9,3,1,500 ODSBAC32.DLL 9.3A 05 Jun 2009 PLBWSEC.DLL 9.3A 05 Jun 2009 9,3,1,500 SA_DLL32.DLL 9.3A 05 Jun 2009 9,3,1,500 SUNCS21.OCX 9.3A 05 Jun 2009 DBGIFACE 9.3A 05 Jun 2009 DESIGNER 9.3A 05 Jun 2009 EDITOR 9.3A 05 Jun 2009 PLBCMP 9.3A 05 Jun 2009 PLBDBUG 9.3A 05 Jun 2009 PROFILER 9.3A 05 Jun 2009 SUNIDE 9.3A 05 Jun 2009 WATCH 9.3A 05 Jun 2009 ADMEQU.INC 9.3A 05 Jun 2009 PLBEQU.INC 9.3A 05 Jun 2009 PLBMETH.INC 9.3A 05 Jun 2009 PLBLineDraw.TTF New *============================================================================== The following files were changed as follows: ------------------------------------------------------------------------------- PLBSERVE - Modified the GETMODE/SETMODE instructions to support a new keyword named '*EXITAFTERSUSPEND={nvar}'. The SETMODE *EXITAFTERSUSPEND keyword only performs when the Windows CE PLBCLIENT INI settings include the keyword named PLBCS_EXITAFTERSUSPEND. In this case, the SETMODE *EXITAFTERSUSPEND keyword can be used to enable and disable the detection of the Windows CE suspended state for the PLBCLIENT process. The SETMODE/GETMODE *EXITAFTERSUSPEND={nvar} control can be used to set or get the current action to be taken for the PLBCS_EXITAFTERSUSPEND keyword at the Plbclient. This control allows a PLB program to set the desired actions when a Plbclient detects a Windows CE Suspend state. The *EXITAFTERSUSPEND control ONLY takes affects when the Plbclient has the PLBCS_EXITAFTERSUSPEND keyword declared. Otherwise, the *EXITAFTERSUSPEND control does nothing. Assuming that the PLBCS_EXITAFTERSUSPEND keyword is declared for a Plbclient INI configuration, a {nvar} value that is non-zero (same as PLBCS_EXITAFTERSUSPEND=ON) causes the Plbclient to terminate when a Windows CE Suspend state is detected. If the {nvar} value is zero (same as PLBCS_EXITAFTERSUSPEND=OFF), this causes the Plbclient to ignore a Windows CE Suspend state change. - Corrected a problem where an Application Server was trying to logon to an indeterminate/non-existing ip address after processing the LS_ADDR keyword. - Corrected a problem where a LINE object was not being drawn properly on a PLBCLIENT when the BOTTOM value was zero and the TOP value was not zero. - Corrected a problem where a FORMLOAD instruction for a very large PLF could cause an O119 error at the PLBCLIENT. ------------------------------------------------------------------------------- PLBCLIENT, PLBCLINET - The client modules were modified to support the PLBWIN_TERMINAL and PLBWIN_TERMINAL_DEBUG keywords. See the descriptions in the runtime section for more information. - Modified the client modules to allow the following keywords to be declared in the PLBCLIENT INI [environment] section. This change is being implemented to allow a specific Plbclient/Plbclinet module to be configured without having the keywords at the Plbserve server. Also, any of the following keywords specified in the PLBCLIENT INI take precedent over the same keyword specified in the PLBSERVE INI file. Keywords now allowed in the PLBCLIENT INI file: PLBWIN_PRTPREV PLB_PRTTIME PLB_PRTRETRY PLB_PRTDEBUG PLBWIN_SYSPORT PLBWIN_ICON PLBWIN_DOSCOLORS PLBWIN_RTL PLBWIN_FBOLD PLBWIN_FSIZE PLBWIN_FONT PLBCE_TASKBAR (Windows CE ONLY!) PLBWIN_NOHELP PLBWIN_FILE PLBWIN_EDIT PLBWIN_HELP PLBWIN_DOSFONT PLBWIN_PRTSCR PLBWIN_TERMINAL PLBWIN_TERMINAL_DEBUG - Modified to work around a problem where the object table could overflow the object name when the object name table from a FORMLOAD instruction contained corrupted data. If an object name overflowed occurred, an O119 error would occur at the FORMLOAD instruction. This problem would only occur when the FORMLOAD instruction was loaded a very large PLF form. ------------------------------------------------------------------------------- PLBSERVE, PLBCLIENT, PLBCLICON, PLBCLINET - Modified the PLBSERVE and clients to support the STREAM instruction when the *STDIN and *STDOUT modes is being used. Prior to this change the *STDIN and *STDOUT could not be streamed between a client and the PLBSERVE runtime. Note: 1. The *STDIN and *STDOUT modes ONLY perform relative to the client StdIn and StdOut IO handles. These modes can not be used to access the PLBSERVE StdIn and StdOut IO handles. 2. The *USERIN and *USEROUT modes ONLY perform relative to a data file that exists on the PLBSERVE server. These modes can not be used to access a data file on the client workstation. 3. A new error O166 has been added to the runtime when the client version does not support the STREAM instruction. 4. The support for the STREAM *STDIN/*STDOUT has been implemented to provide a CGI interface a the client workstation that streams data to and from the PLB program executing at the server. - Modified the PLBSERVE and clients to support the 'CLOCK ENV' instruction. By adding a leading '!' character to the requested environment keyword, the 'CLOCK ENV' instruction retrieves the keyword data from the client workstation. ------------------------------------------------------------------------------- PLB(UNIX), PLBSERVE(UNIX) - Corrected a problem where the FINDFILE instruction under Unix would give invalid results for a file size when it was larger than 2GB. ------------------------------------------------------------------------------- PLBWIN, PLBNET - Modified the runtimes to allow a user command line format where an INI file can be specified and used only when the runtime is being installed as a NT Service. When specifying an INI file, the 'i' INI option MUST always follow the NT Service option as shown in the following example. Example to specify an INI file when installing as NT Service: plbwin -idefault -ic:\path\myinstall.ini - A new keyword named 'PLB_SERVICE_AUTOSTART={ON|OFF}' has been added. When this keyword is set ON, the NT Service is started immediately after it has been successfully installed. - The socket behavior for a COMFILE was changed to a blocking mode to match the behavior of other runtimes. This simplifies their use with API calls. This change has no affect on the operation of a PLB program. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX) - The MODE keyword control for the FINDFILE instruction has been modified to support two new bit values (0x00000100 and 0x00000200). These values cause the last Write timestamp to be returned in a raw form as follows: 0x00000100 - The raw last Write modification timestamp that is returned contains the OS timestamp value adjusted to the current timezone. 0x00000200 - The raw last Write modification timestamp that is returned contains the OS file timestamp value. The value is the actual UTC timestamp maintained by the OS for a file or directory. Note: 1. By default the WRITE keyword returns the last WRITE modification timestamp that is adjusted by a timezone and daylight savings when the 0x00000100/0x00000200 MODE values are NOT used. The default action provides consistent/compatible results as reported by a DOS Shell DIR command and the Windows Explorer as reported for the modification timestamps. - Modified the MODE bit definitions for the OPEN XFILE to allow case insensitive filtered READs. Keyword Value Meaning XFILE_FILTERNOCASE 0x0800 Perform Filtered READ operations in a case insensitive mode. - Added a new keyword named 'FILTERNOCASE={nvar}' to the GETFILE and SETFILE instructions for a XFILE variable. The 'FILTERNOCASE' keyword controls whether the filtered READ instructions for a XFILE are to be performed in a case-sensitive manner or not. By default a filtered READ for a XFILE is performed with case sensitivity. If the FILTERNOCASE keyword for a XFILE is set ON, the filtered READ for the XFILE is performed without case sensitivity. - Added two new keywords to the COPYFILE instruction named 'DECRYPT={svar}' and 'ENCRYPT={svar}'. The DECRYPT keyword is used to decrypt the data read from the {source} file. The ENCRYPT keyword is used to encrypt the data written to the {dest} file. The key strings used for these keywords have the same description as specified for the DECRYPT and ENCRYPT PLB instructions. FORMAT: (2) [label] COPYFILE {source}{sep}{dest}[{sep2}{retcount}[: MODE={mode}[{sep}BLOCKSIZE={size}]: [DECRYPT={decryptkey}]: [ENCRYPT={encryptkey}]] Where: {decryptkey} Optional A character variable that contains a user specified key string. This key must be composed of no more than thirty-two (32) hexadecimal digits. {encryptkey} Optional A character variable that contains a user specified key string. This key must be composed of no more than thirty-two (32) hexadecimal digits. Note: 1. When the {dest} file is written using the ENCRYPT key with a specific BLOCKSIZE, the output file can ONLY be read and decrypted using the exact same key specified in the DECRYPT keyword with the same BLOCKSIZE. - Corrected a problem where the MAILSEND was removing the '<' and '>' brace characters from the {sendto} and {sendfrom} email addresses. - Modified to eliminate the 64k limit when reading an XML element. - Corrected a problem for the AAMDEX, INDEX, and SORT instructions where the S and/or P options did not work when the target character was a single blank (WS) character. Example of problem command line: sort "in,out -S100## ,1-6" - Modified the runtime to load the NT Service Windows API functions dynamically. This change is being done to correct a problem where the 9.3 runtime could not be loaded by Windows 98 or Windows ME. Also, note that the runtime NT Service capability is not supported for Windows 98 or Windows ME. - Corrected a GPF error that could occur when a WRITE FILELIST instruction tried to recovery from a failure and a secondary IFILE key was never written because a 'P' option for a primary record selection was false. - Corrected a problem for the INDEX instruction where the next sequential data record number stored in the ISI header was invalid when the 'g' binary data option was used. The next WRITE IFILE operation using the bad ISI header would cause unexpected binary zero data to be inserted into the TXT data file before the end-user application data record. - Corrected a problem where a CLEARADR instruction was not clearing an array of pointers. This problem was caused by array format changes made in release 9.0. Example: A INIT "A" B INIT "B" . ARR DIM ^(2) . MOVEADR A, ARR(1) MOVEADR B, ARR(2) ... CLEARADR ARR ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE - Corrected a problem where a PRTPAGE *ALIGNMENT=*CENTER operation could cause invalid data output when the *LL was not being used and the logical string size was less than the physical length of a variable. With this change, the *LL mode is implicitly used when PRTPAGE *ALIGNMENT=*CENTER is being used when a data variable is output. - Corrected a problem where a FORMAT error on an ACTIVATE instruction would leave the program Instruction Pointer at an invalid position that would cause a GPF error if the program tried to ignore the error by returning from the TRAP error logic. - Corrected a buffer overflow problem in MAILSEND that would cause a GPF error. This problem would occur when the data size for a MAILSEND parameter or option was larger then 1024 bytes. The {outgoing} and {message} parameters are exceptions for this problem and they would not cause a GPF error. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, ALL GUI CLIENTS - Modified the EXPLODE and IMPLODE instructions to support a COMBOBOX object as follows: The IMPLODE instruction retrieves data from the COMBOBOX object in the same manner as a GETITEM instruction with a -1 item number. If a {dest} variable is a valid COMBOBOX in an EXPLODE instruction, the corresponding {source} field string is placed into the COMBOBOX in the same manner as a SETITEM operation with a -1 value {item} parameter. If the {source} field is NULL, the COMBOBOX is cleared. Note: 1. Both the PLBSERVE and PLBCLIENT must be a version 9.3A or later to allow the COMBOBOX object to be used. - Modified the LISTVIEW and TREEVIEW objects to support two new methods named 'SaveXmlToDim' and 'GetXmlDataSize'. ............................................................... . SaveXmlToDim Method (LISTVIEW) . The SaveXmlToDim method stores the contents of a LISTVIEW object into a PLB DIM variable. The method uses the following format: [label] {object}.SaveXmlToDim [GIVING {return}][: USING [*Options=]{options}][: [*TableName=]{tname}][: [*RowName=]{rname}] Where: [label] Optional A Program Execution Label. {object} Required A LISTVIEW object that is accessed. {return} Optional A Character String Variable that receives the XML data from the LISTVIEW object. {options} Optional A decimal number or Numeric Variable that specifies the store options. {tname} Optional A Character String Variable or literal that specifies the table name. {rname} Optional A Character String Variable or literal that specifies the row name. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO and OVER Condition Flags are always cleared (FALSE). 2. The EOS Condition Flag is set (TRUE) when the XML data is truncated when the return is used. Otherwise, the EOF flag is cleared. 3. The 'options', 'tname', and 'rname' descriptions for the SaveXmlToDim method are the same as the SaveXmlFile method for the LISTVIEW object. 4. The error values for the SaveXmlToDim method are the same as the SaveXmlFile method. When an error occurs for the SaveXmlToDim method, the error value is returned in the {return} DIM variable as follows: "Error: {nnn}" Where: {nnn} is the error value returned as a decimal number. ............................................................... . GetXmlDataSize Method (LISTVIEW) . The GetXmlDataSize method returns the byte size required for a Character String Variable to receive all of the LISTVIEW data stored in XML format. The method uses the following format: [label] {object}.GetXmlDataSize [GIVING {return}][: USING [*Options=]{options}][: [*TableName=]{tname}][: [*RowName=]{rname}] Where: [label] Optional A Program Execution Label. {object} Required A LISTVIEW object that is accessed. {return} Optional A Numeric Variable that receives expected XML data size for the LISTVIEW object data. {options} Optional A decimal number or Numeric Variable that specifies the store options. {tname} Optional A Character String Variable or literal that specifies the table name. {rname} Optional A Character String Variable or literal that specifies the row name. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO Condition Flag is set (TRUE). 2. If {return} is too small to contain the numeric value, the OVER Condition Flag is set (TRUE). 3. The EOS Condition Flag is always cleared (FALSE). 4. The 'options', 'tname', and 'rname' descriptions for the GetXmlDataSize method are the same as the SaveXmlFile method for the LISTVIEW object. ............................................................... . SaveXmlToDim Method (TREEVIEW) . The SaveXMLToDim method stores the contents of a TREEVIEW object into a PLB DIM variable. The method uses the following format: [label] {object}.SaveXmlToDim [GIVING {return}][: USING [*Options=]{options}] Where: [label] Optional A Program Execution Label. {object} Required A TREEVIEW object that is accessed. {return} Optional A Character String Variable that receives the XML data from the TREEVIEW object. {options} Optional A decimal number or Numeric Variable that specifies the store options. {tname} Optional A Character String Variable or literal that specifies the table name. {rname} Optional A Character String Variable or literal that specifies the row name. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO and OVER Condition Flags are always cleared (FALSE). 2. The EOS Condition Flag is set (TRUE) when the XML data is truncated when the return is used. Otherwise, the EOF flag is cleared. 3. The 'options' description for the SaveXmlToDim method is the same as the SaveXmlFile method for the TREEVIEW object. 4. The error values for the SaveXmlToDim method are the same as the SaveXmlFile method. When an error occurs for the SaveXmlToDim method, the error value is returned in the {return} DIM variable as follows: "Error: {nnn}" Where: {nnn} is the error value returned as a decimal number. ............................................................... . GetXmlDataSize Method (TREEVIEW) . The GetXmlDataSize method returns the byte size required for a Character String Variable to receive all of the TREEVIEW data stored in XML format. The method uses the following format: [label] {object}.GetXmlDataSize [GIVING {return}][: USING [*Options=]{options}] Where: [label] Optional A Program Execution Label. {object} Required A TREEVIEW object that is accessed. {return} Optional A Numeric Variable that receives expected XML data size for the TREEVIEW object data. {options} Optional A decimal number or Numeric Variable that specifies the store options. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO Condition Flag is set (TRUE). 2. If {return} is too small to contain the numeric value, the OVER Condition Flag is set (TRUE). 3. The EOS Condition Flag is always cleared (FALSE). 4. The 'options' description for the GetXmlDataSize method is the same as the SaveXmlFile method for the TREEVIEW object. - Modified the '*Options' parameter for the SaveXmlFile and SaveXmlToDim methods of a LISTVIEW object to allow the output data to be lowercase or uppercase. Keyword Value Meaning ... $LV_XMLWR_LOWERCASE 0x0200 Output the data as lowercase. $LV_XMLWR_UPPERCASE 0x0400 Output the data as uppercase. - Modified the '*Options' parameter for the SaveCsvFile method of a LISTVIEW object to allow the output data to be lowercase or uppercase. Keyword Value Meaning ... $LV_CSVWR_LOWERCASE 0x0020 Output the data as lowercase. $LV_CSVWR_UPPERCASE 0x0040 Output the data as uppercase. - Modified the '*Options' parameter for the SaveXmlFile and SaveXmlToDim methods of a LISTVIEW object to allow the Column header data to be output data when there are no rows of data in the LISTVIEW. Keyword Value Meaning ... $LV_XMLWR_OUTPUTHEADER 0x0800 Output the column header when no rows. - Modified the '*Options' parameter for the SaveXmlFile and SaveXmlToDim methods of a LISTVIEW object to allow the Column names to be output as an attribute in the XML data. This mode of operation is enabled by a new bit definition $LV_XMLWR_NAMEATTR. Keyword Value Meaning ... $LV_XMLWR_NAMEATTR 0x1000 Output the column name as attribute. Note: 1. The $LV_XMLWR_NAMEATTR bit definition should be used when the LISTVIEW column names are formatted and/or contain characters that are invalid for XML tag names. - Modified the '*Options' parameter for the SaveXmlFile and SaveXmlToDim methods of a TREEVIEW object to allow the output data to be lowercase or uppercase. Keyword Value Meaning ... $TV_XMLWR_LOWERCASE 0x0010 Output the data as lowercase. $TV_XMLWR_UPPERCASE 0x0020 Output the data as uppercase. - Modified the runtimes and clients to support a terminal mode of operation for the default/MAIN Window that is executing a program that only uses DISPLAY and KEYIN instructions for a character mode application. Two new keywords were added that are named 'PLBWIN_TERMINAL={on}off}' and 'PLBWIN_TERMINAL_DEBUG={on}off}'. These keywords can be placed into the [environment] section of the PLBWIN, PLBSERVE, or PLBCLIENT INI files. PLBWIN_TERMINAL={on|off} If this keyword is not used, the default action is the same as when the 'OFF' state is used. When this keyword is set to the 'ON' state, the runtime allows the size and font for the MAIN Window to be resized to scale the character positions to fit the Window. PLBWIN_TERMINAL_DEBUG={on|off} This keyword is described the same as PLBWIN_TERMINAL except the DEBUG Main Window is affected. Note: 1. When 'PLBWIN_TERMINAL=ON' is being used, any GUI objects that are created and activated on the MAIN Window disables the resizing & scaling capability for the MAIN Window. When all of the GUI objects are deactivated or destroyed, the resizing & scaling capability for the MAIN Window is enabled. 2. Using a Windows True-Type font gives the best resizing results because the Windows OS can control the scaling of a True-Type font. If the PLBWIN_FONT keyword is used to specify a fixed or non-scalable font, the Windows OS may not be able to scale the font and desired font resizing does not work. See the next item for a new font we have provided to accomplish line drawing. - A new true type font called PLBLineDraw.TTF is being provided with this release. This font has all of the original DOS line draw characters and can be used in place of the original PLBWIN.FON or PLBWIN.FXX files. This file must be placed in the \Windows\Fonts directory and the following keyword must be used to activate it: PLBWIN_FONT=PLB LineDraw - Added two new methods for a WINDOW object named 'Scale' and 'ResetScaleOrigin'. ............................................................... . Scale Method (WINDOW) . The Scale method processes all of the GUI objects linked to a WINDOW object and scales each GUI object for the TOP, LEFT, HEIGHT, WIDTH, and FONTSIZE properties relative to the original settings saved when the GUI object was created. The method uses the following format: [label] {object}.Scale [GIVING {return}][: USING [*Height=]{height}][: [*Width=]{width}][: [*Fontsize=]{fontsize}][: [*Flags=]{flags}] Where: [label Optional A Program Execution Label. {object} Required A WINDOW object that is previously created. {return} Optional A Numeric Variable that receives the pass/fail result. {Height} Optional A decimal number or Numeric Variable that gives the scaling factor to be used for the height and top properties of each GUI object on the WINDOW object. {Width} Optional A decimal number or Numeric Variable that gives the scaling factor to be used for the width and left properties of each GUI object on the WINDOW object. {Fontsize} Optional A decimal number or Numeric Variable that gives the scaling factor to be used for the fontsize of each GUI object on the WINDOW object. {Flags} Optional A decimal number or Numeric Variable that specifies provides a bit-mask value to control features of the Scale method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is set if the result is zero. 2. The OVER flag is set if the result variable is too small to receive the result value without truncation. 3. The EOS flag is always set to be FALSE. 4. If the Height scale factor value is not specified, the scale factor is automatically calculated using the current WINDOW height relative to the original WINDOW height. Height Scale = CurrentHeight / OriginalHeight 5. If the Width scale factor value is not specified, the scale factor is automatically calculated using the current WINDOW width relative to the original WINDOW width. Width Scale = CurrentWidth / OriginalWidth 6. If the FontSize scale factor value is not specified, the scale factor used is the smaller scaling value determined from the Height and Width scale values. 7. The scale values for Height, Width, and Fontsize can be a FORM variable with up to 2 decimal points. 8. The Flags bit-mask values are defined as follows: Flags Bit-Mask 0x00000001 - Scale the WINDOW object and position to the original TOP/LEFT property settings. 0x00000003 - Scale the WINDOW object and use the current TOP/LEFT property settings. 0x00000004 - Enable automatic create scale mode for the WINDOW object. When this mode is enabled for the WINDOW object, any CREATE operations for a GUI object on the WINDOW are automatically scaled by the current WINDOW object scale factor. ............................................................... . ResetScaleOrigin Method (WINDOW) . The ResetScaleOrigin method processes through all of the GUI objects linked to a WINDOW object and resets the origin values for the TOP, LEFT, HEIGHT, WIDTH, and FONTSIZE values to the current settings. The method uses the following format: [label] {object}.ResetScaleOrigin [GIVING {return}][: USING [*Flags=]{flags}] Where: [label] Optional A Program Execution Label. {object} Required A WINDOW object that is previously created. {return} Optional A Numeric Variable that receives the pass/fail result. {Flags} Optional A decimal number or Numeric Variable that specifies provides a bit-mask value to control features of the ResetScaleOrigin method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is set if the result is zero. 2. The OVER flag is set if the result variable is too small to receive the result value without truncation. 3. The EOS flag is always set to be FALSE. 4. The Flags settings are reserved for future use. - A 1 second variance can occur for the last write modification time when an enhanced COPYFILE instruction copies a file from a NTFS file system to a FAT32 file system. The problem is that the FAT file system has a granularity of 2 seconds for the last write modification time. This restriction exists because the FAT file system format for a file time has been encoded into a 16-bit value to save space. The seconds field for the file time is limited to be a 4-bit field that is multiplied by two to get the final number of seconds. This means that a file time can not be set to an uneven number of seconds. There is no work around to this issue because the FAT32 file system has this limitation by design. ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Modified the GETITEM and SETITEM for DIM input/output to support an item number of -1. The -1 item number for the GETITEM returns the current selection. The -1 item number for the SETITEM sets the current selection for the COMBOBOX to the item string that matches the DIM input string. If the SETITEM output DIM is NULL and the item number is -1, the COMBOBOX is set to no selection. - Modified the SetItemTextAll method to return the added row index when the $LV_SETITEM_REPLACEROW option to replace the specified item is NOT set. - Modified the MODE keyword for the FINDDIR instruction to support three new values as follows: Value Operations ... 0x00000008 Include the last write time as a delimited field in the return string. In this case, the last write time is adjusted to the current timezone and daylight savings time. 0x00000010 Include the file size as a delimited field in the return string. 0x00000020 Include the raw last write time as a delimited field in the return string. In this case, the last write time that is returned is adjusted to the current timezone. 0x00000040 Include a raw last write time as a delimited field in the return string. In this case, the raw last write time is the OS UTC timestamp and is NOT adjusted to any timezone or daylight savings time. Note: 12. When the file size and last write time data fields are returned. The fields are delimited with a ';' character. 13. Please note that the MODE bit values of 0x00000008, 0x00000020, are 0x00000040 are mutually exclusive. The 0x00000040 value takes precedent over the 0x00000020 and 0x00000008 values. The 0x00000020 value takes precedent over the 0x00000008 value. - Modified the FINDDIR instruction to allow the {source} name to contain a filter timestamp that is appended to the {source} name before the SUNDM '|' delimiter. The ';' character is used as the delimiter character for the filter timestamp. Filter {source} format is: "name;[op]YYYYMMDDhhmmss" Where: name required The search name used for FINDDIR. [op] optional Operation character that can be an '=', '<', or '>'. If the [op] is not specified, the default operation is the same as a greater than or equal action. YYYYMMDDhhmmss required The last modification timestamp that is used to filter the returned values. The last modification timestamp can be specified from 1 to 14 characters to get the desired filter action. Examples: Dest DIM 400 . . This instruction returns all files and directories that have a . YYYY year that is greater than or equal to 2008. . FINDDIR "c:\temp\*.*;2008", Dest . . This instruction returns all files and directories that have a . YYYYMM year/month that is greater than or equal to 2008. . FINDDIR "c:\temp\*.*;200810", Dest . . This instruction returns all files and directories that have a . YYYYMM year/month that is equal to the 200812. This instruction . is on a Data Manager. . FINDDIR "c:\temp\*.*;=200812|127.0.0.1", Dest . . This instruction returns all files and directories that have a . YYYYMMDDhhmmss year/month/day/hour/minute/second that is less . than 20081215062045. . FINDDIR "c:\temp\x.*;<20081215062045", Dest - Modified the GETINFO SYSTEM instruction to retrieve information that is useful when multiple monitors are being used: Column Size Value 603 2 Number of monitors 605 10 Virtual Screen TOP 615 10 Virtual Screen LEFT 625 10 Virtual Screen HEIGHT 635 10 Virtual Screen WIDTH - Added a new method named 'MonitorInfo' for a WINDOW object. This method returns information about a monitor for the WINDOW object. Format: {object}.MonitorInfo GIVING {datastring} USING [*Flags=]{flags}: [*Hwnd=]{hwnd} Where: {datastring} - Is a character string that contains delimited data fields for the monitor data. The fields are delimited using a ',' comma character. There are two basic sets of rectangle data returned by the method. The first rectangle data is the display monitor rectangle and the second is the display work area rectangle. The difference between the two rectangle sets is the height of the Task-Bar when it is on the bottom or top and it is the width of the Task-Bar when it is on the left or right of the monitor. The rectangle data values can be negative and the values are provided as Virtual Screen coordinates. The returned data is defined as follows: {primary},{dT},{dB},{dL},{dR},{wT},{wB},{wL},{wR} Where: {primary} - One numeric character where a value of '1' indicates that the monitor data is for the primary monitor. If the value is '0', the monitor data is for a monitor other than the primary. {dT} - Numeric value that is the top coordinate value for the monitor display rectangle. {dB} - Numeric value that is the bottom coordinate value for the monitor display rectangle. {dL} - Numeric value that is the left coordinate value for the monitor display rectangle. {dR} - Numeric value that is the right coordinate value for the monitor display rectangle. {wT} - Numeric value that is the top coordinate value for the monitor work area rectangle. {wB} - Numeric value that is the bottom coordinate value for the monitor work area rectangle. {wL} - Numeric value that is the left coordinate value for the monitor work area rectangle. {wR} - Numeric value that is the right coordinate value for the monitor work area rectangle. Example of returned sting: "1,0,960,0,1280,0,930,0,1280" ;Primary monitor "0,0,960,0,1280,0,930,0,1280" ;Not primary monitor {flags} - Optional The {flags] value determines this methods return value if the window does not intersect with any display monitor. If the {flags} value is not specified, the default behavior is the same as $MONITOR_DEFAULTTONULL. The {flags} value can be one of the following: $MONITOR_DEFAULTTONULL 0x00000000 The {datastring} is returned as a NULL variable. $MONITOR_DEFAULTTOPRIMARY 0x00000001 The {datastring} contains the data for the primary display monitor. $MONITOR_DEFAULTTONEAREST 0x00000002 The {datastring} contains the data for the display monitor that is nearest to the window. {hwnd} - Optional The {hwnd} value is a HWND handle to a window that is used to determine the display monitor information. If the {hwnd} value is not specified, the default value is the handle for the {object} WINDOW object. A PLB program can use the HWND property to get the handle to a WINDOW object that is to be used. Flags: EOS Note: 1. The numeric coordinate values can be negative. 2. The numeric coordinate values can be eleven characters long including the '-' minus sign. 3. The EOS flag is set TRUE when the destination variable is too small to receive all of the data. - Modified the LISTVIEW InsertAttrRGB method to accept string or numeric values for the *RGBxxx parameters. In addition, an *FLAGS parameter was added to allow this method to accept either rgb or bgr values. [label] {object}.InsertAttrRGB [GIVING {return}] USING [*RGB1=]{rgb}: [*RGB2=]{rgb}: ... [*RGB20=]{rgb}: [*FLAGS=]{flags} Where: {rgb} - The {rgb} parameter can be a Character String Variable or literal that contains a hexadecimal string that defines an RGB value. Also, the {rgb} parameter can be a numeric variable or an immediate decimal or hex value. {flags} - Is a numeric value that is a bit mask to control the operations of the method. Note: 1. The {flags} bit mask value is defined as follows: Mask Value Operation 0x00000001 - Convert all input {rgb} values from input BGR values to RGB values before they are stored as attribute colors. - Modified the LoadCsvFile method for a LISTVIEW object to detect double quote characters that are embedded in the data when the $LV_CSVWR_QUOTED output mode is used. If a double quote character is found in the output data, another double quote is inserted into the output data to give two back to back double quote characters. - Modified the 'SETMODE *F1HELP=ON' feature on a Windows Vista system to default to a HtmlHelp '.chm' file when the 'SETMODE *HelpLib={name}' is NOT being used. - A new list control named *REFRESH has been added to the DISPLAY and KEYIN instructions. The *REFRESH causes a Windows refresh/update to be performed for the Main Window. This control only affects a program executing under the Windows OS. - Corrected a GPF error that occurred when a PICT object was created using a JPG file that used a color format other than RGB or Grayscale. - Corrected a problem where multiple TABCONTROL objects were being updated on multiple WINDOW objects. This problem could cause border flashing on TABCONTROL objects when a SETPROP of a COLLECTION was performed. - Corrected various problems where the TOOLBAR object properties were not giving expected results when property values changed and a Windows OS manifest was being used. In addition, there were changes made to correct repaint problems when the TOOLBAR properties were changed. Note: 1. There is NO direct relationship between the AUTOSIZE property for a TOOLBAR object and the AUTOSIZE property for a TOOLBUTTON object. AUTOSIZE Property for TOOLBAR: The original intent for the AUTOSIZE property of a TOOLBAR was to send an OS message to the Windows control that would allow the TOOLBAR object to automatically resize when TOOLBUTTON sizes changed. The re-evaluation of these problems has found that the Windows OS operation in this area is not giving the desired behavior. Setting the AUTOSIZE property for the TOOLBAR to ON or OFF should have no impact on the autosizing for a TOOLBUTTON object. AUTOSIZE Property for TOOLBUTTON: The AUTOSIZE property for a TOOLBUTTON controls whether the TOOLBUTTON style is to allow the toolbutton to resize dynamically or not. If the TOOLBUTTON AUTOSIZE property is set to ON, the TOOLBUTTON size is changed when TOOLBAR properties are changed. If the TOOLBUTTON AUTOSIZE property is set to OFF, the TOOLBUTTON size is set to the default BTNHEIGHT and BTNWIDH property settings for the TOOLBAR object. 2. The problems identified for the TOOLBAR properties were causing indeterminate operations in the PLB Designer. The problems were most severe when the end-user was using a Windows manifest for the runtime that was executing the PLB Designer. - Corrected a problem where a LISTVIEW SORTCOLUMN method on TIMESTAMP, TIME, and DATE would give unpredictable results when fields being sorted were empty. - Corrected a problem where the selected column used to sort would disappear from the view in a LISTVIEW when the AUTOREDRAW property was set to be FALSE and the column number was greater than 26. - Corrected a problem where the InsertAttrColumn, InsertColumnBgClr, and InsertColumnFgClr methods were storing the user specified column number. This behavior would prevent the column attributes, background color, and foreground color settings to be invalid when the user specified column number did not match the column number that the Windows OS assigned to a column in the LISTVIEW object. Example of instruction that could cause this problem. LV.InsertAttrColumn GIVING nRet USING 99 - Corrected a problem where the text for a ToolButton could be truncated when the Toolbutton was disabled. - Corrected a GPF error when an IMAGELIST object was destroyed and it was being used in multiple GUI objects. - Corrected a problem for a LINE object where it was not possible to draw a straight vertical or horizontal line when the position coordinates were specified as character positions on the MAINWINDOW. Example code for this problem: LINE LINE . CREATE LINE=1:10:3:3, BDRWIDTH=1 ACTIVATE LINE - Modified the SortColumn method for a LISTVIEW object to allow filtering by giving a static filter id in the mask parameter for the numeric sort type. Numeric Sort Type Filter ID string in {mask} parameter: "(0)" - Numeric sort without any filtering. "(1)" - Numeric sort after filtering '$' and ',' characters from the listview subitem data. "(2)" - Numeric sort after filtering '$' and '.' characters from the listview subitem data. "(3)" - Numeric sort after filtering '$', ',', and '.' characters from the listview subitem data. - Corrected a problem where CHECKBOX or RADIO objects were not removed from an object GROUPID object list when they were destroyed. This problem would cause indeterminate problems (including GPF) to occur when a Radio group or Checkbox group were processed in other operations. - The SETPROP for the RADIOGRP and CHECKGRP objects was changed to allow the HEIGHT and WIDTH properties to take affect when they are changed. Prior to this change, the HEIGHT and WIDTH properties for these objects could not be changed by the SETPROP instruction. - Modified the LINE object BDRWIDTH property to default to a value of 1. This corrects a problem where a line would not become visible when the BDRWIDTH property was not specified for a CREATE LINE instruction. Example of problem: CREATE LINE=1:1:5:75 - Corrected a problem where a 'SETMODE *HelpLib={name}' failed to find a '.chm' extension when the {name} contained a path that had an embedded '.' character. - Changed to ignore the PLB_ANSI_OEM setting for a SaveXMLFile method in the LISTVIEW and TREEVIEW objects. This change was made to allow national characters to be output into a XML file in ANSI encoding. Otherwise the national characters values are lost. - Modified the HtmlHelp support to not attach the help window to the current active PLB window. This corrects a problem where the help window would not be useable when the current active PLB window was a MODAL type. With this change the help window is a floating window that does not depend on any PLB window. - Modified the WINPOS property for $PARENTCENTER to support the Windows OS virtual screen coordinates. This change allows a child WINDOW to properly position over a parent Window that exists on a secondary monitor that is positioned to the left of the primary monitor. - Corrected a problem where a lost focus action for a COMBOBOX was not clearing the current focus object for the parent WINDOW. This problem could cause unexpected GOTFOCUS events to occur for the COMBOBOX. ------------------------------------------------------------------------------- PLBCONET - The PLBCONET runtime is a console .NET runtime version generated from the PLBNET runtime using the 'makeconet' utility. ------------------------------------------------------------------------------- PLBNET - Modified the PLBNET runtime to provide console support. ------------------------------------------------------------------------------- PLBNET, PLBCLINET - Modified the .NET runtimes to allow the ALT-key shortcuts to work for .NET objects. This corrects a problem where the ALT-key shortcuts did not work for the .NET Toolstrip and Menustrip objects. - Modified the .NET runtimes to allow the SETMODE *MCURSOR cursor program setting to take affect for NETCONTROL objects for .NET supported cursors. Note: 1. It is not possible to support all SETMODE *MCURSOR cursor settings for NETCONTROL objects because the .NET objects can only support a limited set of .NET cursors. The following SETMODE *MCURSOR settings can be applied to the NETCONTROL objects as follows: Value Cursor NETCONTROL 1 Arrow yes 2 Cross yes 3 I Beam yes 4 Plus yes 5 Wait yes 6 Hand yes 7 Drag N/A 8 Drop N/A - The PLB Imagelist object has been modified to allow it to be used as the assigned imagelist for a .NET property. - The SetFocus instruction has been modified to support a .NET NETCONTROL object. - The runtime was modified to detect a 'CTRL+TAB' key sequence or 'SHIFT+CTRL+TAB' key sequences when a NETCONTROL object has the focus. In these cases, the runtime removes the focus from the NETCONTROL object and places it on the next appropriate NETCONTROL or GUI object in the TabID order. - Changes were implemented in the .NET runtimes to address the following issues for the 'System.Windows.Forms.DataGridView' class created using a NETCONTROL object. Issue 1 With 'AcceptTab=True' being used, entering a TAB character while a DataGridView cell was in edit mode could cause an audible beeping sound to occur. The audible sound in this case is being generated by the DataGridView without any plausible explanation. Modifications were made for runtime to detect a TAB character for a DataGridView .NET object in a NETCONTROL. In this case, the runtime simulates the tab operations to move from cell to cell. The simulated tabbing operations provides a work around to eliminate DataGridView beeping sound when a TAB is keyed. Issue 2 With 'AcceptTab=True' and entering a TAB character while the DataGridView current cell position was the last physical cell in the DataGridView, the program focus was not being positioned to the next NETCONTROL or GUI object in the TabID sequence. In addition, if a 'Shift+TAB' character sequence was entered while the DataGridView current cell position was the first physical cell, the program focus was not changed to a NETCONTROL or GUI object in the TabID sequence prior to the DataGridView. Changes were made to simulate the tab operations to set the focus appropriately when the DataGridView cell position was the first or last cells in the DataGridView. The StandardTab property from the DataGridView determines the tabbing mode that is used for the simulated tabs. See the MSDN documentation for the DataGridView StandardTab for more details. Issue 3 With 'AcceptTab=True' and 'EnterTab=True' for a DataGridView created in a NETCONTROL, a double click operation to invoke the edit mode in a DataGridView cell following by a TAB or ENTER key did not work as expected. Modifications to detect a focus change to the DataGridView were implemented to allow the TAB or ENTER keys to work properly when an end-user clicks to a cell in the DataGridView object. - Modified the NETCONTROL for the internal properties to detect a character DIM or literal with a "True" string. When the "True" character string is detected, the runtime generates a numeric value of 1 to represent a true state value for the internal properties. This change is being made to simplify the end-user usage where a boolean value is expected. Notice, the "True" is case sensitive and must exist as an exact string form. Example: Netc NETCONTROL . CREATE Netc, CLASS="something", ASSEMBLY="assembly" . SETPROP Netc, *Visible="True" ... SETPROP Netc, *Visible="False" Note: 1. If a DIM or literal character string is specified for any .NET properties ( NOT internal properties ), the character string is passed to the .NET framework as a "System.String" control class type. - Corrected a problem where a CREATE/GETPROP/SETPROP operation for the internal properties for the NETCONTROL object did not allow a VARIANT variable as the assigned variable for these properties. The internal properties for the NETCONTROL are special properties that the runtime processes for all .NET objects embedded in the NETCONTROL. The internal properties are defined as follows: NETCONTROL Internal Properties AcceptTab Anchor CauseValid Dock EnterTab Height Left TabId Top Visible Width Zorder - Corrected a problem where a VALIDATE event was not occurring for an EDITTEXT object when the focus was changed from the EDITTEXT object to a NETCONTROL. ------------------------------------------------------------------------------- PLBCMP - Modified the compiler to give a compilation error when a data variable type other than a DIM or DIM VARLIST/RECORD is encountered in a READ instruction with the *CDFON control being used. - Modified the compiler to allow up to 50 AND operators in one expression. The previous limit was a maximum of 10 AND operators. - Modified the GETMODE/SETMODE instructions to support a new keyword named '*EXITAFTERSUSPEND={nvar}'. This keyword is ONLY used to control the PLBCLIENT detect-suspend-thread for Windows CE when the PLBCS_EXITAFTERSUSPEND keyword is specified in the PLBCLIENT INI settings. - The SetFocus instruction has been modified to support a NETCONTROL object. - A new list control named *REFRESH has been added to the DISPLAY and KEYIN instructions. The *REFRESH causes a Windows refresh/update to be performed for the Main Window. This control only affects a program executing under the Windows OS. Note: When the Windows OS Desktop is configured to use the ClearType method for smoothing fonts, it is possible that some of the line drawing graphical characters may be displayed horizontal with character separation. This gives a broken horizontal line appearance. For this kind of scenario, the *REFRESH list control can be performed in a program to force a Main Window refresh that makes the horizontal lines appear as an unbroken line. - Corrected a problem where the ACTIVATE and EVENTREG instructions were referencing an EXTERNAL declaration. When a program was compiled with these instructions before this corrective action, the program would cause a GPF error when it was performed. - Corrected a problem where the compiler could overwrite a source file when an input file name contained multiple extensions and no output name was specified. Example: plbcmp file.pls.b1 plbcmp file.pls.b1.b2 ------------------------------------------------------------------------------- PLBDBUG - Modified the debugger to open a SDB debug file in READ only mode. This is being done to allow multiple debug sessions for a single program to be performed at the same time. Note: 1. The *OPENABS=ON mode is being used to open the SDB file in an absolute readonly mode under Windows. Under Windows, this prevents the SDB file from being changed while a debug session is in progress. Under Unix, the end-user should use caution to not overwrite a SDB file while a debug session is in progress. ------------------------------------------------------------------------------- PLBDSIGN - General updates based on PLBWIN updates. ------------------------------------------------------------------------------- UTILITY - A new utility named 'Makeconet' has been provided to generate a console runtime version from the PLBNET runtime with a version 9.3A or later. - Corrected a problem for the SUNAAMDX, SUNINDEX, and SUNSORT utilities where the S and/or P options did not work when the target character was a single blank (WS) character. Example of problem command line: sunsort in,out -S100# ,1-6 - Modified to correct an invalid syntax error problem for the SUNAAMDX, SUNINDEX, and SUNSORT utilities when a command line from a BATCH file contained a TAB character. This problem occurred for Windows OS version of the utilities. The corrective action is that any TAB character in the command line is replaced by a single WS character. - Corrected a problem for the SUNINDEX utility where the next sequential data record number stored in ISI header was invalid when the 'g' binary data option was used. The next WRITE IFILE operation using the bad ISI header would cause unexpected binary zero data to be inserted into the TXT data file before the end-user application data record. ------------------------------------------------------------------------------- ADMEQU.INC - Added $ADMITEMSRVLOGRECTYPE. ------------------------------------------------------------------------------- PLBEQU.INC - Added a description for the CLIPSIB property. - Changed the FORMAT property to identify that the default is the $DTFORMATSHORT setting. ------------------------------------------------------------------------------- PLBMETH.INC - Updated for SaveXmlToDim and GetXmlDataSize methods. ------------------------------------------------------------------------------- ODSBAC32.DLL - Corrected a problem where the ODSBAC32 driver was giving an unexpected 'not installed' error. - Corrected a problem using the SUNDEV product authorization code for the ODSBAC32 driver. A symptom of this problem was that an 'invalid authorization' error would occur when multiple DBCONNECT/DBDISCONNECT operations were performed in a program. ------------------------------------------------------------------------------- SA_DLL32.DLL - Corrected a problem for the SA_AAMDEX, SA_INDEX, and SA_SORT instructions where the S and/or P options did not work when the target character was a single blank (WS) character. - Corrected a problem for the SA_INDEX instruction where the next sequential data record number stored in ISI header was invalid when the 'g' binary data option was used. The next WRITE IFILE operation using the bad ISI header would cause unexpected binary zero data to be inserted into the TXT data file before the end-user application data record. ------------------------------------------------------------------------------- ADMIN - The Administration Service for logging data has been updated to control log file output for the Sunbelt server products. Two new keywords were added for each Sunbelt server that has the following names: ADMIN_LOG_RECSIZE ADMIN_LOG_RECVAR DM_LOG_RECSIZE DM_LOG_RECVAR LS_LOG_RECSIZE LS_LOG_RECVAR PLBCS_LOG_RECSIZE PLBCS_LOG_RECVAR The 'xx_LOG_RECSIZE={bytesize}' keyword allows the log record size to be specified for a server. The maximum allowed log record size is 1024. The default log record size is 80 when this keyword is not used. The 'xx_LOG_RECVAR={on|off} keyword allows the log records to be output as fixed length records or variable length records. By default the log records are output as fixed length records. - A new server data type has been added to the ADMGETINFO instruction as follows: $ADMITEMSRVLOGRECTYPE 129 This server data type returns a value of zero ( 0 ) for fixed length log records and a value of one ( 1 ) for variable length records. - Corrected a problem for server logging where a log file records were being written over when a log file was set to append mode using a leading '#' character for the log file name. ------------------------------------------------------------------------------- SUNIDE - Made modifications to take advantage of new GETINFO SYSTEM items to make sure IDE window is visible somewhere. - Modified recent menu loading to handle parenthesis in path names. - Modified the Source map to sort the files by extension to make it easier to find a file by its type. - Corrected an I11 error that can occur when clicking on an error line after compiling. - Made changes to track what program a given include is opened from. This way, if an include is part of multiple programs, the IDE remembers which one was used to open the include. - Corrected an I11 error that can occur during IDE startup. - Corrected a problem where a file with no extension did not work. - Removed the "opened as readonly" alert box for program files. ------------------------------------------------------------------------------- SUNCS21.OCX - Enhanced the suncs21.ocx to provide code folding capability. With code folding enabled, lines are drawn in the left margin to indicate structure nesting and structure handling errors (unbalanced if/endif or structured verb mismatch). Tools::Editor Properties::MISC Checkbox "Enable Code Folding" - Corrected a number of GPF type errors. - Corrected an auto-indent bug where a nested ELSE/CASE/WHEN may not revert back to the proper indent level when it follows a subordinate nested structure. - Corrected an intermittent mouse wheel scrolling problem where the scrolling didn't always work. - Added alert to notify when FindNext wrapped back to the starting line. ------------------------------------------------------------------------------- EDITOR.PLC - Corrected an O126 error that could occur after comparing files. - Modified auto-complete to not give combobox methods for a control object. - Added alert to notify when FindNext wrapped back to first found line. ------------------------------------------------------------------------------- DBGIFACE.PLC - Corrected startup problems where the debugger could load a config file from an incorrect location when running stand alone. - Corrected a startup problem where if a bad config file was loaded, it could shut down without any error message. - Made changes to prevent untrapped format error. - Added progress bar to loading an sdb file so user knows the debugger is not hung during startup. - Corrected stand alone execute issues where a specified ini file had a different PLB_PATH than the default plbwin.ini. - Modified watch variables dialog to prevent residual Data from being displayed on subsequent executes of the program. - Modified loading of SDB file to detect hard coded debug statements to add them to the breakpoints window. ------------------------------------------------------------------------------- WATCH.PLC - Corrected addition of new connection information. - Modified warning of data truncation in logging to only be displayed once. - Modified the refresh logic to keep the tab control on the currently selected panel. ------------------------------------------------------------------------------- DESIGNER.PLC - Added undo/repeat of DataGridView column edits. - Corrected undo/repeat of TabPanel edits. - Added check to ensure that the temporary directory was writable. - Added trap to catch backup directory not writable. - Corrected issues with .Net properties that had a large property value string. - Added the ability to store the ServerCanCache property. - Added numerous .Net objects to the toolbox many of which have no screen component. - Corrected an issue with the WinType properties for CE devices. - Added logic to detect the number of monitors in use and reset window positions when using one monitor rather than two. - Enhanced window positioning logic to support multiple monitors correctly. - Added Listview style toolboxes for both standard and .Net controls to provide a consistent look and operation. The toolbox style is configured using the Options/Window panel. - Modified tabid renumbering to allow designation of a tabid value of zero using the right mouse click. - Added the Overtype property to the Edittext object. - Added the ImageIndex property to the ImageList object. - Added standard ImageList support to .Net objects. - Added support for Alignment Lines that show an object's position relative to other objects when drawing, sizing, or moving. The Alignment Lines are configured using an Option panel and can be enabled or disabled using the option page or a toolbar button. - Improved help file handling to better show menu function help (context id based) and property window help (topic based). - Added help topics for all designer editors. - Removed the TopMost option for all alert dialogs used within the designer. - Redesigned the Object Tree window to provide more concise information. -------------------------------------------------------------------------------