Date: 04-23-2021 Subject: RELEASE 10.3A Runtime Files These RELEASE notes pertain to the following programs or files: EMBEDINI 10.3A 23 Apr 2021 10.3.1.500 EMBEDINI64 10.3A 23 Apr 2021 10.3.1.500 HEXDUMP 10.3A 23 Apr 2021 10.3.1.500 HEXDUMP64 10.3A 23 Apr 2021 10.3.1.500 MAKECLI 10.3A 23 Apr 2021 10.3.1.500 MAKECON 10.3A 23 Apr 2021 10.3.1.500 MAKECONET 10.3A 23 Apr 2021 10.3.1.500 MAKEDEF 10.3A 23 Apr 2021 10.3.1.500 MAKEMFD 10.3A 23 Apr 2021 10.3.1.500 OBJMATCH 10.3A 23 Apr 2021 10.3.1.500 OBJMATCH64 10.3A 23 Apr 2021 10.3.1.500 ODBCINST64 10.3A 23 Apr 2021 10.3.1.500 PLBCGI 10.3A 23 Apr 2021 10.3.1.500 PLBCLICON 10.3A 23 Apr 2021 10.3.1.500 (ComCtl 6) PLBCLIENT 10.3A 23 Apr 2021 10.3.1.500 (ComCtl 6) PLBCLINET 10.3A 23 Apr 2021 10.3.1.500 (ComCtl 6) PLBCON 10.3A 23 Apr 2021 10.3.1.500 (ComCtl 6) PLBCONET 10.3A 23 Apr 2021 10.3.1.500 (ComCtl 6) PLBNET 10.3A 23 Apr 2021 10.3.1.500 (ComCtl 6) PLBSERVE 10.3A 23 Apr 2021 10.3.1.500 (Processed Server) PLBSERVET 10.3A 23 Apr 2021 10.3.1.500 (Threaded Server) PLBWEBSRV 10.3A 23 Apr 2021 10.3.1.500 (Processed Server) PLBWEBSRVT 10.3A 23 Apr 2021 10.3.1.500 (Threaded Server) PLBWIN 10.3A 23 Apr 2021 10.3.1.500 (ComCtl 6) SUNAAMDX 10.3A 23 Apr 2021 10.3.1.500 SUNAAMDX64 10.3A 23 Apr 2021 10.3.1.500 SETGUID 10.3A 23 Apr 2021 10.3.1.500 SUNINDEX 10.3A 23 Apr 2021 10.3.1.500 SUNINDEX64 10.3A 23 Apr 2021 10.3.1.500 SUNLS 10.3A 23 Apr 2021 10.3.1.500 SUNMOD 10.3A 23 Apr 2021 10.3.1.500 SUNMOD64 10.3A 23 Apr 2021 10.3.1.500 SUNSORT 10.3A 23 Apr 2021 10.3.1.500 SUNSORT64 10.3A 23 Apr 2021 10.3.1.500 WININST 10.3A 23 Apr 2021 10.3.1.500 PLBNETSUP.DLL 10.3A 23 Apr 2021 10.3.1.500 Required for PLBNET PLBWSEC.DLL 10.3A 23 Apr 2021 10.3.1.500 Req'd PLBWIN/PLBNET ODSBAC32.DLL 10.3A 23 Apr 2021 ODSBAC64.DLL 10.3A 23 Apr 2021 SA_DLL32.DLL 10.3A 23 Apr 2021 10.3.1.500 SUNWADO.DLL 10.3A 23 Apr 2021 10.3.1.500 SUNWADO25.DLL 10.3A 23 Apr 2021 10.3.1.500 SUNWADO28.DLL 10.3A 23 Apr 2021 10.3.1.500 SUNWMSQL.DLL 10.3A 23 Apr 2021 10.3.1.500 SUNWODBC.DLL 10.3A 23 Apr 2021 10.3.1.500 SUNWSRV.DLL 10.3A 23 Apr 2021 10.3.1.500 SUNWSRV64.DLL 10.3A 23 Apr 2021 10.3.1.500 Required for Sundm64 PLBCLI.ZIP 10.3A 23 Apr 2021 10.3.1.600 (ComCtl 6) PLBRUN.ZIP 10.3A 23 Apr 2021 10.3.1.600 (ComCtl 6) DBGIFACE 10.3A 23 Apr 2021 PLBCMP 10.3A 23 Apr 2021 PLBDBUG 10.3A 23 Apr 2021 ADMEQU.INC 10.3A 23 Apr 2021 PLBEQU.INC 10.3A 23 Apr 2021 PLBMETH.INC 10.3A 23 Apr 2021 *============================================================================== Notes for DOCUMENTATION: - In the PL/B Language Reference manual under the section 'SetUTF8Convert Method (CLIENT)', change the Note (1.) to remove extra 'application' word in the second sentence. - In the PL/B RUNTIME Reference manual under the section 'PLBCMP Command LINE Syntax', add the description(s) for {plbm} output as follows: Add {plbm} to command line syntax: [{path}]plbcon [{dir}]plbcmp.plc {pls}[,{plc}[,{lst}][,{wrk}] [,{plbm}]] [-{opt}] (OR) [{path}]plbwin [{dir}]plbcmp.plc {pls}[,{plc}[,{lst}][,{wrk}] [,{plbm}]] [-{opt}] (OR) plbcmp {pls}[,{plc}[,{lst}][,{wrk}][,{plbm}]] [-{opt}] Add 'plbm' description as follows: plbm The optional directory where the compiler outputs a plbm file. Example(s): plbcon plbcmp, program.pls -slp""ws=1 In this example, the 'program.pls' is compiled and a '.plbm' meta data file is created in the same directory location where the 'program.plc' is located. plbcon plbcmp, program.pls,,,,c:\temp\myplbm -slp""ws=1 In this example, the 'program.pls' is compiled and a '.plbm' meta data file is created in the 'c:\temp\myplbm' directory. - In the PL/B RUNTIME Reference, change the 'PLBCMP Keywords' section to support a new keyword named 'PLBCMP_PLBM={path}' as follows: Add the PLBCMP_PLBM keyword link as: PLBCMP_PLBM Defines the directory location/path where the '.plbm' meta files are output to. Add a new 'PLBCMP_PLBM Keyword' section as follows: PLBCMP_PLBM Keyword PLBCMP_PLBM={path} This keyword defines the default output path for the compiler '.plbm' meta data files. Alternatively, the user can specify the plbm PATH on the compiler 'command line'. - In the Sunbelt PL/B Language Reference manual, change the 'MAILSEND' instruction descriptions as follows: Change the Note (4.) descriptions as follows: Change MAIL_FLAG_OPENSSL and MAIL_FLAG_STARTTLS references to be $MAIL_FLAG_OPENSSL and $MAIL_FLAG_STARTTLS. Add the 0x200 ( $MAIL_FLAG_USESUNSSL ) bit mask description as follows: Value Description 0x200 $MAIL_FLAG_USESUNSSL ( Windows PL/B runtimes ONLY ) Setting the $MAIL_FLAG_USESUNSSL value causes the MAILSEND instruction to first attempt to load the Sunbelt SSL DLLs if they exist in the 'openssl' sub-directory located in the directory specified by the PLB_SYSTEM keyword found in the PL/B RUNTIME INI file. Example: PLB_SYSTEM=c:\Sunbelt\plbwin.103A\code The Sunbelt provided SSL DLLs ( ssleay32.dll and libeay32.dll ) must exist in the following directory to be used. c:\Sunbelt\plbwin.103A\code\openssl - In the Sunbelt PL/B Language Reference manual, change the 'HTTP' instruction description(s) as follows: Add the 0x200 bit mask description to the Note (3.) *Flags keyword descriptions as follows: Value Description 0x200 $HTTP_FLAG_USESUNSSL ( Windows PL/B runtimes ONLY ) Setting the $HTTP_FLAG_USESUNSSL bit mask value causes the HTTP instruction to first attempt to load the Sunbelt SSL DLLs if they exist in the 'openssl' sub-directory located in the directory specified by the PLB_SYSTEM keyword found in the PL/B RUNTIME INI file. Example: PLB_SYSTEM=c:\Sunbelt\plbwin.103A\code The Sunbelt provided SSL DLLs ( ssleay32.dll and libeay32.dll ) must exist in the following directory to be used. c:\Sunbelt\plbwin.103A\code\openssl - In the Sunbelt PL/B Language Reference manual, add the 'WS=2' command LINE option to the 'PLBCMP Command Line Syntax' section as follows: WS=2 Generate program meta data which is stored in the 'program.plc' output file. The PLBM data is appended to the END of the actual PLC program which can be used by the SunIDE to enhance the development of PL/B programs. - In the Sunbelt PL/B Language Reference manual, add the following new TREEVIEW methods: SetFileOptions Method (TREEVIEW) *------------------------------------------------------------------ The SetFileOptions method is used to enable or disable drag/drop operations for the TREEVIEW where file names are dragged FROM a Windows File Explorer and dropped on the PL/B TREEVIEW. If drag/drop is enabled and a drag action occurs, the TREEVIEW 'DragDrop' event occurs. This method uses the following format: [label] {OBJECT}.SetFileOptions [GIVING {return}]: USING [[*Filter=]{labels}][: [*Flags=]{flags}] Where: LABEL Optional. A Program Execution Label. OBJECT Required. A TREEVIEW object that has been previously created. RETURN Optional. A Numeric Variable that always returns a ZERO value. FILTER Optional. A Character String Variable or literal that contains one or more file extensions that are separated by a comma delimiter. The FILTER string is used to restrict END-user file selections. flags Optional. A Numeric Variable or decimal number that specifies a value that controls the behaviors of this method. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is always set because the return value is always ZERO. 2. The EOS and OVER flags are always cleared. 3. The {filter} string is optional and contains one or more file extensions that can be dragged to the TREEVIEW object. When this string is specified, only files with the filter extensions are accepted as dropped files onto the TREEVIEW. If the {filter} string is not specified, then all dragged files are accepted as dropped files onto the TREEVIEW. 4. The {flags} value identifies the action to be performed by the SetFileOptions method as follows: Value Description 0 Default behavior which enables the file drag drop mode of operation to allow one file to be dragged onto the TREEVIEW. This is the default behavior when the {flags} value is not specified. 1 This {flags} value enables the file drag drop mode of operation to allow multiple files to be selected and dragged to the TREEVIEW. 2 This {flags} value disables the file drag/drop mode of operation to the TREEVIEW. 4 This {flags} value frees the object allocations used for drag drop file operations. GetFileCount Method (TREEVIEW) *------------------------------------------------------------------ The GetFileCount method is used to RETURN the number of file names selected by an END-user and dragged to the TREEVIEW object. This method uses the following format: [label] {OBJECT}.GetFileCount [GIVING {return}] Where: LABEL Optional. A Program Execution Label. OBJECT Required. A TREEVIEW object that has been previously created. RETURN Optional. A Numeric Variable that returns the number of file names selected by the END-user file drag/drop operation to the TREEVIEW. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set TRUE if the return file count value is ZERO. If the return file count is non-ZERO, the ZERO flag is set to FALSE. 2. The OVER flag is set TRUE if the {return} Numeric Variable is to small to retrieve the file count without truncation. 3. The EOS flag is set to be FALSE. GetFileItem Method (TREEVIEW) *------------------------------------------------------------------ The GetFileItem method is used to retrieve the file name(s) that were selected and dragged onto the TREEVIEW file by an END-user. This method uses the following format: [label] {OBJECT}.GetFileItem [GIVING {return}]: USING [*Index=]{index}: [*Flags=]{flags} Where: LABEL Optional. A Program Execution Label. OBJECT Required. A TREEVIEW object that has been previously created. RETURN Optional. A Character String Variable that returns the file information for files dragged and dropped onto the TREEVIEW. INDEX Required. A Numeric Variable or decimal number that is a ZERO-based index into an array of file selection of files that have been dragged and dropped onto the TREEVIEW. flags Optional. A Numeric Variable or decimal number whose value identifies the type of data being retrieved for a given file selection. Flags Affected: EOS, OVER, ZERO Note the following: 1. The {index} value specifies which file name is to be returned FROM the last TREEVIEW file drag/drop operation. If the {index} value is larger than the number of file names available, the {return} string is NULL. 2. If {return} is too small to contain a file name string, the EOS Condition Flag is set (TRUE). 3. The OVER and ZERO Condition Flags are always cleared (FALSE). 4. The {flags} is a bit mask value that identifies the type of data being returned for a file. If more than one data type is specified by the {flags} bit mask value, the '|' character is used as a delimiter between the returned data components. The {flags} bit mask values are described as follows: Bit Value Description 0x01 This bit specifies that the PATH and file name is to be returned. The path identifies the directory where the file was dragged FROM. 0x02 This bit specifies that the file type is to be returned. The file type is an extension string. 0x04 This bit value normally specifies the filesize of the file selection. For Windows PL/B runtimes this value is always returned as ZERO for the filesize. - In the PL/B Language Reference manual, change the 'CLOCK' instruction descriptions IN Note (6.) as follows: TIME Change the 'hh:mm:ss.xxxxxx' to be 'hh:mm:ss.pppppp' TIMESTAMP Change the 'yyyymmddhhmmsssss' to be 'yyyymmddhhmmsspppppp' - In the PL/B Language Reference manual, change the 'SaveJson Method (XDATA)' and 'SaveXml Method (XDATA)' descriptions for the 'filename' parameter as follows: Change SaveXml Method 'filename' description: FROM: "A Character String Variable or literal that that specifies the PATH and file name used to write the XML data stream.stream." TO: "A Character String Variable or literal that specifies the PATH and file name used to write the XML data stream." Change SaveJson Method 'filename' description: FROM: "A Character String Variable or literal that that specifies the PATH and file name used to write the JSON data stream.stream." TO: "A Character String Variable or literal that specifies the PATH and file name used to write the JSON data stream." - In the PL/B Language Reference manual, change the COPYFILE instruction for Note (14.) to read as follows: Note 14. The OVER flag is set when the block count that is stored into the {retcount} value is too large for the variable defined. - In the PL/B Language Reference manual under the 'BrowseForFolder Method (WINDOW)' method, add a new PATH parameter as follows: [label] {OBJECT}.BrowseForFolder [GIVING {return}] USING [*Instructions=]{instr}[: [*CsidlValue=]{csidlvalue}][: [*BifValue=]{bifvalue}][: [*Path=]{path}] Where: csidlvalue Change this parameter to be 'Optional.'. bifvalue Change this parameter to be 'Optional.'. PATH Optional. A Character String Variable or literal that contains a valid Windows OS PATH this is used to set/initialize the directory for the browse dialog. - In the PL/B Language Reference manual, modify the Expressions section to INCLUDE the descriptions for the NOCASE and LIKE operators. Expression Meaning LIKE The LIKE operator performs a pattern matching string comparison of Operand1 against the Operand2 pattern. The Operand2 string can contain the following pattern characters: '_' Underscore character matches any one character. '%' Percent character matches ZERO or more characters. '\' Backslash character is the forcing character that forces the comparison of the next character regardless of the character value. NOCASE The NOCASE is a unary operator that eliminates the case sensitivity when comparing each character of the LEFT operand to the characters in the RIGHT operand up a string expression. The NOCASE operator is ignored for any numeric expression operations. Add the following examples for NOCASE: A INIT "abc" B INIT "aBc" D INIT "xyz" E INIT "XYZ" . IF ( A == B ) //Evaluates to be FALSE IF ( NOCASE A == B ) //Evaluates to be TRUE IF ( NOCASE( A == B ) ) //Evaluates to be TRUE IF ( NOCASE( ( A == B ) and ( D == E ) ) //Evaluates to // be TRUE Add the following examples for LIKE: A INIT "SunBelt" . IF ( A LIKE "SunBelt" ) //Evaluates to be TRUE IF ( A LIKE "SUNBELT" ) //Evaluates to be FALSE IF ( A LIKE "%BEL% ) //Evaluates to be FALSE IF ( NOCASE A LIKE "%BEL% ) //Evaluates to be TRUE - In the PL/B RUNTIME Reference manual, change the 'O (OBJECT) Errors' description for the O110 error as follows: O110 Deactivation of nested ... order of activation. The ObjectID property value of the WINDOW object generating the ERROR is specified as a SubCode value as shown: ERROR Sub Code: nnnnnn The ObjectID property value of the current active WINDOW object is specified in the extended data as shown: Extended Data: ObjectId: mmmmm - In the PL/B Language Reference manual, change the EVENTINFO instruction Note (3.) table values for KEYSTATE to be as follows: 0x1 ALT key depressed VK_MENU 0x2 CTRL key depressed VK_CONTROL 0x4 SHIFT key depressed VK_SHIFT 0x8 Caps key is locked VK_CAPITOL 0x10 Num lock key is locked VK_NUMLOCK 0x20 Scroll lock key is locked VK_SCROLL - In the PL/B Language Reference manual, change the 'READ (XFILE)' instruction note (3.) to include the following: See the 'XML Record Filter Support' section for a description of the record filter string syntax that can be used in the READ XFILE {key}. Example: XFile XFILE Key INIT "NAME='Bill'" dName DIM 25 dAddress DIM 50 ... READ XFile, Key; NAME=dName: ADDRESS=dAddress - In the PL/B Language Reference manual using 'Search', change the item under the 'Select topic:' list as follows when searching for 'record filter string': 'XML Record Filter Support' change to 'XML Record Filter Support' - In the PL/B Language Reference manual under the 'LISTVIEW' object, add a Note (15.) as follows: 15. When using LISTVIEW methods that use the Column names for XML output, the Column names MUST conform to XML Basic requirements. See the 'XML Basic' description for more details. This is the basic description where LISTVIEW Columns are output as XML tag names: " Tag names are case-sensitive and must start with letters, or an underscore. The rest of the tag name can contain letters, digits, hyphens, underscores, and periods." When the LISTVIEW Column names contain invalid characters for XML tag names, the $LV_XMLWR_OUTPUTASATTR option should be used where appropriate for the LISTVIEW methods being used. The LISTVIEW methods that this note applies to are as follows: GetXMLDataSize SaveXMLFile SaveXMLtoDim - In the PL/B Language Reference manual under the 'EXECUTE' and the BATCH instructions, modify the Note (1.) description as follows: 1. If {command} is a string variable, only the Logical String is used. Prior to runtime version 10.3A, the {command} string maximum length is 512 characters. Starting with version 10.3A, the {command} string maximum length is 4096 characters. - In the PL/B Language Reference manual, add the following descriptions for the new DATETIME object and its methods: ...................................................................... DATETIME The DATETIME object provides the PL/B language a means of loading, storing, and manipulating date/time values The following statement formats: (1) [label] DATETIME [%|^][arraysize] (2) [label] DATETIME ^, {target} Where: label Optional. A Program Execution Label. % Optional. Denotes the item as being GLOBAL. arraysize Optional. An integer decimal constant, CONST variable, or EQUATEd value indicating the number of array items. ^ Optional. Denotes the item as being a POINTER. target Required. The name of a previously defined data item of the same type when using syntax format (2). Flags Affected: NONE Note the following: 1. The DATETIME object is an object that can be used directly without having to be created. There are no properties, events, or instructions for a DATETIME object. All interaction with the DATETIME object is through methods. 2. The first method invoked on a DATETIME object causes it to be created with the current time and date. 3. Possible error codes returned by DATETIME methods are defined as follows: Error Code Value Comment DtErrorNone 0 DtErrorNotValid 1 - DATETIME object is not valid DtErrorParamNotValid 2 - DATETIME parameter object is not valid DtErrorYearNotValid 3 DtErrorBadTz 4 DtErrorBadHHMM 5 DtErrorBadSS 6 DtErrorBadYMD 7 DtErrorExtraChars 8 - Unknown characters at end of date string DtErrorUnknownFormat 9 - Unknown date format DtErrorInvalidMod 10 - Invalid modifier DtErrorInvalidModNum 11 DtErrorInvalidModType 12 DtErrorLocalTime 13 - Issue with localtime sc DtErrorInvalidJD 14 - Invalid Julian Date DtErrorFmtCharMismatch 15 - Character format mismatch DtErrorFmtyy 16 - Format error year DtErrorFmtmm 17 - Format error month DtErrorFmtdd 18 - Format error day DtErrorFmtHH 19 - Format error hours DtErrorFmtMM 20 - Format error minutes DtErrorFmtSS 21 - Format error seconds DtErrorFmtFS 22 - Format error factional seconds DtErrorFmtJD 23 - Format error invalid Julian date DtErrorFmtInvalidDate 24 - Format error invalid date DtErrorFmtP 25 ...................................................................... The Adjust method is used to change the time and date stored in the DATETIME object. This method uses the following format: [label] {object}.Adjust GIVING {return}: USING [*Value=]{value} Where: {label} is an optional Program Execution Label. {object} is a DATETIME object that has been previously Required declared. {return} is a Numeric Variable that returns an error value if this method fails. {value} is a Character String Variable or string literal Required that specifies what adjustments should be made to the time and date. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is set to TRUE with a return value of zero. When ZERO flag is cleared, a non-zero value indicates an error has occurred and the error values are found in the DATETIME object notes. 2. The OVER flag is set to TRUE if the {return} variable is too small to store that value without being truncated. 3. The EOS flag is always cleared. 4. Value is comma separated list time modifiers, that are applied from left to right. 5. The available modifiers are as follows. Modifier Explanation [+-]NNN years Number of years added/subtracted to the date [+-]NNN months Number of months added/subtracted to the date [+-]NNN days Number of days added/subtracted to the date [+-]NNN hours Number of hours added/subtracted to the date [+-]NNN minutes Number of minutes added/subtracted to the date [+-]NNN seconds Number of seconds added/subtracted to the date [+-]NNN.NNNN seconds Number of seconds (and fractional seconds) added/subtracted to the date start of year Shifting the date back to the start of the year start of month Shifting the date back to the start of the month start of day Shifting the date back to the start of the day weekday N Moves the date forward to the next date where weekday number is N (0=Sunday, 1=Monday, 2=Tuesday, 3=Wednesday, 4=Thursday, 5=Friday, 6=Saturday) unixepoch Used with the DDDDDDDDDD value given in a SetAsString method to interpret the date as UNIX Time (ie: number of seconds since 1970-01-01) localtime Adjusts date to local time, assuming the DATETIME was expressed in UTC utc Adjusts date to UTC, assuming the DATETIME was expressed in local time Example: dt.Adjust Using "localtime, start of month, weekday 2, 1 days, weekday 2" ...................................................................... The Compare method is used to compare the value of two DATETIME objects. This method uses the following format: [label] {object}.Compare GIVING {return}: USING [*DateTime=]{datetime} Where: {label} is an optional Program Execution Label. {object} is a DATETIME object that has been previously Required declared. {return} is a Numeric Variable that returns an error value if this method fails. {datetime} is a second DATETIME object for the comparison. Required Flags Affected: EOS, LESS, OVER, ZERO Note the following: 1. The ZERO flag is set to be TRUE if the DATETIME objects contain the exact same value. Otherwise, the ZERO flag is set to be FALSE. 2. The LESS flag is set to be TRUE the DATETIME object given as a parameter is less in value than the DATETIME object that the method is being invoked from. 3. The EOS flag is always cleared. 4. The OVER flag is set to TRUE if the {return} variable is too small to store that value without being truncated. ...................................................................... The GetAsString method is used to store the time/date value from DATETIME object into a string. This method uses the following format: [label] {object}.GetAsString GIVING {return}: USING [[*Format=]{format},] [[*LocalTime=]{localtime}] Where: {label} is an optional Program Execution Label. {object} is a DATETIME object that has been previously Required declared. {return} is a Character String Variable that returns the formatted date and time string. {format} is a Character String Variable or string Optional literal that specifies the format of the returned string {localtime} is a Numeric Variable or decimal number that Optional specifies if the DATETIME value should be set to local time or UTC. Flags Affected: EOS, OVER, ZERO Note the following: 1. The EOS flag is set to be TRUE if the {return} variable is too small and the data must be truncated. 2. The OVER and ZERO flags are always cleared. 3. The {format} string supports the following conversions: %d day of month %m month 01-12 %y year 00-99 %Y year 0000-9999 %f ** fractional seconds SS.SSS %H hour 00-24 %M minute 00-59 %s seconds since 1970-01-01 %S seconds 00-59 %P microseconds 000000-999999 %Z is UTC %j day of year 000-366 %J ** julian day number %w day of week 0-6 sunday==0 %W week of year 00-53 %% % 4. The default {format} string is the ISO-8601 standard given as "%Y-%m-%dT%H:%M:%f%Z" (YYYY-MM-DDTHH:mm:ss.sssZ) 5. If the {localtime} is set to 1, the DATETIME value is expressed as local time. If the {localtime} is set to 0, the DATETIME value is expressed as UTC. If the {localtime} is not given, the DATETIME value is expressed as it was stored. ...................................................................... The SetToDateTime method is used to move the value of one DATETIME object into another DATETIME object. This method uses the following format: [label] {object}.SetToDateTime GIVING {return}: USING [*DateTime=]{datetime} Where: {label} is an optional Program Execution Label. {object} is a DATETIME object that has been previously Required declared. {return} is a Numeric Variable that returns an error value if this method fails. {datetime} is a second DATETIME object used as the new Required value. Flags Affected: EOS, OVER, ZERO Note the following: 1. The value of the DATETIME object given as a parameter is moved to the invoking DATETIME object. 2. The ZERO flag is set to TRUE with a return value of zero. When ZERO flag is cleared, a non-zero value indicates an error has occurred and the error values are found in the DATETIME object notes. 3. The OVER flag is set to TRUE if the {return} variable is too small to store that value without being truncated. 4. The EOS flag is always cleared. ...................................................................... The SetToNow method is used to set the value of the DATETIME object. This method uses the following format: [label] {object}.SetToNow GIVING {return}: USING [[*LocalTime=]{localtime}] Where: {label} is an optional Program Execution Label. {object} is a DATETIME object that has been previously Required declared. {return} is a Numeric Variable that returns an error value if this method fails. {localtime} is a Numeric Variable or decimal number that Optional specifies if the DATETIME value should be set to local time or UTC. Flags Affected: EOS, OVER, ZERO Note the following: 1. The DATETIME object is set to the current time. 2. If the {localtime} is set to 1, the DATETIME value is set as local time. If the {localtime} is set to 0 the DATETIME value is set as UTC. If the {localtime} is not given, the DATETIME value is set as UTC. 3. The ZERO flag is set to TRUE with a return value of zero. When ZERO flag is cleared, a non-zero value indicates an error has occurred and the error values are found in the DATETIME object notes. 4. The OVER flag is set to TRUE if the {return} variable is too small to store that value without being truncated. 5. The EOS flag is always cleared. ...................................................................... The SetAsString method is used to load a time/date value into DATETIME object. This method uses the following format: [label] {object}.SetAsString GIVING {return}: USING [*VALUE]={value}[: [*Format=]{format}][: [*LocalTime=]{localtime}] Where: {label} is an optional Program Execution Label. {object} is a DATETIME object that has been previously Required declared. {return} is a Numeric Variable that returns an error value if this method fails. {value} is a Character String Variable or string Required literal that specifies the time and date values. {format} is a Character String Variable or string literal Optional that specifies the format of the returned string. {localtime} is a Numeric Variable or decimal number that Optional specifies if the DATETIME value should be set to local time or UTC. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the {format} string is not given the value can be given as YYYY-MM-DD HH:MM:SS.FFF, YYYY-MM-DD HH:MM:SS, YYYY-MM-DD HH:MM, YYYY-MM-DD, HH:MM:SS.FFF, HH:MM:SS, HH:MM, the keyword now, or a numeric value. If the number is based off of UNIX Time, then an Adjust method using the unixepoch adjustment must be performed after the SetAsString. 2. If the {format} string is given, the value string is processed using the provided format. The {format} string supports the following conversions: %d day of month %m month 01-12 %y year 00-99 > 60 make 1960 %Y year 0000-9999 %H hour 00-24 %M minute 00-59 %S seconds 00-59 %f ** fractional seconds SS.SSS %P microseconds 000000-999999 %Z is timezone %J ** julian day number %% % 3. If the {localtime} is set to 1, the DATETIME value is expressed as local time. If the {localtime} is set to 0, the DATETIME value is expressed as UTC. If the {localtime} is not given, the DATETIME value is expressed as it was stored. 4. The ZERO flag is set to TRUE with a return value of zero. When ZERO flag is cleared, a non-zero value indicates an error has occurred and the error values are found in the DATETIME object notes. 5. The OVER flag is set to TRUE if the {return} variable is too small to store that value without being truncated. 6. The EOS flag is always cleared. - In the PL/B Application Server manual, change the 'ADMIN_IPFILE Keyword' as follows: 1. Change the name 'SUNUSRIP' to be 'SUNADMIN'. 2. Change the following: ADMIN_IPFILE={value} Change to ADMIN_IPFILE={filename} 3. Change the {ipfile} in the second paragraph to be {filename}. - In the PL/B Application Server manual, change the 'PLBCS_IPFILE Keyword' as follows: 1. Change the following: PLBCS_IPFILE={ipfile} Change to PLBCS_IPFILE={filename} 2. In the description, change the {ipfile} to {filename}. - In the PL/B Web Server manual, add descriptions for two new configuration keywords described as follows: PLBWEB_ANONYMOUS={on|off} When this keyword is set to be ON, the PL/B Web Server behavior is changed as follows: 1. The PWS server does not put the server name in the HTTP header for responses from the server. 2. Also, the PWS server does not put any links in error pages. Example: PLBWEB_ANONYMOUS=ON PLBWEB_EXTRA_HDRS={string} This keyword is used to add one or more HTTP headers lines to every PWS server response. Multiple lines must be separated by the \n character sequence in the {string}. Example: The following example would provide extra security to a web server by denying placement of the output in an iframe and replacing the Server header with a private name. PLBWEB_EXTRA_HDRS=X-Frame-Options: DENY\nServer: Tester\n or PLBWEB_EXTRA_HDRS=X-Frame-Options: DENY\nServer: Tester These keyword examples add two extra HTTP header lines as follows: X-Frame-Options: DENY Server: Tester - In the PL/B Language Reference manual, add the following methods to the 'LISTVIEW Methods' section and method descriptions: *------------------------------------------------------------------ GetColumnWidths Method (LISTVIEW) The GetColumnWidths method retrieves the width of each column in a LISTVIEW object and returns all of the column widths as decimal numbers in a string separted by a ':' delimiter. The method uses the following format: [label] {object}.GetColumnWidths GIVING {return} Where: label Optional. A Program Execution Label. object Required. A LISTVIEW object that is accessed. return Optional. A Character String Variable that returns decimal values for the width of each column in a LISTVIEW. The decimal values are separated by a ':' delimiter. Flags Affected: EOS, OVER, ZERO Note the following: 1. Upon completion, {return} will contain a width for each column in pixels. 2. If {return} is too small to contain the text string, the EOS Condition Flag is set (TRUE). 3. The OVER and ZERO Condition Flags are always cleared (FALSE). *------------------------------------------------------------------ SetColumnWidths Method (LISTVIEW) The SetColumnWidths method sets the width of each column in a LISTVIEW object as determined from an input string that contains decimal values separated by a ':' delimiter. The method uses the following format: [label] {object}.SetColumnWidths GIVING {return} USING [*WIDTHS=]{widths} Where: label Optional. A Program Execution Label. object Required. A LISTVIEW object that is accessed. return Optional. A Numeric Variable that indicates the number of column width values processed. width Required. A Character String Variable that contains decimal values for the width of each column in a LISTVIEW. The decimal values are separated by a ':' delimiter. Flags Affected: EOS, OVER, ZERO Note the following: 1. The {width} decimal values are specified in pixels for the width for each column. 2. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 3. If {return} is too small to contain the return count, the OVER Condition Flag is set (TRUE). 4. The EOS Condition Flags are always cleared (FALSE). - In the PL/B Language Reference manual, add the following method to the 'TABCONTROL Methods' section and method descriptions: *------------------------------------------------------------------ SetupTabs Method (TABCONTROL) The SetupTabs method deletes and sets up all of the tabs for a TABCONTROL object. This method can be used to simplify the initialization of TABCONTROL tabs labels in a single operation. This method uses the following format: [label] {object}.SetupTabs [GIVING {return}]: USING [*LABELS=]{labels}[: [*Options=]{options} Where: label Optional. A Program Execution Label. object Required. A TABCONTROL object that has been previously created. return Optional. A Numeric Variable that always returns a zero value. labels Required. A Character String Variable or literal that contains one or more tab labels that are to be setup for the TABCONTROL. options Optional. A Numeric Variable or decimal number that specifies a bit mask value that controls the behaviors of this method. This parameter is implemented for future usage. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is always set because the return value is always zero. 2. The OVER flag is set to be FALSE. 3. The EOS flag is set to be FALSE. 4. The processing of the SetupTabs method is implemented as two operations as follows: 1) First, all of the current TABCONTROL tabs are deleted. 2) Second, all tab labels specified in the {labels} parameter are used to add tab(s) to the TABCONTROL object. 5. The {labels} string can be specified as a NULL string or it can contain one or more labels processed as follows: Label String Comment NULL All of the TABCONTROL tabs are only deleted. label1 After all of the tabs are deleted, then one tab is added. label1;label2;... After all of the tabs are deleted, then multiple tabs with labels are added. 6. The {options} value is a bit-mask value that is used for future usage. Examples: TC1 TABCONTROL TC2 TABCONTROL NULL DIM 1 ONETABS INIT "Main" TWOTABS INIT "&Documents;&Images" . TC1.SetupTabs USING ONETAB //One tab named 'Main' . TC2.SetupTabs USING TWOTABS //Two tabs named 'Document' // and 'Images' . - In the PL/B Language Reference manual, add the following methods to the 'RUNTIME Methods' section and method descriptions: *------------------------------------------------------------------ IntToString Method (RUNTIME) The IntToString method is used to convert an integer value into a decimal character format that is returned in a Character String Variable. This method uses the following format: [label] {object}.IntToString [GIVING {return}]: USING [*INTEGER=]{integer}[: [*FORMAT=]{format}] Where: label Optional. A Program Execution Label. object Required. A RUNTIME object that has been previously declared. return Optional. A Character String Variable that returns characters formatted as identified by the {format} type. integer Required. A Numeric Variable or decimal number that specifies the decimal value to be converted into a character string. options Optional. A Numeric Variable or decimal number that specifies a a value that identifies the character string format to be returned. Flags Affected: EOS, OVER, ZERO Note the following: 1. The EOS flag is set TRUE if the {return} Character String variable is too small to receive the directory data without being truncated. 2. The ZERO and OVER flags are always cleared. 3. The {format} values are described as follows: Value Description 0 The integer value is converted into decimal characters and returned in a 'ddddd' format. 1 The integer value is converted into hexadecimal characters and returned in a '0xXXXXXXXX' format. n < 0 The return string is NULL. n > 1 The return string is NULL. Examples: R RUNTIME Int1 INTEGER 4,"123456" . . S$CMDLIN returns a character string as "123456". . R.IntToString GIVING S$CMDLIN USING Int1 . . S$CMDLIN returns a character string as "0x0001E240" . R.IntToString GIVING S$CMDLIN USING *INTEGER=Int1: *FORMAT=1 *------------------------------------------------------------------ IntParse Method (RUNTIME) The IntParse method is used to parse an input character string and return an numeric value based on the format of the input characters. This method uses the following format: [label] {object}.IntParse [GIVING {return}]: USING [*NUMERICSTR=]{numstring}[: [*FORMAT=]{format}] 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 a numeric value as parsed from the input {numstring}. numstring Required. A Character String Variable or string literal that specifies character string to be parsed. This string is parsed for a format determined by the {format} parameter. format Optional. A Numeric Variable or decimal number that specifies a a value that identifies the character string format to be parsed. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the {return} value is zero, the ZERO flag is set to be TRUE. Otherwise, it is set to be FALSE. 2. The OVER flag is set to TRUE if the {return} variable is too small to receive the numeric result. 3. The EOS flag is always set to be FALSE. 4. The {format} values are described as follows: Value Description 0 If the {format} parameter is not specified, this is the default format value used. When the {format} is zero, this method parses the {numstring} as a hexadecimal characters ( 0 to F ) if the string starts with '0x'. Otherwise, this method parses the {numstring} as decimal characters ( 0 to 9 ). The parsing stops when the first invalid character as per the format is detected. 1 This format only parses the input {numstring} as hexdecimal string formatted as '0xXXXXXXXX'. Example: '0x12abc' n < 0 The return result is zero. n > 1 The return result is zero. Example: . I1 INTEGER 4 I2 INTEGER 4 I3 INTEGER 4 I4 INTEGER 4 R RUNTIME . Test1 INIT "123456" . Test2 INIT "0x1aB" . Test3 INIT "123x456" . Test4 INIT "0xABC" . R.IntParse GIVING I1 USING Test1 //Expect I1=123456 . R.IntParse GIVING I2 USING Test2 //Expect I2=427 . R.IntParse GIVING I3 USING Test3 //Expect I3=123 . R.IntParse GIVING I4 USING Test4, 1 //Expect I4=2740 . - In the PL/B Language Reference manual under the 'HttpRequest Method (RUNTIME)' section, change the 'return' description to remove the extra 'a' character. return Optional. A a Numeric ... change to Optional. A Numeric ... *============================================================================== The following files have been changed as noted: ------------------------------------------------------------------------------- PLBSERVE(WINDOWS) - Modified to prevent the installation/removal of the Plbserve Windows service using the '-i' or '-d' command line options when the Plbserve has a serial number or authorization error. - Corrected a problem where PLBCS_KEYFILE operations on the processed based Application Server did not work. ------------------------------------------------------------------------------- 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 (Windows) - Modified to prevent the installation/removal of the Plbwebsrv Windows service when the Plbwebsrv has a serial number or authorization error. ------------------------------------------------------------------------------- PLBWEBSRV - Added two new configuration keys words: PLBWEB_ANONYMOUS and PLBWEB_EXTRA_HDRS. See the Documentation section for more details. PLBWEB_ANONYMOUS={on|off} PLBWEB_EXTRA_HDRS={string} - Corrected a problem where a Modal dialog could hang indefinitely after a program uses EVENTCLEAR to remove all PL/B events before activating a Modal dialog. - Corrected a problem where the FTP 'connect' method would hang indefinitely. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLBWEBSRV (Windows) - Modified the MAILSEND and HTTP instructions to allow Sunbelt SSL DLLs to be loaded and used by default. This alternative behavior can be used by using the following bit mask values: MAILSEND OPTIONS keyword value: 0x200 $MAIL_FLAG_USESUNSSL ( Windows PL/B runtimes ONLY ) HTTP FLAGS keyword value: 0x200 $HTTP_FLAG_USESUNSSL ( Windows PL/B runtimes ONLY ) Note: See 'Notes for DOCUMENTATION:' descriptions for more details for these instruction behavior changes. - Modified the Sunbelt Installations for these runtimes to install a new subdirectory 'c:\Sunbelt\plbwin.103A\code\openssl' that includes the SSL DLLs to support MAILSEND and HTTP changes when using the $MAIL_FLAG_USESUNSSL and $HTTP_FLAG_USESUNSSL flag settings. - Modified the WINDOW object BrowseForFolder method to support a new parameter named 'PATH={svarlit}'. The PATH parameter can be used to set an initial directory for the Windows OS browse dialog. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX), PLBWEBSRV - Added new string expressions to support new NOCASE and LIKE operators. See the 'Notes for DOCUMENTATION' section for the details of these operators. - Modified the O110 ERROR to provide the ObjectID of the Modal WINDOW objects being used to cause the error. See the 'Notes for DOCUMENTATION' section for the details. - Added support for Boolean AND/OR, &/&&, and |/|| operators up numeric expressions. The Boolean operators can be used up a numeric expression for an array index, a MOVE instruction, or a CALC instruction. When a Boolean operator is used up a numeric expression as described, then the PL/B RUNTIME version of 10.3A or newer must be used to EXECUTE the PL/B program. Otherwise, older runtimes give a U12 error. - Modified EXECUTE/BATCH to support a command string of 4096 characters. - Added a DATETIME object type to the PL/B language as a means of loading, storing, and manipulating date/time values. The DATETIME object is described as follows: - Added new methods for LISTVIEW that are named 'GetColumnWidths' and 'SetColumnWidths'. GetColumnWidths This method returns the LISTVIEW column widths in a string where the width of all of the columns is specified as a decimal values separated by ':'. SetColumnWidths This method uses an input string that contains decimal values separated by a ':' delimiter. These input decimal values are used to set the current width for each column in a LISTVIEW. - Added new methods for the RUNTIME object that are named 'IntToString' and 'IntParse'. See Documentation section for more details. IntToString This method converts an input numeric value into a decimal or hexadecimal character string and returns it in a DIM variable. IntParse This method parses an input decimal or hexadecimal character string and returns the decimal value in a Numeric Variable. - Corrected a problem where the 'SaveJson' did not encode character values GREATER than 0x7F into UTF-8. - Corrected a problem where a WRITE operation to Sundm using a NCHAR could drop the last byte of a UTF-8 encoded character if the last NCHAR character in a logic string was encoded. - Corrected a problem where a READ operation from Sundm into a NCHAR variable would allow an invalid UTF-8 string to be stored into the NCHAR variable. With this correction, a F14 error occurs if this scenario is encountered. - Modified XFILE READ to correct problem where an invalid UTF-8 string could be stored in an NCHAR. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, ALL GUI CLIENTS - Added a new method named 'SetupTabs' for the TABCONTROL object. This method deletes all of the current TABCONTROL tabs and then sets up all of the tabs/labels. *------------------------------------------------------------------ The SetupTabs method deletes and sets up all of the tabs for a TABCONTROL object. This method can be used to simplify the initialization of TABCONTROL tabs labels up a single operation. This method uses the following format: [label] {OBJECT}.SetupTabs [GIVING {return}]: USING [*LABELS=]{labels}[: [*Options=]{options} Where: LABEL Optional. A Program Execution Label. OBJECT Required. A TABCONTROL object that has been previously created. RETURN Optional. A Numeric Variable that always returns a ZERO value. labels Required. A Character String Variable or literal that contains one or more TAB labels that are to be setup for the TABCONTROL. options Optional. A Numeric Variable or decimal number that specifies a bit mask value that controls the behaviors of this method. This parameter is implemented for future usage. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is always set because the return value is always ZERO. 2. The OVER flag is set to be FALSE. 3. The EOS flag is set to be FALSE. 4. The processing of the SetupTabs method is implemented as two operations as follows: 1) First, all of the current TABCONTROL tabs are deleted. 2) Second, all TAB labels specified in the {labels} parameter are used to add TAB(s) to the TABCONTROL object. 5. The {labels} string can be specified as a NULL string or it can contain one or more labels processed as follows: LABEL String Comment NULL All of the TABCONTROL tabs are only deleted. label1 After all of the tabs are deleted, then one TAB is added. label1;label2;... After all of the tabs are deleted, then multiple tabs with labels are added. 6. The {options} value is a bit-mask value that is used for future usage. Examples: TC TABCONTROL NULL DIM 1 ONETABS INIT "Main" TWOTABS INIT "&Documents;&Images" . TC.SetupTabs USING ONETAB //One tab named 'Main' . TC.SetupTabs USING TWOTABS //Two tabs named 'Documents' // and 'Images' . - Modified the TABCONTROL 'InsertTab' and 'DeleteTab' instructons to properly setup the PL/B RUNTIME Alt key table to allow 'Alt+ch' key sequences to work for the TABCONTROL object. - Modified the TREEVIEW object to support 3 new methods named 'GetFileCount', 'GetFileItem', and 'SetFileOptions'. These methods are used to allow file names to be dragged FROM a Windows File Explorer and dropped onto a PL/B TREEVIEW object. Set the 'Notes for DOCUMENTATION:' for a description of these methods. ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Modified to support NCHAR in GETPROP/SETPROP for the TEXT property of a LABELTEXT object. ------------------------------------------------------------------------------- PLBCMP - Added support for Boolean AND/OR, &/&&, and |/|| up numeric expressions used up an array index, a MOVE instructions, and CALC instructions. When a Boolean operator is used up a numeric expression as described, then the PL/B RUNTIME version of 10.3A or newer must be used to EXECUTE the PL/B program. Otherwise, a U12 error occurs. - Added LIKE operator support to string expressions. MOVE "Sunbelt", dimCompany IF ( dimCompany LIKE "%bel%" ) - Added NOCASE operator support to string expressions. MOVE "SunBelt", dimCompany IF ( NOCASE( dimCompany LIKE "%BEL% ) ) - Modified the compiler to output '*ERROR*' when a structure logic construct was not properly terminated. - Modified the 'RECORD LIKE' instruction to give a compiler ERROR if there is a mismatch of name or type up meta data of a source RECORD member versus the destination RECORD member. - Modified to allow the IP address of the implicit STOP at the end of the program to be included in the PLBM meta data. - Corrected a problem where the RECORDEND was not being output to the .SDB file for a RECORD DEFINITION. - Corrected RECORD LIKE issues where the target RECORD could caused an unexpected sync ALERT message. This would occur if an EQUATE statement was included between the source RECORD and RECORDEND statements. - Corrected a problem where the RECORD LIKE source array members did not show as arrays up target RECORD members meta data entries. - Corrected a problem where the source LINE number for the label of a PROCEDURE, LROUTINE, and ROUTINE statement could be wrong in the program PLBM meta data. This would happen when the parameters of these statements were continued on more than one line. This problem could cause unexpected source LINE accessing up Sunide. - Corrected a problem where unexpected PLBM meta data could be generated when a local execution label with a leading # character was called FROM within the scope of another (L)FUNCTION/FUNCTIONEND. This problem could cause unexpected LABEL accessing up a Sunide. - Corrected a F02 compiler error that could occur when array variables existed as RECORD members. - Modified the compiler to properly process RECORD members that were declared as NCHAR data variables. ------------------------------------------------------------------------------- PLBDBUG - Corrected a problem where the debugger would hang when a 'P'/F10 command was executed to step OVER a subroutine or function that encountered an untrap PL/B error. ------------------------------------------------------------------------------- DBGIFACE - Modified the GUI debugger to not output a trailing CR/LF to the clipboard for a 'Copy' user action FROM the debugger source. - Added 'Copy' SUBMENU item under the 'Program' menu item. This change allows an END-user to use the 'Ctrl+C' CONTROL sequence to copy selected data to the clipboard. The 'Ctrl+C' allows upto 64KB to be copied. Also, there is no restrictions on the data being copied when using the 'Ctrl+C' CONTROL sequence. - Changed to allow Dbgiface to be used with a 10.2 or newer version of the 'suncs21.ocx'. ------------------------------------------------------------------------------- SUNDEBUG - 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 10.3A Beta The final version of Sundebug is to be released as a 10.4 tool. However, a beta version of Sundebug is being released with the 10.3A patch release so PL/B developers can try it, test it, and give Sunbelt feedback to be considered for the final 10.4 release. Documentation: For the 10.3A beta release of Sundebug, there is no Sundebug manual available at this time. The final Sundebug documentation is to be available with the final 10.4 release. Basic Operations: 1. Sundebug requires that a PL/B meta data file (program.plbm) must be generated by the 10.3A 'plbcmp' compiler. By using the 10.3A 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 10.3A SunDebug beta, 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 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. b. The PL/B runtimes are implemented to enable and execute in a debug mode. 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 a 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. At this point, Sundebug has a limited set of command line options 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. -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. 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" PL/B Compiler Plbcmp a. The 10.3A 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 ------------------------------------------------------------------------------- PLBEQU.INC - Added the following *Options values for the MAILSEND instruction: $MAIL_FLAG_OPENSSL INTEGER 4,"0x0010" $MAIL_FLAG_STARTTLS INTEGER 4,"0x0080" $MAIL_FLAG_CONTENT_DISP INTEGER 4,"0x0100" $MAIL_FLAG_USESUNSSL INTEGER 4,"0x0200" - Added the following *Flags value for the HTTP instruction: $HTTP_FLAG_USESUNSSL INTEGER 4,"0x0200" ------------------------------------------------------------------------------- PLBMETH.INC - Added DATETIME object. - Added methods for LISTVIEW, RUNTIME, TABCONTROL and TREEVIEW. - Added parameter to WINDOW 'BrowseForFolder' method. ------------------------------------------------------------------------------- SUNIDE.PLC - Modified the IDE and Project Options to not allow the root folder to be used for a listing or output folder. - Added a list file filter to the Open File dialog. - The IDE now detects source or dependency modification made by other programs while the IDE is executing. - The currently selected program is now shown in a combobox beneath the toolbar of the project window. Selecting a program from the combobox changes the selected program. - Missing files are now displayed with an appropriate icon in the source map and handled correctly throughout the program. - Added an email Test button the IDE/Reporting tab that will send a test email to Sunbelt and trigger a reply email of success. - New consolidated options dialog. - Implemented new MAILSEND MAIL_FLAG_USESUNSSL bit for sending error reports using the Sunbelt supplied SSL libraries. - Modified the Project and Program archive functions to use the project name or source file name for the default archive name and the source folder as the default path. - The IDE now accepts a project or source file name as the first parameter on a command line. Additionally, the second parameter can be the initial line number if a source file is specified. To open files via the Windows File Explorer, you should associate the desired extension to the command line as "c:\sunbelt\plbwnt.103\code\plbwin.exe c:\sunbelt\plbwnt.103\code\ sunide.plc $1 $2". The $2 parameter should only be specified for source files and is not needed for a project file. - Source files may now be selected in the Windows Explorer and dropped on an open project's source map. - Modified the toolbar to place the active profile combobox just before the compiling and executing buttons. - Added a Last Runtime Error dialog that is available from the toolbar or the project menu. - Expanded the Additional Parameters field of the IDE Runtime options page to allow a length of 512. - Added the IDE Behavior Editing option to convert keywords to lower case. - Added Lower Case Instructions option to the Format Source function. - The Find in Files dialog now preserves the search text and starting directory when the "Remember Find In Files" IDE behavior option is set. - The Find in Files dialog now stays visible until closed or cancelled by setting the IDE Behavior option. - Added new debug windows: breakpoints, tracepoints, call stack, locals, modules, variables, files, events, and memory. - Added a close button to the output windows to make the window not visible. - Added a state setting for the output windows to indicate whether they should be shown. The setting is preserved in the IDE ini file. - Modified the windows menu to toggle the output window or tab by setting the window state. - Added a button to allow the output window section of the main form to be hidden and restored. - Replaced the labels combobox with an edittext/datalist combination to allow free-float searchesas characters are typed. - All internal listview column widths are now saved in the IDE configuration. - Forms are now stored in the recent files list when opened by the IDE. - Added help to menus and dialogs. ------------------------------------------------------------------------------- DESIGNER.PLC - Corrected issue with modifying event registrations. - Added shortcut menu for file selection tab control when in integrated layout mode. - Added the "Also Save as XML" behavior option for PLF and PWF files. - Corrected the output file extension when using the Export to XML Form function. - Corrected issue with having the wrong help file loaded when executing as a loadmod from the IDE. - Enabled functions in the Editor shortcut menu. - Corrected an issue when using the 'Integrated' mode where docked windows for the ToolBox and Properties was being truncated at the bottom of the window. ------------------------------------------------------------------------------- SUNCS21.OCX - Enhanced to support new commands for Sundebug Break Point operations. - Corrected a hanging problem when the text '.m' was entered into column 1 of a '.txt' data file. ------------------------------------------------------------------------------- EDITOR.PLC - Added shortcut menu used when debugging. - Modified to avoid unexpected O145 errors that might occur on some systems when HotKeys were being initialized. This error does not occur on all systems but only on some systems for an unknown reason. - Corrected an F05 error when closing a read-only file. - Added exception handling for NotifyDataChange and NotifyEmpty call backs. - Corrected issues with the shortcut menu. ------------------------------------------------------------------------------- WATCH.PLC - Modified to allow the WATCH program to be run using the PL/B Web server. -Fixed a problem where the PWS child task states were not being reported. -------------------------------------------------------------------------------