Date: 07-01-2019 Subject: RELEASE 10.1B Runtime Files These release notes pertain to the following programs or files: PLBCLICON 10.1B 01 Jul 2019 10.1.2.500 (ComCtl 6) PLBCLIENT 10.1B 01 Jul 2019 10.1.2.500 (ComCtl 6) PLBCLINET 10.1B 01 Jul 2019 10.1.2.500 (ComCtl 6) PLBCON 10.1B 01 Jul 2019 10.1.2.500 (ComCtl 6) PLBCONET 10.1B 01 Jul 2019 10.1.2.500 (ComCtl 6) PLBNET 10.1B 01 Jul 2019 10.1.2.500 (ComCtl 6) PLBSERVE 10.1B 01 Jul 2019 10.1.2.500 (Processed Server) PLBSERVET 10.1B 01 Jul 2019 10.1.2.500 (Threaded Server) PLBWEBSRV 10.1B 01 Jul 2019 10.1.2.500 (Processed Server) PLBWEBSRVT 10.1B 01 Jul 2019 10.1.2.500 (Threaded Server) PLBWIN 10.1B 01 Jul 2019 10.1.2.500 (ComCtl 6) PLBCLICON5 10.1B 01 Jul 2019 10.1.2.500 (ComCtl 5) PLBCLIENT5 10.1B 01 Jul 2019 10.1.2.500 (ComCtl 5) PLBCLINET5 10.1B 01 Jul 2019 10.1.2.500 (ComCtl 5) PLBCON5 10.1B 01 Jul 2019 10.1.2.500 (ComCtl 5) PLBCONET5 10.1B 01 Jul 2019 10.1.2.500 (ComCtl 5) PLBNET5 10.1B 01 Jul 2019 10.1.2.500 (ComCtl 5) PLBWIN5 10.1B 01 Jul 2019 10.1.2.500 (ComCtl 5) PLBNETSUP.DLL 10.1B 01 Jul 2019 10.1.2.500 Required for PLBNET PLBWSEC.DLL 10.1B 01 Jul 2019 10.1.2.500 Req'd PLBWIN/PLBNET PLBCLI.ZIP 10.1B 01 Jul 2019 10.1.2.600 (ComCtl 6) PLBRUN.ZIP 10.1B 01 Jul 2019 10.1.2.600 (ComCtl 6) DBGIFACE 10.1B 01 Jul 2019 PLBCMP 10.1B 01 Jul 2019 PLBDBUG 10.1B 01 Jul 2019 SUNIDE 10.1B 01 Jul 2019 *============================================================================== Notes for WARNINGS: - Changes have been made for version 10.1B for the 'READ FILE (-4)' which performs read prior record operations for a text file. The changes were made to resolve unexpected behaviors when the text file contained deleted records. *============================================================================== Notes for DOCUMENTATION: - In the PL/B Language Reference manual, change the 'WRITE (XFILE)' section as follows: 1. Remove the 'Character String Variable' from the description for the {record} parameter. - In the PL/B Language Reference manual under the 'GETFNAME' section, modify the Note (3.) to include these descriptions: 3a. When a default file {name} is specified, the extension of the {name} parameter is used/compared to the extensions specified by the {type} user filter data. If an extension match is found, the appropriate filter index is set to allow the matching file filter to be presented in the open/prep dialog. If no match is found, the first user filter appears in the open/prep dialog. 3b. If the default file {name} parameter is NULL and the {ext} field is specified in the {type} user filter string, the {ext} extension is matched to the user filters. If the {ext} matches a user filter extension, the filter index is set to allow that user filter to appear in the open/prep dialog. If no match is found, the first user filter appears in the open/prep dialog. - In the PL/B Language Reference manual under the 'EVENTINFO' section, modify the Note (2.) table to include the following: KEYWORD Retrieves the ... ARGx= Retrieves the specified argument for the event. ARGx may be a value of ARG1 to ARG10 indicating the respective argument. - In the PL/B Language Reference manual under the 'AddButton Method (TOOLBAR)' section, add the new parameter named 'InsertAt={index}' [label] {object}.AddButton [GIVING {return}]: USING [*AutoSize=]{autosize}[: . . [*UserData=]{userdata}][: [*InsertAt=]{index}] Where: index Optional. A decimal number or Numeric Variable that specifies the zero based index of the TOOLBAR button where a new TOOLBUTTON is to be inserted. The new TOOLBUTTON is inserted to the left of the TOOLBAR button specified by the index value. - In the PL/B Language Reference manual under the 'Compiler Directives' section, add the new 'WARNING' directive description section as follows: WARNING The WARNING compiler directive allows PL/B program warnings to be embedded in the PL/B programs. This directive outputs the program warning to the compiler output devices and listings. WARNING {literal} Where: literal Required A program literal string with a leading/trailing double quote character. Note the following: 1. The {literal} string is output when a program is being compiled. 2. The {literal} must be properly formed with a leading and trailing double quote character. Otherwise, a compiler error occurs. Example: . Func FUNCTION ENTRY . WARNING "'Func' function must be completed!!" . FUNCIONEND - In the 'PL/B Web Server' manual change the 'PLBWEB_USER_CSS Keyword' section description to read as follows: PLBWEB_USER_CSS={filename.css} This keyword specifies a {filename.css} file that MUST exist in the PWS 'http_root' directory. The {filename.css} contains custom CSS classes used by a user's PL/B program. The user classes can be used to override the default CSS classes declared in the 'plbwebbasic.css' or can be used/declared in the 'WEBCLASS' property of an object. If a {filename.css} user class name is the same as a class name in the 'pblwebbasic.css' file, the user class CSS style behaviors affect all HTML objects using the changed class. Example: PLBWEB_USER_CSS=myprogram.css Where: 1) 'myprogram.css' is a file that is located in the PWS 'http_root' directory. This file contains user classes that conform to the CSS syntax. See this Web link for more details: https://www.w3schools.com/css/default.asp - In the PL/B Language Reference manual under the 'Change Event' section, add a new Note (11.) as follows: Note: 11. If the object is a LISTVIEW, this event occurs when an item selection changes. The Event Result is the item number of the newly selected item. - In the PL/B Language Reference manual under the 'Updated Event' section, make the following changes for the PWS LISTVIEW: 1. Change the description paragraph to read as follows: "The Updated event occurs when the OLE object linked to a CONTAINER object has changed data. Also, this event occurs when a PL/B Web Server LISTVIEW object cell has been modified when using the 'SetEditColumn' method." 2. Modify the Note (2.) to read as follows: "The following Event Result values are set for a CONTAINER object:" 3. Add a new Note (3.) that reads as follows: Note: 3. The Event Result value identifies the PWS LISTVIEW 'Item' and 'SubItem' that was modified by an end-user keying action. EventResult = ( Item * 100 ) + SubItem Example: Item = ( EventResult / 100 ) SubItem = ( EventResult - ( Item * 100 ) ) - In the PL/B Language Reference manual under the 'LISTVIEW' section, add a new Note (14.) as follows: Note: 14. The PL/B Web Server LISTVIEW object supports an UPDATED event ($UPDATED). This event can only be generated after an end-user keyed action has modified a cell while the 'SetEditColumn' method is being used. - In the PL/B Language Reference manual under the 'SQUEEZE Examples' section, change the Example 5 'After:' from 73 to b 37. *============================================================================== The following files have been changed as noted: ------------------------------------------------------------------------------- PLBWEBSRV (HTML\JS\CSS) - Modified to support 10.1A changes. plbwebbasic.css 10.1B 190424 plbwebbasic.js 10.1B 190429 plbwebctls.js 10.1A 190103 plbwebmob.js 10.0A 180402 Support jQuery Mobile plbwebtvcssinfo.html 9.9 161028 plbmobstart.html 10.0A 180402 Support jQuery Mobile plbwebstart.html 10.0A 180402 plbwebstart99a.html 9.9A 170428 - Modified 'plbwebbasic.css' and 'plbwebbasic.js' to support new methods named 'SetEditColumn' and 'SetEditFocus' for the PWS LISTVIEW object. ------------------------------------------------------------------------------- PLBWEBSRV (Windows) - Modified the 'PLBWEB_SSL_PROTOCOL' keyword to support additional settings that allow specific SSL protocol versions to be used by the PWS server. With this change the new setting values can be specified as follows: Value SSL Protocols Allowed are ... 10 - Only the TLSv1.0 protocol version is supported. A server only understands TLSv1.0 client hello messages. 11 - Only the TLSv1.1 protocol version is supported. A server only understands TLSv1.1 client hello messages. 12 - Only the TLSv1.2 protocol version is supported. A server only understands TLSv1.2 client hello messages. - A new keyword named 'PLBWEB_SSL_SETCIPHER={cipher}' has been added to the PWS server. This keyword can be used to specify the SSL cipher(s) to be used for the PWS SSL connections. The syntax format and descriptions of the {cipher} settings can be found at this URL link: https://www.openssl.org/docs/manmaster/man1/ciphers.html Where: {cipher} - Specifies a cipher list that consists of one or more cipher strings separated by colon characters. The {cipher} string is case sensitive. Note: 1. It may become necessary to restrict or include specific server side SSL ciphers to be supported by the PWS server. Examples of cipher lists: PLBWEB_SSL_SETCIPHER=AES Allows 128-bit and 256-bit block ciphers. PLBWEB_SSL_SETCIPHER=ALL:!RC4:!DES:!3DES Use ALL ciphers after removing RC4, DES, and 3DES. - Corrected a problem when the 'PLBWEB_SSL_PROTOCOL' keyword values of 1, 2, or 3 were being used. In this problem scenario, the PWS SSL connections were not setting the minimum protocol version as specified and expected. This could allow s SSL protocol version lower than specified to be used. The 10.1B PWS server corrects this problem. ------------------------------------------------------------------------------- PLBWEBSRV - The PWS server has been modified for the EDITEXT ( numeric type ) and the EDITNUMBER to invoke the number input type which gets the proper keyboard on a mobile device. By default, this behavior occurs as described. However, a new keyword named 'PLBWEB_NUMBERTYPE=off' has been added to the PWS server which can be used to cause the EDITNUMBER and EDITTEXT ( numeric type ) input type for the mobile devices to be the same behavior as provided by PWS runtimes before version 10.1B. - Added a new method named 'SetEditColumn' for the PWS LISTVIEW object. This method can be used to turn on HTML editing for all of the column cells. The HTML editing behaviors are controlled strictly by the client browser operations depending on the type being used. .................................................................... . SetEditColumn Method for PWS LISTVIEW Object . The SetEditColumn method is used to turn on HTML editing for all of the column cells for a PWS LISTVIEW object. The HTML editing behaviors are controlled strictly by the client browser operations depending on the type being used. See this Web link for a description of the tag: https://www.w3schools.com/tags/tag_input.asp This method uses the following format: [label] {object}.SetEditColumn GIVING {return} USING [*INDEX=]{index}: [*TYPE=]{type}[: [*MAXCHARS=]{maxchars}][: [*CLASS=]{class}][: [*LIST=]{list}][: [*FLAGS=]{flags}] Where: {label} is an optional Program Execution Label. {object} is a LISTVIEW object that has been previously Required declared. {return} is a Numeric Variable that returns a value that indicates pass or fail for the method. {index} is a Numeric Variable or decimal number that Required is the zero-based column number of the LISTVIEW being used. {type} is a Numeric Variable or decimal number that Required is a value indicating the type of to be applied to the column cells. {maxchars} is a Numeric Variable or decimal number that Optional is a value indicating the maximum characters to be allowed by the HTML . {class} is a Character String Variable or literal that Optional that contains user CSS Class(es) to be applied to the HTML object. {list} is a Character String Variable or literal that Optional that contains a list of data items separated by a ';' semi-colon character. {flags} is a Numeric Variable or decimal number that Optional Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is set to a TRUE state if the returned value is zero indicating that the method executed successfully. Otherwise, the returned value is non-zero and the ZERO flag is set to a FALSE state indicating that the method failed. 2. The OVER flag is set to a TRUE state if the {return} variable is too small to receive the numeric value. Otherwise, this flag is set to a FALSE state. 3. The EOS flag is always set to the FALSE state. 3. The {type} value indicates the type of input expected for a ListView column cell. The following identifies the supported types: Type Value Description 0 - The ListView Column edit mode is turned off and the HTML is removed from all of the cells in the column specified by the {index} value. 1 - The ListView Column edit mode is turned on and the HTML tag is rendered into each cell for the column specified by the {index} value. In HTML 'type' attribute for the tag is set to be 'text'. In this case, all keyed characters are accepted. 2 - The ListView Column edit mode is turned on and the HTML tag is rendered into each cell for the column specified by the {index} value. In HTML 'type' attribute for the tag is set to be 'text'. However, in this case, the keyed characters for the is limited to be numeric digits '0' to '9' inclusive. Warning: a. When using the numeric {type} value of 2, any {list} items longer than the {maxchars} limit may be stored as the cell value. This behavior DEPENDS on the the browser operational behaviors. 4. The {maxchars} value sets the HTML attribute 'maxlength' value. In this case, the {maxchars} value is intended to limit the number of characters that can be keyed into a Listview column cell. This behavior is controlled by the browser being used. See this Web link for a description of the 'maxlength' attribute: https://www.w3schools.com/tags/att_input_maxlength.asp Warning: a. When using the numeric {type} value of 2, any {list} items longer than the {maxchars} limit may be stored as the cell value. This behavior DEPENDS on the the browser operational behaviors. 5. The {class} string parameter is used to specify a user custom 'class' that is to be applied to class attribute. The default 'class' named 'plblvc' is automatically applied to the HTML . The 'plblvc' class is found in the PWS 'http_root\plbwebbasic.css' file. When this parameter is used, the parameter {class} string replaces the default 'class'. Therefore, the {class} string can be specified using multiple 'class' names. Example of {class} string using multiple class names: *CLASS="plblvc lvcred" a. In this case, the 'plblvc' class exists in the 'http_root\plbwebbasic.css' file for the PWS. b. The 'lvcred' is a user custom class name to be applied. In this case, the 'lvcred' MUST be declared and exist in a CSS file. Th CSS file can be loaded by a PWS server as follows: - Use PLBWEB_USER={filename.css}. - Use the 'Client.AddCss' method to load a user custom CSS file. See this link for a description of the 'class' HTML Global Attribute: https://www.w3schools.com/tags/ref_standardattributes.asp 6. The {list} string parameter is used to specify a list of items that are delimited using a ';' semi-colon character. The {list} string data is rendered as a HTML to the client browser and then referenced using the 'list' attribute. The control/presentation of the 'list' attribute is strictly controlled by a browser when the LISTVIEW cell has the focus in the edit mode. See the following Web link for more information on the 'list' attribute: https://www.w3schools.com/tags/att_input_list.asp 6. The {flags} parameter is a bit-mask value that is to be used to control the behaviors of this method. This parameter is reserved for future usage. - Added a new method named 'SetEditFocus' for the PWS LISTVIEW object. This method can be used to set the current focus to a PWS LISTVIEW object column cell ONLY when the column editing mode is enabled using the 'SetEditColumn' method. .................................................................... . SetEditFocus Method for PWS LISTVIEW Object . The SetEditFocus method is used to set the current focus to a PWS LISTVIEW object column cell ONLY when the column editing mode is enabled using the 'SetEditColumn' method. This method uses the following format: [label] {object}.SetEditFocus GIVING {return} USING [*INDEX=]{index}: [*SUBITEM=]{subitem} Where: {label} is an optional Program Execution Label. {object} is a LISTVIEW object that has been previously Required declared. {return} is a Numeric Variable that returns a value that indicates pass or fail for the method. {index} is a Numeric Variable or decimal number that Required is the zero-based row number of the LISTVIEW being used. {subitem} is a Numeric Variable or decimal number that Required is zero-based value for the subitem on the row to be used. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is set to a TRUE state if the returned value is zero indicating that the method executed successfully. Otherwise, the returned value is non-zero and the ZERO flag is set to a FALSE state indicating that the method failed. 2. The OVER flag is set to a TRUE state if the {return} variable is too small to receive the numeric value. Otherwise, this flag is set to a FALSE state. 3. The EOS flag is always set to the FALSE state. - Modified the PWS LISTVIEW object to support the 'UPDATED' event. When this event is used, it is generated/posted to the PL/B user event que when a PWS LISTVIEW cell has been modified using the 'SetEditColumn' method. In this scenario, the event occurs when an {enter} key action occurs or when some other user action removes the focus from the modified cell. - Modified the PWS server to accept a serial number from a plbwebcli app where the leading alpha character is a lowercase character. This helps to minimize unexpected communication errors due to operator mistakes entering the serial number of the PWS server to be accessed. - Added new PWS keywords named 'PLBWEB_HTTP_PROGERR_INFO={on|off}' and 'PLBWEB_SSL_PROGERR_INFO={on|off}'. These keywords can be used to limit data sent to a client browser when PL/B program errors occur. When these keywords are NOT used, the default behavior is to send normal expected error information to the client browser when a PL/B program error occurs. This is the same as setting the keywords to 'ON'. When these keywords are being used and they are set to 'OFF', then the PL/B error information is NOT sent to the client browser when a PL/B program error occurs. Examples of keyword usage: PLBWEB_HTTP_PROGERR_INFO=OFF Do NOT send PL/B program error information to client browser for a normal HTTP connection. In this case, the PL/B error dialog appears with empty error data fields. PLBWEB_SSL_PROGERR_INFO=OFF Do NOT send PL/B program error information to client browser for a SSL HTTP connection. In this case, the PL/B error dialog appears with empty error data fields. - Modified the default behavior of the PWS server that prevents client URL data from being sent back to the client browser when an error occurs. This can be considered a security vulnerability. Two new PWS keywords named 'PLBWEB_HTTP_ERROR_URL={on|off}' and 'PLBWEB_SSL_ERROR_URL={on|off}' have been added which can change the behavior as described in the previous paragraph. The default behavior is the same as setting these keywords to 'OFF'. Therefore, the default behavior of preventing URL data to be sent to the client can be changed by setting these keywords to 'ON' which allows URL data to be sent to the client browser. Examples of keyword usage: PLBWEB_HTTP_ERROR_URL=ON Send URL data to a client browser when the PWS server encounters a HTTP error using a normal socket listening port. PLBWEB_SSL_ERROR_URL=ON Send URL data to a client browser when the PWS server encounters a HTTP error using a SSL socket listening port. - Fixed a problem where the 'SETMODE *PERCENTCONVERT' was not converting to percentage positioning when the parent PANEL of the PWS objects was set to a 100% size. - Corrected a problem where a 'SETPROP HEIGHT' would reset the width to be in pixel mode. Also a 'SETPROP WIDTH' would reset the height to be in pixel mode. This would destroy any WEBWIDTH, WEBHEIGHT, or PERCENTCONVERT values resulting in unexpected visual presentations. - Corrected issues where the 'SETMODE *PERCENTCONVERT' was not working as expected when the 'DOCK' property was being used. - Corrected a problem where the SETITEM to change a tab label name for a PWS TABCONTROL would not work when accessing the last tab with the highest position {item} value. - Corrected a problem where a SETITEM used to change a tab label name for a PWS TABCONTROL could cause an unexpected Click event to occur. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLBWEBSRV (Windows) - Modified the HTTP instruction to log the path location where the SSL libraries have been loaded from by the Windows OS. - Corrected a FINDFILE problem under Windows where a file name with leading '.' characters was not being found! Example of file names: "c:\path\.filename" "c:\path\..filename" "c:\path\...filename" ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX), PLBWEBSRV - Added a new 'OPTIONS={dnumnvar} optional keyword to the MAILSEND instruction. This keyword can be used to invoke different behaviors for the MAILSEND operations. The {dnumnvar} value is a bit mask where each bit controls different behaviors. The bit mask values are defined as follows: Value Description 0x00000100 When this bit is set to 1, the MAILSEND sends all attachments using the 'Content-Disposition: attachment; filename="file.ext"' header field. If this bit is set to be 0, the MAILSEND sends all attachments using the 'Content-Disposition: attachment; filename="file.ext"' header field. Note: 1. Using the 'Content-Disposition: attachment' header field may be use to cause the email client to present the attachments where they are separate from the main body of the mail message. - Modified the DBEXECUTE to give a D203 error if the DBSEND operation is not executed after a DBCONNECT and before the DBEXECUTE. This corrects the possibility of GPF errors occurring in this scenario. - Modified the XFILE write operations to avoid I83 subcode 9 errors which could occur when XML CDATA was larger than 1024 bytes. - Corrected a problem where a CALL was causing the PL/B FLAGs to be changed when Call parameter data was moved into a LROUITINE, FUNCTION, or ROUTINE input parameter variable. Example of CALL Flag problem: FX FORM "0" . SETFLAG NOT ZERO CALL Rtn USING FX STOP . myFX FORM "9" . Rtn ROUTNE myFX . . At this point, the 'ZERO' flag should be FALSE! . IF ZERO DISPLAY "ZERO state changed by CALL instruction! (invalid)" ELSE DISPLAY "ZERO state not changed by CALL instruction! (Ok)" ENDIF . RETURN - Corrected problems that would give indeterminate behaviors and data when performing READ FILE (-4) (i.e. read prior ) operations when the data file contained deleted records. The indeterminate behaviors included skipping records and/or hanging while repeatedly reading the same record over and over. The unexpected behaviors could exist both with and without use of FILTER(s). - Corrected a problem where the FPOSITB record position could be invalid after a READ (-1) that used a FILTER. - Corrected GPF error when invalid DOM structure existed because bad JSON data was loaded and the resulting errors were ignored using 'LoadJson' XDATA method. This GPF error could occur using the XDATA 'StoreXML', 'StoreXMLSize', or 'SaveXML' method. - Corrected a problem where a FILTER comparison using an all blank literal operand could cause a GPF error during an IO operation. - Corrected a problem where the PRTPAGE *ATTACH command string could process beyond the size of the command string length giving unexpected Snn errors. Example of PRTPAGE *ATTACH giving unexpected S30 error: PF PFILE . PRTOPEN PF, "pdf:", "c:\temp\test.pdf" . .... . Before this correction was implemented, the next statement . could give an unexpected S30 error. . PRTPAGE PF;*ATTACH="F=#"c:\temp\sample.pdf#",I=1" ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLBWEBSRV, ALL GUI CLIENTS - Modified the WINDOW object method 'GetObjectAsPointer' to support a 'flags' bit mask value of 4. The 'flags' bit mask value causes the 'GetObjectAsPointer' method to return the object pointer for the GUI object that has the focus on the WINDOW object. The 'flags' bit mask value of 4 is described as follows: Value Meaning 0x4 Retrieve the current object that has the focus on the WINDOW object. This bit value of 4 must not be combined with any other bit values to take affect. - Added a new method named 'FindData' for the GUI COMBOBOX object. This method finds and returns the COMBOBOX that contains a specific user-defined value. .................................................................... . FindData Method for COMBOBOX Object . The FindData method finds a specific COMBOBOX item by comparing the user-defined values associated the combobox items. This method uses the following format: [label] {object}.FindData GIVING {return} USING [*DATA=]{data} Where: {label} is an optional Program Execution Label. {object} is a COMBOBOX object that has been previously Required declared. {return} is a Numeric Variable that returns a value for the COMBOBOX item. {data} is a Numeric Variable or decimal number that Required is compared against the COMBOBOX user-defined values associated with the COMBOBOX items. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is set to a TRUE state if the returned value is zero. Otherwise, the ZERO flag is set to a FALSE state. 2. The OVER flag is set to a TRUE state if the {return} variable is too small to receive the numeric value. Otherwise, this flag is set to a FALSE state. 3. The EOS flag is always set to the FALSE state. 3. The {return} value is a zero-relative number that is the COMBOBOX item number that has a user-defined value which is the same as the {data} value. If this method does not find a matching item, the {return} value is -1. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBWEBSRV, ALL GUI CLIENTS - Modified the TOOLBAR object 'AddButton' method to support an optional '*InsertAT={index}' parameter where the {index} is a zero-based index of the button being inserted. This method inserts the new button to the left of the button located at the {index} position. - Modified the TOOLBAR 'SetImageList' and 'ResetimageList' methods to force/reset the TOOLBAR toolbutton sizes using the BTNHEIGHT and BTNWIDTH properties when the TOOLBAR AUTOSIZE property is 'off'. This change helps resolve issues caused where the Windows OS can change the toolbar button size when these methods are executed. - Modified the 'SETPROP TOOLBAR' IMAGELIST property to allow the toolbar button's height/width to be reset. This change helps resolve an issue where the Windows OS can change the toolbar button size when the 'IMAGELIST' property is executed. ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Modified the GETFNAME instruction as follows for a user filter: 1. When a default file {name} is specified, the extension of the {name} parameter is used/compared to the extensions specified by the {type} user filter data. If an extension match is found, the appropriate filter index is set to allow the matching file filter to be presented in the open/prep dialog. If no match is found, the first user filter appears in the open/prep dialog. 2. If the default file {name} parameter is NULL and the {ext} field is specified in the {type} user filter string, the {ext} extension is matched to the user filters. If the {ext} matches a user filter extension, the filter index is set to allow that user filter to appear in the open/prep dialog. If no match is found, the first user filter appears in the open/prep dialog. - Modified the HTMLCONTROL object to allow tabbing to work implicitly for the HTML objects only when the explicit 'data-plbtabid={num}' attribute is NOT being used for any HTML objects. This change corrects a problem where tabbing was not working when a URL Web page was loaded into the HTMLCONTROL from some Web site. Note: 1. The focus must be set to the HTMLCONTROL before tabbing can work for the HTML objects that are children to the HTMLCONTROL object. 2. Once the focus is set to the HTMLCONTROL, a focus change back to a PL/B GUI object must be performed by an end-user action or a PL/B program operation to allow tabbing to work for the PL/B GUI objects. - Corrected a problem where the DATALIST output for the AAMDEX, INDEX, and SORT instructions could output unexpected data entries. - Corrected an unexpected S17 error when creating a Sunbelt 'pdf:' output. This error could occur when a Windows font location in the Windows Registry was declared using a fully qualified 'path+fontfile.ttf' filename format. ------------------------------------------------------------------------------- PLBCMP - Modified the compiler to detect a UTF8 BOM ( Byte Order Mark ) identifier sequence of 0xEF, 0xBB, 0xBF at the being of sources opened by the compiler. When the UTF8 BOM identifier is found, the compiler skips past the first 3 bytes of a source file/include. - Modified the source line concatenation processing to check for a possible operation misuse where a valid statement has been concatenated as a comment and resulting in an appropriate warning. Note: 1. The PLBCMP compiler supports source line concatenation where a ':' colon character placed in first position of a source line causes this source line to be concatenated to the previous source line. In this case, the compiler does not process the source line until after all source lines using the ':' in the first position have been concatenated. 2. When a concatenated source line is being processed, the compiler checks the 'comment' field and gives an appropriate warning if the comment starts with a symbol that is the 'same' as a PL/B Language verb. This is implemented to address a scenario where a valid source line has been concatenated by mistake. Example of source line concatenation: DISPLAY "First source line: " : Comment field!! In this case, the compiler combines these 2 lines together before it is compiled as: DISPLAY "First source line: " Comment field!! Example of source line concatenation misuse: DISPLAY "First source line: " : KEYIN field In this case, the compiler combines these 2 lines together before is compiled as: DISPLAY "First source line: " KEYIN field This concatenated source line has been created where the 'KEYIN field' has been appended and it becomes a 'comment' that is processed by the compiler. The compiler has modified to give an appropriate warning if the comment field starts with a symbol that is the same as a PL/B language verb/directive. - Added a new compiler directive named 'WARNING' which can be used to output program compile warnings into program listings. Format: WARNING {literal} Example: . CALL Func . STOP .... Func FUNCTION ENTRY . WARNING "'Func' Function needs to be implemented!!" . FUNCIONEND . - Corrected a problem where logical expression verbs ( IF, BREAK, CONTINUE, ELSE, ELSEIF, UNTIL, and WHILE were NOT performing normal end of statement terminate checks. This correction allows these statements to perform source line concatenation verification for the comment field. - Corrected a problem where the compiler was giving an unexpected error for a GETITEM using a SLIDER and an array syntax for the {data} parameter. ------------------------------------------------------------------------------- PLBDBUG - Corrected character debugger problem by verifying that the 'nnnnnn' memory address of a 'DA nnnnnn' command is good and does not generate a GPF error. This character debugger check is ONLY done when a version 10.1B runtime or newer is being used. ------------------------------------------------------------------------------- DBGIFACE - Modified the GUI debugger 'right-click' end-user action to properly build a debugger command sent to the character debugger. This avoids causing a character debugger GPF error. This change helps resolve a problem where a character debugger GPF error was prematurely terminating the GUI debugging session on an end-user 'right-click' action. Example of GPF using 'dbgiface' GUI Debugger: MOVE "abc", s$cmdlin //9.0E <---'right-click' after // 'E' character // caused GPF in // character debugger! - Corrected a problem where a GUI debugger 'right-click' end-user action was not including an array index reference as part of the PL/B label to be accessed. ------------------------------------------------------------------------------- PLB Designer - Added support for XML form files. - Corrected setting of the selected designer font upon initialization. - Modified to save all dialog positions between editing sessions. - Modified to persist unsupported event routines during the saving of a form to another type such as a plf to a pwf. - Modified the resource editor to support id values greater than five digits. - Corrected the order of menu items being pasted from the clipboard. - Ensures that new items added to collections such as menus or statusbars are visible to the user. - Corrected an error that occurred when collapsing and expanding categories in the properties window. ------------------------------------------------------------------------------- SCHEMAEDITOR.PLC - Modified the schema import function of Add Tables to be more flexible parsing source lines. ------------------------------------------------------------------------------- SUNIDE - Corrected an issue where the right click 'Build program.pls' float menu option was not working. - Corrected an issue where the 'Build All' operation was failing to compile multiple programs back to back. This issue could occur when using the default compiler command line which causes quotes to be used around the compiler's work directory specification. ------------------------------------------------------------------------------- WATCH - Corrected display of version numbers. -------------------------------------------------------------------------------