Date: 10-01-2018 Subject: RELEASE 10.1 Runtime Files These release notes pertain to the following programs or files: EMBEDINI 10.1 01 Oct 2018 10.1.0.500 EMBEDINI64 10.1 01 Oct 2018 10.1.0.500 HEXDUMP 10.1 01 Oct 2018 10.1.0.500 HEXDUMP64 10.1 01 Oct 2018 10.1.0.500 MAKECLI 10.1 01 Oct 2018 10.1.0.500 MAKECON 10.1 01 Oct 2018 10.1.0.500 MAKECONET 10.1 01 Oct 2018 10.1.0.500 MAKEDEF 10.1 01 Oct 2018 10.1.0.500 MAKEMFD 10.1 01 Oct 2018 10.1.0.500 MANAGECE 10.1 01 Oct 2018 10.1.0.500 OBJMATCH 10.1 01 Oct 2018 10.1.0.500 OBJMATCH64 10.1 01 Oct 2018 10.1.0.500 ODBCINST64 10.1 01 Oct 2018 10.1.0.500 PLBCGI 10.1 01 Oct 2018 10.1.0.500 PLBCLICON 10.1 01 Oct 2018 10.1.0.500 (ComCtl 6) PLBCLIENT 10.1 01 Oct 2018 10.1.0.500 (ComCtl 6) PLBCLINET 10.1 01 Oct 2018 10.1.0.500 (ComCtl 6) PLBCON 10.1 01 Oct 2018 10.1.0.500 (ComCtl 6) PLBCONET 10.1 01 Oct 2018 10.1.0.500 (ComCtl 6) PLBNET 10.1 01 Oct 2018 10.1.0.500 (ComCtl 6) PLBSERVE 10.1 01 Oct 2018 10.1.0.500 (Processed Server) PLBSERVET 10.1 01 Oct 2018 10.1.0.500 (Threaded Server) PLBWEBSRV 10.1 01 Oct 2018 10.1.0.500 (Processed Server) PLBWEBSRVT 10.1 01 Oct 2018 10.1.0.500 (Threaded Server) PLBWIN 10.1 01 Oct 2018 10.1.0.500 (ComCtl 6) PLBCLICON5 10.1 01 Oct 2018 10.1.0.500 (ComCtl 5) PLBCLIENT5 10.1 01 Oct 2018 10.1.0.500 (ComCtl 5) PLBCLINET5 10.1 01 Oct 2018 10.1.0.500 (ComCtl 5) PLBCON5 10.1 01 Oct 2018 10.1.0.500 (ComCtl 5) PLBCONET5 10.1 01 Oct 2018 10.1.0.500 (ComCtl 5) PLBNET5 10.1 01 Oct 2018 10.1.0.500 (ComCtl 5) PLBWIN5 10.1 01 Oct 2018 10.1.0.500 (ComCtl 5) SUNAAMDX 10.1 01 Oct 2018 10.1.0.500 SUNAAMDX64 10.1 01 Oct 2018 10.1.0.500 SETGUID 10.1 01 Oct 2018 10.1.0.500 SUNINDEX 10.1 01 Oct 2018 10.1.0.500 SUNINDEX64 10.1 01 Oct 2018 10.1.0.500 SUNLS 10.1 01 Oct 2018 10.1.0.500 SUNMOD 10.1 01 Oct 2018 10.1.0.500 SUNMOD64 10.1 01 Oct 2018 10.1.0.500 SUNSORT 10.1 01 Oct 2018 10.1.0.500 SUNSORT64 10.1 01 Oct 2018 10.1.0.500 WININST 10.1 01 Oct 2018 10.1.0.500 ODSBAC32.DLL 10.1 01 Oct 2018 ODSBAC64.DLL 10.1 01 Oct 2018 PLBNETSUP.DLL 10.1 01 Oct 2018 10.1.0.500 Required for PLBNET PLBWSEC.DLL 10.1 01 Oct 2018 10.1.0.500 Req'd PLBWIN/PLBNET SA_DLL32.DLL 10.1 01 Oct 2018 10.1.0.500 SUNWADO.DLL 10.1 01 Oct 2018 10.1.0.500 SUNWADO25.DLL 10.1 01 Oct 2018 10.1.0.500 SUNWADO28.DLL 10.1 01 Oct 2018 10.1.0.500 SUNWMSQL.DLL 10.1 01 Oct 2018 10.1.0.500 SUNWODBC.DLL 10.1 01 Oct 2018 10.1.0.500 SUNWSRV.DLL 10.1 01 Oct 2018 10.1.0.500 SUNWSRV64.DLL 10.1 01 Oct 2018 10.1.0.500 Required for Sundm64 DBGIFACE 10.1 01 Oct 2018 PLBCMP 10.1 01 Oct 2018 PLBDBUG 10.1 01 Oct 2018 ADMEQU.INC 10.1 01 Oct 2018 PLBEQU.INC 10.1 01 Oct 2018 PLBMETH.INC 10.1 01 Oct 2018 PLBCLI.ZIP 10.1 01 Oct 2018 10.1.0.600 (ComCtl 6) PLBRUN.ZIP 10.1 01 Oct 2018 10.1.0.600 (ComCtl 6) *============================================================================== Notes for some NEW Items: - Updated SQLite to use the '3.24.0 04 Jun 2018' release version. - ERROR object for all PL/B runtimes. *============================================================================== Notes for DOCUMENTATION: - In the Sunbelt PL/B Language Reference manual, change the 'HTTP' instruction descriptions for the *MAXTIMEOUT and *TIMEOUT to include the following sentence: "This timeout value only starts and takes affect after the socket connection has been established." - In the Sunbelt PL/B Language Reference manual, change the 'MAILSEND' instruction descriptions for the *TIMEOUT to include the following sentence: "This timeout value only starts and takes affect after the socket connection has been established." - In the PL/B Runtime Reference manual, change the PLB_TERM Keyword description as follows: Windows Runtimes: If the PLB_TERM keyword is not present, the runtime will use ANSI.DEF as the screen definition file. In addition, the runtimes default to an internal ANSI screen definition if an actual screen definition file cannot be opened. This default action prevents a U03 error from occurring unless the '-s{screendef}' option is used. The U03 error still occurs if the {scrndefname} file specified by the '-s' option does not exist. The default actions of the PLB_SYSTEM, PLB_PATH, PLB_TERM, and the screen definition file have been implemented such that PLBWIN and PLBCON can be executed in a default mode without requiring any specification of UET or INI keywords. Linux\Unix Runtimes: PLBUNIX runtimes check for the existence of either the PLB_TERM or the TERM keywords to determine the screen definition file type to be used. One of these keywords must exist or a U37 error occurs. If a keyword is found and the screen definition file is not found, invalid format, or the wrong version, a U03 error is given. Optionally, the runtime '-s{screendef}' option can be used to override\force another screen definition file to be used. The U03 error occurs if the {scrndefname} file specified by the '-s' option does not exist. - In the PL/B Language Reference manual, change the 'HttpResponse Method (RUNTIME)' section as follows: 1. Change the *OUTPUT keyword to be *OUTFILE. 2. Insert a new Note that reads as follows: "The {return} value indicates whether the method passes or fails for this method as follows: {return} Value Description 0 Method executed successfully. 1 PL/B program attempted to execute the 'HttpResponse' method more than once for REST API response. All attempts to execute this method after the first REST API response are ignored. 2 The {httpcode} value is invalid. 3 Unable to open CGI event for Windows IPC interactions! 4 Unable to create CGI event for Windows IPC interactions! 5 CGI event timeout waiting for Windows IPC interaction! 3. Modify the Note (4.) to read as follows: "The supported {httpcode} values must be a valid http response code as shown in the following table. Any {httpcode} values not defined in the following table are replaced with a '500 Internal Server Error' message and the method {body} is replaced with an appropriate error message." - In the PL/B Web Server reference manual, add the following keyword named 'PLBWEB_CGI_ERRLEVEL={0|1|2}' to the 'Server Configuration Keywords' section as follows: PLBWEB_CGI_ERRLEVEL - Responses for REST API untrapped program errors. PLBWEB_CGI_ERRLEVEL={0|1|2} This keyword specifies the error details to be included in a HTTP 500 error response when a REST API program encounters untrapped PLB errors. By default when this keyword is NOT used is the same as specifying a value of 0. Note: 1. When a PLB REST API program encounters an untrapped error, the PLB runtimes sends a HTTP 500 Internal server error response. 2. When an untrapped error is generated, the HTTP 500 error response can include PL/B error details when the PWS 'PLBWEB_CGI_ERRLEVEL' is set as follows: 0 - The default behavior is used where NO untrapped program error information is returned. 1 - Basic untrapped program error information is returned. 2 - Extended untrapped program error information is returned. >2 - Uses the default value of 0. - In the PL/B Runtime Reference manual, add the following keyword named 'PLB_ERRORLOG={filename}' to the runtime keyword sections: PLB_ERRORLOG - Enable PL/B runtime untrapped error logging. PLB_ERRORLOG={filename} This keyword specifies a path and filename of a file where untrapped PL/B program errors are to be logged. If the 'path' is NOT specified in the {filename}, the log file is located in the directory specified by the PLB_SYSTEM keyword. Note: 1. If the log file size grows to be greater than 1,000,000 bytes, the log file size is reduced and logging continues. 2. Each log entry record has a format as follows: {date} {time} {runtime} {program} {error} Where: {date} - YYYY-MM-DD {time} - hh:mm:ss {runtime} - Runtime version as returned by CLOCK VERSION. {program} - PLB program name if known. {error} - Available error information generated for untrapped error. Example of single log entry for untrapped I03 error: "2018-05-11 08:32:14 10.0B PLBWIN 18 Program: 'xerror.plc' Error: 'I03 00000038 2 WINERR:0x2 File...: myfile.txt'" - In the PL/B Language Reference manual, change the Note (2.) in the DECODE64 instruction section to read as follows: Note (2.) "This instruction translates sets of four (4) characters with ASCII values of A-Z, a-z, '+', and '/' into three (3) characters with eight-bits per byte." - In the PL/B Language Reference manual, change the Note (3.) in the ENCODE64 instruction section to read as follows: Note (3.) "This instruction translates sets of three (3) eight-bits/byte characters into four (4) six bits/byte characters with ASCII values of A-Z, a-z, '+', and '/'. - In the PL/B Language Reference manual, change the 'Open Method (CLIENT)' section as follows: Add a new Note 8 as follows: Note (8.) "The CLIENT 'Open' method {return} values are defined as follows: Return Value Description 0 The client browser 'window.open' JavaScript function returned a browser Window object. The browser 'window.open' JavaScript operations are strictly controlled by the browser in conjunction with the current configuration settings of the browser. Thus, even when the 'window.open' returns a browser Window object, the subsequent browser operations may fail due to some URL accessibility issues which are not known to the PL/B program environment. 10 The client browser 'window.open' JavaScript function returned a null browser Window object. In this case, there is a failure and there is no specific description of the error available. However, it should be noted that this error can occur when the Client Browsers are configured to 'Block Popups'. 11 The client browser 'window.open' JavaScript function has encountered a 'exception' error. The 'exception' error description is currently not available to the PL/B program. Modify the Note 3 {options} value 0x1 to read as follows: Note (3.) "0x1 If the {options} parameter bit value of 1 is being used, the 'Client.Open' method executes in a mode that allows a 'Save-As-Dialog' to appear at the browser client which allows a file name specified in the {url} string to be opened or saved at the client browser. In this case, the {url} must be a file name that can include a relative path specified by a sub-directory to the path declared in the 'PLBWEB_SAVETOCLIENT' keyword. Also, the {name} and {specs} parameters are ignored when using this {options} bit value. The presentation of the 'Save-As-Dialog' is controlled and depends solely on the client browser behaviors." - In the PL/B Language Reference manual under the 'InnerHTML Method' section, change the Note (4.) {flags} description for the $HTML_USE_SCROLLBARS label to read as follows: Note (4.) $HTML_USE_SCROLLBARS - This bit value allows the vertical and horizontal scrollbars to be created for the PANEL object only when using the Plbwin, Plbnet, and Plbserve runtimes. When using an HTMLCONTROL object, this bit value allows the vertical and horizontal scrollbars to be created for when using the Plbwin, Plbnet, Plbserve, and Plbwebsrv runtimes. - In the PL/B Language Reference manual under the 'SCROLLBAR Property' section, add a Note (6.) that reads as follows: Note (6.) When using the HTMLCONTROL object, the SCROLLBAR property allows horizontal and vertical scrollbars to be created when an overflow condition is detected. The scrollbar behaviors depend on the type of PL/B runtime begin used as follows: When using a PL/B Web Server, the SCROLLBAR values are described as follows: Value Keyword Scrollbars are ... 0 $NONE not displayed. (default) 1 $SCRBOTH automatically displayed including both the horizontal and vertical scrollbars. 2 $SCRHORZ horizontal. 3 $SCRNONE not displayed. 4 $SCRVERT vertical. When using a Windows Plbwin, Plbnet, or Plbserve runtime, the scrollbar behaviors are controlled by the Windows IWebBrowser2 ActiveX control. In this case, the Windows IWebBrowser2 ActiveX control enables or disables both horizontal and vertical scrollbars together. Therefore, the 'SCROLLBAR' property values for the Windows HTMLCONTROL have the following behaviors: Value Keyword Scrollbars are ... 0 $NONE not displayed. (default) 1 $SCRBOTH automatically displayed including both the horizontal and vertical scrollbars when an overflow condition is detected by the Windows IWebBrowser2 ActiveX control. 2 $SCRHORZ displayed the same as $SCRBOTH. 3 $SCRNONE not displayed. 4 $SCRVERT displayed the same as $SCRBOTH. - In the PL/B Utilities under the 'PLBDBUG Commands' section, add the following to the command table: Command Function X Execute/Store Debugger Command(s) XC Clear 'X' commands table. XL List 'X' commands table. - Modify the PL/B Utilities 'PLBDBUG' utility to include the following sections: Add new section as follows: ..................................................................... 'Xn' Command Table (PLBDBUG) The 'Xn' command directly sets, changes, and executes debugger commands to/from a character 'X' command table. The 'Xn' commands are implemented to allow one or more debugger commands to be stored and executed by the character debugger. The 'Xn' commands can be used either as debugger console commands or by using the PL/B 'DEBUG CMD={cmd}' instruction in a PL/B user program. The 'Xn' commands have syntax formats described as follows: Formats: (1) Xn (2) Xn {cmddata} (3) Xn! {cmddata} (4) Xn? {cmddata} Where: Xn The 'n' can be a numeric digit from '0 to '9'. When the 'Xn' command is executed, the debug retrieves a previously stored command string and executes it. Xn {cmddata} When this 'Xn' command is executed, the {cmddata} string is stored into the debugger 'X' command table. The {cmddata} string can include one or more of the debugger commands. After the {cmddata} is stored into the debugger 'X' command table. Execution using the simple 'Xn' command causes the {cmddata} string to be parsed and executed. The {cmddata} string has a size limitation of 71 characters including the leading 'Xn '. {cmddata} Syntax [; [...]] Where: - Single character debugger command. Example of 'Xn' entered a the debugger console: "X0 DV S$CMDLIN" This 'X0' command stores the 'DV S$CMDLIN' string into the 'X' command table position 0. "X1 DV S$ERROR$; BP ProgLabel" This 'X1' command stores the 'DV S$ERROR$; BP Proglabel' string into the 'X' command table position 1. "X9 X0; X1" This 'X' command stores the 'X0; X1' string into the 'X' command table position 9. When the simple 'X9' command is executed, then the simple 'X0' is executed followed by the execution of the simple 'X1' command. Xn! {cmddata} When this 'Xn!' command is executed, the {cmddata} string is stored into the debugger 'X' command table the same as described for the 'Xn {cmddata}' command. The '!' appended to form the 'Xn!' causes the {cmddata} string to be parsed and executed immediately by the character debugger. The debugger command behavior depends on the commands used in the {cmddata} string. Example of 'Xn!' entered a the debugger console: "X0! DV S$CMDLIN" This 'X0!' command stores the 'DV S$CMDLIN' string into the 'X' command table position 0. Then the {cmddata} table position 0 is executed by the character debugger. In this case, the 'DV S$CMDLIN' is shown in the character debugger window and the debugger breaks waiting for the next end-user command. "X1! BP ProgLabel; G" This 'X1!' command stores the 'DV S$CMDLIN' string into the 'X' command table position 1. Then the {cmddata} table position 1 is executed by the character debugger. In this case, the 'BP ProgLabel' command is executed by the character debugger which is followed by the execution of the 'G' command. Xn? {cmddata} When this 'Xn?' command is executed, the {cmddata} string is stored into the debugger 'X' command table the same as described for the 'Xn {cmddata}' command. The '?' appended to form the 'Xn?' command causes the character debugger to continue the PL/B program execution immediately after the {cmddata} is stored. In this case, the {cmddata} is NOT executed as the program execution continues. Example of 'Xn?' entered a the debugger console: "X0? BP ProgLabel" This 'X0?' command stores the 'BP ProgLabel' string into the 'X' command table position 0. Then the PL/B program continues to execute WITHOUT executing the 'BP ProgLabel' command. After this 'X0' command string is store, the execution of the simple 'X0' command can be used to execute the 'BP ProgLabel' command. Note: 1. The 'Xn' commands can be executed directly at the character debugger input window. However, the 'X' commands can be executed in the PL/B 'DEBUG CMD={cmd}' instruction when a PL/B program is executing in the debug mode, the character debugger retrieves the {cmd} information and processes the commands. This allows PL/B programs to be programmed to selectively execute and/or build DEBUG commands dynamically. Example of static CMD commands: . .... . This instruction uses the 'X0!' command as follows: . . 1. The command string 'BC *; BP ABC; G' is stored . into the 'X' command table position 0. . . 2. The '!' causes the character debugger to execute . the newly stored 'X0' command. . . 3. The character debugger executes the debug commands . as follows: . . execute> BC * //Clears all break points . execute> BP ABC //Set Break Point for ABC . execute> G //Continue Program Execution . DEBUG CMD="X0! BC *; BP ABC; G" . .... Example of dynamic CMD commands: . .... . This instruction uses the 'X0?' and 'X1?' commands . to store break points for program use. . DEBUG CMD="X0? BP ABC; BL" DEBUG CMD="X1? BP XYZ; BL" . doCmd DIM 71 .... . IF ( CONDITION1 ) . MOVE "X9! BC *; X0; G", doCmd //Use ABC break point! . ELSE IF ( CONDITION2 ) . MOVE "X9! BC *; X1; G", doCmd //Use XYZ break point! . ELSE . MOVE "X9! X0; X1; G", doCmd //Use both break points! . ENDIF DEBUG CMD=doCmd Add new section as follows: ..................................................................... 'XC' Command (PLBDBUG) This debugger command clears one or all of the 'X' commands currently stored in the debugger 'X' command table. The entries in the debugger 'X' command table are numbered from '0' to '9'. Format: XC { <*> | } Where: <*> parameter causes all 'X' commands to be cleared. parameter is a single digit from '0' to '9'. This command causes the nth 'X' command table entry to be cleared. Note: 1. The 'XC' command can be executed from the character debugger input console or this command can be specified in the 'DEBUG CMD={cmd}' instruction executed from a PL/B program. Examples: XC * Clears all entries in the debugger 'X' command table. XC 1 Clears the 'X' command table entry identified by the digit '1'. The 'X' command table entries are numbered from '0' to '9'. Add new section as follows: ..................................................................... 'XL' List Command (PLBDBUG) This debugger command displays all of the 'X' command table entries that are currently being used. Format: XL Each 'X' command entry that contains a command string is displayed as follows: n: {cmddata} Where: 'n' is a single digit from '0' to '9'. {cmddata} is same as described in 'Xn'. Examples: X4 BP MyLabel; BL X5 TP MyData XL This 'XL' shows the current 'X' command table entries as follows: 4: BP MyLabel; BL 5: TP MyData - In the PL/B Language Reference manual, modify the 'DEBUG' instruction description to include the support for the new 'CMD={cmd}' syntax format: (1) [label] DEBUG [MODE={mode}] (2) [label] DEBUG [CMD={cmd}] Where: {cmd} A previously defined Character String Variable or Optional Literal variable that contains Character Debugger commands. The {cmd} data is restricted to 71 characters. Any data beyond 71 characters is ignored. Note: 5. The CMD keyword parameter allows the DEBUG instruction to provide debugger commands that are executed by the character debugger. The DEBUG CMD capability is implemented to provide an easy way to invoke debug commands from a PL/B program without having to use repetitive manual commands while in a debug session. Also, any DEBUG instructions in a PL/B program are ignored when a PL/B program executes normally without debugging. The syntax of the command(s) in the {cmd} data is the same as described in the 'PLBDBUG' utility reference manual. In addition, the 'X' debugger commands are implemented to store and execute one or more commands. - In the PL/B Runtime Reference manual, change the 'PLB_PATH Keyword' section as follows: Add the syntax format as follows: PLB_PATH={path:path...} //PLBUNIX runtimes Add a Note as follows: Note: 1. When using a Windows PL/B runtime, the ';' character is used as the delimiter character between each path specified in the PLB_PATH keyword. 2. When using a Linux/Unix PL/B runtime, the ':' character is used as the delimiter character between each path specified in the PLB_PATH keyword. - In the PL/B Application Server manual, change the 'PLBCS_APSPOOL Keyword' section as follows: Change the following paragraph: "Note that a leading exclamation mark (!) in the printer or spool file name indicates that the operation should be performed on the server regardless of this keyword setting. The PLBCS_APSPOOL keyword may be specified the server's configuration file." to read as: "Note that a leading exclamation mark (!) in the printer or spool file name indicates that the operation should be performed on the client regardless of this keyword setting. The PLBCS_APSPOOL keyword may be specified in the server's configuration file." - In the PL/B Language Reference manual, change the '*APSPOOL (SETMODE)' and '*APSPOOL (GETMODE)' sections as follows: Change the following paragraph: "Note that a leading exclamation mark (!) in the printer or spool file name indicates that the operation should be performed on the server regardless of this keyword setting. The PLBCS_APSPOOL keyword may be specified the server's configuration file." to read as: "Note that a leading exclamation mark (!) in the printer or spool file name indicates that the operation should be performed on the client regardless of this keyword setting. Also, the PLBCS_APSPOOL keyword may be specified in the server's configuration file." - In the Sunbelt PL/B Runtime Reference, change the U21 diagnostic value descriptions under the 'U (Untrappable) Errors' section as follows: Change the U21 diagnostic value descriptions to read: 3: Unable to release audit file lock. 4: Rewind/position operation failed on audit file. 5: Unable to write to audit file. Add the following U21 diagnostic value descriptions: 10: Too many user tasks. 11: Unable to initialize audit file. 12: Invalid number of bytes written to audit file. 13: Unable to position to task count data. 14: Unable to read audit file data. 15: Too many workstation tasks encountered. - In the Sunbelt PL/B Web Server reference, change the 'PLBWEB_LOG_HTTP Keyword' bit mask descriptions to include the following: LOG_ALLREQ 256 (0x100) - Log all client request messages. This bit mask must be used with the LOG_ALL or LOG_REQUEST bit values to take affect. - In the Sunbelt PL/B Web Server reference, add a new keyword description for 'PLBWEB_LINGER=' as follows: PLBWEB_LINGER Keyword PLBWEB_LINGER={seconds} This optional keyword specifies the number of seconds that an OS socket close operation lingers if unsent data is present for the client browser to PWS server socket connection. Note: 1. If this keyword is not used, the default OS linger is used for the socket close operation. 2. This keyword can be changed to take affect without having to restart the PWS server. Once this keyword is changed, any new PWS client logon connections use the keyword setting. - In the PL/B Runtime Reference manual, change the 'PLB_SHIFTAZ Keyword' section as follows: Remove the 'INPUT' and 'OUTPUT': PLB_SHIFTAZ={ON|OFF} Add these notes: PLB_SHIFTAZ=off This keyword setting is the same as the default when keyword is not used. In this case, the normal KEYIN character shift inversion uses Windows routines to test each keyed character for lower or upper case. Appropriate character shift inversion is performed for character values from 0 to 255. PLB_SHIFTAZ=on This keyword setting restricts the range of characters that the KEYIN instruction performs shift inversion on. In this case, the KEYIN ONLY performs the appropriate shift inversion on the characters of 'A' to 'Z' and 'a' to 'z'. All other characters in the range of 0 to 255 are not shift inverted. *============================================================================== The following files have been changed as noted: ------------------------------------------------------------------------------- PLBSERVE(WINDOWS) - Modified to output the Windows OS and Service pack information into the server log file. ------------------------------------------------------------------------------- PLBWEBSRV (HTML\JS\CSS) - Modified to support 10.1 changes. plbwebbasic.css 10.0 171228 plbwebbasic.js 10.1 180611 plbwebctls.js 9.9A 170302 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 the CLIENT object 'open' method in 'plbwebbasic.js' to return an error value when the client browser 'window.open' JavaScript operation fails. The return value values are defined as follows: Return Value Description 10 The client browser 'window.open' JavaScript function returned a null browser Window object. In this case, there is a failure and there is no specific description of the error available. However, it should be noted that this error can occur when the Client Browsers are configured to 'Block Popups'. 11 The client browser 'window.open' JavaScript function has encountered a 'exception' error. The 'exception' error description is currently not available to the PL/B program. ------------------------------------------------------------------------------- PLBWEBSRV (Windows) - Modified the PWS server REST child processing to improve the IPC interactions with the Windows PL/B runtime which is executing the program to perform the REST API operation. This change is needed to prevent possible message loss scenarios when executing a STOP before the message data transfer is completed. - Corrected a memory reallocation problem that could cause the PWS ListView 'SortColumn' method to fail unexpectedly. This would occur when a large number of listview data items existed and a sort operation was performed. This problem ONLY existed for the 'plbwebsrv.exe' which is a 'Process' based executable. The threaded 'plbwebsrvt.exe' DOES NOT have this problem. ------------------------------------------------------------------------------- PLBWEBSRV - Modified to properly setup the character Debugger Window to prevent indeterminate GPF errors caused when the character debugger attempted to create an internal LISTVIEW. - A new keyword named 'PLBWEB_CGI_TIMEOUT={seconds}' has been added for the PL/B Web Server when using REST API operations. This keyword is used to control the elapse time from 3 to 600 seconds where the REST PWS child thread waits for a response from a PL/B runtime executing a program performing a REST API operation. If this keyword is not specified, the default time of 10 seconds used. If the REST PWS child thread times out without receiving a response, a HTTP error code 500 is returned to the client browser performing the REST request. - Modified to make sure that any RUNTIME 'HttpResponse' error pages have a defined content-length header value. - Modified the CLIENT object 'open' method to return an error value when the client browser 'window.open' JavaScript operation fails. The return value values are defined as follows: Return Value Description 10 The client browser 'window.open' JavaScript function returned a null browser Window object. In this case, there is a failure and there is no specific description of the error available. However, it should be noted that this error can occur when the Client Browsers are configured to 'Block Popups'. 11 The client browser 'window.open' JavaScript function has encountered a 'exception' error. The 'exception' error description is currently not available to the PL/B program. - A new keyword named 'PLBWEB_CGI_ERRLEVEL={0|1|2}' has been added to a PWS server. This PWS keyword can be used to allow untrapped program error information to be included with a '500 Internal Server error' response from a runtime that is executing a REST API program. The keyword values are defined as follows regarding untrapped error information in a REST API 500 error response: 0 - The default behavior is used where NO untrapped program error information is returned. 1 - Basic untrapped program error information is returned. 2 - Extended untrapped program error information is returned. >2 - Uses the default value of 0. - Added a new keyword named 'PLBWEB_LINGER={seconds}'. This keyword specifies the number of seconds that an OS socket close operation lingers if unsent data is present for the client browser to PWS server socket connection. - Modified to correct a possible base64 decode\encode problem. - Corrected a problem where the PWS EDITDATETIME, SLIDER, and TABCONTROL, objects were not allowing the MOUSEMOVE, MOUSEDOWN, and MOUSEUP events to be generated. - Modified the HTMLCONTROL to support scrollbars when using a PWS ( PL/B Web Server ) as follows: 1. The HTMLCONTROL 'InnerHtml' method has been modified to support the *FLAGS setting of $HTML_USE_SCROLLBARS. In this case, the HTMLCONTROL
at the client browser allows both horizontal and vertical scrollbars to automatically appear when there is an overflow condition detected. 2. The HTMLCONTROL has been modified to support the 'SCROLLBAR' property. All of the 'SCROLLBAR' property values are supported when using the PWS ( PL/B Web Server ) runtime. Also, the HTMLCONTROL 'SCROLLBAR' property can be used in the CREATE, GETPROP, and SETPROP instructions. In addition, the PL/B Designer supports the 'SCROLLBAR' property for the HTMLCONTROL object in both the PWF or PLF form types. - Corrected a problem where the SETPROP for the 'ToolTip' property was not working for PWS objects. - Modified the PL/B Web Server Http message processing to correct a Http message request hanging problem. When this problem occurred, a PWS Windows Thread or Linux forked Process could cause a symptom where an excessively high CPU % usage existed. Once this unexpected high CPU % usage behavior occurred, the PWS server would have to be restarted to resolve the problem. ------------------------------------------------------------------------------- PLBCLIENT, PLBCLICON, PLBCLINET - Modified the KEYIN instruction operation at the client to detect when the connection to the server is lost. When the connection is lost, the client keyin processing terminates allowing an appropriate communications error dialog to occur with this modification. ------------------------------------------------------------------------------- PLBWIN, PLBNET - Modified the PL/B runtimes to improve the IPC interactions with a PWS server REST child process. With this change, the RUNTIME method named 'HttpResponse' waits for an IPC event indicating that REST data transfer is completed before the PL/B program execution continues. - Modified the RUNTIME 'HttpResponse' method to return numeric results as follows: {return} Value Description 0 Method executed successfully. 1 PL/B program attempted to execute the 'HttpResponse' method more than once for REST API response. All attempts to execute this method after the first REST API response are ignored. 2 The {httpcode} value is invalid. 3 Unable to open CGI event for Windows IPC interactions! 4 Unable to create CGI event for Windows IPC interactions! 5 CGI event timeout waiting for Windows IPC interaction! - Modified the runtimes to give an appropriate error when an invalid icon file is detected. Note, that an icon can be extracted from an icon (.ico), dll, or exe files that contain icon resources. - Modified the runtimes to retry ExtractIcon operations a total of 3 times when errors are detected during startup using the PLBWIN_ICON keyword. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLB(UNIX) - Modified these PLB runtimes to receive\detect a CGI error level when a REST API program is being executed. When a PLB runtime encounters an untrapped error in a REST API program, the error details included in the HTTP 500 response depends on the error level specified by the PWS server which invoked the PLB runtime. See the PWS server keyword named 'PLBWEB_CGI_ERRLEVEL={0|1|2}' for a description of the expected HTTP response error details returned for any PLB untrapped errors. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLBWEBSRV (Windows) - Modified the ADMIN services crash handlers to generate a '.gpf' data file which provides details to help determine the logic location of the GPF . Depending on the crash handler, one of the following file names can be generated: Admin Main Task Crash Handler dm_adminamt.gpf - Data Manager lic_adminamt.gpf - License Server pws_adminamt.gpf - PL/B Web Server plbcs_adminamt.gpf - Application Server plb_adminamt.gpf - Plbwin Automation Server Admin Logon Task Crash Handler dm_adminalt.gpf - Data Manager lic_adminalt.gpf - License Server pws_adminalt.gpf - PL/B Web Server plbcs_adminalt.gpf - Application Server plb_adminalt.gpf - Plbwin Automation Server Admin Interface Task dm_adminait.gpf - Data Manager lic_adminait.gpf - License Server pws_adminait.gpf - PL/B Web Server plbcs_adminait.gpf - Application Server plb_adminait.gpf - Plbwin Automation Server ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX), PLBWEBSRV - Added a new keyword named 'PLB_ERRORLOG={path+filename}' which can be used to log all untrapped errors into the specified file for PLB programs. When a PLB runtime generates an untrapped error using this keyword, a new error log entry is appended to the end of the log file. If the specified log file grows to a size greater than 1,000,000 bytes, the log file is reduced to a size of 30,000 bytes logging continues. The format of an error log record is a follows: {date} {time} {runtime} {program} {error} Where: {date} - YYYY-MM-DD {time} - hh:mm:ss {runtime} - Runtime version as returned by CLOCK VERSION. {program} - PLB program name if known. {error} - Available error information generated for untrapped error. Example of single log entry for untrapped I03 error: "2018-05-11 08:32:14 10.0B PLBWIN 18 Program: 'xerror.plc' Error: 'I03 00000038 2 WINERR:0x2 File...: myfile.txt'" - Corrected a problem when using 'READ File, -4' operations to read a TXT data file backwards from the end of file. The symptom of the problem was that the 3rd 'READ -4' from the end of file would store unexpected data into the READ variable list that was offset by 1 byte. This could cause unexpected behaviors like F01 errors or wrong data in in the 'READ -4' variable list. This problem would ONLY occur under the following scenario: 1. The TXT file was positioned to the end of file. 2. The last 4 records exist in a TXT file as follows: Records Comment 44444abcdef - Record contains data 33333abcdef - Record contains data ........... - Record is deleted 11111abcdef - Record contains data 3. Example Code Exhibiting the problem: File FILE SEQ FORM "-1" BACK FORM "-1" . F5 FORM 5 DX DIM 20 . OPEN File, "test.txt" . POSITEOF File . LOOP READ File, BACK; F5, DX BREAK IF OVER DISPLAY "F5: '", F5, "'...DX: '",*LL, DX, "'" REPEAT . - Corrected a problem where the CLOSE XFILE instruction would perform an implicit flush operation after a ' SETFILE XFILE, FILENAME="" ' instruction was executed. This behavior was causing excessive IO operations attempting to locate and use a physical 'xml' file while using a null file name. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLBWEBSRV, ALL GUI CLIENTS - There is a method named 'CheckValidate' for a WINDOW object which can be used to force a VALIDATE event for the current GUI object on the WINDOW which has the focus and has the VALIDATE event registered. This method allows a PL/B program to generate a VALIDATE event without having any end-user UI action. ............................................................... . CheckValidate Method for WINDOW Object . The CheckValidate method can be used to generate a VALIDATE event for the current GUI object on the WINDOW which has the focus and has the VALIDATE event registered. This method allows a PL/B program to generate a VALIDATE event without have any end-user UI action and without having to know which GUI object has the focus on a WINDOW object. The method uses the following format: [label] {object}.CheckValidate [GIVING {return}] Where: {label} is an optional Program Execution Label. {object} is required and is a WINDOW object that has been previously declared. {return} is a Numeric Variable the returns the result of the method. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the {return} value is zero, this indicates that no VALIDATE event is generated. If a VALIDATE event is generated, the OBJECTID of the GUI object that received the VALIDATE event is returned. If the GUI object that received the VALIDATE event has an OBJECTID value of zero, the value of 99999 is return. 2. The OVER flag is set TRUE if the {return} numeric variable is too small to receive the return value. 3. The EOS flag is always set to be FALSE. 4. If there are no GUI objects on the WINDOW with the focus, the return value is zero and no VALIDATE event is generated. 5. A VALIDATE event can only be generated for a GUI object that has the focus and has the $VALIDATE event registered. - There is a method named 'PrintFormPict' for a WINDOW object that can be used to output a screenshot of a WINDOW to the current default printer. ............................................................... . PrintFormPict Method for WINDOW Object . The PrintFormPict method can be used to output a screenshot of a WINDOW object window to the current default printer. The method uses the following format: [label] {object}.PrintFormPict [GIVING {return}][: [USING [*HWND=]]{hwnd}] Where: {label} is an optional Program Execution Label. {object} is required and is a WINDOW object that has been previously declared. {return} is a Numeric Variable the returns the result of the method. {hwnd} is a Numeric Variable or decimal number that Optional is a GUI object control handle. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the {return} value is zero, this indicates that the PrintFormPict method executed successfully. When a non-zero value is returned, the method failed to execute. 2. The OVER flag is set TRUE if the {return} numeric variable is too small to receive the return value. 3. The EOS flag is always set to be FALSE. 4. If the {hwnd} value is zero, this method outputs a screenshot of the desktop. If the {hwnd} is not specified, the HWND of the WINDOW object executing this method is used. If the {hwnd} is non-zero, the value MUST be a valid handle of a GUI object as determined by the HWND property. 5. This method does nothing when using the PWS server and the {return} value is always zero. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX), PLBWEBSRV, ALL GUI CLIENTS - Added support for new ERROR object. The ERROR object is implemented to provide the PL/B language a means of capturing expanded information about an error event. In addition, this object has a set of methods to retrieve and manage the error data that is gathered by the runtimes. The ERROR object exists as an internal PL/B object and it is referenced by a label for an ERROR object declared in a PL/B program. This object does not need to be created and it has no events or properties. The operations for this object are performed using PL/B methods. Even though there may be multiple/different program references declared in a PL/B program, all of the PL/B program references access only one internal ERROR object for a runtime instance. To define an ERROR object in a PL/B program, use the following statement format: [label] ERROR [%|^][arraysize] Where: label Optional. A Program Execution Label. % Optional. Denotes the item as being GLOBAL. ^ Optional. Denotes the item as being a POINTER. arraysize Optional. An Integer decimal constant, CONST variable or equated value indicating the number of array items. Flags Affected: NONE Note the following: 1. The ERROR object is a runtime instance component that allows PL/B programs to access/manage error data. 2. There are no properties for an ERROR object. 3. There are no events for an ERROR object. 4. There are no GUI PL/B instructions other than GUI methods that are used with a ERROR object. The ERROR object has the following methods: AddError Adds a user Lxx error (Trappable) or lxx (Untrappable). ClearAll This method clears all of the current stack errors. ClearError Clear one error from the error stack. GetCode This method retrieves the 'Zxxx' error as described in the 'PL/B Runtime Reference' under the 'Runtime Errors' section. GetCount Get the count of errors on the error stack. GetMaxTextSize Get the maximum text size of a message or sub message string. GetMessage Get the message associated with error. GetSubCode This method retrieves the 'nnnnn' subcode error value as described in the 'PL/B Runtime Reference' under the 'Runtime Errors' section. GetSubMessage Get zero or more sub messages for a specified error on the error stack. LogMessages Manage logging errors allowing logging to be turned on, turned off, and resetting the log file. GetErrorStackSize Get the maximum error stack size. SetErrorStackSize Set the maximum error stack size between 1 to 100 inclusive. GetProgram Get the program name for an error on the error stack. GetTime Get the date/time for an error on the error stack. 5. The ERROR object is implemented to include these basic components/concepts: a. Supports user generated errors. b. Provide a means where users can log errors. c. Provide a means where PL/B runtimes errors can be expanded and managed with consistent program interfaces. d. Provide a PL/B error stack accessible by ERROR object methods. - The following methods have been implemented for the new ERROR object: ...................................................................... . AddError Method for ERROR Object . The AddError method can be used to add a user error 'Lxx' as a trappable error or a 'lxx' as an untrappable error. This method uses the following format: [label] {object}.AddError GIVING {return}: USING [*CODE=]{code}[: [*SUBCODE=]{subcode}][: [*MESSAGE=]{message}][: [*FLAGS=]{flags}] Where: {label} is an optional Program Execution Label. {object} is an ERROR object that has been previously Required declared. {return} is a Numeric Variable that returns the error stack position for the error being added. The stack position value is 1 relative. {code} is a Numeric variable or decimal number with a Required value which is the basic error code value. This can be from 0 to 99. {subcode} is a Numeric variable or decimal number that Optional is a 32 bit subcode value. {message} is a Character String Variable or string Optional literal that specifies the description for the user error. {flags} is a Numeric Variable or decimal number that Optional specifies a bit mask value that can be used to control the behaviors of this method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE if the {return} value is zero. Otherwise, this flag is set to FALSE. 2. The OVER flag is set to TRUE if the returned value overflows the {return} Numeric Variable. 3. The EOS flag is always set to FALSE. 4. The {flags} bit mask values are described as follows: Value Description 0x00000001 PLBERR_USER_EXCEPTION The AddError method adds a user error that is trappable. 0x00000002 PLBERR_USER_NOEXCEPTION (Default) The AddError method adds a user error that is NOT trappable. ...................................................................... . ClearAll Method for ERROR Object . The ClearAll method can be used to clear all of the errors entries on the current error stack. This method uses the following format: [label] {object}.ClearAll GIVING {return} Where: {label} is an optional Program Execution Label. {object} is an ERROR object that has been previously Required declared. {return} is a Numeric Variable that is always set to a value of zero. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is always set to TRUE. 2. The OVER flag is set to FALSE. 3. The EOS flag is always set to FALSE. ...................................................................... . ClearError Method for ERROR Object . The ClearError method can be used to clear one error from the error stack. This method uses the following format: [label] {object}.ClearError GIVING {return}: USING [*POS=]{position} Where: {label} is an optional Program Execution Label. {object} is an ERROR object that has been previously Required declared. {return} is a Numeric Variable that is always set to a zero value. {position} is a Numeric variable or decimal number whose Optional value is a 1 relative position in the current error stack. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is always set to TRUE. 2. The OVER flag is set to FALSE. 3. The EOS flag is always set to FALSE. 4. If the {position} parameter is not specified, this method default is to clear the most current error. ...................................................................... . GetCode Method for ERROR Object . The GetCode method can be used to get the error code string for an error. Example: I03 This method uses the following format: [label] {object}.GetCode GIVING {return}: USING [*POS=]{position} Where: {label} is an optional Program Execution Label. {object} is an ERROR object that has been previously Required declared. {return} is a Character String Variable that receives the error code string. {position} is a Numeric variable or decimal number whose Optional value is a 1 relative position in the current error stack for the error being accessed. Flags Affected: EOS, OVER, ZERO Note the following: 1. The EOS flag is set to TRUE if the {return} variable is too small to receive all of the method data without being truncated. 2. The ZERO and OVER flags are always set to be FALSE. 3. This method retrieves the 'Zxxx' error as described in the 'PL/B Runtime Reference' under the 'Runtime Errors' section. 4. If the {position} parameter is not specified, this method default is to use the position of the most recent error. ...................................................................... . GetCount Method for ERROR Object . The GetCount method can be used to get the number of errors on the error stack. This method uses the following format: [label] {object}.GetCount GIVING {return} Where: {label} is an optional Program Execution Label. {object} is an ERROR object that has been previously Required declared. {return} is a Numeric Variable that returns the number of errors on the error stack. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE if the returned value is zero. Otherwise, the ZERO flag is set to FALSE. 2. The OVER flag is set to TRUE if the returned value overflows the {return} Numeric Variable. 3. The EOS flag is always set to FALSE. ...................................................................... . GetErrorStackSize Method for ERROR Object . The GetErrorStackSize method can be used to get the maximum number of errors allowed on the error stack. This method uses the following format: [label] {object}.GetErrorStackSize GIVING {return} Where: {label} is an optional Program Execution Label. {object} is an ERROR object that has been previously Required declared. {return} is a Numeric Variable that returns the maximum number of errors allowed on the error stack. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE if the returned value is zero. Otherwise, the ZERO flag is set to FALSE. 2. The OVER flag is set to TRUE if the returned value overflows the {return} Numeric Variable. 3. The EOS flag is always set to FALSE. ...................................................................... . GetMaxTextSize Method for ERROR Object . The GetMaxTextSize method can be used to retrieve the maximum text size of a message or sub message string. This method uses the following format: [label] {object}.GetMaxTextSize GIVING {return}: USING [*POS=]{position}[: [*FLAGS=]{flags}] Where: {label} is an optional Program Execution Label. {object} is an ERROR object that has been previously Required declared. {return} is a Numeric Variable that returns the maximum text size. {position} is a Numeric variable or decimal number whose Optional value is a 1 relative position in the current error stack for the error being accessed. If this parameter is not specified, the method uses the most recent error position. {flags} is a Numeric Variable or decimal number that Optional specifies a bit mask value that can be used to control the behaviors of this method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE if the returned value is zero. Otherwise, the ZERO flag is set to FALSE. 2. The OVER flag is set to TRUE if the returned value overflows the {return} Numeric Variable. 3. The EOS flag is always set to FALSE. 4. The {flags} bit mask values are described as follows: Value Description 0x00000001 MAXTEXTSIZEALL When this bit mask value is specified, the method gets the maximum text size for all of the errors on the error stack. 5. If the {position} parameter is not specified, this method default is to use the position of the most recent error. ...................................................................... . GetMessage Method for ERROR Object . The GetMessage method can be used to get the error message associated with an error being accessed on the error stack. This message is the same as provided by the S$ERROR$ program variable. Example: I03 00000056*2 WINERR:0x2 This method uses the following format: [label] {object}.GetMessage GIVING {return}: USING [*POS=]{position}[: [*FLAGS=]{flags}] Where: {label} is an optional Program Execution Label. {object} is an ERROR object that has been previously Required declared. {return} is a Character String Variable that receives the error message string. {position} is a Numeric variable or decimal number whose Optional value is a 1 relative position in the current error stack for the error being accessed. {flags} is a Numeric Variable or decimal number that Optional specifies a bit mask value that can be used to control the behaviors of this method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The EOS flag is set to TRUE if the {return} variable is too small to receive all of the method data without being truncated. 2. The ZERO and OVER flags are always set to be FALSE. 3. The {flags} parameter is implemented to support future bit mask definitions to control the behaviors of this method. 4. This method returns the error message as expected in the S$ERROR$ program variable when an error occurred. 5. If the {position} parameter is not specified, this method default is to use the position of the most recent error. ...................................................................... . GetSubCode Method for ERROR Object . The GetSubCode method can be used to get the subcode value associated with an error on the error stack. This method uses the following format: [label] {object}.GetSubCode GIVING {return} USING [*POS=]{position} Where: {label} is an optional Program Execution Label. {object} is an ERROR object that has been previously Required declared. {return} is a Numeric Variable that returns the subcode for an error being accessed. {position} is a Numeric variable or decimal number whose Optional value is a 1 relative position in the current error stack for the error being accessed. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE if the returned value is zero. Otherwise, the ZERO flag is set to FALSE. 2. The OVER flag is set to TRUE if the returned value overflows the {return} Numeric Variable. 3. The EOS flag is always set to FALSE. 4. The subcode error values an error are the same as described in the 'PL/B Runtime Reference' manual under the 'I/O Error Subcodes' section. 5. If the {position} parameter is not specified, this method default is to use the position of the most recent error. ...................................................................... . GetSubMessage Method for ERROR Object . The GetMessage method can be used to retrieve any additional error messages that may exist. Sub-messages may exist to give more details about a given error. This method uses the following format: [label] {object}.GetSubMessage GIVING {return}: USING [*POS=]{position}[: [*FLAGS=]{flags}] Where: {label} is an optional Program Execution Label. {object} is an ERROR object that has been previously Required declared. {return} is a Character String Variable that receives the error sub-message string. {position} is a Numeric variable or decimal number whose Optional value is a 1 relative position in the current error stack for the error being accessed. {flags} is a Numeric Variable or decimal number that Optional specifies a bit mask value that can be used to control the behaviors of this method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The EOS flag is set to TRUE if the {return} variable is too small to receive all of the method data without being truncated. 2. The ZERO flag is set to be FALSE. 3. The OVER flag is set to TRUE to indicate that there are no more sub messages and no the {return} data is NULL. The OVER flag is set to FALSE when sub message data is returned. 4. The {flags} bit mask values are described as follows: Value Description 0x00000000 PLBERR_ANOTHER_SUBMESSAGE This method retrieves the next available sub-message for the error being accessed. 0x00000001 PLBERR_FIRST_SUBMESSAGE This method resets and returns the first sub-message available for the error being accessed. 5. If the {position} parameter is not specified, this method default is to use the position of the most recent error. ...................................................................... . LogMessages Method for ERROR Object . The LogMessages method can be used to invoke error logging. This method uses the following format: [label] {object}.LogMessages GIVING {return}: USING [*FILENAME=]{filename}[: [*FLAGS=]{flags}] Where: {label} is an optional Program Execution Label. {object} is an ERROR object that has been previously Required declared. {return} is a Numeric Variable that returns zero when the method executes successfully. A non-zero value is returned when the method fails. {message} is a Character String Variable or string Optional literal that specifies the file name to be used for error logging. {flags} is a Numeric Variable or decimal number that Optional specifies a bit mask value that can be used to control the behaviors of this method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE if the {return} value is zero. Otherwise, this flag is set to FALSE. 2. The OVER flag is set to TRUE if the returned value overflows the {return} Numeric Variable. 3. The EOS flag is always set to FALSE. 4. The {return} pass/fail values are described as follows: Value Description 0 The method executed successfully. 1 The method failed because there was no {filename} specified. The {filename} must be provided when executing a 'ErrLogReset' operation. 2 The method failed because there was an error resetting the {filename}. 5. The {flags} bit mask values are described as follows: Value Description 0x00000001 ERRLOGON Turn on all logging and log all errors that have not been logged. 0x00000002 ERRLOGOFF Turn logging off. 0x00000004 ERRLOGRESET Reset the log file to a file size of zero bytes. ...................................................................... . SetErrorStackSize Method for ERROR Object . The SetErrorStackSize method can be used to set the size of the error stack. The error stack can be set to a size from 1 to 100. This method uses the following format: [label] {object}.SetErrorStackSize GIVING {return}: USING [*SIZE=]{size}[: [*FLAGS=]{flags}] Where: {label} is an optional Program Execution Label. {object} is an ERROR object that has been previously Required declared. {return} is a Numeric Variable that returns the previous error stack size. {size} is a Numeric variable or decimal number whose value Required can be from 1 to 100 for the new error stack maximum size. {flags} is a Numeric Variable or decimal number that Optional specifies a bit mask value that can be used to control the behaviors of this method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE if the returned value is zero. Otherwise, the ZERO flag is set to FALSE. 2. The OVER flag is set to TRUE if the returned value overflows the {return} Numeric Variable. 3. The EOS flag is always set to FALSE. 4. The {flags} parameter is implemented to support future method behaviors. ...................................................................... . GetProgram Method for ERROR Object . The GetProgram method can be used to get the program name for an error being accessed on the error stack. This method uses the following format: [label] {object}.GetProgram GIVING {return}: USING [*POS=]{position}[: [*FLAGS=]{flags}] Where: {label} is an optional Program Execution Label. {object} is an ERROR object that has been previously Required declared. {return} is a Character String Variable that receives the program name of the error being accessed on the error stack. {position} is a Numeric variable or decimal number whose Optional value is a 1 relative position in the current error stack for the error being accessed. {flags} is a Numeric Variable or decimal number that Optional specifies a bit mask value that can be used to control the behaviors of this method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The EOS flag is set to TRUE if the {return} variable is too small to receive all of the method data without being truncated. 2. The ZERO and OVER flags are always set to be FALSE. 3. The {flags} parameter is implemented to support future bit mask definitions to control the behaviors of this method. 4. If the {position} parameter is not specified, this method default is to use the position of the most recent error. ...................................................................... . GetTime Method for ERROR Object . The GetTime method can be used to get the date and time when an error occurred. This method uses the following format: [label] {object}.GetTime GIVING {return}: USING [*POS=]{position}[: [*FLAGS=]{flags}] Where: {label} is an optional Program Execution Label. {object} is an ERROR object that has been previously Required declared. {return} is a Character String Variable that receives the date/time of the error being accessed on the error stack. {position} is a Numeric variable or decimal number whose Optional value is a 1 relative position in the current error stack for the error being accessed. {flags} is a Numeric Variable or decimal number that Optional specifies a bit mask value that can be used to control the behaviors of this method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The EOS flag is set to TRUE if the {return} variable is too small to receive all of the method data without being truncated. 2. The ZERO and OVER flags are always set to be FALSE. 3. The {flags} parameter is implemented to support future bit mask definitions to control the behaviors of this method. 4. The {return} string is formatted as 'yyyy-mm-dd hh:mm:ss'. 5. If the {position} parameter is not specified, this method default is to use the position of the most recent error. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, ALL GUI CLIENTS - Modified the HTMLCONTROL to support scrollbars as follows: 1. The HTMLCONTROL has been modified to support the 'SCROLLBAR' property. When using the Windows runtimes, the HTMLCONTROL object is implemented using the Windows IWebBrowser2 ActiveX control. In this case, the Windows IWebBrowser2 ActiveX control enables or disables both horizontal and vertical scrollbars together. Therefore, the 'SCROLLBAR' property values for the Windows HTMLCONTROL have the following behaviors: Value Keyword Scrollbars are ... 0 $NONE not displayed. (default) 1 $SCRBOTH automatically displayed including both the horizontal and vertical scrollbars when an overflow condition is detected by the Windows IWebBrowser2 ActiveX control. 2 $SCRHORZ displayed the same as $SCRBOTH. 3 $SCRNONE not displayed. 4 $SCRVERT displayed the same as $SCRBOTH. ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Modified 'CREATE ICON' to detect a Windows OS error when extracting an icon from a '.ico' file. With this change, detection of an icon extraction error causes a runtime operation to directly load a 32x32 icon image from the '.ico' file. This change is being made to work around a problem where the Windows 7 OS could fail to extract an icon image from a '.ico' file when using the Windows Display setting of 125%. - Modified the SETPROP of the 'InnerHtml' property for the HTMLCONTROL to save and restore the current runtime active WINDOW. This change resolves an issue where a 'SETPROP HTMLCONTROL InnerHtml' was deactivating the current active WINDOW for the runtime being used. - Corrected a problem where the LEFTMARGIN and RIGHTMARGIN property values would change for an EDITTEXT object after the FONT for the EDITTEXT was changed using a SETPROP instruction. This problem does not occur when using a RICHEDITEXT object. ------------------------------------------------------------------------------- PLBCMP - Modified the compiler to support the ERROR object. - Modified the compiler to support the SCROLLBAR for the HTMLCONTROL object. - Modified the DEBUG instruction to support a debug command syntax that allows character debugger command(s) to be specified in a user program. The new DEBUG instruction syntax is described as follows: Syntax: [label] DEBUG [CMD={cmd}] Where: {cmd} - A previously defined Character String Variable or Optional Literal variable that contains a Character Debugger 'plbdbug.plc' command. Note: 1. When using the DEBUG instruction 'CMD' command keyword, the command string found in {cmd} is used by the character debugger when a user PL/B program is executing in a debug mode invoked with the '-d' or '-dr' runtime options. The DEBUG instruction is ignored if the user program is NOT being executed in a debug mode. 2. The {cmd} string can contain one or more character debugger commands up to a maximum limit of 71 characters. Any command data beyond the 71st byte is ignored by the character debugger. 3. There normal character debugger commands as described in the PL/B Utilities Reference under the 'PLBDBUG Commands' section are all implemented to be executed by the character debugger manually. Therefore, if the normal commands are included in the {cmd} command string, the execution of these commands have behaviors as if they were executed by use. 4. A new command 'Xn' has been implemented in 10.0B to allow one or more debugger commands to be stored and executed by the character debugger. The 'Xn' commands can be used in the {cmd} command string using three syntax formats as follows: Command Xn The 'n' can be a numeric digit from '0 to '9'. When the 'Xn' command is executed, the debug retrieves a previously stored command string and executes it. Xn {cmddata} When this 'Xn' command is executed, the {cmddata} string is stored into the debugger 'X' command table. The {cmddata} string can include one or more of the debugger commands. After the {cmddata} is stored into the debugger 'X' command table. Execution using the simple 'Xn' command causes the {cmddata} string to be parsed and executed. The {cmddata} string has a size limitation of 71 characters including the leading 'Xn '. {cmddata} Syntax [; [...]] Where: - Single character debugger command. Example of 'Xn' entered a the debugger console: "X0 DV S$CMDLIN" This 'X0' command stores the 'DV S$CMDLIN' string into the 'X' command table position 0. "X1 DV S$ERROR$; BP ProgLabel" This 'X1' command stores the 'DV S$ERROR$; BP Proglabel' string into the 'X' command table position 1. "X9 X0; X1" This command stores the 'X0; X1' string into the 'X' command table position 9. When the simple 'X9' command is executed, then the simple 'X0' is executed followed by the execution of the simple 'X1' command. Xn! {cmddata} When this 'Xn!' command is executed, the {cmddata} string is stored into the debugger 'X' command table the same as described for the 'Xn {cmddata}' command. The '!' appended to form the 'Xn!' causes the {cmddata} string to be parsed and executed immediately by the character debugger. The debugger command behavior depends on the commands used in the {cmddata} string. Example of 'Xn!' entered a the debugger console: "X0! DV S$CMDLIN" This 'X0!' command stores the 'DV S$CMDLIN' string into the 'X' command table position 0. Then the {cmddata} table position 0 is executed by the character debugger. In this case, the 'DV S$CMDLIN' is shown in the character debugger window and the debugger breaks waiting for the next end-user command. "X1! BP ProgLabel; G" This 'X1!' command stores the 'DV S$CMDLIN' string into the 'X' command table position 1. Then the {cmddata} table position 1 is executed by the character debugger. In this case, the 'BP ProgLabel' command is executed by the character debugger which is followed by the execution of the 'G' command. Xn? {cmddata} When this 'Xn?' command is executed, the {cmddata} string is stored into the debugger 'X' command table the same as described for the 'Xn {cmddata}' command. The '?' appended to form the 'Xn?' command causes the character debugger to continue the PL/B program execution immediately after the {cmddata} is stored. In this case, the {cmddata} is NOT executed as the program execution continues. Example of 'Xn?' entered a the debugger console: "X0? BP ProgLabel" This 'X0?' command stores the 'BP ProgLabel' string into the 'X' command table position 0. Then the PL/B program continues to execute WITHOUT executing the 'BP ProgLabel' command. After this 'X0' command string is store, the execution of the simple 'X0' command can be used to execute the 'BP ProgLabel' command. 5. The new command 'Xn' can be executed directly at the character debugger input window. However, when the 'X' commands are executed in the PL/B 'DEBUG CMD={cmd}' instruction while a PL/B program is executing in the debug mode, the character debugger retrieves the {cmd} information and processes the commands. This allows PL/B programs to be programed to selectively execute and/or build DEBUG commands dynamically. Example of static CMD commands: . .... . This instruction uses the 'X0!' command as follows: . . 1. The command string 'BC *; BP ABC; G' is stored . into the 'X' command table position 0. . . 2. The '!' causes the character debugger to execute . the newly stored 'X0' command. . . 3. The character debugger executes the debug commands . as follows: . . execute> BC * //Clears all break points . execute> BP ABC //Set Break Point for ABC . execute> G //Continue Program Execution . DEBUG CMD="X0! BC *; BP ABC; G" . .... Example of dynamic CMD commands: . .... . This instruction uses the 'X0?' and 'X1?' commands . to store break points for program use. . DEBUG CMD="X0? BP ABC; BL" DEBUG CMD="X1? BP XYZ; BL" . doCmd DIM 71 .... . IF ( CONDITION1 ) . MOVE "X9! BC *; X0; G", doCmd //Use ABC break point! . ELSE IF ( CONDITION2 ) . MOVE "X9! BC *; X1; G", doCmd //Use XYZ break point! . ELSE . MOVE "X9! X0; X1; G", doCmd //Use both break points! . ENDIF DEBUG CMD=doCmd - Modified FUNCTIONEND to allow a comment starting with a ';' character. - Modified the compiler to include the source line number and include identifier with the 'Undefined execution label' error message. - Corrected a problem where a PLFORM statement error could output an invalid line number. This problem would cause the SUNIDE to not show the failing source line in a printed listing. ------------------------------------------------------------------------------- PLBDBUG - Modified to detect 'PLBDBG_OPENABS={on|off}' used to turn off the use of *OPENABS when opening the '.sdb' files. If this keyword is set to be 'off', the character debugger does not use OPENABS mode when opening the '.sdb' files which avoids possible slow Windows OS IO when reading the '.sdb' files over a Mapped NETWORK share. - Modified the communications buffer size used to communicate between the character debugger and the GUI debugger. This change is made to avoid buffer overflow problem. - Corrected a problem where some command message data was being sent to the GUI debugger more than once. This could cause performance and interface problems depending on the type of data being processed. - Modified to allow BD, BE, BC, and TC commands executed by a GUI debugger user to immediately update the GUI dialog Windows. - Modified the Dot '.' command to allow the GUI debugger to properly highlight the next source line to be executed. - Modified to improve the DF command interface with the GUI debugger to fix multiple problems. Also, changes have been made to improve the performance of interface commands when files are being shown in the GUI debugger. - Modified the DF GUI interface to detect and send file variable array data to the GUI debugger. - Added new 'Xn', 'Xn!', and 'Xn?' debugger commands that can be used to store and execute normal debugger commands using the new PL/B 'DEBUG CMD={svarlit}' instruction in a PL/B program. These commands are implemented with behaviors to allow multiple normal debugger commands to be combined into a single 'Xnn' command which has a limit of 71 bytes. See the PLBCMP section for details. - Modified to give the correct display for a Shift-Fn command used to save a user command that can be recalled later using a shift function key action: "Command saved as Shift-Fn" - Added support for 'XS' commands that can be used in the PL/B 'DEBUG CMD={string}' instruction. Use of the 'XSn' commands in the 'DEBUG CMD' instruction allow the PL/B user program to initialize the character user commands which otherwise require a end-user 'shift+function key' action to be saved. These commands have the following syntax format and operations: XS {cmd1}; {cmd2}[; ...] This command clears all of the 'SHIFT+Fn' user commands and sets the new debug commands of {cmd1}... etc. The program stops in the debugger command input window waiting for the next command to be executed. XS? {cmd1}; {cmd2}[; ...] This command is the same as the 'XS' and the PL/B programs continues to execute after the {cmdn} debugger commands are stored. XSn This command executes the 'SHIFT+Fn' user command that has been previously stored. XSn {cmd1}; {cmd2}[; ...] This command stores the {cmd} data into the user command for the 'SHIFT+Fn' function key action. The program stops in the debugger command input window waiting for the next command to be executed. XSn? {cmd1}; {cmd2}[; ...] This command is the same as the 'XSn' and the PL/B programs continues to execute after the {cmdn} debugger commands are stored. XSC {*|n} This command is used to clear all 'SHIFT-Fn' user commands when the '*' parameter is used. If the 'n' parameter value of 1 to 10 used specified, then only the 'SHIFT+Fn' user command is cleared. XSL This command is used to show all of the currently stored 'SHIFT+Fn' user commands stored and available for end-user use. Examples: DEBUG CMD="XS6 DV S$CMDLIN" This PL/B instruction stores the debugger command specified as 'DV S$CMDLIN' into the user command table assigned to and invoked by the 'SHIFT+F6' function key end-user action. DEBUG CMD="XS dv s$cmdlin; dv s$error$" This command clears all of the current 'SHIFT+Fn' user commands and stores the 'SHIFT+F1' and 'SHIFT+F2' user commands which can be invoked an end-user action. DEBUG CMD="XS? dv s$cmdlin; dv s$error$" This command clears all of the current 'SHIFT+Fn' user commands and stores the 'SHIFT+F1' and 'SHIFT+F2' user commands. The PL/B program continues to execute after the 'SHIFT+F1' and 'SHIFT+F2' user commands are stored. ------------------------------------------------------------------------------- DBGIFACE - Modified the '-Listen' information to show new information messages as follows: " Remote Mode is used! " This message appear when the GUI debugger is receiving the debug '.sdb' source via a socket connection to the character debugger. " CWD: 'c:\user\programs...' " The current working directory for the GUI debugger. - Modified the ShowFiles to properly display the DF file data received from the character debugger. - Modified the ShowFiles Windows to include a ShowAll CHECKBOX that receives and presents all of the files for the current program and current loaded load modules. - Modified the DF command processing to detect and show current program file variable labels. Also, modified to detect and show file array variables. - Modified the GUI debugger to support the new PL/B language 'DEBUG CMD={svar}' operations. These changes include automatic refreshing of BP and TP Window data when a PLB 'DEBUG CMD' program operations change the current debugging BP and TP settings. - Corrected command interface problems between the character debugger 'plbdbug.plc' and the GUI debugger 'dbgiface.plc'. - Corrected problems where some commands caused the current PL/B highlighted instruction in the source view to disappear. ------------------------------------------------------------------------------- PLBMETH.INC - Updated to include all GUI objects with properties, events, and methods. ------------------------------------------------------------------------------- PLBWSEC.DLL - Modified the 'plbwsec' DLL to retry a read operation to the audit file before giving a 'U21 diagnostic 14' error. - Added a new 'plbwsec' DLL to report a 'U21 diagnostic 15' error when too many workstation tasks are detected. Prior to this change, this audit error was reported with a 'diagnostic 14' value which could result in confusion as to the true cause for the error. ------------------------------------------------------------------------------- DESIGNER.PLC - Modified the form open logic to convert the form type when opened as an incorrect type (PLF vs PWF). - Corrected an O105 error that would occur during a form save from the IDE. - Corrected an error that would cause an XML Read Error message. - Corrected an error that would cause a Select String error message when a file was opened by the SunIDE. - Modified to not move the code window cursor when switching between open forms. - Corrected an autosave issue that occurred when tabid or helpid numbering was active. - Corrected changing of the form type during an autosave operation. - Added a descriptive message for form load errors. - Made several corrections to Paste, Undo Paste and Repeat Paste functions. - Corrected selected object and parent object display in the status bar when executing in Integrated Mode. - Corrected tab renumbering issue when autosave is disabled. - Modified object array click event code to toggle the value when the object type is a CheckBox or a Radio. - Corrected an issue with renaming multiple objects to make them part of an existing array. - Corrected the file type selection for web forms during an open from the toolbar. - Modified code window activation routine to close any active property edits and reset the toolbox in all instances. - Added support for scrollbars on HTMLCONTROL objects. - Corrected an XML Read Error when applying user defined properties. - Made the double click timeout used when selecting an object for code editing configurable on the Options Behavior tab. - Corrected handling of rapid mouse down events on the Design form. ------------------------------------------------------------------------------- EDITOR.PLC - Now disregards F2 key for read-only files. - Added support for the IDE's "Don't Lock Files" option. - Modified to support the Go To Label function for labels beginning with the hash mark (#). - Updated the window that provides a choice of labels when a Go To Label function detects multiple labels of the same name. ------------------------------------------------------------------------------- SUNIDE.PLC - Removed Legacy Designer from the tools menu. - Corrected an issue with the double-click on an error not positioning to the source line. - Added the IDE option to not lock the editor files while open. - Corrected an issue with loading the browse labels when a project is first opened. - Implemented several performance enhancements centered around label processing. - Added a source map and labels find function. ------------------------------------------------------------------------------- SUNCS21.OCX - Modified to support label names beginning with the hash mark (#). ------------------------------------------------------------------------------- SCHEMAEDITOR.PLC - Modified XML output to allow views or SQLIO. - Added support for a database name specified on the command line. ------------------------------------------------------------------------------- DBEXPLORER.PLC - Added support for a database name specified on the command line. -------------------------------------------------------------------------------