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
mouse cursor and some individual GUI objects like inherit the parent mouse style while other GUI objects like BUTTON, EDITTEXT, DATALIST, ...etc maintain specialize\unique mouse cursor styles. - Modified the LISTVIEW SetLVFlags method to support a new {flags} bit mask value as follows: Value Meaning 0x08 This bit value is ONLY used by the PWS runtimes to invoke a behavior for the PWS LISTVIEW to match Windows column sizing which prevents HTML table column auto sizing. - Modified the PWS runtime to force all child objects of a parent PANEL or WINDOW object to be disabled when the parent object is disabled. - 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 - Modified the ACTIVATE EDITTEXT operations to simulate the default event behavior\results for the got focus and lost focus events. However, the lost focus with data modified result is NOT supported because of limited JavaScript capabilities for detecting HTML object UI manipulation of the object data. Note: The ACTIVATE EDITTEXT default event behaviors were originally implemented and based on Windows OS control state flags and messages that ONLY exist in a Windows OS application environment. To simulate the same behaviors\events for PWS HTML objects is not always possible. - Added support to allow the EVENTFILTER property to be used ONLY with the ACTIVATE EDITTEXT default events for got focus (3) and lost focus (1). All other EVENTFILTER types are NOT supported by the PLB Web Server. - Modified the PWS runtime to allow the expected PLB events to occur when the PLB SETFOCUS instruction is executed. - A new runtime event defined as '$CHILDSEQ EQU 33' has been added to signal a PWS child process. By using the EVENTREG using $CHILDSIG and new runtime object GetChildId and SignalChild methods, one PWS child process can signal and invoke a $CHILDSIG event in a second PWS child process. Note: 1. The new RUNTIME object methods named 'GetChildId' and 'SignalChild' have been implemented to support the new PWS $CHILDSIG event usage. These methods will be fully documented when the $CHILDSIG is evaluated and released to all the PLB users. 2. A new method named 'GetChildId' has been added for the RUNTIME object which can be used to retrieve the current PWS child process identification string. By making this PWS child process identification string available to another PWS child process, the other PWS child process can use it in the 'SignalChild' method to send a $CHILDSIG event back to the first PWS child process to invoke special child signal event logic. The PWS child process identification string has the following format: PWS Child Processing Identification String: "IDnnnnnnnnn" 3. Registering a $CHILDSIG event using the EVENTREG instruction for a child process causes the child process to enable an enhanced communications mode from the child process to the client browser. This enhanced communications mode causes the network traffic between the child process and the client browser to be significantly increased. This enhanced communications mode is required to give the best possible performance for the child process to detect and dispatch a $CHILDSIG event generated by a different child process. Note: 3a. When a child process dispatches to a $CHILDSIG event routine, it is recommended that the $CHILDSIG event routine should CLEAR the $CHILDSIG event while that event is processed. The $CHILDSIG event can be re-registered when the event routine is completed. Using this technique can help minimize the network traffic impact while the $CHILDSIG event is not registered. 3b. DO NOT arbitrarily register the $CHILDSIG event until the PLB program is ready to start detecting and dispatching to the $CHILDSIG event routine. Otherwise, unnecessary network traffic between the client browser and the child process can occur before it is needed. - Added a new method named GetChildId for the RUNTIME object. This can be used to retrieve the current PWS child identification string that can be used when generating a $CHILDSIG event. Warning: This new method is not being documented to the general PLB user community until it has been fully reviewed to meet the needs of James Seale's PWS application. This method are described as follows: ............................................................... . GetChildId Method for PWS RUNTIME Object . The GetChildId method can be used to retrieve the current PWS child process identification string that can be used by a second PWS child process to generate a $CHILDSIG event in the first process which owns the PWS child process identification string. The method uses the following format: [label] {object}.GetChildId GIVING {return}: USING [Options=]{options} Where: {label} is an optional Program Execution Label. {object} is a required and a PWS RUNTIME object that has been previously declared. {return} is a Character String Variable that returns the current PWS child process identification string. {Options} is optional and can be used to invoke special behaviors for the GetChildId method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The EOS flag is set TRUE if the return variable is to small to receive the PWS child process identifier without being 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 GetChildId method as follows: Value Description 0x0000000 The default value which allows the PWS child identification string to be returned. 5. The PWS child process identification string that is returned in the {return} variable is formatted as follows: "IDnnnnnnnnn" - Added a new method named SignalChild for the RUNTIME object. This method is used to allow one PWS child process to generate a $CHILDSIG event in a second PWS child process. This method are described as follows: ............................................................... . SignalChild Method for PWS RUNTIME Object . The SignalChild method can be used by one PWS event to generate a $CHILDSIG event in a second PWS child process. This method can also generate a $CHILDSIG event by one PWS child process to the same PWS child process (i.e. itself). The method uses the following format: [label] {object}.SignalChild GIVING {return}: USING [ChildId=]{identifier}[: [Options=]{options}] Where: {label} is an optional Program Execution Label. {object} is a required and a PWS RUNTIME object that has been previously declared. {return} is a Numeric Variable that receives the pass or fail results of the method execution. {identifier} is a Character String Variable that is required and contains a valid target PWS child process identification string to be used in the execution of the SignalChild method. {Options} is optional and can be used to invoke special behaviors for the SignalChild method. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag state is set to be TRUE if the {return} value is zero. Otherwise, the ZERO flag state is set to be FALSE. 2. The OVER flag is set to TRUE if the {return} numeric variable is too small to receive the full numeric result value. 3. The EOS flag is always cleared. 4. The optional {options} values can be used to changed the execution behavior of the SignalChild method as follows: Value Description 0 The default value which causes the current PWS child process to generate\invoke the $CHILDSIG event for the PWS child process identified by the {identifier} child process identification string. 1 When the {options} value is 1, the SignalChild method resets $CHILDSIG generation bit for the PWS child process identified by the {identifier} child process identification string. 2 When the {options} value is 2, the SignalChild method checks PWS state flags for the PWS child process identified by the {identifier} identification string. If the PWS child process exists and available\active, the {return} value is returned as zero. Otherwise, the {return} value is returned as one. 5. The PWS child process identification string that is used in the {identifier} parameter must be formatted as follows: "IDnnnnnnnnn" 6. The {return} value is zero if the SignalChild method executes successfully with the following conditions. Otherwise, the {return} value is one which indicates that one of the following conditions failed. a. The PWS child process specified by the {identifier} currently exists and is found. b. The {options} parameter value is zero, one, or two which is required to manage the $CHILDSIG event operations. 7. When the $CHILDSIG event is registered and dispatched by the target child process specified by the {identifier} parameter, the target child process ONLY executes the $CHILDSIG event ONCE. Also, the generation of the target child process $CHILDSIG event is totally asynchronous to the action(s) of executing the SignalChild method. 8. In addition, there is NO FAST event support for the $CHILDSIG event. - Corrected a PWS mini-server 200 byte memory leak problem that would occur with each connection. Also, corrected a PWS mini-server memory leak when a music, video, or image external file was sent to a client browser. These memory leaks only affected the PWS mini-server and did not affect the PWS PLB program operations. - Corrected a problem where the PWS child process was not terminating if the client browser or browser window was closed while a DISPLAY instruction was being executed. - Corrected a problem where the IMPLODE instruction was not fetching the current selected data item from a PWS COMBOBOX object. - Corrected an indeterminate GPF error that could occur in the 'plbdbug' character debugger depending on how the PWS child process memory was allocated when the debugger was started. - Corrected a problem where the MAINWINDOW sizes were being rendered in character units by default. This change sets the default units to be pixel units for the MAINWINDOW which is consistent with PLBWIN. - Modified to detect and ignore a BEEP instruction when using the PL/B Web Server. This corrects a problem where a BEEP instruction was causing the MAINWINDOW to become visible unexpectedly. - Corrected a DATALIST GETITEM GPF error that would occur retrieving list item 4 into a DIM variable. - Corrected a problem where the BUTTON, CHECKBOX, and RADIO objects were NOT setting the object title when they were being created. This issue prevented a GETITEM from retrieving the title of these objects. - Corrected a problem where an unexpected close event was being generated when a 'DEACTIVATE' or 'SETPROP VISIBLE=0' was executed for a MODAL or MODELESS WINDOW object. - Corrected a problem where the default '.plc' program was causing an unexpected U10 when using the 'PLBWEB_PROGRAM_ROOT' keyword. - Corrected problems where COMBOBOX methods could freeze\hang indeterminately if when a negative value was used for the INDEX value. - Corrected problems where DATALIST methods could freeze\hang giving indeterminate results when using negative index values. - Corrected a problem where the CHANGE event for a BUTTON object using the BUTTONTYPE of $FILEINPUT did not work when a form was loaded using a FORMLOAD instruction. - Corrected a problem where the CREATE instruction using an EDITNUMBER GUI object would cause the object to be positioned incorrectly. - Corrected problems where object events were being generated when PWS objects were disabled. - Corrected a problem where the LISTVIEW default sorting for column 0 was being delayed. This change allows the LISTVIEW data to be retrieved in sorted order immediately after the data was added with automatic sorting of column 0. - Corrected a problem where an EVENTINFO instruction did not return the the event object when using the OBJECT={object} keyword. - Corrected a problem where the default GUI object names were not being rendered to the RUNNAME property setting when a WebForm was loaded. - Modified the LISTVIEW enable and disable operations to invoke JavaScript logic to prevent end-user selection of LISTVIEW items when the object is disabled. - Corrected a problem where a 'SETPROP MENU, ENABLED={0|1}' instruction was not affecting the MENU sub-items. - Corrected a problem where the focus was being set to disabled objects when tabbing. - Corrected a problem where a GETITEM using a DIM variable would not return a value using a virtual DATALIST, GROUPBOX, or a TABCONTROL PWS object. - Corrected a GPF error for a PWS LABEL object when a 'SETPROP USEALTKEY=1' instruction was executed. - Modified the virtual DATALIST using the 'MULTISELECT=$ON' property to present a focus item rectangle and use the space-bar for item selection a manner like a Windows DATALIST control. - Modified the virtual DATALIST using the 'MULTISELECT=$EXTENDED' property to use the Shift key for multiple item selections. - Corrected a problem where the 'GETITEM DATALIST,{item},{data}' instruction did not set the proper PLB flags when the {item} value was 4 and the {data} parameter was a numeric variable. ------------------------------------------------------------------------------- PLBCLIENT, PLBCLICON, PLBCLINET - Corrected a GPF error that would occur when a DESTROY of a PANEL or WINDOW object with more than 500 child GUI objects created to the parent container. With this change, the DESTROY can now handle an unlimited number of GUI objects depending on the amount of application memory available. ------------------------------------------------------------------------------- PLBWIN, PLBNET - Modified the default Sunbelt Icon for these runtimes to a 256x256 pixel size and smoothed the icon edges. This change can hopefully give a smoother and larger icon footprint by the OS. - Modified the FINDDIR instruction to allow the DATALIST to be loaded using data retrieved from a Data Manager version older than 9.6C. When using a Data Manager version older than 9.6C, the data now loads and appears in the DATALIST properly with the change. - Corrected a problem where the WEBCLASS property was not being processed properly for the LISTVIEW object. This issue was causing the PLB Designer problems that prevented the WEBCLASS setting for a LISTVIEW from being stored into a WebForm. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX), PLBWEBSRV - Modified the Sunbelt 'pdf:' output to support RTL (Right To Left) when using Hebrew or Arabic Unicode strings. - Updated the SQLite3 in the runtimes to version 3.8.11.1 released on 7/29/15. - Corrected a problem where a DBOPEN instruction would cause a GPF error if a memory allocation error occurred. - Corrected a problem where the FINDFILE MODE parameter value of 0x200 did not work to give the expected UTC ( Universal Time Coordinated ) modification timestamp of a file. - Corrected a problem where the '.pdf' generated using the Sunbelt 'pdf:' could cause an Adobe error if the FONT ANGLE property was being used. - Corrected a problem where the GETMODE *DEFAULTSCHEMA keyword would return a NULL string after the runtime started and before any SQLite operations were performed. - Modified to correct a GPF problem that could occur when a dynamic DIM was used as a FUNCTION parameter and the FUNCTION logic called itself in a reentrant mode multiple times after performing a DMAKE on the dynamic DIM parameter in the FUNCTION. ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Modified the Sunbelt 'pdf:' output to support the FONT ANGLE property setting when outputting text data. - Modified the Sunbelt 'pdf:' to insure that the font size of 9 is the default size used if a FONT is used that does not specify a font size. - Added a new keyword named '*PLBWINPRTPREV={svar}' to the SETMODE and GETMODE instructions. The {svar} string contents for this keyword is the same as described for the PLBWIN_PRTPREV keyword found in the PL/B Runtime Reference manual. This keyword is implemented to allow a PLB program to dynamically change the Print Preview Control titles as needed for the application. Note: 1. When the 'SETMODE *PLBWINPRTPREV={svar}' instruction is executed where the {svar} is NULL, the Print Preview Control titles revert back to the original settings. 2. The 'GETMODE *PLBWINPRTPREV={svar}' instruction ONLY returns the last content settings executed by the 'SETMODE *PLBWINPRTPREV={svar}' instruction. - Corrected a problem where the wrong PICT image could be output to a '.pdf' file using the Sunbelt 'pdf:' device. This problem could happen if the same PICT object was re-created repeatedly and output using the PRTPAGE *PICT control while using the 'pdf:' device output. - Modified to work around a Windows OS problem rendering an EDITDATETIME object when using the CUSTOMFORMAT and the Windows OS Desktop Display personalization setting was set to a Medium or 125% text size. In this scenario, the Windows OS was incorrectly sizing the EDITDATETIME text data resulting in a truncated presentation. - Corrected a problem where the COMBOBOX 'GetText' method would return an indeterminate result when the Index input parameter was a negative value. - Modified to detect a Windows OS 'comctl32.dll' version 6 problem when scrolling a DATALIST using the THUMB control when there was more than 65535 items in the DATALIST. Prior to this change, the Windows OS scrolling action using the THUMB control of the DATALIST would cause expected scrolling results. - Corrected a problem where a PRTOPEN could encounter a GPF error due to a memory conflict when multiple PRTOPEN instructions are executed in one PLB program. ------------------------------------------------------------------------------- PLBCMP - Modified to support the new keywords *IDLETERM, *IDLETIMEOUT, *IDLEMAXTIME, and *SUSPENDMAXTIME for the GETMODE and SETMODE instructions. See details above for more information. - Modified the compiler help screen to show the 'S=' and the 'ZI=' options. - Modified the compiler to support the WEBCLASS property for the PWS LISTVIEW object. - Added a new keyword named '*PLBWINPRTPREV={svar}' to the SETMODE and GETMODE instructions which allows dynamic changes to the Print Preview controls. See details described above. - Corrected a problem where the FUNCTION and LFUNCTION instructions were not terminating COMMON. This problem was causing C09 errors during the execution of a CHAIN. ------------------------------------------------------------------------------- PLBDBUG - Modified the MF and ML debugger commands to allow a 9 digit formpointer and lengthpointer value to be keyed for a very large DIM variable. ------------------------------------------------------------------------------- DBGIFACE - Modified to allow the 'port number' to be specified when the local IP address '127.0.0.1' is being used as the debugging interface IP address. - Corrected a problem where the DBGIFACE GUI debugger could generate an unexpected Editor Control Version error message as follows: "The control being used is older than the 9.3B release version" ------------------------------------------------------------------------------- SUNSORT - Modified the Alternate Primary Record Specification and the Alternate Selective output Specification expressions to support mathematical comparisons for the {op} operations. This change allows a mathematical type indicator ( i.e. {N|n} ) to be included in the expression after the {c} starting column position. The mathematical type indicator can be specified in the {comp} expression using the following syntax format: {comp} format using {N|n} mathematical type indicator: {c}[{N|n}]{op}{string} Where: {c} - Required starting column position for source operand field. {N|n} - Optional 'N' or 'n' character that indicates that the {op} operator is to be performed as a mathematical comparison. {op} - Required comparison operator that is one of the following operations: =, E, !=, <>, NE, <, L, <=, LE, >, G, >=, or GE {string} - Required destination operand field to be compared or matched against the source operand field found in a data record. The {string} must be specified with a leading and trailing single quote (') character. The number of characters specified in the {string} identifies the field size to be used for the record operand field starting at the {c} record position. Note: 1. If the optional {N|n} comparison type is used, the {string} MUST be specified as a valid numeric string as follows: a. Leading blanks are skipped and count against the total field size being compared. Any blank or white-space characters found after the first valid numeric character causes and invalid numeric {string} declaration. b. A single leading '-' (i.e. negative character) is supported which can ONLY be specified after any leading blanks and before any valid numeric digits or decimal point. c. A single decimal point character can be specified in the {string} numeric declaration. d. All other characters specified in the {string} numeric declaration must be '0' to '9' digits. 2. If the optional {N|n} comparison type is used, an invalid numeric {string} declaration causes an error from the sort or index utility as follows: "Invalid primary key information." 3. If the optional {N|n} comparison type is used, the record that includes an invalid numeric field found at the {c} starting position MAY or MAY NOT be included in the selection record output depending on the logical evaluation of the 'S=' or 'S#' expression being used. Examples for {N|n} usage: sunsort in.txt out.txt -1-7, S="1n<=' -1.00'" Examples for {N|n} numeric type usage with invalid record fields: sunsort in.txt out.txt -1-7, S="10n=' 1.00'" In this scenario, any invalid numeric fields found in the in the record at character position 10 are ignored and not included in the sorted output. The output should ONLY include records that have a field value of '1.00'. sunsort in.txt out.txt -1-7, S#"10n=' 1.00'" In this scenario, all records that do NOT have a value of '1.00' are included in the output records including records with invalid numeric fields. sunsort in.txt out.txt -1-7, S="10n!=' 1.00'" In this scenario, the selected record output does NOT include any invalid numeric fields encountered. In this case, the selected record output ONLY includes records that have valid numeric fields whose value is not equal to '1.00'. ------------------------------------------------------------------------------- SUNINDEX - Modified the Alternate Primary Record Specification expressions to support mathematical comparisons for the {op} operations. This change allows a mathematical type indicator ( i.e. {N|n} ) to be included in the expression after the {col} starting column position. The mathematical type indicator can be specified in the expression using the following syntax format: P{type}\"{col}[{N|n}]{func}{'string'}\" MS-DOS P{type}\"{col}[{N|n}]{func}{\'string\'}\" UNIX Where: {col} - Required starting column position for source operand field. {N|n} - Optional 'N' or 'n' character that indicates that the {op} operator is to be performed as a mathematical comparison. {func} - Required comparison operator that is one of the following operations: =, E, !=, <>, NE, <, L, <=, LE, >, G, >=, or GE {'string-} - Required destination operand field to be compared or matched against the source operand field found in a data record. The number of characters specified in the {'string'} identifies the field size to be used for the record operand field starting at the {col} record position. Note: 1. If the optional {N|n} comparison type is used, the {'string'} MUST be specified as a valid numeric string as follows: a. Leading blanks are skipped and count against the total field size being compared. Any blank or white-space characters found after the first valid numeric character causes and invalid numeric {'string'} declaration. b. A single leading '-' (i.e. negative character) is supported which can ONLY be specified after any leading blanks and before any valid numeric digits or decimal point. c. A single decimal point character can be specified in the {'string'} numeric declaration. d. All other characters specified in the {'string'} numeric declaration must be '0' to '9' digits. 2. If the optional {N|n} comparison type is used, an invalid numeric {'string'} declaration causes an error from the sort or index utility as follows: "Invalid primary key information." 3. If the optional {N|n} comparison type is used, the record that includes an invalid numeric field found at the {c} starting position MAY or MAY NOT be included in the primary record output depending on the logical evaluation of the 'P=' or 'P#' expression being used. Examples for {N|n} usage: sunindex data.txt data.isi -1-7, P="10N!='0000.00'" In this scenario, the key for any records that has a valid numeric Primary selection criteria is included in the ISI. Keys for records with invalid selection criteria are not included in the ISI as well as any records that have a value of zero for the selection criteria. Examples for {N|n} numeric type usage with invalid record fields: sunindex in.txt out.isi -1-7, P="10n=' 1.00'" In this scenario, any invalid numeric fields found in the in the record at character position 10 are ignored and not included in the indexed output. The output should ONLY include keys for records that have a field value of '1.00'. sunindex in.txt out.isi -1-7, P#"10n=' 1.00'" In this scenario, all records that do NOT have a value of '1.00' are included in the ISI keys including records with invalid numeric fields. sunindex in.txt out.isi -1-7, P="10n!=' 1.00'" In this scenario, the selected record keys do NOT include any invalid numeric fields encountered. In this case, the selected record keys ONLY include records that have valid numeric fields whose value is not equal to '1.00'. ------------------------------------------------------------------------------- SUNWADO.DLL - In release 9.5C, a change was made to prevent an excessive number of ADO CreateInstance operations. This 9.5C change caused a problem where a 'DBOPEN DBSTATEMENT' did not execute properly which would cause a 'DBPREPARE DBSTATEMENT' GPF error. This GPF error scenario has been corrected by this 9.7D change. ------------------------------------------------------------------------------- DESIGNER.PLC - Corrected issues with undo and repeat of form sizing actions. - Corrected output of form position when exporting to a PLS file and using the integrated layout mode. - Made minor cosmetic changes after a form was positioned interactively when in integrated layout mode. - Corrected an issue regarding the use of the "Lock controls upon open" behavior option. - Ensure the form modified flag is set when listview columns are resized using the column header. - Updated properties in the designer definitions file. - Added additional diagnostic traps in the file backup process. - Corrected an issue with clearing event routines in the property window. ------------------------------------------------------------------------------- EDITOR.PLC - Corrected call to ClearSelection that would incorrectly toggle the regular expression flag for Find and Replace. - Added logic to handle font creation issues. - Converted the print dialog to be sizeable. - Corrected cosmetic issues with the print dialog. - Corrected an S21 error when outputting to a PDF file and using preview. - Modified the project open error dialog to show the complete file name and error message. - Modified to use the standard fixed pitch font if the font define in the IDE configuration file is no longer available. ------------------------------------------------------------------------------- SUNIDE.PLC - Added an editor no recovery option to the IDE settings. - Modified the verification of list files that provide program label information to the IDE. - Added the project name to the main window title bar. ------------------------------------------------------------------------------- SUNCS21.OCX - No changes. ------------------------------------------------------------------------------- SCHEMAEDITOR.PLC - Corrected issues in the database export and import functions. ------------------------------------------------------------------------------- PROFILER.PLC - Added multiple file support. - Added the input files as root elements to the treeview. - Modified the open dialog to begin searching in the current directory when no file name is present on the command line. - Added a shortcut menu for the file listviews. - Added an alert when a source display is requested and the symbolic debug file (.sdb) is not available. - Enhanced the program's appearance. - Removed "oldData" option. - Modified the work file name to allow multiple instances of the profiler. - Improved performance by code optimization techniques. ------------------------------------------------------------------------------- WATCH.PLC - Added support for the License and Web servers. - Added support for the $ADMITEMSHAREDMEM status bits. - Converted property windows to Sizable from Fixed. -------------------------------------------------------------------------------