Date: 04-02-2018 Subject: RELEASE 10.0A Runtime Files These release notes pertain to the following programs or files: EMBEDINI 10.0A 02 Apr 2018 10.0.1.500 EMBEDINI64 10.0A 02 Apr 2018 10.0.1.500 HEXDUMP 10.0A 02 Apr 2018 10.0.1.500 HEXDUMP64 10.0A 02 Apr 2018 10.0.1.500 MAKECLI 10.0A 02 Apr 2018 10.0.1.500 MAKECON 10.0A 02 Apr 2018 10.0.1.500 MAKECONET 10.0A 02 Apr 2018 10.0.1.500 MAKEDEF 10.0A 02 Apr 2018 10.0.1.500 MAKEMFD 10.0A 02 Apr 2018 10.0.1.500 MANAGECE 10.0A 02 Apr 2018 10.0.1.500 OBJMATCH 10.0A 02 Apr 2018 10.0.1.500 OBJMATCH64 10.0A 02 Apr 2018 10.0.1.500 ODBCINST64 10.0A 02 Apr 2018 10.0.1.500 PLBCLICON 10.0A 02 Apr 2018 10.0.1.500 (ComCtl 6) PLBCLIENT 10.0A 02 Apr 2018 10.0.1.500 (ComCtl 6) PLBCLINET 10.0A 02 Apr 2018 10.0.1.500 (ComCtl 6) PLBCON 10.0A 02 Apr 2018 10.0.1.500 (ComCtl 6) PLBCONET 10.0A 02 Apr 2018 10.0.1.500 (ComCtl 6) PLBNET 10.0A 02 Apr 2018 10.0.1.500 (ComCtl 6) PLBSERVE 10.0A 02 Apr 2018 10.0.1.500 (Processed Server) PLBSERVET 10.0A 02 Apr 2018 10.0.1.500 (Threaded Server) PLBWEBSRV 10.0A 02 Apr 2018 10.0.1.500 (Processed Server) PLBWEBSRVT 10.0A 02 Apr 2018 10.0.1.500 (Threaded Server) PLBWIN 10.0A 02 Apr 2018 10.0.1.500 (ComCtl 6) PLBCGI 10.0A 02 Apr 2018 10.0.1.500 PLBCLICON5 10.0A 02 Apr 2018 10.0.1.500 (ComCtl 5) PLBCLIENT5 10.0A 02 Apr 2018 10.0.1.500 (ComCtl 5) PLBCLINET5 10.0A 02 Apr 2018 10.0.1.500 (ComCtl 5) PLBCON5 10.0A 02 Apr 2018 10.0.1.500 (ComCtl 5) PLBCONET5 10.0A 02 Apr 2018 10.0.1.500 (ComCtl 5) PLBNET5 10.0A 02 Apr 2018 10.0.1.500 (ComCtl 5) PLBWIN5 10.0A 02 Apr 2018 10.0.1.500 (ComCtl 5) SUNAAMDX 10.0A 02 Apr 2018 10.0.1.500 SUNAAMDX64 10.0A 02 Apr 2018 10.0.1.500 SETGUID 10.0A 02 Apr 2018 10.0.1.500 SUNINDEX 10.0A 02 Apr 2018 10.0.1.500 SUNINDEX64 10.0A 02 Apr 2018 10.0.1.500 SUNLS 10.0A 02 Apr 2018 10.0.1.500 SUNMOD 10.0A 02 Apr 2018 10.0.1.500 SUNMOD64 10.0A 02 Apr 2018 10.0.1.500 SUNSORT 10.0A 02 Apr 2018 10.0.1.500 SUNSORT64 10.0A 02 Apr 2018 10.0.1.500 WININST 10.0A 02 Apr 2018 10.0.1.500 ODSBAC32.DLL 10.0A 02 Apr 2018 ODSBAC64.DLL 10.0A 02 Apr 2018 PLBNETSUP.DLL 10.0A 02 Apr 2018 10.0.1.500 Required for PLBNET PLBWSEC.DLL 10.0A 02 Apr 2018 10.0.1.500 Req'd PLBWIN/PLBNET SA_DLL32.DLL 10.0A 02 Apr 2018 10.0.1.500 SUNWADO.DLL 10.0A 02 Apr 2018 10.0.1.500 SUNWADO25.DLL 10.0A 02 Apr 2018 10.0.1.500 SUNWADO28.DLL 10.0A 02 Apr 2018 10.0.1.500 SUNWMSQL.DLL 10.0A 02 Apr 2018 10.0.1.500 SUNWODBC.DLL 10.0A 02 Apr 2018 10.0.1.500 SUNWSRV.DLL 10.0A 02 Apr 2018 10.0.1.500 SUNWSRV64.DLL 10.0A 02 Apr 2018 10.0.1.500 Required for Sundm64 DBGIFACE 10.0A 02 Apr 2018 PLBCMP 10.0A 02 Apr 2018 PLBDBUG 10.0A 02 Apr 2018 ADMEQU.INC 10.0A 02 Apr 2018 PLBEQU.INC 10.0A 02 Apr 2018 PLBMETH.INC 10.0A 02 Apr 2018 PLBCLI.ZIP 10.0A 02 Apr 2018 10.0.1.600 (ComCtl 6) PLBRUN.ZIP 10.0A 02 Apr 2018 10.0.1.600 (ComCtl 6) *============================================================================== Notes for some NEW Items: - Updated SQLite to use the '3.20.0 01 Aug 2017' release version. - The Windows PANEL object is enhanced to support events generated by HTML objects that have been loaded into the PANEL using the 'InnerHmtl' method. - A new PLB object named HTMLCONTROL has been implemented. This HTML control is supported by the PLBWIN, PLBNET, PLBSERVE, and PLBWEBSRV runtimes. *============================================================================== Notes for DOCUMENTATION: - Modify the 'Sunbelt PL/B Language Reference' manual for the 'Orient Event' as follows: 1. Change the 'eventis' to be 'event is' in the first description paragraph. 2. Change the '$$ClientEventOrient' in the Note (1.) to be '$ClientEventOrient' - Modify the 'Sunbelt PL/B Language Reference' manual for the EVENTREGISTER instruction under the Note (23.) to include the following: Value Keyword Event Notes New 302 $ClientEventPostMessage Postmessage PL/B Web Server Only. - Modify the 'Sunbelt PL/B Language Reference' manual to include the 'Postmessage Event' description as follows: Postmessage Event The Postmessage event is a PL/B Web Server event for the CLIENT object that occurs when a browser 'window' object 'message' event is detected after a JavaScript 'window.postMessage' method is executed. This CLIENT object event can be used to communicate data from an iframe to a PWS PL/B event routine. See this link for a description of the 'window.postMessage' method: https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage Note the following: 1. The Postmessage event is referenced using an event value of 302. The equated label in PLBEQU.INC for this event is $ClientEventPostMessage. 2. The Postmessage event data is returned as a JSON string in the ARG1 parameter where the JSON data includes the following JSON field names\data: Value Represents the ... plbevent JavaScript field that must exist in the ARG1 JSON data. The value of this JSON field is ignored. data JavaScript field that contains user specific JSON data. origin JavaScript field that contains the value which is determined from the 'postMessage' 'targetOrigin' parameter. See the above link for more information on the 'targetOrigin' parameter. Example of JavaScript 'postMessage' in iframe JavaScript: parent.postMessage( { 'plbevent': true, 'data': "mydata" }, "*"); Example of ARG1 JSON data: ("plbevent": true, "data": "mydata", "origin" : "http://www.sunbelt-plb.com:8081"} - In the 'Sunbelt PL/B Language Reference' manual under the 'Innerhtml Method (PANEL) description, add the following to the Note (9.) " However, the Windows PL/B runtimes DO NOT support any HTML object events as described in Note 8." - In the 'Sunbelt PL/B Language Reference' manual remove all references to a 'INNERHTML Property' for a PANEL object. - In the 'Sunbelt PL/B Language Reference' manual under the 'SEARCHPATH' instruction, modify the notes (10.) and (11.) as follows: Note 10. (Modify to read as follows:) When the {tcpip id:port} address is provided as part of the {path} variable or literal, the instruction is executed at the server where the Data Manager is executing. In this case, the instruction logs on to the Data Manager, performs the operation, and logs off from the Data Manager for a GET action. However, when the SEARCHPATH ADD, REMOVE, or SET actions are executed successfully, the instruction DOES NOT log off from the Data Manager. Warning: If a SEARCHPATH ADD, REMOVE, or SET action takes affect, the client program logs on to the SUNDM Data Manager and the connection to the SUNDM Data Manager remains connected indefinitely. This connection remains active until the program is terminated or until the 'SETMODE DMKEEPACTIVE=0' instruction is executed. Please note that a CHAIN instruction does not cause this connection to be disconnected. See the GETMODE and SETMODE *DMKEEPACTIVE description for more information. Note 11. ( Remove/Delete this note ) - In the 'Sunbelt PL/B Language Reference' manual under the 'PATH' instruction, modify the note (9.) to read as follows: Note (9.) Modify as follows: If the {tcpip id:port} address is used with the PATH CHANGE keyword, the PATH instruction can take affect at the Data Manager as follows: A. When the PLB_CURDIR keyword has been specified in the SUNDM CFG file the logical current working directory for the child thread is changed at the Data Manager. B. If the PLB_CURDIR keyword is not used by the Data Manager, the PATH CHANGE instruction changes the directory for the Data Manager process which affects all clients accessing the Data Manager. Warning: When the PATH CHANGE instruction is executed, the client program logs on to the Data Manager and remains connected indefinitely. The connection remains active until the program is terminated or until a SETMODE DMKEEPACTIVE=0 instruction is executed. Please note that a CHAIN instruction does not cause this connection to be disconnected. See the GETMODE and SETMODE *DMKEEPACTIVE description for more information. - In the PL/B Language Reference manual under the 'CLOCK VERSION' section, delete the NOTE (1.). - In the PL/B Language Reference manual under the 'List Controls (GETMODE)' section delete the *CLOCKVERSION keyword from the list controls table. - In the PL/B Language Reference manual delete the '*CLOCKVERSION (GETMODE)' section. - In the PL/B Language Reference manual delete the '*CLOCKVERSION (SETMODE)' section. - In the PL/B Language Reference manual, remove all of the GETMODE and SETMODE *HOMEDIR keyword references. - In the PL/B Language Reference manual under the '*TEMPLATE (PRTPAGE)' section, modify the description paragraph to read as follows: "This advanced print control allows a page from a secondary PDF file to be included as a PDF object in the current page being generated for PDF output. This control allows a template page to be combined with PL/B program data to be generated into a single PDF output file. The template page used from the secondary PDF is not presented in the Print Preview. - In the PL/B Language Reference manual under the 'GETFILE' instruction change the Note (1.) to read as follows: Note (1.) "If the file specified is not open, the ZERO flag is cleared and the variables remain unchanged. If the file is open, the ZERO flag is set. If the file is a FILELIST, the zero flag is ONLY set when all of the AFILE\IFILE files in the FILELIST are opened. If any file in the FILELIST is closed, the ZERO flag is cleared and the variable(s) for a keyword may be changed for any opened files in the FILELIST. - In the PL/B Language Reference manual under the 'SETPROP' instruction change the Note (8.) to read as follows: Note (8.) "The {object} must be CREATEd before using SETPROP. If this is not done, a runtime error of O105 is generated. However, if the {object} is a COLLECTION that has not been created, the SETPROP operation is ignored and no error occurs." - In the PL/B Language Reference manual, add a GUI object section named 'HTMLCONTROL' as follows: HTMLCONTROL The HTMLCONTROL object is a container which can be populated with HTML elements. The HTMLCONTROL object can exist and be used in programs executed by the runtimes PLBWIN, PLBNET, PLBSERVE, and PLBWEBSRV. To define a HTMLCONTROL, use one of the following statement formats: (1) [label] HTMLCONTROL [%] (2) [label] HTMLCONTROL (arraysize) (3) [label] HTMLCONTROL ^ (4) [label] HTMLCONTROL ^,{target} (5) [label] HTMLCONTROL ^(arraysize) (6) [label] HTMLCONTROL ^(arraysize),({target}),...,({target}) Where: label Optional. A Program Execution Label. % Optional. Denotes the item as being GLOBAL. arraysize Required. An integer decimal constant, CONST variable, or EQUATEd value indicating the number of array items. ^ Optional. Denotes the item as being a POINTER. target Required. The name of a previously defined data item of the same type. Flags Affected: NONE Note the following: 1. The HTMLCONTROL object is a specialized container that can be populated with HTML elements. The HTML elements are defined in the 'InnerHtml' property data stream which can be simple HTML elements or a complex web page with supporting JavaScript, CSS, and HTML objects. 2. When HTML elements are created in a HTMLCONTROL, they are enabled, disabled, hidden, made visible, or destroyed when one of these actions take place on the HTMLCONTROL. 3. Multi-dimension arrays are supported to a maximum of fourteen dimensions. 4. The ^ denotes Pointer Variable. 5. Although a HTMLCONTROL may be defined as Global, it is DESTROYed during a CHAIN instruction. 6. When a HTMLCONTROL is created using a PL/B Web Server runtime, the HTML elements are loaded/rendered to the client browser like other PL/B GUI objects. 7. When a HTMLCONTROL is created using a Windows runtime including PLBWIN, PLBNET, or PLBSERVE, the HTMLCONTROL is created using the Windows OS 'IWebBrowser2' interface for the Windows PL/B runtimes. Properties: ANCHOR BGCOLOR DOCK ENABLED ( Requires Html Element attribute: 'data-plbenable' ) HEIGHT HWND INNERHTML ( Same behavior as 'InnerHtml' method. ) LEFT OBJECTID RUNNAME TABID ( Requires Html Element attribute: 'data-plbtabid' ) TOP USERDATA VISIBLE WEBCLASS WEBHEIGHT WEBLEFT WEBPOSITION WETOP WEBWIDTH WIDTH ZORDER Instructions: ACTIVATE CHECKPROP CREATE DEACTIVATE DESTROY EVENTREGISTER EVENTSEND GETPROP SETFOCUS SETPROP TYPE Events: $JQueryEvent Methods: DisableJqEvent //All PWS objects EnableJqEvent //All PWS objects Focus //HTMLCONTROL Only GetAttr //HTMLCONTROL Only GetCss //HTMLCONTROL Only GetWebId //All PWS objects GetWebStyle //All PWS objects InnerHtml //HTMLCONTROL Only MakePict //HTMLCONTROL Plbwin, Plbnet, Plbserve Only SetAttr //HTMLCONTROL Only SetCss //HTMLCONTROL Only SetWebStyle //All PWS objects UpdateEvents //HTMLCONTROL Only - In the PL/B Language Reference manual under the 'TYPE' instruction change the Note (2.) GUI Objects table to include the following objects: Note (2.) GUI Objects Table Data Type Sunbelt SWDBC Comment CLIENT 14640 (0x3930) 16 Added 9.7 RUNTIME 14896 (0x3A30) 16 Added 9.7 XDATA 15152 (0x3B30) 16 Added 9.8A HTMLCONTROL 15408 (0x3C30) 16 Added 10.0A - In the PL/B Language Reference manual, add a new section named 'ACTIVATE HTMLCONTROL' as follows: ACTIVATE HTMLCONTROL The ACTIVATE HTMLCONTROL statement makes a HTMLCONTROL visible and allows the user to interact with it. An optional execution label may be provided to process information if the user selects the HTMLCONTROL. The instruction uses the following format: [label] ACTIVATE {htmlctl}[,{routine},{result}] Where: label Optional. A Program Execution Label. htmlctl Required. The name of a previously created HTMLCONTROL object variable or a pointer to a HTMLCONTROL object. routine Optional. A program execution label called when an event occurs for a HTML element that exists within the screen boundaries of the HTMLCONTROL object. result Optional. A previously defined Numeric Variable in which value of zero is always returned. Flags Affected: NONE Note the following: 1. The runtime performs the action of registering the $jQueryEvent. See EventRegister for more information on $jQueryEvent. Also, the {routine} for this Activate and the {routine} for the EventRegister of the $jQueryEvent for this HTMLCONTROL are mutually exclusive. The means that the last {routine} registered for the $jQueryEvent of the HTMLCONTROL becomes the active {routine} which is used. 2. If the {result} operand is specified, it is set to a value of zero. 3. If the {result} operand is too small to contain the value, the OVER flag is set upon entry to the {routine}. Otherwise, the OVER flag is cleared. This flag setting does not occur at the time of the ACTIVATE but at the time the {routine} is called. 4. The {routine} is called when an event is produced by a HTML element that exists in the HTMLCONTROL object. 5. The {routine} is called as if a CALL instruction was performed. It is only called when an EVENTCHECK or EVENTWAIT is executed. 6. When the {routine} is complete, a RETURN instruction continues execution at the instruction following the EVENTWAIT or EVENTCHECK. Otherwise, a NORETURN instruction should be executed to clear the return address from the call stack. 7. If the HTMLCONTROL specified by an ACTIVATE instruction is already active, the old {routine} and {result} operands are replaced with the new {routine} and {result} operands. 8. An object must be CREATEd before it is activated. If this is not done, a runtime error of O105 is generated. 9. If insufficient memory is available to perform the operation, a runtime error O106 is generated. 10. If a FILEPI instruction is active, it is terminated. 11. When the {routine} is invoked, the EventInfo instruction can be used to retrieve addition data related to the $jQueryEvent. - In the PL/B Language Reference manual under the 'EVENTREGISTER' instruction, add a Note (24.) as follows: Note (24.) "When registering the $jQueryEvent for a HTMLCONTROL object, the EventRegister {routine} replaces a previously registered {routine} including the {routine} of an ACTIVATE for the HTMLCONTROL." - In the PL/B Language Reference manual under the 'Click Event' section, add a Note (11.) as follows: Note (11.) "For a BUTTON object click event, the event Modifier value identifies when a DEFAULT or CANCEL key action generates the click event. If the 'eventMod' value is 0x100, a DEFAULT key action generated the click event. If the 'eventMod' value is 0x200, a CANCEL key action generated the click event. Otherwise, 'eventMod' value is zero." - In the PL/B Language Reference manual under the 'DEFAULT Property' section, add a Note (7.) as follows: Note (7.) "When a DEFAULT key action generates the click event for a BUTTON object, the 'eventMod' value of 0x100 indicates that a DEFAULT key action generated the click event." - In the PL/B Language Reference manual under the 'CANCEL Property' section, add a Note (5.) as follows: Note (5.) "When a CANCEL key action generates the click event for a BUTTON object, the 'eventMod' value of 0x200 indicates that a CANCEL key action generated the click event." - In the PL/B Language Reference manual, add a new section named 'InnerHtml Property (HTMLCONTROL)' as follows: INNERHTML Property (HTMLCONTROL) The INNERHTML property allows user program HTML to be rendered into a HTMLCONTROL object. The user HTML data must be properly formatted HTML as expected by normal client browser engines. The property uses the following format: INNERHTML={htmlpage} Note the following: 1. The INNERHTML property can be used in CREATE, GETPROP, or SETPROP statements. 2. {htmlpage} must be a Character String Variable or literal that contains: A. Properly formatted HTML constructs. Simple Example: or B. A properly formatted URL that contains a leading '!' character. Simple Example: !http://www.google.com 3. The GETPROP operation retrieves the exact HTML {htmlstring} string rendered by the CREATE\SETPROP operation for the INNERHTML property of a HTMLCONTROL object. If the HTMLCONTROL object has been loaded using the 'InnerHtml' method, the GETPROP of the 'INNERHTML' property returns the HTML loaded by the 'InnerHtml' method. 4. If the HTMLCONTROL contains user HTML, another SETPROP 'INNERHTML' property operation replaces any previously loaded HTML existing in the HTMLCONTROL. 5. The HTMLCONTROL {htmlpage} data string can include the 'data-plbevent={eventnames}' attribute for a HTML object that is being declared in the HTML page data string. When the 'data-plbevent' is being used, the HTML object events can be only occur as follows: a. The 'data-plbevent={eventnames}' must be declared for each HTML object which is to generate an event. Where: {eventnames} This is a string of one or more JavaScript event names which must be separated by a whitespace character delimiter. See this URL Link for more information on events: https://developer.mozilla.org/en-US/docs/Web/Events The data-plbevent events for the Plbwin, Plbnet, and Plbserve runtimes are limited to: blur, change, click, dblclick, focus, keydown, keypress, keyup, mousedown, mousemove, mouseout, mouseover, mouseup b. The EVENTREGISTER must be executed to register the $JQueryEvent ( 200 event number ) event for a HTMLCONTROL object using the 'InnerHtml' property. In this case, the $JQueryEvent routine receives all of the HTML events declared by the 'data-plbevent' in the 'InnerHtml' property data string. The ARG1 contains a JSON object string for the event data. See the EVENTREGISTER for more details on the $JQueryEvent. Example of EventRegister Property:   HTML object sample with 'data-plbevent' declared: HCtl HTMLCONTROL . HtmlPage INIT "" SETPROP HCtl, InnerHtml=HtmPage EventReg HCtl,$JQueryEvent,HctlEvent, ARG1=JsonData 6. The HTMLCONTROL {htmlpage} data string can include the data-plbenable='on' attribute for a HTML object that is being declared in the HTML page data string. When the 'data-plbenable' is being used, the PL/B ENABLED property is used to enable/disable those HTML objects. HTML object sample with 'data-plbenable' declared: 7. The HTMLCONTROL {htmlpage} data string can include the data-plbtabid={num} attribute for a HTML object that is being declared in the HTML page data string. When the 'data-plbtabid' is being used, the HTML objects are placed in the PL/B tabbing order as members of the HTMLCONTROL. A data-plbtabid of 0 causes the HTML object to be removed from the PL/B tabbing order. The HTML object sample with 'data-plbtabid' declared: 8. This property is implemented using the Windows OS 'IWebBrowser2' interface for the Windows PL/B runtimes. 9. This property behaves in the same manner as the HTMLCONTROL method with the default flags settings of 0. - In the PL/B Language Reference manual, modify the section named 'InnerHtml Method (PANEL)' as follows: InnerHtml Method (PANEL and HTMLCONTROL) The InnerHtml method sends a HTML page to a PANEL object that does not contain any GUI objects, or a HTMLCONTROL object. This method uses the following format: [label] {object}.InnerHtml [GIVING {return}]: USING [*Html=]{htmlpage}[: [*Flags=]{flags}] Where: label Optional. A Program Execution Label. object Required. A PANEL or HTMLCONTROL that is accessed. return Optional. A Numeric Variable that indicates the success or failure of the method. htmlpage Required. A Character String Variable or literal that contains the HTML page sent to the PANEL or HTMLCONTROL. flags Optional. A Numeric variable or decimal number whose value enforces specialized behaviors. Flags Affected: EOS, OVER, ZERO Note the following: 1. The EOS flag is always cleared. 2. The ZERO flag is set to TRUE when the return value is zero. A {return} value of zero indicates that the method executed successfully. 3. The OVER flag is set to TRUE if the {return} variable is too small to store that value without being truncated. 4. The 'InnerHtml' behavior flags are defined as follows: Value Meaning ... 0x00 When all of the {flags} bits are zero, the {htmlpage} data string is sent to the PANEL or HTMLCONTROL object exactly as provided. 0x01 Enable HTML events for any HTML objects in the InnerHtml {htmlpage} that has the HTML element data-plbevent='eventname' attribute defined. This flag is referenced as $HTML_HAS_EVENTS in the 'plbmeth.inc' definitions. This flag is only valid for the PANEL object, and is always on for the HTMLCONTROL object. This flag is not used when the $HTML_FROM_URL bit is used. 0x02 This bit value allows the {htmlpage} string to be specified as a valid 'url' reference. This bit value can be used in the Plbwin, Plbnet, Plbserve, and Plbwebsrv runtimes. This flag is referenced as $HTML_FROM_URL in the 'plbmeth.inc' definitions. 0x04 This bit value causes a vertical and horizontal scrollbar to be created for the PANEL or HTMLCONTROL object. This bit value is only supported in the Plbwin, Plbnet, and Plbserve runtimes. This flag is referenced as $HTML_USE_SCROLLBARS in the 'plbmeth.inc' definitions. 0x08 This bit value causes a border to be drawn around the PANEL or HTMLCONTROL object. This bit value is only supported in the Plbwin, Plbnet, and Plbserve runtimes. This flag is referenced as $HTML_3D_BORDER in the 'plbmeth.inc' definitions. 5. The InnerHtml method does not send the {htmlpage} data to the PANEL if the PANEL has PLB GUI child objects. In this case, the {return} value is one (1). 6. After the InnerHtml method has been successfully executed, PLB GUI objects can be added to the PANEL. 7. When the HTML data is loaded from a URL using the Plbwin, Plbnet, and Plbserve runtimes, the IE browser level support can be with a tag. This tag should be the first tag after the tag and resemble the following line: This causes the latest version of IE to be used as the browser engine. 8. The PANEL or HTMLCONTROL {htmlpage} data string can include the 'data-plbevent={eventnames}' attribute for a HTML object that is being declared in the HTML page data string. When the 'data-plbevent' is being used, the HTML object events can be only occur as follows: a. The 'data-plbevent={eventnames}' must be declared for each HTML object which is to generate an event. Where: {eventnames} This is a string of one or more JavaScript event names which must be separated by a whitespace character delimiter. See this URL Link for more information on events: https://developer.mozilla.org/en-US/docs/Web/Events The data-plbevent events for the Plbwin, Plbnet, and Plbserve runtimes are limited to : blur, change, click, dblclick, focus, keydown, keypress, keyup, mousedown, mousemove, mouseout, mouseover, mouseup b. The EVENTREGISTER must be executed to register the $JQueryEvent ( 200 event number ) event for a PANEL or HTMLCONTROL {object} executing the 'InnerHtml' method. In this case, the $JQueryEvent routine receives all of the HTML events declared by the 'data-plbevent' in the 'InnerHtml' data string. The ARG1 contains a JSON object string for the event data. See the EVENTREGISTER for more details on the $JQueryEvent. Example of EventRegister Method:   HTML object sample with 'data-plbevent' declared: EventRegister Required: EventReg Panel,$JQueryEvent,HctlEvent, ARG1=JsonData or EventReg Panel,200,PanelEvent,ARG1=JsonData 9. The HTMLCONTROL {htmlpage} data string can include the data-plbenable='on' attribute for a HTML object that is being declared in the HTML page data string. When the 'data-plbenable' is being used, the PL/B ENABLED property is used to enable/disable those HTML objects. HTML object sample with 'data-plbenable' declared: 10. The HTMLCONTROL {htmlpage} data string can include the data-plbtabid={num} attribute for a HTML object that is being declared in the HTML page data string. When the 'data-plbtabid' is being used, the HTML objects will be placed in the PL/B tabbing order as members of the HTMLCONTROL. A data-plbtabid of 0 causes the HTML object to be removed from the PL/B tabbing order. The HTML object sample with 'data-plbtabid' declared: 11. This method is implemented using the Windows OS 'IWebBrowser2' interface for the Windows PL/B runtimes. - In the PL/B Language Reference manual, add a new sections described for HTMLCONTROL methods as follows: -------------------------------------------------------------------- 'GetAttr Method (HTMLCONTROL)' The GetAttr method retrieves low level HTML element attributes. The method gets the requested data from the HTML element that has an id attribute that matches the id parameter. The method uses the following format: [label] {object}.GetAttr [GIVING {return}] USING [*Id=]{id}: [*Name=]{name}[: [*Flags=]{flags} Where: label Optional. A Program Execution Label. object Required. A HTMLCONTROL object that has been declared. return Optional. A Character String Variable that returns a string from a HTML element depending on the {name} data type. id Required. A Character String Variable or literal that contains HTML element id attribute. name Required. A Character String Variable or string literal that identifies the type of data to be retrieved from the HTML element. flags Optional. A Numeric Variable or decimal number that specifies a bit mask value that controls the behavior of this method. Flags Affected: EOS Note the following: 1. This method is used to retrieve an attribute value from a HTML element contained in a HTMLCONTROL object. 2. The EOS flag is set if the returned data string is larger than the DIM variable used to receive the data. 3. The {id} is a value that determines the HTML element used for data retrieval. The {id} string is matched against the id attribute of the HTML element. 4. The {name} identifies the type of data retrieved from the HTML element matching the {id} string. Information on HTML element attributes can be found at: https://www.w3schools.com/html/html_attributes.asp 5. The {name} parameter can be a pre-defined special name or it can be an HTML attribute for the HTML element being accessed.   The pre-defined special name and the HTML attribute names are only returned when the current {flags} value is set to zero (0). Special Comment Html Html Contents Text Text Contents Class Class attribute {attr} A valid attribute name 6. The {flags} parameter is a bitmask value that forces specialized behaviors for the execution of this method. 7. The {return} string depends on the {name} data type being requested. Example of GetAttr Method: For a HTMLCONTROL that contains a HTML element as follows: This PL/B GetAttr method returns a value using the following instruction: HtmlControl.GetAttr Giving MyValue Using *ID="MyEdit": *NAME="maxlength"  In this example, the HTML attribute named "maxlength" is retrieved from the HTML element with the id attribute of "MyEdit". The MyValue variable returns a string as follows: 10 -------------------------------------------------------------------- 'SetAttr Method (HTMLCONTROL)' The SetAttr method changes low level HTML element attributes. The method sets the requested attribute of the HTML element that has an id attribute that matches the id parameter. The method uses the following format: [label] {object}.SetAttr [GIVING {return}]: USING [*ID=]{id}: [*Name=]{name}: {*Value=]{value}[: [*Flags=]{flags}] Where: label Optional. A Program Execution Label. object Required. A HTMLCONTROL object that has been declared. return Optional. A Numeric variable that always returns zero. id Required. A Character String Variable or literal that contains HTML element id attribute. name Required. A Character String Variable or string literal that identifies the type of data to be changed in the HTML element. value Required. A Character String Variable or string literal that has the value string applied to the {name} data type. flags Optional. A Numeric Variable or decimal number that specifies a bit mask value that controls the behavior of this method. Flags Affected: OVER, ZERO Note the following: 1. This method is used to change an attribute value in a HTML element contained in a HTMLCONTROL object. 2. The ZERO flag is always set TRUE. 3. The OVER flag is always set FALSE. 4. The {id} is a value that determines the HTML element used for data changes. The {id} string is matched against the id attribute of the HTML element. 5. The {name} identifies the type of data changed in the HTML element matching the {id} string. Information on HTML element attributes can be found at: https://www.w3schools.com/html/html_attributes.asp 6. The {name} parameter can be a pre-defined special name or it can be a HTML attribute for the HTML element being accessed. The pre-defined special name and the HTML attribute names are only used when the current {flags} value is set to zero (0). Special Comment Html Html Contents Text Text Contents Class Class attribute {attr} A valid attribute name 7. The valid values for the {value} parameter depends on the {name} parameter used . 8. The {flags} parameter is a bitmask value that forces specialized behaviors for the execution of this method. 9. The {return} value will always be zero. Example of SetAttr Method: For a HTMLCONTROL that contains a HTML element as follows: This PL/B SetAttr method changes the "maxlength" data value using the following instruction: HtmlControl.SetAttr Using "MyEdit","maxlength","15" In this instruction, the HTML attribute named "maxlength" is changed to 15 in the HTML element with the id attribute of "MyEdit". -------------------------------------------------------------------- 'GetCss Method (HTMLCONTROL)' The GetCss method retrieves the style of a HTML element. The method gets the requested style data from the HTML element that has an id attribute that matches the id parameter. The method uses the following format: [label] {object}.GetCss [GIVING {return}] USING [*Id=]{id}: [*Name=]{name}[: [*Flags=]{flags}] Where: label Optional. A Program Execution Label. object Required. A HTMLCONTROL object that has been declared. return Optional. A Character String Variable that returns a string from a HTML element depending on the {name} data type. id Required. A Character String Variable or literal that contains HTML element id attribute. name Required. A Character String Variable or string literal that identifies the type of CSS style data to be retrieved from the HTML element. flags Optional. a Numeric Variable or decimal number that specifies a bit mask value that controls the behavior of this method. Flags Affected: EOS Note the following: 1. CSS is a language that describes the style of an HTML. This method is used to retrieve a style value from an HTML element contained in a HTMLCONTROL object. 2. The EOS flag is set if the returned data string is larger than the DIM variable used to receive the data. 3. The {id} is a value that determines the HTML element used for data retrieval. The {id} string is matched against the id attribute of the HTML element. 4. The {name} identifies the type of data retrieved from the HTML element matching the {id} string. Information on HTML element CSS style names can be found at: https://www.w3schools.com/css/ 5. The {name} parameter is limited under Windows to the following styles: background, backgroundAttachment, backgroundColor, backgroundImage, backgroundPosition, backgroundPositionX, backgroundPositionY, backgroundRepeat, border, borderBottom, borderBottomColor, borderBottomStyle, borderBottomWidth, borderCollapse, borderColor, borderLeft, borderLeftColor, borderLeftStyle, borderLeftWidth, borderRight, borderRightColor, borderRightStyle, borderRightWidth, borderStyle, borderTop, borderTopColor, borderTopStyle, borderTopWidth, borderWidth, bottom, clear, clip, color, cursor, direction, display, filter, font, fontFamily, fontSize, fontStyle, fontVariant, fontWeight, height, left, letterSpacing, lineBreak, lineHeight, listStyle, listStyleImage, listStylePosition, listStyleType, margin, marginBottom, marginLeft, marginRight, marginTop, maxHeight, maxWidthminHeight, minWidth, overflow, overflow, overflowX, padding, paddingBottom, paddingLeft, paddingRight, paddingTop, pageBreakAfte, pageBreakBefore, position, right, styleFloat, tableLayout, textAlign, textAlignLast, textDecoration, textIndent, textJustify, textOverflow, textTransform, top, unicodeBidi, verticalAlign, visibility, whiteSpace, width, wordBreak, wordSpacing, wordWrap, zIndex 6. If the {name} parameter is unsupported, invalid, or has never been set, an empty string can be returned. 7. The {flags} parameter is a bitmask value that forces specialized behaviors for the execution of this method. 8. The {return} string depends on the {name} data type being requested. Example of GetCss Method: HtmlControl.GetCss Giving MyValue Using "MyEdit","whiteSpace"  In this example, the HTML CSS style named "whiteSpace" is retrieved from HTML element with the id attribute of "MyEdit". The MyValue variable returns a string as follows: pre -------------------------------------------------------------------- 'SetCss Method (HTMLCONTROL)' The SetCss method changes the style of an HTML element. The method sets the requested style of the HTML element that has an id attribute that matches the id parameter. The method uses the following format: [label] {object}.SetCss [GIVING {return}] USING [*Id=]{id}: [*Name=]{name}: {*Value=]{value}[: [*Flags=]{flags}] Where: label Optional. A Program Execution Label. object Required. A HTMLCONTROL object that has been declared. return Optional. A Numeric variable that always returns zero. id Required. A Character String Variable or literal that contains HTML element id attribute. name Required. A Character String Variable or string literal that identifies the type of CSS style to be changed in the HTML element. value Required. A Character String Variable or string literal that has the value string applied to the {name} data type. flags Optional. A Numeric Variable or decimal number that specifies a bit mask value that controls the behavior of this method. Flags Affected: OVER, ZERO Note the following: 1. CSS is a language that describes the style of an HTML. This method is used to set a style value of an HTML element contained in a HTMLCONTROL object. 2. The ZERO flag is always set TRUE. 3. The OVER flag is always set FALSE. 4. The {id} is a value that determines the HTML element used for data changed. The {id} string is matched against the id attribute of the HTML element. 5. The {name} identifies the style to be changed in the HTML element matching the {id} string. Information on HTML element CSS style names can be found at: https://www.w3schools.com/css/ 6. The {name} parameter is limited under Windows to the following styles: background, backgroundAttachment, backgroundColor, backgroundImage, backgroundPosition, backgroundPositionX, backgroundPositionY, backgroundRepeat, border, borderBottom, borderBottomColor, borderBottomStyle, borderBottomWidth, borderCollapse, borderColor, borderLeft, borderLeftColor, borderLeftStyle, borderLeftWidth, borderRight, borderRightColor, borderRightStyle, borderRightWidth, borderStyle, borderTop, borderTopColor, borderTopStyle, borderTopWidth, borderWidth, bottom, clear, clip, color, cursor, direction, display, filter, font, fontFamily, fontSize, fontStyle, fontVariant, fontWeight, height, left, letterSpacing, lineBreak, lineHeight, listStyle, listStyleImage, listStylePosition, listStyleType, margin, marginBottom, marginLeft, marginRight, marginTop, maxHeight, maxWidthminHeight, minWidth, overflow, overflow, overflowX, padding, paddingBottom, paddingLeft, paddingRight, paddingTop, pageBreakAfte, pageBreakBefore, position, right, styleFloat, tableLayout, textAlign, textAlignLast, textDecoration, textIndent, textJustify, textOverflow, textTransform, top, unicodeBidi, verticalAlign, visibility, whiteSpace, width, wordBreak, wordSpacing, wordWrap, zIndex 7. The valid values for the {value} parameter depends on the {name} parameter used. 8. The {flags} parameter is a bitmask value that forces specialized behaviors for the execution of this method. 9. The {return} value will always be zero. Example of SetCss Method: HtmlControl.SetCss Using "MyEdit", "whiteSpace", "pre" In this example, the HTML CSS style named "whiteSpace" is set to the value pre for the HTML element with the id attribute of MyEdit . -------------------------------------------------------------------- 'Focus Method (HTMLCONTROL)' The Focus method changes focus to a low level HTML element. The method sets the keyboard focus to the HTML element that has an id attribute that matches the id parameter. The method uses the following format: [label] {object}.Focus [GIVING {return}] USING [*Id=]{id}[: [*Flags=]{flags}] Where: label Optional. A Program Execution Label. object Required. A HTMLCONTROL object that has been declared. return Optional. A Numeric variable that always returns zero. id Required. A Character String Variable or literal that contains HTML element id attribute. flags Optional. A Numeric Variable or decimal number that specifies a bit mask value that controls the behavior of this method. Flags Affected: OVER, ZERO Note the following: 1. This method is used to change the keyboard focus to a HTML element contained in a HTMLCONTROL object. 2. The ZERO flag is always set TRUE. 3. The OVER flag is always set FALSE. 4. The {id} is a value that determines the HTML element that will receive the focus. The {id} string is matched against the id attribute of the HTML element. 5. The {flags} parameter is a bitmask value that forces specialized behaviors for the execution of this method. 6. The {return} value will always be zero. Example of Focus Method: HtmlControl.Focus Using "MyEdit" In this example, the focus is set to the HTML element with the id attribute of MyEdit -------------------------------------------------------------------- 'MakePict Method (HTMLCONTROL using Plbwin, Plbnet, Plbserve)' The MakePict method stores the contents of a HTMLCONTROL object into a PICT object. This method is only works using a Plbwin, Plbnet, or Plbserve runtime. The method uses the following format: [label] {object}.MakePict [GIVING {pict}] Where: label Optional. A Program Execution Label. object Required. A HTMLCONTROL object that has been declared. pict Optional. A PICT object that receives the current contents of a visible HTMLCONTROL object. Flags Affected: EOS, OVER, ZERO Note the following: 1. The {pict} object is destroyed before the new picture is stored. 2. The visible area of the HTMLCONTROL is stored as the image in the {pict} object. 3. The EOS, OVER, and ZERO flags are always cleared (i.e. FALSE). 4. The method does not transfer any data into the PICT return object when the HTMLCONTROL is not activated. If no data is retrieved, the PICT object is not created after the method is completed. The TEST or MOVE object to object instruction can be used to determine if the picture is created after the method is completed. 5. This method is not available when using the PL/B Web Server. -------------------------------------------------------------------- 'UpdateEvents Method (HTMLCONTROL)' The UpdateEvents method will scan the HTML data contained in a HTMLCONTROL and process all data-plbevent, data-plbenable, and data-plbtabid attributes. The method uses the following format: [label] {object}.UpdateEvents [GIVING {return}:] USING [[*Flags=]{flags}] Where: label Optional. A Program Execution Label. object Required. A HTMLCONTROL object that has been declared. return Optional. A Numeric variable that always returns zero. flags Optional. A Numeric Variable or decimal number that specifies a bit mask value that controls the behavior of this method. Flags Affected: OVER, ZERO Note the following: 1. This method is used to change the keyboard focus to a HTML element contained in a HTMLCONTROL object. 2. The ZERO flag is always set TRUE. 3. The OVER flag is always set FALSE. 4. This method will scan the HTML data contained in a HTMLCONTROL and process all data-plbevent, data-plbenable, and data-plbtabid attributes. This should be done after dynamically changing the HTML data for these attributes using the SetAttr method. 5. The {flags} parameter is a bitmask value that forces specialized behaviors for the execution of this method. 6. The {return} value will always be zero. Example of UpdateEvents Method: ................................................................ . This example shows how to add new HTML element can be added . to a HTMLCONTROL webpage using the pre-defined 'html' . attribute. . HtmlControl.SetAttr Using *ID="myDiv", *NAME= "html": *VALUE="

