Date: 04-04-2007 Subject: PATCH RELEASE 9.2C Runtime Files These release notes pertain to the following programs or files: EMBEDINI.EXE 9.2C 04 Apr 2008 9,2,3,500 MAKECLI.EXE 9.2C 04 Apr 2008 9,2,3,500 MAKECON.EXE 9.2C 04 Apr 2008 9,2,3,500 MAKEDEF.EXE 9.2C 04 Apr 2008 9,2,3,500 PLBCLIENT.EXE 9.2C 04 Apr 2008 9,2,3,500 PLBCLINET.EXE 9.2C 04 Apr 2008 9,2,3,500 PLBCON.EXE 9.2C 04 Apr 2008 9,2,3,500 PLBDSIGN.EXE 9.2C 04 Apr 2008 9,2,3,500 PLBNET.EXE 9.2C 04 Apr 2008 9,2,3,500 PLBSERVE.EXE 9.2C 04 Apr 2008 9,2,3,500 PLBWIN.EXE 9.2C 04 Apr 2008 9,2,3,500 SETGUID.EXE 9.2C 04 Apr 2008 9,2,3,500 SUNMOD.EXE 9.2C 04 Apr 2008 9,2,3,500 SUNSORT.EXE 9.2C 04 Apr 2008 9,2,3,500 SUNAAMDX.EXE 9.2C 04 Apr 2008 9,2,3,500 SUNINDEX.EXE 9.2C 04 Apr 2008 9,2,3,500 ODSBAC32.DLL 9.2C 04 Apr 2008 PLBWSEC.DLL 9.2C 04 Apr 2008 9,2,3,500 SA_DLL32.DLL 9.2C 04 Apr 2008 9,2,3,500 SUNWADO.DLL 9.2C 04 Apr 2008 9,2,3,500 SUNWODBC.DLL 9.2C 04 Apr 2008 9,2,3,500 SUNWMSQL.DLL 9.2C 04 Apr 2008 9,2,3,500 SUNWSRV.DLL 9.2C 04 Apr 2008 9,2,3,500 PLBCMP.PLC 9.2C 04 Apr 2008 DESIGNER.PLC 9.2C 04 Apr 2008 SUNIDE.PLC 9.2C 04 Apr 2008 EDITOR.PLC 9.2C 04 Apr 2008 DBGIFACE.PLC 9.2C 04 Apr 2008 PLBEQU.INC 9.2C 04 Apr 2008 *============================================================================== Notes for some NEW Items: - New COPYBYTES instruction. - New PLBCS_xxxx keywords for PLBCLIENT and PLBCLINET modules. - New compact option has been added for SUNINDEX utility and INDEX statement. This allows files to be reindexed while open and being used! - Added new options to the MAILSEND instruction. - Added a new property named 'SCROLLSIZEMODE={sizemode}' for the HSCROLLBAR and VSCROLLBAR objects. - Modified the IMAGELIST object to support new methods named AddLoadImage and AddLoadIcon. - Modified the WINDOW object to support a new method named GetObjectAsPointer. - Modified the PANEL object to support a new method named GetObjectAsPointer. - Modified the EDITDATETIME object to support the AUTOENTER property. - Added two new directives named FDECLARED & PDECLARED to the compiler. - Added a new compiler directive named '%STOREPLF {DimPtr}' to the compiler. *============================================================================== Notes for DOCUMENTATION: - The following description for the SETMODE *LOWERCASE needs to be added to the PL/B Language Reference Manual. This keyword was actually implemented in release 8.3C. *LOWERCASE={value|*RESET} Where: value Required. A previously defined Character Variable that specifies the lower case conversion table. This control modifies the runtime's lower case conversion table. When using *RESET with this control, the runtime case conversion table is initialized to its default startup state. This startup state is the same as when a runtime is initially loaded. When {value} is specified, each character pair found in the character string initializes a specific value in the lowercase conversion table. The first character of a character conversion pair identifies the table character entry changed and the second character identifies the new lowercase character value. Only the entries that need changing are specified. The initial state of the case conversion table is as follows: Runtime State PLBWIN The conversion table is initialized base on ASCII PLBCON character values for A to Z and a to z. PLB The lower case conversion table is independent of the *SHIFTINV and *UPPERCASE conversion tables. The lower case conversion table only affects the operation of the LOWERCASE instruction. - Additional error codes and subcodes for the MAILSEND instruction have been added as follows: New error code values have been added for the 'Mnn' error value as follows: Mnn The 'nn' value identifies the operands/options as follows: Value Operand 14 *TRACEAPPEND option 15 *DSNRECEIPT option 16 *MDNRECEIPT option 17 *RETURN option 18 *REPLYTO option New subcode values have been added for the 'sss' subcode error values as follows: sss Subcode Meaning 86 The DSN receipts are not supported by the email server. 87 EMSTP support is required at the email server before the DSNRECEIPT can be used. 88 The filename format for the ATTACHMENT or TRACE files is invalid. *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBCLIENT, PLBCLINET - Modified the client modules to support new keywords that cause the error dialogs to be user defined. In addition, new keywords have been implemented to allow automatic retry actions for logon errors. The new keywords are implemented as follows: KEYWORD DESCRIIPTION PLBCS_AUTORETRY={DefaultRetryCount} This keyword sets the default retry count that is applied to all applicable User error dialogs. PLBCS_AUTODELAY={DefaultDelaySeconds} This keyword set the default delay seconds timeout that is applied to all applicable User error dialogs. The following keywords are used to enable and control the data for individual error resource dialogs implemented for the clients. The basic descriptions for these keywords are implemented as follows: PLBCS_ERRORn={UserMessage} These keywords are used to enable the user-defined dialogs. The {UserMessage} string is specified as a single text line where any embedded '^' characters are translated into a LF character. Each user dialog can have 6 lines of data with a line length that is specific to each user dialog. PLBCS_TITLEn={UserTitle} These keywords are used set the Title bar for each user defined dialog. The {UserTitle} is a single text string that is used. These keywords are used for all user defined error dialogs. PLBCS_RETRYn={RetryCount} These keywords are used to set the retry count that is used for the User Defined Connection error Dialog and the Application Server timeout Dialog. This keyword is ignored for the other user error dialogs. The {RetryCount} value is specified as a decimal number. PLCS_DELAYn={DelaySeconds} These keywords are used to set a timeout for the User defined error dialogs. If the {DelaySeconds} timeout expires without any end user key actions, then the User defined error dialog is terminated with a positive key response. These keywords apply to all of the User defined error dialogs. PLBCS_ERROR0 - Enable User Connection Error Dialog. PLBCS_TITLE0 - Set the title for the User Connection Error Dialog. PLBCS_RETRY0 - Retry count for the User Connection Error Dialog. PLBCS_DELAY0 - Enable a timeout for the User Connection Error Dialog. PLBCS_ERROR1 - Enable User Communications Error Dialog. PLBCS_TITLE1 - Set the title for the User Communications Error Dialog. PLBCS_RETRY1 - NOT USED! PLBCS_DELAY1 - Enable a timeout for the User Communications Error Dialog. PLBCS_ERROR2 - Enable User Application Server timeout Dialog. PLBCS_TITLE2 - Set the title for the User Application Server timeout Dialog. PLBCS_RETRY2 - Retry count for Application Server User timeout Dialog. PLBCS_DELAY2 - Enable a timeout for the Application Server User timeout Dialog. PLBCS_ERROR3 - Enable User Application Error Dialog. PLBCS_TITLE3 - Set the title for the User Application Error Dialog. PLBCS_RETRY3 - NOT USED! PLBCS_DELAY3 - Enable a timeout for the User Application Error Dialog. Example of PLBCLIENT INI: [Environment] # # Default User Dialog Settings PLBCS_AUTORETRY=2 PLBCS_AUTODELAY=20 # PLBCS_ERROR0=Error0 User Message^Line2^Line3^Line4^Line5^Line6 PLBCS_ERROR1=ERROR1 User Message^Line2^Line3^Line4^Line5^Line6 PLBCS_ERROR2=ERROR2 User Message^Line2^Line3^Line4^Line5^Line6 PLBCS_ERROR3=ERROR3 User Message^Line2^Line3^Line4^Line5^Line6 PLBCS_TITLE0=User Application Title0 PLBCS_TITLE1=CaveSave Title1 PLBCS_TITLE2=CaveSave Title2 PLBCS_TITLE3=CaveSave Title3 PLBCS_DELAY2=5 PLBCS_RETRY2=0 PLBCS_DELAY3=10 PLBCS_DELAY4=15 ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX) - The INDEX instruction has been modified to support the ISI compact option as described below for the sunindex utility. - Modified the runtimes to minimize the disk IO used to verify the COMMON alignment during the program CHAIN/load operations. - Modified the CLOCK SYSDATE keyword to append the current time zone information to the system date that is being returned. The CLOCK SYSDATE is now described as follows: SYSDATE retrieves the system day, date, time and timezone (character string - Mon Apr 18 16:00:00 1986 -0600, 30 byte character string required or no result). (non-ANSI) - Modified the MAILSEND instruction to support the following features: 1. Added new optional keyword named '*REPLYTO={svarlit}': *REPLYTO={svarlit} This optional parameter specifies the e-mail address that a recipient is to send a reply to when responding to this email. 2. Added new optional keyword named '*DSNRECEIPT={svarlit}': The DSNRECEIPT notification gives the delivery status from the server that is used to deliver the e-mail message. *DSNRECEIPT={svarlit} This optional parameter specifies this e-mail is to require a Delivery Service Notification as specified by the {svarlit} string. The {svarlit} string can be specified as follows: *DSNRECEIPT="Never" or *DSNRECEIPT="Success,Failure,Delay" Where: Never No return receipts are returned. This string option cannot be combined with other options. Success There is to be a notification on the successful delivery of message. This option can be combined with Failure/Delay. Failure There is to be a notification when a delivery failure occurs. This option can be combined with Success/Delay. Delay This is to be a notification when the delivery of a message is delayed. This option can be combined with Success or Failure. When combining options, then commas MUST be used. 3. Added new optional keyword named '*RETURN={svarlit}': *RETURN={svarlit} This optional parameter is only valid when the *DSNRECEIPT keyword is used. This parameter specifies the recommended format of the return receipt that is being requested by the *DSNRECEIPT keyword. The {svarlit} string can be specified as follows: *RETURN="Full" or *RETURN="Hdrs" Where: Full The full message is to be returned with the receipt. This option is not combined with the other option. Hdrs The returned receipt should only contain the message headers. This option is not combined with the other option. 4. Added new optional keyword named '*MDNRECEIPT': The MDNRECEIPT is a client side 'Mail Disposition Notification'. The MDNRECEIPT is requesting a receipt from the client mail program that "reads" the e-mail messages. *MDNRECEIPT This optional parameter requests that a client program receipt is to be returned when the recipient reads this e-mail. 5. Modified the *ATTACHMENT, *TRACE, and *TRACEAPPEND options to support the file name conventions using the PLBENV_ and PLBVOL_ keywords. 6. Modified the *ATTACHMENT, *TRACE, and *TRACEAPPEND options to support the redirection file name format using the '|' to cause the files to be accessed/used as managed files using the Data Manager. 7. Modified the instruction processing for the Windows runtimes to interface the Windows OS to eliminate long periods of time where a PL/B program would be non-responsive when large e-mail messages and attachment files are used. - Modified the MODE option for a XFILE OPEN and PREP instruction to support a new bit definition named 'XFILE_NOOUTPUTEMPTYFIELDS'. When this new bit definition is set, then any empty fields are not output when a XML file is written. The XFILE_NOOUTPUTEMPTYFIELDS bit value is a follows: Keyword Value Meaning XFILE_NOOUTPUTEMPTYFIELDS 0x00000400 Do not write empty fields to a XML file. - Modified the memory allocation processing for a XFILE to improve the performance. The change corrects a problem where an excessively long time was occurring while stopping a program that contained XFILE variables with a very large amount of XML data. - Added a new instruction named COPYBYTES. This instruction returns the number of bytes transferred by the last enhanced COPYFILE instruction that has been required to copy a specified file. The COPYBYTES instruction retrieves the current number of bytes that have been used to transfer the source data file to the destination data file. The COPYBYTES value includes any overhead bytes required to support the transfer as well as the physical bytes in the source file. The instruction uses the following format: [label] COPYBYTES {retbytes] Where: label Optional. A Program Execution Label. retbytes Optional. A Numeric Variable that returns the number of bytes required to complete the transfer. Flags Affected: ZERO,OVER Note the following: 1. The ZERO flag is set when the COPYBYTES is executed successfully. 2. The OVER flag is set when the byte count that is stored into the {retbytes} variable is too large for the variable. 3. The {retbytes} value can be the same, less or more than the physical disk file size depending on the mode used for the COPYFILE. This value does include protocol management data required to complete a file transfer. 4. The last COPYFILE byte count remains as the same value until the next COPYFILE is started. At that time, it is zero initially and a new byte count is set when the COPYFILE is finished. - Modified the .NET runtimes to support the LIC property for the NETCONTROL/NETOBJECT .NET objects. When a PLF includes .NET objects from a third party .NET assembly that require a validate license, the LIC property is stored into the PLF to allow subsequent loading of the objects in an end user application. - Corrected problems in the SORT instruction where the use of the use of single quote ( ' ) and double quote characters could cause syntax errors. Example of errors: sort "test.txt,testaaa.txt -1-2,R##1-42,' ',43-50,' '##" sort "#"test.txt,testbbb.txt -1-2,R##1-42,' ',43-50,' '###"" - Corrected a problem where a WRITE XFILE could execute with indeterminate results or cause a GPF error when more than 32767 data fields have been previously been created/released for an implicit XFILE used for a record set. This error could occur if an implicit XFILE is never explicitly closed by a PL/B program that then can cause the data field count overflow. - Corrected a problem where a CALLS instruction could scan a routine or function list from the wrong module when the CALLS {name} parameter was a string name without a specified entry point. In this case, the CALLS action is to first look for a routine or function in the current program before it tries to load a load module. This could cause indeterminate program execution or a GPF. - Corrected a problem where the enhanced CopyFile using the Update Mode did not work when copying a file to the Sundm Data Manager. This problem cased all data to be copied all of the time. - Corrected a problem where an OPEN instruction was giving an I11 error when an AFILE/IFILE declaration was used that had the 'NAME=' keyword option being used. This corrective change was made to allow the 9.2C OPEN instruction to execute the same as under an 8.7x runtime. ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Added a new property named 'SCROLLSIZEMODE={sizemode}' for the HSCROLLBAR and VSCROLLBAR objects. This property can be used in a CREATE instruction to override the Windows OS default sizes that are used when the HSCROLLBAR and VSCROLLBAR objects are created. By default, the Windows OS creates the HSCROLLBAR with an OS default height. Also, the Windows OS creates the VSCROLLBAR with an OS default width. These default sizes for the height and width can be different from the user specified Top, Bottom, Left, and Right values that are given in the CREATE instruction. If the SCROLLSIZEMODE property is set to a value of 1, then the CREATE instruction for the HSCROLLBAR/VSCROLLBAR objects forces the user specified sizes to be used for the scrollbars. This mode of operation can cause the scrollbar size to user controlled. If the SCROLLSIZEMODE property value is set to 0, then the Windows OS default sizes are used when a CREATE instruction is executed. If this property is not used in a CREATE instruction for the HSCROLLBAR/VSCROLLBAR objects, then the default is the same as setting this property to 0. The implementation of the SCROLLSIZEMODE property corrects a problem where a CREATE instruction for the HSCROLLBAR/VSCROLLBAR objects was unable to control the size of the scrollbars. - Modified the SETMODE *MCURSOR keyword to support a value of 9 to hide the current cursor for the PL/B program. The user can use any of the valid keyword values to make the cursor re-appear. - Modified the IMAGELIST object to support a new method named AddLoadImage. This new method allows a BITMAP resource to be loaded from a DLL or EXE module and it is stored into the IMAGELIST. ............................................................... . AddLoadImage Method . The AddLoadImage method loads a BITMAP resource as specified by the REOURCEID numeric value from a DLL or EXE as using the file name specified in the FILENAME parameter. The BITMAP resource image is stored into the IMAGELIST object. The method uses the following format: [label] {object}.AddLoadImage [GIVING {return}]: USING [*FILENAME=]{filename}: [*RESOURCEID=]{rezid} Where: {label} is an optional Program Execution Label. {object} is a required IMAGELIST object to be accessed. {return } is an optional Numeric Variable that receives the pass or fail result for the execution of the method. {filename} is a required Character String Variable or literal that identifies a DLL or EXE file to be accessed. {rezid} is a Numeric Variable or decimal value that is the resource identification number assigned to the BITMAP resource in the DLL or EXE module. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to a TRUE state when the {return} value is zero. Otherwise the ZERO flag is cleared. The {return} value is zero when the method execution is successful. If the {return} value is non-zero, then the LoadAddImage method execution has failed. 2. The OVER flag is set to a TRUE state if the {return} variable is too small and the returned value is truncated. Otherwise, the OVER flag is cleared. 3. The following {return} values describe possible error codes that can be returned by the AddLoadImage method. Error Comment 1 - The {filename} string is NULL. 2 - The {filename} name can not be loaded. 3 - Unable to load the BITMAP from the {filename} module. The {rezid} may not exist. 4 - There was an error adding the BITMAP image to the IMAGELIST object. - Modified the IMAGELIST object to support a new method named AddLoadIcon. This new method allows a ICON resource to be loaded from a DLL or EXE module and it is stored into the IMAGELIST. ............................................................... . AddLoadIcon Method . The AddLoadIcon method loads an ICON resource as specified by the REOURCEID numeric value from a DLL or EXE as using the file name specified in the FILENAME parameter. The ICON resource is stored into the IMAGELIST object. The method uses the following format: [label] {object}.AddLoadIcon [GIVING {return}]: USING [*FILENAME=]{filename}: [*RESOURCEID=]{rezid} Where: {label} is an optional Program Execution Label. {object} is a required IMAGELIST object to be accessed. {return } is an optional Numeric Variable that receives the pass or fail result for the execution of the method. {filename} is a required Character String Variable or literal that identifies a DLL or EXE file to be accessed. {rezid} is a Numeric Variable or decimal value that is the resource identification number assigned to the ICON resource in the DLL or EXE module. Flags Affected: OVER, ZERO Note the following: 1. The ZERO flag is set to a TRUE state when the {return} value is zero. Otherwise the ZERO flag is cleared. The {return} value is zero when the method execution is successful. If the {return} value is non-zero, then the LoadAddIcon method execution has failed. 2. The OVER flag is set to a TRUE state if the {return} variable is too small and the returned value is truncated. Otherwise, the OVER flag is cleared. 3. The following {return} values describe possible error codes that can be returned by the AddLoadIcon method. Error Code Comment 1 - The {filename} string is NULL. 2 - The {filename} name can not be loaded. 3 - Unable to load the ICON from the {filename} module. The {rezid} may not exist. 4 - There was an error adding the ICON to the IMAGELIST object. - Modified the WINDOW object to support a new method named GetObjectAsPointer. This method allows a user to retrieve a pointer reference to GUI objects that are currently attached to a WINDOW object. The pointer reference for the GUI objects must be assigned and referenced using the OBJECT variable. ............................................................... . GetObjectAsPointer Method . The GetObjectAsPointer method retrieves the program UDA address for a GUI object that is contained by a WINDOW object. The UDA address is stored into a OBJECT variable as specified by the GIVING parameter. This OBJECT variable is a pointer that can then be used to reference the WINDOW GUI object in PL/B instructions. The method uses the following format: [label] {object}.GetOjectAsPointer [GIVING {object}]: USING [*Key=]{key}: [*Flags=]{flags} Where: {label} is an optional Program Execution Label. {object} is a required WINDOW object to be accessed. {object} is an OBJECT variable that is to receive the UDA program address of the GUI object that is identified by the {key}. {key} is a Character String Variable, literal, or Numeric Variable that identifies the GUI object to be retrieved from the {object}. The {key} parameter is required. {flags} is a Numeric variable or decimal number whose value is a bit mask definition to control the operations of the GetObjectAsPointer method. Flags Affected: ZERO and OVER Note the following: 1. The ZERO flag is set to a TRUE state when the GUI object address value is zero that was stored into the {object} variable. Otherwise, ZERO flag is cleared. 2. The OVER flag is set to a TRUE state when the requested GUI object specified by the {key} parameter does not exist. Otherwise, the OVER flag is set to FALSE when the GUI object does exist. 3. The {key} parameter is required. When it is specified as a Character String Variable or literal, then the string data is the RUNTIME property name for the GUI object that is being retrieved. When the {key} parameter is specified as a Numeric Variable or value, then the numeric value is the zero-based index number used to retrieve the GUI object from the {object} child list. 4. The {flags] parameter is a bit masked value that controls the method operations as follows: Bit Mask Value Comment 0x00000001 - Retrieve the MENU/SUBMENU/FLOATMENU objects that have been created for the WINDOW object. - Modified the PANEL object to support a new method named GetObjectAsPointer. This method allows a user to retrieve a pointer reference to the child GUI objects that are currently attached to a PANEL object. The pointer reference for the GUI objects must be assigned and referenced using the OBJECT variable. ............................................................... . GetObjectAsPointer Method . The GetObjectAsPointer method retrieves the program UDA address for a GUI object that is contained by a PANEL object. The UDA address is stored into a OBJECT variable as specified by the GIVING parameter. This OBJECT variable is a pointer that can then be used to reference the PANEL GUI object in PL/B instructions. The method uses the following format: [label] {object}.GetOjectAsPointer [GIVING {object}]: USING [*Key=]{key}: [*Flags=]{flags} Where: {label} is an optional Program Execution Label. {object} is a required PANEL object to be accessed. {object} is an OBJECT variable that is to receive the UDA program address of the GUI object that is identified by the {key}. {key} is a Character String Variable, literal, or Numeric Variable that identifies the GUI object to be retrieved from the {object}. The {key} parameter is required. {flags} is a Numeric variable or decimal number whose value is a bit mask definition to control the operations of the GetObjectAsPointer method. Flags Affected: ZERO and OVER Note the following: 1. The ZERO flag is set to a TRUE state when the GUI object address value is zero that was stored into the {object} variable. Otherwise, ZERO flag is cleared. 2. The OVER flag is set to a TRUE state when the requested GUI object specified by the {key} parameter does not exist. Otherwise, the OVER flag is set to FALSE when the GUI object does exist. 3. The {key} parameter is required. When it is specified as a Character String Variable or literal, then the string data is the RUNTIME property name for the GUI object that is being retrieved. When the {key} parameter is specified as a Numeric Variable or value, then the numeric value is the zero-based index number used to retrieve the GUI object from the {object} child list. 4. The {flags] parameter is a bit masked value that controls the method operations. This parameter is available for future usage. - Modified the EDITDATETIME object to support the AUTOENTER property. - Modified the runtime to create the Main window with an initial size that does not overlap the Windows Taskbar. - Corrected a problem where the SETITEM instruction with an {item} value of 1 did not perform the OEM to ANSI translation for the EDITTEXT and RICHEDITTEXT objects when the PLB_ANSI_OEM keyword was set to ON or CONSOLE. Otherwise, the OEM to ANSI translations occurred as expected when the PLB_ANSI_OEM was set to ON or CONSOLE for other instructions using these GUI objects. - Corrected a problem where the INSERTITEM instruction die not perform the OEM to ANSI translation for the EDITTEXT and RICHEDITTEXT objects when the PLB_ANSI_OEM keyword was set to ON or CONSOLE. Otherwise, the OEM to ANSI translations occurred as expected when the PLB_ANSI_OEM was set to ON or CONSOLE for other instructions using these GUI objects. - Corrected a memory leak problem that was occurring when a PICT object was being repainted. This memory leak problem would eventually cause the PICT object picture to stop being repainted/refreshed. - Corrected a problem where a horizontal scrollbar on a WINDOW or PANEL may not be updated correctly. - Corrected a problem where a CHECKBOX object might not become visible when it was in a COLLECTION that was activated using an ACTIVATE instruction. ------------------------------------------------------------------------------- PLBCON - Corrected a problem where a PL/B program could hang in an endless loop when a 'TRAP RTN NORESET IF INTERRUPT' instruction was used and the application user keyed 'Ctrl C' or clicked on the close button ( X ) for a command shell. ------------------------------------------------------------------------------- PLBNET - Corrected a problem where the MATCH instruction did not set the LESS flag when a character value larger than 127 was used in the operands for the instruction. Example: A INIT 0xFF B INIT 0x30 . MATCH A, B ;LESS SHOULD BE SET! - Corrected a problem where the 'READ IFILE, KEY' ISI key position was set to an invalid key position when the KEY contained a character value larger than 127. Example: IFILE IFILE KEY INIT 0xFF . OPEN IFILE,.... ... READ IFILE, KEY;S$CMDLIN . ------------------------------------------------------------------------------- PLBNET, PLBCLINET - Corrected a problem where a memory leak could occur if an exception for an ActiveX control occurred and then an exception for a .NET control occurred in the same PL/B program. ------------------------------------------------------------------------------- PLBCMP - Modified the compiler to support the SCROLLSIZEMODE property for the HSCROLLBAR and VSCROLLBAR GUI objects. See the description above for more details on this property. - Modified the compiler to support the DSNRECRIPT, MDNRECRIPT, RETURN, REPLYTO options for the MAILSEND instruction. - Modified the EDITDATETIME object to support the AUTOENTER property. - Added two new directives named FDECLARED & PDECLARED. These directives are used in a %IF conditional compiler directive. The FDECLARED directive only identifies the existence of a label in the scope of a FUNCTION. The PDECLARED directive only identifies the existence of a label outside the scope of a FUNCTION. ....................................................................... FDECLARED Compiler Directive The FDELCARED compiler directive allows conditional compilations based on the existence of a specified label within the namespace of a FUNCTION. The instruction uses the following format: FDECLARED({label}) Where: label Required. A valid data or program execution label. Flags Affected: NONE Note the following: 1. This directive operator is only valid in %IF, CIF, %ELSEIF, or CELSEIF statements. 2. The exact syntax of the directive must be followed. 3. This directive identifies labels that exist ONLY within the scope of a FUNCTION/FUNCTIONEND declaration. 4. During compilation, the operator is replaced with a single digit as follows: Digit When the label is ... 0 neither a data nor execution label reference. 1 a data label reference. 2 an execution label reference that is unresolved. 3 both a data and an execution label reference that is unresolved. 4 an execution label reference that is resolved. 5 both a data and an execution label reference that is resolved. 5. An execution label is unresolved when it has been placed into the symbol table before the statement that declares the execution label is encountered. 6. An execution label is resolved when the program statement that declares the execution label is encountered. Example: FUNC FUNCTION TEST DIM 100 ENTRY . TYPE TEST IF NOT EOS %IF PDECLARED(EXIT) == 2 *.... . This is expected at this point during compilation!!! . DISPLAY "'EXIT' label is Unresolved forward reference!" %ELSEIF PDECLARED(EXIT) == 5 DISPLAY "'EXIT' label is resolved reference!" %ELSE DISPLAY "'EXIT' label does not exist!" %ENDIF RETURN . ENDIF EXIT %IF PDECLARED(EXIT) == 2 DISPLAY "'EXIT' label is Unresolved forward reference!" %ELSEIF PDECLARED(EXIT) == 5 *.... . This is expected at this point during compilation!!! . DISPLAY "'EXIT' label is resolved reference!" %ELSE DISPLAY "'EXIT' label does not exist!" %ENDIF . FUNCTIONEND //End of the FUNC function! ....................................................................... PDECLARED Compiler Directive The PDELCARED compiler directive allows conditional compilations based on the existence of a specified label in the program namespace and not with the namespace of a FUNCTION. The instruction uses the following format: PDECLARED({label}) Where: label Required. A valid data or program execution label. Flags Affected: NONE Note the following: 1. This directive operator is only valid in %IF, CIF, %ELSEIF, or CELSEIF statements. 2. The exact syntax of the directive must be followed. 3. This directive identifies labels that exist within the namespace of a program and not within the namespace of a FUNCTION/FUNCTIONEND declaration. 4. During compilation, the operator is replaced with a single digit as follows: Digit When the label is ... 0 neither a data nor execution label reference. 1 a data label reference. 2 an execution label reference that is unresolved. 3 both a data and an execution label reference that is unresolved. 4 an execution label reference that is resolved. 5 both a data and an execution label reference that is resolved. 5. An execution label is unresolved when it has been placed into the symbol table before the statement that declares the execution label is encountered. 6. An execution label is resolved when the program statement that declares the execution label is encountered. Example: TEST DIM 100 . USE_RTN ROUTINE TEST . TYPE TEST IF NOT EOS %IF PDECLARED(EXIT) == 2 *.... . This is expected at this point during compilation!!! . DISPLAY "'EXIT' label is Unresolved forward reference!" %ELSEIF PDECLARED(EXIT) == 5 DISPLAY "'EXIT' label is resolved reference!" %ELSE DISPLAY "'EXIT' label does not exist!" %ENDIF RETURN . ENDIF EXIT %IF PDECLARED(EXIT) == 2 DISPLAY "'EXIT' label is Unresolved forward reference!" %ELSEIF PDECLARED(EXIT) == 5 *.... . This is expected at this point during compilation!!! . DISPLAY "'EXIT' label is resolved reference!" %ELSE DISPLAY "'EXIT' label does not exist!" %ENDIF RETURN //End of the USE_RTN! - Added a new instruction named COPYBYTES. This instruction returns the number of bytes transferred by the last enhanced COPYFILE instruction that has been required to copy a specified file. See description in the runtime section. - Added a new compiler directive named '%STOREPLF {DimPtr}'. This compiler directive collects program information for any PLFORM directive statements that are encountered after the %STOREPLF is executed. The {DimPtr} MUST be a simple DIM pointer declaration that is not an array and is not initialized. The compiler generates a delimited data string that includes the Label of the PLFORM statement as well as the PLF file name for the specified. A comma character is used to separator the Label and the PLF names. A semicolon character is used to separate data for each PLFORM statement. Format: %STOREPLF {DimPtr} Where: {DimPtr} - The destination {label} must be a previously declared DIM pointer that is not an array and is not initialized. Note: 1. The PLFORM statement data is stored at the end of the user PLC program UDA. In addition, the {DimPtr} pointer is initialized to point to the collected PLFORM data. 2. If the compiler does not encounter an PLFORM statements after the %STOREPLF directive, then the {DimPtr} remains as an non-initialized pointer. The MOVEPTR instruction can be executed for the {DimPtr} to determine if it is initialized or not. Example: PlfData DIM ^ . ABC PLFORM First.PLF . %STOREPLF PlfData ;Start collecting PLFORM data! . RST PLFORM "Second.PLF" . XYZ PLFORM "Third.PLF" . ... . MOVEPTR PlfData, PlfData IF OVER DISPLAY "Not %STOREPLF data!" ELSE DISPLAY "PlfData:",*ll, PlfData END . For this program logic, the compiler collects PLFORM data in the following format and stores it into a DIM variable at the end of the UDA. Then it initializes the PlfData program DIM pointer to point to the collected data. "RST,Second.PLF;XYZ,Third.PLF" - Modified the compiler to support the LIC property for the NETCONTROL and NETOBJECT .NET objects. When a PLF includes a third party .NET assembly with objects that requires a validate license, the LIC property is stored into the PLF to allow subsequent loading of the objects in an end user application. - Corrected a problem where the 'ELSE IF' statement was not verifying a blank termination character for an expression. Example of Problem: NDX FORM "1" ARR DIM 10(2) . IF ZERO ELSE IF (NDX)="Test") ENDIF - Corrected a problem where the LABELTEXT object could not be compiled in the EXPLODE/IMPLODE instructions. - Corrected a problem where the DEFINED directive did not report the existence of labels in the program space when the DEFINED directive was used inside a FUNCTION declaration. Example of Problem that has been corrected: A DIM 1 . FUNC FUNCTION ENTRY . %IF DEFINED(A) == 1 MOVE "1", A %ENDIF . FUNCTIONEND ------------------------------------------------------------------------------- PLBDSIGN - Modified the designer to support the SCROLLSIZEMODE property for the HSCROLLBAR and VSCROLLBAR GUI objects. See the description above for more details on this property. - Modified the EDITDATETIME object to support the AUTOENTER property. ------------------------------------------------------------------------------- SUNINDEX - Changed the product version identifier for utilities. - Modified the SUNINDEX utility to support a compact option named '-c[=n]'. The compact option reads all of keys in an ISI file and rebuilds the ISI file with all of the keys packed to reduce the number of isam tree sectors. The compact option has been implemented to allow the ISI to be compact in-place. Also, the compact option has modes to adapt to various environments that an end user encounters. Command Line Syntax: sunindex ISI -c[=n] ;Format (1) sunindex ISI[,OUTISI] -c[=n] ;Format (2) The available modes of execution for compact option are as follows: -c - Default compact. ISI and TXT files are opened in a shared mode and the TXT file is locked for the duration of the compact operation. When using the format (2), the ISI command line is changed to specify the OUTISI name as the output for any future re-index operation. -c=0 - Compact operation is executed the same as the default '-c' option except the ISI command line is NOT changed. -c=1 - The compact operation is executed where the compact locking is NOT used. In this case, the TXT file is opened in an EXCLUSIVE mode to insure that the sunindex utility has control of the files to execute the compact. This option can not be specified in the same command line as the '-c' option. -c=2 - The compact operation is executed without accessing the TXT file. In this case, the ISI file is opened in the exclusive mode. This option is only available under Windows and is not available under Unix. Examples: sunindex xfile -c ;Locking used! sunindex xfile, out -c ;Locking used! ISI command changed! sunindex xfile, out -c=0 ;Locking used! ISI command not changed! sunindex xfile -c=1 ;Locking NOT used. TXT opened ; exclusive. sunindex xfile -c=2 ;Locking NOT used. TXT not used! ;ISI file opened exclusive. ------------------------------------------------------------------------------- SUNAAMDX - Corrected a problem where the Unix sunaamdx utility was always setting the input file permissions to be Read/Write. ------------------------------------------------------------------------------- PLBEQU.INC - Added the SCROLLSIZEMODE property for the HSCROLLBAR and VSCROLLBAR objects. ------------------------------------------------------------------------------- SA_DLL32.DLL - Change the product version identifier. ------------------------------------------------------------------------------- SUNWODBC.DLL - Change the product version identifier. ------------------------------------------------------------------------------- SUNWMSQL.DLL - Change the product version identifier. ------------------------------------------------------------------------------- SUNWADO.DLL - Change the product version identifier. ------------------------------------------------------------------------------- SUNWSRV.DLL - Change the product version identifier. ------------------------------------------------------------------------------- SUNIDE - Corrected a SaveAll response handing problem when refresh dependencies was selected. - Corrected a bug in the .mak file generation where the compiler would not be correctly defined. - Modified to allow build and execute without a configured runtime in the IDE options. When the IDE is not a configured, the IDE tries to use the currently executing runtime and the command line is the runtime plus plbcmp. Ex: "c:\sunbelt\plbwin.92\code\plbwin.exe plbcmp" - Modified execute/debug processing to handle cases where the ide or project configured runtime may not have specified an extension. ------------------------------------------------------------------------------- EDITOR - Designer related enhancements. ------------------------------------------------------------------------------- DBGIFACE - Corrected a problem where the context menu variable value would not display if you right clicked on an array. - Fixed up breakpoint handling to indicate breakpoints with the bookmark image in the margin. ------------------------------------------------------------------------------- DESIGNER - Added name property validation for TabPanels. - Implemented the TabPanel Insert and Remove functions. - Corrected ObjectTree rebuilding logic to handle. - Corrected issues with exporting to a pls file. - Corrected movement of .net objects. - Corrected access type for CauseValid property. - Corrected setting of the Index property in the property window. - The Change event is excluded from the events window for a Tab control that has associated tab panels since the designer will provide the change code. - Added a warning if user change event code is found when the TabPanels property is selected. This prevents the overwriting the user code. - Corrected renaming of array objects. - Added Visible property for .Net objects. - Corrected changing of an event label in the events window when a non-local label was used. - Corrected program looping issue in RenameObject. - Corrected object renaming issue. - Modified .Net toolbox to use a ToolStrip. - Modified to not reset the selected .net tool when not running under plbnet. - Modified to reset the selected standard tool when a .net tool is selected and vice versa. - Moved the creation of a backup file to the save function rather than the open function for both forms and reports. - Removed menu shortcut key specifications and added keypress event logic to support detection of main menu function and control key sequences (i.e., Ctrl+S) when the main window is not active. - Corrected an issue with renaming tab panels. - Corrected an issue regarding changing create-only properties. - Corrected F02 error when setting form properties. - Added logic to handing missing or invalid label and code templates. - Modified ReportError to not specify an attachment if the archive file isn't found. - Modified to show the sizing cursors during mousemove events on the sizing handles. - Reattached routine to close property and event edits when the listviews are scrolled. - Corrected property value listbox maximum height calculation. - Corrected I22 during problem replication package creation. - Added runtime version information to problem reports. - Added minimum runtime version checking. - Changed Code, Object Tree, and Field List windows from Modeless Dialogs to Sizable Windows. - Added logic to exclude parents or grandparents of a tab control from the list of panels available for insertion. - Modified tabcontrol panel insertion to set the panel's parent to the parent of the tabcontrol. - Corrected resetting of .net object MouseMove events when drawing was complete. - Modified form open to use read-only mode. - Modified form open to not lock the form by keeping it open exclusively during the edit process. - Added noting of the form size and last write time during open and save functions. - Added check of form size and last write time before save to catch modifications from outside the designer. - Modified initialization logic to detect presence of the undo file for recovery by using a FINDFILE rather than an OPEN. - Added optional flag to LOADPLFFILE instruction to allow forms with missing ActiveX components to conditionally continue loading. - Added code to load bitmaps from ActiveX controls. - Corrected multiple file opens to make all forms visible initially and attach all form events. - Added logic to bypass array creation prompt during recovery. - Corrected replacement of form prefix logic. - Removed the Save As Ansi option as this is controlled by a runtime keyword and not programatically. - Added checked property for editdatetime object. - Corrected edittype value for decimaldigits property. - Added logic to catch backup file protection errors. - Added logic to detect a resource in use when attempting to delete an existing resource. - Changed default icon and image in resource ID property list from (none) to an image that can actually be applied. - Added logic to prevent clicks on radio buttons, checkboxes, and editdatetimes that have a check box enabled to no toggle the checked state. - Modified to support a dynamic property value variable for .Net objects. - Added Auto Save on Test behavior option. - Now remembers the test error window's size and position. - Test error window is now a primary sizable window. - Added logic to catch a backup count of zero. - Corrected issues with drawing and sizing of line objects. - Corrected issues with renaming objects. - Added AutoEnter property for EditDateTime. - Removed .Net GroupBox from available objects due to its unpredictable behavior. - Added ClassID to ActiveX Browser info area during Examine function. - Added Test with Debug feature. - Now optionally creates labels automatically for EditNumber and EditDateTime objects as previously done for EditText. - Added code to retrieve and set ActiveX object properties. - Added ability to set a tab id value to zero using the right mouse click during renumbering. - Modified ActiveX control property setting to use Variants rather than string values. - Corrected naming of array members during output. - Redesigned the open and save logic to prevent rearrangement of the event code. - Set the read-only bit for event label and return statements in the code editor. - Added minimum editor version checking. - Corrected processing during recovery that could lead to an I22 error. - Added noting of selected form's initial position for subsequent move and size undo operations. - Corrected code that would sometimes result in an I83 subcode 11 when creating ActiveX objects. - Corrected issue that prevented more than one ActiveX control to be restored to the toolbox during initialization. - Corrected issue of loading an ActiveX control whose class id was not all upper case. ------------------------------------------------------------------------------- WATCH - Modified client display to show CPU time as hundredths of a second - Disabled display of CPU time on client display for Data Managers. - Added column sorting to Programs, Modules, Files, Isam, AAM, and spool tab listviews. - Added logic to perform a numeric column sort of listview data for columns that contain numeric values.