Date: 10-07-2025 Subject: RELEASE 10.8 Runtime Files These RELEASE notes pertain to the following programs or files: EMBEDINI 10.8 07 Oct 2025 10.8.0.500 EMBEDINI64 10.8 07 Oct 2025 10.8.0.500 HEXDUMP 10.8 07 Oct 2025 10.8.0.500 HEXDUMP64 10.8 07 Oct 2025 10.8.0.500 MAKECLI 10.8 07 Oct 2025 10.8.0.500 MAKECON 10.8 07 Oct 2025 10.8.0.500 MAKECONET 10.8 07 Oct 2025 10.8.0.500 MAKEDEF 10.8 07 Oct 2025 10.8.0.500 MAKEMFD 10.8 07 Oct 2025 10.8.0.500 MANAGECE 10.8 07 Oct 2025 10.8.0.500 OBJMATCH 10.8 07 Oct 2025 10.8.0.500 OBJMATCH64 10.8 07 Oct 2025 10.8.0.500 ODBCINST64 10.8 07 Oct 2025 10.8.0.500 PLBCGI 10.8 07 Oct 2025 10.8.0.500 PLBCLICON 10.8 07 Oct 2025 10.8.0.500 (ComCtl 6) PLBCLIENT 10.8 07 Oct 2025 10.8.0.500 (ComCtl 6) PLBCLINET 10.8 07 Oct 2025 10.8.0.500 (ComCtl 6) PLBCON 10.8 07 Oct 2025 10.8.0.500 (ComCtl 6) PLBCONET 10.8 07 Oct 2025 10.8.0.500 (ComCtl 6) PLBNET 10.8 07 Oct 2025 10.8.0.500 (ComCtl 6) PLBSERVE 10.8 07 Oct 2025 10.8.0.500 (Processed Server) PLBSERVET 10.8 07 Oct 2025 10.8.0.500 (Threaded Server) PLBWEBSRV 10.8 07 Oct 2025 10.8.0.500 (Processed Server) PLBWEBSRVT 10.8 07 Oct 2025 10.8.0.500 (Threaded Server) PLBWIN 10.8 07 Oct 2025 10.8.0.500 (ComCtl 6) SUNAAMDX 10.8 07 Oct 2025 10.8.0.500 SUNAAMDX64 10.8 07 Oct 2025 10.8.0.500 SETGUID 10.8 07 Oct 2025 10.8.0.500 SUNINDEX 10.8 07 Oct 2025 10.8.0.500 SUNINDEX64 10.8 07 Oct 2025 10.8.0.500 SUNLS 10.8 07 Oct 2025 10.8.0.500 SUNMOD 10.8 07 Oct 2025 10.8.0.500 SUNMOD64 10.8 07 Oct 2025 10.8.0.500 SUNSORT 10.8 07 Oct 2025 10.8.0.500 SUNSORT64 10.8 07 Oct 2025 10.8.0.500 WININST 10.8 07 Oct 2025 10.8.0.500 PLBNLD.DLL 10.8 07 Oct 2025 10.8.0.500 PLBNETSUP.DLL 10.8 07 Oct 2025 10.8.0.500 Required for PLBNET PLBWSEC.DLL 10.8 07 Oct 2025 10.8.0.500 Req'd PLBWIN/PLBNET ODSBAC32.DLL 10.8 07 Oct 2025 ODSBAC64.DLL 10.8 07 Oct 2025 SA_DLL32.DLL 10.8 07 Oct 2025 10.8.0.500 SUNWADO.DLL 10.8 07 Oct 2025 10.8.0.500 SUNWADO25.DLL 10.8 07 Oct 2025 10.8.0.500 SUNWADO28.DLL 10.8 07 Oct 2025 10.8.0.500 SUNWMSQL.DLL 10.8 07 Oct 2025 10.8.0.500 SUNWODBC.DLL 10.8 07 Oct 2025 10.8.0.500 SUNWSRV.DLL 10.8 07 Oct 2025 10.8.0.500 SUNWSRV64.DLL 10.8 07 Oct 2025 10.8.0.500 Required for Sundm64 DBGIFACE 10.8 07 Oct 2025 PLBCMP 10.8 07 Oct 2025 PLBDBUG 10.8 07 Oct 2025 SUNDEBUG 10.8 07 Oct 2025 ADMEQU.INC 10.8 07 Oct 2025 PLBEQU.INC 10.8 07 Oct 2025 PLBMETH.INC 10.8 07 Oct 2025 PLBRUN.ZIP 10.8 07 Oct 2025 10.8.0.600 (ComCtl 6) *============================================================================== Notes for DOCUMENTATION: - In the PL/B Runtime Reference manual, add the following compiler option to the 'PLBCMP Command Line Syntax' option descriptions as follows: WH="nnn,mmm,..." This compiler option is used so WARNING messages specified in the comma delimited string are ignored by the compiler. For this option, the 'nnn', 'mmm', etc decimal values are warning numbers found in the 'plberrors.xml' file. The double quotes in the delimited string are required. Example Compiler Ignores Specific Warnings: . . 140 - Obsolete data type! . 331 - Obsolete keyword control! . WH="331,140" - In the 'PL/B Language Reference' manual, add the following note as follows: Add this note to the following PL/B instructions: "n. If PL/B exception program events are being used, see the information described in the 'Exceptions' section." Modify the following PL/B instructions to include the previous note: 1) Add the exception note to the 'RETURN' instruction. 2) Add the exception note to the 'FUNCTIONEND' instruction. - In the 'PL/B Language Reference' manual, modify the 'IntToString Method (RUNTIME)' description as follows: 1) Modify the 'integer' description to read as follows: integer Required A Numeric Variable or decimal number whose value is formatted and returned. 2) Add the new 'Options' parameter to the method: [label] {object}.IntToString [GIVING {return}]: USING [*Integer=]{integer}[: [*Format=]{format}[: [*Options=]{options} Where: options Optional. A Numeric Variable or decimal number that is a bitmask value that defines the integer value range ( whole value, low order byte, or low order word ). 3) Add a Note (4.) that reads as follows: 4. The {options} bit mask values are described as follows: 0 – no change from previous behaviors when {options} not used 1 – return as unsigned, no leading zeros 2 – return the bottom byte as unsigned, 2 digits for hex 4 – return the bottom word as unsigned, 4 digits for hex - In the 'Sunbelt Data Manager' manual, change the 'DM_SQLIO_HOST Keyword' description as follows: Change the 'thdefault' to be 'the default' in the description. - In the 'Sunbelt Data Manager' manual, add the 'DM_SCHEMA Keyword' with description as follows: DM_SCHEMA Keyword DM_SCHEMA={defaultdatabase} This keyword declares the default database file used by the Data Manager. It may include the full path and database name. If this keyword is not used, the default database filename is 'sunschema.db'. The 'sunschema.db' default data file is created or opened in the same directory as the 'SunDM' executable. This keyword must be defined in the [environment] section of the SunDM configuration file. - In the 'PL/B Language Reference' manual, modify the 'CUETEXT Property' Note (5.) description to read as follows: 5. The CUETEXT property is only displayed by Windows for a single line EDITTEXT control. Therefore, when an EDITTEXT is created and the CUETEXT property {value} is specified as a non-NULL string, the EDITTEXT is always created as a single line EDITTEXT. Also, the Windows OS EDITTEXT control must be created with a CUETEXT {value} specified to allow the CUETEXT property to be changed using SETPROP. Otherwise, the SETPROP of the EDITTEXT CUETEXT property does not work. - In the 'Sunbelt Data Manager' manual, change the following keyword descriptions to read as follows: ADMIN_MAIL_STARTUP Keyword By default, this administrative email event is disabled for the Data Manager. If this optional keyword is set to 'on', this email event is enabled. When this email event is enabled, an email is sent that identifies when the Data Manager enters the startup phase that accepts user logons. ADMIN_MAIL_SHUTDOWN Keyword By default, this administrative email event is disabled for the Data Manager. If this optional keyword is set to 'on', this email event is enabled. When this email event is enabled, an email is sent that identifies when the Data Manager main logon process is terminated. - In the 'Sunbelt PL/B Application Server' manual, change the following keyword descriptions to read as follows: ADMIN_MAIL_STARTUP Keyword By default, this administrative email event is disabled for the Application Server. If this optional keyword is set to 'on', this email event is enabled. When this email event is enabled, an email is sent that identifies when the Application Server enters the startup phase that accepts user logons. ADMIN_MAIL_SHUTDOWN Keyword By default, this administrative email event is disabled for the Application Server. If this optional keyword is set to 'on', this email event is enabled. When this email event is enabled, an email is sent that identifies when the Application Server main logon process is terminated. - In the 'Sunbelt PL/B Web Server' manual, change the following keyword descriptions to read as follows: ADMIN_MAIL_STARTUP Keyword By default, this administrative email event is disabled for the PL/B Web Server. If this optional keyword is set to 'on', this email event is enabled. When this email event is enabled, an email is sent that identifies when the PL/B Web Server enters the startup phase that accepts user logons. ADMIN_MAIL_SHUTDOWN Keyword By default, this administrative email event is disabled for the PL/B Web Server. If this optional keyword is set to 'on', this email event is enabled. When this email event is enabled, an email is sent that identifies when the PL/B Web Server main logon process is terminated. - In the 'PL/B Language Reference' manual, add the new PRTPAGE *EDIT control described as follows: *EDIT (PRTPAGE) This PRTPAGE control is used to create a PDF 'variable field' when the Sunbelt 'pdf:' output is being generated. By default, this control creates a PDF 'Text Field' as described under the 'Interactive Forms' ( Section 12.7.4.3 ) in the Adobe document 'PDF 32000-1:2008'. A PDF 'Text Field' can accept input keyed data from a user when the PDF is being rendered/shown using a PDF reader. The format of this PRTPAGE control is as follows: *EDIT={top}:{bottom}:{left}:{right}:{cmdstr} Where: {top} - The {top} parameter is a Numeric Variable, Numeric Literal, or a decimal number that is the top print position for the PDF variable field on a print page. {bottom} - The {bottom} parameter is a Numeric Variable, Numeric Literal, or a decimal number that is the bottom print position for the PDF variable field on a print page. {left} - The {left} parameter is a Numeric Variable, Numeric Literal, or a decimal number that is the left print position for the PDF variable field on a print page. {right} - The {right} parameter is a Numeric Variable, Numeric Literal, or a decimal number that is right print position for the PDF variable field on a print page. {cmdstr} - The {cmdstr} parameter is a Character String Variable or literal that contains one or more *EDIT commands separated by a comma (,) delimiter. The commands provide attributes and behaviors for the PDF variable field. The *EDIT commands actually generate PDF commands which take affect when the PDF file is being processed by a PDF reader. Note: 1. The *EDIT commands are described as follows: B=nn - /BS border style used for the PDF variable field. b=nn B=nn Values Description 0 - Border style is not used. 1 - /BS border style is used with a default border /W width of '1'. 2 - /BS border style is used where the /S style is set to /U to give an underline. Note: When the border style is being used ( 1 or 2 ), a border with a /W width of 1 is used. Also, the border color is set to be black and the background color is set to be white. F=nn - /Ff bitmask flags! The 'nn' decimal value is the bitmask f=nn value used by the /Ff command. See Spec 1.7 Table 220 and 221. J=str - This command string (str) is the JavaScript stream to j=str filter/verify input data for a variable field. This JavaScript stream is only used when the 'T=99' type is set for user/custom filtering. L=nn - This command specifies the maximum character size to l=nn be allowed for the PDF variable field. See Spec 1.7 Table 229 for information for PDF 'MaxLen'. N=str - This command string (str) specifies a user defined field n=str name the must be unique for each variable field. If this 'N' command is not used for a variable field, an internal field name is used with the format of 'FN_nnnn' where the 'nnnn' is the PDF object number being used for a variable field. The file name size is restricted to 298 characters. Note: If the same field name is used for multiple PDF variable fields, only the last variable field with this duplicated field name will work as expected. T=nn - This command identifies the type of input filtering t=nn to be used for the PDF variable field. The input filtering is implemented using JavaScript logic applied using the PDF '/AA' command. See Spec 1.7 Table 28 a description. The supported type filtering is described as follows: T=nn Values Description 0 - Input field filtering is not used. 1 - Numeric digits only ( 0 through 9 ) 2 - Numeric digits ( 0 through 9 ) + minus sign (-) + decimal point (.) 3 - A-Z converted to lowercase as entered 4 - a-z converted to uppercase as entered 99 - Customer user filtering is to be used. In this case, the *EDIT command string must include the 'J=' JavaScript logic stream to be used. X=str - This command is used so a user program can provide an extra stream of valid PDF commands ( See Spec 1.7 ) which are to be applied to a PDF variable field. For Example: Valid extra PDF commands may be applied as follows: dExtra INIT "X=": " /Q 1": //Alignment Center " /TU (Numeric digits only!)": //Give 'tooltip " /DA (1 0 0 rg /Ti 12 Tf)": //Set FG color // and Font size " /V (1234)": //Default text // field value! // The next two lines of PDF commands can // only be used if the 'B=nn' *EDIT command // is NOT being used. // " /BS << /W .2 /S /U >>": //Border style width // and underline!" " /MK << /BC [0 1 0] /BG [0 0 1] >>" //Set Border color // to be Green and // Background color // to be Blue. - In the 'PL/B Language Reference' manual, add the new DATASET object described as follows: DATASET The DATASET object is implemented as a key-value store that is a simple NoSQL in memory database. The data is stored in memory as a linked list of data items where each item requires a unique 'key'. The 'value' data for each item can be plain text, JSON, XML, binary data, HTML, etc... The DATASET object has properties and methods that allow a PL/B program to maintain and manage program data items as needed for the application. The declaration syntax of a DATASET is as follows: (1) [label] DATASET (2) [label] DATASET % (3) [label] DATASET ^ (4) [label] DATASET ^,{target} (5) [label] DATASET [arraysize] (6) [label] DATASET %[arraysize] (7) [label] DATASET ^[arraysize] (8) [label] DATASET ^[arraysize],{target},... Where: label Optional. A Data Label. % Optional. Denotes the object as being GLOBAL. arraysize Required. 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. Flags Affected: NONE Note the following: 1. The DATASET is supported in CREATE, GETPROP, and SETPROP instructions. 2. If the DATASET object is not created when a method is executed, it is implicitly created by the method. When the DATASET object is implicitly created, all of the properties for the object are set to their default states. 3. Supported properties for the DATASET are: Property Comment COUNT - Number of active items in DATASET. Always created with default value of zero. DATAFILTER - This is a FILTER string that is used to be used when DATASET items are being accessed in the GetItem and FindItem methods. By default, this property is not set. DATATYPE - This is a type assigned to the DATASET items. By default, this property is set to zero which is mixed item types. MAXITEMS - This is the maximum item count for the number of active items that can be added to the DATASET. By default, this value is set to zero which allows an unlimited number of DATASET items. NULLSIZE - This is the text size to be used when a DATASET item is added with NULL input. The default NULLSIZE is 100 bytes. RUNNAME - Run-time name of the DATASET object. This property is not set by default. USERDATA - User data assigned to the DATASET object. This property is not set by default. OBJECTID - Identification number associated with the DATASET object. By default, this property is zero. - In the 'PL/B Language Reference' manual, add the DATASET object properties described as follows: 1) Add the DATASET object to the RUNNAME Property. 2) Add the DATASET object to the USERDATA Property. 3) Add the DATASET object to the OBJECTID Property. 4) Add the DATASET object property named COUNT as follows: *------------------------------------------------------------------ COUNT Property (DATASET) The COUNT property is used to get the current number of active data items in a DATASET object. COUNT={value} Note the following: 1. COUNT can only be used in a GETPROP statement. 2. The {value} is a Numeric Variable. 5) Add the DATASET object property named DATAFILTER as follows: *------------------------------------------------------------------ DATAFILTER Property (DATASET) The DATAFILTER property allows a filter string to be set for a DATASET object. If the filter string, it is used when DATASET items are being accessed in the GetItem and FindItem methods. By default, this property is not set. The DATASET filtering is only used for data items that contain valid JSON data. DATAFILER={filter} Note the following: 1. DATAFILTER can be used in CREATE, GETPROP and SETPROP statements for a DATASET object. 2. {filter} can be a Character String Variable or literal that contains a valid filter expression. The filter expression syntax is the same as for the FILTER instruction except valid JSON key names must be used. DATAFILER Examples: {"Orderid":49,"Prodid":44,"City":"Houston","Quantity":40} City='Denver' Company LIKE '%Markets%' Orderid=111 Orderid=111 or Orderid=49 ( Orderid=111 or Orderid=49 ) and Quantity < 15 Prodid >= 40 and Prodid <= 50 6) Add the DATASET object property named DATATYPE as follows: *------------------------------------------------------------------ DATATYPE Property (DATASET) The DATATYPE property is a type assigned to the DATASET items. By default, this property is set to zero which allows mixed item types. DATATYPE={value} Note the following: 1. DATATYPE can only be used in CREATE, GETPROP, and SETPROP statements for a DATASET object. 2. The {value} is a Numeric Variable, decimal number or an Expression. The values are defined as follows: Value Description is ... 0 The DATASET items are mixed data types. In this case, each item can be plain text, JSON, XML, binary data, HTML, etc... 1 The DATASET items are set to JSON. In this case, the data added to the DATASET must have valid JSON object syntax. Otherwise, a error occurs. 7) Add the DATASET object property named MAXITEMS as follows: *------------------------------------------------------------------ MAXITEMS Property (DATASET) The MAXITEMS property sets the maximum item count for the number of active items that can be added to the DATASET. By default, this value is set to zero which allows an unlimited number of DATASET items. MAXITEMS={value} Note the following: 1. MAXITEMS can only be used in CREATE, GETPROP, and SETPROP statements for a DATASET object. 2. The {value} is a Numeric Variable, decimal number or an Expression. 8) Add the DATASET object property named NULLSIZE as follows: *------------------------------------------------------------------ NULLSIZE Property (DATASET) The MAXITEMS property is sets the text size to be used when a DATASET item is added with NULL input. The default NULLSIZE is 100 bytes. NULLSIZE={value} Note the following: 1. NULLSIZE can only be used in CREATE, GETPROP, and SETPROP statements for a DATASET object. 2. The {value} is a Numeric Variable, decimal number or an Expression. - In the 'PL/B Language Reference' manual, add the DATASET object methods described as follows: *---------------------------------------------------------------------- The AddItem method adds a data item to a DATASET. This method uses the following format: [label] {object}.AddItem [GIVING {return}]: USING [*Text=]{text}[: [*Key=]{keystr}][: [*Flags=]{flags}] Where: label Optional. A Program Execution Label. object Required. A DATASET object to which a data item is being added. return Optional. A Character String Variable can contain key, index, or error data being returned by the add item method. text Required. A Character String Variable or literal that contains data to be added to the DATASET. keystr Optional. A Character String Variable or literal that contains a unique key used to access the {text} data in the DATASET. If this {keystr} is not provided, the DATASET creates a unique internal key used to access the {text} data. flags Optional. A Numeric Variable, decimal number, or Numeric expression that defines a bit mask value that is used to control AddItem behaviors. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is set if the returned data is truncated because the {return} variable is too small. 2. The ZERO flag is always set TRUE. 3. The OVER flag is always cleared. 4. The {key} has a maximum key size of 64 characters. If the {key} is not specified, the AddItem method automatically creates a unique key formatted as follows: Key Format: nnnnnnnnnn - Coordinated Universal Time in seconds. Continually incrementing. (10 digits max) tttttttttt - Current runtime thread id. (up to 10 digits) ssssssssss - Sequential incrementing counter for number of of items in the DATASET. Increments to a 32-bit value and rolls over to zero. (10 digits) Example Key for DATASET items: 1753113209-24392-1 - First {key} 1753113209-24392-2 - Second {key} ... 1753113nnn-24392-sss - Incrementing {key} format 5. The {flags} bit mask values are defined as follows: Value Meaning 0x00000001 - Key string is case sensitive. 0x00000002 - Reserved for future use. 0x00000004 - Reserved for future use. 0x00000008 - Return both the key string and index for the added data item. 0x00000010 - Used only for internal use by Push. 0x00000020 - Added item can be a null string. 0x00000040 - Data item being added is read only. 6. When this method generates an error, the {return} variable contains the error string formatted as follows: $ERROR$=nnn Where the 'nnn' error value as follows: Error Value Description 1 - Text parameter must contain input data. Null is not allowed! 2 - Maximum items have been stored in DataSet. 3 - Item data must be valid JSON object syntax. 4 - Duplicate key found which is not allowed. 9 - Unable to allocate memory. 99 - Internal error. Hash index table not created. *---------------------------------------------------------------------- The DeleteAllItems method deletes and frees memory for all data items in a DATASET. This method uses the following format: [label] {object}.DeleteAllItems [GIVING {return}]: [USING [*Flags=]{flags}]] Where: label Optional. A Program Execution Label. object Required. A DATASET object previously declared. return Optional. A Numeric Variable that always returns a zero value. flags Optional. A Numeric Variable, decimal number, or Numeric expression that defines a bit mask value that is used to control DeleteAllItems method behaviors. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is always cleared. 2. The ZERO flag is always set TRUE. 3. The OVER flag is always cleared. 4. The {flags} bit mask value is implemented for future usage. 5. This method does not generate any errors. *---------------------------------------------------------------------- The DeleteItem method finds and deletes a data item in a DATASET using a {key} or {index}. This method uses the following format: [label] {object}.DeleteItem [GIVING {return}]: [USING [ [*KEY=]{key}][: [*INDEX=]{index}][: [*FLAGS=]{flags}]] Where: label Optional. A Program Execution Label object Required. A DATASET object previously declared. return Optional. A Numeric Variable that returns a pass (zero) or fail (non-zero) value. key Optional. A Character String Variable or literal that contains a key string used to find a data item in the DATASET to be deleted. If both and {index} keywords are specified, the {key} is used to find the data item to be deleted. index Optional. A Numeric Variable, decimal number, or Numeric expression whose numeric value is used to find an item to be deleted. flags Optional. A Numeric Variable, decimal number, or Numeric expression that defines a bit mask value that is used to control DeleteItem method behaviors. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is always cleared. 2. The ZERO flag is set TRUE if the {return} value is zero when the method is completed successfully. If the method fails, the ZERO flag is cleared. 3. The OVER flag is set if the {return} numeric variable is too small requiring the value to be truncated. 4. The {flags} bit mask values are defined as follows: Value Meaning 0x00000001 Key string is case sensitive. 5. When this method generates an error, the {return} variable contains an error code value as follows: Error Value Description 1 - The data item could not be found! *---------------------------------------------------------------------- The FindItem method finds a data item in a DATASET using a {key} or {index}. Also, if the DATAFILTER property is set for the DATASET, this method uses the filter when the data item(s) have a JSON data type. This method uses the following format: [label] {object}.FindItem [GIVING {return}]: [USING [[*KEY=]{key}][: [*INDEX=]{index}][: [*FLAGS=]{flags}]] Where: label Optional. A Program Execution Label object Required. A DATASET object previously declared. return Optional. A Character String Variable that returns the key and/or index. Otherwise, an error string formatted as "$ERROR$=errorinfo" is returned. key Optional. A Character String Variable or literal that contains a key string used to find a data item in the DATASET. If both the {key} and {index} keywords are specified, the {key} is used to find the data item. index Optional. A Numeric Variable, decimal number, or Numeric expression whose numeric value is used to find an item. {flags} Optional. A Numeric Variable, decimal number, or Numeric expression that defines a bit mask value that is used to control the FindItem method behaviors. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is set if the returned data is truncated because the {return} variable is too small. 2. The ZERO flag is always set TRUE. 3. The OVER flag is always cleared. 4. The {flags} bit mask values are defined as follows: Value Meaning 0x00000001 - Key string is case sensitive. 0x00000002 - Reserved for internal use. 0x00000004 - Return both the key string and index for the data item when found. Also, if the DATAFILTER is being used, the current filter state flag ( 0 or 1 ) is returned. 0x00000008 - Start searching for a data item that matches the DATAFILTER with data item after following data item found using the key/index. 0x00000010 - Do not use the DATAFILTER property for the DATASET for the FindItem method. 0x00000020 - Continue searching until a data item matches the DATAFILTER being used. 5. When this method generates an error, the {return} variable contains an error code value as follows: Error Value Description 2 - The data item could not be found! *---------------------------------------------------------------------- The GetItem method finds a data item in a DATASET using a {key} or {index} and retrieves the associated data string. The return data can be plain text, formatted data like JSON, XML, binary data, ...etc. Also, if the DATAFILTER property is set for the DATASET, this method uses the filter when the data item(s) have a JSON data type. This method uses the following format: [label] {object}.GetItem [GIVING {return}]: [USING [ [*KEY=]{key}][: [*INDEX=]{index}][: [*DELIMITER=]{delimiter}][: [*FLAGS=]{flags}]] Where: label Optional. A Program Execution Label object Required. A DATASET object previously declared. return Optional. A Character String Variable that returns the data string for the data item. Otherwise, an error string formatted as "$ERROR$=errorinfo" is returned. key Optional. A Character String Variable or literal that contains a key string used to find a data item in the DATASET. If both the {key} and {index} keywords are specified, the {key} is used to find the data item. If both the {key} and {index} are not specified, the last accessed DATASET data item is used. Otherwise, an error occurs. index Optional. A Numeric Variable, decimal number, or Numeric expression whose numeric value is used to find a data item. delimiter Optional. A Character String Variable or literal that contains a delimiter character used by the GetItem method. If the method keyword is not used, the GetItem method uses a default ',' comma character as the delimiter. flags Optional. A Numeric Variable, decimal number, or Numeric expression that defines a bit mask value that is used to control the GetItem method behaviors. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is set if the returned data is truncated because the {return} variable is too small. 2. The ZERO flag is always set TRUE. 3. The OVER flag is always cleared. 4. The {flags} bit mask values are defined as follows: Value Meaning 0x00000001 - Key string is case sensitive. 0x00000002 - Return both the key string followed by a delimiter character which is followed with all of the data associated with the key. 0x00000004 - This bit causes information data to be returned where all information data is separated by a delimiter. "key, keylen, datasize, maxsize, hash" key - Key string of a data item. keylen - Key length of a data item. datasize - Current data size. maxsize - Maximum size for a data item. hash - Hash hexadecimal value. 0x00000008 - Get the next data item after the current data item found by this GetItem method. 0x00000010 - Get the data item prior to the current data item found by this GetItem method. 0x00000020 - Continue searching until a data item matches the DATAFILTER being used. 5. When this method generates an error, the {return} variable contains an error code value as follows: Error Value Description 1 - The item data size is too large for DATASET output buffer! Sunbelt internal error. 2 - The data item could not be found! 3 - DataSet data item is NOT JSON data type. 4 - DATAFILTER expression does not find a match. 5 - End of DATASET encountered before DATAFILTER match. *---------------------------------------------------------------------- The Push method allows data items to be added to a DATASET object. This method works the same as the 'AddItem' method except the the index value is only returned. This method uses the following format: [label] {object}.Push [GIVING {return}]: [USING [*Text=]{text}[: [*Key=]{keystr}][: [*Flags=]{flags}]] Where: label Optional. A Program Execution Label. object Required. A DATASET object previously declared. return Optional. A Character String Variable that returns the index or error data being returned by the Push method. text Required. A Character String Variable or literal that contains data to be pushed to the DATASET. keystr Optional. A Character String Variable or literal that contains a unique key used to access the {text} data in the DATASET directly. If this {keystr} is not provided, the DATASET creates a unique internal key used to access the {text} data. flags Optional. A Numeric Variable, decimal number, or Numeric expression that defines a bit mask value that is used to control Push method behaviors. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is set if the returned data is truncated because the {return} variable is too small. 2. The ZERO flag is always set TRUE. 3. The OVER flag is always cleared. 4. The {key} has a maximum key size of 64 characters. If the {key} is not specified, the Push method automatically creates a unique key formatted as follows: Key Format: nnnnnnnnnn - Coordinated Universal Time in seconds. Continually incrementing. (10 digits max) tttttttttt - Current runtime thread id. (up to 10 digits) ssssssssss - Sequential incrementing counter for number of of items in the DATASET. Increments to a 32-bit value and rolls over to zero. (10 digits) Example Key for DATASET items: 1753113209-24392-1 - First {key} 1753113209-24392-2 - Second {key} ... 1753113nnn-24392-sss - Incrementing {key} format 5. The {flags} bit mask values are defined as follows: Value Meaning 0x00000001 - Key string is case sensitive. 0x00000002 - Reserved for future use. 0x00000004 - Reserved for future use. 0x00000008 - Not Used 0x00000010 - Add an item in a Push mode. Push mode only returns the index value. 0x00000020 - Added item can be a null string. 6. When this method generates an error, the {return} variable contains the error string formatted as follows: $ERROR$=nnn Where the 'nnn' error value as follows: Error Value Description 1 - Text parameter must contain input data. Null not allowed! 2 - Maximum items have been stored in DataSet. 3 - Item data must be valid JSON object syntax. 4 - Duplicate key found which is not allowed. 9 - Unable to allocate memory. 99 - Internal error. Hash index table not created. *---------------------------------------------------------------------- The Pop method retrieves data items from the DATASET stack. By default, this method retrieves the last data item Push on the DATASET stack in a LIFO (Last In First Out) mode. This default behavior can be changed to use a FIFO (First In First Out) mode by using the {flags} parameter. Once the Pop method executes the data item is automatically deleted from the DATASET. This method uses the following format: [label] {object}.Pop [GIVING {return}]: [USING [*Flags=]{flags}]] Where: label Optional. A Program Execution Label. object Required. A DATASET object previously declared. return Optional. A Character String Variable that returns the data string for the data item. Otherwise, an error string formatted as "$ERROR$=errorinfo" is returned. flags Optional. A Numeric Variable, decimal number, or Numeric expression that defines a bit mask value that is used to control Pop method behaviors. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is set if the returned data is truncated because the {return} variable is too small. 2. The ZERO flag is always set TRUE. 3. The OVER flag is always cleared. 4. The {flags} bit mask value is implemented for future usage. Value Meaning 0x00000001 - Use FIFO mode for Pop method. 0x00000002 - Return both the key string followed by a comma which is followed with all of the data being returned. 5. When this method generates an error, the {return} variable contains the error string formatted as follows: $ERROR$=nnn Where the 'nnn' error value as follows: Error Value Description 1 - The DATASET is empty. 10 - The item data size is too large for DATASET output buffer! Sunbelt internal error. *---------------------------------------------------------------------- The UpdateItem method finds a data item in a DATASET using a {key} or {index} and updates the data for the data item. This method only replaces the data for the data item. If the update data size is less than or equal to the current maximum data size of the data item, its current data is simply overlayed. However, if the update data size is larger than the current maximum data size, the current data item is freed and reallocated for the update data. The data item {key} and {index} remain the same. This method does not perform any partial update for the data item data. The DATAFILTER property is not used by the UpdateItem method. This method uses the following format: [label] {object}.UpdateItem [GIVING {return}]: USING [*TEXT=]{text}[: [*KEY=]{key}][: [*INDEX=]{index}][: [*FLAGS=]{flags}] Where: label Optional. A Program Execution Label object Required. A DATASET object previously declared. return Optional. A Character String Variable that returns the key string for the data item. Otherwise, an error string formatted as "$ERROR$=errorinfo" is returned. text Required. A Character String Variable or literal that contains data to update a data item in the DATASET. key Optional. A Character String Variable or literal that contains a key string used to find a data item in the DATASET. If both the {key} and {index} keywords are specified, {key} is used to find the data item. If both the {key} and {index} are not specified, the last accessed DATASET data item is updated. Otherwise, an error occurs. index Optional. A Numeric Variable, decimal number, or Numeric expression whose numeric value is used to find a data item. flags Optional. A Numeric Variable, decimal number, or Numeric expression that defines a bit mask value that is used to control the UpdateItem method behaviors. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is set if the returned data is truncated because the {return} variable is too small. 2. The ZERO flag is always set TRUE. 3. The OVER flag is always cleared. 4. The {flags} bit mask values are defined as follows: Value Meaning 0x00000001 - Key string is case sensitive. 0x00000002 - Return both the key string and the index separated with a comma delimiter. 0x00000020 - Updated item can be a null string. 5. When this method generates an error, the {return} variable contains an error code value as follows: Error Value Description 1 - The update text cannot be null. 3 - Update data must be a valid JSON object string. 4 - Update key not found in DATASET. 5 - The data item is not found using index. 6 - Valid key or index required. 7 - Can not update a ReadOnly data item. 9 - Unable to allocate memory. 99 - Internal error. Hash index table not created. - In the 'PL/B Language Reference' manual, add the new JSON object described as follows: The JSON PL/B object provides functionality to generate, retrieve, modify, and delete fields within a JSON object. Each field consists of a key-value pair using the standard JSON syntax: "key":value. In addition to basic types, the PL/B JSON object supports complex types-- object and array -- which are represented using curly braces {} and square brackets [], respectively. The declaration syntax of a JSON object is as follows: (1) [label] JSON (2) [label] JSON % (3) [label] JSON ^ (4) [label] JSON ^,{target} (5) [label] JSON %,{target} (6) [label] JSON [arraysize] (7) [label] JSON %[arraysize] (8) [label] JSON ^[arraysize] (9) [label] JSON ^[arraysize],{target},... Where: label Optional. A Data Label. % Optional. Denotes the object as being GLOBAL. arraysize Required. 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. Flags Affected: NONE Note the following: 1. The JSON object is created when a method is executed, it is implicitly created by the method. 2. The JSON object can be used in a DESTROY instruction. 3. The JSON field types are broken down into the following basic types for the JSON PL/B object: Type Description Example: string Text enclosed in double "name":"James" quotes. number (Integer) Integer value. "age":54 number (Double) Floating-point value. "score":95.8 boolean Logical true/false. "active":true null Explicitly represents no "middleName":null value. object Collection of key-value "user":{"id":1,"name":"E"} pairs. array Ordered list of values "tags":["dev","win32"] (any type). - In the 'PL/B Language Reference' manual, add the JSON object methods described as follows: *---------------------------------------------------------------------- The Parse method is used to make nodes in the JSON object from a valid JSON string. This method verifies and validates the JSON string syntax. This method uses the following format: [label] {object}.Parse [GIVING {return}]: USING [*JSON=]{json}[,[*OPTIONS=]{options}] Where: label Optional. A Program Execution Label. object Required. A JSON object previously declared. return Optional. A Numeric Variable that returns a pass (zero) or fail (non-zero) value. json Required. A Character String Variable or literal that contains a valid JSON object stream. options Optional. A Numeric Variable, decimal number, or Numeric expression that defines a bit mask value that is used to control the behaviors of this method. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is always cleared. 2. The ZERO flag is set if the return value is zero. Otherwise, the ZERO flag is cleared for non-zero values. 3. The OVER flag is set if the return value must be truncated. 4. The {options} bit mask values are defined as follows: Value Meaning 0x00000001 - Allow comments in the JSON input data. 5. When this method generates an error, the {return} variable contains the error codes: Error Value Description 1 - Memory allocation error. 2 - JSON parsing error. 3 - JSON unknown type. 10nn - Filter expression error. 1199 - Invalid JSON stream. 6. If an error occurs, the JSON object method 'SyntaxError' can be used to retrieve that last error that was generated. *---------------------------------------------------------------------- The Store method is used to output a JSON string using the JSON object nodes. This method uses the following format: [label] {object}.Store [GIVING {return}]: [USING [*OPTIONS=]{options}] Where: label Optional. A Program Execution Label. object Required. A JSON object previously declared. return Optional. A Character Variable that returns the output JSON string. If an error occurs while generating the JSON output string, the Character Variable is returned as a NULL variable. options Optional. A Numeric Variable, decimal number, or Numeric expression that defines a bit mask value that is used to control the behaviors of this method. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is set if the output JSON string is truncated because the {return} variable is too small. 2. The ZERO and OVER flags are always cleared. 3. The {options} bit mask values are defined as follows: Value Meaning 0x00000002 - Output JSON line with indention is being used. 0x00000004 - Output with CR/LF EOR for each JSON line. 0x00000040 - Use one tab character (0x9) to indent JSON lines if this bit is set. Otherwise, blank characters (0x20) are used. 4. If an error occurs, the JSON object method 'SyntaxError' can be used to retrieve that last error that was generated. *---------------------------------------------------------------------- The StoreSize method is used to retrieve the variable size required to retrieve the output JSON data string using the current JSON object nodes. This method uses the following format: [label] {object}.StoreSize [GIVING {return}]: [USING [*OPTIONS=]{options}] Where: label Optional. A Program Execution Label. object Required. A JSON object previously declared. return Optional. A Numeric Variable that returns the output JSON string size. options Optional. A Numeric Variable, decimal number, or Numeric expression that defines a bit mask value that is used to control the behaviors of this method. Flags Affected: EOS, OVER, ZERO Notes: 1. The ZERO flag is set if the {return} value is zero. Otherwise, this flag is cleared. 2. The OVER flag is set if the output JSON string size value is too large and must be truncated when the size is put into the {return} variable. 3. The EOS flag is always cleared. 4. The {options} bit mask values are defined as follows: Value Meaning 0x00000002 - Output JSON line with indention being used. 0x00000004 - Output CR/LF EOR for each JSON line. 0x00000040 - Use one tab character (0x9) to indent JSON lines if this bit is set. Otherwise, blank characters (0x20) are used. 5. If an error occurs, the JSON object method 'SyntaxError' can be used to retrieve that last error that was generated. *---------------------------------------------------------------------- The GetNumber method gets and returns a numeric value based on the type of value for a JSON field being accessed. This method uses the following format: [label] {object}.GetNumber [GIVING {return}]: USING [*NAME=]{name}[: [*INDEX1=]{index1}][: [*INDEX2=]{index2}][: [*INDEX3=]{index3}] Where: label Optional. A Program Execution Label. object Required. A JSON object previously declared. return Optional. A Numeric Variable that returns a number based on the type of value for a JSON field specified by the name parameter. name Required. A Character String Variable or literal that specifies the key name for a JSON field. index1 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the first index of a JSON array that is being accessed. index2 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the second index of a JSON multi-dimensioned array that is being accessed. index3 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the third index of a JSON multi-dimensioned array that is being accessed. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is always cleared. 2. The ZERO flag is set if the return value is zero. Otherwise, the ZERO flag is cleared for non-zero values. 3. The OVER flag is set if the return value must be truncated. 4. The {return} values are determined by the JSON field value type being accessed using a JSON field key specified by the {name} parameter. The JSON field value types are defined as follows: Type Description for JSON object return value 1 This is a json_object type which returns the number of fields in the json object. 2 This is a json_array type which returns the number of elements in the array. 3 This is a json_integer type which returns the field integer value. 4 This is a json_double type which returns the whole digits value. Decimal digits are not returned. 5 This is a json_string type which returns the length of the JSON field string. 6 This is a json_boolean type which returns the value of one for a 'true' value. If the json_boolean value is 'false', the return value is zero. 7 This is a json_null type which returns the value of zero. 5. If an error occurs, the JSON object method 'SyntaxError' can be used to retrieve that last error that was generated. *---------------------------------------------------------------------- The GetString method returns the JSON field value of the JSON key specified by the field key name. This method uses the following format: [label] {object}.GetString [GIVING {return}]: USING [*NAME=]{name}[: [*INDEX1=]{index1}][: [*INDEX2=]{index2}][: [*INDEX3=]{index3}] Where: label Optional. A Program Execution Label. object Required. A JSON object previously declared. return Optional. A Character Variable that returns the output JSON value string. If an error occurs while retrieving the string from the JSON value, the Character Variable is returned as a NULL variable. name Required. A Character String Variable or literal that specifies a JSON field name. index1 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the first index of a JSON array that is being accessed. index2 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the second index of a JSON multi-dimensioned array that is being accessed. index3 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the third index of a JSON multi-dimensioned array that is being accessed. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is set if the output JSON string is truncated because the {return} variable is too small. 2. The ZERO and OVER flags are always cleared. 3. If an error occurs, the JSON object method 'SyntaxError' can be used to retrieve that last error that was generated. *---------------------------------------------------------------------- The GetType method gets and returns the type for the JSON field value that is found for the JSON key with the specified name. This method uses the following format: [label] {object}.GetType [GIVING {return}]: USING [*NAME=]{name}[: [*INDEX1=]{index1}][: [*INDEX2=]{index2}][: [*INDEX3=]{index3}] Where: label Optional. A Program Execution Label. object Required. A JSON object previously declared. return Optional. A Numeric Variable that returns a JSON value type for the JSON field specified by the name parameter. name Required. A Character String Variable or literal that specifies the key name for a JSON field. index1 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the first index of a JSON array that is being accessed. index2 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the second index of a JSON multi-dimensioned array that is being accessed. index3 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the third index of a JSON multi-dimensioned array that is being accessed. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is always cleared. 2. The ZERO flag is set if the return value is zero. Otherwise, the ZERO flag is cleared for non-zero values. 3. The OVER flag is set if the return value must be truncated. 4. The {return} value is the JSON field value type defined as follows: Type Description for JSON field types: 1 This is a json_object type. 2 This is a json_array type. 3 This is a json_integer type. 4 This is a json_double type. 5 This is a json_string type. 6 This is a json_boolean type. 7 This is a json_null type. 5. If an error occurs, the JSON object method 'SyntaxError' can be used to retrieve that last error that was generated. *---------------------------------------------------------------------- The SetArray method is used to create a JSON array field and place it into the current JSON object. This method uses the following format: [label] {object}.SetArray [GIVING {return}]: USING [*NAME=]{name}: [*VALUE="]{value}[: [*INDEX1=]{index1}][: [*INDEX2=]{index2}][: [*INDEX3=]{index3}] Where: label Optional. A Program Execution Label. object Required. A JSON object previously declared. return Optional. A Numeric Variable that returns a pass (0) or fail (!0) value. name Required. A Character String Variable or literal that specifies the key name for a JSON field. value Required. A Character String Variable or literal that specifies the string value for a JSON field with the JSON array type. index1 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the first index of a JSON array that is being accessed. index2 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the second index of a JSON multi-dimensioned array that is being accessed. index3 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the third index of a JSON multi-dimensioned array that is being accessed. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is always cleared. 2. The ZERO flag is set if the return value is zero. Otherwise, the ZERO flag is cleared for non-zero values. 3. The OVER flag is set if the return value must be truncated. 4. The error values returned in {return} are defined as follows: Error Description 1 - Memory allocation error. 2 - JSON parse error. Check SyntaxError method! 5 - JSON error type mismatch. 6 - JSON parse id error. Check SyntaxError method! 7 - JSON method input is null or invalid. 5. If an error occurs, the JSON object method 'SyntaxError' can be used to retrieve that last error that was generated. 6. The {value} character string must be a properly formatted JSON array string that starts with the leading '[' character. Otherwise, an error occurs. *---------------------------------------------------------------------- The SetBoolean method is used to create a JSON field with a Boolean type and place it into the current JSON object. This method uses the following format: [label] {object}.SetBoolean [GIVING {return}]: USING [*NAME=]{name}: [*VALUE="]{value}[: [*INDEX1=]{index1}][: [*INDEX2=]{index2}][: [*INDEX3=]{index3}] Where: label Optional. A Program Execution Label. object Required. A JSON object previously declared. return Optional. A Numeric Variable that returns a pass (0) or fail (!0) value. name Required. A Character String Variable or literal that specifies the key name for a JSON field. value Required. A Character String Variable, literal, Numeric Variable, decimal number, or Numeric expression that specifies the JSON Boolean value for a JSON field. index1 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the first index of a JSON array that is being accessed. index2 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the second index of a JSON multi-dimensioned array that is being accessed. index3 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the third index of a JSON multi-dimensioned array that is being accessed. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is always cleared. 2. The ZERO flag is set if the return value is zero. Otherwise, the ZERO flag is cleared for non-zero values. 3. The OVER flag is set if the return value must be truncated. 4. The error values returned in {return} are defined as follows: Error Description 1 - Memory allocation error. 5 - JSON error type mismatch. 6 - JSON parse id error. Check SyntaxError method! 5. If an error occurs, the JSON object method 'SyntaxError' can be used to retrieve that last error that was generated. *---------------------------------------------------------------------- The SetDouble method is used to create a JSON field with a double type and place it into the current JSON object. This method uses the following format: [label] {object}.SetDouble [GIVING {return}]: USING [*NAME=]{name}: [*VALUE="]{value}[: [*INDEX1=]{index1}][: [*INDEX2=]{index2}][: [*INDEX3=]{index3}] Where: label Optional. A Program Execution Label. object Required. A JSON object previously declared. return Optional. A Numeric Variable that returns a pass (0) or fail (!0) value. name Required. A Character String Variable or literal that specifies the key name for a JSON field. value Required. A Character String Variable, literal, Numeric Variable, decimal number, or Numeric expression that specifies the JSON double value for a JSON field. index1 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the first index of a JSON array that is being accessed. index2 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the second index of a JSON multi-dimensioned array that is being accessed. index3 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the third index of a JSON multi-dimensioned array that is being accessed. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is always cleared. 2. The ZERO flag is set if the return value is zero. Otherwise, the ZERO flag is cleared for non-zero values. 3. The OVER flag is set if the return value must be truncated. 4. The error values returned in {return} are defined as follows: Error Description 1 - Memory allocation error. 5 - JSON error type mismatch. 6 - JSON parse id error. Check SyntaxError method! 7 - JSON method input is null or invalid. 5. If an error occurs, the JSON object method 'SyntaxError' can be used to retrieve that last error that was generated. 6. The {value} parameter data must provide basic format(s) before it can be transformed into a proper JSON double type format that is set into the JSON field. If the {input} parameter is a Numeric Variable or decimal number, the PL/B value is used for the JSON double value output. If the {input} parameter is a Character Variable or literal, the string format can be one of the following formats: {input} Description Decimal numbers 3, 3., 3.14, .14, +5 Negative numbers: -2, -2., -2.5 Scientific notation: 1.2e3, 5.67E-4 (Limited to 6 decimal places) Hexadecimal numbers: 0xf1ad, 0xA1E9 *---------------------------------------------------------------------- The SetInteger method is used to create a JSON field with a integer type and place it into the current JSON object. This method uses the following format: [label] {object}.SetInteger [GIVING {return}]: USING [*NAME=]{name}: [*VALUE="]{value}[: [*INDEX1=]{index1}][: [*INDEX2=]{index2}][: [*INDEX3=]{index3}] Where: label Optional. A Program Execution Label. object Required. A JSON object previously declared. return Optional. A Numeric Variable that returns a pass (0) or fail (!0) value. name Required. A Character String Variable or literal that specifies the key name for a JSON field. value Required. A Character String Variable, literal, Numeric Variable, decimal number, or Numeric expression that specifies the JSON integer value for a JSON field. index1 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the first index of a JSON array that is being accessed. index2 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the second index of a JSON multi-dimensioned array that is being accessed. index3 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the third index of a JSON multi-dimensioned array that is being accessed. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is always cleared. 2. The ZERO flag is set if the return value is zero. Otherwise, the ZERO flag is cleared for non-zero values. 3. The OVER flag is set if the return value must be truncated. 4. The error values returned in {return} are defined as follows: Error Description 1 - Memory allocation error. 5 - JSON error type mismatch. 6 - JSON parse id error. Check SyntaxError method! 7 - JSON method input is null or invalid. 5. If an error occurs, the JSON object method 'SyntaxError' can be used to retrieve that last error that was generated. 6. The {value} parameter data must provide basic format(s) before it can be transformed into a proper JSON integer type format that is set into the JSON field. If the {input} parameter is a Numeric Variable or decimal number, the PL/B value is used for the JSON integer value output. If the {input} parameter is a Character Variable or literal, the string format can be one of the following formats: {input} Description Decimal numbers 1 to 9 digits, '+', '-' allowed Hexadecimal numbers: 0xf1ad, 0xA1E9 Valid {input} Examples: "0.62" Leading digit '0' scanned and stops a '.'. Value is 0. "1.62" Leading digit '1' scanned and stops a '.'. Value is 1. "-12" Negative value ok. Value is -12. "-7.62" Negative value ok. Value is -7. The scanning stops at the decimal point. "+123" Positive value ok. Value is 12. " 789" Leading blanks ignored. Valus is 789. "987abc" Leading digits scanned and stops at non-digit (abc). Value is 987. Invalid {input} Examples: NULL Null PL/B string is not allowed. '.62' Leading decimal point is not allowed. Leading digit required. '-.62' No leading digit before decimal point. "abc" No digits found. *---------------------------------------------------------------------- The SetObject method is used to create a JSON object field and place it into the current JSON object. This method uses the following format: [label] {object}.SetObject [GIVING {return}]: USING [*NAME=]{name}: [*VALUE="]{value}[: [*INDEX1=]{index1}][: [*INDEX2=]{index2}][: [*INDEX3=]{index3}] Where: label Optional. A Program Execution Label. object Required. A JSON object previously declared. return Optional. A Numeric Variable that returns a pass (0) or fail (!0) value. name Required. A Character String Variable or literal that specifies the key name for a JSON field. value Required. A Character String Variable or literal that specifies the string value for a JSON field with the JSON object type. index1 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the first index of a JSON array that is being accessed. index2 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the second index of a JSON multi-dimensioned array that is being accessed. index3 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the third index of a JSON multi-dimensioned array that is being accessed. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is always cleared. 2. The ZERO flag is set if the return value is zero. Otherwise, the ZERO flag is cleared for non-zero values. 3. The OVER flag is set if the return value must be truncated. 4. The error values returned in {return} are defined as follows: Error Description 1 - Memory allocation error. 2 - JSON parse error. Check SyntaxError method! 5 - JSON error type mismatch. 6 - JSON parse id error. Check SyntaxError method! 7 - JSON method input is null or invalid. 5. If an error occurs, the JSON object method 'SyntaxError' can be used to retrieve that last error that was generated. 6. The {value} character string must be a properly formatted JSON object string that starts with the leading '{' character. Otherwise, an error occurs. *---------------------------------------------------------------------- The SetString method is used to create a JSON string field and place it into the current JSON object. This method uses the following format: [label] {object}.SetString [GIVING {return}]: USING [*NAME=]{name}: [*VALUE="]{value}[: [*INDEX1=]{index1}][: [*INDEX2=]{index2}][: [*INDEX3=]{index3}] Where: label Optional. A Program Execution Label. object Required. A JSON object previously declared. return Optional. A Numeric Variable that returns a pass (0) or fail (!0) value. name Required. A Character String Variable or literal that specifies the key name for a JSON field. value Required. A Character String Variable or literal that specifies the string value for a JSON field with the JSON string type. index1 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the first index of a JSON array that is being accessed. index2 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the second index of a JSON multi-dimensioned array that is being accessed. index3 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the third index of a JSON multi-dimensioned array that is being accessed. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is always cleared. 2. The ZERO flag is set if the return value is zero. Otherwise, the ZERO flag is cleared for non-zero values. 3. The OVER flag is set if the return value must be truncated. 4. The error values returned in {return} are defined as follows: Error Description 1 - Memory allocation error. 2 - JSON parse error. Check SyntaxError method! 5 - JSON error type mismatch. 7 - JSON method input is null or invalid. 5. If an error occurs, the JSON object method 'SyntaxError' can be used to retrieve that last error that was generated. 6. The {value} character string is simple PL/B DIM data string that is stored into the JSON object. If there are any characters less than 0x20 in the character string, they MUST be escaped to be a valid JSON string ( \b, \t, \n,...etc ). UTF8 encoded string data is allowed in the JSON string. *---------------------------------------------------------------------- The Delete method deletes a JSON object node specified by the JSON field key name. This method uses the following format: [label] {object}.Delete [GIVING {return}]: USING [*NAME=]{name}[: [*INDEX1=]{index1}][: [*INDEX2=]{index2}][: [*INDEX3=]{index3}] Where: label Optional. A Program Execution Label. object Required. A JSON object previously declared. return Optional. A Numeric Variable that returns a value of zero. name Required. A Character String Variable or literal that specifies the key name for a JSON field being deleted. index1 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the first index of a JSON array that is being accessed. index2 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the second index of a JSON multi-dimensioned array that is being accessed. index3 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the third index of a JSON multi-dimensioned array that is being accessed. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is always cleared. 2. The ZERO flag is set TRUE for a value of zero. 3. The OVER flag is set if the return value must be truncated. 4. If an error occurs, the JSON object method 'SyntaxError' can be used to retrieve that last error that was generated. *---------------------------------------------------------------------- The Null method sets a JSON field to have a 'null' value for the JSON key with the specified name. This method uses the following format: [label] {object}.Null [GIVING {return}]: USING [*NAME=]{name}[: [*INDEX1=]{index1}][: [*INDEX2=]{index2}][: [*INDEX3=]{index3}] Where: label Optional. A Program Execution Label. object Required. A JSON object previously declared. return Optional. A Numeric Variable that returns a pass (0) or fail (!0) value. name Required. A Character String Variable or literal that specifies the key name for a JSON field. index1 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the first index of a JSON array that is being accessed. index2 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the second index of a JSON multi-dimensioned array that is being accessed. index3 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the third index of a JSON multi-dimensioned array that is being accessed. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is always cleared. 2. The ZERO flag is set if the return value is zero. Otherwise, the ZERO flag is cleared for non-zero values. 3. The OVER flag is set if the return value must be truncated. 4. The error values returned in {return} are defined as follows: Error Description 1 - Memory allocation error. 2 - JSON parse error. Check SyntaxError method! 5 - JSON error type mismatch. 7 - JSON method input is null or invalid. 5. If an error occurs, the JSON object method 'SyntaxError' can be used to retrieve that last error that was generated. 6. The resulting output JSON field for the JSON key is to have a value defined as 'null'. This JSON field simply indicates that the JSON value is intentionally absent of any data. Example of JSON field with 'null' value: "MyName" : null *---------------------------------------------------------------------- The Reset method is used to cleanup and free all JSON object data. This method uses the following format: [label] {object}.Reset [GIVING {return}] Where: label Optional. A Program Execution Label. object Required. A JSON object previously declared. return Optional. A Numeric Variable that returns a value of zero. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is always cleared. 2. The ZERO flag is set TRUE for a value of zero. 3. The OVER flag is set if the return value must be truncated. *---------------------------------------------------------------------- The GetNames method returns the JSON field names in a JSON object when the JSON key specifies the field key name for a JSON object. If the {name} parameter is NULL, this function returns all of the JSON field names in the JSON object. This method uses the following format: [label] {object}.GetNames [GIVING {return}]: USING [*NAME=]{name}[: [*INDEX1=]{index1}][: [*INDEX2=]{index2}][: [*INDEX3=]{index3}] Where: label Optional. A Program Execution Label. object Required. A JSON object previously declared. return Optional. A Character Variable that returns the names of JSON fields in a JSON object. All of the field names being returned are separated by a comma character delimiter. name Required. A Character String Variable or literal that specifies a JSON field name for a JSON object. index1 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the first index of a JSON array that is being accessed. index2 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the second index of a JSON multi-dimensioned array that is being accessed. index3 Optional. A Numeric Variable, decimal number, or Numeric expression that defines the third index of a JSON multi-dimensioned array that is being accessed. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is set if the output JSON string is truncated because the {return} variable is too small. 2. The ZERO and OVER flags are always cleared. 3. If an error occurs, the JSON object method 'SyntaxError' can be used to retrieve that last error that was generated. *---------------------------------------------------------------------- The SyntaxError method is used to retrieve and return the last error that has been logged for the JSON object. This method uses the following format: [label] {object}.SyntaxError [GIVING {return}] Where: label Optional. A Program Execution Label. object Required. A JSON object previously declared. return Optional. A Character Variable that returns the last error logged for the JSON object. Flags Affected: EOS, OVER, ZERO Notes: 1. The EOS flag is set if the output error string is truncated because the {return} variable is too small. 2. The ZERO and OVER flags are always cleared. 3. If an error occurs that is logged, the JSON object 'SyntaxError' method is used to retrieve the error number and position. This message returns the logged error in the following format: "Syntax error X at position Y" Where: 'X' is the decimal number assigned to the logged error. 'Y' is the decimal position of the error in the JSON string. The possible 'X' errors are defined as follows: Error Description 1 - JSON syntax missing indent. 2 - JSON syntax unexpected character. 3 - JSON error syntax no node. 4 - JSON array syntax expected. 5 - JSON object syntax expected. 6 - JSON error syntax unknown name. 7 - JSON syntax array index error. 8 - Invalid array index $ identifier. 9 - Unknown array index identifier. 10 - Unexpected array index character. 11 - JSON Root not found! - In the 'PL/B Language Reference' manual, modified the 'Column Properties (DATATABLE) table to remove the 'WEBSTYLE' property. *============================================================================== The following files have been changed as noted: ------------------------------------------------------------------------------- Sunbelt GitHub Updates - This GitHub link has 'sunbelt-plb-samples' as follows: https://github.com/KcsDev1982/sunbelt-plb-samples ------------------------------------------------------------------------------- PLBWEBSRV (HTML\JS\CSS) - Modified to support 10.7A changes. plbwebbasic.css 10.7A 250120 plbwebipad.css 10.6B 240409 plbwebbasic.js 10.7A 250226 plbwebctls.js 10.7A 250122 plbwebmob.js 10.0A 180402 Support jQuery Mobile plbwebboot.html 10.2A 191210 plbwebtvcssinfo.html 9.9 161028 plbmobstart.html 10.0A 180402 Support jQuery Mobile plbwebstart.html 10.0A 180402 plbwebstartwv.html 10.5 220524 Support Bootstrap 5 plbwebstart99a.html 9.9A 170428 ------------------------------------------------------------------------------- PLBWIN, PLBCLIENT - Added UNC support to WebView initialization. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLBWEBSRV (Windows) - Modified the RUNTIME object 'HttpResponse' method to correct a problem where unexpected behaviors could occur when the order of the parameters were different than documented. - Corrected a problem where a font could not be loaded/used by a PRTPAGE to be output into a 'pdf:' file. This problem would occur if the font was installed on a Windows OS only for a current user. ------------------------------------------------------------------------------- PLBSERVE(Windows), PLBWEBSRV(Windows), PLBSERVE(UNIX), PLBWEBSRV(UNIX) - Corrected a GPF error that would occur when the ADMIN_MAIL_TRACE or ADMIN_MAIL_TRACEAPPEND keywords were being used. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX), PLBWEBSRV - Removed the WEBSTYLE property from the DATATABLE columns collection. - Corrected a problem where an UNPACK with a resulting length of 17940 would fail with a F14. - Corrected a problem where the CHOP {source} FP could be set incorrectly when the {source} and {dest} variables were the same. This could occur when the 'LEADING' and/or 'TRAILING' keywords were being used. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLBWEBSRV, ALL GUI CLIENTS - Added a new control named *EDIT for the PRTPAGE instruction. This control is used to create a PDF variable field when the Sunbelt 'pdf:' output is being generated. By default, this control creates a PDF 'Text Field' as described under the 'Interactive Forms' ( Section 12.7.4.3 ) in the Adobe document 'PDF 32000-1:2008'. A PDF 'Text Field' can accept input keyed data from a user as the PDF is being rendered by a PDF reader. The format of this PRTPAGE control is as follows: *EDIT={top}:{bottom}:{left}:{right}:{svarslit} Where: {top} - Top print position for the PDF variable field on a print page. {bottom} - Bottom print position for the PDF variable field on a print page. {left} - Left print position for the PDF variable field on a print page. {right} - Right print position for the PDF variable field on a print page. {svarslit} - A string of *EDIT commands used to provide attributes and behaviors to the PDF variable field. The *EDIT commands actual generated PDF commands which take affect when the PDF file is being processed by a PDF reader. See the description in the Documentation section for more details. - Modified the WINDOW object 'show' method to set the object Active flag when it is executed. This helps to prevent unexpected behaviors after the 'show' method is executed. - Modified the maximum number of objects in a PLF form from 500 to 2000. This change fixes an unexpected error when a '.xplf' is being loaded and it has more than 500 objects. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBWEBSRV, ALL GUI CLIENTS - Modified to fix event object data in the event stack. ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Modified the WINDOW 'scale' method to prevent a GPF error that might occur when the method was executed without any parameters. ------------------------------------------------------------------------------- PLBCMP - Modified the instructions OCCURS, CONVERTUTF, DECODE64, and ENCODE64 to generate an appropriate error when an invalid delimiter syntax was encountered. These changes correct a problem where invalid pCode was generated without generating a compiler error. If this program was executed, the bad pCode would cause a PL/B runtime GPF error. Example of syntax error: OCCURS ";". SEARCH, RESULT - Modified the compiler to support the PRTPAGE *EDIT control used to allow variable editable fields to be created in the Sunbelt 'pdf:' output. See the Documentation section for more details. - Modified the compiler to support the new DATASET object. See the Documentation section for more details. - Modified the compiler to support the new JSON object. See the Documentation section for more details. ------------------------------------------------------------------------------- PLBEQU.INC - Added DATASET properties: COUNT, DATAFILTER, DATATYPE, MAXITEMS and NULLSIZE. ------------------------------------------------------------------------------- PLBMETH.INC - Added DATASET and JSON objects with methods. ------------------------------------------------------------------------------- SUNIDE.PLC - Corrected the transfer of watch, tracepoint, and breakpoint info between edit and debug modes. - Corrrected a hang issue in Build All of a new project. - Build All now positions to the first totals line of a file that has errors or the grand totals line if no errors. - Project files that are edit only no longer show the red outdated icon when saved. - Corrected object selection when showing object properties for watch or tracepoint addition. - No longer shows create only properties for objects during watch or tracepoint addition. - Corrected the FindInFile/ReplaceInFile search modes to only change the mode when necessary after a change in the project tree selection or the opening or closing of files. - When the FindInFiles dialog is in "Leave Open" mode, the search modes are updated when the dialog is activated. - Corrected an issue that would cause a hang when the first program is added to a new project. - The "Break First Statement" debug open is set and disabled when using the integrated debugger. - Corrected the "Remove Folder" menu item text. - Corrected the execution of debugger when selected from the Project menu or pressing the F8 key. - Corrected the display of the Help About dialog. - Corrected execution of the New Folder function when selected from the menu. - Corrected files tabcontrol issue when viewing a listing on a window. - Corrected an issue with the Save Project As function. - Added the project file name to the Options dialog title. - Modified new watch and tracepoint routines to automatically select any passed label. - Formatted hexadecimal values to display as unsigned with no leading zeros. - Corrected an issue with setting a new watch variable from the watch toolbar. - Added Print button to the Last Error dialog. - Added the ability to watch object properties. - Corrected the font initialization logic to prevent errors and provide alternate fonts. - Added the ability to set tracepoints on object properties. - Now allows property values modification in the quick watch window - Modified watches and tracepoints for list type properties to use the descriptive text. - Corrected bookmark clearing and detection in the designer code if running as a loadmod. - Watch and Trace values are now restricted by the variable or property type. - Improved the toolbar appearance in all output windows. ------------------------------------------------------------------------------- DESIGNER.PLC - Corrected the initialization logic to restore the Designer's main window to a maximized state properly. - Now prevents the WebHeight, WebLeft, WebPosition, WebTop, and WebWidth properties from being applied to the design form. The values are output when the form is saved to disk. - When setting the WebHeight, WebLeft, WebPosition, WebTop, and WebWidth properties, the related Win32 property will be disabled and shown in blue in the properties window. - Modified the Outline to sort the objects by the selected property value when showing tab ids, object ids, help ids, group ids, and zorders. - Set all designer form objects to MS Sans Serif 10. - Set the height of all EditText, EditNumber, and EditDateTime objects to a height of 26. - Corrected the Notes window display in Individual Windows mode. - Corrected the Scale and WebStyle properties for DataTable columns. - Corrected positioning of TabPanels for web TabControls. - Set all Designer splitter objects to a color of $ScrollBar. - Corrected the default starting positions of Designer forms in Individual Window mode. - Corrected the icon preview in the ImageList editor. - Corrected XPLF to PLF conversions in the Form Conversion function. - Corrected code object and event following in the integrated combined layout format. - Corrected file tab labels when using the integrated combined layout format. - Added Group By Object Type selection to the Outline toolbar. - Added Find in Outline selection to the Outline toolbar. ------------------------------------------------------------------------------- EDITOR.PLC - Added a function that reports the first label at or before the current line. - Corrected the shortcut menu label type checking in edit mode. - Corrected code list filtering for labels containing numbers such as "Dim250". - Corrected enabling of menu items based on use of the SunIDE integrated debugger. - Added function to enable modification tracking when the OpenFile routine is not used by the host application. - Corrected setting of the File Modified flag when the OpenFile routine is not used by the host application. - Corrected issues determining when a label is and execution label. -------------------------------------------------------------------------------