Date: 03-04-2024 Subject: RELEASE 10.6A Runtime Files These RELEASE notes pertain to the following programs or files: EMBEDINI 10.6A 04 Mar 2024 10.6.1.500 EMBEDINI64 10.6A 04 Mar 2024 10.6.1.500 HEXDUMP 10.6A 04 Mar 2024 10.6.1.500 HEXDUMP64 10.6A 04 Mar 2024 10.6.1.500 MAKECLI 10.6A 04 Mar 2024 10.6.1.500 MAKECON 10.6A 04 Mar 2024 10.6.1.500 MAKECONET 10.6A 04 Mar 2024 10.6.1.500 MAKEDEF 10.6A 04 Mar 2024 10.6.1.500 MAKEMFD 10.6A 04 Mar 2024 10.6.1.500 MANAGECE 10.6A 04 Mar 2024 10.6.1.500 OBJMATCH 10.6A 04 Mar 2024 10.6.1.500 OBJMATCH64 10.6A 04 Mar 2024 10.6.1.500 ODBCINST64 10.6A 04 Mar 2024 10.6.1.500 PLBCGI 10.6A 04 Mar 2024 10.6.1.500 PLBCLICON 10.6A 04 Mar 2024 10.6.1.500 (ComCtl 6) PLBCLIENT 10.6A 04 Mar 2024 10.6.1.500 (ComCtl 6) PLBCLINET 10.6A 04 Mar 2024 10.6.1.500 (ComCtl 6) PLBCON 10.6A 04 Mar 2024 10.6.1.500 (ComCtl 6) PLBCONET 10.6A 04 Mar 2024 10.6.1.500 (ComCtl 6) PLBNET 10.6A 04 Mar 2024 10.6.1.500 (ComCtl 6) PLBSERVE 10.6A 04 Mar 2024 10.6.1.500 (Processed Server) PLBSERVET 10.6A 04 Mar 2024 10.6.1.500 (Threaded Server) PLBWEBSRV 10.6A 04 Mar 2024 10.6.1.500 (Processed Server) PLBWEBSRVT 10.6A 04 Mar 2024 10.6.1.500 (Threaded Server) PLBWIN 10.6A 04 Mar 2024 10.6.1.500 (ComCtl 6) SUNAAMDX 10.6A 04 Mar 2024 10.6.1.500 SUNAAMDX64 10.6A 04 Mar 2024 10.6.1.500 SETGUID 10.6A 04 Mar 2024 10.6.1.500 SUNINDEX 10.6A 04 Mar 2024 10.6.1.500 SUNINDEX64 10.6A 04 Mar 2024 10.6.1.500 SUNLS 10.6A 04 Mar 2024 10.6.1.500 SUNMOD 10.6A 04 Mar 2024 10.6.1.500 SUNMOD64 10.6A 04 Mar 2024 10.6.1.500 SUNSORT 10.6A 04 Mar 2024 10.6.1.500 SUNSORT64 10.6A 04 Mar 2024 10.6.1.500 WININST 10.6A 04 Mar 2024 10.6.1.500 PLBNLD.DLL 10.6A 04 Mar 2024 10.6.1.500 PLBNETSUP.DLL 10.6A 04 Mar 2024 10.6.1.500 Required for PLBNET PLBWSEC.DLL 10.6A 04 Mar 2024 10.6.1.500 Req'd PLBWIN/PLBNET ODSBAC32.DLL 10.6 02 Oct 2023 ODSBAC64.DLL 10.6 02 Oct 2023 SA_DLL32.DLL 10.6A 04 Mar 2024 10.6.1.500 SUNWADO.DLL 10.6A 04 Mar 2024 10.6.1.500 SUNWADO25.DLL 10.6A 04 Mar 2024 10.6.1.500 SUNWADO28.DLL 10.6A 04 Mar 2024 10.6.1.500 SUNWMSQL.DLL 10.6A 04 Mar 2024 10.6.1.500 SUNWODBC.DLL 10.6A 04 Mar 2024 10.6.1.500 SUNWSRV.DLL 10.6A 04 Mar 2024 10.6.1.500 SUNWSRV64.DLL 10.6A 04 Mar 2024 10.6.1.500 Required for Sundm64 DBGIFACE 10.6A 04 Mar 2024 PLBCMP 10.6A 04 Mar 2024 PLBDBUG 10.6A 04 Mar 2024 SUNDEBUG 10.6A 04 Mar 2024 ADMEQU.INC 10.6 02 Oct 2023 PLBEQU.INC 10.6 02 Oct 2023 PLBMETH.INC 10.6A 04 Mar 2024 PLBRUN.ZIP 10.6A 04 Mar 2024 10.6.1.600 (ComCtl 6) *============================================================================== Notes for DOCUMENTATION: - In the 'Sunbelt PL/B Application Server' manual, make the following changes: 1) Remove the 'ADMIN_LOGON' keyword from the 'Client Configuration Keywords' section. 2) In the 'Server Configuration Keywords' change the ADMIN_LOGON 'Specifies the ...' comment to read as follows: ADMIN_LOGON optional administrative task logon encryption key that is used as the default LOGON key in a PL/B ADMLOGON instruction. 3) Modified the 'ADMIN_LOGON Keyword' description to read as follows: This keyword specifies a user-defined logon key for administration purposes. This keyword is only used by a PL/B ADMLOGON instruction to specify a default logon key. The server must have a file specified using the ADMIN_KEYFILE configuration keyword that contains the logon key(s) when the ADMIN_LOGON keyword is being used. - In the 'Sunbelt PL/B Language Reference' manual, change the 'SCAN' instruction as follows: 1) NOCASE syntax modified to provide optional operand. [label] SCAN {source}{sep}{dest}[: NOCASE[={nocase}]][: ,WILDCARD={wildcard}][: ,GETFP={destfp}] 2) Add {nocase} operand description as: nocase Optional. A previously defined Numeric variable, decimal number, or numeric expression. 3) Modify the Note (7.) to read as follows: Note: 7. The NOCASE keyword without an operand turns on case insensitive scanning. If the 'NOCASE={dnumnvar}' syntax is used, a numeric value of zero turns insensitive scanning off. If the operand is a non-zero value, the insensitive scanning is turned on. - In the 'Sunbelt PL/B Language Reference' manual, change the 'MODULE' section page as follows: 1) Remove the 'Example Code' link under the 'See Also:'. - In the 'Sunbelt PL/B Language Reference' manual, add the 'MODULO' instruction description as follows: MODULO The MODULO instruction (which may be abbreviated as MOD) calculates the modulo value by dividing the absolute value of the first operand into the absolute value of the second operand and returning a remainder value. Optionally, the remainder result can be stored into a third operand. It uses one of the following formats: (1) [label] MODULO {source}{sep}{dest} (2) [label] MODULO {source1}{sep}{source2}{sep2}{dest1} Where: label Optional. A Program Execution Label. source Required. A Numeric Variable, numeric Literal, or Expression that is the divisor for the Modulo calculation. sep Required. A comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, or INTO. dest Required. A Numeric Variable that is the dividend for the Modulo calculation. The final Modulo calculated remainder value is returned in this variable. source1 Required. A Numeric Variable, numeric Literal, or Expression that is the divisor for the Modulo calculation. sep2 Required. A comma or the keyword GIVING. source2 Required. A Numeric Variable that is the dividend for the Modulo calculation. dest1 Required. A Numeric Variable that returns the final calculated Modulo remainder value. Flags Affected: LESS, OVER, ZERO Note the following: 1. The final result is placed in the {dest} or {dest1} variable depending on the syntax format being used. The other operands always remain unchanged. 2. Only the absolute value of any input variable is used for the for the Modulo calculation. There are no negative values used in the Modulo calculation. 3. If any input variable has a fractional component, the fractional component is truncated. There are no rounded values used for the Modulo calculation. 4. If the divisor value is zero, a runtime F01 error is generated. 5. The EQUAL (or ZERO), OVER, and LESS Condition Flags are applicable. 6. Example: A FORM "3.27" //'3' used for divisor. B FORM "-11.56" //'11' used for dividend. C FORM 3 . . C = ( |B| - ( ( |B| / |A| ) * |A| ) ) . . C = ( 11 - ( ( 11 / 3 ) * 3 ) ) . . C = 2 . MODULO A, B GIVING C // C = 2 - In the 'Sunbelt PL/B Language Reference' manual, change the 'RETURN' instruction Note (4.) to include the following: Add a (c.) paragraph to Note (4.) as follows: c. If a (L)FUNCTION is called using a PLBOBJECT method with GIVING using a DIM, FORM, or INTEGER NULL pointer variable, the RETURN behaviors using format (4) are the same as described for 'CALL GIVING' variables in Note (4.). - In the 'Sunbelt PL/B Language Reference' manual, change the 'Dir Method (FTP)' Note (5.) to include the following: Values Description 0x2 When this bit is set, the method returns a list of file/directory names using the FTP 'MLSD' command that provides a standardized format for directory listings. - In the 'Sunbelt PL/B Language Reference' manual, change the CALC instruction to include the MODULO '%' operator as follows: Change the 'op' description: op Required. One of the supported arithmetic operation types (+, -, *, /, %, **). Change the Note (5.) to include 'modulo' operation precedence. 3. multiplication, division, and modulo - In the 'Sunbelt PL/B Language Reference' manual, change the 'MOVE - Arithmetic Expression to Numeric Field' instruction to include the MODULO '%' operator as follows: Change the 'op' description: op Required. One of the supported arithmetic operation types (+, -, *, /, %, **). Change the Note (3.) sentence to read as follows: From: The arithmetic operations in an equation are executed such that multiplication (*) and division (/) operations are performed before addition (+) and subtraction (-). To: The arithmetic operations in an equation are executed such that multiplication (*), division (/), and modulo (%) operations are performed before addition (+) and subtraction (-). - In the 'Sunbelt Language Reference' manual, change the 'Mathematical Instructions' to include the 'MODULO' instruction: MODULO - Perform modulo operation using two numbers with optional giving clause. - In the 'Sunbelt PL/B Runtime Reference' manual, add a new runtime keyword to the 'PLBWIN Keywords' section described as follows: PLBWIN_ALLOWXPSDETECTION={ ON|OFF } This optional keyword can be used to set the default runtime behavior when detecting a XPS printer driver detection for a PL/B SPLOPEN operation. By default the Windows runtimes detect a XPS printer driver to invoke XPS_PASS mode. If this keyword is set to OFF, the PL/B runtimes do not detect a XPS printer driver. - In the 'Sunbelt PL/B Language Reference' manual, add the following GETMODE/SETMODE descriptions for the '*ALLOWXPSDETECT={0|1}' keyword. *ALLOWXPSDETECT (GETMODE) The *ALLOWSXPSDETECT keyword returns the current state flag value used by a PL/B runtime to determine whether a XPS printer driver is to be detected during a PL/B SPLOPEN operation. *ALLOWXPSDETECT={value} The {value} is retuned with a value of '1' when XPS printer driver detection is turned on. Otherwise, the {value} is returned with a value of '0' when XPS printer driver detection is turned off. *ALLOWXPSDETECT (SETMODE) The *ALLOWXPSDECT keyword is used to set the default runtime behavior when detecting a XPS printer driver detection for a PL/B SPLOPEN operation. *ALLOWXPSDECT={value} When this keyword is set to a non-zero value, the PL/B runtime detects a XPS printer driver to invoke XPS_PASS mode. If this keyword is set to a zero value, the PL/B runtime does not detect a XPS printer driver. - In the 'Sunbelt PL/B Language Reference' manual, modify the 'CHOP' instruction to include keywords described as follows: [label] CHOP {source}[{sep}{dest}][: LEADING={leading}][: TRAILING={trailing}] Where: leading Optional A decimal number, Numeric Variable, Numeric literal, or Expression where a non-zero value allows leading spaces to be deleted. A zero value does not allow leading spaces to be deleted. If this keyword value is not specified, the default behavior is to not delete leading spaces. trailing Optional A decimal number, Numeric Variable, Numeric literal, or Expression where a non-zero value allows trailing spaces to be deleted. A zero value does not allow trailing spaces to be deleted. If this keyword value is not specified, the default behavior is to allow trailing spaces to be deleted. Note the following: 8. Examples when CHOP instruction uses LEADING and/or TRAILING keywords. $ON FORM "1" $OFF FORM "0" dIn DIM 50 dOut DIM 50 . . Delete leading spaces only . MOVE " ABCD ", dIn CHOP dIn, dOut, LEADING=$ON: TRAILING=$OFF . . Delete both leading and trailing spaces . The CHOP deletes trailing spaces by default. . MOVE " NEXT ", dIn CHOP dIn, dOut, LEADING=1 . . Delete leading and trailing spaces with operand . MOVE " FIRST ", dIn CHOP dIn, TRAILING=0, LEADING=1 - In the 'Sunbelt PL/B Language Reference' manual, modify the 'RECORD and RECORDEND' section as follows: 1) Change Note (8.) first sentence to read as follows: "The only valid data items in a record are DIM, INIT, FORM, INTEGER, GUI objects (10.6A), RECORD, or RECORDEND statements." 2) Add Note (15.) that reads as follows: "When a RECORD item is a GUI object, the behavior for PL/B instructions that allow a RECORD varlist reference can be affected as follows:" A GUI object record item is ignored for these instructions: WRITE (FILE, AFILE, IFILE) COUNT DBFETCH DBFETCHP DBSEND DISPLAY EXTCALL FILL KEYIN LOAD MOVE MOVELIST PACK PACKKEY PRTPAGE READ (FILE, AFILE, IFILE) SET STORE A GUI object record item causes a runtime error for these instructions: LOADADR //F5 error occurs in runtime if operand type // mismatch found! UNPACK //F09 runtime error expected A GUI object record item causes a compiler error for these instructions: CLIPGET CLIPSET COMREAD COMWRITE MOVE Varlist, Varlistx READ (XFILE) STREAM WRITE (XFILE) A GUI object record item causes a behavior change for these instructions: CLEAR //Modified to cause record GUI object items // to be destroyed. - In the 'Sunbelt PL/B Language Reference' manual, add the following methods for the RUNTIME object: ----------------------------------------------------------------------- GetFileTimes Method (RUNTIME) The GetFileTimes method is used to get OS date and time that a file was created, last accessed, and last modified. This method uses the following format: [label] {object}.GetFileTimes [GIVING {runtime}]: USING [*FILENAME=]{filename}[: [*CREATETIME=]{createtime}][: [*ACCESSTIME=]{accesstime}][: [*WRITETIME=]{writetime] Where: label Optional. A Program Execution Label. object Required. A RUNTIME object. return Optional. A Numeric Variable that returns the pass\failure for the execution of this method. filename Required. A Character String Variable or literal that specifies the fully qualified filename to be used. createtime Optional. A PL/B DATETIME object that receives the creation time for the specified file. accesstime Optional. A PL/B DATETIME object that receives the last access time for the specified file. writetime Optional. A PL/B DATETIME object that receives the last write time for the specified file. Flags Affected: EOS, OVER, ZERO . Note the following: 1. The EOS flag is always set to be FALSE. 2. The ZERO flag is set to be TRUE if the {return} value is zero. Otherwise, the ZERO flag is set to be FALSE. 3. The OVER flag is set to be TRUE if the {return} variable is too small to receive the method result without truncation. Otherwise, the OVER flag is set to be FALSE. 4. If the method executes successfully, the {return} value is zero. If the method fails, the {return} value is a non-zero value described as follows: {return} value Description 1 The GetFileTimes method is not supported by the PL/B runtime. nnnn Windows OS error code values. See the 'Sunbelt PL/B Runtime Reference' under "Error Messages\O/S Error Codes". 5. Example: Run RUNTIME //Windows ONLY! CTime DATETIME ATime DATETIME WTime DATETIME Dx DIM 80 Dall DIM 200 nVar FORM 2 Result FORM 8 x0A INIT 0x0A . CTime.SetToNow ATime.SetToNow WTime.SetToNow . Run.GetFileTimes GIVING Result: USING *FILENAME="c:\temp\xfile.txt": *CREATETIME=CTime: *ACCESSTIME=ATime: *WRITETIME=WTime IF ZERO . CTime.GetAsString GIVING Dx //Use default format! PACK Dall, "Create time: ", Dx, x0A ATime.GetAsString GIVING Dx //Use default format! PACK Dall, Dall, "Access time: ", Dx, x0A WTime.GetAsString GIVING Dx //Use default format! PACK Dall, Dall, "Write time: ", Dx REPLACE "T Z ", Dall //Remove delimiters! ALERT NOTE, Dall, nVar, "GetFileTimes Ok!" . ELSE . PACK S$CMDLIN, "GetFileTImes Error: ", Result ALERT NOTE, S$CMDLIN, nVar, "GetFileTimes Failure!" . ENDIF ----------------------------------------------------------------------- SetFileTimes Method (RUNTIME) The SetFileTimes method is used to set the date and time for an existing file. The file times being set are created, last accessed, and last modified. This method uses the following format: [label] {object}.SetFileTimes [GIVING {return}]: USING [*FILENAME=]{filename}[: [*CREATETIME=]{createtime}][: [*ACCESSTIME=]{accesstime}][: [*WRITETIME=]{writetime] Where: label Optional. A Program Execution Label. object Required. A RUNTIME object. return Optional. A Numeric Variable that returns the pass\failure for the execution of this method. filename Required. A Character String Variable or literal that specifies the fully qualified filename to be used. createtime Optional. A PL/B DATETIME object whose current date/time value is used to set the creation time for the specified file. accesstime Optional. A PL/B DATETIME object whose current date/time value is used to set the last access time for the specified file. writetime Optional. A PL/B DATETIME object whose current date/time value is used to set the last write time for the specified file. Flags Affected: EOS, OVER, ZERO . Note the following: 1. The EOS flag is always set to be FALSE. 2. The ZERO flag is set to be TRUE if the {return} value is zero. Otherwise, the ZERO flag is set to be FALSE. 3. The OVER flag is set to be TRUE if the {return} variable is too small to receive the method result without truncation. Otherwise, the OVER flag is set to be FALSE. 4. If the method executes successfully, the {return} value is zero. If the method fails, the {return} value is a non-zero value described as follows: {return} value Description 1 The SetFileTimes method is not supported by the PL/B runtime. 2 Invalid date/time for the {createtime} object. 3 Invalid date/time for the {accesstime} object. 4 Invalid date/time for the {writetime} object. nnnn Windows OS error code values. See the 'Sunbelt PL/B Runtime Reference' under "Error Messages\O/S Error Codes". 5. Example: Run RUNTIME //Windows ONLY! CTime DATETIME ATime DATETIME WTime DATETIME nVar FORM 2 Result FORM 8 . CTime.SetToNow ATime.SetToNow WTime.SetToNow . Run.SetFileTimes GIVING Result: USING *FILENAME="c:\temp\xfile.txt": *CREATETIME=CTime: *ACCESSTIME=ATime: *WRITETIME=WTime IF ZERO . ALERT NOTE, "SetFileTimes ok!" , nVar: "SetFileTimes Test!" . ELSE . PACK S$CMDLIN, "SetFileTImes Error: ", Result ALERT NOTE, S$CMDLIN, nVar, "SetFileTimes Failure!" . ENDIF - In the 'Sunbelt PL/B Language Reference' manual, change the 'GetAsString Method (DATETIME)' section as follows: Change the Note (3) format to include the following: %a AM or PM %h 12 hour (12 - 11) *============================================================================== The following files have been changed as noted: ------------------------------------------------------------------------------- Sunbelt GitHub Updates - Check out the GitHub 'sunbelt-plb-samples' found at the following link. This link contains PL/B sample source code which demonstrates the flexibility and power of the language. https://github.com/KcsDev1982/sunbelt-plb-samples Sample Directory Layout agenda - Sample classic PL/B AGENDA programs (NEW) class_sample - Sample program using PLBOBJECT and CLASSMODULE conf2016 - Sunbelt 2016 conference presentations and samples conf2019 - Sunbelt 2019 conference presentations and samples conftalks - Selected conference presentations courses - Course materials and samples for training datatable - DATATABLE object samples htmlcontrol_designer - Designers for the HTMLCONTROL object http_root - Additional files for the plbwebsrv http_root includes - Latest Sunbelt include files ini_templates - Latest template configuration files jquerymobile - Jquery Mobile sample for plbwebsrv legacy_demo - Legacy sample programs originally released with PLBWIN plbwebcli - Samples for use with PlbWebCli application rest_client - Sample programs accessing REST services rest_server - Sample program for providing REST services templates - Sample program templates videoSamples - Sample programs from the YouTube videos webui - Samples programs for WebView and Web Server xdata - XDATA object samples ------------------------------------------------------------------------------- PLBSERVE - Modified to correct a problem where the PL/B 'ADMLOGON' {logon} parameter data was causing an unexpected error by an Application Server configured to use an 'ADMIN_KEYFILE' for logon security. This change allows the Sunbelt Watch utility to execute without giving an error when the 'Logon' parameter is specified. - Modified the APS server log for user logon entries so PLBCS_KEYFILE data comments start with the "//" character sequence. This change is made to allow the WATCH utility to show logon entries properly when PLBCS_KEYFILE data comments are included. ------------------------------------------------------------------------------- PLBWEBSRV (HTML\JS\CSS) - Modified to support 10.6A changes. plbwebbasic.css 10.5B 230217 plbwebbasic.js 10.6 231127 plbwebboot.html 10.5B 230727 plbwebctls.js 10.5B 230727 plbwebmob.js 10.0A 180402 Support jQuery Mobile plbwebtvcssinfo.html 9.9 161028 plbmobstart.html 10.0A 180402 Support jQuery Mobile plbwebstart.html 10.0A 180402 plbwebstartwv.html 10.5 220524 Support Bootstrap 5 plbwebstart99a.html 9.9A 170428 - Plbwebbasic.js was modified to allow events to go through on touchstart and touchend operations. This change corrects a problem where default scrolling in a PANEL would not work as expected when a MouseDown event for the PANEL was used while running a program in a Mobile device browser. ------------------------------------------------------------------------------- PLBWEBSRV - Updated the 'BootStrap 5' framework to version 5.3. - Corrected an issue when a column width is set to auto-size in a Web LISTVIEW. It now works as expected instead of hiding the column. ------------------------------------------------------------------------------- PLB(UNIX), PLBSERVE(UNIX), PLBWEBSRV(UNIX) - Modified the 'suninst' installation script to verify that the 'glibc' support is available for the execution of the Sunbelt Linux binaries. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLBWEBSRV (Windows) - Modified to allow a RECORD object member to be destroyed using a CLEAR Record operation. - Modified the RUNTIME object to support two new methods named 'GetFileTimes' and 'SetFileTimes'. These methods can be used to fetch and/or set the 'CreateTime', 'AsscessTime', and 'WriteTime' for a file. See the Documentation section for more details. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX), PLBWEBSRV - Modified the 'PRTPAGE *TEMPLATE' to provide extended information when the input PDF file command format is invalid resulting in a S30 subcode 111 error. The extended error information is formatted as follows: 'TMPERR: error data...' - Modified the SCAN NOCASE keyword to support an optional {dnumnvar} operand syntax format as follows: SCAN A, B USING NOCASE[={dnumnvar}] - Modified to support a MODULO ( MOD ) instruction. See the Documentation section for details on this instruction. - Modified to support an PLBOBJECT method when the GIVING input variable is a NULL pointer for a DIM, FORM, or INTEGER. This change allows a GIVING NULL variable to be assigned by a CLASSMODULE function using return variable address. Before this change the PLBOBJECT method would generate a F02 error when a NULL pointer was used for the GIVING variable. - Modified the FTP object 'DIR' method to allow a flag 0x2 setting to be used to support the FTP 'MLSD' command. In this case, the director listings are returned using a standardized format provided by the FTP 'MLSD' command. - Modified the DATETIME object method 'GetAsString' format parameter to include new formats as follows: %a AM or PM %h 12 hour (12 - 11) Example: . DT DATETIME nVar FORM 1 . DT.SetAsString USING *VALUE="1830", *FORMAT="%H%M" . DT.GetAsString GIVING S$CMDLIN USING *FORMAT="%h %a" . ALERT NOTE, S$CMDLIN, nVar //S$CMDLIN --> "06 PM" . - Fixed a problem where a GPF could occur during CLASSMODULE cleanup if files existed in the classmodules when a SHUTDOWN was executed. - Corrected an issue with indeterminate memory allocation when multiple primary keys are used. This fixes I86 subcode 1 or 37 errors using SQLIO. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLBWEBSRV, ALL GUI CLIENTS - Modified to allow events to be set for a DATATABLE using a COLLECTION. - Added a new keyword named 'PLBWIN_AllowXpsDetection=ON|OFF'. This keyword can be used to turn off XPS printer driver detection. By default the Windows runtimes detect a XPS printer driver to invoke XPS_PASS mode. If this keyword is set to OFF, the PL/B runtime does not detect a XPS printer driver. - Added a new keyword '*ALLOWXPSDETECT' to the GETMODE and SETMODE instructions. This keyword is used to determine whether a PL/B runtime is to detect or not detect a XPS printer driver for a SPLOPEN operation. See the Documentation section for more details. - Modified the CHOP instruction to support keywords named 'LEADING={dnumnvar}' or 'TRAILIING={dnumnvar}'. These keywords can be used to delete leading and/or trailing spaces. See the Documentation section for more details. ------------------------------------------------------------------------------- PLBWIN - Modified to prevent Webview events from overrunning the PL/B designer's ability to handle the events. This change improves the PL/B designer operations when Webview Objects are being used. ------------------------------------------------------------------------------- PLBCMP - Modified to allow GUI objects in a CLEAR instruction. With this change the GUI objects MUST be the same as allowed in a DESTROY instruction. - Modified to support GUI objects as RECORD items. This means that any PL/B GUI statements can be executed using RECORD item operands. Example: Rec RECORD Name DIM 25 Address DIM 50 But BUTTON RECORDEND . CREATE Rec.But=5:6:5:15, "Test" ACTIVATE Rec.But .... . The CLEAR instruction has been modified to allow RECORD . object items to be destroyed. . CLEAR Rec //Clear variables & Destroy 'But' - Modified the SCAN instruction to allow the NOCASE keyword to have an optional {dnumnvar} operand. The syntax for this change is as follows: SCAN A, B USING NOCASE[={dnumnvar}] - Modified to support a MODULO ( MOD ) instruction. See the Documentation section for details on this instruction. - Modified to support a modulus numeric operator '%' in PL/B numeric expressions. Example: F3 FORM 3 F2p2 FORM 2 Ans FORM 3 . MOVE "9",F3 MOVE ( F3 % "2" ), Ans //Remainder Ans --> "1" . MOVE "27", F3 CALC Ans = ( F3 % 11 ) //Remainder Ans --> "5" . MOVE "3", F3 MOVE "-8.6", F2p2 IF ( ( F2p2 % F3 ) == 2 ) DISPLAY "OK..." ELSE DISPLAY "Error..." ENDIF - Modified the compiler to support a new keyword '*ALLOWXPSDETECT={value}' for the GETMODE and SETMODE instructions. See the Documentation section for more details. - Modified the compiler to support a PL/B OBJECT as an item in a RECORD. Note: 1. Modified the 'CLEAR RECORD' to execute a 'DESTROY OBJECT' operation for any PL/B OBJECT items used in a RECORD. 2. PL/B instructions that use a RECORD as an operand are to ignore any PL/B object record items. - Modified to correct a compiler hanging problem that could happen when using RECORD arrays in a PL/B program. - Modified to eliminate "unconditional GOTO/RETURN" WARNING when a MACRO directive did not have a label. - Corrected a problem where a DBSTATEMENT pointer was not allowed as the destination operand in the MOVEPTR instruction. - Corrected a problem where a LOADADR to a VARLIST pointer destination did not work when a single VARLIST was specified in the operand variable list. - Corrected a problem for a LOADADR where invalid operand data types were allowed when the destination was a VARLIST pointer. With this change, the compiler give an appropriate compile error. - Corrected a problem where a MOVELIST instruction created invalid PCODE when the source operand was variably indexed RECORD array. ------------------------------------------------------------------------------- SUNIDE.PLC - Close Project now closes all peek editors. - Open Recent Files no longer attempts program tracking. - Redesigned program tracking logic. - Modified the Peek windows button action and tab menu. - Added Peek (on Peek) to the Peek window shortcut menu. - Added Goto Line and Label to the Peek window shortcut menu. - Ensures Designer generated code is removed during Find/Replace in file searching. - Enhanced the Find/Replace in files logic. - Corrected shortcut menu handling. - Opening files with undefined extension now allows opening as a text file or passing to the operating system. - Find/Replace in files now uses a dynamically allocated code buffer. - Find/Replace in files allows searching only the open files. - Now prevents execution if the IDE Help file (sunide.chm) is not available. - Added related windows, panels, and variables to the OpenFiles record array. - Modified FTP directory retrieval to use the MSLD directory option. ------------------------------------------------------------------------------- DESIGNER.PLC - Modified to allow form sizes larger than 10MB. - Modified Peek windows button action and tab menu. - Added Peek (on Peek) to the Peek window shortcut menu. - Added Goto Line and Label to the Peek window shortcut menu. - Corrected the Clear Bookmarks function in the code window shortcut menu. - Corrected editor positioning when the object combox of the code window is changed. - Corrected positioning of the form test error listing dialog. - Corrected WebForm object selection, sizing, and drawing functions. - Allows event code to be defined as a FUNCTION. - Added support for an event FUNCTION template. - Corrected display of DataTable column and row properties in the associated property editor. - Corrected a hanging issue when attempting to add DataTable data before any columns are defined. ------------------------------------------------------------------------------- SUNCS21.OCX - Added PL/B Language support for .GetFileTimes, .SetFileTimes, .SetWebTheme, and MODULO. - Updated GETMODE/SETMODE keywords *CDFDELMDEFAULT, *CDFDELMLOCALE, *CDFDELUSELOCALE, *EDITTEXTMODES, *IDLEMAXTIME, *IDLETERM, *IDLETIMEOUT, *LASTSSLERROR, *LINUXREADLOCK, *PDFDIALOGDIR, *PDFJPEGQUALITY, *PERCENTCONVERT, *PLBWINPRTPREV, *PRTPREVIEWCENTER, *SUSPENDMAXTIME, *WEBMODEHTMLCTRL, *WEBMODEPLF, *WEBMODEPWF, *WEBVIEW2VERSION, and *ALLOWXPSDETECTION. ------------------------------------------------------------------------------- EDITOR.PLC - Added Find in Files, Go To, and Peek selections to the shortcut menu. -------------------------------------------------------------------------------