Date: 10-01-2021 Subject: RELEASE 10.4 Runtime Files These RELEASE notes pertain to the following programs or files: EMBEDINI 10.4 01 Oct 2021 10.4.0.500 EMBEDINI64 10.4 01 Oct 2021 10.4.0.500 HEXDUMP 10.4 01 Oct 2021 10.4.0.500 HEXDUMP64 10.4 01 Oct 2021 10.4.0.500 MAKECLI 10.4 01 Oct 2021 10.4.0.500 MAKECON 10.4 01 Oct 2021 10.4.0.500 MAKECONET 10.4 01 Oct 2021 10.4.0.500 MAKEDEF 10.4 01 Oct 2021 10.4.0.500 MAKEMFD 10.4 01 Oct 2021 10.4.0.500 MANAGECE 10.4 01 Oct 2021 10.4.0.500 OBJMATCH 10.4 01 Oct 2021 10.4.0.500 OBJMATCH64 10.4 01 Oct 2021 10.4.0.500 ODBCINST64 10.4 01 Oct 2021 10.4.0.500 PLBCGI 10.4 01 Oct 2021 10.4.0.500 PLBCLICON 10.4 01 Oct 2021 10.4.0.500 (ComCtl 6) PLBCLIENT 10.4 01 Oct 2021 10.4.0.500 (ComCtl 6) PLBCLINET 10.4 01 Oct 2021 10.4.0.500 (ComCtl 6) PLBCON 10.4 01 Oct 2021 10.4.0.500 (ComCtl 6) PLBCONET 10.4 01 Oct 2021 10.4.0.500 (ComCtl 6) PLBNET 10.4 01 Oct 2021 10.4.0.500 (ComCtl 6) PLBSERVE 10.4 01 Oct 2021 10.4.0.500 (Processed Server) PLBSERVET 10.4 01 Oct 2021 10.4.0.500 (Threaded Server) PLBWEBSRV 10.4 01 Oct 2021 10.4.0.500 (Processed Server) PLBWEBSRVT 10.4 01 Oct 2021 10.4.0.500 (Threaded Server) PLBWIN 10.4 01 Oct 2021 10.4.0.500 (ComCtl 6) SUNAAMDX 10.4 01 Oct 2021 10.4.0.500 SUNAAMDX64 10.4 01 Oct 2021 10.4.0.500 SETGUID 10.4 01 Oct 2021 10.4.0.500 SUNINDEX 10.4 01 Oct 2021 10.4.0.500 SUNINDEX64 10.4 01 Oct 2021 10.4.0.500 SUNLS 10.4 01 Oct 2021 10.4.0.500 SUNMOD 10.4 01 Oct 2021 10.4.0.500 SUNMOD64 10.4 01 Oct 2021 10.4.0.500 SUNSORT 10.4 01 Oct 2021 10.4.0.500 SUNSORT64 10.4 01 Oct 2021 10.4.0.500 WININST 10.4 01 Oct 2021 10.4.0.500 PLBNETSUP.DLL 10.4 01 Oct 2021 10.4.0.500 Required for PLBNET PLBWSEC.DLL 10.4 01 Oct 2021 10.4.0.500 Req'd PLBWIN/PLBNET ODSBAC32.DLL 10.4 01 Oct 2021 ODSBAC64.DLL 10.4 01 Oct 2021 SA_DLL32.DLL 10.4 01 Oct 2021 10.4.0.500 SUNWADO.DLL 10.4 01 Oct 2021 10.4.0.500 SUNWADO25.DLL 10.4 01 Oct 2021 10.4.0.500 SUNWADO28.DLL 10.4 01 Oct 2021 10.4.0.500 SUNWMSQL.DLL 10.4 01 Oct 2021 10.4.0.500 SUNWODBC.DLL 10.4 01 Oct 2021 10.4.0.500 SUNWSRV.DLL 10.4 01 Oct 2021 10.4.0.500 SUNWSRV64.DLL 10.4 01 Oct 2021 10.4.0.500 Required for Sundm64 PLBCLI.ZIP 10.4 01 Oct 2021 10.4.0.600 (ComCtl 6) PLBRUN.ZIP 10.4 01 Oct 2021 10.4.0.600 (ComCtl 6) DBGIFACE 10.4 01 Oct 2021 PLBCMP 10.4 01 Oct 2021 PLBDBUG 10.4 01 Oct 2021 SUNDEBUG 10.4 01 Oct 2021 ADMEQU.INC 10.4 01 Oct 2021 PLBEQU.INC 10.4 01 Oct 2021 PLBMETH.INC 10.4 01 Oct 2021 *============================================================================== Notes for some NEW Items: - The new enhanced PL/B debugger named 'Sundebug' is being released in 10.4. Sundebug has been implemented to be executed as standalone or it can be integrated in the 10.4 Sunide to be executed seamlessly. - The 10.4 Sunide has been rewritten to expand and simplify the PL/B development environment. - The PL/B Web Server has been modified to support a FTP server *============================================================================== Notes for DOCUMENTATION: - In the PL/B Language Reference manual, change the Note (7.) in the GETFILE (XFILE) section to include the following XMLFORMAT bit mask value description: XMLOUTFMTWRTISO8859 0x200 - Use ISO8859 when outputting XML data for the XFILE. - In the PL/B Language Reference manual, add the following method to the 'RUNTIME Methods' section and method descriptions: *------------------------------------------------------------------ VerifyUtf Method (RUNTIME) The VerifyUtf method is used to verify that PL/B character data is a valid UTF-8 string.This method uses the following format: [label] {object}.VerifyUtf [GIVING {return}]: USING [*STRING=]{string}[: [*FLAGS=]{flags}][: [*LENGTH=]{length}] Where: label Optional. A Program Execution Label. object Required. A RUNTIME object that has been previously declared. return Optional. A Numeric Variable that returns the result for this method. string Required. A Character String Variable or literal that contains data to be verified. flags Optional. A Numeric Variable or decimal number that specifies a a value that identifies the result type to be returned. length Optional. A Numeric Variable or decimal number that specifies the number of characters in the string data to be verified. When the length parameter is not used, the method determines the number of characters in the string to be tested. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is set TRUE when the result of zero is returned. 2. The OVER flags is set TRUE if the return variable is too small to receive the result value. 3. The EOS flag is always cleared. 4. The {flags} bit mask values are described as follows: Value Description 0 This is the default value if the flags parameter is not specified for the method. When the flags value is zero, this method verifies that the data character string is a valid UTF-8 string. In this case, the return value of zero indicates that the character string is a valid UTF-8. A return of a non-zero value indicates an invalid UTF-8 string is found. 1 When this bit value is specified, this method evaluates the logical length of the string data. In the case, the return value is the evaluated logical length of the string data. 2 When this bit value is specified, this method evaluates the physical length of the string data. In this case, the return value is evaluated physical length of the string data. The physical length is calculated as the number of UTF-8 characters times 4. Examples: R RUNTIME nRes FORM 5 nOpt1 INTEGER 1,"1" //Get Logical Length nOpt2 INTEGER 1,"2" //Get Physical Length Test1 INIT "abc" //Valid UTF-8 Test2 INIT "abc",0xE9 //Invalid UTF-8 Test3 INIT "abc",0xC3,0xA9 //Valid UTF-8 . . Test1 ( Valid UTF-8 ) . R.VerifyUTF GIVING nRes USING Test1 //nRes returns 0 R.VerifyUTF GIVING nRes USING Test1: //nRes returns 3 nOpt1 //Logical Length R.VerifyUTF GIVING nRes USING Test1: //nRes returns 12 nOpt2 //Physical Length . . Test2 ( Invalid UTF-8 ) . R.VerifyUTF GIVING nRes USING Test2 //nRes returns 1 R.VerifyUTF GIVING nRes USING Test2: //nRes returns 4 nOpt1 //Logical Length R.VerifyUTF GIVING nRes USING Test2: //nRes returns 16 nOpt2 //Physical Length . . Test3 ( Valid UTF-8 ) . R.VerifyUTF GIVING nRes USING Test3 //nRes returns 0 R.VerifyUTF GIVING nRes USING Test3: //nRes returns 4 nOpt1 //Logical Length R.VerifyUTF GIVING nRes USING Test3: //nRes returns 16 nOpt2 //Physical Length - In the PL/B Language Reference manual, change the HTTP Note (3.) to include the following bit mask descriptions for the *FLAGS bit mask values: $HTTP_FLAG_TLSV1 0x400 Use the SSL TLSv1.0 protocol which is an upgraded version of SSLv3. $HTTP_FLAG_TLSV11 0x0800 Use the SSL TLSv1.1 protocol. $HTTP_FLAG_TLSV12 0x1000 Use the SSL TLSv1.2 protocol. $HTTP_FLAG_USESSLDEFS 0x2000 Use SSL defaults as determined from the OPENSSL command. - In the PL/B Language Reference manual under the 'SetColumnOrder Method (LISTVIEW)' section, change the method description to read as follows: "The SetColumnOrder' method is used to change the order for displaying the LISTVIEW object columns." - In the PL/B Language Reference manual under the 'PASSWORDCHAR Property', add a Note (4.) described as follows: 4. Normal/expected behavior using the PASSWORDCHAR property for the Windows EDITTEXT and RICHEDITTEXT objects requires that the password character value should be a 7-bit value ( 0 to 127 ). If the password character value is set to an 8-bit value ( 128 to 255 ), unexpected behavior(s) may occur for the Windows EDITTEXT and RICHEDITTEXT objects. - In the PL/B Language Reference manual under the 'Expressions' section, add a note that reads as follows: "When using string expressions, the characters of '_', '%' and '\' are treated as normal characters for all string operators except as described for the Operand2 of the LIKE operator." - In the PL/B Language Reference manual under the 'HTTP' instruction, change the Note (3.) {options} descriptions as follows: *FLAGS={dnumnvar} 0x1 - $HTTP_FLAG_RAWCOMMAND Add the following description: - The $HTTP_FLAG_RAWCOMMAND mode is ignored/not used in a HTTP instruction the includes either one of the following: 1) The *POSTMESSAGE keyword is used. 2) The $HTTP_FLAG_JUSTHEADER flags option is being specified/used. 0x4 - $HTTP_FLAG_JUSTHEADER Add the following description: - If HTTP *FLAGS options include both the $HTTP_FLAG_RAWCOMMAND and $HTTP_FLAG_JUSTHEADER, the $HTTP_FLAG_JUSTHEADER takes precedence and the $HTTP_FLAG_RAWCOMMAND bit mask option is ignored and not used. *POSTMESSAGE={svarlit} Add the following description to the current *POSTMESSAGE description: - If the *POSTMESSAGE is used in a HTTP instruction with the $HTTP_FLAG_JUSTHEADER and/or $HTTP_FLAG_RAWCOMMAND bit mask {options} set, the *POSTMESSAGE operation takes precedence and these bit mask values are ignored/not used. - In the PL/B Language Reference manual under the 'SQLIO Example Configurations' section, remove extra 'and' from the Example configuration #1 Procedure (5.). - In the PL/B Web Server manual, add a new keyword 'PLBWEB_USEINI_DEFAULT' description as follows: PLBWEB_USEINI_DEFAULT={on|off} This optional keyword can be used to turn on PLB_xxx language keyword settings declared in an '.ini' file that is specified by the client browser URL 'runopt=-i{ini name}' file parameter. Note: 1. If this keyword is not used, this is the same as setting this keyword to 'off'. In this case, the following PL/B language keyword settings can ONLY be specified in the 'plbwebsrv.ini' configuration file: PLB_SCHEMA PLB_SQLIO_INIT PLB_SQLSCHEMADB PLB_SQLTABLEDB PLB_OPENUSESQL PLB_PREPUSESQL PLB_SQLIO_DEBUG_LOG PLB_SQLIO_HOST PLB_SQLIO_USER PLB_SQLIO_PASS PLB_SQLIO_CONN PLB_SQLIO_EXT PLB_SQLIO_FLAGS PLB_SQLIO_SCOPEID PLB_SQLIO_SQLTYPE PLB_SQLIO_DRIVER 2. If this keyword is set to be 'on', the PWS server allows all supported PLB_xxx keywords to be processed from the (ini name} file specified by the {client browser URL 'runopt=-i{ini name}' file parameter. In this case, the {ini name} file keywords override the 'plbwebsrv.ini' keyword settings. 3. The PLBWEB_xxx keywords can ONLY be specified/used for the PWS server settings using the 'plbwebsrv.ini' configuration file. - In the PL/B Utilities manual, change the 'MAKEDEF' descriptions as follows: Change the Note(2.) to read as follows: 2. If {scrndef} is not specified, the user's environment table is searched for a PLB_TERM or TERM entry. If both PLB_TERM and TERM entries exist, the PLB_TERM entry takes precedence and is used. An extension of `.def' is appended to the PLB_TERM/TERM entry and an attempt is made to open the corresponding screen definition file. Add a Note (3.) that reads as follows: 3. If the screen definition file assigned to the PLB_TERM or TERM entry cannot be found, the following behaviors are expected: - Executing under a Windows OS: The 'makedef.exe' utility gives an appropriate error message and terminates. - Executing under a Linux/Unix OS: The 'makedef' utility attempts to create a new screen definition file using the information found in the files located in the `/usr/lib/terminfo' directory. If the '/usr/lib/terminfo' directory does not exist, the information found in the '/usr/share/terminfo' directory is used to create a new screen definition file. Also, if a Linux/Unix keyword named 'TERMINFO={termdir}' is found in the UET, the {termdir} assigned string is a path that is used to find the terminal information when creating a new screen definition file. Under normal circumstances, the 'TERMINFO' UET keyword should not be used/required. - In the PL/B Language Reference manual under the 'MouseDown Event' description, add a Note (4.) that reads as follows: 4. When using the PL/B Web Server runtime, the use of the Mouse events for PWS objects can cause unexpected behaviors when using Android and iOS mobile devices. Please note the following behaviors: a. If the MouseDown event is registered for a container including WINDOW and PANEL objects, then events for any children PWS objects on the container are not triggered as normally expected. For Example: If a MouseDown event is registered for a PWS PANEL and there is a PWS BUTTON object on the PANEL, a Click event for the PWS BUTTON does not occur. b. Also, if a MouseDown event and a Click event are both registered for a PWS BUTTON, the Click event for the button does or may not trigger as expected.. - In the PL/B Web Server manual, modify the 'PLBWEB_REST_USE_ENV Keyword section to include a Note (2.) that reads as follows: Note: 2. The 'PLBWEB_REST_USE_ENV=ON' keyword is not supported by the Linux PL/B Web Server. When using a Linux PWS server, this keyword is ignored and the PWS executes the same as if this keyword is set to OFF. - In the PL/B Runtime Reference manual, add a new keyword named 'PLB_U10_PROGNAME={on|off}' as follows: PLB_U10_PROGNAME={ON|OFF} ( Default is ON ) This keyword can be used to specify whether a program name is to be output when a U10 error occurs. By default, the 10.4 or newer PL/B runtimes output the program name with the U10 error. This default behavior is the same as setting the 'PLB_U10_PROGNAME=ON' in the runtime configuration file. If the 'PLB_U10_PROGNAME=OFF' keyword setting is used, the program name is not output when a U10 error occurs. Also, when using a Windows OS PL/B runtimes, WINERR extended data is output when this keyword is set to the 'ON' state. Note: 1. When using a PL/B Web Server, only the file name is output which does not include any path information. Also, there is no WINERR data output when using a Windows PWS server. - In the PL/B Utilities manual, change the SUNINDEX note (5.) to include the '-d' debug option as follows: SUNINDEX Change Note 5 to read as follows: The {mode} parameter can be used to invoke logging of program messages when the '-L' or '-Q' parameter values are specified. The '-L' and '-Q' parameter values are mutually exclusive. Warning: Note, the {log} file name MUST be specified when using the '-L' or '-Q' parameter values. Otherwise, the first file specification is used for logging. Also, the {mode} can include a leading '-d' parameter value that can invoke additional debug program messages Mode Meaning D Output debug program messages. If the L/Q options are being used, the debug program messages are output to the {log} file. L Write all messages to the log file. Q Append all messages to the log file. - In the PL/B Language Reference manual, change the 'Connect Method (FTP)' Note (4.) to include the description for FTP implicit SSL as follows: Values Description 0x2 This bit only takes affect when it is used with either the 0x01 (explicit SSL) or the 0x04 (implicit SSL) bit values. This 0x02 bit value invokes SSL reuse to maximize the security and performance. 0x4 If this bit is turned on, an implicit SSL socket connection to a FTP server is made. - In the PL/B Language Reference manual, modify the 'CREATE MENU' section Note (6.) to include a link to the 'Menu Special Characters' section. Modify Note (6.) as follows: 6. The special character control characters '(', ')', '/', and '<' can be included as part of a menu item name by repeating the character in the {menu-data} string. See the 'Menu Special Characters' section for more details. - In the PL/B Web Server manual, add the 'FTP Server Support' described as follows: FTP Server support has been added to the PL/B Web Server. The FTP Server implementation can be configured to expand the capabilities of the PL/B Web Server while providing secured FTP access. The FTP server is implemented as per the RFC 959 and 1123 FTP specifications and supports the full set of commands as identified by the specification. Note: 1. Only 32 bit file size maximum is supported. 2. When configuring the PWS FTP Server, both the PLBFTP_ADDRESS and PLBFTP_ROOT keywords MUST be set in the 'plbwebsrv.ini' configuration file. Otherwise, the PWS FTP Server DOES NOT start when the PWS server is started. 3. To activate the FTP Server, there are PWS keywords that can be added to the 'plbwebsrv.ini' configuration file as follows: PLBFTP_ADDRESS={ip | url[:portnum]} This keyword is required to start the FTP Server. This keyword creates a socket on a listening port that allows FTP clients to connect to the PWS FTP Server. Example: PLBFTP_ADDRESS=www.sunbelt-plb.com:8087 PLBFTP_ROOT={OsPath} This keyword is required to start the FTP Server and it specifies the {OsPath} directory that is the default virtual root directory used for FTP operations. This default directory is used for FTP operations when a PLBFTP_USER_ does not specify a parameter. Example: PLBFTP_ROOT=c:\sunbelt\plbwebsrv.104\ftpout Note: 1. The {OsPath} must exist or FTP operations will encounter errors. PLBFTP_SESSION_MAX={threads} This keyword specifies the maximum number of FTP child threads. If this keyword is not used, the default maximum value of 5 child threads are allowed. The maximum {threads} value is 100 child threads. PLBFTP_PASV_PORT={baseport} This keyword specifies the base socket port number to be used when the FTP passive mode is to be used. The {baseport} port number value must be greater than 1024. If this keyword is not specified or the {baseport} number value is less than 1024, the default port number value of 50000 is used as the base port number. If more than one passive FTP Server session exist, the port number for each subsequent session is an incremental number starting from the {baseport} value. Note: 1. The {baseport} port number must not be the same as main FTP Server port number. PLBFTP_LOG_FTP={mode} This keyword specifies the PWS FTP Server log mode where PWS FTP Server operations are output to the log file identified by the PLBWEB_LOGNAME/PLBWEB_LOGFILE. If this keyword is NOT specified or the {mode} value is zero, NO FTP operations are logged. {mode} Values Description 0x0000 - There is no logging. 0x0001 - Log all FTP operations. 0x0002 - Log FTP commands. 0x0004 - Log FTP responses. 0x0008 - Log FTP connections. 0x0010 - Log FTP closes. 0x0040 - Log FTP system errors. PLBFTP_SRVRECVTIMEOUT={min} This keyword is used to control the data receive timeout specified in minutes. If this keyword is not used or it is used with a {min} value of zero, the default data receive timeout is set to 20 seconds. The {min} value can be from 0 to 60 minutes. PLBFTP_IDLE_TIMEOUT={min} This keyword is used to specify an idle time out in minutes. If a FTP Session is idle for a period of time longer than the {min} value, the FTP Session is closed. If the PLBFTP_IDLE_TIMEOUT is not used, the default idle timeout is 15 minutes. When this keyword is used, the {min} value can be from 2 to 60 minutes. PLBFTP_LINGER={sec} This optional keyword specifies the number of seconds that an OS socket close operation lingers if unsent data is present for PWS FTP socket connection. Note: 1. If this keyword is not used, the default OS linger is used for the socket close operation. PLBFTP_SSL_ONLY={parameter} This optional keyword is used to determine if an AUTH command is required for SSL. If this keyword is not used, the default is OFF. Where: parameter The parameter can be specified a ON or OFF. Note: The parameter values are: Value Description ON The FTP client AUTH command is required when using SSL. OFF The FTP client AUTH command is not required. PLBFTP_SSL_IMPLICIT={parameter} This optional keyword is used to require all PWS FTP Server socket connects must use SSL or not. Where: parameter The parameter can be specified a ON or OFF. Note: The parameter values are: Value Description ON The FTP socket connections must use SSL. OFF The FTP socket connections do not require SSL. PLBFTP_ALLOW_ANON={parameter} This optional keyword can be used to allow any password on a user named anonymous this {parameter} is set to ON. This keyword is ignored if there is no configured user named anonymous. Where: parameter The parameter can be specified a ON or OFF. Note: The parameter values are: Value Description ON Allow any password for a user named anonymous. OFF Require the configured password for the user named anonymous as specified by the 'PLBFTP_USER_ANONYMOUS' keyword. PLBFTP_USER_{username}={password},{permissions}[,{path}] This keyword is used to define a user name, password, permissions, and optional path for accessing the PWS FTP Server. The 'PLBFTP_USER_{name}' keywords can be added, modified, or removed real time without having to restart the PWS server. This gives a dynamic mode of usage when managing FTP users who can access the PWS FTP Server. Where: username Required The {username} is the name provided by a FTP client accessing the PWS FTP Server. The {username} must be less than 50 characters long. The {username} can be specified as 'anonymous'. password Required The {password} is a SHA-1 hashed string of 20 bytes provided as 40 hexadecimal characters. If the {username} is specified as 'anonymous' the {password} may or may not be required depending on whether the 'PLBFTP_ALLOW_ANON' keyword ON setting is being. See Note (2.) permissions Optional The {permissions} is provided as a string of uppercase characters that identifies the FTP operations which are allowed for a specified {username}. See Note (1.) path Optional The {path} can be provided to define the OS directory that the FTP client user has access to on the system where the PWS FTP Server is executing. Beware, the FTP client user is limited to access of the {path} directory, subdirectories, and files. The {path} is the new virtual root for this user. Note: 1. The {permission} control characters are defined as follows: Character Permission Description D - Allow Download of files to the FTP client. L - Allow a List of Files to be sent to the FTP client. R - Allow Rename/Remove of files at the PWS FTP Server. U - Allow Upload of files to the the PWS FTP Server. P - Allow Change path at the PWS FTP Server. M - Allow Make/remove of directories at the PWS FTP Server. 2. The {password} is a SHA-1 hashed string of 20 bytes provided as 40 hexadecimal characters. See this link to get SHA-1 Hash encrypted string: https://md5decrypt.net/en/Sha1/ . .This is an example of PL/B code that creates the .40 character hexadecimal string for the {password}. . UserPW DIM 50 PassWord DIM 50 i INTEGER 1 i4Arr INTEGER 1(20) D8 DIM 8 D2 DIM 2 D20 DIM 20 HashHex DIM 50 xMode INTEGER 1,"4" //SHA1 with context // initialization R RUNTIME . WINHIDE MOVE "Password", UserPW HASH UserPW, PassWord: MODE=xMode UNPACK PassWord, i4Arr . FOR i, 1, 20 . R.IntToString GIVING D20: USING i4Arr(i), 1 UNPACK D20, D8, D2 PACK HashHex, HashHex, D2 . REPEAT . ALERT NOTE,HashHex,i: "HashHex of 'Password'" . . HashHex=8BE3C943B1609FFFBFC51AAD666D0A04ADF83C9D . 3. This is an example for a user named 'Test' with a password of 'Password': Example: PLBFTP_USER_TEST=8BE3C943B1609FFFBFC51AAD666D0A04ADF83C9D,DL In this case, the user named 'TEST' with a password of 'Password' has permissions to download files and list files when accessing a PWS FTP Server. PLBFTP_SSL_1_1_USED={ on | off } This keyword configures the PWS FTP Server to only load the OpenSSL 1.1.x SSL DLLs. When this keyword is set to 'ON', the 1.1.x SSL shared libraries must exist and be accessible before the PWS FTP Server can start. Note: 1. When using a Windows OS PWS server, it is recommended that the 'libssl-1_1.dll' and 'libcrypto-1_1.dll' SSL DLLs be located in the same directory as the PWS server executable. This ensures that the correct version of the SSL libraries are being loaded. 2. When using a Unix/Linux PWS server, the appropriate OpenSSL shared 32-bit libraries must be installed. In this case, the web server must be able to load the SSL shared libraries named 'libssl.so.1.1' and 'libcrypto.so.1.1'. PLBFTP_SSL_CERTFILE={certfile} This keyword is optional and specifies the file name of a SSL certificate that qualifies the PWS FTP Server when using a SSL secured logon channel. If this keyword is not specified in the PL/B Web Server configuration file, the PWS FTP Server does not start the SSL support. When this keyword is specified, the {certfile} can be assigned as a file name only that must exist in the current working directory of the PWS. In addition, the {certfile} can be assigned as a file name with an OS full path or a partial OS path relative to the current working directory of the PWS. PLBFTP_SSL_KEYFILE={keyfile} This keyword is optional and specifies the file name of a SSL certificate key(s) that supports the SSL operations. If this keyword is not specified in the PL/B Web Server configuration file, the PWS FTP Server does not start the SSL support. When this keyword is defined, the {keyfile} can be assigned as a file name only that must exist in the current working directory of the PWS. In addition, the {keyfile} can be assigned as a file name with an OS full path or a partial OS path relative to the current working directory of the PWS. See the 'PLBWEB_SSL_KEYFILE' Notes for more details on using SSL DLLs. PLBFTP_SSL_SELFSIGNED= This keyword is optional and specifies that the default SSL support was implemented to require the TLSv1 interface method which gives the best security level when a FTP client is accessing the PWS FTP server. To use a self-signed certificate, the default SSL interface method must be set to a lower security level using the SSLv23 interface method. In this case, the 'PLBFTP_SSL_SELFSIGNED=ON' must be used to allow use of a self-signed certificate. Note: 1. The 'PLBFTP_SSL_SELFSIGNED=ON' should only be specified when a self-signed SSL certificate is being used. PLBFTP_SSL_PROTOCOL={ 0 | 1 | 2 | 3 } This keyword is optional and defines the SSL minimum protocol version used by the PWS FTP Server. The keyword values are defined as follows: Value SSL Protocols Allowed are ... 0 SSLv3, TLSv1.0, TLSv1.1, or TLSv1.2 1 TLSv1.0, TLS1.1, or TLSv1.2 (default) 2 TLSv1.1 or TLSv1.2 3 TLSv1.2 10 Only the TLSv1.0 protocol version is supported. A server only understands TLSv1.0 client hello messages. 11 Only the TLSv1.1 protocol version is supported. A server only understands TLSv1.1 client hello messages. 12 Only the TLSv1.2 protocol version is supported. A server only understands TLSv1.2 client hello messages. Note: 1. If the 'PLBFTP_SSL_SELFSIGNED=ON' is being use in the 'plbwebsrv.ini' file, the PLBFTP_SSL_PROTOCOL keyword is ignored and the minimum SSL protocol version SSLv3 is used. PLBFTP_SSL_SETCIPHER={cipher} This keyword specifies the SSL cipher(s) for the PWS FTP Server SSL connections. The syntax format and descriptions of the {cipher} settings can be found at this URL link: https://www.openssl.org/docs/manmaster/man1/ciphers.html Where: {cipher} Specifies a list of one or more cipher strings separated by colon characters. The {cipher} string is case sensitive. Note: 1. It may become necessary to restrict or include specific server side SSL ciphers to be supported by the PWS FTP Server. Examples of cipher lists: PLBFTP_SSL_SETCIPHER=AES Allows 128-bit and 256-bit block ciphers. PLBFTP_SSL_CHAINCERT={ on | off } This keyword enables or disables SSL chained file certificates. By default, if this keyword is not used, the PWS FTP Server enables SSL chained certificates where the PWS server loads a certificate chain file. If the 'PLBFTP_SSL_CHAINCERT=OFF' keyword is specified in the 'plbwebsrv.ini' [Environment] section, the PWS FTP Server loads a SSL certificate file. PLBFTP_SSL_BLACKLIST_FILE=={ [path] + filename } This keyword file specifies the filename used to pre-load and\or output the SSL blacklist IP addresses used for IP filtering. If this keyword is not used, the PWS FTP Server defaults to use the file named 'plbwebsrv_ssl_blacklist.txt' when pre-loading or dumping IP filtering data. 4. The PWS FTP Server supports the following FTP commands: FTP Commands ABOR Aborts a file transfer currently in progress. ACCT account-info This command is used to send account information on systems that require it. ALLO size [R max-record-size] Allocates sufficient storage space to receive a file. APPE remote-filename Append data to the end of a file on the remote host. AUTH security Initialize a secure connection using TLS. CWD remote-directory Makes the given directory be the current directory on the remote host. DELE remote-filename Deletes the given file on the remote host. FEAT Returns the extended features. HELP [command] Returns general help for the FTP server. LIST [remote-filespec] If remote-filespec refers to a file, sends information about that file. If remote-filespec refers to a directory, sends information about each file in that directory. MDTM remote-filename Returns the last-modified time of the given file on the remote host in the format YYYYMMDDhhmmss. MKD remote-directory XMKD remote-directory Creates the named directory on the remote host. MODE mode-character Sets the transfer mode - Only [S]tream is supported. NLST [remote-directory] Returns a list of filenames in the given directory. NOOP Does nothing except return a response. PASS password Send a password. PASV Tells the server to enter passive mode. PBSZ size Sets the maximum size, in bytes, of the encoded data blocks to be sent or received during a file transfer. PORT a1,a2,a3,a4,p1,p2 Specifies the host and port to which the server should connect for the next file transfer. PROT protection-level Sets the level of protection used on the data channel. PWD XPWD Returns the name of the current directory on the remote host. QUIT Terminates the command connection. REST position Sets the point at which a file transfer should start. RETR remote-filename Begins transmission of a file from the remote host. RMD remote-directory XRMD remote-directory Deletes the named directory on the remote host. RNFR from-filename Use this command to specify the file to be renamed before a RNTO command. RNTO to-filename After a RNFR command send this command to specify the new name for the file. SITE site-specific-command Executes a site-specific command. TIME is the only supported command for the PWS FTP Server. SIZE remote-filename Returns the size of the remote file as a decimal number. STAT [remote-filespec] If invoked without parameters, returns general status information about the FTP server process. STOR remote-filename Begins transmission of a file to the remote site. STOU Begins transmission of a file to the remote site; the remote filename will be unique in the current directory. STRU structure-character Sets the file structure for transfer. Only [F]ile is supported by the PWS FTP Server. SYST Returns a word identifying the system. PWS FTP Server always returns: UNIX Type: L8 TYPE type-character [second-type-character] Sets the type of file to be transferred. USER username Send this command to begin the login process. - In the PL/B Web Server Reference, add the new PWS keyword 'PLBWEB_SSL_SHUTDOWN' described as follows: PLBWEB_SSL_SHUTDOWN={ on | off } This keyword is used to enable a PWS behavior where a SSL secure connection with a browser client is shutdown before the socket connection is closed when this keyword is set to 'on'. By default, the PWS server does not shutdown the SSL secure connection before closing the socket connection. This default behavior is the same as setting this keyword to 'off'. Note: 1. This keyword may not be needed unless there is some unexpected behavior when a client browser secured connection is being closed. 2. This keyword only takes affect when the PWS server is started. - In the Sunbelt PL/B Language Reference manual, change the 'Put Method (FTP)' remotefile parameter from 'Required' to 'Optional. - In the Sunbelt PL/B Language Reference manual, change the 'Get Method (FTP' section as follows: 1) Change the 'LocalFile' to be the first parameter and the 'RemoteFile' to be the second parameter. [label] {object}.Get [GIVING {return}] USING [*LocalFile=]{localfile}: [*RemoteFile=]{remotefile} 2) Change the remotefile parameter from 'Required' to 'Optional'. Also, swap the order of the remotefile and localfile descriptions as follows: localfile Required. A Character String Variable that specifies the local file name where the remote file data is stored. remotefile Optional. A Character String Variable that specifies the remote file retrieved from the FTP server. ========================================================= The following files have been changed as noted: ------------------------------------------------------------------------------- PLBSERVE - Modified to allow PLBCS_KEYFILE data comments to be logged in the APS log output when users logon. ------------------------------------------------------------------------------- PLBWEBSRV (HTML\JS\CSS) - Modified to support 10.2A changes. plbwebbasic.css 10.1B 190424 plbwebbasic.js 10.2B 200707 plbwebboot.html 10.2A 191210 plbwebctls.js 10.1A 190103 plbwebmob.js 10.0A 180402 Support jQuery Mobile plbwebtvcssinfo.html 9.9 161028 plbmobstart.html 10.0A 180402 Support jQuery Mobile plbwebstart.html 10.0A 180402 plbwebstart99a.html 9.9A 170428 ------------------------------------------------------------------------------- PLBWEBSRV (Linux\Unix) - The 'PLBWEB_REST_USE_ENVnn=ON' keyword is NOT supported for a Linux PWS server. The Linux PWS server only executes in a behavior the same as if this keyword is OFF. - Corrected a problem where the CGI based PHP operations did not work properly under Linux. ------------------------------------------------------------------------------- PLBWEBSRV - Modified the PL/B Web Server runtime to support a new keyword named 'PLBWEB_USEINI_DEFAULT={on|off}'. When this keyword is set to 'on', the PWS server allows the following keywords specified by the client URL 'runopt=-i{nameini}' to take affect. However, if the PLBWEB_USEINI_DEFAULT keyword is set to 'off' or not used, the following keywords MUST be specified in the 'plbwebsrv.ini' configuration file to take affect. Otherwise, an appropriate I86 error can occur. PLB_SCHEMA PLB_SQLIO_INIT PLB_SQLSCHEMADB PLB_SQLTABLEDB PLB_OPENUSESQL PLB_PREPUSESQL PLB_SQLIO_DEBUG_LOG PLB_SQLIO_HOST PLB_SQLIO_USER PLB_SQLIO_PASS PLB_SQLIO_CONN PLB_SQLIO_EXT PLB_SQLIO_FLAGS PLB_SQLIO_SCOPEID PLB_SQLIO_SQLTYPE PLB_SQLIO_DRIVER Note: If the PLB_SQLIO_xxx keyword(s) are set both in the client URL {nameini} file and in the 'plbwebsrv.ini' configuration, the {nameini} keyword(s) settings are used by the PWS server. - FTP Server support has been added to the PL/B Web Server. The FTP Server implementation can be configured to expand the capabilities of the PL/B Web Server while providing secured FTP access. The FTP server is implemented as per the RFC 959 and 1123 FTP specifications and supports the full set of commands as identified by the specification. See the Documentation section for more details. Note: 1. Only 32 bit file size maximum is support. 2. When configuring the PWS FTP Server, both the PLBFTP_ADDRESS and PLBFTP_ROOT keywords MUST be set in the 'plbwebsrv.ini' configuration file. Otherwise, the PWS FTP Server DOES NOT start when the PWS server is started. 3. To activate the FTP Server, there are PWS keywords that can be added to the 'plbwebsrv.ini' configuration file as follows: PLBFTP_ADDRESS={ip | url[:portnum]} PLBFTP_ROOT={OsPath} PLBFTP_SESSION_MAX={threads} PLBFTP_PASV_PORT={baseport} PLBFTP_LOG_FTP={mode} PLBFTP_SRVRECVTIMEOUT={min} PLBFTP_IDLE_TIMEOUT={min} PLBFTP_LINGER={sec} PLBFTP_SSL_ONLY={parameter} PLBFTP_SSL_IMPLICIT={parameter} PLBFTP_ALLOW_ANON={parameter} PLBFTP_USER_{username}={password},{permissions}[,{path}] PLBFTP_SSL_1_1_USED={ on | off } PLBFTP_SSL_CERTFILE={certfile} PLBFTP_SSL_KEYFILE={keyfile} PLBFTP_SSL_SELFSIGNED= PLBFTP_SSL_PROTOCOL={ 0 | 1 | 2 | 3 } PLBFTP_SSL_SETCIPHER={cipher} PLBFTP_SSL_CHAINCERT={ on | off } PLBFTP_SSL_BLACKLIST_FILE=={ [path] + filename } 4. The PWS FTP Server supports the following FTP commands: FTP Commands ABOR Aborts a file transfer currently in progress. ACCT account-info This command is used to send account information on systems that require it. ALLO size [R max-record-size] Allocates sufficient storage space to receive a file. APPE remote-filename Append data to the end of a file on the remote host. AUTH security Initialize a secure connection using TLS. CWD remote-directory Makes the given directory be the current directory on the remote host. DELE remote-filename Deletes the given file on the remote host. FEAT Returns the extended features. HELP [command] Returns general help for the FTP server. LIST [remote-filespec] If remote-filespec refers to a file, sends information about that file. If remote-filespec refers to a directory, sends information about each file in that directory. MDTM remote-filename Returns the last-modified time of the given file on the remote host in the format YYYYMMDDhhmmss. MKD remote-directory XMKD remote-directory Creates the named directory on the remote host. MODE mode-character Sets the transfer mode - Only [S]tream is supported. NLST [remote-directory] Returns a list of filenames in the given directory. NOOP Does nothing except return a response. PASS password Send a password. PASV Tells the server to enter passive mode. PBSZ size Sets the maximum size, in bytes, of the encoded data blocks to be sent or received during a file transfer. PORT a1,a2,a3,a4,p1,p2 Specifies the host and port to which the server should connect for the next file transfer. PROT protection-level Sets the level of protection used on the data channel. PWD XPWD Returns the name of the current directory on the remote host. QUIT Terminates the command connection. REST position Sets the point at which a file transfer should start. RETR remote-filename Begins transmission of a file from the remote host. RMD remote-directory XRMD remote-directory Deletes the named directory on the remote host. RNFR from-filename Use this command to specify the file to be renamed before a RNTO command. RNTO to-filename After a RNFR command send this command to specify the new name for the file. SITE site-specific-command Executes a site-specific command. TIME is the only supported command for the PWS FTP Server. SIZE remote-filename Returns the size of the remote file as a decimal number. STAT [remote-filespec] If invoked without parameters, returns general status information about the FTP server process. STOR remote-filename Begins transmission of a file to the remote site. STOU Begins transmission of a file to the remote site; the remote filename will be unique in the current directory. STRU structure-character Sets the file structure for transfer. Only [F]ile is supported by the PWS FTP Server. SYST Returns a word identifying the system. PWS FTP Server always returns: UNIX Type: L8 TYPE type-character [second-type-character] Sets the type of file to be transferred. USER username Send this command to begin the login process. - Corrected a problem where a 'SETPROP FORM, ENABLED=1' or a 'SETPROP PANEL, ENABLED=1' could prematurely stop processing child PWS objects on the FORM/PANEL. This could cause some objects on the FORM/PANEL to remain disabled unexpectedly. - The PWS LISTVIEW 'SetColumnOrder' is implemented to change the order to be used when displaying the listview columns. This change corrects a problem where this PWS method was not working as expected. For this method change, the PWS LISTVIEW works the same as the Windows Plbwin runtime. - Corrected a problem where the PHP return status other than 200 or 404 did not work. - Corrected a problem where PHP was not allowing POST. - Corrected a problem where the PWS default web page path could be formatted incorrectly. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLB(UNIX) - Corrected a problem where the compiler was encountering unexpected errors for MENUITEM objects that existed in a '.xplf' file that was being used in the compilation. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLBWEBSRV (Windows) - Modified SETFILE to support a XMLFORMAT bit mask value that allows XFILE output to use the ISO8859 mode when writing XML data. The XMLFORMAT bit mask value is described as follows: XMLOUTFMTWRTISO8859 0x200 - Use ISO8859 when outputting to XML data. - Modified the HTTP instruction to support TLSv1, TLSv11, and TLSv12 SSL protocols. Also, a change was made to allow OPENSSL command defaults to be supported. These changes are invoked by setting bit mask values in the *FLAGS keyword for the HTTP instruction. TLS stands for 'Transport Layer Security'. $HTTP_FLAG_TLSV1 0x400 Use the SSL TLSv1.0 protocol which is an upgraded version of SSLv3. $HTTP_FLAG_TLSV11 0x0800 Use the SSL TLSv1.1 protocol. $HTTP_FLAG_TLSV12 0x1000 Use the SSL TLSv1.2 protocol. $HTTP_FLAG_USESSLDEFS 0x2000 Use SSL defaults as determined from the OPENSSL command. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX), PLBWEBSRV - Modified the PL/B runtimes to output the program name when the U10 error occurs. See the new keyword named 'PLB_U10_PROGNAME' in the Documentation section for more details. - The FTP object 'connect' method has been modified to support an implicit SSL socket connection. With this change, the 'connect' method can be set to use an implicit SSL connection using the flags bit value of 0x04. Also, this flags bit value of 004 can be used with the flags bit value of 0x02 to invoke SSL reuse to maximize the security and performance. As currently implemented, the FTP 'connect' method allows either an explicit SSL or an implicit SSL connection described as follows: Explicit SSL The FTP client connects to the traditionally insecure port of 21 and then the client has to specifically request/switch to a SSL secure connection. Implicit SSL The FTP client automatically connects to a dedicated implicit FTPS port using the SSL/TLS secured connection. ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Modified the Windows runtimes to show the MAINWINDOW when a KEYIN instruction is executed. This change is being made to prevent unexpected runtime hanging scenarios where the runtime could hang indefinitely waiting on user input with the MAINWINDOW not showing. - Modified the EDITTEXT object to insure that the last character sent to the Edit control is returned by a GETPROP PASSWORDCHAR operation. This change insures that any PASSWORDCHAR character value being set in the DESIGNER will be saved to a PLF form as entered by the end-user. This change is being made to minimize the impact caused by unexpected Windows behavior when an 8-bit character value ( 128 to 255 ) is being used. - Modified the S10 spool error to provide subcode values and extended data to help identify possible causes for a spooling error. S10 subcode values were added as follows: S10 Subcode Description 301 Print dialog failed to create printer device context. 302 Unable to lock a printer device context. 303 Failed to get port for printer device context. - Corrected a SPLOPEN {printername},"r" instruction would give a S10 error when a printer device was using a XPS print driver. With this change, the XPS print driver is now detected when using the raw pass through mode "r". - Corrected a FORMLOAD error that would occur when loading a '.xplf' file that contain a HTMLCONTROL object which used a 'JQueryEvent' event. - Corrected a HTMLCONTROL object issue where the a DELETE key action in a Web editor application did not work as expected. - Corrected a problem when compiling a PL/B program using a '.xplf' PLFORM. This problem was occurring because XPLF MENUITEM objects were being placed into the user code unexpectedly while compiling. ------------------------------------------------------------------------------- PLB(LINUX) - Corrected a problem where the 'makedef' utility was attempting to use an out dated OS directory to generate a new screen definition file using the OS TERM keyword. Before this fix was made, the 'madedef' as unexpectedly terminating with a directory not found error. - Corrected a problem where the macOS terminal information is located in a sub-directory that is different from other mainstream Linux OS systems. With this change, the macOS 'makedef' utility finds and uses the correct OS directories when generating a PL/B screen definition file from the OS TERM keyword. ------------------------------------------------------------------------------- PLBCMP - Modified the compiler default behavior to open source files in EXCLUSIVE mode first and if the EXCLUSIVE open fails, then give a warning and open the source in READ only. If the ZT compiler is used, then ONLY open the source file in READ mode. - Modified to give addition information for an 'Internal Compiler Error.' - Modified and corrected issues generating the WS compiler option Meta Data ( .plbm ) for the Sundebug and SunIDE operations. - Modified to support a new MODULE object to be used for future operations for PL/B programs and load modules. - Added a new compiler option named 'WF=nn' which can be used to invoke compiler embedded comment warnings as follows: WF=0 This option causes the compiler to invoke the normal/default behaviors when processing embedded comments which can exist at the end of PL/B instructions. The normal compiler behavior is to ignore any text at the end of a PL/B instruction that is separated by a blank character from the normal expected instruction syntax. WF=1 This option causes the compiler to give a warning for embedded comments that exist at the end of a PL/B instruction as follows: 1) The compiler only checks embedded comments in LFUNCTION and FUNCTION instructions. 2) The compiler gives a warning if the embedded comments do not have a leading comment delimiter character of '//', ';', '.', or '+'. WF=2 This option causes the compiler to give a warning for embedded comments that exist at the end of a PL/B instruction as follows: 1) The compiler checks embedded comments in PL/B instructions for all program source being compiler. 2) The compiler gives a warning if the embedded comments do not have a leading comment delimiter character of '//', ';', '.', or '+'. WF=3 This option causes the compiler to give a warning for embedded comments that exist at the end of a PL/B instruction as follows: 1) The compiler checks embedded comments in PL/B instructions for all program source being compiler. 2) The compiler gives a warning if the embedded comments do not have a leading comment delimiter character of '//'. ------------------------------------------------------------------------------- DBGIFACE - Corrected SaveWatch and RestoreWatch after change from MDI. ------------------------------------------------------------------------------- SUNDEBUG - The enhanced PL/B 'Sundebug' debugger is released in 10.4. This debugger provides an improved debugging experience where it can be integrated seamlessly with the Sunbelt IDE (sunide). Sundebug is a GUI debugger that has been developed and implemented using new PL/B internal routines, interfaces, and program meta data. This GUI debugger has been developed to execute as a standalone PL/B program or it can be invoked and executed as an integrated debugger by the Sunbelt IDE. Sundebug gives fresh and enhanced debugging operations to provide the highest level of debugging for PL/B developers. Note: 1. Both the Sundebug utility and the PL/B program being debugged must be executed using a 10.4 or newer runtime version. Also, the PL/B program to be debugged must be compiled by the 10.4 or newer compiler version using the compiler 'ws=' option. The 'ws' compiler option causes program Meta Data to be output to a '.plbm' file. The '.plbm' Meta Data is ONLY accessed and used by the Sundebug utility. Basic Operations: 1. Sundebug requires that a PL/B meta data file (program.plbm) must be generated by the 10.4 'plbcmp' compiler. When using the 10.4 SunIDE, a PL/B project can be setup and program compilations executed to provide the PL/B program meta data that is used when Sundebug is invoked. Again in the SunIDE, perform these actions to enable the Sundebug debugger by the IDE. 1a. Select the menu 'Tools\Options' item which brings up the IDE configuration dialog. 1b. Expand the 'Project' treeview selections and click on the 'Debug' selection. 1c. At this point, the 'Debug' selection view appears. In the Debugger radio button group, select either the 'Integrated' or the 'SunDebug' radio button, the Sundebug is now configured to be invoked for the IDE debugging after clicking 'Ok'. After the Sundebug configuration is setup, simply compile a program using SunIDE. Selection of the 'Debug' icon in the IDE toolbar to start a debugging session using Sundebug. 2. Because the Sundebug is a GUI program, it can ONLY be executed by either the PLBWIN or PLBNET runtimes. However, SunDebug can connect to any PL/B runtime including PLB (Unix), Plbserve runtimes, Plbwebsrv runtimes, Plbwin and Plbnet that is started with debugging enabled. For the Sunbelt utility, the following options are described for the PL/B runtimes (Plbwin and Plbnet), the Plbcmp compiler, and SunDebug. PL/B Runtimes Plbwin and Plbnet a. The PL/B runtime executing the user PL/B program does not use nor require access to the program meta data found in a file as 'programname.plbm'. The 'programname.plbm' file is ONLY loaded and used by Sundebug when debugging a PL/B program. The '.plbm' Meta Data file is created by compiling the PL/B program while using the 'WS=1' option. b. The PL/B runtimes the user PL/B programs are implemented to enable and execute in a debug mode by using runtime options described as follows. In this scenario, the runtimes must be started using one the following command line options: -dg This runtime option causes the PL/B program to be started where it immediately starts executing in a debug mode. The PL/B program execution starts as is normally expected by the application. Since there is no ip address specified, the PL/B runtime uses the ip address of 127.0.0.1 as the default with a default port number of 52201. -dg [ipaddress[:port]] This runtime option invokes the debug behavior as described for '-dg' except the user specified ip address and optional port number are explicitly defined. -dw This runtime option causes the PL/B program to be loaded but the PL/B runtime waits before actively executing the program. After the Sundebug debugger connects to this PL/B runtime, the PL/B program starts executing in debug mode. Since there is no ip address specified, the PL/B runtime uses the ip address of 127.0.0.1 as the default with a default port number of 52201. -dw [ipaddress[:port]] This runtime option invokes the debug behavior as described for '-dw' except the user specified ip address and optional port number are explicitly defined. Sundebug GUI debugger a. Sundebug requires access to PL/B program meta data found ONLY in a file named 'programname.plbm'. In addition to the '.plbm' data, Sundebug must have access to the PL/B program source used to compile the program. The Sundebug debugger accesses the program source which is shown/viewed for an active debug session. b. Sundebug is a GUI debugger that can be started without specifying any options. If Sundebug is started without specifying any options, the 'File\Connect' menu item can be clicked to connect to a PL/B runtime executing a program in debug mode. In this case, Sundebug connects using the default 127.0.0.1 ip address and the default port number 52201. c. Sundebug supports command line options that are described as follows: Connect This option causes Sundebug to make a connection using the default 127.0.0.1 and port number 52201 to a PL/B runtime executing a PL/B program in debug mode. -dw This option is used by Sundebug to build a command line when the '-program' option is used. -dg This option is used by Sundebug to build a command line when the '-program' option is used. -ip=ipaddress[:port] This option is used by Sundebug to build a command line when the '-program' option is used. -program="{path}+{programname}" This option causes Sundebug to build a command line to start the execution of a PL/B runtime using the 'programname.plc' program. Also, the '-dg', '-dw', and 'ip=' options are used when building the program command line which is invoked using a PL/B BATCH instruction. d. Examples plbwin sundebug Sundebug starts executing. The user must establish a connection to a PL/B runtime executing a program in debug mode by using the 'File\Connect' menu item. The connection is made using the default of 127.0.0.1 and a port number of 52201. plbwin sundebug connect -program="c:\path\program.plc" Sundebug starts executing such that a PL/B program is started first. Then Sundebug connects directly to the program using the default of 127.0.0.1 and a port number of 52201. In this case, the PL/B program is started using this command line built by Sundebug: "plbwin -dg c:\path\program.plc" plbwin sundebug -dw -program="c:\path\program.plc" Sundebug starts executing such that a PL/B program is started first using the '-dw' and program name. In this case, the runtime executing the 'program.plc' waits until the user executing Sundebug manually connects using the 'File\connect' menu selection. In this case, the PL/B program is started using this command line built by Sundebug: "plbwin -dw c:\path\program.plc" PL/B Compiler Plbcmp a. The 10.4 Plbcmp compiler must compile and build a PL/B program using the option of 'ws=1', 'ws:1', or 'ws#1'. The 'ws' option causes a PL/B meta data file named 'programname.plbm' to be generated. The '.plbm' meta data file is a library of data giving full reflection details about the 'programname.plc' program and its source modules. The reflection data provided in the '.plbm' file is used by Sundebug. b. Example of Plbcmp "plbwin plbcmp programname.pls -ws=1" The compiler output files are as follows: programname.plc programname.plbm ------------------------------------------------------------------------------- SUNINDEX and SUNSORT - Modified to give more information when a temporary file can not be created. ------------------------------------------------------------------------------- ADMEQU.INC - Reviewed for 10.4 release with no modifications. ------------------------------------------------------------------------------- PLBEQU.INC - Updated for the 10.4 release. ------------------------------------------------------------------------------- PLBMETH.INC - Updated for the 10.4 release. ------------------------------------------------------------------------------- SUNIDE.PLC - Modified how files are located for the peek function: First the currently open peek windows are checked. If a form file and the designer is loaded, a check is made to determine if the file is open in the designer. If it is, the source in the designer buffer is used. If a form file and the designer is not loaded or the file is not open, the code is retrieved from the form. If not a form file, the file is retrieved from an active editor buffer if any or simply opened and read into the buffer. - Moved the files used by the "Remember Open Files" logic from the IDE configuration file to the project file. Each project has its own set of remembered files. - Modified the CloseAll logic to also close any form in the Designer if running as a loadmod. - The "Remember Open Files" logic called during the IDE's initialization may be skipped by holding down the Shift key as the program starts. - The remembered files list stored in the project file now includes any open forms when the Designer is running as a loadmod. - The remembered file information contains the selected file in the IDE and the active form in the Designer, the cursor position in the code editors, and any bookmarks. - Corrected actions of clicking the Cancel key in the options window. All dialog objects are now reset correctly. - Corrected issues with managing user defined tools. - Corrected new debugger initialization for source files beginning with a function. - Corrected tracking of active module when using the integrated debugger. - Added icons to the main and peek tabcontrol to indicate the selected tab. The main tabcontrol also indicates modified files with a red icon. - Added smart sizing of project source and debug module map items. - Added icon for files with undefined extensions. - No longer attempts to execute, build, debug, or profile files with undefined extensions. - Added Peek Right logic. - Corrected Follow Tab logic when using the Legacy source map style - Excludes duplicates when archiving programs and projects. - Modified the files tabcontrol to use the Flat Buttons style. - New labels lookup behavior that allows goto label, find in files, or peek functions. - Corrected issues with the selected file following the active tab. - Added a go to program address function. - The project source map now shows only file names by default in all three map styles. An option enables inclusion of the file path. - Resizing the project window when file paths are shown will now compress the path to fit the window without a scrollbar. - The full names of inclusion files and forms is retrieved from the metadata file. Any files included in directories not in the PLB_PATH are now available. Previously, the IDE depended on the PLB_PATH for access to the files. ------------------------------------------------------------------------------- DESIGNER.PLC - Now sets the dirty flag after clicking OK in the Code Property Editor. - The GoTo function called by the editor now uses the IDE's GoTo logic if running as a loadmod. This allows the Designer to move the user's focus to either a source file in the IDE or a code window in a form. - Added a peek function if running as an IDE loadmod. Files are found for the peek window by searching the current peek windows first, next the designer code buffers are searched, followed by a check of files open in SunIDE if running as a loadmod, and finally retrieved from disk. - If not running as a loadmod, only the current code buffer is searched as no metadata is available. - Modified to allow the IDE's request for current open form information to be returned for storage in the project file. The open file information is used when the "Remember Open Files" IDE behavior option is set. - The CloseAll routine may now be called by the IDE when performing it's CloseAll function. - Added the show single or multiple event code toolbar buttons to the integrated layout code windows. ------------------------------------------------------------------------------- EDITOR.PLC - Corrected shortcut menu issues. - Added Find to the peek window shortcut menu. - Made the default starting line number one rather than zero. - Updates the status bar when GOTOLINE is called. - Modified Help functions to better find topics. ------------------------------------------------------------------------------- PROFILER.PLC - No changes ------------------------------------------------------------------------------- SCHEMAEDITOR.PLC - No changes ------------------------------------------------------------------------------- WATCH.PLC - No changes ------------------------------------------------------------------------------- DBEXPLORER.PLC - Corrected flat file import to exclude columns not selected. -------------------------------------------------------------------------------