Hi

" HtmlControl.UpdateEvents In this example, the a new

HTML object is inserted into the myDiv HTML object. This new

HTML Object has a data-plbevent attribute with a click event. The UpdateEvents method with cause the data-plbevent attribute to be processed. ................................................................ . This example shows hows to change 'data-plbevent' attribute . for the id='hi' HTML element can be changed. . HtmlControl.SetAttr Using *ID="hi", *NAME="data-plbevent": *VALUE="click focus" HtmlControl.UpdateEvents //Update the HTML events! In this example, the

HTML object attribute named 'data-plbevent' is changed to include both the 'click' and 'focus' events. The UpdateEvents method processes and updates the 'data-plbevent'. - In the PL/B Language Reference manual, change the 'PDF PRTOPEN Notes' section to remove duplicate descriptions that exist in the Note (3.) for the following: PDF_FLAGS_USE_SUBFONTS EQU 2048 (0x0800) PRT_FLAGS_UNICODE EQU 4096 (0x1000) - In the PL/B Language Reference manual, change the 'PDF PRTOPEN Notes' section for Note (3.) to include the following FLAGS bit value: Note 3. PDF_FLAGS_PRE10_0A EQU 8192 (0x2000) When this bit is turned on, the PDF output uses vertical positioning calculations that were used for 10.0 and earlier runtime versions. The default behavior when this bit is not turned on causes runtime 10.0A and newer versions to use vertical calculations to better match direct printed output. - In the PL/B Language Reference manual, change the '%IF' section as follows: Change these these syntax formats: (6) %IFDEF {datalabel} (8) %IFNDEF {datalabel} (20) CIFDEF {datalabel} (22} COFMDEF {datalabel} Remove\Delete these syntax formats: (7), (9), (21), and (23) Modified the Note (8.) to read as follows: Note 8. The %IFDEF and %IFNDEF instructions test whether a (datalabel} has been declared or not. If the {datalabel} operand of these directives is not terminated by a blank character, a compiler warning is give by default when the program is compiled. If the compiler option '-B' is used, the compiler gives an error instead of a warning. - In the PL/B Language Reference manual, add a new section named 'CODEPAGE Property (HTMLCONTROL)' as follows: CODEPAGE Property (HTMLCONTROL) The CODEPAGE property allows a user program to declare the encode format of program data being used when the program interacts with the HTMLCONTROL object. By default, all data must be in UTF-8 encoded format when the data is sent\received when the PL/B runtime interfaces with the client browser being used by the HTMLCONTROL object. This property can be used to turn the PL/B runtime UTF-8 data encoding on or off for the HTMLCONTROL object. Also, when using a Windows OS based PL/B runtime, this property can be used to declare whether a specific Windows codepage value ( 400 to 65536 ) is to be used when transforming the program data into the UTF-8 encode format. This property ONLY affects the program data when using the following HTMLCONTROL operations: HTMLCONTROL 'InnerHtml' Property HTMLCONTROL 'GetAttr' Method HTMLCONTROL 'SetAttr' Method The property uses the following format: CODEPAGE={type} Where: {type} - is a decimal number, a Numeric Variable, or an expression. The {type} value can be one of the following: Value Comment 0 There is NO data conversion. The data is transferred to the HTMLCONTROL exactly as provided by the user program. This data must be in UTF-8 format. 1 The user program transferred to the HTMLCONTROL is converted to UTF-8. This is the default behavior when the CODEPAGE is not being used by a user program. 400 to These values can be specified to 65536 define a Windows OS codepage to be used when converting the program data into UTF-8 which is transferred to the HTMLCONTROL. Note the following: 1. The CODEPAGE property can be used in CREATE, GETPROP, or SETPROP statements. 2. Any invalid {type} values cause the default behavior the same as described by a value of 1. - In the PL/B Runtime Reference manual, under the 'PLBCMP Command Line Syntax' section change the compiler options table to incude the 'B' option described as fillows: Option Result B Force a compiler error instead of a compiler warning when the compiler processes the operand of a %IFDEF, %IFNDEF, CIFDEF, or CIFNDEF directive and the data label is not terminated with a blank! - IN the PL/B Runtime Reference manual, add the following to the O103 error description found in the 'O (Object) Errors' section: If the error was on a CREATE instruction or a FORMLOAD for a BUTTON, CHECKBOX, or RADIO object, the sub-code can be one of the following values: 20001 - Error encountered resolving a PICTURE property for a BUTTON object. 20002 - Error encounterd resolving an ICON property for a BUTTON object. 0 to 16000 - Windows Error Code value where the cause can be found at the following link: "https://msdn.microsoft.com/en-us/library/windows/ desktop/ms681381(v=vs.85).aspx" *============================================================================== The following files have been changed as noted: ------------------------------------------------------------------------------- PLBSERVE - Corrected a problem where the EDITTEXT\RICHEDITTEXT 'setunicode' method was prematurely terminating the data in the unicode string. This was causing garbage data to appear in the objects. ------------------------------------------------------------------------------- PLBWEBSRV (HTML\JS\CSS) - Modified to support 10.0A changes. plbwebbasic.css 10.0 171228 plbwebbasic.js 10.0A 180402 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 'plbwebbasic.js' to support a new jQuery event named 'ClientEventPostMessage' (i.e. 302 Client event ). This event can be registered in a PWS PLB program to detect a client browser JavaScript 'window.postMessage' method operation. Note: 1. The event data sent by the JavaScript 'window.postMessage' operation must have a field that is named 'plbevent' in a JSON data format. Example of JavaScript 'postMessage': parent.postMessage( { 'plbevent': true, 'data': p1 }, "*"); 2. The client browser JavaScript 'postMessage' method can be used to communicate data from a HTML iframe to a PWS PLB event routine that has been registered for the 'ClientEventPostMessage' (302) specialized event. - Modified 'plbwebmob.js' to correct a problem where a PLB program executing in the PLM mobile mode where an error dialog exit would revert the PLB program to execute in the PLC normal mode. - Changes made to support new HTMLCONTROL object in plbwebbasic.js, plbmobstart.html, and plbwebstart.html. ------------------------------------------------------------------------------- PLBWEBSRV (Windows) - Modified the PWS SetFocus processing to cleanup EDITDATETIME only when 199Aa its parent WINDOW is active. This change is being done to only perform operations at the client browser when they are needed. - Corrected a problem where a PWS CREATE instruction for a TOOLBAR did not work properly which could cause indeterminate program execution. - Modified TOOLBAR operations to properly process DESTROY and cleanup when the TOOLBAR does not contain any Tool Buttons. This change corrects unexpected behaviors by the client browser JavaScript routines. ------------------------------------------------------------------------------- PLBWEBSRV - Modified the PWS runtime to support a new PWS CLIENT object 'PostMessage' event that can be used to communicate data from a PWS PANEL iframe to a PWS PLB event routine. See the documentation section for more details. - Modified the PWS runtime to properly handle the IMAGELIST cleanup operations which could cause unexpected program behaviors. ------------------------------------------------------------------------------- PLBSERVE, PLBCLIENT, PLBCLICON, PLBCLINET - Corrected a problem where the CREATE of a FONT with an ANGLE property did not work using Application Server. ------------------------------------------------------------------------------- PLB(UNIX), PLBSERVE(UNIX) - Corrected a problem where the COMCHECK did not properly cleanup for a socket error while attempting to send pending data. With this change, the COMCHECK now clears the COMSTAT state flags and closes the socket connection when a socket error is detected while sending pending write data. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLBWEBSRV (Windows) - Corrected a problem where the COMCHECK instruction would hang while attempting to send buffered COMWRITE data. With this correction, the COMCHECK also clears the COMSTAT state flags and closes the socket connection when a socket error is detected while sending buffered COMWRITE data. This issue ONLY existed when using a Windows runtime using a socket connection. - Corrected a problem where the enhanced COPYFILE was not setting the Windows ARCHIVE attribute for the output file. - Modified the operation of logging on to a Data Manager to make sure that extended error data is included. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX), PLBWEBSRV - Note, the Data Manager has been modified to correct a message buffer resizing problem when a PL/B program uses a VIEW file name with the '|' redirection which retrieves VIEW data from the Data Manager. See the Data Manager RFM for more details. - Modified to support a new math instruction named 'ARCTAN2'. The ARCTAN2 instruction calculates the arctangent of the value of 'y/x' and returns a value in the range –pi to pi radians. Note the following special scenarios: 1) If x equals 0 then 1a) Arctan2 returns pi/2 if y is positive 1b) Arctan2 returns -pi/2 if y is negative 2) Arctan2 returns 0 if y is 0 See the 'PLBCMP' section for more details on ARCTAN2. - Modified 'GETFILE FILELIST' to only set the ZERO flag when all of the files in the FILELIST are currently opened. Prior to this change the 'GETFILE FILELIST' was always setting the ZERO flag regardless of whether the filelist files were opened or not. - Adjusted the vertical positioning for *RNDRECT and *OVAL controls to align with default pdf print line characters when using *UNITS=*CHARS. This corrects PDF output alignment problems. - Adjusted the glyph vertical position for default pdf print line characters to better match direct printed output. Added the 'P_FLAGS_PRE10_0A' PRTOPEN flag to use glyph vertical position calculations used for versions prior to the 10.0A patch release. - Modified the PL/B runtimes to ignore leading and trailing double characters when both are included in file name string for PL/B instructions. This change is being made to avoid invalid file name errors such as an I11 when double quote characters are included in the file name string. This change affects the following instructions. CHAIN COPYFILE CREATE ICON CREATE PICT ERASE FINDDIR FINDFILE HTTP ( TRACE, TRACEAPPEND, and FILENAME keywords ) LOADMOD MAILSEND ( ATTACHMENT, TRACE, and TRACEAPPEND keywords ) OPEN PREP PRTOPEN ( PDFNAME and SPOOLFILE keywords ) PRTPLAY RENAME SETMODE ( *DISPLAY, *KEYIN, and *RESLIB keywords ) SETPROP ( ICON and PICT properties ) SPLOPEN Note: 1. The use of double quote ( " ) characters included in file names is NOT needed NOR required by PLB instructions as shown above. Examples: // The leading and trailing '"' characters included with the // fle name are ignored. FINDFILE "#"c:\temp\test quote\myfile.txt#"" - Corrected a problem where SCHEMA extended error was not being reported for an I85 error which should include the 'table:field' names causing the error. - Corrected a Sunbelt 'pdf:' problem where output using the PRT_FLAGS_UNICODE ( 4096 or 0x1000 ) flag was not properly generating RTL ( Right-to-Left ) output for Hebrew formatting rules. With this change, the PL/B 'pdf:' output is the same as the Windows PL/B Print Preview presentation when rendering Hebrew data requiring RTL formatting. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLBWEBSRV, ALL GUI CLIENTS - Added a method named 'GetMonitorInfo' to the CLIENT object. This method has been add to provide monitor information for one or more display monitors being used on a Windows OS workstation. ............................................................... . GetMonitorInfo Method for CLIENT Object . The GetMonitorInfo method can be used to get monitor information for one or more display monitors being used. The method uses the following format: [label] {object}.GetMonitorInfo GIVING {return}[: USING [Options=]{options}] Where: {label} is an optional Program Execution Label. {object} is a required and a CLIENT object that has been previously declared. {return} is a Character String Variable that returns the monitor(s) information. {Options} Optional. A Numeric Variable or decimal number that specifies a bit mask value that controls the operations of this method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The EOS flag is set TRUE if the return variable is too small to receive all of the monitor(s) information and the data has been truncated. 2. The ZERO flag is always cleared. 3. The OVER flag is always cleared. 4. The optional {options} bit mask values can be used to changed the execution behavior of the GetMonitorInfo method as follows: Value Description 0x0000000 The default value which returns the data for all known monitors. 5. The {return} character string contains monitor information that is formatted as follows: "{hwnd},{type},{top},{bottom},{left},{right};{hwnd1},..." Where: {hwnd} - HMONITOR handle of a display monitor. This value can be used in WINAPI instructions executed to perform user program operations for the display monitor. {type} - This field is returned as a value of '1' which identifies that this is the Primary display monitor. A value of '0' indicates that the display monitor is a secondary monitor. {top} - This field is a numeric value that is the display monitor top coordinate relative to the Workstation virtual screen. This value can be a negative coordinate value. {bottom} - This field is a numeric value that is the display monitor bottom coordinate relative to the Workstation virtual screen. This value can be a negative coordinate value. {left} - This field is a numeric value that is the display monitor left coordinate relative to the Workstation virtual screen. This value can be a negative coordinate value. {right} - This field is a numeric value that is the display monitor right coordinate relative to the Workstation virtual screen. This value can be a negative coordinate value. Example using single display monitor: "65537,1,0,1050,0,1680;" - '65537' is the HMONITOR handle - '1' indicates this is the Primary monitor. - '0' is the top coordinate value of monitor. - '1050' is the bottom coordinate value of monitor. - '0' is the left coordinate value of monitor. - '1680' is the right coordinate value of monitor. Example using dual display monitors: "65537,1,0,1080,0,1920;65539,0,0,1080,-1920,0;" - '65537' is the HMONITOR handle - '1' indicates this is the Primary monitor. - '0' is the top coordinate value of monitor. - '1080' is the bottom coordinate value of monitor. - '0' is the left coordinate value of monitor. - '1920' is the right coordinate value of monitor. ---------- - '65539' is the HMONITOR handle of a secondary monitor - '0' indicates this is not the Primary monitor. - '0' is the top coordinate value of monitor. - '1080' is the bottom coordinate value of monitor. - '-1920' is the left coordinate value of monitor. The negative value indicates that this secondary monitor is located to the left of the primary monitor for the Windows virtual screen. - '0' is the right coordinate value of monitor. 6. When using the PWS runtime, the 'GetMonitorInfo' method returns client browser screen object information. In this case, the monitor information only provides single monitor data as found in the browser screen object. Example using PWS client browser: "0,1,0,1050,0,1680;" - '0' is always zero for the HMONITOR handle. - '1' is always one for the Primary monitor. - '0' is the top coordinate value which is always zero. - '1050' is the bottom coordinate value of monitor identified by the height retrieved from the browser screen object. - '0' is the left coordinate value which is always zero. - '1680' is the right coordinate value of monitor identified by the width retrieved from the browser screen object. 7. Example code using 'GetMonitorInfo': . cMonCnt CONST "5" cl CLIENT MonArr DIM 64(cMonCnt) . MonRec RECORD (cMonCnt) hMonitor FORM 11 //HMONITOR handle of monitor. nPrimary FORM 2 //Primary = 1 or Not Primary = 0 nTop FORM 11 //Top coordinate in virtual screen nBottom FORM 11 //Bottom coordinate in virtual screen nLeft FORM 11 //Left coordinate in virtual screen nRight FORM 11 //Right coordinate in virtual screen RECORD . DX DIM 320 I FORM 1 . CLEAR MonArr, MonRec cl.GetMonitorInfo GIVING S$CMDLIN EXPLODE S$CMDLIN, ";", MonArr . FOR I, 1, cMonCnt . TYPE MonArr(I) BREAK IF EOS . EXPLODE MonArr(I), ",", MonRec(I) . REPEAT . Stop - Modified the 'SETPROP COLLECTION' so an error does not occur when the COLLECTION has not been created. - Added a new GUI object named 'HTMLCONTROL'. The HTMLCONTROL object is a container which can be populated with HTML elements. The HTMLCONTROL object can exist and be used in programs executed by the runtimes PLBWIN, PLBNET, PLBSERVE, and PLBWEBSRV. See more details in the readme documentation section. Properties: ANCHOR BGCOLOR DOCK ENABLED ( Requires Html Element attribute: 'data-plbenable' ) HEIGHT HWND INNERHTML ( Same behavior as 'InnerHtml' method. ) LEFT OBJECTID RUNNAME TABID ( Requires Html Element attribute: 'data-plbtabid' ) TOP USERDATA VISIBLE WEBCLASS WEBHEIGHT WEBLEFT WEBPOSITION WETOP WEBWIDTH WIDTH ZORDER Instructions: ACTIVATE CHECKPROP CREATE DEACTIVATE DESTROY EVENTREGISTER EVENTSEND GETPROP SETFOCUS SETPROP TYPE Events: $JQueryEvent Methods: DisableJqEvent //All PWS objects EnableJqEvent //All PWS objects Focus //HTMLCONTROL Only GetAttr //HTMLCONTROL Only GetCss //HTMLCONTROL Only GetWebId //All PWS objects GetWebStyle //All PWS objects InnerHtml //HTMLCONTROL Only MakePict //HTMLCONTROL Only Plbwin, Plbnet, Plbserve SetAttr //HTMLCONTROL Only SetCss //HTMLCONTROL Only SetWebStyle //All PWS objects UpdateEvents //HTMLCONTROL Only The methods implemented specifically for the HTMLCONTROL object are described as follows: Focus GetAttr InnerHtml GetCss MakePict Plbwin, Plbnet, and Plbserve Only SetAttr SetCss UpdateEvents ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX), PLBWEBSRV, ALL GUI CLIENTS - Modified the Sunbelt PRTPAGE *TEMPLATE keyword to support additional PDF font object structures when generating the Sunbelt 'pdf:' output. This modification helps correct the Sunbelt PDF output format which could cause Adobe reader font errors loading the Sunbelt PDF file. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, ALL GUI CLIENTS ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Modified the runtime to detect a scenario where the DBGWIN font becomes unusable resulting in a black character debugger (plbdbug) screen. When the unusable DBGWIN font is detected, the runtime defaults to use the font currently being used for the PLB MAIN window. If the '-d3' debug log file is used, then an appropriate error message is logged when an unusable DBGWIN font is detected. Note: 1. The file named 'c:\sunbelt\plbwin.xxx\code\plbwind.fon' file contains the DBGWIN font. The Sunbelt installations and runtimes DO NOT install the DBGWIN font as a Windows permanent font. a. The PLBWIN\PLBNET runtimes CAN NOT directly install the 'plbwind.fon' (DBGWIN font) as a permanent font. b. If the DBGWIN font DOES NOT exist as a Windows font when the PLBWIN\PLBNET runtimes are started, the runtimes create a temporary logical Windows DBGWIN font using Windows APIs to load\create the font using an existing 'plbwind.fon' file. c. If the DBGWIN font DOES exist as a Windows font when the PLBWIN\PLBNET runtimes are started, the runtimes use this existing DBGWIN font. 2. A font can be installed as a permanent font as follows: The "Fonts folder" is the 'c:\Windows\Fonts' directory. a. Font files copied to the "Fonts folder" via the Windows File Explorer are registered automatically. b. Font files copied directly to the "Fonts folder" via a batch file or manually using a 'Command Prompt' are not automatically registered. In this case, a reboot of the system causes the font file to be installed as a permanent Windows Font. c. Font files can be installed using a product installer which installs a permanent font. However, the Sunbelt Product Installations DO NOT install a Font as a permanent font. The Sunbelt Product Installations only 'register' the DBGWIN font. 3. At this point, Sunbelt has ONLY been able to REPRODUCE the 'black character debugger (plbdbug) screen issue as follows: a. Using the Windows File Explorer, install the 'plbwind.fon' file resulting in a Windows permanent font named DBGWIN. In this case, the 'plbwind.fon' is located in the 'c:\Windows\Fonts' directory. b. Using the Windows 'Command Prompt', execute the 'del c:\Windows\Fonts\plbwind.fon' command to delete the file. Under normal circumstances, manual deletion of the 'plbwind.fon' file for a Windows permanent font is NOT RECOMMENDED! c. Using the Windows 'Command Prompt', execute the command 'plbwin -d myprogram'. d. In this case, Windows DBGWIN font exists and all of the font 'glyphs' are empty as observed using the Windows 'Character Map' utility. e. At this point, the PLB character debugger window could result in the 'Black' screen behavior if the 'plbwind.fon' file is not accessible by the runtime. f. The DBGWIN 'Black' screen behavior can be fixed by using the Windows File Explore to re-install an existing 'plbwind.fon'. 4. In summary, the PLBWIN\PLBNET runtimes CAN NOT fix an unusable Windows DBGWIN font. However, the PLBWIN\PLBNET runtimes have been modified to ignore a 'bad' Windows DBGWIN font by using the Windows font being used for the PLB MAIN Window. - Modified the BUTTON 'DEFAULT' and 'CANCEL' properties to set the $CLICK event Modifier to identify that a default or cancel action was used to generate the $CLICK event. In this case, $CLICK modifier values are defined as follows: BUTTON $Click Modifier Values: 0x0000 - Mouse Click generated the $CLICK event. 0x0100 - Default key action generated the $CLICK event. 0x0200 - Cancel key action generated the $CLICK event. - Modified the CREATE operaton for the BUTTON, CHECKBOX, and RADIO objects to provide a subcode value which can help explain the cause of error. See the Documentation section for more details for O103 error subcodes. ------------------------------------------------------------------------------- PLBCMP - Modified the ADMLOGON, ADMCOMMAND, ADMGETINFO, and ADMSETINFO numeric operands to accept numeric literals. - Modified to support a new math instruction named 'ARCTAN2'. ARCTAN2 The ARCTAN2 instruction calculates the arctangent of the value of 'y/x' and returns a value in the range –pi to pi radians. Note the following special scenarios: 1) If x equals 0 then a) Arctan2 returns pi/2 if y is positive b) Arctan2 returns -pi/2 if y is negative 2) Arctan2 returns 0 if y is 0 The instruction uses the following format: [label] ARCTAN2 {sourcey}{sep}{sourcex}{sep1}{dest} Where: label Optional. A Program Execution Label. sourcey Required. A Numeric Variable, numeric Literal, or Expression specifying the 'y' value. sep Required. A comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, or INTO. sourcex Required. A Numeric Variable, numeric Literal, or Expression specifying the 'x' value. sep1 Required. A comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, INTO, or GIVING. dest Required. A Numeric Variable that receives the arctangent of the ( sourcey/sourcex ). Flags Affected: LESS, OVER, ZERO Note the following: 1. The result is placed in the {dest} operand. 2. The {sourcey} and {soucex} operands remain unchanged. 3. The calculated value of {dest} is expressed in radians. 4. The EQUAL (or ZERO), OVER, and LESS Condition Flags are applicable. 5. The rounding and truncation rules described in the section 'Numeric Variables' are applicable. 6. If the environment variable PLB_ROUND is present, the result is rounded in accordance with the ANSI PL/B specification. Otherwise, the source operands are aligned and rounded, as applicable, to the destination operand's format. 7. This instruction supports the mixing of variable types (FORM and INTEGER). 8. Enhanced Array processing is supported. 9. ARCTAN2 is not supported by the PLBCE runtime. Example of ARCTAN2: Y form 5.4 X form 5.4 dest form 8.4 . MOVE "1", Y MOVE "2", X . ARCTAN2 Y,X,dest . ARCTAN2 Y WITH X INTO dest . ARCTAN2 Y BY X GIVING dest . - Added support for a new GUI object named 'HTMLCONTROL' See the runtime description for more details. - Modified the compiler to support a new compiler option '-B' which forces an error when the compiler processes the %IFDEF, %IFNDEF, CIFDEF, and CIFNDEF operand and the data label is not terminated with a blank! - Modified the compiler to give a warning when the compiler processes the %IFDEF, %IFNDEF, CIFDEF, and CIFNDEF operand and the data label is not properly terminated! This is needed to warn of 'unexpected' results for data labels that are not terminated by a blank character. Note: See the new 'B' compiler option which can be used to force a compiler error instead of a warning when the compiler processes the %IFDEF, %IFNDEF, CIFDEF, and CIFNDEF operand and the data label is not terminated with a blank! Examples: ..... . Acceptable Syntax: . . %IFDEF {datalabel} . %IFNDEF {datalabel} . CIFDEF {datalabel} . CIFNDEF {datalabel} ... . ABC DIM 1 PDECLARED DIM 1 DEFINED DIM 1 . %IFDEF ABC DISPLAY "'ABC' data label exists OK!" %ENDIF . CIFNDEF PDECLARED(ABC) //Syntax of label stops at first '('. DISPLAY "'PDECLARED(ABC)' WARNING..unclear user intentions!" CENDIF . CIFDEF DEFINED(XYZ) //Syntax of label stops at first '(' DISPLAY "'DEFINED(XYZ)' WARNING...unclear user intentions!" CENDIF . - Corrected an unexpected error which would occur in a %IFDEF, %IFNDEF, CIFDEF, and CIFNDEF directive when the data label reference used a syntax where the 'RecLabel' existed and the record member did not exist. Example of Unexpected Compiler Error: . RecLabel RECORD x DIM 1 y DIM 1 RECORDEND . %IFDEF RecLabel.z //Caused error if no 'z' member! ...Program code %ENDIF - Corrected a problem where the compiler was not allowing a null literal for the ' SEARCHPATH SET, "" ' instruction. - Corrected a problem where inappropriate use of BUTTONS, ITEMS, and PANELS internal collections did not give a compiler error for instructions shown as follows: tbMain TOOLBAR . . The following instructions SHOULD give a compiler error. . SETPROP tbMain.BUTTONS("Name").Items(0), ENABLED=$False ;Error . SETPROP tbMain.BUTTONS("Name").Buttons(0), ENABLED=$False ;Error ------------------------------------------------------------------------------- PLBDBUG - Modified the character debugger to always attempt to first open the 'program.sdb' file in the same directory where the 'program.plc' being debugged is located. ------------------------------------------------------------------------------- DBGIFACE - Modified to save the GUI debugger position when the debugger quits and it has been invoked by the SunIDE. This allows the GUI debugger to be located at the last known position the next time it is started. - Fixed a problem where the GUI debugger Window and a Watch Window could hang in an endless activation loop. This behavior would cause the GUI debugger to become non-responsive. ------------------------------------------------------------------------------- ADMEQU.INC - Replaced all of the ADMIN equates to be declared as DEFINE string definitions. This change allows the ADMIN definitions to be used as either numeric literals or string literals as required. ------------------------------------------------------------------------------- PLBEQU.INC - Added HTMLCONTROL object. - Added $ClientEventPostMessage equate. - Added $MAXIMIZEWIDTH for PWS. - Added InnerHtml property for HTMLCONTROL object. - Added the $ClientEventPostMessage equate. ------------------------------------------------------------------------------- PLBMETH.INC - Added the HTMLCONTROL object. - Added ClientEventPostMessage equate. - Updated the InnerHtml method for a PANEL. ------------------------------------------------------------------------------- DESIGNER.PLC - Modified the form open logic to convert the form type when opened as 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. ------------------------------------------------------------------------------- EDITOR.PLC - Now disregards F2 key for read-only files. - Added support for the IDE's "Don't Lock Files" option. ------------------------------------------------------------------------------- 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. ------------------------------------------------------------------------------- SCHEMAEDITOR.PLC - Modified XML output to allow views or SQLIO. -------------------------------------------------------------------------------