Date: 10-01-2015 Subject: RELEASE 9.8 Runtime Files These release notes pertain to the following programs or files: EMBEDINI 9.8 01 Oct 2015 9,8,0,500 EMBEDINI64 9.8 01 Oct 2015 9,8,0,500 HEXDUMP 9.8 01 Oct 2015 9,8,0,500 HEXDUMP64 9.8 01 Oct 2015 9,8,0,500 MAKECLI 9.8 01 Oct 2015 9,8,0,500 MAKECON 9.8 01 Oct 2015 9,8,0,500 MAKECONET 9.8 01 Oct 2015 9,8,0,500 MAKEDEF 9.8 01 Oct 2015 9,8,0,500 MAKEMFD 9.8 01 Oct 2015 9,8,0,500 MANAGECE 9.8 01 Oct 2015 9,8,0,500 OBJMATCH 9.8 01 Oct 2015 9,8,0,500 OBJMATCH64 9.8 01 Oct 2015 9,8,0,500 ODBCINST64 9.8 01 Oct 2015 9,8,0,500 PLBCGI 9.8 01 Oct 2015 9,8,0,500 PLBCLICON 9.8 01 Oct 2015 9,8,0,500 (ComCtl 6) PLBCLIENT 9.8 01 Oct 2015 9,8,0,500 (ComCtl 6) PLBCLINET 9.8 01 Oct 2015 9,8,0,500 (ComCtl 6) PLBCON 9.8 01 Oct 2015 9,8,0,500 (ComCtl 6) PLBCONET 9.8 01 Oct 2015 9,8,0,500 (ComCtl 6) PLBDSIGN 9.8 01 Oct 2015 9,8,0,500 PLBNET 9.8 01 Oct 2015 9,8,0,500 (ComCtl 6) PLBSERVE 9.8 01 Oct 2015 9,8,0,500 (Processed Server) PLBSERVET 9.8 01 Oct 2015 9,8,0,500 (Threaded Server PLBWEBSRV 9.8 01 Oct 2015 9,8,0,500 (Processed Server) PLBWEBSRVT 9.8 01 Oct 2015 9,8,0,500 (Threaded Server) PLBWIN 9.8 01 Oct 2015 9,8,0,500 (ComCtl 6) SUNAAMDX 9.8 01 Oct 2015 9,8,0,500 SUNAAMDX64 9.8 01 Oct 2015 9,8,0,500 SETGUID 9.8 01 Oct 2015 9,8,0,500 SUNINDEX 9.8 01 Oct 2015 9,8,0,500 SUNINDEX64 9.8 01 Oct 2015 9,8,0,500 SUNLS 9.8 01 Oct 2015 9,8,0,500 SUNMOD 9.8 01 Oct 2015 9,8,0,500 SUNMOD64 9.8 01 Oct 2015 9,8,0,500 SUNSORT 9.8 01 Oct 2015 9,8,0,500 SUNSORT64 9.8 01 Oct 2015 9,8,0,500 WININST 9.8 01 Oct 2015 9,8,0,500 PLBCON5 9.8 01 Oct 2015 9,8,0,500 (ComCtl 5) PLBCONET5 9.8 01 Oct 2015 9,8,0,500 (ComCtl 5) PLBCLICON5 9.8 01 Oct 2015 9,8,0,500 (ComCtl 5) PLBCLIENT5 9.8 01 Oct 2015 9,8,0,500 (ComCtl 5) PLBCLINET5 9.8 01 Oct 2015 9,8,0,500 (ComCtl 5) PLBNET5 9.8 01 Oct 2015 9,8,0,500 (ComCtl 5) PLBWIN5 9.8 01 Oct 2015 9,8,0,500 (ComCtl 5) PLBNETSUP.DLL 9.8 01 Oct 2015 9,8,0,500 Required for PLBNET PLBWSEC.DLL 9.8 01 Oct 2015 9,8,0,500 Req'd PLBWIN/PLBNET ODSBAC32.DLL 9.8 01 Oct 2015 ODSBAC64.DLL 9.8 01 Oct 2015 SA_DLL32.DLL 9.8 01 Oct 2015 9,8,0,500 SUNWADO.DLL 9.8 01 Oct 2015 9,8,0,500 SUNWADO25.DLL 9.8 01 Oct 2015 9,8,0,500 SUNWADO28.DLL 9.8 01 Oct 2015 9,8,0,500 SUNWMSQL.DLL 9.8 01 Oct 2015 9,8,0,500 SUNWODBC.DLL 9.8 01 Oct 2015 9,8,0,500 SUNWSRV.DLL 9.8 01 Oct 2015 9,8,0,500 ADMEQU.INC 9.8 01 Oct 2015 PLBEQU.INC 9.8 01 Oct 2015 PLBMETH.INC 9.8 01 Oct 2015 DBGIFACE 9.8 01 Oct 2015 PLBCMP 9.8 01 Oct 2015 PLBDBUG 9.8 01 Oct 2015 PLBCLI.ZIP 9.8 01 Oct 2015 9,8,0,600 (ComCtl 6) PLBRUN.ZIP 9.8 01 Oct 2015 9,8,0,600 (ComCtl 6) *============================================================================== Notes for DOCUMENTATION: - In the PL/B Language Reference manual under the GETINFO instruction descriptions make the following changes: Change the Note (1.) table entry for 'TYPE={dbfile}' to read as follows: "information about a specific DBFILE variable opened using ODBC. This keyword does not provide information when the DBFILE is opened using the ADO driver, MYSQL driver, or the SQLite driver. See Note (8.) for more details. This is not available when running as a PLBCLIENT." Add a Note (8.) that reads as follows: "8. The GETINFO TYPE={dbfile} instruction is ONLY implemented to provide information for a DBFILE opened for ODBC access. This instruction does not provide information if not using ODBC. When using other Database Engines using ADO, MYSQL, or SQLite drivers, then specialized SQL instructions for the Database Engines can be executed to retrieve Database information details. For example, the following SQL table can be used to retrieve system table information for MySQL: "SELECT * FROM information_schema.tables" See this link for MySQL 5.7 Documentation: http://dev.mysql.com/doc/refman/5.7/en/information-schema.html - In the PL/B Runtime Reference manual in the PLBCMP 'Command Line Syntax' section, modify the following: Add the Option 'S=0' to read as follows: S=0 - Generate a symbol table file for use with PLBDBUG where the '.sdb' file is encrypted. Change the Note (10.) to read as follows: When PLBCMP is run using the supplied batch file (PLBCMP.BAT), the equal sign (=) used by some of the options are interpreted by the command processor of DOS as a batch assignment. To correctly associate a compiler option using the batch file, substitute the pound (#) sign or colon (:) character for the equal sign (=). - In PL/B Language Reference manual under the 'READ,READTAB,READLK (AFILE)' section, change the Note (26.) to read as follows: Note 26. When a view schema is assigned to a file variable (9.4), the READ instruction can optionally use the column name syntax (format 2, 4, and 6 above). When the column name syntax is being used, all variables used in the instruction variable list must have column names specified. When the column name syntax is not being used, no variables in the instruction variable list can have column names. If the column name syntax specified with the 'columnname' parameter is being used, the 'columnname' parameter can be one of the following: Column name as specified by the VIEW column definitions. @{svar} where {svar} is a variable that contains the column name as specified by the VIEW column definitions. Example: AFILE AFILE myKey DIM 10 myProdid DIM 10 myParam DIM 50 ... . Both of these READ syntax formats give the same results when . using a VIEW definition column name of 'PRODID' and the AFILE . is opened with VIEW definition being used. . READ AFILE, myKey; PRODID=myProdid . MOVE "PRODID", myParam READ AFILE, myKey; @myParam=myProdid . - In PL/B Language Reference manual under the 'READ,READTAB,READLK (FILE)' section, change the Note (20.) to read as follows: Note 20. When a view schema is assigned to a file variable (9.4), the READ instruction can optionally use the column name syntax (formats 2, 4, and 6 above). When the column name syntax is being used, all variables used in the instruction variable list must have column names specified. When the column name syntax is not being used, no variables in the instruction variable list can have column names. If the column name syntax specified with the 'columnname' parameter is being used, the 'columnname' parameter format can be one of the following: Column name as specified by the VIEW column definitions. @{svar} where {svar} is a variable that contains the column name as specified by the VIEW column definitions. Example: FILE FILE SEQ FORM "-1" myProdid DIM 10 myParam DIM 50 ... . Both of these READ syntax formats give the same results when . using a VIEW definition column name of 'PRODID' and the FILE . is opened with VIEW definition being used. . READ FILE, SEQ; PRODID=myProdid . MOVE "PRODID", myParam READ FILE, SEQ; @myParam=myProdid . - In PL/B Language Reference manual under the 'READ,READTAB,READLK (IFILE)' section, change the Note (20.) to read as follows: Note 20. When a view schema is assigned to a file variable (9.4), the READ instruction can optionally use the column name syntax (formats 2, 4, and 6 above). When the column name syntax is being used, all variables used in the instruction variable list must have column names specified. When the column name syntax is not being used, no variables in the instruction variable list can have column names. If the column name syntax specified with the 'columnname' parameter is being used, the 'columnname' parameter can be one of the following: Column name as specified by the VIEW column definitions. @{svar} where {svar} is a variable that contains the column name as specified by the VIEW column definitions. Example: IFILE IFILE myKey DIM 10 myProdid DIM 10 myParam DIM 50 ... . Both of these READ syntax formats give the same results when . using a VIEW definition column name of 'PRODID' and the IFILE . is opened with VIEW definition being used. . READ IFILE, myKey; PRODID=myProdid . MOVE "PRODID", myParam READ IFILE, myKey; @myParam=myProdid . - In PL/B Language Reference manual under the 'WRITE (AFILE)' section, change the Note (12.) to read as follows: Note 12. When a view schema is assigned to a file variable (9.4), the WRITE instruction can optionally use the column name syntax (format 2 above). When the column name syntax is being used, all variables used in the instruction variable list must have column names specified. When the column name syntax is not being used, no variables in the instruction variable list can have column names. If the column name syntax specified with the 'columnname' parameter is being used, the 'columnname' parameter can be one of the following: Column name as specified by the VIEW column definitions. @{svar} where {svar} is a variable that contains the column name as specified by the VIEW column definitions. Example: AFILE AFILE myProdid DIM 10 myParam DIM 50 ... . Both of these WRITE syntax formats give the same results when . using a VIEW definition column name of 'PRODID' and the AFILE . is opened with VIEW definition being used. . WRIE AFILE; PRODID=myProdid . MOVE "PRODID", myParam WRITE AFILE; @myParam=myProdid . - In PL/B Language Reference manual under the 'WRITE (FILE)' section, change the Note (12.) to read as follows: Note 12. When a view schema is assigned to a file variable (9.4), the WRITE instruction can optionally use the column name syntax (format 2 above). When the column name syntax is being used, all variables used in the instruction variable list must have column names specified. When the column name syntax is not being used, no variables in the instruction variable list can have column names. If the column name syntax specified with the 'columnname' parameter is being used, the 'columnname' parameter format can be one of the following: Column name as specified by the VIEW column definitions. @{svar} where {svar} is a variable that contains the column name as specified by the VIEW column definitions. Example: FILE FILE SEQ FORM "-1" myProdid DIM 10 myParam DIM 50 ... . Both of these WRITE syntax formats give the same results when . using a VIEW definition column name of 'PRODID' and the FILE . is opened with VIEW definition being used. . WRITE FILE, SEQ; PRODID=myProdid . MOVE "PRODID", myParam WRITE FILE, SEQ; @myParam=myProdid . - In PL/B Language Reference manual under the 'WRITE (IFILE)' section, change the Note (13.) to read as follows: Note 13. When a view schema is assigned to a file variable (9.4), the WRITE instruction can optionally use the column name syntax (format 2 above). When the column name syntax is being used, all variables used in the instruction variable list must have column names specified. When the column name syntax is not being used, no variables in the instruction variable list can have column names If the column name syntax specified with the 'columnname' parameter is being used, the 'columnname' parameter can be one of the following: Column name as specified by the VIEW column definitions. @{svar} where {svar} is a variable that contains the column name as specified by the VIEW column definitions. Example: IFILE IFILE myProdid DIM 10 myParam DIM 50 ... . Both of these WRITE syntax formats give the same results when . using a VIEW definition column name of 'PRODID' and the IFILE . is opened with VIEW definition being used. . WRITE IFILE; PRODID=myProdid . MOVE "PRODID", myParam WRITE IFILE; @myParam=myProdid . - In the PL/B Language Reference manual under the '*MCURSOR (SETMODE)' section, add the following information for the PWS server operations. The following *MCURSOR values are supported for the PWS runtimes: Value Cursor CSS 'cursor:' Style 1 Arrow auto 2 Cross crosshair 3 IBeam text 4 Plus cell 5 Wait wait 6 Hand grab 7 Drag not-allowed 8 Drop not-allowed 9 Hidden none >9 Arrow auto Note: 1. When executing using a PWS runtime, the CSS 'cursor:' style can be changed using the 'SetWebStyle' for an individual PLB GUI object supported by the PWS runtime. Example: Panel PANEL ;Panel must be created! UseDiv INTEGER 4,"0x01" ;Change HTML 'DIV' ... . Panel.SetWebStyle USING CssName="cursor": StrValue="crosshair": Flags=UseDiv . - In the PL/B Language Reference manual under the 'LISTVIEW Attributes Example', change the program logic to correct compilation problems. Here is the updated PL/B logic: INCLUDE PLBEQU.INC * . Define the Objects Needed . lvExample LISTVIEW clrWhite COLOR clrBlue COLOR clrGry COLOR fntBold FONT fntItalic FONT lblText STATTEXT cmdquit BUTTON . . Work Variables . Result INTEGER 4 String DIM 20 Index FORM 5 Name DIM 20 Phone DIM 20 Toggle FORM "1" RowColor INIT ",0" * . Create soe color objects . CREATE clrWhite=*WHITE CREATE clrGry=211:211:211 CREATE clrBlue=*Blue * . Create a font object . CREATE fntItalic,"Courier New",Size=12,Italic * . Create the listview object . CREATE lvExample=2:16:15:50,Appearance=$3D: Border=$True,GridLine=$TRUE * . Create the stattext instructions CREATE lblText=17:18:20:50: "Double click a name to toggle","SYSTEM(10)" * . Create two columns in the listview . lvExample.InsertColumn using "Names",140,0 lvExample.InsertColumn using "Phones",140,1 * . Add an attribute column . lvExample.InsertAttrColumn USING 2 * . Set the attribute colors . lvExample.InsertAttrColor using clrWhite,clrGry,clrBlue * . Set the attribute font . lvExample.InsertAttrFont using fntItalic * . Set the default row attributes . lvExample.insertAttrDefault USING ",1" // white background * . Add 10 rows of data alternating the background color . lvExample.deleteallitems . FOR Index,1,20 MOVE Index,String SQUEEZE String,String PACK Name with "Name",String PACK Phone with "Phone",String lvExample.InsertItemEx using Name,99,*SubItem1=Phone: *SubItem2=RowColor . . Toggle the row background color . DECR Toggle IF (Toggle) CLEAR RowColor // switch to the default ELSE MOVE ",2",RowColor // switch to tan ENDIF REPEAT * . Make the listview and stattext visible . SETPROP lvExample,Visible=$True SETPROP lblText,Visible=$True * . Catch the double-click event on the listview . EVENTREGISTER lvExample,$DblClick,Select,Result=Result . . Create and activate the quit button . CREATE cmdQuit=20:21:26:34,"Quit",Cancel ACTIVATE cmdQuit,Quit,Result . . Wait for an Event to Occur . LOOP EVENTWAIT REPEAT . . The ListView Was Clicked - Toggle the colors and font . SELECT lvExample.GetAttributeColumn giving Index MATCH "1,3,1",String // if white on blue IF EQUAL IF (((Result / 2) * 2) = Result) CLEAR String // restore to the default MOVE ",2",String // restore to tan ENDIF ELSE MOVE "1,3,1",String ENDIF lvExample.SetItemText using Result,String,Index RETURN . . Quit Button Clicked . QUIT STOP - In the PL/B Language Reference manual under the 'Functions' section, add a new Note (21.) that reads as follows: Note: 21. A PLBCMP compiler error occurs when a MOVEPTR, MOVEADR, LOADADR, or STOREADR instruction attempts to move\assign a (L)Function pointer variable value to any pointer variable that is declared outside the scope of the (L)Function. This compiler restriction exists because the compiler has no knowledge about the origin of any pointer values during the compilation phase. The compiler error for this scenario reads as follows: "Can not store variable pointer outside (L)Function scope!" - As originally implemented for the EDITNUMBER GUI object, the behaviors described in the 'ACTIVATE EDITNUMBER' section in the PL/B Language Reference manual DO NOT and NEVER have existed. Therefore, in the PL/B Language Reference manual under the 'ACTIVATE EDITNUMBER' section, modify the Notes as follows: 1. Delete notes 2 through 8. 2. Add the Note (2.) as follows: Note 2. The ACTIVATE instruction for the EDITNUMBER ONLY causes this GUI object to become visible. The optional [routine] and [result] parameters are not used and the runtime DOES NOT generate any ACTIVATE default event(s). All events for the EDITNUMBER object are specified and implemented via the EVENTREGISTER instruction. 3. Renumber the Notes (9.), (10.), and (11.) to be (3.), (4.) and (5.). - As originally implemented for the RICHEDITTEXT GUI object, the behaviors described in the 'ACTIVATE RICHEDITTEXT' section in the PL/B Language Reference manual DO NOT and NEVER have existed. Therefore, in the PL/B Language Reference manual under the 'ACTIVATE RICHEDITTEXT' section, modify the Notes as follows: 1. Delete notes 2 through 8. 2. Add the Note (2.) as follows: Note 2. The ACTIVATE instruction for the RICHEDITTEXT ONLY causes this GUI object to become visible. The optional [routine] and [result] parameters are not used and the runtime DOES NOT generate any ACTIVATE default event(s). All events for the RICHEDITTEXT object are specified and implemented via the EVENTREGISTER instruction. 3. Renumber the Notes (9.), (10.), and (11.) to be (3.), (4.) and (5.). - In the PL/B Web Server manual under the 'Considerations' section, add a Note (11.) that reads as follows: Note (11.): The ACTIVATE instruction as originally implemented depends on specific Windows OS states and messages\events that allow the default object events to occur with specific event results. Using a PWS runtime, the ACTIVATE {object} instruction implementation is based on the EVENTREGISTER events which best match the expected ACTIVATE default event behavior. The ACTIVATE default events for PWS objects are defined as follows: EventRegister events used for Activate Default Events: EventRegister Event PWS Object $CHANGE SLIDER TABCONTROL $CLICK BUTTON CHECKBOX COMBOBOX DATALIST FLOATMENU LISTVIEW MENU RADIO SUBMENU $TIMER TIMER $MOUSEDOWN GROUPBOX ICON LABELTEXT LINE MREGION - Specialized flags implemented PANEL PICT PROGRESS SHAPE STATTEXT WINDOW Special Default EDITTEXT - Specialized for Got\Lost focus - In the PL/B Language Reference manual in the 'BUTTONTYPE Property' section, modify the Note (5.) to add a sub-note as follows: Sub-note for Note (5.): E. The client browser controls all behaviors associated with the generation of the CHANGE event related to the operations of the 'File Upload' selection dialog. The PWS JavaScript and runtime operations CAN NOT change the behaviors of the client browser as described below: FireFox The FF browser generates a JavaScript change event when the same file is selected multiple times back to back. Chrome The Chrome browser generates a Javascript change event when a file is first selected. However, if the same file name is selected a second time in back to back select actions, the Chrome browser DOES NOT generate a JavaScript change action on the selection. In this scenario, the browser DOES NOT determine that a change has occurred when the same file name(s) is selected in back to back file selection operations. IE The IE browser generates a Javascript change event when a file is first selected. However, if the same file name is selected a second time in back to back select actions, the IE browser DOES NOT generate a JavaScript change action on the selection. In this scenario, the browser DOES NOT determine that a change has occurred when the same file name(s) is selected in back to back file selection operations. - In the PL/B Language Reference manual in the 'ALERT' instruction section, add notes that read as follows: Note the following: 21. Beware that the 'ALERT' instruction can disrupt OS event messages resulting in PLB events that are lost or altered to give inconsistent results in different UI environments. This instruction should NOT be used when the PLB applications require a very specific sequence of PLB event operations and behaviors in many different OS UI environments. This warning applies for all runtimes including Windows and client browser UI environments. 22. Since the PWS ALERT CAN NOT simulate the indeterminate Windows OS behaviors of the Windows OS 'MessageBox' used for the PLBWIN ALERT instruction, the PWS ALERT is being changed to clear all PLB user events in an attempt to force consistent behaviors for the different client browser types. - In the PL/B Language Reference manual in the 'U (Untrappable) Errors' section add the following U47 error description: U47 - Insufficient memory available to re-allocate the Plbclient interface message buffer. - In the PL/B Language Reference manual in the 'TABSTOPS Property' section, remove the '!' character usage\reference in the Note (11.) and (12.). The '!' character support was never implemented. - In the PL/B Language Reference manual in the 'OPEN (AFILE)' section, remove the CMP_NOSHRINK mode and description found in Note (15.). - In the PL/B Language Reference manual in the 'OPEN (IFILE)' section, remove the CMP_NOSHRINK mode and description found in Note (13.). - In the PL/B Language Reference manual in the 'PREPARE (AFILE)' section, remove the CMP_NOSHRINK mode and description found in Note (19.). - In the PL/B Language Reference manual in the 'PREPARE (IFILE)' section, remove the CMP_NOSHRINK mode and description found in Note (17.). - In the PL/B Language Reference manual in the 'FINDDIR' section, change the Note (8.) to combine the 0x8, 0x20, and 0x40 mask values into one description as follows: 0x8 - Include the last write time as a delimited field in the 0x20 return string. These mode bit mask values are mutually 0x40 exclusive. See Note (13.). (9.3A) Where: 0x8 - The last write times are adjusted for the timezone and Daylight Savings Time (DST). On a Windows system, this last write time form is compatible with the Windows Explorer. 0x20 - In this case, the last write times are adjusted for the timezone without being adjusted for the Daylight Savings Time (DST). 0x40 - In this case, the raw last write times are returned. The raw last write time is the OS UTC timestamp which is not adjusted to any timezone or Daylight Savings Time (DST). - In the PL/B Language Reference manual in the 'UPDATE,UPDATAB (FILELIST)', section, modify the Note (2.) to read as follows: Note the following: 2. The instruction will update all keys of the ISAM or AAM files defined in the FILELIST that are changed by the {list} variables. If the UPDATE FILELIST instruction does not change the ISAM keys for an IFILE, the current key pointer for the IFILE is not changed. However, if the UPDATE FILE instruction changes the ISAM keys for an IFILE, the current key pointer for the IFILE is changed to the changed key position. Warning: When the UPDATE FILELIST causes the keys of an IFILE to be changed, the current key pointer for the IFILE is changed to the changed key position. In this case, a READKS after the UDPATE FILELIST returns key sequential records after the updated key pointer. - In the PL/B Language Reference manual in the 'EVENTREGISTER' section, modify the Note (4.) table to include the following PWS event: Value KEYWORD Event Notes 33 $CHILDSIG ChildSignal PL/B Web Server ONLY! - In the PL/B Language Reference manual, add the following description for a new 'ChildSignal Event' section: ChildSignal Event The ChildSignal event is ONLY posted to a specific PWS child process when a PLB program executes the RUNTIME object method named 'SignalChild' executing under the PWS runtime. Note the following: 1. This event is a simple signal with no event operands including result, modifier, and character. 2. This event can ONLY be generated using the RUNTIME object 'SignalChild' method. This event is NOT generated using the EVENTSEND instruction. 3. This event is ONLY generated and dispatched when using the PL/B Web Server runtime. 4. The ChildSignal event is referenced using an event value of thirty-three (33). The equated label in PLBEQU.INC for this event is $CHILDSIG. 5. This event allows one PWS child process to signal a second PWS child process. Any data interactions between the two PWS child processes is MUST be done using PLB program IPC techniques like disk IO or COMFILE sockets. *============================================================================== The following files have been changed as noted: ------------------------------------------------------------------------------- PLBWEBSRV (HTML\JS\CSS) - Modified to support 9.7D changes. plbwebbasic.css 9.8 plbwebbasic.js 9.8 plbwebctls.js 9.8 plbwebstart.html 9.8 plbwebidleterm.html 9.7C - Modified the 'plbwebbasic.css' to add classes to support the virtual DATALIST object presentation. - Modified the 'plbwebbasic.js' to support the virtual DATALIST object implementation. - Added classes to 'plbwebbasic.css' to allow a dashed rectangle to appear around a DATALIST item that has focus. - Modified the 'plbwebstart.html' initialization logic to work around a problem where the Chrome browser could generate an HTML exception error during the startup. - Modified and simplified the 'plbwebbasic.js' sorting logic to work around issues where the Safari browser could freeze when multiple DATALIST sorting operations were being performed. - Corrected problems for the COMBOBOX\DATALIST methods in the 'plbwebbasic.js' method which could cause indeterminate hanging problems when negative indexes were being used. - Modified the 'plbwebbasic.js' listview supporting logic to work around an IE client browser issue where the unexpected rows were being selected when a user clicked on the checkbox of multiple rows in a listview. - Modified BUTTON File Input to report all change events generated by the client browser. - Modified the 'plbwebctls.js' to correct a problem where the ALLOWMINUS property for the EDITNUMBER did not work as expected. - Modified the 'plbwebbasic.js' to work around a problem where a lost focus for a PWS EDITTEXT object did not occur when clicking on a PWS BUTTON object using a client browser Safari type or any iOS devices. Note: 1. The concept of allowing the focus to a HTML button object DOES NOT exist for all client browser types and OS types for various web devices. The PWS JavaScript implementation attempts to simulate expected PLB user events when client browser\web device OS environments DO NOT allow focus for HTML objects. See this link: "https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ button#Clicking_and_focus" 2. If a PLB program has been coded to generate specific PLB user events that depend on a sequence of PLB operations that force Windows OS events behaviors, the same HTML object behaviors MAY NOT exist for a PWS PLB program. In this case, the PWS PLB program MAY NEED to be changed to give the best possible behaviors using client browsers. Warning: 1. The 'ALERT' instruction can disrupt OS event messages resulting in PLB events that are lost or altered to give inconsistent results in different UI environments. Use of this instruction should NOT be used when the PLB applications require a very specific sequence of PLB event operations\behaviors in many different OS UI environments. - Modified LISTVIEW disable and enable logic so an end-user can not select LISTVIEW items when the HTML object is disabled. - Corrected an IE problem where multiple rows were selected in a LISTVIEW when the MULTISELECT property was turned off. This problem would occur if the user clicks in the LISTVIEW, then outside the LISTVIEW, and then clicks on the LISTVIEW again. - Corrected a problem in the 'plbwebbasic.js' which prevented the last item in a DATALIST from being selected. - Corrected a problem in the 'plbwebbasic.js' where the Shift key was not being reported for key or mouse events in the event modifier. ------------------------------------------------------------------------------- PLBWEBSRV - Since the PWS ALERT CAN NOT simulate the indeterminate Windows OS behaviors of the Windows OS 'MessageBox' used for the PLBWIN ALERT instruction, the PWS ALERT is being changed to clear all PLB user events in an attempt to force consistent behaviors for the different client browser types. See the PL/B Language Reference 'ALERT' instruction notes for more information on the use of the ALERT instruction. Note: 1. This behavior change for the PWS ALERT is being done to address a complaint where the Safari browser and iOS devices were allowing an unexpected BUTTON click event after an EDITTEXT lost focus event which used a PWS ALERT. In this scenario, the customer complaint was that the PLB program executing under the Safari browser and the iOS devices did NOT execute like other client browsers and PLBWIN where the BUTTON click event did occur. - The PWS DATALIST implementation has been changed to use a HTML TABLE object instead of using the HTML SELECT object. The new PWS DATALIST is implemented as a virtual GUI object where all data items are maintained on the PWS server side to give the best possible performance when using a large number of data items in the DATALIST. The following notes describe the usage and changes for the new PWS DATALIST implementation: Warning: 1. The PWS virtual DATALIST has been implemented to provide more consistent presentations across all client browser any iOS types while giving better loading performance for a large number of items. The virtual DATALIST CAN NOT and DOES NOT support all of the behaviors of the Windows DATALIST control. While some keyed operations for the PWS DATALIST can work using a client browser, these same keyed operations WILL NOT work for an iOS device because there is NO keyboard. 2. Microsoft does not document all of the specific behaviors of the Windows DATALIST control and the PWS virtual DATALIST provides the basic behaviors that can work across all client UI environments. Therefore, the PWS PLB program may require additional changes to overcome and allow the PWS client user to more easily manipulate PWS DATALIST items in all client UI environments. 3. The PWS virtual DATALIST is implemented using the HTML TABLE object. The different client browser types implement keyboard key combinations to achieve specific browser behaviors. The client browser keyboard key combinations may give unexpected behaviors and visual changes to the HTML TABLE items as compared to a Windows DATALIST control. 4. PWS virtual DATALIST supported behaviors: Simple DATALIST Client Browser iOS - Home key Yes No - End key Yes No - Down arrow key Yes No - Up arrow key Yes No - One Item selection Yes Yes Mult-Select DATALIST - Home key Yes No - End key Yes No - Down arrow key Yes No - Up arrow key Yes No - Space Bar item selection Yes No - One Item selection Yes Yes Extended DATALIST - Home key Yes No - End key Yes No - Down arrow key Yes No - Up arrow key Yes No - One Item selection Yes Yes - Shift click selection Yes No Note: 1. By default the new virtual DATALIST is being rendered by the PWS runtime. However, a new 'PLBWEB_VDATALIST={on|off}' keyword can be used to force the PWS server to render the DATALIST using the original HTML SELECT object support. See the PLBWEB_VDATALIST keyword description for more details. 2. The new virtual PWS DATALIST is much faster than the older DATALIST implementation when loading a large number of data items. 3. The new virtual PWS DATALIST supports the TABSTOPS property. When using the TABSTOPS property, the PWS DATALIST MUST use a fixed font. The older\original DATALIST could NOT support the TABSTOPS property. 4. The new virtual PWS DATALIST supports the following methods: SetTopIndex SetCaretindex TabStops AllowEmptyTab PreventKeyClickEvent 5. The new virtual PWS DATALIST allows the object to be fully disabled as expected for a Windows control. The older\original PWS DATALIST could NOT be fully disabled. 6. The new virtual PWS DATALIST has a data item limit of 65,000 data items. Under normal circumstances, the use of a very large number of data items is not practical for a PWS PLB application. However, the new PWS DATALIST implementation gives the best possible performance when loading the data items. 7. The new virtual PWS DATALIST gives consistent presentation and behaviors across all client browsers and iOS devices. When using the older\original PWS DATALIST on an iOS device, the iOS forced a look and behaviors on the HTML SELECT object that could NOT be controlled by the PWS runtime operations. This resulted in strange unexpected DATALIST usage on an iOS device. The new virtual PWS DATALIST looks and works as expected on an iOS device. 8. The new virtual PWS DATALIST is implemented to automatically invoke both horizontal and\or vertical scrollbars by the client browser for the HTML TABLE object. The older\original PWS DATALIST does not invoke the horizontal scrollbar when a data item is to large to fit in the HTML SELECT object horizontally. 9. The 'ctrl key' and 'shift key' states are now reported in the event modifier field for a mouse click event. The event modifier for a click event is set to a value of 1 when the click event was caused by a keystroke action. - A new keyword named 'PLBWEB_VDATALIST={on|off}' has been added for PWS runtime. This keyword sets the PWS rendering mode to be used for all PWS DATALIST objects in a program. If this keyword is not specified in the 'plbwebsrv.ini' file, the default behavior is to use the new virtual PWS DATALIST object implementation which is based on HTML TABLE objects. If the user wants to invoke the older\original PWS DATALIST object rendering, the 'PLBWEB_VDATALIST=off' keyword can be specified in the 'plbwebsrv.ini' which forces all PWS DATALIST objects to be implemented using the HTML SELECT object. Note: 1. The new virtual PWS DATALIST provides the same presentation and behaviors across all browser and iOS client device types. The older\original PWS DATALIST which used the HTML SELECT object caused uncontrollable behaviors when using iOS client devices that were inconsistent with other client browser types. - Modified the PWS mini-server maximum resource file size to be a 400MB. - Modified the PWS mini-server to fully support the Http 'Range:' header field. This helps to resolve resource download issues when the 'Range:' header field was being specified with a non-zero starting point by a client browser. - Modified the GETMODE\SETMODE instructions to support the keywords defined as follows: GETMODE *IDLETERM={svar} This keyword operation retrieves the current PWS server setting as described by the PWS PLBWEB_IDLETERM keyword or as specified by a SETMODE *IDLETERM keyword operation. This keyword operation returns a NULL result if neither the PWS PLBWEB_IDLETERM keyword or the SETMODE *IDLETERM keyword is currently set and being used. SETMODE *IDLETERM={svarslit} This keyword operation can be used to set or clear the PWS server behavior the same as described by the 'PLBWEB_IDLETERM={HtmlFileName|PlcProgName}' server keyword. When this SETMODE *IDLETERM keyword is set, the specified setting is used instead of the original\current PWS runtime idleterm setting. GETMODE *IDLETIMEOUT={nvar} This keyword operation retrieves the current PWS server setting as described by the PWS PLBWEB_IDLE_TIMEOUT keyword or as specified by a SETMODE *IDLETIMEOUT keyword operation. SETMODE *IDLETIMEOUT={dnumnvar} This keyword operation can be used to set or clear the PWS server behavior the same as described by the 'PLBWEB_IDLE_TIMEOUT={minutes}' server keyword. GETMODE *IDLEMAXTIME={nvar} This keyword operation retrieves the current PWS server setting as described by the PWS PLBWEB_IDLE_MAX_TIMEOUT keyword or as specified by a SETMODE *IDLEMAXTIME keyword operation. SETMODE *IDLEMAXTIME={dnumnvar} This keyword operation can be used to set or clear the PWS server behavior the same as described by the 'PLBWEB_IDLE_MAX_TIMEOUT={minutes}' server keyword. GETMODE *SUSPENDMAXTIME={nvar} This keyword operation retrieves the current PWS server setting as described by the PWS PLBWEB_SUSPEND_MAX_TIMEOUT keyword or as specified by a SETMODE *SUSPENDMAXTIME keyword operation. SETMODE *SUSPENDMAXTIME={dnumnvar} This keyword operation can be used to set or clear the PWS server behavior the same as described by the 'PLBWEB_SUSPEND_MAX_TIMEOUT={minutes}' server keyword. - Added support for the 'SETMODE *MCURSOR=' instruction. This change was made using the CSS 'cursor' style. The following *MCURSOR values are supported: Value Cursor CSS 'cursor:' Style 1 Arrow auto 2 Cross crosshair 3 IBeam text 4 Plus cell 5 Wait wait 6 Hand grab 7 Drag not-allowed 8 Drop not-allowed 9 Hidden none >9 Arrow auto Note: 1. When executing using a PWS runtime, the CSS 'cursor:' style can be changed using the 'SetWebStyle' for an individual PLB GUI object supported by the PWS runtime. Example: Panel PANEL ;Panel must be created! UseDiv INTEGER 4,"0x01" ;Change HTML 'DIV' ... . Panel.SetWebStyle USING CssName="cursor": StrValue="crosshair": Flags=UseDiv 2. There is a difference between the Windows OS and a client browser for the mouse cursor behaviors. The client browser mouse styles take affect for each individual HTML object. Therefore, the PWS 'SETMODE *MCURSOR' sets the parent main screen