Date: 05-28-2004 Subject: RELEASE 9.0 Runtime Files Included you will find the patch release of: PLBSERVE 9.0 28 May 2004 9,0,0,0 PLBCLIENT 9.0 28 May 2004 9,0,0,0 PLBCLICON 9.0 28 May 2004 9,0,0,0 PLBWIN 9.0 28 May 2004 9,0,0,0 PLBDSIGN 9.0 28 May 2004 9,0,0,0 SUNAAMDX 9.0 28 May 2004 9,0,0,0 SUNINDEX 9.0 28 May 2004 9,0,0,0 SUNSORT 9.0 28 May 2004 9,0,0,0 SETGUID 9.0 28 May 2004 9,0,0,0 SUNMOD 9.0 28 May 2004 9,0,0,0 MAKEDEF 9.0 28 May 2004 9,0,0,0 EMBEDINI 9.0 28 May 2004 9,0,0,0 MAKECON 9.0 28 May 2004 9,0,0,0 MAKECLI 9.0 28 May 2004 9,0,0,0 . ODSBAC32.DLL 9.0 28 May 2004 PLBWSEC.DLL 9.0 28 May 2004 9,0,0,0 SUNFYSYS.DLL 9.0 28 May 2004 9,0,0,0 SUNFHDLL.DLL 9.0 28 May 2004 9,0,0,0 SUNFHDLL.LIB 9.0 28 May 2004 SUNWADO.DLL 9.0 28 May 2004 9,0,0,0 SUNWODBC.DLL 9.0 28 May 2004 9,0,0,0 SUNWMSQL.DLL 9.0 28 May 2004 9,0,0,0 SUNWSRV.DLL 9.0 28 May 2004 9,0,0,0 . PLBCMP 9.0 28 May 2004 PLBDBUG 9.0 28 May 2004 ADMEQU.INC 9.0 28 May 2004 PLBEQU.INC 9.0 28 May 2004 PLBMETH.INC 9.0 28 May 2004 *============================================================================== Notes for some NEW Items: - Modified PL/B File IO to support 64bit operations. - Added compiler directives %ENCRYPTON and %ENCRYPTOFF. - Modified to support INTEGER 8 construct. - Added support for AAMDEX, INDEX, and new SORT statements. - Added support for TRANSACTION statement. - Added new statements DECODE64, ENCODE64, and OCCURS - Added new statements LISTCNT and LISTGET to process COLLECTIONs. - Added new instruction WHEREIS. - Added new statements DMAKE, DFREE, and DRELEASE. - Upgraded DBxxxx database statements and added new DBxxxx statements. - Added new DBxxxx support DLLs named SUNWODBC, SUNWADO, & SUNWMSQL. - Added support for Large DIM constructs. - Added INT8 and PINT8 to PROFILE and WINAPI. - Added new properties for FONT object. - Added %AUTODIM directive for PLBCMP. - Added new GUI object named ANIMATE. - Added new GUI object named LABELTEXT. - Added PLBCS_SINGLEUSE keyword for PLBCLIENT. - Added support for NT Service in the PLBSERVE server. - Added new Object Tree view for PLBDSIGN. - Added IMAGELIST and TIMER object support in PLBDSIGN. - Added new GUI object named MENUITEM. - Added MENU, SUBMENU, and FLOATMENU object support in PLBDSIGN. - Added a generic object pointer named OBJECT. *============================================================================== Notes for WARNINGS: *NOTE* ---------------------------------------------------------------------- *NOTE* ALL PROGRAMS MUST BE RECOMPILED FOR VERSION 9.0 AND ALL ISAM AND AAM *NOTE* FILES MUST BE REINDEX WITH A 9.0 SUNINDEX OR SUNAAMDX COMMAND!!!!!!! *NOTE* ---------------------------------------------------------------------- - The SUNFHSYS DLL for version 9.0 is not compatible with any prior runtime releases. If the v9.0 SUNFHSYS is used with a v8.x PLBWIN, then the runtime gives the following error: 'Fatal error condition U40 encountered.' If a v8.x SUNFHSYS is used with a v9.0 PLBWIN, then the Windows OS gives the following error: 'The procedure entry point FhDbGetDataSources could not be located in the dynamic link library SunFhSys.dll' - The PLBWSEC DLL for version 9.0 is not compatible with any prior runtime releases. For any PLBWIN and PLBWSEC version conflicts, the PLBWIN runtime gives the following error: 'Fatal error condition U21 encountered. Internal diagnostic condition 9. Invalid version of PLBWSEC.DLL being used!' - The version 9.0 PL/B runtimes are not compatible and can not execute any PL/B programs compiled for any prior versions. A U12 error will occur if a v9.0 runtime attempts to execute an older version of a PL/B program. Use a v9.0 PLBCMP to recompile a program that encounters this error. - All of the ISI and AAM indices must be re-indexed/aamdexed to be used/accessed using v9.0 PL/B programs. - The default port numbers for PLBSERVE and SUNFM have been changed to be 3933 and 3934 respectively. The new port numbers are User Registered Port Numbers as assigned to the Sunbelt server products by IANA ( Internet Assigned Numbers Authority ). - If a version 9.0 runtime can not be used to log on to a version 8.x file manager. An appropriate I81 occurs if this is tried. In addition, a version 8.x runtime can not be used to log on to a version 9.x file manager. - Corrections have been implemented for the SEARCH instruction to eliminate indeterminate results and GPF errors when data variables other than DIM or FORM variables were found in the variable list. With changes implemented to correct these problems, the SEARCH instruction now stops searching through the variable list when a variable other than a DIM or FORM is encountered. - The ENCRYPT and DECRYPT instructions have been modified for Unix forward byte-order runtimes to generate encryption strings compatible with reverse byte-order runtimes. The users for forward byte-order systems need to be aware that the encryption strings for these instructions for the version 9.0 release are NOT COMPATIBLE with prior releases for any forward byte-order runtimes. *============================================================================== Notes for DOCUMENTATION: - Added an I36 error when using the keyword 'PLBWIN_XPIO'. I36 - An OS fileio function has caused an error while the runtime is attempting to validate a file size in support of the PLBWIN_XPIO keyword. - Change the documentation for the I56 description as follows: I56 - This error indicates that an ISI file size is invalid. If the subcode has a value of 90, then the OS is reporting an EOF size for the ISI file that is smaller than the EOF size expected in the ISI header. This error indicates a problem where the OS is not properly tracking/reporting when the ISI file is being extended. If the subcode has a value other than 90, then the OS API function to retrieve the ISI EOF size has given an error. This is an OS system problem. Subcode: 90 - AllocateSector EOF size invalid! The OS reported EOF size is shorter than the expected ISI file size. - Added new error I37 to identify ISI data errors that indicate data corruption problems. I37 - ISI isam tree data is invalid. Subcode: 90 - Data for the ISI tree structure is determined to be invalid when an ISI key sector is being de-allocated and added to the free sector list. The ISI data structure may be corrupted. 91 - A sector retrieved from the ISI free sector list has an invalid free sector ID. The ISI data structure may be corrupted. 92 - An invalid DDR sector ID has been encountered while while processing through the DDR sector list to remove a single DRN (Data Record Number). 93 - An invalid DDR sector ID has been encountered while reading the next sequential sector in the DDR sector list. - Update the TYPE instruction for variable type values as follows: Data Type Sunbelt SWDBC INTEGER (8) 2056 (0x0808) 2 PANEL 11824 (0x2E30) 16 SPLITTER 12080 (0x2F30) 16 EDITNUMBER 12336 (0x3030) 16 EDITDATETIME 12592 (0x3130) 16 LABELTEXT 12848 (0x3230) 16 ANIMATE 13104 (0x3330) 16 - Update the DIALOG object data variable to indicate that the GUI object is an obsolete data type. - An A07 error needs to be added to the runtime errors. The A07 error can occur when accessing a SUNFM file manager to perform a FILEPI operation and more than 50 managed files are specified for the FILEPI. - A U50 error has been added to the runtime errors. The U50 error occurs if insufficient memory is available to load the Auto Load DIM variables that have been compiled into a program. The Auto Load DIM variables are compiled into a program when the 'DIM ^size' syntax is used explicitly or implicitly in a program. - The error I13 has been implemented to indicate errors for file variable BUFFER/FIXED/VAR values. Also, this error can occur when an invalid record length is specified in a PREP instruction for AFILE and IFILE file variables. I13 - Invalid record length for a PREP instruction. The record length is zero or greater than the maximum allowed record size. This error can also occur if a file variable BUFFER/FIXED/VAR keyword value is greater than the maximum allowed record size. The maximum allowed record size can not exceed 65533. Subcode: 20 - File variable BUFFER keyword size is too large. 21 - File variable FIXED keyword size is too large. 22 - File variable VAR keyword size is too large. 23 - The record size specified for an IFILE PREP is invalid. 24 - The record size specified for an AFILE PREP is invalid. - The I76 error has been added to the runtime errors. I76 - The data file size larger than ( 2GB - 65535 ) is not allowed when Windows 95/98/ME OS types are being used. Subcode: 20 - 2GB file size error has been detected using IFILE header data when opened with fixed length records. 21 - 2GB file size error has been detected using IFILE header data when opened with variable length records. 23 - 2GB file size error has been detected for a file variable accessing the data file directly. - The I28 error has been added to the runtime errors. I28 - The runtime dead lock time out has occurred. The runtime time has waited in an implied FILEPI lock longer than the number of seconds specified by the PLBWIN_DEADLOCKTIMEOUT keyword. The user applications should be evaluated to determine what files are being locked in one application versus what files are being locked in a second application at the point where the I28 has occurred. *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - Modified the default port number to be 3933. The 3933 port number has been assigned as the 'PL/B App Server User Port' by IANA (Internet Assigned Numbers Authority). This is the default port number used if the PLBCS_PORTNUM keyword is not used. - Modified the PLBSERVE server to support ADMLOGON operations using the normal logon listening entry point for the server using the default port number used by the server. This change has been implemented to avoid the necessity to use a different port number when accessing the Administrative Services over a TCP/IP connection. By default this main logon capability is enabled for the PLBSERVE server when the 'ADMIN_PUBLIC=' security keyword is being used. In addition, the keyword named 'ADMIN_MAINLOGN={on|off}' can be included in the PLBSERVE INI file. If the 'ADMIN_MAINLOGON' keyword is set to 'OFF', ADMLOGON via the main logon entry point is disabled. - Modified the PLBSERVE runtime to allow a keyword to be searched for in the default PLBSERVE INI used by the server in the section named ENV_CHILD if the keyword is not found for the normal INI file processing. This change is being made to provide a means of specifying default keyword settings when a keyword is not found in a user specific INI file. - The PLBSERVE server has been enhanced to execute as a Windows service. This requires the use of the SUNWSRV.DLL file. This DLL file must be placed in the same location as the PLBSERVE.EXE file. New command line options have been added to the PLBSERVE server as follows: '-i' - The new '-i' command line option installs the PLBSERVE server as a Windows Service using a combination of the server name and the user serial number for identification. This allows multiple PLBSERVE servers to be used as a service on the same computer. The PLBSERVE Windows Service is installed in an automatic running state. This running state can be changed using the services control panel. '-d' - The new '-d' command line option deletes/uninstalls the PLBSERVE as a Windows Service. '-p' - The new '-p' command line option pauses the main PLBSERVE server logon process. When in a paused state, no new child or administrative tasks are created by the main logon process. All existing users still continue to run. The '-p' command line option can be used to pause the PLBSERVE server main logon task when the server is executing as a Windows Service or as a stand-alone server. When the PLBSERVE server is executing as a service, then the '-p' command line option, the services control panel, or the SC.EXE command can be used to pause the server. '-c' - The new '-c' command line option is used to allow the PLBSERVE server logon process to continue from a paused state. When the PLBSERVE server is executing as a service, then the '-c' command line option, the services control panel, or the SC.EXE command can be used. For stand-alone servers, only the '-c' command line option can be used. Note: 1. A PLBSERVE server service can be started by one of 3 ways: a) The service can be started automatically. b) The service can be started using the service control panel. c) The service can be started using the SC.EXE (Service Control) utility. 2. The '-s' command line option does not start a server as a service. It only starts a PLBSERVE server as a stand-alone process. 3. A PLBSERVE server service can be stopped using one of the following: a) The '-t' command line option can be used. b) The '-f' command line option can be used. c) The services control panel can be used. d) The SC.EXE command can be used. - A new keyword named 'PLBCS_CACHEAVIS={None|Mem|Disk}' has been added for the PLBSERVE server. This keyword specifies the default caching to be performed at a PLBCLIENT workstation for any AVI files obtained from a PLBSERVE server. NONE - No caching (default). MEM - Cache in-memory only. DISK - Cache in-memory and on disk. - Corrected a problem where the INI keyword searching was not being executed to access all possible INI files. This problem was occurring when the PLBSERVE server was started to use the default PLBSERVE.INI file. The keyword searching now is executed as documented by Note 8. for CLOCK INI in the Language Reference Manual. - Corrected a problem where a Unix PLBSERVE server was not setting up a PLBCLIUNX client terminal. This fix corrects problems with *EOFF and *+ for a KEYIN instruction when a Unix client was used. - Corrected a problem where an IMPLODE instruction could erase the instruction cache. This could cause a program to execute in an indeterminate manner because cached instructions were being lost. ------------------------------------------------------------------------------- PLBCLIENT- Modified the default port number to be 3933. The 3933 port number has been assigned as the 'PL/B App Server User Port' by IANA (Internet Assigned Numbers Authority). This is the default port number used if the PLBCS_PORTNUM keyword is not used. - A new keyword named 'PLBCS_SINGLEUSE={on|off}' has been added for the PLBCLIENT executable. When the PLBCS_SINGLEUSE is specified and set to be ON, then the PLBCLIENT executable only loads and executes one plbclient process. In this case, when a user attempts to load a second instance of PLBCLIENT, then the first load of plbclient is executed. When the PLBCS_SINGLEUSE is either set to be OFF or the keyword is not specified, then as many PLBCLIENT load instances can be loaded/executed as allowed by the server user license. - Added a command line option '-?' for PLBCLIENT and PLBCLICON clients to provide a command line syntax help screen. ------------------------------------------------------------------------------- PLBWIN - Modified the runtimes to support 64 bit File IO. This allows PLBSERVE files larger than 4GB to be processed by the PL/B File IO PLB (UNIX) language statements. - Modified the runtimes to always access a SUNFM file manager using a default Public Encryption key if a user's application does not specify an Encryption key to be used. This change insures that all data transferred to and from the SUNFM file manager is secured. - Modified GETFILE to support a RECORDCOUNT= and a DELETECOUNT= option. The RECORDCOUNT retrieves the current record count from an ISI header. The DELETECOUNT retrieves the current deleted record count from an ISI header. - Modified the runtimes to support an AAM/ISI header OS Type flag. The AAM/ISI index files can be created with a Windows or Unix OS Type. If the OS Type exists, then the AAM/ISI index file can only be opened by a runtime that is compatible with the OS Type stamp. If a Windows runtime attempts to open a Unix ISI or if a Unix runtime attempts to open a Windows ISI, then an I20 error occurs. The PREPARE instruction has been modified for an AFILE and IFILE to support a new MODE bit definition named CMP_BY_OSTYPE. When the CMP_BY_OSTYPE mode bit is specified for the PREP, then the AAM/ISI index file is marked with an OS Type depending on whether the runtime is a Windows or Unix type. CMP_BY_OSTYPE 0x00000800 Set AAM/ISI header flag that only allows index file to be opened by a compatible Windows or Unix runtime. - When using the keyword 'PLBWIN_XPIO=ON', an I36 error will be given that indicates a file size truncation problem has been detected. Prior to this change, an I56 error was being given. - Modified the Isam processing for Deleted Data Records to provide and verify a sector identifier for all DDR sectors. If an error is detected for an invalid DDR ID, then an I37 error with a subcode of 92 or 93 is given. If an I37 error occurs, then the ISI tree structure data is invalid and should not be used for further processing until it is corrected. - Modified the OPEN and PREP operations for accessing managed files on a SUNFM server to use a default port number of 3934 instead of 502. The 3934 port number has been assigned as a registered user port number by IANA ( Internet Assigned Numbers Authority ). - The optional File Access Mode parameter for an OPEN and PREP instruction has been modified to support a new mode named CMP_NO_TRAN. When a file variable is opened or preped using this mode bit type, then the file variable does not get included into a transaction. However, the file IO operations can be executed while a transaction is active. CMP_NO_TRAN 0x00001000 - Do not put file under a transaction - Added a new instruction named TRANSACTION. The TRANSACTION instruction is implemented for the PL/B language to allow a group of PLB file IO operations to be performed without modifying any data files until a COMMIT action is executed. This instruction is formatted as: [label] TRANSACTION {action}[,{options}] Where: label - optional Program Execution Label. action - one of the required actions from the table below. options - A list of options based upon the action operand. See notes below. Flags affected: EOS and OVER Note the following: 1. The {action} operand defines the action to be taken. It must be from the following table: START Starts a transaction COMMIT Ends the transaction and commits the data ROLLBACK Ends the transaction without committing the data SAVE Create a new save point RESTORE Restores back to a save point INFO Provides information on the state of the transaction 2. For a START {action} the {options} parameter can be list of logical FILE, IFILE, and/or AFILE variables or a FILELIST to be locked. Each file on the list is locked for the duration of the transaction. The list of files are referenced as a {file lock list}. The TRANSACTION START instruction gives a U48 error if it is executed while a transaction is active. 3. For a COMMIT {action} the {options} parameter can be a VERIFY or VERIFYREAD keyword. By default there is no data integrity verification performed by the COMMIT action. The reason for this default behavior is that all files specified by the TRANSACTION statement are locked for the transaction duration and thus the data files can not be changed by other processes that are using expected locking rules. However, there may be some special situations where a user application wants to perform additional data integrity verification. Additional data verification is initiated using the VERIFY or VERIFYREAD keywords with the transaction COMMIT action. VERIFY - This keyword causes all read/write data that is cached for the transaction to be verified when the transaction is committed. This mode insures that no data associated with the transaction has changed while the transaction was active. The VERIFY mode should only need to be used if there is a possibility that some application other than a Sunbelt application can change data in the data files being used for a transaction. VERIFYREAD - Use of this keyword causes a read text verification operation to be performed for file variables that are not included in the {file lock list}. This means that any data that has been read from a text data file is verified to insure that the text data has not been changed by another program. For this read text verification mode, an IO error occurs if any of the physical disk data associated with the cached read data has been changed after it has been read and before the commit operation is executed in the transaction. The read text verification mode does not occur when a file variable is included in the {file lock list} because; other programs can not change the data while the file variable is locked. The TRANSACTION COMMIT instruction gives a U48 error if it is executed when a transaction is not active. 4. For a RESTORE {action} the {options} parameter can be the 'LEVEL={dnumnvar}' keyword. If not specified, the RESTORE {action} restores to the previous level. Otherwise the RESTORE {action} restores to the specified level. The RESTORE action is used to restore the current cached file data to be the same as previously saved using a SAVE action. The TRANSACTION RESTORE instruction gives a U48 error if it is executed when a transaction is not active. 5. For an INFO {action} the {options} parameter can be the 'LEVEL={nvar}' keyword. The current transaction level is placed in the specified variable. A level of 0 means no transaction is taking place. The TRANSACTION INFO instruction can be executed any time regardless of whether a transaction is active or not. 6. For a SAVE {action} the {options} parameter can be the 'LEVEL={nvar}' keyword. The LEVEL keyword in this case is optional. In this case, the {nvar} numeric variable is used return the current level value after the save action is completed. The SAVE action saves all cached data currently in use for a transaction. The RESTORE action can be used to restore the cashed data files to be the same as save by a SAVE action. The TRANSACTION SAVE instruction gives a U48 error if it is executed when a transaction is not active. 7. A ROLLBACK {action} has no {options} parameter. The ROLLBACK action discards all cached data generated for a transaction. The state of the physical disk data files specified in the {file lock list} remains unchanged and the file variables are restored to an original state as when the transaction was started. The TRANSACTION ROLLBACK instruction gives a U48 error if it is executed when a transaction is not active. 8. Any file variables opened in the READ only mode do not need to be included in the {file lock list}. Any file IO operations for these files are executed and no resulting data for these files is maintained by the runtime for a transaction. 10. Any file variables opened in the EXCLUSIVE mode must be included in the {file lock list} to allow write operations under transaction control. 11. Transaction Errors - A transaction rollback is executed if an untrapped or untrappable error occurs. - A U48 error is given for programmatic errors. Sub-codes of U48 are from 200 to 299 201 Transactions not supported 202 Invalid operation/statement 203 Unknown statement type 204 A Transaction is already active 205 No active transaction 206 Greater than 250 save points 207 Bad restore value 208 No optimistic support 209 Commit and backout failed 210 DISPLAY redirection not allowed 211 SETPROP VISIBLE for COLLECTION, PLFORM, or a WINDOW object is not allowed. - An I27 error is given for transaction errors. Sub-codes of I27 are from 100 to 199 101 Memory allocation failed 102 Unable to get an EOF 103 EOF has moved 104 Unable to lock for commit 105 Read verify failed 106 IO error on commit 107 Maximum read gaps seen 108 I/O error on flush 109 2GB size violation error - An A06 error has been added for a TRANSACTION instruction. This error occurs when a file in the TRANSACTION START file list is not opened. - An A08 error has been added for a TRANSACTION instruction. This error occurs when a FILE variable opened in a Record Locking mode is included in the TRANSACTION START {file lock list}. ------------------------------------------------------------------ The TRANSACTION statement is implemented with the following capabilities and limitations: 1. A transaction supports both local files and managed files for multiple file managers. 2. A transaction locks all files in a manner consistent with FILEPI. This means that any files specified in the TRANSACTION START statement are locked in the same manner as a FILEPI. In addition, any IO operations for AAM and ISI files in a transaction, that are not included in the TRANSACTION START file list, cause an implied file lock to occur as normally expected. It should also be noted that a FILEPI statement can not be executed when a TRANSACTION is active. 3. A transaction supports record locking. Only AFILE and IFILE files opened for record locking can be included in a transaction and used in write operations. 4. A transaction only allows files that are specified in the TRANSACTION START {file lock list} to be used in write operations. An IO error occurs if a write operation is executed for a file variable that is not included in the {file lock list}. 5. Transaction support has been implemented for PL/B using the ACID (Atomicity Consistency Isolation Durability) rules: Atomicity A transaction represents an atomic unit of work. Either all modifications within a transaction are performed, or none of the modifications are performed. Consistency When committed, a transaction must preserve the integrity of the data within the system. If one part of the transaction fails, all of the pending changes are rolled back, leaving the database in its' original state. Isolation Modifications made by a transaction are isolated from the modifications made by other transactions. Durability After a transaction has been committed, all modifications are permanently in place in the system. 6. Transaction Limitations Only 250 concurrent SAVE points are allowed. When an invalid PL/B instruction is executed while a TRANSACTION is active, then an U48 untrappable error occurs. The following statements are not allowed under any TRANSACTION: ACTIVATE AAMDEX ALERT CLOSE COPYFILE CREATE DISPLAY (*W ONLY) ERASE EVENTCHECK EVENTWAIT EXECUTE EXTCALL FILEPI FORMLOAD GETFNAME INDEX KEYIN Object methods OPEN PAGESETUP PAUSE PREP PRINT PRTCLOSE PRTOPEN PRTPAGE PRTPLAY RELEASE RENAME ROLLOUT SETPROP (VISBLE property for COLLECTION, PLFORM, WINDOW) SNDOPEN SORT SPLOPEN SPLCLOSE TRANSACTION START WEOF A TRANSACTION ROLLBACK is performed for the following instructions: CHAIN DSCNCT DETACH SHUTDOWN STOP - The DBxxxx instructions have been updated and improved to provide a better interface to multiple Database Engines. 1. The Windows implementation now supports Active Data Objects (ADO), MySQL, and Open DataBase Connectivity (ODBC). 2. ODBC, MySQL, and PostgresSQL are supported for Unix/Linux. 3. The DBxxxx instruction set has been enhanced to allow multiple connections to different Database Engines at the same time. In addition, the user's application can have multiple active SQL statements that provide different result data sets using multiple DBSTATEMENT variables for a single connection of a DBFILE variable. 4. A new data variable named DBSTATEMENT has been added. A DBSTATEMENT variable declares a working storage for a database SQL statement. 5. The following instructions support either a DBFILE or a DBSTATEMENT variable. DBBREAK Halt an executing query. DBCLEAR Clears out any data placed by a DBSEND. DBERROR Obtain error information from a remote database. DBEXECUTE Execute a query on a remote database. DBFETCH Return one row of a query result. DBSEND Send all or part of a query to a remote database. DBSTATE Determine the state of query. The following are NEW instructions: DBFETCHP Return the previous row of a query result. DBPREPARE Prepares a SQL statement. DBRESULT Return the number of affected row by a DELETE, INSERT or UPDATE operation. 7. The following instructions only support a DBFILE variable. DBCONNECT Connect to a remote database. DBDISCONNECT Disconnect from a remote database. The following is a NEW instruction: DBTRANSACTION Provides access to transaction support on a database connection. 8. The following instructions only support a DBSTATEMENT variable. These instructions are NEW: DBCLOSE Close a database statement. DBOPEN Open a database statement. 9. See the PL/B Language Reference Manual for specific details and syntax of enhanced DBxxxx instructions. 10. The following notes give a brief description of changes applied to the DBxxxx instructions. ------------------------------------------------------ DBSTATEMENT (New Variable) The DBSTATEMENT declares a PL/B variable in a user application that is used to process a SQL statement using a pre-existing database connection identified by a DBFILE variable. The DBOPEN instruction is used to associate the DBSTATEMENT variable with the DBFILE variable whose connection was established using the DBCONNECT instruction. After the DBOPEN instruction has been executed for a DBSTATEMENT, then this DBSTATEMENT variable can be used in a subsequent DBEXECUTE and other DBxxxx instructions to process the SQL statement that was executed. The DBSTATEMENT defines a working space in a user application that is used to process a SQL statement using a pre-existing database connection (DBFILE). The DBOPEN instruction is used to associate the DBSTATEMENT with the DBFILE that has been previously connected using a DBCONNECT instruction. It uses one of the following formats: (1) label DBSTATEMENT [*|%] (2) label DBSTATEMENT ^ ------------------------------------------------------ DBBREAK The DBBREAK instruction has been modified to support either a DBFILE variable or a DBSTATEMENT variable. ------------------------------------------------------ DBCLEAR (New Instruction) The DBCLEAR instruction clears any previous DBSEND data The instruction uses the following format: [label] DBCLEAR {dbfile | dbstatement} ------------------------------------------------------ DBCLOSE (New Instruction) The DBCLOSE instruction closes a database statement. The instruction uses the following format: [label] DBCLOSE {dbstatement} ------------------------------------------------------ DBCONNECT The DBCONNECT instruction has been modified to allow connections to multiple Database Engines at the same time. A new bit map flag value option has been added to the instruction. The instruction uses the following format: [label] DBCONNECT [{window};]{dbfile},{host}: {user},{pass}[,{conn}[,{ext}][,{flags}]] The {flags} has been added as a bit map operand. It is an optional Numeric Variable or decimal number indicating any special settings for the connection. Note the following for all connection types: 1. The optional {window} parameter is used only for the Windows ODBC database driver. 2. The {host} parameter can contain a driver name indicator in the format ;;. The driver indicator is used to obtain an entry from the INI file with the same name as the driver indicator. The entry must contain the name of the driver library first. Then using comma separation the entry can also contain a replacement host value and a replacement ext value. Example {host} parameter strings for program: . . Connection Strings . OdbcHost INIT "Myodbc3-test" OdbcHost1 INIT "Sun Test" MyHost INIT "MYSQL;;111.0.0.1" AdoHost INIT "DBADO;;DSN=Myodbc3-test" Example INI entries: MYSQL=Sunwmsql.dll DBADO=Sunwmado.dll 3. A special driver library name of 'FILEMAN' can be used to access a Database connection through a file manager. The entry in the INI file must have a driver library name of 'FILEMAN', the I/P address of the file manager, and then the port number of the file manager, all separated by commas. The file manager configuration file must also have an entry that has the same name as the driver indicator. The entry must contain the name of the driver library first. Then using comma separators, the entry can also contain a replacement host value and a replacement ext value. Example {host} parameter strings for program: OdbcHost INIT "ODBCR;;MyOdbc3-test" OdbcHost1 INIT "ODBCR;;Sun Test" MyHost INIT "MYSQL;;111.0.0.1" AdoHost INIT "DBADO;;MyOdbc3-test" AdoHost1 INIT "DXADO;;" Example INI entries to access SUNFM: ODBCR=FILEMAN,99.0.0.1,3934 MYSQL=FILEMAN,99.0.0.1,3934 DBADO=FILEMAN,99.0.0.1,3934 Example CFG entries for SUNFM: ODBCR=Sunwodbc.dll MYSQL=Sunwmsql.dll DBADO=Sunwado.dll DXADO=Sunwado.dll,DSN=MyOdbc3-testX 4. If no driver name indicator is found, a Windows runtime defaults to the ODBC driver and the PLB_SQL keyword is used for a Unix runtime. 5. The {flags} operand can be a combination of the following values: Value Description 1 The cursor should be kept at the server 2 The cursor should be kept at the client Note the following for ADO connections: 1. The {window} option is disregarded. 2. The {host} operand is an ADO specific connection string. 3. {user} is not used and may be specified as the null literal "". 4. {pass} is not used and may be specified as the null literal "". 5. {conn} is not used. 6. If {ext} contains 'READ' then the database is opened in READ ONLY mode. Note the following for ODBC connections: Notes for ODBC connections are the same as documented in the PL/B Language Reference Manual. Note the following for MySQL and UNIX SQL connections: Notes for MySQL and UNIX SQL connections are the same as documented in the PL/B Language Reference Manual. ------------------------------------------------------ DBDISCONNECT The DBDISCONNECT instruction is basically the same as for prior releases. However, if DBSTATEMENT variables have been opened using this DBFILE, then all of these DBSTATEMENT variables are automatically closed when the DBFILE is disconnected. ------------------------------------------------------ DBERROR The DBERROR instruction has been modified to support either a DBFILE variable or a DBSTATEMENT variable. ------------------------------------------------------ DBEXECUTE The DBEXECUTE instruction has been modified to support either a DBFILE variable or a DBSTATEMENT variable. In addition, the DBEXECUTE instruction has been modified allow an optional set of {parameters}. The instruction has the following format: [label] DBEXECUTE {dbfile|dbstatement} [ USING {parameters}...] The new optional parameters can be a Character String Variable, or a Numeric variable. These parameters are used for any parameters specified in a SQL statement. ------------------------------------------------------ DBFETCH The DBERROR instruction has been modified to support either a DBFILE variable or a DBSTATEMENT variable. [label] DBFETCH {dbfile|dbstatement},{timeout};{list}[;] ------------------------------------------------------ DBFETCHP (New Instruction) The DBFETCHP instruction retrieves the previous row (record) of a query result. The instruction uses the following format. [label] DBFETCHP {dbfile | dbstatement},{timeout};{list}[;] Note the following: 1. The basic operation of the DBFETCHP instruction is like the DBFETCH instruction. However, the row data is retrieved in a reverse order to that of a DBFETCH instruction. 2. The DBFETCHP instruction is similar to the READKP or READKGP instructions and retrieves the records previously DBFETCHed in the reverse order. 3. If the instruction ends with a ';', the row pointer is left pointing to the current row and a subsequent DBFETCHP instruction continues retrieving data from the ending position of the prior DBFETCHP instruction. 4. The DBFETCHP statement will D215 error if the cursor type is a forward-only cursor. See DBOPEN for cursor types. ------------------------------------------------------ DBOPEN (New Instruction) The DBOPEN instruction opens a new SQL statement for a database connection. The instruction uses the following format: [label] DBOPEN {dbstatement},{dbfile}[,CURSOR={cursor}] Note the following: 1. The DBFILE variable must be already connected to a database. 2. Multiple DBSTATEMENTs can be open on one DBFILE at the same time. 3. The supported cursor types are as follows: Value Function 0 Uses a forward-only cursor. A static copy of a set of records. Additions, changes, or deletions by other users are not visible. The DBFETCHP instruction is not allowed. This is the default cursor type if the CURSOR keyword is not specified. 1 Uses a keyset cursor. Changes, and deletions by other users are visible. The DBFETCHP instruction is allowed. 2 Uses a dynamic cursor. Additions, changes, and deletions by other users are visible. The DBFETCHP instruction is allowed. 3 Uses a static cursor. A static copy of a set of records. Additions, changes, or deletions by other users are not visible. The DBFETCHP instruction is allowed. ------------------------------------------------------ DBPREPARE (New Instruction) The DBPREPARE instruction sends the current SQL statement to the remote database to be prepared for faster access. The instruction uses the following format: [label] DBPREPARE {dbfile | dbstatement} Note the following: 1. The prepared SQL statement can request parameters during execution through the use of the ? character. 2. A SQL statement must be created using DBSEND before a DBPREPARE can be executed. ------------------------------------------------------ DBRESULT (New Instructions) The DBRESULT instruction is used to obtain the number of rows affected by a DELETE, INSERT or UPDATE SQL operation. The instruction uses the following format: [label] DBRESULT {dbfile | dbstatement}{sep}{result} Note the following: 1. If the {result} is equal to zero, the ZERO (or EQUAL) Condition Fag is set (TRUE). 2. If {result} is too small to contain the value, the OVER Condition Flag is set (TRUE). 3. If the SQL operation is not a DELETE, INSERT or UPDATE, the result value is indeterminate. ------------------------------------------------------ DBSEND The DBSEND instruction has been modified to support either a DBFILE variable or a DBSTATEMENT variable. The instruction uses the following format: [label] DBSEND {dbfile | dbstatement};{list} ------------------------------------------------------ DBSTATE The DBSTATE instruction has been modified to support either a DBFILE variable or a DBSTATEMENT variable. The instruction uses the following format: [label] DBSTATE {dbfile | dbstatement} ------------------------------------------------------ DBTRANSACTION (New Instruction) The DBTRANSACTION instruction is used to initiate and terminate a transaction. The instruction uses the following format: [label] DBTRANSACTION {dbfile},{transtype} The {dbfile} is a DBFILE variable defining the database associated with the connection. The {transtype} is a keyword specifying the transaction type. Note the following: 1. The underlying database engine must support transactions. 2. {transtype} may be one the following keywords: Keyword Specified Action ... START Starts a transaction COMMIT Commits the transaction to the database ROLLBACK Discards the transaction - The SQUEEZE instruction has been modified to support an alternate syntax form that specifies a 'KEEP=' keyword. This alternate syntax form is as follows: Format: (2) [label] SQUEEZE {source},{dest}[,KEEP={chars}] Where: {chars} - This is an optional previously defined Character String Variable or Literal indicating the characters to keep from the source string during the transfer when the syntax format (2) is being used. Note the following: 1. If the {chars} is a null variable, spaces are the only characters kept when the {source} string data is transferred to the {dest} variable. - The IMPLODE instruction has been modified to support an optional GIVING syntax form. This change allows an item count of the imploded items stored into the {dest} variable to be returned in a Numeric variable. The new syntax format is as follows: Format: IMPLODE {dest}{sep}{delm} GIVING {result}{sep}{vlist} Where: {dest} - Same as documented in PL/B Manual. {sep} - Same as documented in PL/B Manual. {delm} - Same as documented in PL/B Manual. {result} - This is a Numeric variable that receives the number of items that have been stored into the {dest} variable from the {vlist} list of variables. {vlist} - Same as documented in PL/B Manual. Example: A INIT "A" B INIT "B" C INIT "C" NVAR FORM 3 . IMPLODE S$CMDLIN,";" GIVING NVAR,A,B,C IMPLODE S$CMDLIN,";" GIVING NVAR USING A,B,C IMPLODE S$CMDLIN,";",A,B,C IMPLODE S$CMDLIN,";" USING A,B,C - The EXPLODE instruction has been modified to support an optional GIVING syntax form. This change allows an item count of the exploded items processed from the {source} variable and stored into the variables in the destination list. The new syntax format is as follows: Format: EXPLODE {source}{sep}{delm} GIVING {result}{sep}{vlist} Where: {source} - Same as documented in PL/B Manual. {sep} - Same as documented in PL/B Manual. {delm} - Same as documented in PL/B Manual. {result} - This is a Numeric variable that receives the number of items that have been processed from the {source} and stored into the variables of the {vlist}. {vlist} - Same as documented in PL/B Manual. Example: SRC INIT "A;B" A DIM 5 B DIM 5 C DIM 5 NVAR FORM 3 . EXPLODE SRC,";" GIVING NVAR,A,B,C EXPLODE SRC,";" GIVING NVAR USING A,B,C EXPLODE SRC,";",A,B,C EXPLODE SRC,";" USING A,B,C - A new instruction named OCCURS has been added to the PL/B language. This instruction scans the {search} logical string counting the number of times that the source string is found in the search variable string. The number of times that the string is found is stored into the third variable as the result. The syntax format for this instruction is as follows: is as follows: Format: OCCURS {source}{sep}{search}{sep1}{result} Where: {source} - This parameter can be a Character String Variable, a Character Literal, an Equate character value, or a character value specified as a decimal, octal, or hexadecimal number. {sep} - This is a comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, or INTO. {search} - This is a Character String Variable or Literal whose logical string is searched looking for string comparisons as specified in the {source} parameter. {sep1} - This is a comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, INTO or GIVING. {result} - This is a Numeric Variable that receives the number of times that the {source} string is found in the {search} string. Flags Affected: EOS, OVER, ZERO Note the following: 1. The {source} and {search} variables are not changed by the operation of this instruction. 2. The EOS flag is set TRUE if either the {source} or {search} variables are a Character String Variable and the variable is NULL. 3. The ZERO flag is set TRUE if the search count that is stored into the {result} is zero. 4. The OVER flag is set TRUE if the {result} Numeric Variable is too small to receive the search count. Example: SOURCE INIT "ABC,DEF,RST" COMMA INIT "," NVAR FORM 5 . OCCURS COMMA IN SOURCE GIVING NVAR OCCURS ",",SOURCE,NVAR OCCURS 0x2C,SOURCE,NVAR - A new instruction named WHEREIS has been added to the PL/B language. This instruction scans the {search} logical string to find the first occurrence where the source string is found in the search variable string. If the source string is found in the search variable string, then the formpointer location value in the search variable where the source string was found is stored into an optional {result} variable. Neither the source nor the search string variables are changed by the WHEREIS instruction. The syntax format for this instruction is as follows: Format: WHEREIS {source}{sep}{search}[{sep1}{result}] Where: {source} - This parameter can be a Character String Variable, a Character Literal, an Equate character value, or a character value specified as a decimal, octal, or hexadecimal number. {sep} - This is a comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, or INTO. {search} - This is a Character String Variable or Literal whose logical string is searched looking for a string comparison as specified in the {source} parameter. {sep1} - This is a comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, INTO or GIVING. {result} - This is an optional Numeric Variable that receives the formpointer value in the {search} string where the {source} string was found. Flags Affected: EOS, OVER, ZERO Note the following: 1. The {source} and {search} variables are not changed by the operation of this instruction. 2. The EOS flag is set TRUE if either the {source} or {search} variables are a Character String Variable and the variable is NULL. 3. The ZERO flag for the WHEREIS instruction is set to be FALSE when the {source} string is found in the {search} variable. The ZERO flag is set to be TRUE if the {source} string is not found in the {search} string. 4. The OVER flag is set TRUE if the {result} Numeric Variable is too small to receive the search formpointer value. Example: SOURCE INIT "ABC,DEF,RST" COMMA INIT "," NVAR FORM 5 . WHEREIS COMMA IN SOURCE GIVING NVAR WHEREIS ",",SOURCE WHEREIS 0x2C,SOURCE - A new instruction named ENCODE64 has been added to the PL/B language. This instruction encodes characters from the logical string of a source DIM variable and stores encoded characters into a destination DIM variable. The ENCODE64 instruction implements Base64 encoding as described in RFC2045, sec. 6.8. The main purpose of this instruction is to encode into strict ASCII strings that then can be written to other devices that cannot handle binary data. The syntax format of this instruction is as follows: Format: ENCODE64 {source}{sep}{dest} Where: {source} - This is a Character String Variable or Literal. The logical string of this variable is processed to transfer the translated characters to the {dest} variable. {sep} - This is a comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, or INTO. {dest} - This is a Character String Variable that receives the translated characters as processed from the {source} logical string. Flags Affected: EOS Note the following: 1. The EOS flag is set TRUE if the {source} variable is NULL. In this case, the {dest} variable is also set to be NULL. 2. The OVER flag is set TRUE if the {dest} variable is too small to receive the translated characters as processed from the source logical string. The required size of the {dest} variable can be calculated as follows: DestLen = ( ( SourceLength + 2 ) / 3 ) * 4 ) - A new instruction named DECODE64 has been added to the PL/B language. This instruction decodes characters from the logical string of a source DIM variable and stores decoded characters into a destination DIM variable. The DECODE64 instruction implements decoding for Base64 encoded strings as described in RFC2045, sec. 6.8. The normal {source} input string for the DECODE64 instruction is the output string as generated by the ENCODE64 instruction. The syntax format for this instruction is as follows: Format: DECODE64 {source}{sep}{dest} Where: {source} - This is a Character String Variable or Literal. The logical string of this variable is processed to transfer the translated characters to the {dest} variable. {sep} - This is a comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, or INTO. {dest} - This is a Character String Variable that receives the translated characters as processed from the {source} logical string. Flags Affected: EOS Note the following: 1. The EOS flag is set TRUE if the {source} variable is NULL. In this case, the {dest} variable is also set to be NULL. 2. The OVER flag is set TRUE if the {dest} variable is too small to receive the translated characters as processed from the source logical string. The required size of the {dest} variable can be calculated as follows: DestLen = ( ( SourceLength * 3 ) / 4 ) - Two new instructions named AAMDEX and INDEX have been added to the PL/B language. In addition, the SORT instruction has been re-written to include new features. The utility instructions have been implemented to provide all of the capabilities as found for the Sunaamdx, Sunindex, and Sunsort utilities. The syntax formats for the utility instructions are as follows: Format: AAMDEX {cmd}[,SUNFM={ip}][,CANCEL={cancel}][,OUTPUT={dlist}] INDEX {cmd}[,SUNFM={ip}][,CANCEL={cancel}][,OUTPUT={dlist}] SORT {cmd}[,SUNFM={ip}][,CANCEL={cancel}][,OUTPUT={dlist}] Where: {cmd} - This is a Character String Variable or Literal. The logical string for {cmd} is exactly the same as the corresponding utility command line not including the utility executable name. {ip} - This is a Character String Variable or Literal. The logical string for {ip} is the TCP/IP address and port number of the SUNFM File Manager where the utility instruction is to be executed. This parameter is optional. Examples of the {ip} string are as follows: 127.0.0.1:3934 127.0.0.1 {cancel} - This is a {dnumnvar} numeric value or a BUTTON object that has been previously created. This parameter is optional. This parameter identifies a user interface that can be used to cancel the processing for the utility instruction. {dlist} - This is a DATALIST object that has been previously created. The DATALIST object is used to receive operational output for the utility instruction. Flags Affected: OVER Note the following: 1. The OVER flag is set TRUE if the utility instruction encounters a failure. 2. If the OVER flag is set TRUE, then the S$ERROR$ variable contains the error data as follows: S02 - Read Error S03 - Open Error S04 - Prep Error S08 - Write Error S09 - Memory Error S11 - Large File Support Error S13 - Syntax Error SubCodes 3 to 30 are as follows: 3 - Invalid read size accessing temporary work file. 4 - Invalid read size accessing input data file. 5 - Invalid EOR found for record in input data file. 6 - Invalid fixed record size found for input file. 7 - Variable record length larger than maximum allowed. 8 - Error writing to output file. 9 - Insufficient memory to allocate buffers. 10 - Data file is not in correct format. 11 - Invalid parameter for '-i' option. 12 - Help screen not available. 21 - The operation was canceled by the user. SubCodes 100 to 159 are as follows: 100 - Bad Output File Name 101 - Unable to open an ISI file. 102 - The ISI version is invalid. 103 - ISI header key info invalid. 104 - Invalid command line syntax 105 - Read error accessing text data 106 - Error creating output file 107 - File name too long 108 - Invalid record length specification 109 - Error generating temporary file name. 110 - Error opening/creating temporary work file. 111 - The key specification is too big 112 - Invalid command line syntax 113 - Invalid to overlap keys 114 - ISI maximum key size is too large. The total key size can not be larger than 99. 115 - ISI maximum number of key specs exceeded. The total number of key specs is more than 31 116 - Invalid input file name. 117 - Unable to open alternate sort sequence file 118 - Invalid primary option syntax. 119 - Invalid alternate sort sequence file name. 120 - Unable to open the input file. 121 - Unable to determine file size for input file. 122 - Filename+Extension size limited to 47 characters. 123 - Filename+Extension size limited to 47 characters. 124 - Conflicting utility options specified. (f, s, & v). 125 - Cannot use L option with V or S option 126 - The Output file name can not be same as Input name. 127 - Record size not valid for file length found. 128 - Conflicting key options. 129 - 'm' option fill percentage is invalid. 130 - Invalid reformat specification syntax! 131 - Insufficient memory to support Reformat option! 132 - Output file not specified for tag file specification. 133 - Options '-f or -g' require record length specification. 134 - Output file not given for reformat file specification. 135 - Cannot use more than 10 'P' option parameters! 136 - Uppercase option must be given prior to key specification. 137 - Conflicting record length specifications. 138 - File too large to index without using 'L' option! 139 - Invalid AAM output file name. 140 - Unable to open AAM file. 141 - Not a valid .aam file 142 - Unable to use AAM file because of invalid version. 143 - No keys defined. Invalid .AAM file 144 - Re-index command buffer overflow. 145 - Unable to open AAM Uppercase Translation File! 146 - AAM Uppercase Translation File error! 147 - The input line is too long. 148 - Too many keys have been selected. 149 - A record longer than 32767 bytes was found. 150 - Unable to write segment of aamdex file 151 - Null file must have record length on command line. 152 - Data file is not in the correct format. 153 - Insufficient memory. 154 - Relinquishing super-powers failed. (Unix) 155 - Invalid parameter for -i option! 156 - Too many records to index 157 - Unable to write segment of index file. 158 - Error during output IO. 159 - Invalid 'O' option value! Examples: INDEX "master -1-10" INDEX "master -1-10",OUTPUT=DLIST INDEX "master -1-10",OUTPUT=DLIST,CANCEL=QUITBUTTON INDEX "master -1-10",SUNFM="25.126.40.20" INDEX "master -1-10",OUTPUT=DLIST,SUNFM="www.Sunbelt-Plb.com" INDEX "-l icmd.log master -1-10" - A new instruction named DMAKE has been added to the PL/B language. This instruction allows a DIM character string variable to be dynamically created by a program. This instruction is similar to the SMAKE instruction except the buffer allocation for the DMAKE instruction is performed using the OS memory allocation functions. Therefore, buffer allocations for DMAKE do not reside in the same memory allocation as used for the PL/B program. Thus, dynamic DIM variables can be created and freed without impacting the memory allocation used for programs and the size of these variables are only limited by the OS resources. Also, two associated instructions named DFREE and DRELEASE have been added to free buffer allocations created by the DMAKE instruction. The syntax format for this instruction is as follows: Format: DMAKE {dest}{sep}{size} Where: {dest} - This operand is a previously declared DIM POINTER. {sep} - This is a comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, or INTO. {size} - This operand is a decimal number or a numeric variable that identifies the size for the DIM variable that is to created. Flags Affected: ZERO Note the following: 1. The ZERO flag is set FALSE when the DIM variable is created successfully. The ZERO flag is set TRUE when the DIM variable can not be created. 2. Since the buffer allocation for a DMAKE instruction does not reside within the PL/B program memory space, the ROLLOUT instruction can not be used in programs that make use of the DMAKE instruction. A ROLLOUT instruction now causes an untrapped error U49 to occur if a DMAKE variable is active when the ROLLOUT is executed. 3. When a CHAIN or SHUTDOWN instruction is executed, then all DMAKE buffer allocations are automatically freed. 4. If a DMAKE instruction is executed for a {dest} pointer that already references a DIM variable, then a DRELEASE instruction is executed before the DMAKE is executed. Example: pDimA DIM ^ pDimB DIM ^ NVAR FORM "512" . DMAKE pDimA,1000000 DMAKE pDimB,NVAR - A new instruction named DFREE has been added to the PL/B language. This instruction frees a buffer allocation for a DIM variable created using the DMAKE instruction. In addition, any DIM pointer that is pointing to this same buffer allocation is cleared. The syntax format for this instruction is as follows: Format: DFREE {dest} Where: {dest} - This operand is a previously declared DIM POINTER. Flags Affected: None Note the following: 1. If the {dest} pointer does not point to a DIM variable created by a DMAKE instruction, then the pointer is simply cleared. Example 1: pDimA DIM ^ pDimB DIM ^ . DMAKE pDimA,100000 . . Program Executes . DFREE pDimA ;DIM variable buffer is freed ;pDimA pointer is cleared STOP Example 2: pDimA DIM ^ pDimB DIM ^ . DMAKE pDimA,100000 MOVEPTR pDimA,pDimB ;Both point to DIM variable . . Program Executes . DFREE pDimB ;DIM variable buffer is freed ;Both pDimA & pDimB are cleared STOP Example 3: pDimA DIM ^ . DMAKE pDimA,100000 CALL xFunc USING pDimA . . Program Executes . DFREE pDimA ;DIM variable buffer is freed ;Both pDimA & pDimC are cleared STOP ...... pDimC DIM ^ . xFunc LROUTINE pDimC . . pDimC points to DIM variable created by DMAKE . RETURN - A new instruction named DRELEASE has been added to the PL/B language. This instruction detaches a DIM pointer variable from a DIM variable created by a DMAKE instruction. If the DIM variable in the DMAKE buffer allocation is not used by any DIM pointer variables after the DRELEASE operation, then the DMAKE buffer allocation is freed. However, the DIM variable for the DMAKE buffer allocation is not freed if other program DIM pointers are pointing to the buffer allocation after the DRELEASE operation is executed. The syntax format for this instruction is as follows: Format: DRELEASE {dest} Where: {dest} - This operand is a previously declared DIM POINTER. Flags Affected: None Note the following: 1. If the {dest} pointer does not point to a DIM variable created by a DMAKE instruction, then the pointer is simply cleared. 2. The instruction 'MOVEPTR 0,pDIM' detaches/clears a DIM pointer and if the pointer was pointing to a DMAKE DIM variable, then the expected action is the same as a DRELEASE instruction. Example 1: pDimA DIM ^ pDimB DIM ^ . DMAKE pDimA,100000 . . Program Executes . DRELEASE pDimA ;DIM variable buffer freed ;pDimA pointer cleared STOP Example 2: pDimA DIM ^ pDimB DIM ^ . DMAKE pDimA,100000 MOVEPTR pDimA,pDimB ;Both point to DIM variable . . Program Executes . DFREE pDimB ;DIM variable buffer NOT freed ;Pointer pDimB is cleared ;Pointer pDimA is NOT cleared STOP Example 3: pDimA DIM ^ dVar INIT "Testing" . DMAKE pDimA,100000 CALL xFunc USING pDimA . . Program Executes . DRELEASE pDimA ;DIM variable buffer NOT freed ;Pointer pDimA is cleared ;Pointer pDimC still points to ; DMAKE buffer allocation . . Program Continues . CALL xFunc USING dVar . . After the last xFunc operation, the DIM variable . for the DMAKE operation is freed because the . pDimC pointer was changed to point to dVar and . no other pointers pointed to the DMAKE buffer. . STOP ...... pDimC DIM ^ . xFunc LROUTINE pDimC . . pDimC points to input DIM variable . RETURN - Added a new instruction named CHECKPROP. The CHECKPROP instruction allows a user program to determine if a property is valid for a specified GUI object. [label] CHECKPROP {obj}{sep}{prop}[,TYPE={dnumnvar}]: [,MASK={nvar}] Where: label - optional Program Execution Label. obj - {obj} can be a GUI object or a {dnumnvar} numeric value. This operand is used to identify the GUI object type for which the property is being checked. If the {obj} operand is a {dnumnvar} numeric value, then the input value is used to identify the GUI object. This numeric value can be the SUNBELT GUI object types as specified by the TYPE instruction or the numeric value can be specified as the SubType object type values as defined in the Plbequ.inc include file. prop - {prop} is a {svarslit} that contains the property name to be checked. The property name is not case sensitive. The logical string for the {svarslit} is used as the property name. Any trailing blank characters in the logical string are ignored. TYPE - The TYPE parameter is optional. When the TYPE keyword is specified, then the {dnumnvar} value identifies the PLB instruction restriction to be applied for the property search. If this TYPE parameter is not specified, then the default type value is zero. The {dnumnvar} values are defined as follows: 0 - Does the property exist for any instruction. 1 - Does the property exist for a CREATE. 2 - Does the property exist for a GETPROP. 3 - Does the property exist for a SETPROP. 4 - Values greater than or equal to 4 are executed the same as a value of 0. MASK - The MASK parameter is optional. When the MASK keyword is specified, then the {nvar} is to receive the property table instruction bit mask that identifies what instructions the property can be used in. The returned binary bit mask value can be a combination of any of the following: 0x0001 - Property valid for CREATE 0x0002 - Property valid for SETPROP 0x0004 - Property valid for GETPROP Example: If the returned value in the MASK numeric variable is 6. Then the specified property is valid for a SETPROP and GETPROP operation. Flags affected: ZERO and OVER Note the following: 1. The ZERO flag is set to a TRUE state when the property is found and it is valid for the instruction TYPE being checked. Otherwise, the ZERO flag is set to a FALSE state. 2. The OVER flag is set to a TRUE state if any returned value is too large to be stored into a returned variable and must be truncated. - Modified the WINAPI instruction to support new variable types named INT8 and PINT8. These data types provide support for an eight byte INTEGER. - Modified DIM to support sizes larger than 64KB. The runtimes can support a DIM size up to 2GB. See PLBCMP description for more details. - Modified the keyed READ for an AFILE to give an I46 error when a key header is specified without key data and a prior read has not been performed. Prior to this change this error was being reported as an I40 error. Also, note in this case, that if a prior read has been performed for the AFILE, then the I46 error does not occur and the data for the prior read is retrieved. Example 1: A AFILE KEY DIM 20 . OPEN A,"aamfile" MOVE "01L",KEY READ A,KEY;S$CMDLIN ;I46 error Example 2: A AFILE KEY DIM 20 . OPEN A,"aamfile" MOVE "01L123",KEY READ A,KEY;S$CMDLIN ;Read ok! ... MOVE "01L",KEY READ A,KEY;S$CMDLIN ;Read ok with data from ;previous READ. - Modified the ROUTINE and LROUTINE processing to allow a DIM or VAR pointer to accept a CALL USING Literal parameter. In this case, the DIM/VAR pointer references a duplicate image of the input Literal. The duplicate image of the Literal can be manipulated like any DIM variable without affecting/corrupting the original Literal data. For this specific usage, the CALL USING literal has a maximum size limit of 2047. - Corrected a problem where a CALL USING parameter specified as a variably indexed arrayed variable was causing an F05 error when the array was an array of null pointers and the ROUTINE parameter was a pointer. The F05 error does not occur with this change. - Corrected a problem where a sequential READ (-1) could not access the last record written into a file when the file was opened in EXCLUSIVE mode. The problem occurred for the following sequence of instructions. Example: FILE FILE SEQ FORM "-1" EOF FORM "-3" ZERO FORM "0" . PREP FILE,"FILE.TXT",EXCLUSIVE WRITE FILE,EOF;"ONE" WRITE FILE,EOF;"TWO" READ FILE,ZERO;; READ FILE,SEQ;S$CMDLIN ;OK READ FILE,SEQ;S$CMDLIN ;OVER ERROR! - Corrected a problem where the '-sname.def' runtime command line option did not look in the PLB_SYSTEM directory for the 'name.def' screen definition file if it could not be found in a current working directory. - Corrected a problem where the ZERO flag was being set by a PREPARE instruction. Now the ZERO flag is not affected by a PREPARE instruction which is consistent with the PL/B Language Reference Manual. - Corrected a problem where the *TAB control for a PRINT instruction could fail when multiple SPLOPEN spool files were opened and used in a program at the same time. - Corrections have been implemented for the SEARCH instruction to eliminate indeterminate results and GPF errors when data variables other than DIM or FORM variables were found in the variable list. With changes implemented to correct these problems, the SEARCH instruction now stops searching through the variable list when a variable other than a DIM or FORM is encountered. ------------------------------------------------------------------------------- PLBCON - Corrected a problem where untrapped spool errors were not being reported to the console window. ------------------------------------------------------------------------------- PLBWIN - Modified to support new instructions LISTCNT and LISTGET. See PLBCMP section below for new instruction descriptions. - A new object named EDITDATETIME has been added to the language. This object provides an interface to exchange data and time information with a user. Data is exchanged using the instructions GETITEM and SETITEM or through the use of the TEXT property. Data is exchanged in the same format as the CLOCK TIMESTAMP format: (YYYYMMDDHHMMSS). See the language reference manual for details of this format. Note: 1. An EDITDATETIME object always displays data. The object can not be cleared to display nothing. 2. When an EDITDATETIME object is loaded by a FORMLOAD, then the object is always initialized with the current date and time. The following properties are supported for EDITDATETIME ANCHOR, CAUSEVALID, DOCK, DROPID, ENABLED, FONT, HEIGHT, HELPID, HWND, LEFT, OBJECTID, TABID, TEXT, TOOLTIP, TOOLTIPHWND, TOP, VISIBLE, WIDTH, ZORDER The following new properties have been added for EDITDATETIME. Please see detailed descriptions in the PL/B Language Reference Manual or in the PLBEQU.INC file. CALFGCOLOR=dnumnvar|color object CALBGCOLOR=dnumnvar|color object TITLEBGGCOLOR=dnumnvar|color object TITLEFGCOLOR=dnumnvar|color object TRAILINGCOLOR=dnumnvar|color object CHECKED=dnumnvar CUSTOMFORMAT=svarslit DROPDOWNALIGN=dnumnvar FORMAT=dnumnvar MAXIMUMDATE=svarslit MINIMUMDATE=svarslit SHOWCHECKBOX=dnumnvar SHOWUPDOWN=dnumnvar The EDITDATETIME object supports the following events: CHANGE DRAGDROP DRAGOVER GOTFOCUS KEYPRESS LOSTFOCUS MOVE MOUSEDOWN MOUSEUP MOUSEMOVE VALIDATE - In support of the new enhanced DBxxxx verbs, there are three new DLLs named SUNWODBC.DLL, SUNWMSQL.DLL, and SUNWADO.DLL. These DLLs are dynamically loaded for the DBCONNECT instruction when executed in a PL/B program. SUNWODBC.DLL - This DLL is the interface driver for ODBC. This interface driver replaces the PLBWODBC.DLL module. This interface driver is used as the default database interface for the DBCONNECT verb. SUNWMSQL.DLL - This DLL is the interface driver for the MYSQL Database engine. This DLL is loaded for a DBCONNECT operation when a driver indicator is specified for the and the driver indicator is specified in the runtime INI file. See DBCONNECT for more details. SUNWADO.DLL - This DLL is the interface driver for the Microsoft ADO ( ActiveX Data Objects ) interface that provides access to multiple database engines. For specifics on ADO, see the Microsoft ADO documentation. This DLL is loaded for a DBCONNECT operation when a driver indicator is specified for the and the driver indicator is specified in the runtime INI file. See DBCONNECT for more details. - Modified the PICT object to support a '.BMP' picture that uses a BITMAP EXTENDED FORMAT for the BI_BITFIELDS compression format. This change corrects a problem where a 32 bit BMP was not being displayed properly. For Windows 95 systems this change may not work as expected due to restrictions in the OS. - The LISTVIEW object has been enhanced to allow foreground color, background color, and font attributes to be specified for individual cells being viewed. Five new methods have been added for the LISTVIEW object to provide this capability. Note the following for this change: A new method named InsertAttrColumn has been added to a LISTVIEW that is used to insert a hidden column that contains attribute data strings. The SetItemText method for the LISTVIEW can then be used to set a specialized formatted attribute string for a row item in the attribute data column. The attribute data string is formatted to provide default settings followed by individual column attribute settings that are to be used for a specific LISTVIEW row. The {default} and {column} strings are composed of 3 subfields that provide index numbers separated by a comma. The {default} and each {column} subfield group must be separated by a semicolon. The format of the attribute data strings must be given as follows: "{default};{column1};{column2};....;{columnx}" Where: {default} - The {default} field is optional and if specified, then it gives default foreground color, background color, and font indexes to be used for this row. The {default} field is composed of three subfield indexes that reference attribute tables that have been setup for a LISTVIEW object. {column1} - The {column1} field is optional and if specified , then it gives the specific color and font attribute indexes that are to be used for column 1 for this row. This same field definition format applies for all columns that exist in the LISTVIEW object. The string format for the {default} and {column} fields are defined as follows: "{fgNDX},{bgNDX},{fontNDX}" {fgNDX} - This subfield is a decimal number that is used as an index to retrieve a foreground color from the color table that has been created for the LISTVIEW object. The {fgNDX} decimal number value can be from 1 to 20. {bgNDX} - This subfield is a decimal number that is used as an index to retrieve a background color from the color table that has been created for the LISTVIEW object. The {bgNDX} decimal number value can be from 1 to 20. {fontNDX) - This subfield is a decimal number that is used as an index into the font table that has been created for the LISTVIEW object. The {fontNDX} decimal number value can be from 1 to 20. Example Attribute Strings set into the attribute column: "1,1,1;2,3,4" In this example, the default attribute field has specified an index value of 1 for the foreground color, the background color, and the font. This attribute also specifies that the first column of the LISTVIEW object is to use an index value of 2 for the foreground color, an index value of 3 for the background color, and an index value of 4 for the font. All subsequent columns are to use the default. ",2;1,3;;4" In this example, the default attribute field has only specified an index value of 2 for the back ground color. In this case, the default foreground color and font are determined from the default attribute data settings that have been setup for the LISTVIEW object. For the first column of the LISTVIEW the index value 1 is used to retrieve the foreground color while the index value 3 is used to retrieve the font to be used. The second column of the LISTVIEW is to use only default values. The third column of the LISTVIEW uses the index value of 4 to retrieve the foreground color. Again, all other attributes are specified by the default settings. The general program logic flow to make use of the new LISTVIEW color/font features to control individual cell attributes is as follows: 1. Create a LISTVIEW object. 2. Use the InsertAttrColor, InsertAttrRGB, and InsertAttrFont methods to initialize the color and/or the font index tables for the LISTVIEW object. 3. Use the InsertAttrDefault method to set the default attribute settings to be used for the LISTVIEW object. 4. Use the InsertAttrColumn method to put an attribute column into the LISTVIEW object. 5. Use the SetItemText method to set the attribute data strings for each row of the LISTVIEW where individual row cells are to be controlled. If an item in the attribute column does not have an attribute string, then the default settings are used. -------------------- New LISTVIEW Method Descriptions ............................................................... . InsertAttrColumn Method . The InsertAttrColumn method inserts a special column into a LISTVIEW object that can be used to specify foreground color, background color, and font attributes to be used for individual column cells for a row. The method uses the following format: [label] {object}.InsertAttrColumn [GIVING {return}]: USING [*Index=]{index} Where: {label} is an optional Program Execution Label. {object} is a required LISTVIEW object to be accessed. {return} is an optional Numeric Variable that indicates the success or failure of the method. {index} is a required Numeric Variable or decimal number that specifies a zero based position of the attribute column. Flags Affected: OVER, ZERO Note the following: 1. The data string stored into each item of the new column specifies a special formatted set of attribute fields that define the foreground color, background color, and font of each column cell for the line item. See the description above for the field definitions of the attribute string. 2. The attribute column is inserted with a width size of zero. This allows the attribute column to exist and be used in a LISTVIEW without being visible to a user. 3. It is not recommended that the attribute column should be sorted. This can cause indeterminate results due to the attribute data string format required to control each column cell for a line item. 4. Upon completion, the {return} variable contains the new zero based column number or -1 if the method fails. 5. If the value returned is zero, the ZERO (or EQUAL) condition flag is set (TRUE). 6. If the {return} variable is too small to contain the result of the method, the OVER condition flag is set (TRUE). 7. For improved performance in the Application Server environment, do not specify the optional return value unless it is needed. ............................................................... . InsertAttrDefault Method . The InsertAttrDefault method is used to specify an attribute string that is used as the default for any LISTVIEW line item cells that do not have explicit attributes specified. The method uses the following format: [label] {object}.InsertAttrDefault [GIVING {return}] USING [*Default=]{default} Where: {label} is an optional Program Execution Label. {object} is a required LISTVIEW object to be accessed. {return} is an optional Numeric Variable that indicates the success or failure of the method. {default} is a required Character String variable or literal that gives the default attribute data string to be used for the LISTVIEW object. See the description above for the format of the attribute data string. Flags Affected: OVER, ZERO Note the following: 1. If the InsertAttrDefault method is successful, then the {return} value is zero and the ZERO condition flag is set (TRUE). If the method fails, then the {return} value is not zero and the ZERO condition flag is cleared (FALSE). 2. If the default subfields are not specified by the default attribute data string, then default attribute settings determined from the LISTVIEW object are used. 3. The OVER flag is set if the {return} variable is too small to hold the returned value. ............................................................... . InsertAttrColor Method . The InsertAttrColor method is used to initialize the color index table for the LISTVIEW object using COLOR objects. The LISTVIEW color table allows up to 20 colors to be defined. The method uses the following format: [label] {object}.InsertAttrColor [GIVING {return}] USING [*Color1=]{colobj}: [*Color2=]{colobj}: [*Color3=]{colobj}: [*Color4=]{colobj}: [*Color5=]{colobj}: [*Color6=]{colobj}: [*Color7=]{colobj}: [*Color8=]{colobj}: [*Color9=]{colobj}: [*Color10=]{colobj}: [*Color11=]{colobj}: [*Color12=]{colobj}: [*Color13=]{colobj}: [*Color14=]{colobj}: [*Color15=]{colobj}: [*Color16=]{colobj}: [*Color17=]{colobj}: [*Color18=]{colobj}: [*Color19=]{colobj}: [*Color20=]{colobj} Where: {label} is an optional Program Execution Label. {object} is a required LISTVIEW object to be accessed. {return} is an optional Numeric Variable that indicates the first table position changed. {colobj} is an optional COLOR object that is assigned to the color table position. The table positions are either assigned by keyword names or are assigned by relative color object positions in the USING list. Flags Affected: OVER, ZERO Note the following: 1. If a COLOR object is stored into the color table, then the returned value is the first color table position that was set. If no color table positions were set, then a value of zero is returned. 2. The ZERO condition flag is set (TRUE) if the returned value is zero. Otherwise, the ZERO condition flag is cleared (FALSE). 3. The OVER condition flag is set (TRUE) if the {return} variable is too small for the returned value. ............................................................... . InsertAttrRGB Method . The InsertAttrRGB method is used to initialize the color index table for the LISTVIEW object using RGB color values. The LISTVIEW color table allows up to 20 colors to be defined. The method uses the following format: [label] {object}.InsertAttrRGB [GIVING {return}] USING [*RGB1=]{rgb}: [*RGB2=]{rgb}: [*RGB3=]{rgb}: [*RGB4=]{rgb}: [*RGB5=]{rgb}: [*RGB6=]{rgb}: [*RGB7=]{rgb}: [*RGB8=]{rgb}: [*RGB9=]{rgb}: [*RGB10=]{rgb}: [*RGB11=]{rgb}: [*RGB12=]{rgb}: [*RGB13=]{rgb}: [*RGB14=]{rgb}: [*RGB15=]{rgb}: [*RGB16=]{rgb}: [*RGB17=]{rgb}: [*RGB18=]{rgb}: [*RGB19=]{rgb}: [*RGB20=]{rgb} Where: {label} is an optional Program Execution Label. {object} is a required LISTVIEW object to be accessed. {return} is an optional Numeric Variable that indicates the first table position changed. {rgb} is an optional Character String Variable or literal that contains a hexadecimal string that defines an RGB value. The format of the hexadecimal string must be given as follows: "0xRRGGBB" The character values of the 'R', 'B', and 'G' characters must be from 0 to F. Flags Affected: OVER, ZERO Note the following: 1. If a COLOR value is stored into the color table, then the returned value is the first color table position that was set. If no color table positions were set, then a value of zero is returned. 2. The ZERO condition flag is set (TRUE) if the returned value is zero. Otherwise, the ZERO condition flag is cleared (FALSE). 3. The OVER condition flag is set (TRUE) if the {return} variable is too small for the returned value. ............................................................... . InsertAttrFont Method . The InsertAttrFont method is used to initialize the font index table for the LISTVIEW object using FONT objects. The LISTVIEW font table allows up to 20 fonts to be defined. The method uses the following format: [label] {object}.InsertAttrFont [GIVING {return}] USING [*Font1=]{fontobj}: [*Font2=]{fontobj}: [*Font3=]{fontobj}: [*Font4=]{fontobj}: [*Font5=]{fontobj}: [*Font6=]{fontobj}: [*Font7=]{fontobj}: [*Font8=]{fontobj}: [*Font9=]{fontobj}: [*Font10=]{fontobj}: [*Font11=]{fontobj}: [*Font12=]{fontobj}: [*Font13=]{fontobj}: [*Font14=]{fontobj}: [*Font15=]{fontobj}: [*Font16=]{fontobj}: [*Font17=]{fontobj}: [*Font18=]{fontobj}: [*Font19=]{fontobj}: [*Font20=]{fontobj} Where: {label} is an optional Program Execution Label. {object} is a required LISTVIEW object to be accessed. {return} is an optional Numeric Variable that indicates the first table position changed. {fontobj} is an optional FONT object that is assigned to the font table position. The table positions are either assigned by keyword names or are assigned by relative font object positions in the USING list. Flags Affected: OVER, ZERO Note the following: 1. If a FONT object is stored into the font table, then the returned value is the first font table position that was set. If no font table positions were set, then a value of zero is returned. 2. The ZERO condition flag is set (TRUE) if the returned value is zero. Otherwise, the ZERO condition flag is cleared (FALSE). 3. The OVER condition flag is set (TRUE) if the {return} variable is too small for the returned value. - New properties have been added for the FONT object as follows: -------------------- ANGLE Property (New) Format: ANGLE=dnumnvar Statements Supported: CREATE SETPROP GETPROP Description: This property is used to set or get the font angle in 1/10 of a degree. Objects: FONT dnumnvar values: The dnumnvar values are specified in tenths of a degree. Therefore, a value of 450 specifies 45 degrees. -------------------- STRIKE Property (New) Format: STRIKE[=dnumnvar] Statements Supported: CREATE SETPROP GETPROP Description: This property specifies that the font should be displayed with a line through the center of the font. When the value is not provided, this indicates that the STRIKE property is turned on. Objects: FONT dnumnvar values: $OFF EQU 0 // Default $ON EQU 1 -------------------- UNDERLINE Property (New) Format: UNDERLINE[=dnumnvar] Statements Supported: CREATE SETPROP GETPROP Description: This property specifies that the font should be underlined. When the value is not provided, this indicates that the UNDERLINE property is turned on. Objects: FONT dnumnvar values: $OFF EQU 0 // Default $ON EQU 1 - A new GUI object named LABELTEXT has been added to the PL/B objects. The LABELTEXT object displays a string of static text on the screen. This object differs from a STATTEXT in that it can perform word wrapping and is in a window. -------------------- Properties Alignment Anchor Appearance BgColor Border CauseValid Dock Enabled FgColor Font Height Hwnd Left ObjectId Text ToolTip ToolTipHwnd Top UseAltKey Visible Width WordWrap ZOrder Events EventClick EventDblClick EventMouseDown EventMouseUp EventMouseMove Methods None - A new GUI object named ANIMATE has been added to the PL/B objects. The ANIMATE object is a window that displays an AVI clip. An AVI clip is a series of bitmap frames like a movie. ANIMATE objects can only display AVI clips that do not contain audio. The ANIMATE object is not supported for Windows CE. -------------------- Properties Anchor Appearance Autoplay (NEW) BackStyle BgColor Border Center Dock Enabled Height Hwnd Left ObjectId ToolTip ToolTipHwnd Top Visible Width ZOrder Events EventChange Methods Close Open Play Stop Notes 1. If the CENTER property is turned off, this causes the animation to be shown in the top/left position in the window. New Properties -------------------- AUTOPLAY Property (New) Format: AUTOPLAY[=dnumnvar] Statements Supported: CREATE SETPROP GETPROP Description: This property enables or disables the automatic playing of an AVI file when it is opened in an ANIMATE object. Objects: ANIMATE dnumnvar values: $OFF EQU 0 // Default $ON EQU 1 -------------------- Method Descriptions ............................................................... . Close Method . The Close method is used to close an AVI file that has been opened in an ANIMATE object. The method uses the following format: [label] {object}.Close [GIVING {return}] Where: {label} is an optional Program Execution Label. {object} is a required ANIMATE object to be accessed. {return} is an optional Numeric Variable that indicates the success or failure of the method. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. A return value of 0 indicates success. ............................................................... . Open Method . The Open method is used to open an AVI file in an ANIMATE object. The method uses the following format: [label] {object}.Open [GIVING {return}] USING [*Name=]{name} Where: {label} is an optional Program Execution Label. {object} is a required ANIMATE object to be accessed. {return) is an optional Numeric Variable that indicates the success or failure of the method. {name} is a required Character String Variable or literal that specifies the file name of the AVI file. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. A return value of 0 indicates success. 4. The ! character is used to indicate that the file is located on the client when Application Server is being used. 5. The ? character is used to indicate that the file should be either obtained from the cache or from the server and placed in the cache. 6. The * character is used to indicate that the file should be either obtained from the in-memory cache or from the server and placed only in the in-memory cache. ............................................................... . Play Method . The Play method is used to play an AVI file that has been opened in an ANIMATE object. The method uses the following format: [label] {object}.Play [GIVING {return}] USING [[*Start=]{start}]: [[*End=]{end}]: [[*Repeat=]{repeat}] Where: {label} is an optional Program Execution Label. {object} is a required ANIMATE object to be accessed. {return} is an optional Numeric Variable that gets the return value. {start} is an optional decimal number or Numeric Variable that specifies the starting frame of the AVI file. {end} is an optional decimal number or Numeric Variable that specifies the ending frame of the AVI file. {repeat} is an optional decimal number or Numeric Variable that specifies the number of times to repeat the animation. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. A return value of 0 indicates success. 4. The first frame position is at zero. 5. The default value for that Start parameter is zero. 6. The default value for the End parameter is the last frame. 7. The default value for the Repeat parameter is to replay the clip indefinitely. ............................................................... . Stop Method . The Stop method is used to stop playing an AVI file that has been opened in an ANIMATE object. The method uses the following format: [label] {object}.Stop [GIVING {return}] Where: {label} is an optional Program Execution Label. {object} is a required ANIMATE object to be accessed. {return} is an optional Numeric Variable that indicates the success or failure of the method. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. A return value of 0 indicates success. - The STATTEXT object has been modified to allow a FONT object to be used when the ANGLE property for the FONT is being used. This change allows text in a STATTEXT to be output at an angle. Notes: 1. A FONT object that uses the ANGLE property can only be used for a STATTEXT object to output text on an angle. - The PRTPAGE statement has been modified to support FONT objects that use the ANGLE property. When the PRTPAGE *FONT is set to a FONT object with the ANGLE property set, then the text output for the PRTPAGE occurs at the ANGLE set for the FONT object. - Modified the Windows runtimes when executing under Windows 95/98/ME to check for a file size limit of 2GB. This 2GB check is required because the Windows 95/98/ME OS file subsystems do not properly access data beyond the 2GB size. In addition, these same Windows OS versions do not give any API errors to indicate that a problem exists. - Modified the DEACTIVATE operation for a Modal WINDOW to reset its parent to be nothing. If the Modal WINDOW is DEACTIVATEd, then a subsequent DESTROY of a parent WINDOW does not automatically destroy the Modal Window. It should also be noted that if a DESTROY of a parent WINDOW is executed, while a child Modal WINDOW is active/visible, then the Modal WINDOW is destroyed. - Modified the event processing for a Modal dialog form to process all of the Windows OS events before a PL/B user event is dispatched. This change means that PL/B user events are processed for a Modal dialog in the same manner as a WAITEVENT. - Added the TABID property for the TOOLBAR and STATUSBAR objects. This change gives a user the ability to set it to zero if desired. - Added a command line option '-?' for PLBWIN and PLBCON runtimes to provide a command line syntax help screen. - Modified the SortColumn method for the LISTVIEW object to generate a stable sort output. - Modified the SortColumn method for the LISTVIEW object to accept a value of zero for the {type}, {type1}, {type2}, and {type3). When a value of zero is specified, this indicates that the associated sort column is to be ignore and not included in the sort process. A failure return value is given when a valid (non-zero) value is not specified for at least one sort column. - The ICON={value} property has been added for a WINDOW object. This change allows the Icon for a Window to be set or changed using a CREATE or SETPROP operation. - Modified the EDITNUMBER object to generate a CHANGE event when data is changed using the UpDown control. - The IMAGELIST object has been modified to support an EventChange event. When registered, this CHANGE event occurs any time any images in the IMAGELIST object is added, deleted, or altered. - A new property named 'USECOLORMASK={dnumnvar}' has been added. This property can be used in a CREATE, GETPROP, or SETPROP for an IMAGELIST object. The {dnumnvar} value for this property determines if the MASKCOLOR property for an IMAGELIST is to be used. When the {dnumnvar} value is zero, then the MASKCOLOR property for the IMAGELIST object is not used. If the {dnumnvar} value is not zero, then the MASKCOLOR property for the IMAGELIST object is used. - The IMAGELIST object has been modified to support the RESOURCE property. When a resource id is specified for an IMAGELIST object, then the image/picture specified by the resource id is segmented and replaces all images for the imagelist. - Modified the ICON object to support the 'IMAGEINDEX={value}' property. The IMAGEINDEX is used as an index into an imagelist linked to the ICON using the new IMAGELIST property. - A new property named 'IMAGELIST={imagelist}' has been added. This property can be used in a CREATE or SETPROP operation for the ICON, LISTVIEW, TOOLBAR, and TREEVIEW objects. This property allows the images from an {imagelist} to be used for the parent object. - A new property named 'IMAGELISTD={imagelist}' has been added. This property is used in a CREATE or SETPROP operation for the TOOLBAR object. This property associates an {imagelist} object with the disabled images of a TOOLBAR object. See the TOOLBAR method 'SetImageListDisabled' for more details about disabled images for a TOOLBAR object. - A new property named 'IMAGELISTH={imagelist}' has been added. This property is used in a CREATE or SETPROP operation for the TOOLBAR object. This property associates an {imagelist} object with the hot images of a TOOLBAR object. See the TOOLBAR method 'SetImageListHot' for more details about hot images for a TOOLBAR object. - A new property named 'IMAGELISTSM={imagelist}' has been added. This property is used in a CREATE or SETPROP operation for the LISTVIEW object. This property associates an {imagelist} object with the small icons of a LISTVIEW object. See the LISTVIEW method 'SetImageListSmall' for more details about small icons for a LISTVIEW object. - A new property named 'IMAGELISTST={imagelist}' has been added. This property is used in a CREATE or SETPROP operation for the LISTVIEW object. This property associates an {imagelist} object with the state icons of a LISTVIEW object. See the LISTVIEW method 'SetImageListState' for more details about state icons for a LISTVIEW object. - Modified the WINAPI statement to automatically load the PROFILE {dll} using LoadLibrary if the {dll} is not previously loaded. This helps to eliminate errors that would occur because a user did not know that a LoadLibrary must be used to load a DLL before a WinApi function can be executed. - The MENU object has been modified to support the following properties. ENABLED MENUORDER (New for MENU object) MERGETYPE (New for MENU object) TEXT VISIBLE -------------------- MENU New Property Descriptions -------------------- MENUORDER Property (New for MENU object) Format: MENUORDER=dnumnvar Statements Supported: SETPROP GETPROP Description: This property specifies the position of the menu in the menubar. Objects: MENU Dnumnvar values: The value is a user defined value. -------------------- MERGETYPE Property (New for MENU object) Format: MERGETYPE=dnumnvar Statements Supported: SETPROP GETPROP Description: This property is used to assign a merge action to a menu. Menus can be merged when a CONTAINER object that has a menu is activated. Objects: MENU Dnumnvar values: $MERGENONE EQU 0 $MERGELEFT EQU 1 $MERGEMIDDLE EQU 2 $MERGERIGHT EQU 3 - The FLOATMENU, MENU, and SUBMENU objects have been modified to support a $ITEMCLICK event. -------------------- FLOATMENU, MENU, and SUBMENU New Event Description ............................................................... . ItemClick Event $ITEMCLICK EQU 26 The ItemClick event occurs when a button in a TOOLBAR object is clicked, or a menu item in a FLOATMENU, MENU, or SUBMENU object is selected. Note the following: 1. The ItemClick event is referenced using an event value of twenty-six (26). The equated label in PLBEQU.INC for this event is $ITEMCLICK. 2. This event depends on the setting of the ACTIVATE property. 3. The Event Result value is the TAG property from the associated TOOLBUTTON or MENUITEM object. 4. For a TOOLBUTTON the Event Modifier contains a one based menu selection value, or 0 if no menu was associated with the TOOLBUTTON. - The FLOATMENU, MENU, and SUBMENU objects have been modified to support methods named AddItem, GetItem, and RemoveItem. -------------------- FLOATMENU, MENU, and SUBMENU New Method Descriptions ............................................................... . AddItem Method . The AddItem method creates a new menu item in a FLOATMENU, MENU, or SUBMENU object. The method uses the following format: [label] {object}.AddItem [GIVING {return}]: USING [[*Checked=]{checked}]: [*Default=]{default}][: [*Enabled=]{enabled}][: [*ItemPos=]{itempos}][: [*Separator=]{separator}][: [*ShortCut=]{shortcut}][: [*SpcMenu=]{spcmenu}][: [*SubMenu=]{submenu}][: [*Tag=]{tag}][: [*Text=]{text}][: [*RunName=]{runname}] Where: label is an optional Program Execution Label. {object} is a required FLOATMENU, MENU, or SUBMENU object to be accessed. {return} is an optional MENUITEM object that gets the return value. {checked} is an optional decimal number or Numeric Variable that specifies the checked flag of the menu item. (see CHECKED property). {default} is an optional decimal number or Numeric Variable that specifies the default flag of the menu item. (see DEFAULT property). {enabled} is an optional decimal number or Numeric Variable that specifies the enabled state of the menu item. (see ENABLED property). {itempos} is an optional decimal number or Numeric Variable that specifies the insertion position of the menu item. {separator} is an optional decimal number or Numeric Variable that specifies the separator flag of the menu item. (see SEPARATOR property). {shortcut} is an optional decimal number or Numeric Variable that specifies the associated short cut key. (see SHORTCUT property). {spcmenu} is an optional decimal number or Numeric Variable that specifies any special menu action. (see SPECIALMENU property). {submenu} is an optional SUBMENU object that specifies any associated submenu. (see SUBMENU property). {tag} is an optional decimal number or Numeric Variable that specifies the tag number of the menu item. (see TAG property). {text} is an optional Character String Variable or literal that specifies the text to be displayed on the menu item. (see TEXT property). {runname} is an optional Character String Variable or literal that specifies the run-time name of the menu item. (see RUNNAME property). Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. The created menuitem can be accessed through the ITEMS collection. ............................................................... . GetItem Method . The GetItem method obtains a MENUITEM object from a FLOATMENU, MENU, or SUBMENU object. The method uses the following format: [label] {object}.GetItem [GIVING {return}]: USING [*Key=]{key} Where: label is an optional Program Execution Label. {object} is a required FLOATMENU, MENU, or SUBMENU object to be accessed. {return} is an optional MENUITEM object that gets the return value. {key} is a required Character String Variable or Numeric Variable that specifies the run-time name (RUNNAME property) or zero based position of the menu item. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). ............................................................... . RemoveItem Method . The RemoveItem method removes a MENUITEM object from a FLOATMENU, MENU, or SUBMENU object. The method uses the following format: [label] {object}.RemoveItem [GIVING {return}]: USING [*Key=]{key} Where: label is an optional Program Execution Label. {object} is a required FLOATMENU, MENU, or SUBMENU object to be accessed. {return} is an optional Numeric Variable that indicates the success or failure of the method. {key} is a required Character String Variable or Numeric Variable that specifies the run-time name (RUNNAME property) or zero based position of the menu item. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. A return value of 0 indicates success. - The FLOATMENU, MENU, and SUBMENU objects have been modified to support an ITEMS collection. The internal composition of these objects is made up of multiple MENUITEM objects. The ITEMS collection allows direct access to the MENUITEM objects by the GETPROP or SETPROP statements. The collection uses the following format: [label] GetProp {object}.ITEMS({key}),{property} Where: label is an optional program execution label. {object} is FLOATMENU, MENU, or SUBMENT object to be accessed. {key} is required. This is a Character String Variable or Numeric Variable that specifies the run-time name (RUNNAME property) or zero-based position of the menu item. {property} is the remaining line of the GETPROP statement. - A new GUI object named MENUITEM has been added. This object can be used to access menu items that make up the FLOATMENU, MENU, or SUBMENU objects. This object can be used in GETPROP or SETPROP instructions. This object can not be used in a CREATE instruction. The MENUITEM supports the following properties: CHECKED DEFAULT ENABLED RUNNAME SEPARATOR (New for MENUITEM object) SHORTCUT (New for MENUITEM object) SPECIALMENU (New for MENUITEM object> SUBMENU (New for MENUITEM object> TAG (New for MENUITEM object> TEXT -------------------- MENUITEM New Property Descriptions -------------------- CHECKED Property (Updated for MENUITEM object) Format: CHECKED=dnumnvar Statements Supported: CREATE SETPROP GETPROP - EDITDATETIME object SETPROP GETPROP - MENUITEM object Description: If the object is an EDITDATETIME object, this property is used to set or get the status of a checkbox displayed in the EDITDATETIME object. A checkbox is displayed when the SHOWCHECKBOX property is set to $ON. If the property is set to $OFF, no check mark is shown in the checkbox and the EDITDATETIME object allows no data entry. If the property is set to $ON, a check mark is shown in the checkbox and the EDITDATETIME object allows data entry. If the object is a MENUITEM object, this property sets or clears a check mark beside the menu item. Objects: EDITDATETIME MENUITEM Dnumnvar values: $OFF EQU 0 // Default $ON EQU 1 -------------------- DEFAULT Property (Updated for MENUITEM object) Format: DEFAULT[=dnumnvar] Statements Supported: CREATE SETPROP GETPROP - BUTTON object SETPROP GETPROP - MENUITEM object Description: If the object is a BUTTON, this property specifies that the BUTTON object activation routine is to gain program control when the enter key is entered and a non-button object has the focus. However, if a button object other than the DEFAULT button object has the focus when the enter key is entered then the activation routine of the button object with the focus gains the program control. If the object is a MENUITEM object, this property specifies the menu item selected when a menu has been selected and the enter key is pressed. Objects: BUTTON MENUITEM Dnumnvar values: $OFF EQU 0 // Default $ON EQU 1 -------------------- ENABLED Property (Updated for MENUITEM object) Format: ENABLED=dnumnvar Statements Supported: CREATE SETPROP GETPROP - Objects other than MENUITEM SETPROP GETPROP - MENITEM object Description: This property specifies when an object is to be DISABLED/ENABLED. If the ENABLED property is set to $OFF for the CREATE/SETPROP statements, this is the same as if a DISABLEITEM with an ITEMNO value of zero was executed for the object. If the ENABLED property is set to $ON for the SETPROP, this is the same as if an ENABLEITEM with an ITEMNO value of zero was executed for the object. The GETPROP statement returns the current DISABLED/ENABLED state for the object. Note1: If the ENABLED property is set to $OFF for the objects ICON, MREGION, MOVIE, GROUPBOX, or PROGRESS there is no visible graying which identifies that the object is disabled. However, there are no events processed for these object when the ENABLED property is set to $OFF. Objects: BUTTON CHECKBOX CHECKGRP COMBOBOX DATALIST EDITTEXT GROUPBOX HSCROLLBAR ICON LISTVIEW MENUITEM MREGION MOVIE PICT POPUPMENU PROGRESS RADIO RADIOGRP SHAPE SLIDER STATTEXT STATUSBAR TABCONTROL TOOLBAR TREEVIEW VSCROLLBAR WINDOW Dnumnvar values: $OFF EQU 0 $ON EQU 1 // Default -------------------- RUNNAME Property (Updated for MENUITEM object) Format: RUNNAME=svarslit Statements Supported: SETPROP GETPROP Description: This property specifies the run-time name of the object. It is used when accessing an object from the ITEMS, PANELS or BUTTONS collection. Objects: MENUITEM STATUSPANEL TOOLBUTTON Svarslit value: String containing a name. -------------------- SEPARATOR Property (New) Format: SEPARATOR=dnumnvar Statements Supported: SETPROP GETPROP Description: This property is used to indicate that a menu item is to be shown as a separator line. Objects: MENUITEM Dnumnvar values: $OFF EQU 0 $ON EQU 1 -------------------- SHORTCUT Property (New for MENUITEM object) Format: SHORTCUT=dnumnvar Statements Supported: SETPROP GETPROP Description: This property is used to assign a short cut key to a menu item. A value of 0 indicates no short cut key. A value of 1 - 15 indicates F1-F15 function keys. A value of 16 - 30 indicates shift F1-F15 function keys. A value of 31 - 40 indicates control 0-9. A value of 41 - 66 indicated control A-Z. A value of 67 - 81 indicates control F1-F15 function keys. A value of 82 - 91 indicates control shift 0-9. A value of 92 - 117 indicated control shift A-Z. A value of 118 - 132 indicates control shift F1-F15 function keys. Objects: MENUITEM -------------------- SPECIALMENU Property (New for MENUITEM object) Format: SPECIALMENU=dnumnvar Statements Supported: SETPROP GETPROP Description: This property is used to assign a special menu action to a menu item. Objects: MENUITEM Dnumnvar values: $SPCMENUNONE EQU 0 $SPCMENUCOPY EQU 1 $SPCMENUCUT EQU 2 $SPCMENUDELETE EQU 3 $SPCMENUPASTE EQU 4 $SPCMENUSELALL EQU 5 $SPCMENUUNDO EQU 6 -------------------- SUBMENU Property (New for MENUITEM object) Format: SUBMENU=submenu Statements Supported: SETPROP GETPROP Description: This property is used to assign a SUBMENU object to a menu item. Objects: MENUITEM -------------------- TAG Property (Updated for MENUITEM object) Format: TAG=dnumnvar Statements Supported: SETPROP GETPROP Description: This property is used to identify a MENUITEM or TOOLBUTTON object when a parent object receives a $ITEMCLICK event. Objects: MENUITEM TOOLBUTTON Dnumnvar values: The is a user specified number to identify an object. -------------------- TEXT Property (Updated for MENUITEM object) Format: TEXT=svarslit Statements Supported: SETPROP GETPROP Description: This property specifies the text to display in the object. Objects: MENUITEM STATUSPANEL TOOLBUTTON Svarslit value: String of data. - Modified the CLEAR method to work for a read-only EDITTEXT object. - Added a new keyword named 'PLBWIN_DEADLOCKTIMEOUT={nnnn}'. This keyword should only need to be used in special situations. The value for this keyword specifies how many seconds the runtime should wait in an implied FILEPI enqueue lock before giving an error. An implied FILEPI enqueue lock is used to lock an AFILE/IFILE for a file IO statement when a FILEPI instruction is not used for the file. When using the Windows OS, it is possible that user applications can be created that can cause a Deadlock hanging situation if the user applications access multiple files while the applications allow locks to be applied in different orders. By default this keyword is not used by the PLBWIN runtime. If the {value} is set to a non-zero value less than 60 seconds, then the minimum time out of 60 seconds is used. Time out values larger than 60 seconds can be used depending on the circumstances. If the deadlock timeout time is exhausted while waiting for an implied FILEPI enqueue lock, then an I28 error occurs. If an I28 error occurs, then a user should evaluate all user applications being used and determine if a file locking order problem exists. The following programs give an example that can result in a Deadlock hanging situation. Program 1: IFILE1 IFILE ;FILE1.TXT and FILE1.ISI IFILE2 IFILE ;FILE2.TXT and FILE2.ISI . Open IFILE1,"FILE1" Open IFILE2,"FILE2" .... LOOP FILEPI 99;IFILE1 READ IFILE2,KEY;S$CMDLIN ;Can hang indefinitely! .... FILEPI 0 REPEAT Program 2: IFILE1 IFILE ;FILE1.TXT and FILE1.ISI IFILE2 IFILE ;FILE2.TXT and FILE2.ISI . Open IFILE1,"FILE1" Open IFILE2,"FILE2" .... LOOP FILEPI 99;IFILE2 READ IFILE1,KEY;S$CMDLIN ;Can hang indefinitely! .... FILEPI 0 REPEAT - Modified the GETFNAME instruction to accept a value offset of 100 for the TYPE={value} {mode} parameter. When an offset value of 100 is added to the TYPE {value}, then this causes a ';' character to be used as the delimiting character when multiple file selections are being returned. This change provides a solution to a problem where where file names included a comma character as part of the file names when a multiple files are selected. - Added a new object pointer variable named OBJECT. The OBJECT variable can point to any GUI object data type. The OBJECT variable is implemented to allow an application to execute basic GUI instructions without having to code explicit GUI object data variables. Format: [label] OBJECT [%] [label] OBJECT (arraysize) [label] OBJECT ^ [label] OBJECT ^,{target} [label] OBJECT ^(arraysize) [label] OBJECT ^(arraysize),({target),...,{target}) Where: label Optional. It specifies a program data variable reference. % Optional. Denotes the item as being GLOBAL. arraysize is an integer decimal constant, CONST variable, or EQUATEd value indicating the number of array items. ^ Optional. Denotes the item as being a POINTER. The OBJECT data variable is always implemented as a POINTER whether the '^' syntax format is used or not. target is the name of a previously defined GUI data object. Flags Affected: NONE Note the following: 1. The OBJECT data variable is always generated as a POINTER and must be initialized to point to a valid GUI data object before it can be used. Otherwise, an appropriate FORMAT error occurs. 2. The OBJECT data variable can only be used in the following PL/B instructions: CALL USING parameter CHECKPROP EVENTREG EVENTSEND GETPROP LISTDEL LISTGET LISTINS LOADADR MOVEADR MOVEPTR ROUTINE parameter SETFOCUS SETPROP STOREADR TYPE 3. The OBJECT data variable can not be used in the following PL/B instructions. The compiler gives an error when detected. ACTIVATE CHECKITEM CREATE DEACTIVATE DELETEITEM DISABLEITEM DRAGITEM ENABLEITEM EXPLODE GETITEM IMPLODE INSERTITEM {OBJECT}.Methods SETITEM SETWTITLE 4. An O159 error occurs when an invalid property is specified for the GUI object pointed to by an OBJECT data pointer in a GETPROP or SETPROP instruction. 5. The CHECKPROP instruction can be used to determine if a property is allowed for GUI object pointed to by an OBJECT data pointer. Example: A BUTTON B STATTEXT GEN OBJECT ;This is a POINTER! GEN1 OBJECT ^ . CREATE A=2:3:5:15,"TEST" CREATE B=5:6:5:20,"STATTEXT DATA","" . MOVEADR A,GEN . SETPROP GEN,VISIBLE=1 . CALL SHOWOBJ USING B . LOOP WAITEVENT REPEAT . SHOWOBJ ROUTINE GEN1 . CHECKPROP GEN1,"VISIBLE" IF EQUAL SETPROP GEN1,VISIBLE=1 ENDIF RETURN - Corrected a problem where a FINDFILE instruction did not work properly when a program was executed on a Windows 98 system and the file name being processed started with a '\\server\share' UNC form. This problem was caused because Windows 98 was returning indeterminate data when it should have been reporting an error. - Corrected a problem where PLB_CURDIR usage was causing an error when the specified file name started with a '\' path character. Notice, that a file name specified as '\path\filename.ext' is always intended to be a root relative open operation for the current drive. Also, notice, that if this first open fails, then the '\path\filename.ext' is processed using the PLB_PATH settings. This allows drive specifications to be put into the PLB_PATH and used with the '\path\filename.ext'. - Corrected a problem where GETPROP/SETPROP for the BDRSTYLE property of a PANEL, SPLITTER, and TOOLBAR did not work properly. - Corrected a S10 problem for a SPLOPEN using an '-' device name and the mode is set to 'R' raw data mode. - Corrected a problem where the TOOLBUTTON height and width were not being set properly for a CREATE TOOLBAR operation. - Corrected a problem where the TOOLTIP for a STATTEXT would not work when the parent for the STATTEXT was a PANEL object. - Corrected a problem where the SETITEM instruction was limiting numeric variable values to be less than 65536. This problem was causing COLOR object values to be truncated resulting in an erroneous color. - Corrected a problem where a COMREAD might not receive data if a server closed a socket immediately after sending a message. - Corrected a problem where a COMOPEN statement did not execute an implicit COMCLOSE if a COMFILE was being re-opened while the COMFILE was currently in an opened state. This problem was causing a memory leak to occur. - Corrected a problem where a FORM variable was not being zeroed when an EDITNUMBER object was cleared and a GETPROP operation for the VALUE property was executed. - Corrected a problem where a GETPROP of an EDITNUMBER object for the VALUE property was corrupting the UDA memory when the destination variable was a FORM. This could cause indeterminate program errors. - Corrected a problem where an I11 was occurring for a CREATE PICT operation where the {data} operand was a DIM variable that contained the picture image. - Corrected a problem where SETPROP of the SORTHEADER property for a LISTVIEW object did not change the LISTVIEW header behavior. - Corrected a problem where a SPLITTER position was indeterminate when a mouse drag action for the splitter caused the mouse selector to be positioned outside the parent window of the splitter. - Corrected a problem where TOOLBUTTON objects for a TOOLBAR on an Objects Only Form were not becoming visible when the form was loaded on to a parent window. - Corrected a problem where a PRTCLOSE instruction did not terminate a FILEPI. If a FILEPI was active when a PRTCLOSE entered into a Print Preview, then a system would be in a hung/waiting state until the Print Preview was exited. - Corrected a problem where the border for a basic EDITTEXT object border type did not draw the border over a TABCONTROL object. - Corrected a problem where a GETPROP VALUE=INTEGER operation for an EDITNUMBER object returned invalid values. - Corrected a problem with an EDITNUMBER object where a click action on the up/down buddy control was causing invalid/indeterminate values to be presented. - Corrected a problem where the EDITNUMBER object value was not being incremented/decremented by the value specified by the UPDOWNCHANGE value when using the up/down buddy control. - Corrected an S10 spool error that would occur for a PRTOPEN with a hyphen specified for name after a previous printer name was used that contained a printer name size larger than 31 characters. Prior to this change printer names were limited to 31 characters. Now, the runtime can allow printer file names with a size up to 99 characters. - Corrected a problem where a PRTPAGE *RNDRECT control did not display the round rectangle properly in Print Preview. - Corrected a problem where the RUNNAME property did not work when used to access a PANELS or BUTTONS collection in a STATUSBAR or TOOLBAR object. ------------------------------------------------------------------------------- PLB (CE) - The default font named 'Tahoma' is now used when an object is being created without a font specified when a program is being executed on a PockPC CE device. - Changing a FONTSIZE in a PLFORM for a LISTVIEW object for a program that is executed under Windows CE does not work. This problem is not a bug in the Sunbelt CE runtime. This problem is a Windows CE control problem. The LISTVIEW must be recreated to change the FONTSIZE. - Corrected a problem where a FLOATMENU was not generating a user event when executing under Windows CE. - Corrected a problem where a modal/modeless Window size was created as an extremely small window when a form was loaded by FORMLOAD. - Corrected a problem where the FINDFILE instruction did not work for Windows CE runtimes. ------------------------------------------------------------------------------- PLB (UNIX)- Added a new keyword named 'PLB_USLEEPCOUNT={nnnn}'. This keyword is used to adjust the ratio of file unlock operations executed before a usleep function is executed in a FILEPI unlock action. This means that a usleep function is executed for every {nnnn} OS unlock operations. This keyword can be used to adjust the OS performance for FILEPI processing depending on the kind of application being used. If the {nnnn} value is set to zero, then no OS usleep operations are executed for a FILEPI unlock action. By setting the {nnnn} value to a low non-zero value can help to allow multiple user applications to access a file under a FILEPI in a balanced/equal manner. However, on some Unix OS systems the {nnnn} value may need to be set to a higher value or zero when a batch or single user application is being executed. - Added three new controls for the DISPLAY/KEYIN instructions. These controls are named *EOFON, *EOFOFF, and *EOFFLAG. These controls can be set or cleared in either a DISPLAY or KEYIN instruction. However, they are only used in a KEYIN instruction to detect an error when the standard input has failed. *EOFON - When this control is executed, then a program SHUTDOWN operation is executed when a KEYIN detects that the standard input has failed. This control remains in affect until an *EOFOFF is executed. *EOFFLAG - When this control is executed, then a program KEYIN instruction sets the EQUAL flag when a KEYIN detects that the standard input has failed. This control remains in affect until an *EOFOFF is executed. When this control is in affect, then the EQUAL flag is automatically cleared when a KEYIN instruction is executed. *EOFOFF - When this control is executed, then the *EOFON or the *EOFFLAG control is canceled and the KEYIN instruction executes without detecting that the standard input has failed. Note: 1. The *EOFOF and *EOFFLAG modes are mutually exclusive. When one mode is activated, then the other mode is automatically canceled. The *EOFOFF must be used to cancel either mode. 2. If these controls are used in a program, then the application program must be aware that the KEYIN now affects the EQUAL flag. 3. The implementation of these controls is to address a situation where a program continued to execute after a Telnet client session was terminated prematurely. - Corrected a problem where the OVER flag was being set by mistake for a runtime that does not leave shared files open. This problem can occur when the following sequence of instructions were executed. READ IFILE,EOF;; READ IFILE,BLANKKEY;Data READKS IFILE;Data ;OVER flag set by MISTAKE! - Corrected a problem where encryption strings generated/used by the ENCRYPT/DECRYPT isntructions when executed by a forward byte-order runtime were not compatible with encrytion strings generated/used by reverse byte-order runtimes. A change has been made to the forward byte-order runtimes to generate/use encryption strings that are now compatible with reverse byte-order runtimes. *WARNING* The users for forward byte-order systems need to be aware that the encryption strings for the ENCRYPT/DECRYPT instructions for the version 9.0 release are NOT COMPATIBLE with prior releases for any forward byte-order runtimes. ------------------------------------------------------------------------------- PLBCMP - Modified the compiler to support an INTEGER 8 construct. - Modified the compiler to support a new directive named %ENCRYPTON. When this directive is used, then the compiler will encrypt all INIT and DIM ARRAY initialization strings. This can be used to prevent sensitive data from being readable in the PLC file. Format: %ENCRYPTON [] Note: 1. The parameter is optional. The parameter can only be specified as a literal string. 2. The string must be a valid string as defined for the ENCRYPT instruction. See description for ENCRYPT. 3. If the string is not specified, then the compiler encrypts the data using the default ENCRYPT operations. 4. If a second %ENCRYPTON directive is encountered while a previous %ENCRYPTON directive is active, then the second %ENCRYPTON setting will be used. 5. The user program MUST use the DECRYPT instruction to decrypt any INIT or DIM ARRAY initialization data strings before being used in a program. - Modified the compiler to output the compile command line into a Window Titlebar when using a GUI runtime. - Modified the compiler to support a directive named %ENCRYPTOFF. When the compiler encounters this directive, then the encryption for INIT or DIM ARRAY initialization strings is disabled. All INIT and DIM ARRAY initialization strings are stored into a PLC module unchanged. - Added new compiler option named '-ZL'. This option causes the compiler to delete a spooled file listing output if a program compiled without any errors. This option only takes affect when the 'p' option is specified. - Added new compiler option named '-ZR="{del}"' allows a user to specify up to 2 characters for the {del} string that identifies a comment delimiter used for embedded source line comments. Sample: plbcmp program -zr=";" This command line will cause the compiler to give a compilation error if an embedded source line comment does not start with the semi-colon ( ; ) character. Example for the above Sample command line: MOVE "1",S$CMDLIN ;Comment ok MOVE "2",S$CMDLIN -INVALID COMMENT! - Modified the '-ZQ' compiler option to allow an optional level value. This modification allows 'ZQ=1' to be specified. This 'ZQ=1' option causes the compiler to suppress all displayed output except for the line counter. This change is being made to provide a compilation activity indication. - Added a new instruction named LISTCNT. The LISTCNT instruction retrieves the current object count for a specified COLLECTION. Format: [label] LISTCNT {dest}{sep}{collection} Where: label - Optional Program Execution Label dest - Previously defined Numeric Variable that receives the current object count for the {collection} object. collection - COLLECTION object whose object count is being requested. Flags: OVER - The OVER flag is set TRUE if the value stored into the {dest} variable is truncated. Notes: 1. The object count indicates the number of objects in a COLLECTION object at the root level. This means that a nested COLLECTION object within another COLLECTION is identified a value of 1 toward the total object count. 2. The {dest} count is set to be zero if the COLLECTION has not been created using a LISTINS instruction. - Added a new instruction named LISTGET. The LISTGET instruction stores the address of a specified object, found in the COLLECTION by an index, into a TYPELESS variable. Format: [label] LISTGET {dest}{sep}{index}{sep}{collection} Where: label - Optional Program Execution Label dest - The {dest} variable must be a TYPELESS variable where the specified COLLECTION object address is stored. index - A dnumnvar value that is a 1 based index to identify which object in the COLLECTION is to be retrieved. collection - A COLLECTION object that is being accessed. Flags: OVER - The OVER flag is set TRUE if the object address can not be accessed from the COLLECTION object. Otherwise, the OVER flag is set to be FALSE. Notes: 1. If the COLLECTION object has not been created, then the OVER flag will be set to be TRUE and the {dest} TYPELESS variable remains unchanged. 2. If the {index} has a value larger than the number of objects in the COLLECTION, then the OVER flag is set TRUE and the {dest} TYPELESS variable remains unchanged. 3. The TYPE instruction can be used to retrieve information about the {dest} TYPELESS variable. This type information can be used to store the object into an appropriate object pointer that can be used in other PLB GUI instructions. - Modified the compiler to support the '==' relational operation that can be used in place of the relational operator '='. Example: IF ( S$CMDLIN == "TEST" ) ... ENDIF - Modified the INCLUDE identifiers to support both uppercase and lowercase alpha characters. This means that any combination of identifiers ( a|A to z|Z ) is allowed. This increases the unique id count from 702 to 2756. This does mean that local label references must use the leading INCLUDE identifier as case sensitive when accessed in the PLB source debugger. - Modified the compiler to support DIM sizes larger than 64KB. The DIM data construct maximum size allowed by the compiler is 32MB (33554431 value). When a DIM size larger than 65535 is specified, then the DIM data construct is implemented as an auto load DIM pointer. This helps to keep the '.plc' program file size as small as possible. See the new compiler option description to change the default auto load DIM pointer size. If a user application requires a DIM data variable with a size larger than 32MB, then a DIM pointer can be used and an SMAKE can be used to create a DIM with a size up to 2GB (2147483647 value). This size is limited by the OS memory allowed for the PLB program space. The runtime 'm' or 'MV' command line options can be used to increase the PLB program memory size. Examples: A DIM 65535 ;Old maximum DIM size B DIM 65536 ;Auto load DIM pointer used C DIM 2000000 ;Auto load DIM pointer used . pA DIM ^ . SMAKE pA,40000000 ;'m' option required Tips: 1. If WRITE operations are performed using very large DIM variables, then FILE variables with small buffer sizes should be avoided because it can result in a long time to perform the IO operation. 2. If a WRITE operation is performed using a very large DIM variable, then opening a FILE variable in a SHARENF or EXCLUSIVE mode can give the best performance time to perform the IO operation. - Added a new compiler option named 'ZJ[=nnnnn]. The ZJ option can be used to change the default Auto Load DIM size that the compiler uses when processing a DIM data variable. The Auto Load DIM is a case where the compiler determines that the DIM variable is to be generated where the PLB runtime creates the DIM variable when the program is loaded. By default, without the ZJ option, the compiler forces a DIM variable to used as an Auto Load DIM when the DIM size is larger than 65535. The ZJ option can be used to change this default value. If the ZJ option is used without the 'nnnnn' value, then the default Auto Load DIM size is set to be 256. If the 'nnnnn' value is specified, then the 'nnnnn' value is used as the Auto Load DIM default size. - Added a new instruction named AAMDEX. - Added a new instruction named INDEX. - Modified the PROFILE and WINAPI instructions to support new variable types named INT8 and PINT8. These data types are defined as follows: INT8 is an INTEGER of eight bytes. PINT8 is a pointer to an INTEGER of eight bytes. - Added a new compiler directive named '%AUTODIM {nnnnnn}'. This directive changes the current Auto Load DIM size used for the compilation to be set to the {nnnnnn} value. This gives more control to allow multiple Auto Load DIM sizes for a program compilation. If the {nnnnnn} value is set to zero (0), then the Auto DIM size processing by the compiler is disabled as long as the size is set to zero. The Auto DIM size is used by the compiler to determine when the size for a DIM variable is to be coded using the 'DIM ^size' syntax form. - Modified the compiler to give a compiler error if the Auto Load DIM syntax 'DIM ^size' is being used in a program and a ROLLOUT instruction is encountered. This is not allowed because the Auto Load DIM variables are created using OS memory allocation functions and these variables do not reside in the program memory space. - Modified the GETPROP instruction to support the FONT property for a FONT object. This change can allow an application to retrieve the font named directly from the FONT object. Also, this change allows a FONT object to be duplicated easily. - Modified the *ORIENT control for a PRTPAGE operation to accept a {dnumnvar} operand in addition to the *LANDSCAPE and *PORTRAIT keywords. If the {dnumnvar} value is 1, then PORTRAIT is used. If the {dnumnvar} value is 2, then LANDSCAPE is used. Any other values for the {dnumnvar} value causes PORTRAIT to be used. - Modified the compiler to give a syntax error when a file variable declaration keyword value for BUFFER/FIXED/VAR is too large. The maximum allowed value for these keywords is 65533. - Modified the compiler to give a syntax error when a PREP for an AFILE or IFILE has an invalid record size value specified. The compiler can only verify literal value in this case. The record size value must be greater than zero and can not be larger then 65533. - Modified the compiler to generate pcode for a KEYIN *EDIT control to executed with behavior consistent with the SWDBC compatibility mode. When the 'zc#3' compatibility mode is used, then the *EDIT executes like *DVEDIT with *INSERT turned on. - Modified the initialization for a DIM array to allow a NULL literal ("") to be supported. Example: A DIM 4(3),("a"),(""),("c") - Modified to support the new OBJECT GUI object pointer data variable. See description under PLBWIN for details. - Corrected a problem where a compilation error was occurring when a a PLFORM collection reference was encountered in the source list of objects and the destination operand was a COLLECTION object pointer for a LOADADR instruction. - Corrected a problem where a compilation error was occurring when a COLLECTION object pointer was encountered in the destination object list and the source operand was a PLFORM collection reference for a STOREADR instruction. - Corrected a problem where the compiler was not giving an error when the destination variable of a GETITEM instruction was a FORM and the object was an EDITNUMBER. The compiler now gives an error in this case. - Corrected a problem where the compiler was allowing a STATUSBAR object to be used in a GETITEM and SETITEM statement. The compiler now gives a compilation error when a STATUSBAR is used in a GETITEM and SETITEM instruction. - Corrected a problem where the compiler would hang indefinitely when a CALL statement with the following syntax was encountered. Example: REC RECORD (2) A DIM 5 B DIM 5 RECORDEND . CALL FUNC USING REC(2) ... ------------------------------------------------------------------------------- PLBDBUG - Modified the debugger to support DIM sizes larger than 64KB. - Modified the debugger to detect COMM errors when communicating with the GUI debugger. ------------------------------------------------------------------------------- PLBDSIGN - Modified the startup processing so that the Code window no longer comes to the front on creation of a new form. - Added a new menu item under 'File' named 'New PocketPC FORM'. This menu item selection causes a new form to be created and initialized for designing a form for a PocketPC. When a PocketPC FORM is being used, then the default font is set to the 'Tahoma' font that is supported by PocketPC CE devices. - Modified to initialize the Toolbox window to show all tool buttons. - Added Sunbelt icon to show in the 'About dialog'. - The designer title bar now properly reflects a forms dirty status by giving an '*' character after the form name. - Added a new designer window that shows an Object tree view for the designer. The new Object Tree can show multiple forms that currently opened. All objects are group by object type. With the implementation of an Object Tree, this allows objects that are not visual to be included into a form like TIMER and IMAGELIST objects. - The designer has been changed to prevent the Code Window from popping up on Ctrl-Tab sequence. - Add IMAGELIST and TIMER objects to a form. The visual access for these objects is available through the Object Tree. - Added a combobox display of images to TOOLBAR buttons. - Added hide/show state for PANEL objects. When the user performs a right mouse click action over a PANEL object, then a Hide or Show action is available. These feature allows a user to design multiple PANEL objects for a single form. This can be used to design a PANEL object with a set of objects that can be associated with individual tabs of a TABCONTROL object. - Read-only resources can now be opened by the resource dialog. - Popup property values for properties in the PROPERTY window are now sorted. - Popup property values for properties in the PROPERTY window now show actual value as 'nnn -'. The nnn value in this case is the actual property value that can be used for the property in direct program instruction usage of the property. - Added Change event for the ANIMATE and IMAGELIST objects. - Added ResourceId for the IMAGELIST object. This allows a picture resource to be assigned to provide images for the imagelist. The Windows OS Imagelist control segments the picture into segments according to the ImageHeight and ImageWidth property settings. - Modified the BUTTON object to support an ICON and PICTURE property. This change allows the images to be assigned to a BUTTON object during the design phase of a form. - Modified the WINDOW object to support an ICON for a form. This change allows the form window Icon to be assigned during the design phase of a form. - Added the TABID property for the STATBUSBAR and TOOLBAR properties. This change allows the user to determine if these objects should be included in the tabbing sequence or not. - Modified the designer to support FLOATMENU, MENU, and SUBMENU objects. The implementation for these objects is being done using the new object tree view for the designer. Menu items can be created for each object menu type. In addition, submenu objects can be associated with FLOATMENU, MENU, and SUBMENU objects that have been created. - Corrected a problem where the TOOLBUTTON height and width were not being set properly for a CREATE TOOLBAR operation. - Corrected a problem where a change to the ALIGNMENT property for an EDITNUMBER object did not show immediately in the designer. - Corrected a problem where a VISIBLE false state for TOOLBUTTON buttons for a TOOLBAR was being reset to a true state after a form was saved and reloaded. - Corrected a problem where the EDITNUMBER object size is left at a reduced size when an UpDown control is removed. - Corrected a problem where the EDITNUMBER object data was being selected after the object was resized and then the up/down control was clicked. ------------------------------------------------------------------------------- UTILITY - Modified SUNINDEX to support a new option named 'N$'. This option causes the index utility to ignore duplicate keys and any duplicate key warning messages are ignored/suppressed. - Added new internal option '-Q{logname}' for the SUNAAMDX, SUNINDEX, and SUNSORT utilities. The internal 'Q' option allows the utilities to append displayed data to a {logname} log file. - Added a new user option 'O[={n}]' for the SUNINDEX and SUNAAMDX utilities. The 'O' option causes the AAM/ISI file headers to marked for use by a Windows or Unix PL/B runtime. The {n} OS Type value is optional. If the {n} value is not specified, then the AAM/ISI files are marked for an OS Type depending on whether the utility is being executed as a Windows or Unix utility. If the {n} value is specified, then the value must be either 1 for Windows or 2 for Unix. Please note the following: Examples: 1. sunindex data -1-5,O If the 'sunindex' utility is being executed as a Windows utility, then the 'data.isi' index file is marked so that a Windows runtime ( PLBWIN, PLBCON, ...) can open the ISI file. If the 'sunindex' utility is being executed as a Unix utility, then the 'data.isi' index file is marked so that a Unix runtime ( PLB ) can open the ISI file. 2. sunindex data -1-5,O=1 The 'data.isi' index file is marked so that a Windows runtime can open the ISI file. 3. sunindex data -1=5,O=2 The 'data.isi' index file is marked so that a Unix runtime can open the ISI file. - Modified the MAKEMFD utility to use a default port number of 3934 to access the SUNFM file manager. - When using SUNINDEX to index a file using a binary data option, then the Lnnn record length must be specified. Otherwise, an appropriate utility error occurs. ------------------------------------------------------------------------------- ODSBAC32.DLL- The Sunbelt ODBC driver has been enhanced to improve the performance when communicating with a SUNFM File Manager. - The driver optimization algorithms have been improved to provide the best performance possible. - The optimization for '<', '<=', '>', and '>=' SQL selection combinations has been improved to only process the range requested in the same column. - Support for Restriction Numbers has been implemented for columns to be used in multikey Isam files and temporary Isam file creation. A Restriction Number is a number that identifies the relative importance/uniqueness of a given column. The Restriction Number is specified as a numeric value defined as [res] when specifying the COLnnn column declaration in the SASCHEMA.INI file. The higher the Restriction Number indicates that the column has a higher importance and is more unique as compared to other column declarations. See the 'Readme32.txt' file for more information. - When a non-zero Restriction Number is declared for a column in the SASCHEMA.INI file, then temporary Isam working files are created to optimize the processing required to retrieve the data for a SQL selection request. ------------------------------------------------------------------------------- SUNFHSYS.DLL- Modified the File IO capabilities to provide large file support with file sizes larger than 4GB. - Modified to use the new SUNFM user port number of 3934. - Modified to support TRANSACTION statements. - Modified to support AAMDEX, INDEX, and SORT instructions. - Modified to support DBxxxx enhancements. - Corrected a problem where a FILEPI using a file variable opened in EXCLUSIVE mode was causing a SUNFM file manager child thread to hang indefinitely. ------------------------------------------------------------------------------- ADMIN - Modified the PLBSERVE and SUNFM servers to support ADMLOGON operations using the server main listening logon entry point that uses the default port number for the server. This capability is enabled as a default when the servers are using the ADMIN_PUBLIC keyword to provide secured access to the servers. In addition, a new keyword named 'ADMIN_MAINLOGON={on|off}' is available for the servers to disable the main logon capability. ------------------------------------------------------------------------------- SUNIDE - Increase the size of the fully qualified name allowed for programs to 250 bytes. - Added the GUI debugger. - Added user defined tool menu. - Added tabs to the code window for each file that is open. - Added support for user defined icons for user defined tools. - Modified project file to support a preferred compiler and runtime, the defaults are used if they are not found or not specified. - Modified the Backup project files to include the PLCs. - Add source now causes the most recently added source of a project to be the active program. - Modified Dependency processing to use Large dim support for better performance. - Modified project file format for faster processing. - Made a change in the source map to indicate files that were not found. - Modified the project file so it is stored compressed to save space. *NOTE* The Project file is not compatible with earlier versions of the IDE. - User defended tools can now appear on the TOOLBAR - Modified C15 error checking to re-initialize the SEARCHPATH when a subcode 27 is encountered and retry before failing. - Modified Browse labels column sort to change the sort order. - Modified Browse labels column sort to be accumulative. - Modified the Print logic to expand tabs using the editor defined tabsize. - Added support of displaying the function key flag state. - Fixed a bug where variables defined in includes may not get loaded from a source listing. - Fixed a bug where the -I runtime option may be specified even if there is no specified project INI file. - Fixed a bug where not all programs are reported as up to date when doing a build all. - Fixed a bug where an O105 error could occur if there were no files open. - Fixed a bug where nested dependencies may not be preserved. - Fixed a bug were saved compiler options could become corrupt. - Fixed a problem where the IDE could open the wrong list file if more than one existed on the PLB_PATH. The IDE now reports the list file that is truly being processed so the user can more easily identify if the wrong list file is being evaluated for errors. - Fixed a problem where the CUT/COPY/PASTE and UNDO/REDO edit menu options and toolbar button could be set at random with multiple editor windows open. - Fixed a bug where if a user changed the project working directory, it would not take effect until the next time the project was opened. - Fixed a problem where the good and bad compile counters were only 2 digits resulting in incorrect results for larger projects. - Fixed a bug were the IDE could get stuck in an infinite loop while initially loading list files. - Fixed a problem where the list file counter was only 2 digits resulting in not having all the list files for larger projects loaded. - Fixed various file name handling bugs(names with spaces). - Fixed a bug in the build process where the modification dates of some includes were not getting evaluated. - Corrected a problem where the IDE may not report a LISTFILE as missing and assume a good compile. - Corrected a bug where the IDE may not save all files before a compile or while exiting. - Corrected a problem where stale data could corrupt a new project if it is created to overwrite an existing one. Date: 06-09-2004 Subject: Patch RELEASE 9.0A Runtime Files Included you will find the patch release of: PLBCLIENT 9.0A 09 Jun 2004 9,0,1,0 PLBCLICON 9.0A 09 Jun 2004 9,0,1,0 PLBSERVE 9.0A 09 Jun 2004 9,0,1,0 PLBWIN 9.0A 09 Jun 2004 9,0,1,0 PLBDSIGN 9.0A 09 Jun 2004 9,0,1,0 SUNAAMDX 9.0A 09 Jun 2004 9,0,1,0 SUNINDEX 9.0A 09 Jun 2004 9,0,1,0 SUNSORT 9.0A 09 Jun 2004 9,0,1,0 SUNFYSYS.DLL 9.0A 09 Jun 2004 9,0,1,0 SUNFHDLL.DLL 9.0A 09 Jun 2004 9,0,1,0 SUNFHDLL.LIB 9.0A 09 Jun 2004 PLBCMP 9.0A 09 Jun 2004 PLBEQU.INC 9.0A 09 Jun 2004 *============================================================================== Notes for some NEW Items: - OSEVENTMASK property has been added for a LISTVIEW object. *============================================================================== Notes for WARNINGS: - If the 9.0A SUNFHSYS is used with any prior release versions of PLBWIN, then the runtime gives the following error: 'Fatal error condition U40 encountered.' *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - Corrected a problem where PLBSERVE would be terminated without logging an error into the log file when the PLBCS_HOSTNAME and PLBCS_PORTNUM keywords were the same as the ADMIN_HOSTNAME and ADMIN_PORTNUM keywords in the PLBSERVE.INI file. ------------------------------------------------------------------------------- PLBWIN - Corrected a problem where the LOADADR and STOREADR instructions PLBSERVE did not de-reference a pointer created by DMAKE. This would result PLB (UNIX) in a program memory leak where the memory was not freed until the runtime process executing the PL/B program was terminated. - Corrected a problem for the INDEX and SORT instructions where the data was not properly sorted when the input data file contained a large number of records that required more than one sort train. ------------------------------------------------------------------------------- PLBWIN - Added a new property named 'OSEVENTMASK={dnumnvar}' for the LISTVIEW object. The OSEVENTMASK property allows a PL/B application to specify a bit mask to enable and disable system events processed for the object. OSEVENTMASK={value} Note: 1. OSEVENTMASK may be used in CREATE, GETPROP, or SETPROP statements for the following object(s): LISTVIEW 2. {value} is a decimal number, a Numeric Variable, an Expression, or a keyword defined in PLBEQU.INC. The numeric value is implemented as a bit mask definition. The is to allow future expansion for other event processing. The supported values and keywords are: Value Keyword Comment 0 $MASK_NONE Allow all system event actions 1 $MASK_WMCHAR Disable WM_CHAR OS actions. 3. When a user application sets an OSEVENTMASK bit mask, then this action changes the processing of this event for a given object. $MASK_WMCHAR - When this mask bit is set to 1, then the default OS WM_CHAR event is prevented. This means that the default OS event processing of any keyed character for an object does not occur. The OSEVENTMASK property mask is being implemented as a generic solution that can be expanded in the future for a problem where characters keyed for a LISTVIEW object was changing the selected items. By setting the $MASK_WMCHAR mask in the OSEVENTMASK property for a LISTVIEW object, this behavior is changed and keyed characters while a LISTVIEW has the focus does not change the selected items. ------------------------------------------------------------------------------- PLBCMP - Modified to support the OSEVENTMASK property for the LISTVIEW object. - Corrected a GPF problem that might cause invalid program pcode for the following sequence of instructions. Example: TWO FORM "2" A FORM 2(3) B FORM 2(0..5) C FORM 2(0..5) . MOVE "2",A MOVE TWO,B MOVE TWO,C ;GPF Error! - Corrected a GPF problem caused when the CALLS instruction was compiled into a program for the following example. Example: A INIT "dummy" ARR DIM ^(1),(A) . CALLS ARR(1) ;GPF Error! ------------------------------------------------------------------------------- PLBDSIGN - Modified to support the OSEVENTMASK property for the LISTVIEW object. A value of 0 or 1 can be specified for the property value at this time. See details in the PLBWIN section above. ------------------------------------------------------------------------------- UTILITY - Corrected a problem in the SUNAAMDX utility where the 'b', 'd', 'm', and 'n' options caused a command line syntax error. - Corrected a problem where SUNINDEX and SUNSORT did not properly sort a data file that contained a large number of records that required more than one sort train. ------------------------------------------------------------------------------- SUNFHSYS.DLL- Modified to correct INDEX/SORT instruction sort problem when when more than one sort train was required. ------------------------------------------------------------------------------- SUNIDE - Fixed problems in the projects options dialog where if a user tried to browse for a prefered runtime, it would place the selected file in the project ini section. - Fixed a problem in the IDE configuration dialog where indeterminate text would be placed in the runtime section after browsing for a runtime. - Corrected a problem in the user tools dialog where the entry point edittext was not always being enabled. - Corrected a bug were we may try to get font informaiton from a font object that was not created. - Corrected an unexpected O105 error that could occur while closing a file. Date: 07-23-2004 Subject: Patch RELEASE 9.0B Runtime Files Included you will find the patch release of: MAKEDEF 9.0B 23 Jul 2004 9,0,2,0 PLBCLIENT 9.0B 23 Jul 2004 9,0,2,0 PLBCLICON 9.0B 23 Jul 2004 9,0,2,0 PLBWIN 9.0B 23 Jul 2004 9,0,2,0 ODSBAC32.DLL 9.0B 23 Jul 2004 SUNFYSYS.DLL 9.0B 23 Jul 2004 9,0,2,0 SUNFHDLL.DLL 9.0B 23 Jul 2004 9,0,2,0 SUNFHDLL.LIB 9.0B 23 Jul 2004 PLBCMP 9.0B 23 Jul 2004 PLBSERVE 9.0B 23 Jul 2004 9,0,2,0 PLBDSIGN 9.0B 23 Jul 2004 9,0,2,0 SUNAAMDX 9.0B 23 Jul 2004 9,0,2,0 SUNINDEX 9.0B 23 Jul 2004 9,0,2,0 SUNSORT 9.0B 23 Jul 2004 9,0,2,0 PLBEQU.INC 9.0B 23 Jul 2004 PLBMETH.INC 9.0B 23 Jul 2004 *============================================================================== Notes for some NEW Items: - Added three new events for LISTVIEW. ( $MOUSEWHEEL, $HSCROLL, and $VSCROLL ) - Added a new object named RICHEDITTEXT. - Added new methods for LISTVIEW object to store and load data from files. - Added new methods for TREEVIEW object to store and load data from files. - Added new LIKE directive to PLBCMP compiler. *============================================================================== Notes for WARNINGS: - If the 9.0B SUNFHSYS is used with any prior release versions of PLBWIN, then the runtime gives the following error: 'Fatal error condition U40 encountered.' - If the 9.0B PLBWIN runtime is used with any prior release versions of SUNFHSYS, then the Windows OS gives the following error: 'Entry Point Not Found.' 'The procedure entry point FhXmlWriteString could not be located in the dynamic link library Sunfhsys.dll.' *============================================================================== Notes for DOCUMENTATION: - An instruction name 'APICALL' was added as an alias for 'WINAPI' in the 9.0 release. This was overlooked as an addition in the 9.0 RFM. *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - Corrected a problem where the STOP command using the Windows Services Control Panel did not work after a user had logged onto the server and logged off. - Corrected a problem for a forward byte ordered Unix PLBSERVE runtime that would cause a PLBCLIENT to get a GPF error when executing a FORMLOAD. ------------------------------------------------------------------------------- PLBWIN - Modified the AAMDEX, SORT, and INDEX instructions to support the PLBSERVE runtime INI file. Prior to this change these instructions would only PLB (UNIX) make use of an INI file when the '-I{inifile}' option was specified. With this change, these utility instructions use the default runtime INI file to locate execution keywords. If the '-I{inifile}' option is used, then these instructions look in the {inifile} first and if a keyword is not found, then they look in the default runtime INI file. If a keyword is not found, then the instructions look for a keyword in the UET (User Environment Table). This change corrects a problem where the use of PLBVOL_ keywords could not be used by the AAMDEX, INDEX, and SORT instructions without specifying the 'I{inifile}'. - Modified the COMREAD and COMWRITE instructions to support an optional ';' character as a statement terminator. This syntax format is used to execute partial IO operations for these instructions. The new syntax formats for COMREAD and COMWRITE are as follows: Format: COMREAD {comfile}[,[{eot}][,{filter}]];{comlist}[;] COMWRITE {comfile};{comlist}[;] Note: 1. If a semi-colon (;) terminates the list for a COMREAD, then this instruction leaves the communication buffer pointers positioned immediately after the last character processed, rather than ignoring the remaining data in the buffer. This allows another COMREAD instruction to be executed to retrieve any remaining data in the communication buffer. 2. If a semi-colon (;) terminates the list for a COMWRITE, then this instruction transfers data from the {comlist} variables to the output buffer and this buffer data is not transmitted. When a COMWRITE is executed without a (;) terminator, then the output buffer data is transmitted. An IO error occurs if a COMWRITE overflows the output buffer. - Corrected a pointer initialization problem in a LROUTINE/ROUTINE that gives different pointer usage results in the version 9.0 release as compared to the version 8.x releases. This problem was only occurring when an variably indexed array pointer was being used as a CALL USING operand. The problem as shown in the following example is that the LROUTINE/ROUTINE pointer parameter (#PTR) was being initialized to point to the XPTRARR(1) pointer variable. To be consistent with prior releases, the #PTR pointer should contain the address of the de-referenced variable. In this case, the #PTR should contain the address of the X variable. Example: X DIM 1 XPTRARR DIM ^(2) I1 INTEGER 1,"1" . MOVEADDR X TO XPTRARR(I1) . CALL RTN USING XPTRARR(I1) ..... . #PTR DIM ^ RTN LROUTINE #PTR ... RETURN - Corrected a F04 error that would occur when the CALL USING operand was specified as an uninitialized array of pointers and the LROUTINE/ROUTINE operand was an array of pointers. Example: ARR DIM ^(2) . CALL TEST USING ARR ..... . XARR DIM ^(2) . TEST ROUTINE XARR .... RETURN - Modified the runtime logon processing when accessing the SUNFM file manager to prevent a hanging situation that might occur. This hanging situation was only occurring for a very specific race condition between a client runtime and the file manager. Thus, it did not occur for most application environments. - Corrected a problem for the AAMDEX, INDEX, and SORT instructions where an invalid command line error was occurring giving an OVER flag for the following command lines: SORT "in.txt, out.srt -1-5" INDEX "in.txt, out.isi -1-5" AAMDEX "in.txt, out.aam -1-5" This problem would occur when a blank character followed the ',' (comma) delimiter that was specified in the command line. - Corrected an I57 error that would occur for an UPDATE or DELETE for a FILELIST after a sequential READ operation was executed for an IFILE or AFILE in the FILELIST. - A potential problem has been corrected where a text data file could have indeterminate data record corruption for an UPDATE or DELETE for a FILELIST if multiple sequential READ operations were executed for an IFILE or AFILE in the FILELIST. ------------------------------------------------------------------------------- PLBWIN - Added three new events for the LISTVIEW object. These events are generated when the Windows WM_HSCROLL, WM_VSCROLL, or WM_MOUSEWHEEL OS events are received when a scrollbar or mousewheel for the listview is clicked/changed. The use of these PL/B user events can allow better control over the scrollbar/mouse wheel scrolling actions of a LISTVIEW object when an EDITTEXT object is being used to enter data for a LISTVIEW sub-item cell. Please beware that the user application may need to use the FASTEVENT EVENTREG option to get the desired results when using these events to control an EDITTEXT object used for editing cell data. The new LISTVIEW events are documented as follows: $MOUSEWHEEL EQU 27 The MouseWheel event occurs when a mouse wheel action is taken for a LISTVIEW object. Note the following: 1. The Mousewheel event is referenced using an event value of twenty-seven (27). The equated label in PLBEQU.INC for this event is $MOUSEWHEEL. 2. The Event Result value gives the distance that a mouse wheel has rotated. This value is given in multiples of Windows WHEEL_DELTA units, which is 120 per WHEEL_DELTA. This value is the threshold for the action to be taken, and one such action (for example, scrolling one increment) should occur for each delta unit. 3. The Event Modifier contains a value from the following table: Value Key Pressed 1 ALT 2 CTRL 4 SHIFT 8 Left Mouse Button 16 Right Mouse Button 32 NOT USED 64 Mouse Wheel rotated toward the end user 4. The Event Modifier value of 64 is an indication whether the end user has rotated the mouse wheel forward or backward. If this bit is not set, then the mouse wheel was rotated forward or away from the user. If this bit is set, then the mouse wheel was rotated backward or toward the user. $HSCROLL EQU 28 The HScroll event occurs when the horizontal scrollbar for a LISTVIEW object is clicked or changed using the thumb button. Note the following: 1. The HScroll event is referenced using an event value of twenty-eight (28). The equated label in PLBEQU.INC for this event is $HSCROLL. 2. If Event result value is set to current position of the scroll box if the Event Modifier value is set to $SB_THUMBPOSITION or $SB_THUMBTRACK. Otherwise, the Event Result value is not used. 3. The Event Modifier contains a value from the following table: Value Scroll Action 0 Line Left scroll 1 Line Right scroll 2 Page Left scroll 3 Page Right scroll 4 Thumb Position change 5 Thumb Track change 6 Home Left position 7 Home Right position $VSCROLL EQU 29 The VScroll event occurs when the vertical scrollbar for a LISTVIEW object is clicked or changed using the thumb button. Note the following: 1. The VScroll event is referenced using an event value of twenty-nine (29). The equated label in PLBEQU.INC for this event is $VSCROLL. 2. If Event result value is set to current position of the scroll box if the Event Modifier value is set to $SB_THUMBPOSITION or $SB_THUMBTRACK. Otherwise, the Event Result value is not used. 3. The Event Modifier contains a value from the following table: Value Scroll Action 0 Line up scroll 1 Line down scroll 2 Page up scroll 3 Page down scroll 4 Thumb Position change 5 Thumb Track change 6 Home up position 7 Home down position - The OSEVENTMASK property for the LISTVIEW object has been updated support three new OS event-masking values. The OSEVENTMASK can be any combination of bit values as defined in the following table: Value Keyword 0x00 $MASK_NONE 0x01 $MASK_WMCHAR 0x02 $MASK_WMMOUSEWHEEL ;New for 9.0B 0x04 $MASK_WMHSCROLL ;New for 9.0B 0x08 $MASK_WMVSCROLL ;New for 9.0B $MASK_WMMOUSEWHEEL - When this mask bit is set to 1, then the default OS WM_MOUSEWHEEL event is prevented. This means that the default OS event processing of a mouse wheel action for an object does not occur. $MASK_WMHSCROLL - When this mask bit is set to 1, then the default OS WM_HSCROLL event is prevented. This means that the default OS event processing of a horizontal scrollbar action for an object does not occur. $MASK_WMVSCROLL - When this mask bit is set to 1, then the default OS WM_VSCROLL event is prevented. This means that the default OS event processing of of a vertical scrollbar action for an object does not occur. - A new GUI object named RICHEDITTEXT has been added to the PL/B objects. This object provides an interface to the Windows rich edit text control. Format: [label] RICHEDITTEXT [%] [label] RICHEDITTEXT (arraysize) [label] RICHEDITTEXT ^ [label] RICHEDITTEXT ^,{target} [label] RICHEDITTEXT ^(arraysize) [label] RICHEDITTEXT ^(arraysize),({target}),... Where: label - Optional. A program Execution Label. % - Optional. Denotes the item as being GLOBAL. arraysize - Required. An integer decimal, 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 RICHEDITTEXT object is supported in the following GUI instructions. ACTIVATE CREATE DEACTIVATE DELETEITEM DISABLEITEM DRAGITEM ENABLEITEM EVENTINFO EVENTREG EVENTSEND EXPLODE GETITEM GETPROP IMPLODE INSERTITEM LISTDEL LISTGET LISTINS SETITEM SETFOCUS SETPROP 2. The RICHEDITTEXT object supports the same properties as other objects that includes the following: ALIGNMENT ANCHOR AUTOENTER BGCOLOR BDRSTYLE CAUSEVALID DOCK DROPID EDITHIDESEL ENABLED FGCOLOR FONT HEIGHT HELPID HWND LEFT LEFTMARGIN MAXCHARS MODIFYFLAG OBJECTID OVERTYPE PASSWORD PASSWORDCHAR READONLY RIGHTMARGIN SCROLLBAR SCROLLHIDE SELECTALL SELTEXT TABID TEXT TEXTOUTCONV TOOLTIP TOOLTIPHWND TOP VISIBLE WIDTH WORDWRAP ZORDER 3. The RICHEDITTEXT object supports the following properties that previously existed. However, the property operations for the RICHEDITEXT objects are different from other objects. See the PLBEQU.INC file for specific details. MULTILINE SELLENGTH SELSTART 4. The RICHEDITTEXT object supports the following new properties. See the PLBEQU.INC file for specific descriptions. ACCEPTTAB=dnumnvar AUTOWORDSEL=dnumnvar BULLETINDENT=dnumnvar DETECTURL=dnumnvar RTF=svarslit SELALIGN=dnumnvar SELBULLET=dnumnvar SELCHAROFFSET=dnumnvar SELCOLOR=dnumnvar|color object SELECTEDRTF=svarslit SELFONTBOLD=dnumnvar SELFONTCHARSET=dnumnvar SELFONTITALIC=dnumnvar SELFONTNAME=svarslit SELFONTSIZE=dnumnvar SELFONTUNDER=dnumnvar SELHANGINDENT=dnumnvar SELPROTECTED=dnumnvar SELRIGHTINDENT=dnumnvar SELTYPE=nvar ZOOMFACTOR=dnumnvar 5. The RICHEDITTEXT object supports the following events: $CHANGE EQU 3 $DRAGDROP EQU 7 $DRAGOVER EQU 8 $GOTFOCUS EQU 9 $KEYPRESS EQU 10 $LOSTFOCUS EQU 11 $MOVE EQU 12 $MOUSEDOWN EQU 13 $MOUSEUP EQU 14 $MOUSEMOVE EQU 15 $VALIDATE EQU 24 $SELCHANGE EQU 30 $LINKCLICK EQU 31 ----------------------------------- New RICHEDITTEXT Event Descriptions SelChange The SelChange event occurs when the selection or insertion point is changed in a RICHEDITTEXT. Note the following: 1. The SelChange event is referenced using an event value of thirty (30). The equated label in PLBEQU.INC for this event is $SELCHANGE. 3. The Event Result value is always 0. 4. The Event Modifier value is always 0. LinkClick The LinkClick event occurs when a URL is clicked in a RICHEDITTEXT. Note the following: 1. The LinkClick event is referenced using an event value of thirty-one (31). The equated label in PLBEQU.INC for this event is $LINKCLICK. 2. The Event Result value is character start position of the URL in the RICHEDITTEXT. 3. The Event Modifier contains the length of the clicked URL. 6. The RICHEDITTEXT object supports the following methods that have the same description as for an EDITTEXT object. CanUndo GIVING {nvar} Clear GIVING {nvar} ClearUndo GIVING {nvar} Copy GIVING {nvar} Cut GIVING {nvar} GetCharIndexFromPos GIVING {nvar} USING [*Vert=]{dnumnvar}: [*Horz=]{dnumnvar} GetFirstVisibleLine GIVING {nvar} GetLine GIVING {svar} USING [*Line=]{dnumnvar} GetLineCount GIVING {nvar} GetPosFromCharIndex GIVING {nvar} USING [*CharIndex=]{dnumnvar} GetTextLength GIVING {nvar} LineFromChar GIVING {nvar} USING [*CharIndex=]{dnumnvar} LineIndex GIVING {nvar} USING [*Line=]{dnumnvar} LineLength GIVING {nvar} USING [*CharIndex=]{dnumnvar} LineScroll GIVING {nvar} USING [*Chars=]{dnumnvar}: [*Lines=]{dnumnvar} Paste GIVING {nvar} Scroll GIVING {nvar} USING [*Action=]{dnumnvar} ScrollToCaret GIVING {nvar} Select GIVING {nvar} USING [*Start=]{dnumnver}: [*End=]{dnumnvar} SelectAll GIVING {nvar} Undo GIVING {nvar} 7. The RICHEDITTEXT object supports the following new methods that are described below: FindText GIVING {nvar} USING [*Search=]{dnumnvar}: [*Text]={svarlit}: [*Start=]{dnumnvar}: Optional [*End=]{dnumnvar} Optional LoadFile GIVING {nvar} USING [*FileName]={svarlit}: [*Options=]{dnumnvar} Optional SaveFile GIVING {nvar} USING [*FileName]={svarlit}: [*Options=]{dnumnvar} Optional CanRedo GIVING {nvar} Redo GIVING {nvar} RedoActionName GIVING {nvar} UndoActionName GIVING {nvar} FindText Method The FindText method is used to locate a string of text in the contents of a RICHEDITTEXT object. The method uses the following format: [label] {object}.FindText [GIVING {return}]: USING [*Search=]{search}: [*Text=]{text}: [[*Start=]{start}]: [[*End=]{end}] Where: label is an optional Program Execution Label. object is a required RICHEDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. search is an required decimal number or Numeric Variable that specifies the search options. text is a required Character String Variable or literal that specifies the text to search for. start is an optional decimal number or Numeric Variable that specifies the starting character position of the search. end is an optional decimal number or Numeric Variable that specifies the ending character position of the search. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. The {search} value is a constant as defined in PLBMETH.INC or a numeric variable indicating one or more of the following option values: $FR_DOWN - Search from the top to the bottom $FR_WHOLEWORD - Match only whole words $FR_MATCHCASE - Perform a case-sensitive search 4. If the {start} value is not provided, the search starts at the first character. 5. If the {end} value is not provided, the search ends at the last character. 6. A return value of 0 the string was not found. 7. A return value of non-zero is the character position the string was found at. LoadFile Method The LoadFile method is used to load the contents of a RICHEDITTEXT object. The method uses the following format: [label] {object}.LoadFile [GIVING {return}]: USING [*FileName=]{fname}: [[*Options=]{options}] Where: label is an optional Program Execution Label. object is a required RICHEDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. fname is a required Character String Variable or literal that specifies the file name. options is an optional decimal number or Numeric Variable that specifies the load options. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. When running under the PL/B Application Server, the first character of the file name has special meaning: First Character The file ... ! (exclamation mark) resides on the client rather than the server. ? (question mark) should be either obtained from the cache or from the server and placed in the cache. * (asterisk) should be either obtained from the in-memory cache or from the server and placed only in the in-memory cache. 4. The optional {options} value is a constant as defined in PLBMETH.INC or a numeric variable indicating one or more of the following option values: $SF_TEXT - Load from a text file $SF_RTF - Load from a RTF file $SF_UNICODE - Input as Unicode file $SFF_SELECTION - Replace only the selection $SF_TEXT EQU 0x0001 $SF_RTF EQU 0x0002 $SF_UNICODE EQU 0x0010 $SFF_SELECTION EQU 0x8000 5. A return value of 0 indicates success. 6. A return value of non-zero an error. SaveFile Method The SaveFile method is used to save the contents of a RICHEDITTEXT object. The method uses the following format: [label] {object}.SaveFile [GIVING {return}]: USING [*FileName=]{fname}: [[*Options=]{options}] Where: label is an optional Program Execution Label. object is a required RICHEDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. fname is a required Character String Variable or literal that specifies the file name. options is an optional decimal number or Numeric Variable that specifies the save options. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. When running under the PL/B Application Server, the first character of the file name has special meaning: First Character The file ... ! (exclamation mark) is saved on the client rather than the server. 4. The optional {options} value is a constant as defined in PLBMETH.INC or a numeric variable indicating one or more of the following option values: $SF_TEXT - Output as text with spaces in place of COM object. $SF_RTF - Output as RTF $SF_RTFNOOBJS - Output as RTF with spaces in place of COM object. $SF_TEXTIZED - Output as text with a text representation of COM objects. $SF_UNICODE - Output as Unicode file $SF_USECODEPAGE - CodePage given by high word $SFF_SELECTION - Output only the selection $SF_TEXT EQU 0x0001 $SF_RTF EQU 0x0002 $SF_RTFNOOBJS EQU 0x0003 $SF_TEXTIZED EQU 0x0004 $SF_UNICODE EQU 0x0010 $SF_USECODEPAGE EQU 0x0020 $SFF_SELECTION EQU 0x8000 5. A return value of 0 indicates success. 6. A return value of non-zero an error. CanRedo Method The CanRedo method is used to determine whether there are any actions in a RICHEDITTEXT object redo queue. The method uses the following format: [label] {object}.CanRedo [GIVING {return}] Where: label is an optional Program Execution Label. object is a required RICHEDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. A return value of 0 indicates no redo actions. 4. A return value of non-zero indicates redo actions. Redo Method The Redo method is used to redo the last RICHEDITTEXT object operation in the object's redo queue. The method uses the following format: [label] {object}.Redo [GIVING {return}] Where: label is an optional Program Execution Label. object is a required RICHEDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. The return value non zero if the redo operation is successful, or zero if the redo operation fails. RedoActionName Method The RedoActionName method is used to obtain a value indicating the redo action. The method uses the following format: [label] {object}.RedoActionName [GIVING {return}] Where: label is an optional Program Execution Label. object is a required RICHEDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the action name. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. The return value can be one of the following values: $ACTIONUNKNOWN EQU 0 $ACTIONTYPING EQU 1 $ACTIONDELETE EQU 2 $ACTIONDRAGDROP EQU 3 $ACTIONCUT EQU 4 $ACTIONPASTE EQU 5 UndoActionName Method The UndoActionName method is used to obtain a value indicating the undo action. The method uses the following format: [label] {object}.UndoActionName [GIVING {return}] Where: label is an optional Program Execution Label. object is a required RICHEDITTEXT object to be accessed. return is an optional Numeric Variable that indicates the action name. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. The return value can be one of the following values: $ACTIONUNKNOWN EQU 0 $ACTIONTYPING EQU 1 $ACTIONDELETE EQU 2 $ACTIONDRAGDROP EQU 3 $ACTIONCUT EQU 4 $ACTIONPASTE EQU 5 - New methods have been added for a TREEVIEW object that allows the data for the object to be loaded and stored as files. There is one basic file format type supported and that is a XML file format. When TREEVIEW data is stored into a XML file, then data and TREEVIEW attributes are stored. This allows the TREEVIEW to be loaded from the XML file and the attributes can be restored. The new methods added for the TREEVIEW are as follows: LoadXmlFile SaveXmlFile The descriptions for the new TREEVIEW methods are as follows: LoadXmlFile Method The LoadXmlFile method is used to load the contents of a TREEVIEW object from a XML file. The method uses the following format: [label] {object}.LoadXmlFile [GIVING {return}]: USING [*FileName=]{fname}: [[*Options=]{options}] Where: label is an optional Program Execution Label. object is a required TREEVIEW object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. fname is a required Character String Variable or literal that specifies the file name. options is an optional decimal number or Numeric Variable that specifies the load options. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. When running under the PL/B Application Server, the first character of the file name has special meaning: First Character The file ... ! (exclamation mark) resides on the client rather than the server. ? (question mark) should be either obtained from the cache or from the server and placed in the cache. * (asterisk) should be either obtained from the in-memory cache or from the server and placed only in the in-memory cache. 4. The optional {options} value is a constant as defined in PLBMETH.INC or a numeric variable indicating one or more of the following option values: $TV_XMLRD_IGNORE_ATTR - Ignore XML attributes in the file. $TV_XMLRD_NO_CONV - Do not convert _ in an element name to blanks. $TV_XMLRD_IGNORE_ATTR EQU 0x001 $TV_XMLRD_NO_CONV EQU 0x002 5. All <__dnnn> elements are stripped out on load. 6. A return value of 0 indicates success. 7. A return value of non-zero an error. SaveXmlFile Method The SaveXmlFile method is used to save the contents of a TREEVIEW object to a XML file. The method uses the following format: [label] {object}.SaveXmlFile [GIVING {return}]: USING [*FileName=]{fname}: [[*Options=]{options}] Where: label is an optional Program Execution Label. object is a required TREEVIEW object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. fname is a required Character String Variable or literal that specifies the file name. options is an optional decimal number or Numeric Variable that specifies the save options. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. When running under the PL/B Application Server, the first character of the file name has special meaning: First Character The file ... ! (exclamation mark) is saved on the client rather than the server. 4. The optional {options} value is a constant as defined in PLBMETH.INC or a numeric variable indicating one or more of the following option values: $TV_XMLWR_NOATTR - Do not save the attributes of a node. These attributes are the node's image, parameter and selected image values. $TV_XMLWR_USE_DTAG - Always output data as a <__dnnn> element. $TV_XMLWR_NOATTR EQU 0x001 $TV_XMLWR_USE_DTAG EQU 0x002 5. A child node that has no children of it's own is written as data. If the child has attributes, or has siblings, it is written enclosed by a <__dnnn> element. 6. Parent node names that contain blanks are converted to _ characters. 7. A return value of 0 indicates success. 8. A return value of non-zero an error. - New methods have been added for a LISTVIEW object that allows the data for the object to be loaded and stored as files. Two basic file types are supported that includes XML and CSV file formats. When using the XML file format, the LISTVIEW attributes can be stored into the output file and then restored when loaded. When using the CSV file format, only the LISTVIEW row data is stored into the output file as comma delimited data for each subitem. No LISTVIEW attributes are stored or loaded when using the CSV file format. One additional method has been added that allows all of the line item data for an individual LISTVIEW row to be retrieved. The returned data in this case can be used with an EXPLODE instruction to put each subitem data field into a PL/B variable. The new methods added for the LISTVIEW are as follows: LoadXmlFile SaveXmlFile LoadCsvFile SaveCsvFile GetItemTextAll The descriptions for the new LISTVIEW methods are as follows: LoadXmlFile Method The LoadXmlFile method is used to load the contents of a LISTVIEW object from a XML file. The method uses the following format: [label] {object}.LoadXmlFile [GIVING {return}]: USING [*FileName=]{fname}: [[*Options=]{options}]: [,[*TableName=]{tname}]: [[*RowName=]{rname}] Where: label is an optional Program Execution Label. object is a required LISTVIEW object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. fname is a required Character String Variable or literal that specifies the file name. options is an optional decimal number or Numeric Variable that specifies the load options. tname is an optional Character String Variable or literal that specifies the table name. Default value is Table. rname is an optional Character String Variable or literal that specifies the row name. Default value is Row. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. When running under the PL/B Application Server, the first character of the file name has special meaning: First Character The file ... ! (exclamation mark) resides on the client rather than the server. ? (question mark) should be either obtained from the cache or from the server and placed in the cache. * (asterisk) should be either obtained from the in-memory cache or from the server and placed only in the in-memory cache. 4. The optional {options} value is a constant as defined in PLBMETH.INC or a numeric variable indicating one or more of the following option values: $LV_XMLRD_IGNORE_ATTR - Ignore attributes when loading a file. If not used, attributes are treated as columns. $LV_XMLRD_NO_CONV - Do not convert _ to blanks in columns $LV_XMLRD_USECOLUMNS - Use the column names existing in the LISTVIEW. If not used, column names are obtained from the XML file. $LV_XMLRD_IGNORE_ATTR EQU 0x001 $LV_XMLRD_NO_CONV EQU 0x002 $LV_XMLRD_USECOLUMNS EQU 0x004 5. A return value of 0 indicates success. 6. A return value of non-zero an error. SaveXmlFile Method The SaveXmlFile method is used to save the contents of a LISTVIEW object to a XML file. The method uses the following format: [label] {object}.SaveXmlFile [GIVING {return}]: USING [*FileName=]{fname}: [[*Options=]{options}]: [,[*TableName=]{tname}]: [[*RowName=]{rname}] Where: label is an optional Program Execution Label. object is a required LISTVIEW object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. fname is a required Character String Variable or literal that specifies the file name. options is an optional decimal number or Numeric Variable that specifies the save options. tname is an optional Character String Variable or literal that specifies the table name. The default value is 'Table'. rname is an optional Character String Variable or literal that specifies the row name. The default value is 'Row'. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. When running under the PL/B Application Server, the first character of the file name has special meaning: First Character The file ... ! (exclamation mark) is saved on the client rather than the server. 4. The optional {options} value is a constant as defined in PLBMETH.INC or a numeric variable indicating one or more of the following option values: $LV_XMLWR_NOATTR - Do not save the attributes of a row. These attributes are the row image and parameter values. $LV_XMLWR_NOCOLS - Do not save the attributes of a column. These attributes are the column width and format value. $LV_XMLWR_NOATTRCOLS - Do not save any LISTVIEW columns that contain color or font information. $LV_XMLWR_OUTPUTASATTR - Output the column data as XML attributes. $LV_XMLWR_OUTPUTSEL - Output only selected rows $LV_XMLWR_OUTPUTCHK - Output only checked rows $LV_XMLWR_NOATTR EQU 0x001 $LV_XMLWR_NOCOLS EQU 0x002 $LV_XMLWR_NOATTRCOLS EQU 0x004 $LV_XMLWR_OUTPUTASATTR EQU 0x008 $LV_XMLWR_OUTPUTSEL EQU 0x010 $LV_XMLWR_OUTPUTCHK EQU 0x020 5. A return value of 0 indicates success. 6. A return value of non-zero an error. LoadCsvFile Method The LoadCsvFile method is used to load the contents of a LISTVIEW object from a CSV file. The method uses the following format: [label] {object}.LoadCsvFile [GIVING {return}]: USING [*FileName=]{fname}: [[*Options=]{options}]: [,[*Delimiter=]{delim}] Where: label is an optional Program Execution Label. object is a required LISTVIEW object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. fname is a required Character String Variable or literal that specifies the file name. options is an optional decimal number or Numeric Variable that specifies the load options. delim is an optional Character String Variable or literal that specifies the delimiter character. The default value is a comma. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. When running under the PL/B Application Server, the first character of the file name has special meaning: First Character The file ... ! (exclamation mark) resides on the client rather than the server. ? (question mark) should be either obtained from the cache or from the server and placed in the cache. * (asterisk) should be either obtained from the in-memory cache or from the server and placed only in the in-memory cache. 4. The optional {options} value is a constant as defined in PLBMETH.INC or a numeric variable indicating one or more of the following option values: $LV_CSVRD_QUOTED - The input fields are enclosed in quotes. $LV_CSVRD_QUOTED EQU 0x001 5. A return value of 0 indicates success. 6. A return value of non-zero an error. SaveCsvFile Method The SaveCsvFile method is used to save the contents of a LISTVIEW object to a CSV file. The method uses the following format: [label] {object}.SaveCsvFile [GIVING {return}]: USING [*FileName=]{fname}: [[*Options=]{options}]: [,[*Delimiter=]{delim}] Where: label is an optional Program Execution Label. object is a required LISTVIEW object to be accessed. return is an optional Numeric Variable that indicates the success or failure of the method. fname is a required Character String Variable or literal that specifies the filename. options is an optional decimal number or Numeric Variable that specifies the save options. delim is an optional Character String Variable or literal that specifies the delimiter character. The default value is a comma. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). 2. The OVER and EOS Condition Flags are always cleared (FALSE). 3. When running under the PL/B Application Server, the first character of the file name has special meaning: First Character The file ... ! (exclamation mark) is saved on the client rather than the server. 4. The optional {options} value is a constant as defined in PLBMETH.INC or a numeric variable indicating one or more of the following option values: $LV_CSVWR_QUOTED - Write out column data in quoted format. $LV_CSVWR_OUTPUTSEL - Output only selected rows $LV_CSVWR_OUTPUTCHK - Output only checked rows $LV_CSVWR_QUOTED EQU 0x001 $LV_CSVWR_OUTPUTSEL EQU 0x002 $LV_CSVWR_OUTPUTCHK EQU 0x004 5. A return value of 0 indicates success. 6. A return value of non-zero an error. GetItemTextAll Method The GetItemTextAll method is used to obtain a row from a LISTVIEW object in a delimited format. The method uses the following format: [label] {object}.GetItemTextAll [GIVING {return}]: USING [*Index=]{index}: [,[*Delimiter=]{delim}] Where: label is an optional Program Execution Label. object is a required LISTVIEW object to be accessed. return is an optional Character String Variable that contains the data from the row. index is an required decimal number or Numeric Variable that specifies the zero-based index of the row to extract. delim is an optional Character String Variable or literal that specifies the delimiter character. The default value is a comma. Flags Affected: EOS, OVER, ZERO Note the following: 1. If {return} is too small to contain value, the OVER Condition Flag is set (TRUE). 2. The ZERO and EOS Condition Flags are always cleared (FALSE). - Corrected a GPF error that would occur when a LISTVIEW SortColumn method was executed and the LISTVIEW contained more than 65535 items. - Corrected a problem where the '(' control used in a MENU creation string was disabling all menu items after this control was used. It should only disable one menu item where it is used. - Corrected a problem where the 'ItemPos' parameter value for an AddMenuItem method for a MENU object was being used as a 1 based value. This was causing inconsistent results as compared to the positioning parameter value for a GetItem method. This correction now causes the 'ItemPos' parameter value to be used as a 0 based value. - Corrected a problem where a WINREFRESH operation was causing the flat borders of EDITTEXT objects to disappear when the parent WINDOW object for the EDITTEXT objects had the CLIPCONTROL property set TRUE. ------------------------------------------------------------------------------- PLBCMP - Modified the RECORD LIKE operation to accept a record like reference where the record is a nested record in another record. Example: AREC RECORD A INIT "A" BREC RECORD B INIT "B" RECORDEND C INIT "C" RECORDEND . ALIKE RECORD LIKE AREC BLIKE RECORD LIKE AREC.BREC ;New form accepted - Added a new verb named LIKE that is implemented as a compiler directive. The LIKE directive allows a new DIM, FORM, or INTEGER data variable to be declared that has the same data variable type, variable size, and value as a previously declared data variable. Format: [label] LIKE {var} Where: {var} - This is a previously declared DIM, FORM, or INTEGER variable label reference. The {var} label reference can be an array label reference without an index. Example: D1 DIM 1 FX FORM "123.456" IARR INTEGER 1(3),("1"),("2"),("3") DATA INIT "THIS IS A TEST!" . nD1 LIKE D1 nFX LIKE FX nIARR LIKE IARR nDATA LIKE DATA - Modified the compiler to allow a DIM Array label reference that does not have the index specified for the {key} parameter. - Corrected a problem where a compilation error was occurring when a MENUITEM object was specified as the GIVING object for a MENU GetItem method. - Corrected a problem where an immediate numeric value for the AND, NOT, OR, TEST, and XOR instructions was not valid when the value was larger than 0xFFFFFFFF (i.e. 4GB ). Example: INT8 INTEGER 8 . CLEAR INT8 OR 0xFFFFFFFFFFFFFFFF,INT8 CLEAR INT8 OR 0x0000000100000000,INT8 - Corrected a problem where passing an array to a routine, when the array is itself a member of an array of records, caused spurious F05 errors or caused the runtime to give a GPF error. Example: INNER RECORD X DIM 1(10) RECORDEND . OUTER RECORD (2) INNER RECORD LIKE INNER Y DIM 1(10) RECORDEND . I1 INTEGER 1,"1" . CALL RTN USING OUTER(1).INNER.X,"1" CALL RTN USING OUTER(I1).Y,"1" CALL RTN USING OUTER(I1).INNER.X,"1" . .... . #ARRAY DIM ^(10) #INDEX FORM 2 . RTN LROUTINE #ARRAY,#INDEX DISPLAY #ARRAY(#INDEX) RETURN - Corrected a problem that could cause a runtime GPF error. This problem would occur when a RECORD was declared as a DEFINITION that had an INTEGER as its first member and members of a RECORD declared with a LIKE keyword for this record definition were accessed. Example: WOW RECORD DEFINITION X INTEGER 4 Y DIM 10 RECORDEND . WOWINST RECORD LIKE WOW . CLEAR WOWINST ;GPF ... - Corrected a problem where the compiler could hang when processing a macro that used a large number of instances of one or more other macros. This problem would occur when more than 64KB of data was passed as macro parameter replacement data while processing the large number of macro instances that were used for the top level macro. - Corrected a problem where the following MOVE instruction was generating invalid object code that would cause an invalid operation. Example: F10 FORM 10 . MOVE (12345678901),F8 ;Failed - Corrected a problem where the compiler was not reporting an error when a RECORD member did not exist for the following logic. Also, note that a runtime GPF error might occur depending on the RECORD layout and the instruction being executed. With this correction, the compiler now gives an appropriate error in this case. Example: REC1 RECORD A INIT "A" XREC RECORD (2) C INIT "C" RECORDEND RECORDEND . REC2 RECORD XREC RECORD (2) B INIT "B" RECORDEND RECORDEND . MOVE REC1.XREC(2).B,S$CMDLIN - Corrected a problem where invalid object code was generated when the following syntax was being used in a program. This invalid object code could cause indeterminate program results including the possibility of a GPF error. Example: FM2 FORM 2(4),("1"),("2"),("3"),("4") ARRAY DIM 5(5,50) . ... . Before the correction, the following IF statement . could give indeterminate results. . IF ( ARRAY( FM2(1),FM2(2) ) =: ARRAY( FM2(3),FM2(4) ) ) ... ENDIF ------------------------------------------------------------------------------- MAKEDEF - Corrected a problem in the MAKEDEF utility with setting the definition file name if the extension was not given and there was a dot in the path. SUNAAMDX - Corrected a problem for the SUNAAMDX, SUNINDEX, and SUNSORT SUNINDEX utilities where an invalid command line error was occurring SUNSORT that was prematurely terminating the utility execution for the following command lines: SUNSORT in.txt, out.srt -1-5 SUNINDEX in.txt, out.isi -1-5 SUNAAMDX in.txt, out.aam -1-5 This problem would occur when a blank character followed the ',' (comma) delimiter that was specified in the command line. SUNSCAN - Modified to work with screens wider than 80 characters. TXTMATCH - Modified to work with screens wider than 80 characters. ------------------------------------------------------------------------------- SUNFHSYS - Modified to add runtime INI file support for the AAMDEX, INDEX, SORT instructions. - Modified to provide basic XML file processing support. - Modified to correct logon hanging problem when accessing SUNFM. - Modified the PositEof operation to received a returned value from the file manager. This change is needed to correct a SA_PositEndOfFile return value problem. - Modified the IsiInfo operation to retrieve additional data from and ISI file that is returned for the SA_IsiInfo Sunaccess function. ------------------------------------------------------------------------------- SUNIDE - Corrected a potential problem in where a project file could become corrupt and loose the first source in a project file. - Refresh dependancies optione now prompts to save files. - Added $2 and $3 command line options for user tools where: $2 is main progam source name for highlighted source. $3 is highlighted source. - Modified the open files tab control to indicate files that have been modified by placing an asterisc next to the names. - Added display of PLBCMP_OPT keyword to the status window when compiling. - Changed the logic order to remove child windows from collection before destroying them to try to prevent O105 errors that were reported while starting debugger. - Modified IDE configuration to support default compiler options used when creating a new projects. - Corrected a problem in the build process where programs with similar names could all be built if the user intends to build one. - Corrected a problem where .lst file processing would incorrectly guess the lst file name resulting in the IDE reporting that the program was not compiled when a prefered compiler was defined in the project file. - Corrected a bug where clicking on an error in the output window after compile with multiple files open would go to the error line of the wrong file.Date: 12-17-2004 Subject: Patch RELEASE 9.0C Runtime Files Included is the patch release of: PLBCLIENT.EXE 9.0C 17 Dec 2004 9,0,3,0 PLBCLICON.EXE 9.0C 17 Dec 2004 9,0,3,0 PLBWIN.EXE 9.0C 17 Dec 2004 9,0,3,0 ODSBAC32.DLL 9.0C 17 Dec 2004 SUNFYSYS.DLL 9.0C 17 Dec 2004 9,0,3,0 SUNFHDLL.DLL 9.0C 17 Dec 2004 9,0,3,0 SUNFHDLL.LIB 9.0C 17 Dec 2004 SUNWADO.DLL 9.0C 17 Dec 2004 9,0,3,0 PLBCMP.PLC 9.0C 17 Dec 2004 PLBDBUG.PLC 9.0C 17 Dec 2004 PLBSERVE.EXE 9.0C 17 Dec 2004 9,0,3,0 PLBDSIGN.EXE 9.0C 17 Dec 2004 9,0,3,0 SUNAAMDX.EXE 9.0C 17 Dec 2004 9,0,3,0 SUNINDEX.EXE 9.0C 17 Dec 2004 9,0,3,0 SUNSORT.EXE 9.0C 17 Dec 2004 9,0,3,0 SUNIDE.PLC 9.0C 17 Dec 2004 EDITOR.PLC 9.0C 17 Dec 2004 DBGIFACE.PLC 9.0C 17 Dec 2004 SIDEMETH.CFG 9.0C 17 Dec 2004 SIDEVRBS.CFG 9.0C 17 Dec 2004 SIDESYM.CFG 9.0C 17 Dec 2004 ADO.PLS 9.0C 17 Dec 2004 *============================================================================== Notes for some NEW Items: - Added new instructions named FUNCTION, ENTRY, and FUNCTIONEND. - Added new instructions named EXCEPTCHECK, EXCEPTCLEAR, EXCEPTDO, EXCEPTDISABLE, EXCEPTENABLE, and EXCEPTSET. - Modified the MOVE instruction to support a GUI object for both the source and destination operand variables. *============================================================================== Notes for WARNINGS: - If the 9.0C PLBWIN or SUNFHSYS is used with any prior release versions, then an error is given as follows: 'Fatal error condition U40 encountered.' *============================================================================== Notes for DOCUMENTATION: - A keyword named 'PLB_CHECKFILE2GB={on|off}' was implemented for the 9.0 release. This keyword was not documented in the 9.0 RFM. This keyword can be used to override the 2GB file size checking that is performed by the runtimes. This 2GB file size check is performed by the runtime because Windows 95/98/ME systems do not execute properly when a file size larger than 2GB is used. By default, this keyword action is set to be ON. If this keyword is set to OFF, then the runtime does not perform the 2GB file size checking. - The U49 error occurs when a ROLLOUT instruction can not be executed because one of the following program conditions exist: 1. A DMAKE variable is active when the ROLLOUT is executed. DMAKE dynamic buffers can not be saved and restored by a ROLLOUT. The subcode value is set to 100 to indicate this error. 2. A ROLLOUT can not be executed after a LFUNCTION or FUNCTION has been executed in a program. This restriction is applied because the ROLLOUT can not save/restore (L)FUNCTION stack dynamic buffers. The subcode value is set to 101 to indicate this error. 3. A ROLLOUT can not be executed if an Exception has been specified in a program. This restriction is applied because the ROLLOUT can not save/restore Exception dynamic state tables. The subcode value is set to 102 to indicate this error. - Added a U51 error to indicate that an invalid or corrupted program data variable has been detected when a PLC program module was being loaded. - Added a C17 error to indicate that an invalid or corrupted program data variable has been detected when a PLC program module was being loaded during a CHAIN operation. - Added a new subcode value 28 for the C15 error. This new subcode indicates that an invalid or corrupted program data variable has been detected when a PLC program module was being loaded as a LOADMOD module. - Added a U52 error to indicate that an Exception runtime stack problem has been detected where an Exception error could not be found while unwinding the call/return stack. This error is an internal system error that has occurred in the PL/B runtime while processing an Exception program error. If this error occurs, then the extended data indicates the PL/B program exception error that was being processed. The filename contains the PL/B program name where exception error occurred. - Added a U99 error for a Windows PLBSERVE runtime. This error is sent to a PLBCLIENT to indicate that a PL/B program was terminated by GPF error. - Added an O160 error for the Windows runtimes. This error indicates that the source and destination GUI Object variables in a MOVE object to object operation do not have the same object types. *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - Modified the PLBSERVE Windows Service support so that a STOP command executed via the Windows Services Control Panel causes the Application Server to terminate with a 'plbserve -f' command. This change insures that the STOP command always terminates all clients accessing the Application Server. - Modified the PLBSERVE logon process to continue to accept PLBSERVE commands after a 'plbserve -t' command has been executed. This allows a 'plbserve -f' command to be executed after a 'plbserve -t' command without getting a logon connection error. - Added a new keyword named 'PLBCS_TERMTIME={sec}' that can be used to control the number of seconds that the PLBSERVE process waits for client threads to terminate after a 'plbserve -t' command has been executed. If the {sec} time expires, then a forced termination of all client threads is executed and the Application Server is terminated. If the PLBCS_TERMTIIME is not used, then the 'Plbserve -t' command causes the Application Server to wait for an infinite amount of time waiting for client threads to terminate. Please note that the PLBCS_TERMTIME keyword has been implemented to take affect dynamically. This means that the value of the keyword can be changed in the 'plbserve.ini' file at any time before or after the 'plbserve -t' command has been executed. - The Application Server Logon process has been modified to always log the TCP/IP address of the peer client that has performed a logon. The provides better tracking of offending client logons. - Modified the logon Child Start log messages to provide the version of client accessing the Application Server. This should help to identify issues caused by older/newer client versions accessing a given Application Server. - Modified the Child Term log messages to provide an identification number that indicates a runtime context state when a program thread terminates. This information can help to identify runtime processing in abnormal situations. - Modified the Application Server to support a logging output level 1 that can be set with the ADMIN_LOGLEVEL keyword. When the keyword is set to a value of 1, then additional data is logged that includes the Client Type, the Client Computer Name, the Client User Name, and information about untrapped programs errors that occur in a user PL/B program. - Modified Windows GPF crash handler data output to give additional runtime context state data to help identify the runtime logic that was being executed when a GPF error occurs. - Modified the main logon process for the Application Server to eliminate problems that can caused by reception of bad/invalid data messages. Prior releases of PLBSERVE could hang or terminate prematurely if bad/invalid logon messages were received. The bad logon messages might occur under the following situations: 1. If the Application Server logon connection was accessed directly from the Internet. Disruptive Internet applications can actually probe the Internet connection that the Application Server is using. This type of access could cause indeterminate problems. Changes have been implemented for all Application Server received messages to validate the structure and integrity of the messages before they are accepted for use. Any invalid messages that are received can result in immediate termination of a connection. 2. It was also possible that the Application Server Logon could hang indefinitely if a logon action occurred without receiving any client logon data message. Changes have been implemented for the Application Server processing where the logon data message must be received by the Application Server Logon process within 10 seconds from the initial logon action. If the logon data message is not received within 10 seconds, then the logon connection is terminated immediately. - Modified the Windows PLBSERVE GPF crash handlers to eliminate the possibility of secondary GPF errors that could prematurely hand the hang/terminate the Application Server Logon process. - Modified the Windows PLBSERVE GPF program thread crash handler to perform clean up actions for FILEPI and opened files. This change is implemented to try and prevent indeterminate resource usage for abnormal GPF errors. - If the Windows PLBSERVE Logon process should ever encounter a GPF error, then the Logon crash handler is implemented to keep the main PLBSERVE process active to allow current users to continue to execute their programs. NO new users can logon to Application Server while it is in this state. However, a 2nd instance of the PLBSERVE Application Server CAN BE loaded to allow new users to logon while the previous PLBSERVE instance is in the GPF indeterminate state. Note, that the second instance of a log file is created for the 2nd load instance of the Application Server. - The PLBCS_LOGFILE can have the string '@d' embedded into the specified log file name. The '@d' string is replace with the 'YYMMDD' date representation. This causes a new log file to be started for every day that an Application Server is started. Format: PLBCS_LOGFILE=lt@d.log This creates a log file with a name 'lt041215.log'. - Corrected problems with the Windows PLBSERVE GPF crash handler processing that could prematurely terminate the Application Server client threads. The Windows PLBSERVE GPF crash handler processing has been changed to eliminate any interactions between logon processing GPF problems and PL/B program GPF problems. - Corrected a problem that was preventing high intensity colors from being sent to the client. - Corrected a problem where the PLBCS_APSPOOL keyword value settings of 1 and 2 did not print at the server when the screen definition default printer was null. In this case, the direct PRINT output is now output to a file named 'portnnnn.prt'. - Corrected a problem where the PLBSERVE would not load on a Windows NT system because the function CreateToolhelp32Snapshot was not supported by the OS. With this change the runtime does load properly when the CreateToolhelp32Snapshot function is not supported. However, in this case, the PLBCS_SINGLEUSE keyword is ignored and has no affect. - Corrected a possible problem with the connection recovery that could cause a hanging situation for a user program. ------------------------------------------------------------------------------- PLBCLIENT- Modified the client module to detect bad/invalid protocol messages and initiate appropriate recovery processing. This change has been made to help prevent indeterminate communications errors. - Corrected a problem where the PLBCLIENT would not load on a Windows NT system because the function CreateToolhelp32Snapshot was not supported by the OS. With this change the client does load properly when the CreateToolhelp32Snapshot function is not supported. However, in this case, the PLBCS_SINGLEUSE keyword is ignored and has no affect. - Corrected a problem that was preventing the client module from being able to reconnect to the server when a client user selected a retry command from an error dialog. ------------------------------------------------------------------------------- PLBCLICON- Corrected a problem that prevented high intensity colors from working as expected for the DISPLAY *COLOR control. This problem can only be corrected when using an 9.0C PLBSERVE. ------------------------------------------------------------------------------- PLBCLIUNX- Modified the client module to detect bad/invalid protocol messages and initiate appropriate recovery processing. This change has been made to help prevent indeterminate communications errors. ------------------------------------------------------------------------------- PLBSERVE - A PL/B U99 error has been added. This error should only occur at a PLBCLIENT a PLBCLIENT that is connected to a PLBSERVE server. This error indicates that a PL/B program has been terminated by a GPF error at the server. - Corrected a problem where the PLBCLIENT and PLBSERVE would not load on a Windows NT system. This problem was caused because the Windows NT systems do not support a specific API required by these executables. The corrective action means that the PLBCS_SINGLEUSE keyword used by PLBCLIENT is not supported for Windows NT. Also, the automatic connection recovery performed by PLBSERVE is not supported for the Windows NT runtime. ------------------------------------------------------------------------------- PLBWIN - A new capability has been added to the PL/B language that allows PLBSERVE functions with a specific scope to be declared. The new capability PLB (UNIX) provide four new instructions named FUNCTION, LFUNCTION, ENTRY, FUNCTIONEND. The implementation provides a number of features that users have asked for to enhance the PL/B language. Some of the basic FUNCTION features are as follows: 1. The FUNCTION/FUNCTIONEND instructions define a specific routine where the scope of the routine is composed of all of instructions between the FUNCTION and FUNCTIONEND statements. 2. The FUNCTION implementation supports both input parameter variables and local variables to the FUNCTION. The new instruction named ENTRY is always required to separate the input variables from the local variables in a FUNCTION. The variable and code label references declared in the scope of a FUNCTION do not conflict with any other label references in a program. 3. All input parameter variables must be declared between the FUNCTION and ENTRY instructions. 4. All local variables must be declared after the ENTRY instruction before any executable instructions for the FUNCTION. 5. The FUNCTION implementation prevents any of the local variables from being accessed by PL/B code outside the scope of the FUNCTION. 6. Any code labels declared within the scope of the FUNCTION can not be accessed by PL/B code outside the FUNCTION scope. It is not possible to jump into the middle of a FUNCTION. 7. When a FUNCTION is entered the implementation guarantees that all of the local variables are always initialized to the same state as declared by a program when it was first loaded. 8. A parameter stack has been implemented that insures that all variable values in a FUNCTION are restored to the previous values after a CALL out of the FUNCTION and a RETURN back into the FUNCTION. 9. The implementation allows the FUNCTION to be re-entered while preserving and restoring the variable values automatically. 10. Nested FUNCTIONs are not supported. 11. A ROLLOUT instruction can not be compiled into a program that contains FUNCTION or LFUNCTION instructions. 12. A TRAP and TRAPCLR instruction can be used within the scope of a FUNCTION. There is a set of exception instructions that must be used to capture trap events within the scope of a FUNCTION. 13. The following instructions can not be compiled into the code for a FUNCTION: ROUTINE LROUTINE FUNCTION LFUNCTION TRAP TRAPCLR 14. The FUNCTIONEND instruction identifies the point where the FUNCTION scope ends. The FUNCTIONEND actually executes the same as RETURN instruction. 15. The FUNCTION/FUNCTIONEND logic can not be compiled into a program within the scope of a structure logic. This means that the FUNCTION/FUNCTIONEND can not be specified between an the 'IF/ELSE/ENDIF' constructs, 'LOOP/REPEAT', 'FOR' loops, etc. 16. The FUNCTION/FUNCTIONEND logic has a defined scope that does not allow execution to fall into the FUNCTION scope. There is an implied GOTO at the beginning of a FUNCTION that jumps to the code after the FUNCTIONEND instruction. 17. The implementation for FUNCTIONs supports the ability to return a variable to a CALL GIVING variable. Both the RETURN and FUNCTIONEND instructions support a USING option that allows a DIM, FORM, INTEGER, CONST, Numeric Expression, Literal, or GUI Object to be returned. Please note that the USING option for the RETURN instruction is only valid within the scope of a FUNCTION. 18. When FILE, IFILE, AFILE local variables are declared within the scope of a FUNCTION, then those file variables are automatically closed when a RETURN or FUNCTIONEND operation is executed. 19. When a DMAKE instruction is executed for a FUNCTION local variable pointer, then a DRELEASE is executed for the local variable pointer when a RETURN or FUNCTIONEND is executed. 20. When GUI Object variables are created within the scope of a FUNCTION, then the GUI Objects are destroyed when a RETURN or FUNCTIONEND is executed. 21. The FUNCTION construct executes like a ROUTINE instruction in that it is resolved an a dynamic entry label for a Load Module. The LFUNCTION construct executes like a LROUTINE instruction in that it is only allows local access for a single program. 22. The following gives information about the specific syntax of the FUNCTION, LFUNCTION, ENTRY, and FUNCTIONEND instructions. --------------------------------------------------------------- FUNCTION The FUNCTION instruction defines a subroutine with parameters that has a defined scope that ends with a FUNCTIONEND instruction. It is the target of a parameterized CALL instruction. It also places the defined label in the PUBLIC label table so that it may be used by other compiled subroutines. The instruction uses the following format: Format: label FUNCTION Where: label - Required. A Program Execution Label. Flags: None Note the following: 1. The FUNCTION must be terminated with FUNCTIONEND instruction or a compile error occurs. 2. The ENTRY instruction must be specified after a FUNCTION but before the first PL/B instruction to be executed within the FUNCTION. 3. The input parameter processing for the FUNCTION is the same as a ROUTINE. There is a difference in the syntax required to to declare the input parameter variables. --------------------------------------------------------------- LFUNCTION The FUNCTION instruction defines a subroutine with parameters that has defined scope that ends with a FUNCTIONEND instruction. If is the target of a parameterized CALL instruction. The instruction uses the following format: Format: label LFUNCTION Where: label - Required. A Program Execution Label. Flags: None Note the following: 1. The LFUNCTION must be terminated with FUNCTIONEND instruction or a compile error occurs. 2. The ENTRY instruction must be specified after a LFUNCTION but before the first PL/B instruction to be executed within the LFUNCTION. 3. The input parameter processing for the LFUNCTION is the same as a LROUTINE. There is a difference in the syntax required to declare the input parameter variables. --------------------------------------------------------------- ENTRY The ENTRY instruction must always follow the (L)FUNCTION to define the ending point for the (L)FUNCTION input parameter data variables and the beginning of the local data variables. Format: ENTRY Where: A label is not allowed. Flags: None Note the following: 1. The ENTRY must be specified within the scope of a (L)FUNCTION. 2. Execution code for the (L)FUNCTION can not be coded before the ENTRY instruction. 3. All input parameter variables for the (L)FUNCTION must be declared before the ENTRY instruction. 4. All local variables for the (L)FUNCTION must be declared immediately after the ENTRY instruction. 5. No local variables can be declared after the first execution instruction in the (L)FUNCTION. --------------------------------------------------------------- FUNCTIONEND The FUNCTIONEND instruction defines the ending point for the (L)FUNCTION scope. The FUNCTIONEND instruction is not allowed without a corresponding LFUNCTION or FUNCTION instruction. Format: [label] FUNCTIONEND [USING {retvar}] Where: label - Optional. A Program Execution Label. retvar - A data variable to be returned to a CALL GIVING variable. The {retvar} an be a DIM, FORM, INTEGER, CONST, Numeric Expression, or GUI Object data variable. Flags: None Note the following: 1. The FUNCTIONEND must be specified to terminate a LFUNCTION or FUNCTION instruction. 2. The FUNCTIONEND can optionally return a data variable to a CALL GIVING data variable. - The RETURN instruction has been modified to allow a return data variable to be specified when the RETURN is compiled as an instruction within the scope of a (L)FUNCTION. The RETURN syntax has changed as follows: Format: [label] RETURN [USING {retvar}] [IF {condition}] Where: retvar - A data variable to be returned to a CALL GIVING variable. The {retvar} an be a DIM, FORM, INTEGER, CONST, Numeric Expression, or GUI Object data variable. Note the following: 1. The optional USING syntax format is only supported within the (L)FUNCTION scope. - A new capability has been added to the PL/B language to capture exception program Events. The exception program Events are like the trappable program Events except target exception routine is executed using a GOTO and not a CALL. Six new instructions have been added to support the exception program events. The new instructions are named EXCEPTCHECK, EXCEPTCLEAR, EXCEPTDISABLE, EXCEPTDO, EXCEPTENABLE, and EXCEPTSET. Note the following on the exception program Event support: 1. The exception program Events must be used to capture events that occur within the scope of a (L)FUNCTION subroutine. 2. The exception program Events that can be captured are separated into two groups as follows: Exception Group1: IO, CFAIL, DBFAIL, FORMAT, RANGE, PARITY, SPOOL, INTERRUPT(INT), OBJECT, and USER Exception Group2: ESCAPE, {char}, BACKSPACE and CANCEL characters, Function Flags (F1 - F40, UP, DOWN, LEFT, RIGHT, INS, DEL, HOME, PGUP, PGDN, END, ESCAPE(ESC), TAB, BACKTAB, and FKEY), EVENT 3. There is a special exception program Event named 'USER' that allows a user PL/B program to generate user program events. The 'USER' event can only be generated using the EXCEPTDO instruction. 4. The exception program Event states are saved and restored at every call/return stack level used in a program. An exception program Event stack has been implemented to support this functionality. Note the following the Group1 events: a. The EXCEPTSET instruction is used to enable an exception program event at the current call/return stack level. b. When a CALL instruction is executed, then all of the current exception program event states are saved as defined before the CALL. The user program can optionally use the EXCEPTSET to set new exception program events in the subroutine that has been called to override any previous event that has been previously enabled. If the user program does not use the EXCEPTSET to override a previously enabled event, then detection of a exception program Event for Group1 causes the CALL/RETURN stack to unwind to the stack level where the enabled exception program can be captured. PLEASE NOTE: In this case, the program unwind action causes RETURN operations to automatically be executed until the CALL/RETURN stack level is reached where the exception can be captured. c. When a RETURN instruction is executed, then all of the exception program events are automatically restored back to saved states that existed prior to the CALL instruction. Note the following the Group2 events: a. The EXCEPTSET instruction is used to enable an exception program event at the current call/return stack level. b. When a CALL instruction is executed, then all of the current exception program event states are saved as defined before the CALL. Then all of the exception program Events for Group2 are cleared. The user program must execute an EXCEPTSET instruction to establish the event capture routines at the new CALL/RETURN stack level. PLEASE NOTE: When using the exception program Group2 events, then NO CALL/RETURN stack unwind actions are ever executed. c. When a RETURN instruction is executed, then all of the exception program events are automatically restored back to saved states that existed prior to the CALL instruction. 5. If a TRAP event is set and the same exception program event is is set in a program, then the exception program event operation takes precedent and is executed. 6. The following is a description of the new exception program Event instructions: --------------------------------------------------------------- EXCEPTSET The EXCEPTSET instruction enables an exception program event at the current CALL/RETURN stack level. When an exception event is detected, then a GOTO action is executed to transfer program to the program routine that handles the exception. The instruction format is one of the following: Format: [label] EXCEPTSET {routine} [GIVING {msg} [NORESET] IF {event} [label] EXCEPTSET {routine} [NORESET] IF CHAR={char} Where: label - Optional. A Program Execution Label. {routine} - Required. A Program Execution Label assigned to the entry point of routine logic that handles the exception event. {msg} - Optional. A previously defined Character String Variable that receives the exception event message. If the {msg} variable is not specified, then the S$ERROR$ variable is used as the default. {event} - One of the exception program Events. {char} - Required. A single character Literal or a Character String Variable. The {char} CAN ONLY be used when using the 'CHAR=' syntax format. Flags: ZERO Note the following: 1. The ZERO flag is set TRUE when an exception program event is enabled. Otherwise, the ZERO flag is cleared. 2. The exception program Events are grouped according to expected program usage. The Group1 events consist of program error events. This includes the following: IO, CFAIL, DBFAIL, FORMAT, RANGE, PARITY, SPOOL, INTERRUPT(INT), OBJECT, and USER. The Group2 events consist of program flag events that normally are used for KEYIN flag operations. These events are defined as follows: ESCAPE, {char}, BACKSPACE and CANCEL characters, Function Flags (F1 - F40, UP, DOWN, LEFT, RIGHT, INS, DEL, HOME, PGUP, PGDN, END, ESCAPE(ESC), TAB, BACKTAB, and FKEY), EVENT 3. When an exception program Event is detected by the runtime, then program control is transferred to the event handler logic using a GOTO operation. 4. If an exception program event enabled at a different CALL/RETURN stack level from the stack level where the exception is detected, then the CALL/RETURN stack is unwound using RETURN operations to reach the stack level where the exception program event can be dispatched. 5. By default the exception program event is cleared at the current stack level when the event is detected. If the user program specifies the NORESET option, then the exception program event is not cleared when it is detected. --------------------------------------------------------------- EXCEPTCLEAR This instruction clears an exception program Event that has been enabled by an EXCEPTSET at the current CALL/RETURN stack level. This instruction format is one of the following: Format: [label] EXCEPTCLEAR {event} [label] EXCEPTCLEAR CHAR={char} [label] EXCEPTCLEAR ALL [label] EXCEPTCLEAR ALLCHARS [label] EXCEPTCLEAR ALLFKEYS [label] EXCEPTCLEAR ALLKEYS Where: label - Optional. A Program Execution Label. {event} - One of the exception program Events. {char} - Required. A single character Literal or a Character String Variable. The {char} CAN ONLY be used when using the 'CHAR=' syntax format. Flags: ZERO Note the following: 1. The ZERO flag is set TRUE when an exception program event is cleared. Otherwise, the ZERO flag is set FALSE. 2. ALL specifies that all exception program events that are enabled are cleared at the current stack level. 3. ALLCHARS clears all character exception program events at the current stack level. 4. ALLFKEYS clears all function key exception program events at the current stack level. 5. ALLKEYS clears all character and function key exception program events at the current stack level. --------------------------------------------------------------- EXCEPTCHECK This instruction checks to see if an exception program event has been enabled at the current stack level or at any stack level in a program. The ZERO and OVER flags are used to report the results. This instruction uses one of the following formats: Format: [label] EXCEPTCHECK {event} [label] EXCEPTCHECK CHAR={char} Where: label - Optional. A Program Execution Label. {event} - One of the exception program Events. {char} - Required. A single character Literal or a Character String Variable. The {char} CAN ONLY be used when using the 'CHAR=' syntax format. Flags: ZERO, OVER Note the following: 1. The ZERO flag is set TRUE when an exception program event is current enabled at the current CALL/RETURN stack level. Otherwise, the ZERO flag is set FALSE. 2. The OVER flag is set TRUE when an exception program event is current enabled at any CALL/RETURN stack level. The OVER flag is cleared if an exception program event is NOT enabled in a program. --------------------------------------------------------------- EXCEPTDO This instruction causes a specified exception program event to be detected and dispatched immediately. Format: [label] EXCEPTDO {event},{msg} [label] EXCEPTDO CHAR={char},{msg} Where: label - Optional. A Program Execution Label. {event} - One of the exception program Events. {char} - Required. A single character Literal or a Character String Variable. The {char} CAN ONLY be used when using the 'CHAR=' syntax format. {msg} - Required. A Character String Variable or a Literal that contains the user program message data that is to be sent to the exception program event handler. Flags: None Note the following: 1. If the exception program event is not enabled when the EXCEPTDO instruction is executed, then this instruction is ignore the same as a NOP. --------------------------------------------------------------- EXCEPTDISABLE This instruction disables the specified exception program event at the current CALL/RETURN stack level. When an exception program event is disabled, then any PL/B instruction that causes the disabled event is bypassed at the place where the exception event was detected. This instruction affects the exception event at the current stack level and any stack levels accessed via a CALL instruction. Format: [label] EXCEPTDISABLE {event} Where: label - Optional. A Program Execution Label. {event} - One of the exception program Events that defined in the Group1 events in the EXCEPTSET instruction. Flags: ZERO Note the following: 1. The ZERO flag is set TRUE when the {event} is disabled. Otherwise the flag is cleared. --------------------------------------------------------------- EXCEPTENABLE This instruction enables a specified exception program event that has been established using the EXCEPTSET instruction at the current CALL/RETURN stack level. Format: [label] EXCEPTENABLE {event} Where: label - Optional. A Program Execution Label. {event} - One of the exception program Events that defined in the Group1 events in the EXCEPTSET instruction. Flags: ZERO Note the following: 1. The ZERO flag is set TRUE when the {event} is enabled. Otherwise the flag is cleared. 2. If the {event} does not exist at the current CALL/RETURN stack level, then the EXCEPTENABLE has no action other than to clear the ZERO. - Added a new keyword named *MAXUSERS={nvar|ivar} for the GETMODE instruction. This keyword returns the maximum number of users allowed by the runtime for the authorization number in use. - Changes have been made to implement reconnection recovery capabilities when using the SUNFM file manager. The reconnection recovery capability can only work when both the runtime and the Sunfm file manager versions are 9.0C or later. Also, the reconnection recovery is only activated when the 'FM_KEEPALIVE' keyword is specified in the SUNFM.CFG file. - The keyword named 'PLB_CHILDRECOVERY={on|off}' has been added for all the runtimes including PLB, PLBWIN, and PLBSERVE. By default, the child reconnection recovery is controlled by the Sunfm settings for 'FM_KEEPALIVE' and 'FM_CHILDRECOVERY' found in the SUNFM.CFG. If the child reconnection recovery is enabled by the Sunfm file manager, then the 'PLB_CHILDRECOVERY' keyword can be set to 'OFF' in the PLBWIN.INI file. In this case, the child reconnection recovery is disabled for the one client runtime regardless of the settings at the Sunfm file manager. - Corrected a problem where the BACKSPACE operation while using the *EDIT control would only work for a 0x08 character value. The hard coded 0x08 value in this case would cause problems when a terminal interface required a backspace character value other than 0x08. - Corrected a problem where the WHEREIS instruction could skip data resulting in a erroneous searching operation. Example of error: FX FORM 3 . WHEREIS "ORDERS" IN "CUSTOMER,ORDERS,TEST" GIVING FX . The error was that the ORDERS was not being found in the search string. - Corrected a problem where the PLB_CURDIR current directory setting was not being used when a OPEN or PREP operation was executed and the file name started with '.\' or '..\'. - Corrected a GPF problem that could occur during program CHAIN or SHUTDOWN cleanup actions. This problem was caused when a dynamic DIM was create in one PL/C module and then freed in a different PL/C module. A symptom for PLBSERVE was that it could bring down/terminate the main server process where all clients could no longer access the server. Another symptom for any of the runtimes was that a program would simple hang and not respond. - Corrected an I40 problem caused when an ARRAY variable was used as the AAM READ key parameter. This problem would occur when the first array element contained a valid key specification and the other elements of the array were nulled. This problem was occurring because the first array element of the array was being skipped. - Corrected a problem in the MOVEPTR instruction where a GUI object pointer could be set to reference a GUI object with the wrong object type when using an OBJECT or VAR pointer as the source. - Corrected a problem where the SORT instruction did not execute the following command string properly: SORT "in.txt out.txt -1-10,S=#"23=' 77'#"" - Corrected a problem where the AAMDEX, INDEX, and SORT instructions gave a S13 subcode 109 error for the following command string: SORT "in.txt ,out.srt -1-5" - Corrected a problem where an Isam keyed READ operation might fail indeterminately when the IFILE was opened in a READ only mode. - Corrected a problem where the runtime operations using the keyword named 'PLB_CHKDRN=ON' did not work properly. This problem has existed for all prior releases of 9.0 runtimes. This problem could cause expected/unexplained I52 errors to occur. - Corrected a problem where a common alignment error would occur during a CHAIN when an arrayed variable was in common. - Corrected a problem using an ISI file that had a byte order that was different than the current PL/B runtime. This problem would occur where a READKS loop for an ISI could hang indefinitely after an Isam WRITE for the ISI had been executed once. This problem was an ISI byte order processing problem. - Corrected a problem when using an ISI file that required byte order translation. In this case, an untranslated ISI DDR (Delete Data Record) sector could be written into the ISI file. This could cause indeterminate Isam operations if this should occur. This problem CAN ONLY occur if an ISI file byte order is different from the processor that is executing the runtime. Example: This problem might occur if an ISI from an IBM AIX system is moved and used by a program running on a Pentium processor. - Corrected an I60 error that could occur when using the OPEN/PREP mode bit type of CMP_ISI_BLOCK. - Corrected a problem where an untrapped error in a program named 'crmaster.plc' was causing a chain back to an answer program instead of a chaining back to a master program. This problem existed when a program name ended with the name 'master.plc'. ------------------------------------------------------------------------------- PLBWIN - Modified the MOVE instruction to allow both the {source} and the {dest} variables to be a GUI object of the same type. In this case, the created object control of the {source} variable is moved to the {dest} variable. Format: [label] MOVE {source}{sep}{dest} Where: label Optional. A Program Execution Label source Required. A GUI Object variable that serves as the source operand. sep Required. A comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, or INTO. dest Required. A GUI Object variable that serves as the destination operand. This GUI Object must have the same GUI Object type as the {source} operand. Flags: ZERO Note the following: 1. The ZERO flag is set TRUE when the {source} GUI Object control is moved to the {dest} GUI Object. Otherwise, it is cleared. 2. The {source} GUI Object type must be the same as the {dest} GUI Object type. A compilation error occurs if the types do not match. If the GUI Object type mismatch is detected by the runtime then an O160 error occurs. 3. If the {dest} GUI Object has been created, then it is destroyed before the MOVE operation is performed. 4. After the MOVE object to object operation has been completed successfully, then {dest} GUI Object acquires the creation state of the {source} and the {source} GUI Object is always set to a not created state. 5. If the {source} GUI Object is not in a created state before the MOVE object to object operation, then the {dest} GUI Object is is set to a not created state after the MOVE operation is completed. 6. If the {source} and the {dest} variables reference the same program GUI Object variables, then no move action is taken. - Modified the GPF crash handler routines for the runtime to prevent secondary GPF errors that would prevent data from being reported about a GPF error that occurred in a PL/B user program. - Modified the Windows runtimes to provide a 32 bit color Sunbelt ICON is place of the previous 16 color Sunbelt ICON. This change allows the user to replace the Sunbelt ICON resources named 'PLBWIN' and resource id '1' with a user 16 color, 256 color, 24 bit color, 32 bit color ICON. To perform this ICON replacement, the user MUST use a 3rd party Icon Editor that allows Icons is an EXE module to be updated. - Corrections have been implemented for objects when using the UNITS property. The corrections affect any properties that relate to object positions or sizes. This change affects multiple objects as follows: TREEVIEW, COLLECTION, WINDOW, RICHEDIT, SPLITTER, TOOLBAR, STATUSBAR, EDITTEXT, PANEL, TABCONTROL, COMBOBOX, DATALIST, and ICON. - Corrected a problem where the LoadCsvFile method for a LISTVIEW was causing a trailing double quote character to be loaded as column data. - Corrected a problem where the menu items for the GUI MENU and SUBMENU objects did not work when a problem was executed on a Windows 95 system. - Corrected a problem where the DRAGITEM action did not work properly when the object being dragged had a PANEL as its parent. - Corrected a problem where a CREATE instruction was causing an error with a bad error code to be reported when a MODAL dialog was implicitly close by the CREATE. The problem existed because a program was erroneously posting multiple PL/B user events that caused a MODAL dialog to be created multiple times. - Added PUTREF support for an ActiveX Control interface. This change corrects a problem where an O146 error was occurring when a SETPROP *DATASOURCE operation was performed for a vsFlexGrid control. Prior to this change the runtime did not support the PUTREF interface for an ActiveX Control. - Corrected a problem where the WINPOS property did not work for an MDI Window type when the WINPOS value was set to $PARENTCENTER.:T - Corrected a problem to insure that an O110 error is given if a DEACTIVATE of a nested Modal Window is executed. When nested Modal Dialog Windows are used, the Modal Windows must be deactivated in the reverse order to the order in which the Modal Windows were activated. - Corrected a problem where a DEACTIVATE of a COLLECTION did not allow docked objects to be properly resized after the deactivate operation. ------------------------------------------------------------------------------- PLBCMP - Added FUNCTION/FUNCTIONEND support. See descriptions above. - Added support for new EXCEPTxxx instructions. See descriptions above. - Modified MOVE instruction to support GUI object variables for the source and destination operands. - Modified the EVENTREG instruction to support the ARG1 to ARG10 keyword parameters for all objects. This change allows a user application to use the EVENTSEND instruction and pass data to any GUI object event routine using the ARG1 to ARG10 parameters. - Corrected a pcode problem that would occur when a RECORD LIKE variable was created from a RECORD where the first element of the RECORD was a DIM, FORM, or INTEGER array. This pcode problem would cause a GPF error to occur when the RECORD LIKE variable was used in a program. - Corrected a problem where the GETITEM for an EDITDATEIME object was not generating valid pcode when the destination variable was a variably indexed array. The problem was that the result was always being stored into the first element of the array. Example: GETITEM EDITDATETIME,0,DIMARR(NDX) - Corrected a problem where the compiler was giving an erroneous error on the 'STAT' keyword for the following statement syntax. Example: IFILE IFILE %FIX=511,STAT=2 - Corrected a problem where the LIKE instruction could cause invalid data to be placed into the UDA of a PLC module. This could cause indeterminate program execution since the data corruption would be placed at indeterminate locations in the data space for a program. One symptom of this problem would be a GPF error when a program was loaded. ------------------------------------------------------------------------------- PLBDBUG - Modified the debugger to support FUNCTION and exception program event changes. ------------------------------------------------------------------------------- UTILITY - Modified the Sunaamdx and Sunindex utilities to read 8.x file header formats when the -r or -i option is used and convert to version 9.x format. - Corrected optimization problems in the Sunindex and Sunsort utilities that could cause poor performance times for some TXT files that had records in certain orders. ------------------------------------------------------------------------------- ODSBAC32.DLL- Corrected an ODBC driver AAM performance problem. This was a problem that has existed for prior 9.0x releases of the Odsbac32 DLL. The cause of this bug was that NO AAM hash keys were being used and that was causing every AAM file record to be sent from the Sunfm file manager to the client ODBC side so that decisions about a 'LIKE' clause could be determined. This correction now allows the AAM has keys to be properly used to minimize the data that is sent back to a client ODBC side from a Sunfm server. ------------------------------------------------------------------------------- SUNFHSYS.DLL- Modified to support changes made for the Sunaamdx, Sunindex, and Sunsort operations described for in the Utility section. - Modified to support Sunfm protocol changes to implement the connection recovery capabilities. - Changed to correct a problem where the PLB_CURDIR current directory was not being used when a file name started with '.\' or '..\'. - Modified to correct a problem performing an Isam keyed READ for an IFILE opened in a READ ONLY mode. - Corrected an I52 problem caused when the PLB_CHKDRN keyword was used. - Corrected Isam header byte order translation problems. ------------------------------------------------------------------------------- SUNWADO.DLL - Corrected an exception problem that would terminate the program execution when it encountered a null field. ------------------------------------------------------------------------------- ADMIN - Modified the main logon process for the Admin Services to eliminate problems that can caused by reception of bad/invalid data messages. Prior releases of ADMIN Services could hang/terminate prematurely if bad/invalid logon messages were received. The type changes that were made for Admin Services are the same as described for the Application Server above. - Modified the Windows Admin Service GPF crash handlers to eliminate the possibility of secondary GPF errors that could prematurely hang the server processes that interface with the Admin Services. ------------------------------------------------------------------------------- SUNIDE - Modified the command line processing to strip quotes from a specified filename so windows file associations can be setup for the ide. - Added compiler output extension project configuration option for preferred compiler setup in project settings. - Modified build process to utilize configurable output extension of compiler to find build targets. This was necessary in order to intelligently decide if a given program needed to be compiled based on source timestamps. - Modified shutdown logic to better detect when errors occur that could corrupt or leave a project file unusable. - Corrected a problem where if an event occurs after a compile or refresh dependencies, the project file could be left in an indeterminate state which could result in a corrupt project file or programs being dropped from the project. - Modified the Project options Compiler tab to try to reduce confusion regarding their purpose. - Corrected a problem with SAVE AS where a bad file would be written to disk. - Corrected a problem where the default include extension could be incorrectly appended to an include file name when using the PLBCMP_EXT keyword. - Corrected a problem where the initial default setup for initial IDE incorrectly setup the compiler. - Corrected a bug where trying to debug with a preferred runtime would not work. - Corrected a bug where if an include or plform file name contained EQU, CONST, or DEFINE in the file name, the IDE would not identify it as an included file for a program. - Fixed up dialogs to better support large screen fonts. - Modified Build process to use IDE default compiler if project does not have them defined. - Corrected a problem where not all opens were covered covered by traps. - Corrected an expected error condition that could occur when the IDE was trying to identify modified files. - Corrected a date formatting bug. - Corrected an autocomplete bug where if a record label did not have a trailing space such as in an expression, the following characters would be overwritten. - The debugger now honors the font setting of the editor when running under the IDE. - Modified menus for a more intuitive interface. Added File and Help menus. - Gui interface now aborts if back end debugger is disabled due to an invalid .SDB file. - Modified syntax (comments definitions) to correctly color comments while debugging. - Modified logic to convert TRAPs to EXCEPTs. ------------------------------------------------------------------------------- ADO.PLS - Modified to work correctly with version 9.0. ------------------------------------------------------------------------------- Date: 01-19-2005 Subject: Patch RELEASE 9.0D Runtime Files Included you will find the patch release of: PLBCLIENT 9.0D 17 Jan 2005 9,0,4,0 PLBCLICON 9.0D 17 Jan 2005 9,0,4,0 PLBCON 9.0D 17 Jan 2005 9,0,4,0 PLBSERVE 9.0D 17 Jan 2005 9,0,4,0 PLBWIN 9.0D 17 Jan 2005 9,0,4,0 SUNFYSYS.DLL 9.0D 17 Jan 2005 9,0,4,0 DBGIFACE 9.0D 17 Jan 2005 PLBCMP 9.0D 17 Jan 2005 PLBDBUG 9.0D 17 Jan 2005 SUNIDE 9.0D 17 Jan 2005 SUNSCAN 9.0D 17 Jan 2005 WATCH 9.0D 17 Jan 2005 *============================================================================== Notes for some NEW Items: - Added 16 bit attribute support to runtimes. *============================================================================== Notes for WARNINGS: - If the 9.0D PLBWIN or SUNFHSYS is used with any prior release versions, then an error is given as follows: 'Fatal error condition U40 encountered.' *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - Corrected a problem where a F09 error occurred when an EDITDATETIME object was used in a source list for an IMPLODE instruction. - Modified the Unix Application Server to eliminate a one time memory leak problem that was occurring when a child process was started. - Modified to work around an OS memory 'free' problem on a Linux platform that would cause premature termination of a child process when the process was performing cleanup operations while terminating. This problem was preventing the Application Server child counts from properly decreasing when stopping a program. ------------------------------------------------------------------------------- PLBCLIENT- Modified to support changes for 16 bit attributes that allows the *ULON/*ULOFF and *BLINKON/*BLINKOFF controls to be supported. ------------------------------------------------------------------------------- PLBCLICON- Modified to support changes for 16 bit attributes. ------------------------------------------------------------------------------- PLBCLIUNX- Modified to support changes for 16 bit attributes. ------------------------------------------------------------------------------- PLB (UNIX)- Modified the '-e' command line option to give user license and PLBCON user count data in addition to any expiration information. ------------------------------------------------------------------------------- PLBWIN - Modified the runtimes to support 16 bit attributes. This change PLBSERVE allows the *ULON/*ULOFF and *BLINKON/*BLINKOFF controls to be PLB (UNIX) be used without conflicting with color attributes. There are some PL/B character based screen control operations that change when the 16 bit attribute support is to be used. The following instructions are affected when the 16 bit attributes are used: SCRNSAVE, SCRNREST, SCRNSIZE, STATESAVE, STATEREST, STATESIZE, WINSAVE, WINREST, WINSIZE, KEYIN *CRTON control. In general, the storage and restoration sizes for these instructions increases when the 16 bit attribute operations are used. By default the runtimes execute in an 8 bit attribute mode to prevent unexpected operation changes for the affected instructions. However, a new keyword named 'PLB_SAVECHARSIZE={n}' has been implemented to cause these instructions to store/restore 16 bit screen image attributes. When the PLB_SAVECHARSIZE value is set to be '4', then the operations of these instructions change to cause 16 bit attributes to be used. If any other value other than '4' is specified for this keyword, then these statements execute in a normal 8 bit mode. Note: The *ULON underline control DOES NOT work for the PLBCON console runtime. - Added a new keyword named '*SAVECHARSIZE={value}' that can be used in a GETMODE or SETMODE instruction. The GETMODE *SAVECHARSIZE={value} keyword can be used to retrieve the current attribute mode being used. In this case, the returned value should be either a 2 or 4. When the value is 2, then an 8 bit attribute mode is being used. When the value is 4, then a 16 bit attribute mode is being used. The SETMODE *SAVECHARSIZE={dnumnvar} keyword can be used to set the current attribute mode being used. In this case, the {dnumnvar} value can be either 2 or 4. The value of 2 indicates that the 8 bit attribute mode is to be used and a value of 4 indicates that the 16 bit attribute mode is to be used. If the {dnumnvar} value is not 2 or 4, then no change is made for the current attribute mode. - Modified the runtime maximum license error message to given about the current and maximum user counts. The expanded error messages are reported as follows: "Licensed for NN users and MM are active." or "Licensed for NN users and MM are active with LL tasks." - Modified to correct a GPF error that might occur when a 'Q' PLBDBUG command was executed. The PLBDBUG problem is only corrected when both the runtime and PLBDBUG versions are 9.0Da or later. - Corrected a problem where conditional RETURN instructions did not work properly for OVER, EOS, and ZERO when the instruction was executed in a FUNCTION. A GPF or SEGV error could occur in this case. - Corrected a problem where a U51 error would occur when a program was loaded that used a DBSTATEMENT variable declaration. - Corrected a problem where an UNPACK instruction could cause a GPF/SEGV error when an array variable without an index was used in the destination data variables. ------------------------------------------------------------------------------- PLBCON - Modified for 16 bit attribute changes. Note: The *ULON underline control DOES NOT work for the PLBCON console runtime. ------------------------------------------------------------------------------- PLBWIN - Corrected a problem where the DIALOG object did properly deactivate old style dialog windows. - Corrected a NORETURN problem that was caused by changes that were made in release 9.0D. The problem was that the NORETURN was not setting the OVER flag to indicate an empty call/return stack when processing an event dispatched for a MODAL dialog. Also in this case, this problem was causing the NORETURN to return to the internal runtime Modal control without allowing program execution to continue. ------------------------------------------------------------------------------- PLBCMP - Corrected a problem where the compiler was allowing a CONST variable to be used in a READ instruction variable list. The compiler now gives an error in this case. ------------------------------------------------------------------------------- PLBDBUG - Modified the debugger for character DISPLAY/KEYIN 16 bit support. - Modified to correct a GPF error the might occur when a 'Q' command was executed. This problem is only corrected when a 9.0Da or later version of PLBDBUG is used with a runtime version of 9.0Da or later. ------------------------------------------------------------------------------- SUNFHSYS.DLL- Modified the DLL version for internal system changes. ------------------------------------------------------------------------------- ANSI.DEF - *HOFF, *DIOFF, BLINKOFF and *ULOFF were all changed for Windows so each could be turned off independently of each other. ------------------------------------------------------------------------------- SUNIDE - Corrected an error during startup where an IDE configuration file would not be created during initial install. The error was caused by changes in the 9.0C release. - Corrected a Bug where the designer, workshop and graphical compiler interface on the tools menu would not execute. This error was caused by changes in the 9.0C release. - Corrected a potential format error that could occur while processing a list file. - Modified Find in files to record a history of searches so a user can select them from a drop down list. ------------------------------------------------------------------------------- DBGIFACE - The help menu was not getting destroyed on exit resulting in two help menus when returning to the IDE. ------------------------------------------------------------------------------- WATCH - Redesigned the data acquisition logic to ensure correct and complete results. - Added optional retrieval and analysis of load modules, text, ISAM, AAM, and spool files. - Added toolbar buttons to control display attributes and analysis. - Modified the treeview to show complete file names. - Added a properties shortcut menu function for text, ISAM, AAM, and Spool files and load modules. - Made display of text, ISAM, AAM, and spool files and load modules optional for improved performance when using slow links. - Included additional information in the status bar. Date: 03-17-2005 Subject: Patch RELEASE 9.0E Runtime Files The following files are included with this patch: ODSBAC32.DLL 9.0E 17 Mar 2005 PLBCLICON 9.0E 17 Mar 2005 9,0,5,0 PLBCLIENT 9.0E 17 Mar 2005 9,0,5,0 PLBCON 9.0E 17 Mar 2005 9,0,5,0 PLBDSIGN 9.0E 17 Mar 2005 9,0,5,0 PLBSERVE 9.0E 17 Mar 2005 9,0,5,0 PLBWIN 9.0E 17 Mar 2005 9,0,5,0 SUNFHDLL.DLL 9.0E 17 Mar 2005 9,0,5,0 SUNFHDLL.LIB 9.0E 17 Mar 2005 SUNFYSYS.DLL 9.0E 17 Mar 2005 9,0,5,0 SUNINDEX 9.0E 17 Mar 2005 9,0,5,0 SUNSORT 9.0E 17 Mar 2005 9,0,5,0 SUNAAMDX 9.0E 17 Mar 2005 9,0,5,0 SUNWADO.DLL 9.0E 17 Mar 2005 9,0,5,0 SUNWODBC.DLL 9.0E 17 Mar 2005 9,0,5,0 SUNWMSQL.DLL 9.0E 17 Mar 2005 9,0,5,0 DBGIFACE.PLC 9.0E 17 Mar 2005 EDITOR.PLC 9.0E 17 Mar 2005 PLBDBUG.PLC 9.0E 17 Mar 2005 PLBCMP.PLC 9.0E 17 Mar 2005 SUNIDE.PLC 9.0E 17 Mar 2005 SUNLIST.PLC 9.0E 17 Mar 2005 PLBMETH.INC 9.0E 17 Mar 2005 *============================================================================== Notes for some NEW Items: - XFILE file variable has been added to the PL/B language to support direct XML IO operations using OPEN, PREP, READ, WRITE, INSERTXML, etc.... - Added support for 8.7x file formats. - Added BUTTONENTERKEY for WINDOW object. - Added a new method named ChooseColor for the COLOR object. - Modified GETFILE to retrieve DBFILE connection information. - Modified GETMODE to retrieve the current *MCURSOR value. *============================================================================== Notes for WARNINGS: - A U40 error occurs if the 9.0E SUNFHSYS DLL is used with any prior runtime. - The following error occurs if any SUNFHSYS DLL version prior to 9.0E is used with the 9.0E runtimes. "The procedure entry point FhSetXFileInfo could not be located in the dynamic link library Sunfhsys.dll." *============================================================================== Notes for DOCUMENTATION: - In release 8.7C, the keyword named *TEXTOUTCONV={dnumnvar} was added for the GETMODE/SETMODE instructions. The *TEXTOUTCONV keyword value identifies the default TEXTOUTCONV property value to be used for the EDITTEXT objects that has a current setting of $CONVDEFAULT when data is extracted from the EDITTEXT using the GETITEM or GETPROP instructions. - The documentation should be updated to identify that the *BGCOLOR property is supported for the PICT object. This property is available for a CREATE, GETPROP, or SETPROP instruction. - In release 9.0 and 9.0C, there were subcodes added for an I81 error as follows: SubCode 15 - An error has occurred because the Sunfm NT Service has been been paused and logons are not allowed. 16 - Data received for a TCP/IP message is larger than expected. 17 - An error has occurred because the Sunfm server is shutting down and logons are not allowed. - Added a subcode 42 for an I23 error as follows: SubCode 42 - File in a FILELIST is not opened with the same format a the primary file. All files in a FILELIST must either be opened using the 9.0x format or the 8.7x format. - Added an O161 object error. The O161 error occurs when a SUBMENU is activated and the parent {menu} object has not been created or set for the SUBMENU object. - Added an O162 object error. The O162 error occurs when an invalid GUI object is used in a PL/B instruction. *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBCLIENT- Corrected a problem where the keywords for the embedded INI data was not detected when the records only contained the LF character for the end of records. - Corrected a problem where the Windows NT OS does not support the Process32First & Process32Next APIs. The Windows NT OS would not load the PLBCLIENT executable when these APIs were used. ------------------------------------------------------------------------------- PLBWIN - Modified all runtime logs to give the ported platform information PLBSERVE for the runtime being executed. PLB (UNIX) - The runtimes have been modified to support 8.7x file formats for the ISI and AAM file structures. Please note the following for the 8.7x file format support: 1. The OPEN instruction for an IFILE or AFILE automatically detects the format of the ISI or AAM files to determine whether the 8.7x or 9.0x format is being used. 2. By default the PREP instruction for the IFILE or AFILE creates the ISI or AAM files using the 9.0x format. The PREP instruction has been modified to create the ISI or AAM files using the 8.7x format by using a new keyword named PLB_PREP87={on|off}, by using a new keyword named *PREP87={dnumnvar} in a SETMODE instruction, or by setting a CMP_PREP87 ( 0x2000 ) bit in the optional {mode} operand for the PREP instruction. 3. The GETMODE and SETMODE instructions have been modified to support the keyword named *PREP87={dnumnvar}. When the *PREP87 Keyword is set to a value of 1, then this causes any subsequent PREP operations to create 8.7x file formats for the AAM/ISI files. 4. When using the SUNFM file manager, there is a new keyword named FM_PREP87={on|off} that can be used to force all PREP instructions to create the ISI or AAM files for the 8.7x format. When the FM_PREP87 keyword is set to ON, then the PLB program CAN NOT override this setting to create 9.0x formatted files. If the FM_PREP87 keyword is NOT specified or is set to OFF, then the PREP instruction at the file manager creates the files depending on the settings specified for the client program accessing the file manager. 5. The 9.0x SUNINDEX and SUNAAMDX utilities ONLY generate 9.0x file formats. Version 8.7x utilities must be used when indexing 8.7x file formats. - The GETFILE instruction has been modified to support a new keyword named FILEFORMAT={nvar}. The FILEFORMAT can be used for IFILE or AFILE file variables. The {nvar} that is returned for the FILEFORMAT is a bit mask that identifies file format information as follows: 0x0001 - IFILE is being used. 0x0002 - AFILE is being used. 0x0010 - The ISI/AAM file format is 9.0x. 0x0020 - The ISI/AAM file format is 8.7x. 0x0040 - The ISI file format supports file larger than 4GB. - Support for the Extensible Markup Language (XML) has been added to the PL/B programming language. A new file variable type named XFILE as been added to support language features for XML processing. As a general description, the XFILE support added to the PL/B language provides the capability of processing XML data in a structured manner that is similar to standard PL/B File IO operations. The XFILE file variable is now supported in the following PL/B instructions: CLOSE DELETE FLUSH FPOSIT GETFILE INSERTXML (NEW) OPEN POSITEOF PREPARE READ READKG READKGP REPOSIT SETFILE (NEW) UPDATE WRITE See the PL/B Language Reference Manual for a general discussion on the XML support that has been added and the descriptions of the instructions that support XFILE variables. - Corrected a problem where the AAMDEX, INDEX, and SORT instructions did not support the PLBENV_ file name substitution using a leading $ character. - Corrected a problem where the AAMDEX, INDEX, and SORT instructions were not allowing embedded white space (blank) characters in the file names. This correction allows double quote characters to be used to around individual file names being used. Example: AAMDEX "#"c:\my files\input.txt#" output.aam -1-5" INDEX "input.txt,#"c:\my files\output.isi#",L10 -1-5" SORT "input.txt,output.srt,L10,#"c:\my files#" -1-5" - Corrected a problem where a DISPLAY *ABSON operation was not displaying properly. The DISPLAY *ABSON operation now uses the PLB_SAVECHARSIZE keyword setting to determine how the data is formatted for output. If a KEYIN *ABSON/*CRTON operation retrieves screen data, now the DISPLAY *ABSON operation properly outputs the data and attribute when the same PLB_SAVECHARSIZE setting is used for both the KEYIN and DISPLAY operations. - Corrected a problem where a READKG operation wrapped to the beginning of a data file after an UPDATE FILELIST was executed for a record beyond 4GB. This problem would occur when the primary file of the FILELIST was an IFILE and the AFILE was a secondary file. - Modified the RENAME instruction to prevent the possibility of an unexpected file name being reported when an I31 error occurs. - Corrected a GPF error that might occur when the COUNT instruction contained an array variable reference in the variable list. This problem would only occur when the COUNT instruction followed another operation that only processed part of the variables for an array. - Corrected a GPF error that would occur when the local variables contained only a single RECORD for a FUNCTION. The GPF error would occur when the RETURN from the FUNCTION was executed. - Corrected a problem where an extra delimiter could be appended to the destination variable when the last input variable was a VARLIST or RECORD. - Corrected a problem where a PREPARE of an AFILE was causing the file name stored in the AAM header to have an extra leading binary character. This extra character could cause problems opening the text file referenced by the AAM file. This also would cause problems using the '-i' or '-r' options for the SUNAAMDX utility. ------------------------------------------------------------------------------- PLBWIN - Added a new property named 'BUTTONENTERKEY={dnumnvar]' for a WINDOW object. When this property is set to a value of 1, then a Click event is generated when an Enter key is keyed when a BUTTON object currently has the focus. When this property is set to a value of 0 (default), then a Click event is only generated when an Enter key is keyed for a BUTTON object if a DEFAULT property has been set for one of the BUTTON object currently on the current Window. Otherwise, the Enter key for a BUTTON object does not generate a Click event. The BUTTONENTERKEY property can be used in a CREATE, GETPROP, or SETPROP instruction. - Modified the TEXT property for the CREATE of a LABELTEXT object to allow a data length up to 4096 bytes. Prior to this change the TEXT property data length was limited to 255 characters. This change allows longer data strings to be specified for the LABELTEXT object text in the PLBDSIGN designer. - Added a new method named ChooseColor for the COLOR object. ............................................................... . ChooseColor Method . The ChooseColor method creates a Color dialog box that allows the user to select a color. This method sets the default color for the Color dialog box using the current COLOR object color setting. The method uses the following format: [label] {object}.ChooseColor [GIVING {return}]: USING [*Flags=]{flag} Where: {label} is an optional Program Execution Label. {object} is a required COLOR object to be accessed. {return} is an optional Numeric Variable that indicates the success or failure of the method. {flag } is a required Numeric Variable or decimal number that specifies a bit map value that is used to initialize the dialog box. the attribute column. Flags Affected: OVER, ZERO Note the following: 1. The {return} value is set to zero when the user exits the Color dialog box using the OK button. Otherwise, the {return} value is set to a non-zero value when the user exits the Color dialog box. 2. If the value returned is zero, the ZERO (or EQUAL) condition flag is set (TRUE). 3. If the {return} variable is too small to contain the result of the method, the OVER condition flag is set (TRUE). 4. The default color for the Color dialog box is set to the current color that has been created for the COLOR object. 5. The {flag} bit map settings can be used to initialize the Color dialog box with any combination of the following bit map values: CC_FULLOPEN 0x0002 This flag bit setting causes the dialog box to display the additional controls that allow the user to create custom colors. If this flag is not set, the user must click the 'Define Custom Color' button to display the custom color controls. CC_PREVENTFULLOPEN 0x0004 This flag bit setting disables the 'Define Custom Colors' button on the Color dialog box. CC_SOLIDCOLOR 0x0080 This flag bit setting causes the dialog box to display only solid colors in the set of basic colors. CC_ANYCOLOR 0x0100 This flag bit setting causes the dialog box to display all available colors in the set of basic colors. 6. When the OK button control is used to exit the Color dialog box, then the COLOR object is set to the selected color value that has been selected. Otherwise, the COLOR object color value is not changed. - Modified the GETFILE instruction to allow connection information to be retrieved for a DBFILE. The new keywords can only returned data when the SUNWODBC, SUNWADO, or SUNWMSQL driver version being used is 9.0E or later. The new keywords are described as follows: DBHOST={svar} The DBHOST string provides the host database source used by the driver when making a connection. The {svar} can be NULL. DBUSER={svar} The DBUSER string provides the user named used by the database driver when making a connection. The {svar} can be NULL. DBPASS={svar} The DBPASS string provides the password used by the database driver when making a connection. The {svar} can be NULL. DBCONN={svar} The DBCONN string provides the addition login information used by the database driver when making a connection. The {svar} can be NULL. DBEXT={svar} The DBEXT string provides the extension data used by the database driver when making a connection. The {svar} can be NULL. DBDIALOG={svar} The DBDIALOG string provides the connection string returned a database driver when a database DIALOG is used to select the database source. The {svar} can be NULL when a DIALOG interface is not used. - Modified the MOVE event for the WINDOW object to provide event modifier data that identifies when a window is maximized or minimized. Value Modifier 0x01 WINDOW object is maximized 0x02 WINDOW object is minimized - Modified GETMODE to support '*MCURSOR={nvar|ivar}'. This allows the user application to retrieve the current setting for the *MCURSOR that being used. - Modified the MouseMove event to stop generating events when the mouse is moved outside the viewing scope of the object for which the mouse was depressed. This prevents a negative and unexpected values that could occur for the result. - Modified the DRAGITEM instruction to support an input generic OBJECT. If the generic OBJECT is referencing a GUI object that is not allowed for the DRAGITEM, then an O162 error occurs. - Modified the GETINFO with TYPE=PFILE and UNITS= parameters specified to return the current printer position data values untranslated when UNITS specified for GETINFO is the same as the current printer UNITS setting. - Modified the SETPROP for the PUSHED property of a TOOLBUTTON to release any tool buttons in a toggle group before setting a TOOLBUTTON to a pushed down state. - Corrected a problem where the bold color value for the *BGCOLOR and *FGCOLOR DISPLAY/KEYIN controls might not work immediately. This would cause some displayed data to be output using a normal text color until a window update was executed. This problem was most noticeable when the PLBWIN_DOSCOLORS keyword was set to ON. - Corrected problem where the SetColumnOrder method for a LISTVIEW object was not updating the listview window data. - Corrected a problem where the LISTVIEW object methods InsertAttrRGB, InsertAttrColor, and InsertAttrFont were always returning a value of zero. - Corrected a problem where a PFILE opened with a PRTOPEN instruction was not being closed when a CHAIN, STOP, or SHUTDOWN instruction was executed. This PFILE is now being closed. - Corrected a problem that could cause a memory leak and prevent a PFILE opened from being closed when the PFILE that was currently opened by a PRTOPEN was opened again using a SPLOPEN instruction. - Corrected a problem that could cause a memory leak and prevent a PFILE opened from being closed when the PFILE that was currently opened by a SPLOPEN was opened again using a PRTOPEN instruction. - Corrected an O123 error that would occur when using an OBJECT generic object in a SETPROP with any one of the properties PERCENT, RESIZE, or SCROLLBAR being specified. - Corrected a problem where a 9.0x runtime was using the LANDSCAPE orientation when PRTPLAY printed a spoolfile created by an 8.7x runtime. In release 9.0, the *ORIENT settings were changed to be consistent with the GETINFO data being reported for the orientation. The correction as implemented in 9.0E allows the spool version to be used to determine whether the LANDSCAPE or PORTRAIT orientation is to be used as implemented by a 9.0x or 8.7x runtime. NOTE: If an advance spool file is created using PRTOPEN as executed using a 9.0x runtime, then this spool file CAN ONLY be used with a 9.0x runtime to get the proper *ORIENT orientation. - Corrected a GPF error that would occur when an ACTIVATE of a SUBMENU object was executed and the parent MENU object for the SUBMENU object had not been created. - Corrected a problem where two PREP IFILE operations using the same text file, EXCLUSIVE mode, and PLB_PREP setting would cause the text file to be created in the current working directory. This problem would cause the text file to be created both in PLB_PREP directory setting and the current working directory. - Corrected a PRTPAGE problem where the *N and *L controls would cause invalid line spacing when the UNITS control was set to a setting other than PIXELS. - Corrected GPF errors that would occur in the following PL/B instructions when a generic OBJECT was used that did not reference a COLLECTION object. LISTCNT LISTDEL LISTGET LISTINS - Corrected a problem where the AUTOSCALE property was not being set in a CREATE operation for the PICT object. - Corrected a problem where a printer name longer than 30 characters was being restricted to 30 characters when this printer name was explicitly specified for a PRTOPEN operation. This problem caused the GETFILE for the PRTNAME to be limited to 30 characters for this case. - Corrected a GPF error that occurs when the value for the COLUMNWIDTH for a DATATLIST is set to zero. This problem is a Windows OS problem and the corrective work around for the problem is to prevent a value of zero from being used. - Corrected a problem where objects on a PANEL object might not repaint after a WINREFRESH operation was executed. ------------------------------------------------------------------------------- PLB (CE) - All appropriate PLBWIN changes also apply to PLBCE. - Made changes for national languages that are written right to left. This support is only for Windows CE version 4.2 and may or may not work. We are unable to test it and the Windows documentation does not explicitely say it is supported! Also this only applies to PLBWCENE and CLIWCENE products. ------------------------------------------------------------------------------- PLB (UNIX)- Corrected a problem where a rollback operation after a ROLLOUT would cause a SEGV error. ------------------------------------------------------------------------------- PLBCMP - Modified the GETFILE instruction to support DBHOST, DBUSER, DBPASS, DBCONN, DBEXT, and DBDIALOG keywords for a DBFILE database variable. - Modified to support XFILE variables. - Modified the DRAGITEM to allow the following objects to be used: ANIMATE CONTAINER CONTROL EDITDATETIME EDITNUMBER LABELTEXT PANEL STATUSBAR TOOLBAR - Corrected a problem that was causing a compilation error when multiple blanks followed a FUNTIONEND instruction without any comment field. - Corrected a problem where a compilation error was occurring for the WHEREIS instruction as follows: WHEREIS "2005",S$CMDLIN ;Comment was causing error! - Corrected a problem where the compiler was create invalid program data when an Array variable without an index was used for a VARVALUE or VARABSVALUE property in GETPROP/SETPROP instruction. This problem was caused with changes in version 9.0 and could cause a program GPF error to occur. - Modified the output for a source debugger SDB file to prevent a F01 error that might occur in the PLBDBUG source debugger when the Instruction Pointer was at the end of the PLC program. - Corrected a problem where the following instruction was not giving a compiler error. This instruction now gives an appropriate compilation error. Prior to this change this instruction was being ignored. MOVE REC(1,1)).A,S$CMDLIN - Corrected a problem where a FUNCTION with no input parameters would generate invalid pcodes in a PLC when the FUNCTION was located at the end of a very large program. This problem would cause the FUNCTION to generate a GPF error when it was executed. - Corrected a problem where output for the PLC was invalid when a FUNCTION only contained a single RECORD. This problem would prevent the members of the RECORD from being saved and restored when a FUNCTION was executed. For this case, the users must recompile there programs using the 9.0E compiler ------------------------------------------------------------------------------- PLBDBUG - Corrected display problems that could cause indeterminate or GPF results when a DV command for a generic OBJECT array variable was executed. - Corrected a problem where a DV command was not displayed the data for a multiple dimensioned array properly. ------------------------------------------------------------------------------- PLBDSIGN - The TEXT property data length limit was changed from 255 to 4096 for the PLBWIN runtime. The runtime change allows longer data strings to be specified for the LABELTEXT object text in the designer. This corrects a problem where the data in a LABELTEXT object was being truncated to 255 characters when a PLF form was loaded. ------------------------------------------------------------------------------- UTILITY - Corrected a problem for the SUNINDEX and SUNSORT utilities under the Linux OS where the TMPDIR OS uet keyword was not being used if the command line did not specify a {tmppath}. - Corrected a problem in the Unix SUNAAMDX, SUNINDEX and SUNSORT utilities where extension substitution did not work correctly when a screen definition was used with 4-byte default extensions. - Corrected a problem where the SUNAAMDX utility was limiting the full path and text file name length to 47 characters. With this correction the limit is increased to 255 characters. - Corrected a problem in the SUNSORT utility where the sorted output could be invalid when the required number of sort trains was greater than 16 and less than 31. ------------------------------------------------------------------------------- ODSBAC32.DLL - The file I/O module has been updated for this file. ------------------------------------------------------------------------------- SUNFHSYS.DLL - Modified to support 8.7x file formats. - Modified to support XFILE processing. - Modified to support GETFILE keyword additions. - Corrected a problem that would cause an I81 subcode 16 error when PLB_COMPRESSION was set OFF and a READ operation accessing the SUNFM file manager retrieved a record size larger than 2048. ------------------------------------------------------------------------------- SUNWODBC.DLL - Modified to support new GETFILE DBFILE connection data. ------------------------------------------------------------------------------- SUNWMSQL.DLL - Modified to support new GETFILE DBFILE connection data. ------------------------------------------------------------------------------- SUNWADO.DLL - Modified to support new GETFILE DBFILE connection data. - Corrected a problem that would cause a GPF when the ADO driver was used by the SUNFM file manager. - Corrected a problem that could cause the first row to be skipped when a SQL SELECT with a WHERE operation was executed. ------------------------------------------------------------------------------- SUNIDE.PLC - Modified the project loading logic to look in a projects working folder for it's ini file. - Added a feature in the project options to quickly open the specified ini file. - During compile, the output window could display the value of the PLBCMP_OPT keyword from the wrong ini file. - Corrected a problem where if the configured runtime in the ide options contained a UNC path, the IDE would not be able to execute programs. ------------------------------------------------------------------------------- SUNLIST.PLC - Modified options processing to allow a user to specify start and end page numbers for a PRTPLAY operation. - Modified options processing to accept both single and double quotes for various options. ------------------------------------------------------------------------------- DBGIFACE.PLC - Corrected a bug where the debuger would initialize and exit if an invalid font existed in the editor config file. - Corrected a bug where if the GUI debugger was used one time, the character debugger could not be used within the same session when launced from the IDE. - Added logic to detect when a CHAIN operation occured to re-establish the screen dimensions. - Optimized startup code for better performance. - Modified communication frame work to be more flexable and adaptable for future needs. - Corrected a GPF error that could occur when a double click occurred on a constant value. - Corrected a display variable problem with local arrays and arrays with local index variables. - Corrected a watch variable data parsing problem. - Corrected a double click on var problem where the logical contents of a dim pointer wasn't being considered. It always displayed the Physical contents. ------------------------------------------------------------------------------- EDITOR.PLC - Modified to not do syntax highlighting when the file has a .ini file extension. - Corrected a bug that could allow a user to open the same file multiple times. - Modified editor startup to only try to register the ocx if it fails to create needed controls. - Added additional comment styles to try to include more variations. - Added exception handle for a potential Format error that could occur when closing a file. - Eliminated a potential double exception that could happen during startup. The user would see this as an F02 type error. ------------------------------------------------------------------------------- WATCH.PLC - Added bounds check for invalid server type value returned from AdmGetInfo. - Corrected object error when closing or aborting all selected tasks. - Corrected F05 error during display of tasks. Date: 06-06-2005 Subject: Patch RELEASE 9.0F Runtime Files Included you will find the patch release of: ODSBAC32.DLL 9.0F 06 Jun 2005 PLBDSIGN 9.0F 06 Jun 2005 9,0,6,0 PLBCLICON 9.0F 06 Jun 2005 9,0,6,0 PLBCLIENT 9.0F 06 Jun 2005 9,0,6,0 PLBCON 9.0F 06 Jun 2005 9,0,6,0 PLBSERVE 9.0F 06 Jun 2005 9,0,6,0 PLBWIN 9.0F 06 Jun 2005 9,0,6,0 SA_DLL32.DLL 9.0F 06 Jun 2005 9,0,6,0 SUNFHDLL.DLL 9.0F 06 Jun 2005 9,0,6,0 SUNFHDLL.LIB 9.0F 06 Jun 2005 SUNFHSYS.DLL 9.0F 06 Jun 2005 9,0,6,0 SUNINDEX 9.0F 06 Jun 2005 9,0,6,0 SUNSORT 9.0F 06 Jun 2005 9,0,6,0 SUNAAMDX 9.0F 06 Jun 2005 9,0,6,0 DBGIFACE.PLC 9.0F 06 Jun 2005 PLBCMP.PLC 9.0F 06 Jun 2005 PLBDBUG.PLC 9.0F 06 Jun 2005 SUNIDE.PLC 9.0F 06 Jun 2005 TXTMATCH.PLC 9.0F 06 Jun 2005 PLBEQU.INC 9.0F 06 Jun 2005 PLBMETH.INC 9.0F 06 Jun 2005 *============================================================================== Notes for some NEW Items: - Added a new method named GetTopIndex for the LISTVIEW object. - Added STATIC property for EDITNUMBER object. - Added DOCK property for the STATTEXT object. - Added a new keyword named *RUNSERIAL={svar} for GETMODE. - Added a new method named ChooseFont for a FONT object. *============================================================================== Notes for WARNINGS: - A U40 error occurs if the 9.0F SUNFHSYS DLL is used with any prior runtime. - ***WARNING*** EDITTEXT & RICHEDITTEXT objects!!! The USING parameters *VERT and *HORZ keyword names for the GetCharIndexFromPos method of the EDITEXT and RICHEDITTEXT objects were REVERSED. The correct format for this method is as follows: {object}.GetCharIndexFromPos [GIVING {return]]: USING [*Horz=]{horz}: [*Vert=]{vert} *============================================================================== Notes for DOCUMENTATION: - The F10 error for an EXPLODE/IMPLODE has been removed from the runtime errors. - The EXPLODE instruction documentation needs to be changed as follows: a. This sentence in Note (3.) should be changed as follows: "The value must be between 0 to 255." b. The Note (11.) should be removed. - The IMPLODE instruction documentation needs to be changed as follows: a. This sentence in Note (3.) should be changed as follows: "The value must be between 0 to 255." b. The Note (4.) should be removed. - The I99 error has been modified to have two subcodes defined as follows: I99 File too large. Subcode 30 - File size is larger than 32KB for Demo runtime version. 31 - The I99 error occurs when a WRITE IFILE instruction would cause the TXT file size to be greater than 4GB and the IFILE has been opened for COMPRESSED or VARIABLE length records. The same I99 error subcode 31 can also occur for a WRITE FILELIST when an IFILE causing the same 4GB failure is detected. *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - Modified the startup processing to log an error if program virtual memory can not be allocated. This is logged when ADMIN_LOGLEVEL is set to 1 or higher. - Corrected a problem where a logon socket connection was not being accepted by a listening socket created by a COMOPEN that was executed by a program at the PLBSERVE server. - Corrected a problem where the client reconnection capability did not work due to changes made in release 9.0E. ------------------------------------------------------------------------------- PLB(UNIX)- Corrected a problem where a COMSTAT for a socket connection was PLBSERVE erroneously clearing the data available flag after a partial COMREAD operation. ------------------------------------------------------------------------------- PLBWIN - Added a new keyword named *RUNSERIAL={svar} for the GETMODE PLBSERVE instruction. This keyword retrieves the current user serial PLB (UNIX) for the runtime that is executing the program. - Modified the UNLOCK instruction to allow a FILELIST in the file variable list. - Added a new keyword for the GETMODE instruction named *DUMPCRSTACK. The *DUMPCRSTACK={svar} keyword can be used to retrieve all of the current Call/Return Stack entries as a delimited data string that is placed into the {svar} variable. Each CR stack entry is reported as two fields with a comma delimiter. The first field is the Instruction Pointer (IP) return address and the second field is the PL/B program for that IP address. The EOS flag is TRUE if the {svar} variable is too small and data is truncated. Note: 1. If an invalid CR stack entry is encountered, then the invalid IP value is reported along with one of the following program name fields: !Error0! - Invalid IP is equal to zero. !Error1! - Invalid IP is equal to the lowest possible address allocated for the PL/P program. !Error2! - Invalid IP is less than the PL/B program allocated memory space. 2. When a WINDOW object is activated as a MODAL dialog, then a CR stack entry is stored onto the CR stack. In this case, the reported IP address is equal to '-2' and the PL/B program name is reported as '!Modal!'. 3. If the current CR stack is empty, then the {svar} variable is set to NULL. - Modified the PL/B AAMDEX, INDEX, and SORT instructions to use the runtime string specified for the PLB_CURDIR or SETMODE *PLBCURDIR settings. - Modified the NORETURN instruction to detect if it has been executed more than 500 times consecutively without executing a CALL, RETURN, or CHAIN instruction. This instruction restriction is being implemented to detect situations in a PL/B program where the program may be executing an endless loop while using a NORETURN instruction. If a failing situation is detected then a U53 error is generated. - Modified the EXPLODE and IMPLODE instructions to allow the {delim} operand to contain a binary zero character as a delimiter character. This modification eliminates the F10 format error. - Modified the GETFILE instruction to support new keyword options described as follows: KEYLENGTH={nvar} This option is only allowed for an IFILE and it returns the keylength from the header of an ISI file. ISIFLAGS={nvar} This option is only allowed for an IFILE and it returns the index options flags from the header of an ISI file. The {nvar} value is a bit mask defined as follows: IFILE_UPR - 0x0001 Key is forced to be upper case. IFILE_VAR - 0x0002 The text file is indexed for variable length records. IFILE_NDUP - 0x0004 Duplicates keys are not allowed. IFILE_SPC - 0x0008 The text file allows compressed records. IFILE_NOEOR - 0x0010 The text file is indexed with NO EOR used. IFILE_WEOF - 0x0020 All records are written into the text file at the end of file. IFILE_SEOR - 0x0040 Size of the end of record: 00 = 1 byte, 40 = 2 bytes IFILE_TEOF - 0x00C0 EOR type mask defined as the follow values: IFILE_EOR_CR - 0x0000 EOR is 1 byte consisting of CR. IFILE_EOR_LF - 0x0080 EOR is 1 byte consisting of LF. IFILE_EOR_CRLF - 0x0040 EOR is 2 bytes consisting of CRLF. IFILE_EOR_LFCR - 0x00C0 EOR is 2 bytes consisting of LFCR. IFILE_LFS - 0x0100 ISI is indexed for large file support. IFILE_SEC - 0x0600 ISI sector sizes being used. Reserved. IFILE_OS_MASK - 0x1800 Platform mask that identifies a specific OS type that can be used when opening an ISI file. IFILE_OS_WIN - 0x0800 Only allow ISI to be opened by a Windows runtime. IFILE_OS_UNIX - 0x1000 Only allow ISI to be opened by a Unix runtime. INDEXINFO={svar} This option is only allowed for an IFILE and it returns the index command line string from the header of an ISI file. ISITEXTEOF={nvar} This option is only allowed for an IFILE and it returns the current text end of file value from the header of an ISI file. If the ISI file is indexed for large file support, then the returned value is a record count for the record count of the last record written into the text file. If ISI file is NOT indexed for large file support, then the returned value is the byte offset for the eof size. ISIRECORDLEN={nvar} This option is only allowed for an IFILE and it returns the current record length from the header of an ISI file. The {nvar} value is this case DOES NOT include the end of record byte count. The {nvar} value in this case only reflects the maximum number of data bytes allowed in a record in the text file associated with the ISI file. SUNFMSTATE={nvar} This option only returns data when a AFILE, FILE, or IFILE is opened as a managed file. Otherwise, the returned value is always zero. When the AFILE, FILE, or IFILE is opened as a managed file, then the returned value is the current SUNFM state flags that define the current SUNFM child thread execution options. The {nvar} value in this case defines a bit mask defined as follows: FMANCAP_COMPRESSION - 0x00000001 SUNFM is configured to use message compression. FMANCAP_ENCRYPTION - 0x00000002 SUNFM is configured to use message encryption. FMANCAP_USERLOGN - 0x00000004 SUNFM is configured to require user logon. FMANCAP_PREPI_EX - 0x00000010 SUNFM version supports IFILE prepare instructions where a command line is stored into the ISI header. FMANCAP_ADMIN - 0x00000040 SUNFM has the capability to support ADMIN operations. FMANCAP_KEEPALIVE - 0x00000080 SUNFM is configured to support client keepalive messages. FMANCAP_NEWFILEPI - 0x00000100 SUNFM does not return control to a client runtime until a FILEPI locks all the files in its file list. FMANCAP_CHILDRECOV - 0x00000200 SUNFM is configured to provide client reconnection recovery. FMANCAP_LONGRECVTIMEOUT - 0x00000400 SUNFM is configured to enable long receive timeouts for the client program opening managed files. FMANCAP_DBGETINFO - 0x00000800 SUNFM has the capability to allow GETFILE DBFILE data retrieval. FMANCAP_90F_ENHANCED - 0x00001000 SUNFM has the capability to support enhanced GETFILE data retrieval. - Modified the XML support in the runtime to properly decode/encode UTF-8 character octets as per the RFC 3629 encoding descriptions. This modification corrects problems where the XML data output of SaveXmlFile for a LISTVIEW or XFILE support was not being read by third party XML readers when characters with a character value greater than 0x7F were being output. Characters with the 0x80 bit turned on are now properly generating UTF-8 octets as required by the XML 1.0 specification. - Modified the READ/WRITE XFILE instructions to process PL/B INTEGER variables as an ASCII decimal value. For a WRITE XFILE, the INTEGER value is output for a XML element as an unsigned decimal value composed as an ASCII string of decimal digits. For a READ XFILE, an INTEGER variable value is determined from the first 20 characters of an ASCII string that includes leading blanks, a sign character, and decimal digits. A F01 error occurs if an invalid character or numeric format is encountered while processing the input decimal string. Note: This change is being made for the use of PL/B INTEGER variables to prevent indeterminate data from being input and output for an XML file. Users MUST recognize that the use of an INTEGER for an XFILE is DIFFERENT as compared to file IO for other file variables. - Corrected a XML tag name problem where the runtime did not allow all of the character ranges defined by the XML 1.0 specification. This change should correct a problem where International characters were not being allowed in the tag names. This change now allows the XML tag names to include the following characters with the format as defined in the XFILE design document: '-' 0x2D '.' 0x2E '0' to '9' (0x30 to 0x39) ':' 0x3A 'A' to 'Z' (0x41 to 0x5A) '_' 0x5F 'a' to 'z' (0x61 to 0x7A) extended characters (0xC0 to 0xD6) extended characters (0xD8 to 0xF6) extended characters (0xF8 to 0xFF) - Corrected a problem where an IMPLODE using a RECORD in the source list was causing an extract character to be included at the end of the destination string. - Corrected a problem where an IO error did not occur when a DELETE or UPDATE of a FILELIST with a single file variable OPENed with the READ mode was executed. - Corrected a problem where the command line size for the AAMDEX, INDEX, or SORT instruction was limited to a size of 512 bytes. - Corrected a problem where the '-d' debugger option did not work if it followed the '-i' option on the command line. - Corrected a GPF error that would occur when a FUNCTION was called and the FUNCTION contained a local variable with a VARLIST nested into a second VARLIST. - Corrected a GPF error that would occur when more than 5 DISPLAY *SAVESW controls were executed before an *RESTSW/*RESTSCR/*ERASESW control was executed. - Corrected a XFILE problem where an UPDATE operation might not process the data for a field properly. This problem could prevent the XFILE UPDATE data from being output to an XML data file. - Corrected a XFILE problem where a random access WRITE operation after a random access DELETE operation for the same record did not work. - Corrected a problem where an I80 error was occurring when opening an 8.7 AAM file that was created without any data records. - Corrected a problem where an EXPLODE instruction did not parse the {source} operand properly when the {source} data contained a binary zero. - Corrected a problem where the FILEPI instruction for a managed file would initiate a timeout recovery action if the filepi took more than 60 seconds to lock the file. This problem would also cause an I81 subcode 14 error if it took the filepi longer to lock the file than 2 times the FM_KEEPALIVE time being used by the SUNFM file manager. With this change the PLBWIN client accessing a SUNFM file manager to execute a FILEPI instruction now waits a maximum time of 3600 seconds before initiating an error. - Corrected a problem where an indeterminate I81 subcode 5 error might occur when opening a managed file to access a SUNFM file manager using a MFD file format. This problem was caused in version 9.0E when support was added for 8.7 file formats. - Corrected a problem where the CR stack data stored into a GPF error file was not being processed/reported properly. - Corrected a problem where a READ XFILE operation for an arrayed field was skipping the data for the second field. ------------------------------------------------------------------------------- PLBWIN - Corrected a GPF error that could occur when a U09 error occurred PLBSERVE when opening an XFILE. ------------------------------------------------------------------------------- PLBWIN - Added a new method named GetTopIndex for the LISTVIEW object. ............................................................... . GetTopIndex Method . The GetTopIndex method retrieves the topmost visible item number for a LISTVIEW object when in a list or report view. The method uses the following format: [label] {object}.GetTopIndex [GIVING {return}] Where: {label} is an optional Program Execution Label. {object} is a required LISTVIEW object to be accessed. {return} is an optional Numeric Variable that indicates the zero based item value or a failure value of the method. Flags Affected: OVER, ZERO Note the following: 1. The {return} value is set to a -1 value when there are no items for a LISTVIEW object. 2. The {return} value is always set to a zero value if the LISTVIEW is in the icon or small icon view. 3. The {return} value is set to the zero based item value of the top item that is visible for the LISTVIEW object. - Added a new method named ChooseFont for the FONT object. ............................................................... . ChooseFont Method . The ChooseFont method activates a Windows Font Dialog that allows a user to select a font to be used in a program. The method uses the following format: [label] {object}.ChooseFont [GIVING {return}][: [*Flags=]{flags}][: [*HDC=]{hdc}][: [*SIZEMIN=]{min}][: [*SIZEMAX=]{max}][: [*COLOR=]{color}] Where: {label} is an optional Program Execution Label. {object} is a required FONT object to be accessed. {return} is an optional Numeric Variable that receives zero if the font was selected without error. A non-zero value is returned when an error occurs for the font selection. {flags} is an optional Numeric Variable or decimal number that specifies a bit map value for state flags that can be applied to control some aspects of the Font Dialog. {hdc} is an optional Numeric Variable or decimal number that specifies a Windows handle for a printer device context as returned using the GETFILE HDC keyword instruction. {sizemin} is an optional Numeric Variable or decimal number that specifies the minimum font size to be presented in the font dialog. {sizemax} is an optional Numeric Variable or decimal number that specifies the maximum font size to be presented in the font dialog. {color} is an optional COLOR object that has been previously created. Flags Affected: OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) condition flag is set TRUE. Otherwise it is set FALSE. 2. If the {return} variable is too small to contain the result of the method, the OVER condition flag is set TRUE. 3. When the {return} value is returned as a non-zero value to indicate an error, then the following values can be expected: 1 - The font dialog was terminated with the CANCEL button. 2 - The {sizemin} value is larger than the {sizemax} value. 3 - The {hdc} value is NOT a printer device context handle. 4 - Unable to create a new font from the selected font. 5 - Unable to create/init LOGFONT using the {object} font. 4. The {flags} value is a bit map that can be used to control some execution aspects for the font dialog. The bit map values that can be used are defined as follows: CF_SCREENFONTS 0x00000001 Causes the dialog box to list only the screen fonts supported by the system. CF_PRINTERFONTS 0x00000002 Causes the dialog box to list only the fonts supported by the printer associated with the device context identified by the hDC member. CF_INITTOLOGFONTSTRUCT 0x00000040 Specifies that ChooseFont should use the {object} current font settings to initialize the dialog box controls. CF_EFFECTS 0x00000100 Causes the dialog box to display the controls that allow the user to specify strikeout, underline, and text color options. The {color} object is used to return the color setting when the font dialog has been completed. CF_SCRIPTSONLY 0x00000400 Specifies that ChooseFont should allow selection of fonts for all non-OEM and Symbol character sets, as well as the ANSI character set. CF_FIXEDPITCHONLY 0x00004000 Specifies that ChooseFont should select only fixed-pitch fonts. CF_SCALABLEONLY 0x00020000 Specifies that ChooseFont should allow only the selection of scalable fonts. (Scalable fonts include vector fonts, scalable printer fonts, TrueType fonts, and fonts scaled by other technologies.) CF_TTONLY 0x00040000 Specifies that ChooseFont should only enumerate and allow the selection of TrueType fonts. CF_NOFACESEL 0x00080000 When using CF_INITTOLOGFONTSTRUCT to initialize the dialog box controls, use this flag to selectively prevent the dialog box from displaying an initial selection for the font name combo box. This is useful when there is no single font name that applies to the text selection. CF_NOSIZESEL 0x00200000 When using CF_INITTOLOGFONTSTRUCT to initialize the dialog box controls, use this flag to selectively prevent the dialog box from displaying an initial selection for the font size combo box. This is useful when there is no single font size that applies to the text selection. 5. The {hdc} parameter can only specify a valid handle for a printer device context. When the {hdc} device context is used, then the available fonts available for selection reflect those fonts for the printer device context. 6. The {sizemin} and {sizemax} values allow the font size range to be restricted for the font dialog. 7. The {color} object is used to return the user selected color when the CF_EFFECTS {flags} state is used. The {color} must be created prior to its use in the ChooseFont method. - Added new methods named GetItemCount, GetItemType, GetItemState, and GetItemName for the FLOATMENU, MENU, and SUBMENU objects. ............................................................... . GetItemCount Method . The GetItemCount method retrieves the total number of items that are currently defined for a FLOATMENU, MENU, or SUBMENU object. The method uses the following format: [label] {object}.GetItemCount GIVING {return} Where: {label} is an optional Program Execution Label. {object} is a required FLOATMENU, MENU, or SUBMENU object to be accessed. {return} is a Numeric Variable that receives the current item count for the {object}. Flags Affected: OVER, ZERO Note the following: 1. The {return} value identifies the number of menu items that currently defined for the {object}. This number includes separator items. 2. The ZERO flag is set if the value in the {return} variable is zero. 3. The OVER flag is set if the size of the {return} variable is too small for the value being stored. ............................................................... . GetItemType Method . The GetItemType method retrieves the current OS menu info type for a specified menu item. The method uses the following format: [label] {object}.GetItemType GIVING {return} USING [*KEY=]{key} Where: {label} is an optional Program Execution Label. {object} is a required FLOATMENU, MENU. or SUBMENU object to be accessed. {return} is a Numeric Variable that receives the OS menu item type for the specified MENU item. {key} is a Character String Variable that specifies the run-time name (RUNNAME property) or a Numeric Variable that specifies the zero based position of the menu item that is used to retrieve the data. Flags Affected: OVER, ZERO Note the following: 1. The {return} value is the OS type information for the {key} menu item that was specified. The type value can be interpreted as follows: MFT_END - 0xFFFFFFFF The menu item specified by {key} was not found. MFT_STRING - 0x00000000 The MFT_STRING type displays the menu item using a text string. This type is mutually exclusive from the MFT_SEPARATOR type. MFT_MENUBARBREAK - 0x00000020 The MFT_MENUBARBREAK type places the menu item on a new line (for a menu bar) or in a new column (for a drop-down menu or submenu). For a drop-down menu or submenu a vertical line separates the new column from the old. MFT_MENUBREAK - 0x00000040 The MFT_MENUBREAK type is the same as for the MFT_MENUBARBREAK type except there is no vertical line separation. MFT_SEPARATOR - 0x00000800 The MFT_SEPARATOR type specifies that the menu item is a separator. This type is mutually exclusive from the MFT_STRING type. MFT_RIGHTORDER - 0x00002000 The MFT_RIGHTORDER type indicates that the menus cascade right-to-left. The default is left-to-right. 2. The ZERO flag is set if the value in the {return} variable is zero. 3. The OVER flag is set if the size of the {return} variable is too small for the value being stored. ............................................................... . GetItemState Method . The GetItemState method retrieves the current OS menu info state for a specified menu item. The method uses the following format: [label] {object}.GetItemState GIVING {return} USING [*KEY=]{key} Where: {label} is an optional Program Execution Label. {object} is a required FLOATMENU, MENU. or SUBMENU object to be accessed. {return} is a Numeric Variable that receives the OS menu item state for the specified MENU item. {key} is a Character String Variable that specifies the run-time name (RUNNAME property) or a Numeric Variable that specifies the zero based position of the menu item that is used to retrieve the data. Flags Affected: OVER, ZERO Note the following: 1. The {return} value is the OS state information for the {key} menu item that was specified. The state value can be interpreted as follows: MFS_END - 0xFFFFFFFF The menu item specified by {key} was not found. MFS_CHECKED - 0x00000008 The MFT_CHECKED state identifies that item is checked. MFS_DEFAULT - 0x00001000 The MFT_DEFAULT state specifies that the menu item is the default. MFS_DISABLED - 0x00000003 MFS_GRAYED - 0x00000003 The MFT_DISABLED state specifies that the menu item is disabled. MFS_ENABLED - 0x00000000 The MFT_ENABLED state specifies that the menu item is enabled and can be selected. MFS_HILITE - 0x00000080 The MFT_HILITE state specifies that the menu item is highlighted. 2. The ZERO flag is set if the value in the {return} variable is zero. 3. The OVER flag is set if the size of the {return} variable is too small for the value being stored. ............................................................... . GetItemName Method . The GetItemName method retrieves the current OS menu info name for a specified menu item. The method uses the following format: [label] {object}.GetItemName GIVING {return} USING [*KEY=]{key} Where: {label} is an optional Program Execution Label. {object} is a required FLOATMENU, MENU. or SUBMENU object to be accessed. {return} is a Character string variable that receives the OS menu item name for the specified menu item. {key} is a Character String Variable that specifies the run-time name (RUNNAME property) or a Numeric Variable that specifies the zero based position of the menu item that is used to retrieve the data. Flags Affected: EOS, OVER, ZERO Note the following: 1. The {return} Character string variable receives the OS menu name that is current set. If there is no text name set for a menu item, then the {return} Character string variable is set to NULL. 2. The OVER and ZERO flags are always cleared. 3. The EOS flag is set if the returned text string is truncated when the Character string variable is too small. - The MENUITEM object has been modified to support the following methods. The description for these methods are the same as for the MENU object. GetItem GetItemCount GetItemType GetItemState GetItemName - Modified the EDITNUMBER object to support the STATIC property. - Modified the STATTEXT object to support the DOCK property. - Modified the FormToPict method for a WINDOW object to accept an optional '[HWND=]{dnumnvar}' parameter. When the HWND parameter is specified, then the {dnumnvar} value must be a valid Windows Window Handle. This HWND parameter value is used to retrieve the contents of the Window. Note: 1. If the HWND parameter is not specified, then the HWND for the current Window object referenced for the method is used. 2. If the HWND parameter value of zero is specified, then the FormToPict method retrieves the contents of the Desktop Window. 3. The FormToPict method was modified to not transfer any data into the PICT return object when the Window is not activated or if the Window has been minimized. If no data is retrieved, then the PICT object is not created after the method is completed. The user can use a 'MOVE PICT to PICT1' operation to determine if the picture is created after the FormToPict is completed. - Modified the runtime to suspend keepalive processing for managed files opened at a file manager when any of the following PL/B instructions cause an OS dialog or messagebox to be used. When an OS dialog or messagebox is controlling execution, the runtime can not send keepalives to a SUNFM file manager. By suspending keepalive processing, this corrects a problem where the connection for the managed files would be disconnected if the OS dialog/messagebox remained active for a period of time longer than the FM_KEEPALIVE time specified in the SUNFM.CFG configuration. This change applies to the following: ALERT - MessageBox GETFNAME - OPEN/PREP Dialog PRTOPEN - PRINT Dialog PRTPLAY - PRINT Dialog PRTCLOSE - PRINT Dialog or PRINT Preview SPLOPEN - PRINT Dialog OPEN - OPEN Dialog PREPARE - PREP Dialog IO Error Dialog (Untrapped) - MessageBox - Corrected a problem where the EXECUTE instruction was closing a PFILE opened by a PRTOPEN instruction. This was causing an invalid S05 spool error to occur for a PRTPAGE instruction after an EXECUTE instruction was executed. This problem was caused by changes made in the 9.0E patch release. - Corrected a problem where the LISTINS, LISTDEL, LISTGET, and LISTCNT instructions were causing an O162 error when the destination collection was a PLFORM label reference. This problem was caused by changes made in the 9.0E patch release. - Corrected a problem where setting the TITLE property for a GROUPBOX object did not clear the object title when a NULL DIM variable was used. - Corrected a problem where the TEXT and SELTEXT properties did not work properly for the RICHEDITTEXT object in the GETPROP and SETPROP instructions. - Corrected problems where a SPLITTER might be highlighted outside the visible area of a WINDOW when clicked/dragged. - When a FONT using the ANGLE property is used for the STATTEXT object, then use of the Alt Keyboard Sequence character '&' does not cause the control character to be underlined. In fact the '&' character was being output into the STATTEXT as a data character. The problem is that the OS functions used to provide the angled text output does not process the '&' character. Therefore, a change has been made that causes the PLBWIN runtime to remove any single '&' characters in the output string for the STATTEXT object when a FONT with the ANGLE property is used. The Alt Keyboard Sequence character specified by the first '&' character is applied as expected. - Corrected a problem where an O110 error would occur when a Modal Dialog WINDOW object was deactivated and the Modal Dialog Window was not the current active window for the Windows OS. - Corrected a problem where 'SETPROP MENUITEM,*SEPARATOR=0' was causing the current MENUITEM string to be set to blank when the current menu item was NOT a separator line. - Corrected a problem where an EDITDATETIME object was not painting a border/background when it existed in a COLLECTION that had the VISIBLE property set to 1. - Corrected a GPF error that would occur in an ACTIVATE of a SUBMENU when the {item-no} value in the CREATE SUBMENU was zero. The SUBMENU is not activated if the {item-no} is zero or greater than the number of items in the parent {menu} object. - ***WARNING*** EDITTEXT & RICHEDITTEXT objects!!! The USING parameters *VERT and *HORZ keyword names for the GetCharIndexFromPos method of the EDITEXT and RICHEDITTEXT objects were REVERSED. The correct format for this method is as follows: {object}.GetCharIndexFromPos [GIVING {return]]: USING [*Horz=]{horz}: [*Vert=]{vert} - Corrected a problem where the AddIcon & ReplaceIcon methods for the TOOLBAR object was not releasing an ICON resource. This problem was causing the maximum number of ICON resources to be limited depending on the amount of memory available. The failure symptom was that the TOOLBAR Icons would not appear properly after the Icon resource limit was exceeded. ------------------------------------------------------------------------------- PLB(UNIX)- Modified the FINDFILE instruction to support wild card matching. - Corrected a problem where a FORK instruction would delete a a file when a PREP instruction was executed immediately before the FORK without any other IO instructions being executed for the file variable being prepared. - Corrected a problem where an Isam Open Operation using a MFD file would fail when using a Forward Byte Order Unix platform. - Corrected a memory allocation implementation problem that could cause indeterminate program execution after a INDEX or SORT instruction was executed. - Corrected a problem where an IO error would occur when a PREP of a file variable was executed while the data file was currently locked via a FILEPI in another application. - Corrected a problem that would cause an I80 error when a pre-existing file was opened using a PREP instruction. - Corrected a problem where the right array action for the *DVEDIT control did not work when executed on a forward byte order runtime. ------------------------------------------------------------------------------- PLBCMP - Modified the UNLOCK instruction syntax to allow a FILELIST in the file variable list. - Modified the EDITNUMBER object to support the STATIC property. - Modified the STATTEXT object to support the DOCK property. - Modified the following GETFILE keywords to restrict the file variables used for each keyword. AAMNAME - AFILE BUFSIZE - AFILE, IFILE, & FILE EORTYPE - AFILE, IFILE, & FILE ISINAME - IFILE TXTNAME - AFILE, IFILE, XFILE, & FILE IHANDLE - IFILE AHANDLE - AFILE HANDLE - AFILE, IFILE, PFILE, XFILE, & FILE MODE - AFILE, IFILE, & FILE TREELEVEL - IFILE ISMANAGED - AFILE, IFILE, PFILE, & FILE RECORDCOUNT - IFILE DELETECOUNT - IFILE - Corrected a problem where a compilation error was occurring when the SELECTEDRTF property for a RICHEDITTEXT object was set to a {svarslit} variable as documented. - Corrected a problem where a FILELIST variable was being allowed in a DISPLAY instruction. With this change, the compiler now gives a compilation error in this case. ------------------------------------------------------------------------------- PLBDBUG - Added a new command named 'DL {var}'. The DL command executes the same as the DV command except when the {var} variable is a DIM type. When {var} is a DIM variable, then only the logical string for the DIM is displayed. ------------------------------------------------------------------------------- PLBDSIGN - Modified the form load for the designer to set the Hide/Show State of all PANEL objects based on the VISIBLE property of the object. This change causes the PANEL objects to be displayed in the designer in the same manner as when a PLFORM is loaded by a runtime under program execution. This change eliminates possible problems that could occur when loading multiple PANEL objects using the PLBDSIGN designer. ------------------------------------------------------------------------------- SUNINDEX - Improved the detection and reporting of errors caused when a record SUNAAMDX that is too long is encountered in the SUNAAMDX, SUNINDEX, or SUNSORT SUNSORT utilities. - Added the maximum record size supported to the usage help screen for the SUNAAMDX, SUNINDEX, and SUNSORT utilities. ------------------------------------------------------------------------------- SUNINDEX - Corrected a Bus alignment error for the SUNINDEX utility when duplicate records were encountered and the utility was being executed on a HP platform. ------------------------------------------------------------------------------- PLBEQU.INC - Added EDITNUMBER for STATIC property. - Added STATTEXT for DOCK property. ------------------------------------------------------------------------------- PLBMETH.INC- Updated method descriptions for FONT, LISTVIEW, FLOATMENU, MENU, MENUITEM, and SUBMENU. ------------------------------------------------------------------------------- ODSBAC32.DLL- Modified the trace log output to give the following specific errors when these errors occur with ODBC Tracing is turned on: "Schema not found" "Memory allocation failed" - Corrected a problem where an 8.7x AAM file was not being processed to allow usage by a 9.0 ODBC driver. ------------------------------------------------------------------------------- SUNFYSYS.DLL- Improved the detection and reporting of errors caused when a record that is too long is encountered in the AAMDEX, INDEX, or SORT instructions. - Corrected a problem where invalid U09 (memory allocation) errors could occur after XFILE open operations. - Corrected a problem where a DELETE/UPDATE instruction did not give an IO error when using a FILELIST with the primary file opened in a READ mode. - Corrected problems where the command line buffers might overflow resulting in indeterminate operation for an AAMDEX, INDEX, or SORT instruction. - Corrected a problem where an unexpected I84 subcode 20 error might occur when very complex multi-level schema file elements were being used with 'xs:restriction' elements. - Corrected a problem where a READ XML would give an unexpected I83 subcode 11 error when it was executed immediately after a PREP XFILE instruction that specified both a RECORDSET name and schema file. Notice, that the I83 subcode 11 error is expected when the READ XML is executed in the same manner without the schema file being specified. ------------------------------------------------------------------------------- ADMIN - Corrected a potential problem that might cause the admin message processing to hang indefinitely. ------------------------------------------------------------------------------- SUNIDE - Corrected a problem with user defined tools where the LoadMod entry point may not be used. - Modified internal logic processing for user defined tools to reduce the possibility of conflicting with users options. - Corrected a bug where the $2 parameter for the user defined tools command line options didn't correctly pack the full path and filename of active program. - Corrected a problem where a C15 error could occur if the PLB_CASE keyword was set. - Corrected a problem where the menugen utility would not execute when selected from the tools menu. - Corrected a lst file processing bug where the ide may not be able to locate a lst file if PLBCMP_OUT was defined in the main plbwin.ini file that was different than the projects ini file setting. - Corrected logic flow where the IDE may not report any information regarding the .lst file it did find if the timestamp for the lst file was older than generated build script. - Corrected a problem where when doing a Refresh dependencies, and the user selects yes for the save all prompt, the files would not actually be saved. - Corrected logic that did not allow a hyphen to be used as part of a filename. - Modified logic to take advantage of recent EXPLODE enhancements to improve performance. - Corrected a problem with not handling :VOL drives properly. ------------------------------------------------------------------------------- TXTMATCH - Modified display output to show only the mismatching positions, allowing for either mismatch to be larger than the other. - Added support for the 'UP' arrow key to scroll backwards in the files. ------------------------------------------------------------------------------- Date: 09-26-2005 Subject: Patch RELEASE 9.0G Runtime Files Included you will find the patch release of: ODSBAC32.DLL 9.0G 26 Sep 2005 9,0,7,0 PLBCLICON 9.0G 26 Sep 2005 9,0,7,0 PLBCLIENT 9.0G 26 Sep 2005 9,0,7,0 PLBCON 9.0G 26 Sep 2005 9,0,7,0 PLBDSIGN 9.0G 26 Sep 2005 9,0,7,0 PLBSERVE 9.0G 26 Sep 2005 9,0,7,0 PLBWIN 9.0G 26 Sep 2005 9,0,7,0 SA_DLL32.DLL 9.0G 26 Sep 2005 9,0,7,0 SERIALIZ 9.0G 26 Sep 2005 9,0,7,0 SUNFHDLL.DLL 9.0G 26 Sep 2005 9,0,7,0 SUNFHDLL.LIB 9.0G 26 Sep 2005 SUNFHSYS.DLL 9.0G 26 Sep 2005 9,0,7,0 SUNWADO.DLL 9.0G 26 Sep 2005 9,0,7,0 SUNWODBC.DLL 9.0G 26 Sep 2005 9,0,7,0 SUNWMSQL.DLL 9.0G 26 Sep 2005 9,0,7,0 PLBCMP 9.0G 26 Sep 2005 PLBDBUG 9.0G 26 Sep 2005 WATCH 9.0G 26 Sep 2005 SUNIDE 9.0G 26 Sep 2005 EDITOR 9.0G 26 Sep 2005 DBGIFACE 9.0G 26 Sep 2005 PLBEQU.INC 9.0G 26 Sep 2005 PLBMETH.INC 9.0G 26 Sep 2005 *============================================================================== Notes for some NEW Items: - C18 error added for CHAIN. - O163 error added for VARIANT object usage. _ PLB_TERMOPTIMIZE keyword added for Unix runtimes. *============================================================================== Notes for WARNINGS: - When the Sunfhsys DLL and PLBWIN runtime versions are mixed, the user can expect one of the following errors to occur during the runtime startup. The procedure entry pointer FhParseFN could not be located in the dynamic link library SunFhsys dll. or Fatal error condition U40 encountered. *============================================================================== Notes for DOCUMENTATION: - The language reference manual needs to modified for the OPEN XFILE operation to include the syntax to open an XML file on the SUNFM file manager. This capability has been supported since the release of the XFILE support. The syntax to be included should be as follows: (2) [label] OPEN {xfile},{name|tcpip id:port}[,{option}]... Also, add the notes like the notes 8. and 9. for the OPEN (FILE). - An O163 error has been added for a VARIANT object described as follows: O163 Unable to convert VARIANT data type to PLB data type variable because the VARIANT contains a VT_NULL variant type. - The PLB_CASE keyword description should be modified to read as follows: If this keyword is set to ON, the runtime treats all labels that resolve load module references in a case sensitive manner. If the keyword is set to OFF, label references are resolved by forcing the routine label names specified by an EXTERNAL or CALLS to uppercase. The default when this keyword is not defined is OFF. The case for the load module routine names are not changed by the PLB_CASE keyword. The cases for the load module routine names are only determined by the use of the ZS compiler option when the load module was compiled. - The C15 error subcode 25 note should be changed as follows: 25: CALLS procedure not found. Possible causes of the error can be as follows: a) The routine specified by the user program does not exist for any load module that is loaded. b) The case for the routine name specified by the user program does not match the intended name of the routine name compiled into the load module. See the ZS compiler option and the runtime PLB_CASE keyword descriptions to help resolve errors cased by case sensitivity differences. - A new error C18 subcode 30 or 31 has been added for a CHAIN instruction. The C18 error occurs when the data variable translation to reverse the byte order fails. If the subcode is set to 30, then an error occurred while processing the program data variables in the UDA. IF the subcode is set to 31, then an error occurred while processing a program Global data variable. The extended error information gives a relative translation data offset to help identify a range where the error occurs. When a C18 error occurs, then a problem with the PLC data variable structures have been detected. In this case, a PLC program causing the problem along with a listing or debug file should be provided to the PLC structures to be evaluated. - The O108 error has been modified to include a 30 subcode error. Subcode: 30 - The font resource has been exhausted. A given font resource can be referenced/used a maximum of 65000 times *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - Corrected a problem where buffered operations might not be sent to a client resulting in unexplained O105, O121, or GPF errors in a PLB application. This problem was intermittent and would only occur when the following conditions existed in a PLB application being executed under the application server: 1. The instruction buffer to be sent to the client contained buffered instructions that did not require any expected return values from the client. 2. The instruction buffer was almost full where the next instruction required a client return value and it could not fit into the instruction buffer. 3. Under the conditions defined in (1.) and (2.), the instruction buffer was not being processed properly and the resulting returned value for the last instruction would not executing properly. 4. After conditions (1.), (2.), and (3.), then the PLB program might cause unexpected O105 or O121 errors. - Corrected a GPF error that could occur intermittently after a CHAIN when the PLB program being CHAINed from contained an AUTOMATION object created at the PLBSERVE server. The GPF error might occur in the program being CHAINed to. - Corrected a GPF error that would occur when a memory allocation failed at the PLBSERVE server when the PLBCLIENT was trying to retrieve a PLB resource from the PLBSERVE server. - Corrected a problem when executing an EVENTREG for an AUTOMATION object that would cause a GPF error to occur at the PLBCLIENT. - Corrected memory leaks as follows: 1. A small memory leak occurred when a FORMLOAD for a PLFORM was executed for a PLF that had event code used. 2. A small memory leak occurred for the load module names that were sent to the ADMIN services. This memory leak did not occur if the application server did not have a log file and did not have ADMIN data collecting activated. 3. A memory leak occurred when a file was transferred from the client to the server. This could be the result of internal runtime operations or when the COPYFILE instruction was used. The memory leaks in these cases only showed any significant memory usage after a program was executed continually a large number of times (i.e. 10000 or more ). ------------------------------------------------------------------------------- PLBCLIENT- Modified the PLBCS_SINGLEUSE keyword to accept a decimal number that identifies the maximum number of PLBCLIENT processes that can be executed at the same time on a client workstation. Format: PLBCS_SINGLEUSE=on - Only allow a single instance of the PLBCLIENT. PLBCS_SINGLEUSE=nnn - Allow 'nnn' instances of the PLBCLIENT to be executed at the same time. When the maximum number of PLBCLIENT instances are in use, then the next activation of the PLBCLIENT causes the last visible PLBCLIENT process found to become the Windows OS active window. - Corrected memory leaks as follows: 1. A small memory leak occurred when a FormLoad for the cache was processed. 2. A memory leak occurred for data messages received from the server that was transferring a file or PLF form resource from the server to the client. The memory leaks in these cases only showed any significant memory usage after a program was executed continually a large number of times (i.e. 10000 or more ). - Corrected a GPF problem that would occur because a font resource was not being cleaned up when a WINDOW object was destroyed more than 65535 times during the execution of a load instance of a PLB program and its associated load modules. ------------------------------------------------------------------------------- PLBSERVE - Corrected S10 and S11 errors using SPLOPEN with 'COMn:'. PLBCLIENT ------------------------------------------------------------------------------- PLBWIN - Modified the logon processing for opening managed files to access a PLBSERVE file manager server to allow default extensions to be passed to the PLB(UNIX) file manager server. This change allows a $MACRO name to be resolved at the file manager server by defining the PLBENV_macroname keywords in the SUNFM.CFG configuration file. This same change allows the PLBVOL_env keywords to be declared in the SUNFM.CFG configuration file and used when the 'name/ext:env' file name format is used and the PLBVOL_env keyword does not exist on the client side. - Modified the FindFile instruction to allow PLBENV_ and PLBVOL_ name formats to be resolved at the SUNFM file manager. - Modified the SETMODE *AAMEXT, *TXTEXT, *ISIEXT, AND *SPLEXT options to pass extension data to a file manager server. - Corrected a problem where the LOADADR and STOREADR instructions would cause a GPF error when the {index} was a numeric expression. - Corrected a problem where the runtime could hang or cause a GPF when performing a shutdown action after an I83 error had occurred in a CLOSE XFILE operation. - Corrected a problem where a READ XFILE operation could cause an unexpected I83 subcode 1 error. - Corrected a problem where the AAMDEX, INDEX, and SORT instructions would give an error when the PLBENV_ and PLBVOL_ file name formats were being used and the PLB_CURDIR keyword was used. This problem was caused by a change made in the 9.0F patch release. - Corrected a problem where a leading '.\filename' and '..\filename' format was not being detected when the PLB_CURDIR keyword was being used. With this change, the '.\' and '..\' path name formats are property substituted when the PLB_CURDIR keyword is used. - Corrected a problem where an erroneous I83 subcode 1 error could occur when there were no records in a record set for a READ XFILE operation. - Corrected a problem that prevented character values less than 0x20 to be transferred to an XML file properly. ------------------------------------------------------------------------------- PLBWIN - Added a new definition named CF_FORCESCREENFONTOUT for the Flags parameter of the ChooseFont method in the FONT object. CF_FORCESCREENFONTOUT 0x80000000 When this bit definition is set in the *FLAGS parameter for the ChooseFont method, then the output FONT object is always forced to be created as a screen font. - A new error O163 error has been added to the runtime that identifies when a VARIANT conversion error has occurred because the variant type is a VT_NULL. This O163 error is reported when an error occurs while converting a VT_NULL variant type to a PLB DIM/FORM/INTEGER variable type. Prior to this change, this kind of error was being reported as an O132 error and was not easily distinguished from other conversion issues that could cause an O132 error. - Modified the GETITEM instruction for a COLOR object to support an {item} value of four. When the {item} value is set to four, then the RGB value is retrieved from the COLOR object. Also, if the COLOR object is set to a System Color, then the RGB value for the System Color is returned. Note: When the {item} value of zero is used in a GETITEM for a COLOR object, then the returned value may be either the 24-bit RGB value or a 32-bit index value of a System Color being used. - Modified the SETITEM for the DATALIST and COMBOBOX objects to preserve the user item data value set via the SetItemData method. Prior to this change the user item data value was lost when the SETITEM for these objects was used to change the data string of a specified item. - Modified the SETPROP for the AUTOREDRAW property to enable property when a WINDOW object is activated. The corrects a problem where a WINDOW object was becoming visible when the AUTOREDRAW property was set to a TRUE state. - Corrected a problem where the ChooseFont method for the FONT object was not creating a valid printer font when a printer HDC was specified. - Corrected a problem where a control size was growing when both GRIDALIGN and ANCHOR properties were used and the parent window was resized. - Corrected a problem where the PLBWIN runtime would hang in an indefinite loop waiting for a file lock request in a READ (ISI/AAM) or a WEOF instruction for a file variable that was opened over a LAN and the LAN Network connection was lost. The only way to terminate the runtime in this hung state was to use the OS Task Manager to kill the process. The change for this problem now causes an appropriate IO error (I08) to occur when the LAN connection is lost and can be detected. - Corrected problems in the GETITEM and SETITEM instructions for a COLOR object where a System Color was not being processed properly. This was causing invalid RGB values to be retrieved and set when a COLOR object was set to a System Color. - Corrected a problem where the border was not being painted properly for a PANEL object that was activated via a COLLECTION. - Corrected a problem where some objects on a PANEL object were not becoming visible when the PANEL object was activated via a COLLECTION. - Corrected a problem where the Title for a COMBOBOX object was not being drawn properly on a PANEL on a TABCONTROL on a WINDOW object. In addition, the COMBOBOX colors for the Title of a COMBOBOX object were invalid and are now set to the WINDOW object colors with this change. - Corrected a problem where the output data to a DATALIST for an internal SORT was invalid when a $MACRO name substitution was a UNC path. - Corrected a problem where a TOOLBAR object did not allow a left double click event to be generated. - Corrected a GPF problem that would occur because a font resource was not being cleaned up when a WINDOW object was destroyed more than 65535 times during the execution of a load instance of a PLB program and its associated load modules. ------------------------------------------------------------------------------- PLB(UNIX)- Added a new keyword named 'PLB_TERMOPTIMIZE={on|off}'. When this keyword is not specified, then the default state is that the PLB_TERMOPTIMZE state is set to ON. When this keyword is set to OFF, then the screen output optimization for the DISPLAY/KEYIN controls and the SCRNREST instruction is turned off. A new keyword named *TERMOPTIMIZE={dnumnvar}' has also been added to the GETMODE and SETMODE instructions. This allows the screen output optimization to be controlled under program control. This keyword can be used to correct cases where the screen definition control commands are affecting multiple attributes for a terminal. In these cases, the screen output optimization may need to be turned off to force all screen data to be output to a terminal. - Corrected a problem for Unix runtimes where the display cursor position was invalid after a SCRNREST operation. - Corrected an error in LOADADR for an ALPHA Unix system that was causing memory alignment errors. - Corrected a problem where a WINAPI retrieved INTEGER values incorrectly for forward byte ordered Unix runtimes. ------------------------------------------------------------------------------- PLBCMP - Corrected a problem where a DBSEND instruction after a WRITE XFILE instruction was giving an unexpected compilation error. - Corrected a problem where the compiler was not allowing a XFILE variable to be used in the following instructions: CLEARADR, LOADADR, MOVEADDR, MOVEGADDR, MOVEPTR, and TYPE - Corrected a problem where the compiler would hang when processing a RECORD variable constructed as follows: RateCenter Record . R Record RateCenter Form 2 RecordEnd . T Record RateCenter Dim 2 RecordEnd . RecordEnd - Corrected problems where the compiler did not report errors when RECORD label references were duplicated. - Corrected a problem where the compiler was giving a complication error on the comment for the following instruction: RETURN USING VAR //Comment ------------------------------------------------------------------------------- PLBDBUG - Corrected a GPF error that would occur when a DA, DB, DL, or DV command of an EQU label reference was executed. ------------------------------------------------------------------------------- PLBDSIGN - Corrected a problem where a control size was growing when both GRIDALIGN and ANCHOR properties were used and the parent window was resized. - Corrected a problem where the exported code for an EDITDATETIME object was generated with negative values for the color properties. - Modified to allow a vertical scrollbar for the designer collection editors. This modification corrects a problem when more TOOLBUTTON controls were defined than were visible in the control data window. ------------------------------------------------------------------------------- PLBEQU.INC - Updated object type values. ------------------------------------------------------------------------------- PLBMETH.INC- Added CF_FORCESCREENFONTOUT definition. See PLBWIN section for more details. ------------------------------------------------------------------------------- SA_DLL32.DLL- Corrected a problem that could cause an internal buffer to be overflowed when processing a file open operation if the file name was larger than 100 characters. ------------------------------------------------------------------------------- SUNFHSYS.DLL- Modified to allow the runtime default extension information to be passed to a SUNFM file manager server from a client runtime. - Modified the DLL version required because of various changes implemented to support runtime changes. - Corrected a problem where a transaction write operation could output garbage data when two writes were performed back to back with less than 256 bytes of data. Example: FILE FILE $1 FORM "1" $2 FORM "2" D1 DIM 1 X1 INIT "1" X2 INIT "2" ... OPEN FILE,"XXX.TXT" ;Pre-existing file ... TRANSACTION START USING FILE READ FILE,$1;D1; WRITE FILE,$1;X1; READ FILE,$2;D1; WRITE FILE,$2;X2; TRANSACTION COMMIT ------------------------------------------------------------------------------- SUNFHDLL.DLL- Corrected a problem when opening an AAM file with a 9.x format that was causing inconsistent read results for the SUNWODBC driver. This problem was caused by a corrective change that was made in the 9.0F patch release. ------------------------------------------------------------------------------- SUNWODBC.DLL- Modified the SUNFHDLL DLL to correct a problem that caused inconsistent results for a WHERE clause that used AAM file read operations. ------------------------------------------------------------------------------- WATCH - Added execution time column to clients tab. ------------------------------------------------------------------------------- SUNIDE - Modified EXECUTE logic to always check for out of date sources to give option to compile. - Corrected a problem with refresh dependances if the last program in a project had no dependances and one was added, it would not be detected. - Corrected a bug where the IDE may loose track of dependances for a program after execute. This was caused by changes in the 9.0F release. - Corrected a bug where not all programs in a large project would show in the source map. - Corrected a bug where the IDE would record a particular include the number of times the file was included. Now if a particular file is included multiple times by a program, it is only listed once. Listing the file only once saves memory and improves the visual display. - Added a sanity check to notify the user when the project file is full. - Modified Project source map to open selected file when it has focus and the enter key is pressed. - Modified Open files tab control to select the program in the source map the file belongs to if the file is only included in one program. If the file being edited is included in more than one program, the selected program is not adjusted. - Corrected logic for starting external editors where it should be passing the short filename on the command line in case the long filename contains spaces. - Corrected a bug were a file with a long path could not be opened. - Corrected a problem where if a file was opened using the File:Open File menu, it would not be added to the recent files list correctly. - Corrected a bug where Goto Label may not work if target source file is in a deeply nested in folder. - Added a command line options -CFG={path} to allow a user to specify the location of configuration files. This can allow different short cuts to use different configurations as needed. - Added sanity check to report bad installation if debugger module is not found. - Added sanity check to prevent IDE lockup and U02 error if a program includes itself or if included are nested deeper than supported. - Added last label display to status bar so user can quickly identify where they are in a program. - Added last label display to status bar so user can quickly identify where they are in a program. - Restructured status bar to merge modified and read-only indicators to the same panel. - Fixed up date mask to always use 2 digit month/days. - Added Forcing character support to the date mask. - Added control tags to date mask to control output position. for Row and for column. - Corrected a potential O105 error. - Added a Truncate Long Line feature to the print dialog. - Modified TAB indent to recognize OVERTYPE mode to insert a destructive indent. - Added logic to prevent attempts to run under PLBSERVE. - Corrected a logic problem where the gui debugger may not correctly calculate the logical length of a string. - Corrected a problem where if a '@' appears as part of code, it would not display properly. - Corrected a problem where code that contained a triple quote as for a MATCH verb would cause the following line to be incorrectly handled. - Corrected a problem where the gui debugger could incorrectly identify shutting down as an error. - Added F7 as a hot key for step over to reflect the key mapping of the character debugger. Note: F7 and F10 perform the same function in both the GUI and character debuggers. - Corrected a bug where the memory window (DB) could become unusable. - Corrected a bug that could cause an invalid command to be executed during initialization. - Corrected a display problem with the display bytes dialog that limited or prevented users from looking at the raw memory of a variable. - Corrected a problem where if a single quote appeared in a comment, the Gui interface could lock up. - Corrected a code window refresh problem where the code window may not reflect the current execution point after a call/return to/from a LoadMod.  Date: 01-09-2006 Subject: Patch RELEASE 9.0H Runtime Files Included you will find the patch release of: EMBEDINI.EXE 9.0H 09 Jan 2006 9,0,8,0 ODSBAC32.DLL 9.0H 09 Jan 2006 2.10.0000 PLBCLICON.EXE 9.0H 09 Jan 2006 9,0,8,0 PLBCLIENT.EXE 9.0H 09 Jan 2006 9,0,8,0 PLBCON.EXE 9.0H 09 Jan 2006 9,0,8,0 PLBDSIGN.EXE 9.0H 09 Jan 2006 9,0,8,0 PLBSERVE.EXE 9.0H 09 Jan 2006 9,0,8,0 PLBWIN.EXE 9.0H 09 Jan 2006 9,0,8,0 SA_DLL32.DLL 9.0H 09 Jan 2006 9,0,8,0 SUNFHDLL.DLL 9.0H 09 Jan 2006 9,0,8,0 SUNFHDLL.LIB 9.0H 09 Jan 2006 SUNFHSYS.DLL 9.0H 09 Jan 2006 9,0,8,0 PLBCMP.PLC 9.0H 09 Jan 2006 PLBDBUG.PLC 9.0H 09 Jan 2006 PLBEQU.INC 9.0H 09 Jan 2006 *============================================================================== Notes for some NEW Items: - Added CLIPCTRL property for the PANEL object. - Added a new keyword named 'PLB_DYNAMICLOADMOD={on|off}'. - EMBEDINI utility encrypts INI data. *============================================================================== Notes for WARNINGS: - When the Sunfhsys DLL and PLBWIN runtime versions are mixed, the user can expect the following error: Fatal error condition U40 encountered. *============================================================================== Notes for DOCUMENTATION: - Added subcode values for an I11 error as follows: Subcode 96 - The OPEN operation for an IFILE is using the same file name for the ISI and TXT files. 97 - The PREPARE operation for an IFILE is using the same file name for the ISI and TXT files. 98 - The OPEN operation for an AFILE is using the same file name for the ISI and TXT files. 99 - The PREPARE operation for an AFILE is using the same file name for the AAM and TXT files. - Added a subcode value for an I83 error as follows: 14 - A XFILE field type conflict has been detected. The field type for an XFILE tag can not be used for both a XFILE element and a XFILE record set at the same time. *============================================================================== The following files have been changed as follows: ------------------------------------------------------------------------------- PLBSERVE - Modified the server to return a U98 error when there is insufficient memory when allocating the virtual memory required to allow a program to execute using the Windows OS. - Modified the server to always log an untrapped user program error code. - Modified the Unix version of PLBSERVE to properly process all signals that could cause premature termination of processes. - Modified the Unix version of PLBSERVE to cleanup/release shared memory resources when processes are terminated. This prevents a resource leak. - Modified the runtime child connection logic to prevent the connection-count from going negative. This change is being made to prevent the possibility of a problem where no users could logon because the maximum connection-count was exceeded. - Corrected a problem where the 'PLBCS_NOCLIENT=ON' would always be set to the OFF state and thus would not take affect for the Windows version of PLBSERVE. - Corrected a Linux version 2.6 PLBSERVE problem that might cause a user-count to be lost when a child process was terminated. - Corrected a buffered message full problem that could cause an unknown error message '99990' to occur at the client module. The existence of this error was very dependent upon the GUI program instructions that were buffered. Therefore, this problem was very difficult to isolate a specific sequence of instructions that would cause the problem. ------------------------------------------------------------------------------- PLBCLIENT- Modified the client error messages for Uxx errors to give the command line being used. - Corrected a GPF error that would occur when the client was accessing a Forward Byte Order Plbserve server and the COPYFILE instruction was executed to transfer a file from the client to the server. ------------------------------------------------------------------------------- PLBCLIENT- Modified the client executable modules to detect and process the INI PLBCLICON data that is embedded when it is encrypted. PLBCLIUNX - Corrected a GPF error that would occur when the client was accessing a Forward Byte Ordered Plbserve server and a COPYFILE was executed to copy a file from the client to the server. ------------------------------------------------------------------------------- PLBSERVE - Corrected a problem where the GETINFO EXCEPTION instruction was not PLBCLIENT returning exception data for an AUTOMATION object that was created and used at the PLBSERVE server. The correction for this problem requires an 9.0H version for both the PLBCLIENT client and the PLBSERVE server when the GETINFO EXCEPTION is executed. ------------------------------------------------------------------------------- PLBWIN - Modified the '-d3' log file output to include the current date and PLBSERVE and time when the log was generated. PLB(UNIX) - Added a new keyword named 'PLB_DYNAMICLOADMOD={on|off}'. If this keyword is not specified in the INI file, then the default action is the same as the keyword being set to OFF. When this keyword is set to OFF (default), then any LoadMod module is loaded into the PL/B program memory space. The size of the PL/B program memory space can be changed using the '-m' and '-mv' command line options. When this keyword is set to ON, then all LoadMod modules are loaded into the process memory space. In this case, the memory used to load the LoadMod modules does not affect the PL/B program memory space. When the PLB_DYNAMICLOADMOD keyword is set to ON, then the ROLLOUT can not be executed in a PL/B program. If ROLLOUT is executed with this keyword set to ON, then a U49 subcode 103 is given. - Modified the GETMODE *DUMPCRSTACK IP address data as a HEX value. The IP value is now stored into the return data string as the follow format: 'xNNNNN' - NNNNN is a hex value for the IP address. - Modified the XFILE schema processing to allow namespaces other than 'xs:'. - Modified the XFILE processing to produce schema output with 'xsd:' as the namespace. Prior to this change the XFILE schema output was using the 'xs:' namespace. This change to a 'xsd:' namespace is more current as documented for XML schema standards. - Modified WRITE XFILE operation to support the 'Record_Text=' internal data tag reference. This change is required to allow as given XML tag to contain both an Attribute and data. The 'Record_Text' tag is not case sensitive. Example: X XFILE . PREP X,"NAME","Month1Liabilities",RECORDSET="LiabilityAmount" WRITE X,SEQ;$liabilityDay="1",Record_Text="5.14" WRITE X,SEQ;$liabilityDay="2",Record_Text="6.10" CLOSE X Expected Output: 5.14 6.10 - Modified the file name parsing to address problems caused because the '/' character is valid both as the Unix path delimiter and it is also valid as the Datapoint extension character. Please note the following: 1. If the file name being processed contains more than one '/' character and does not contain a ':', then the file name is not evaluated for a Datapoint extension. extension character. Example: /home/data/test 2. If a file name contains a single '/' character, then the file name is evaluated for a Datapoint extension. 3. A new keyword named 'PLB_DPTFILENAME={ON|OFF}' has been added. If this keyword is set to OFF, then the runtime does not support/evaluate Datapoint file names. If this keyword is not specified, then the default setting is ON to support the Datapoint file name format. This keyword has been added to allow a user to specify that none of the PL/B application file names are to be evaluated as Datapoint file name formats. The most likely use of this keyword is for Unix OS environments where '/' character conflicts exist. - Corrected a problem where a SEARCH would cause a GPF error when the source list variables were GLOBAL variables. - Corrected a problem where the SortColumn method for a LISTVIEW object did not sort properly when using the type values 9 and 10 used to sort time stamp strings. - Corrected a problem where the *LL control for a READ XFILE was setting the logical length to be on byte too short. - Corrected a problem where an array variable in a WRITE XFILE was only outputting the first element of the array. - Corrected a GPF error that could occur when a GETFILE instruction was executed using an XFILE variable that was empty. - Corrected a problem where the same file name could be used for a PREPARE operation for an IFILE or AFILE. With this correction, the PREPARE instruction for an AFILE/IFILE now gives an I11 error with a Subcode of 97 for an IFILE and a Subcode of 99 for an AFILE. - Corrected a problem where the same file name could be used for an OPEN operation for an IFILE or AFILE. This problem can only occur when an AAM/ISI file was created with a PREPARE operation that specified the same file name for the TXT and AAM/ISI files. The OPEN instruction for an AFILE/AFILE now gives an I11 error with a Subcode of 96 for an IFILE and a Subcode of 98 for an AFILE. - Corrected a GPF error that would occur when a READ SEQ instruction was execute for a SUNFM managed file and the *ABSON control was used with a DIM variable that was larger than 32767. - Corrected a problem where the AAMDEX, INDEX, and SORT instructions would ignore the logging option when the command line string contained leading blanks. With this change, these instructions skip over any leading blanks in the command line string. - Corrected a GPF error that would occur when the runtime was reporting an I60 error caused by an OS read error that happened while reading the ISI/MFD header for an OPEN ISAM operation. This GPF problem was caused by a change in release 9.0F. - Corrected a problem where the GETFILE REMOTEIP operation could return the wrong value. - Corrected a GPF error that could occur when writing a XFILE field that was used both as a XFILE field element and as a XFILE record set. An I83 subcode 14 error now occurs when a field type conflict is detected. ------------------------------------------------------------------------------- PLBWIN - Modified the runtime to allow an AUTOMATION, CONTAINER, and CONTROL PLBSERVE object to be declared with a CLASS literal specified. A program compiled in this case causes a U12 error when executed with a runtime version earlier than 9.0H. - Corrected a problem that would cause an I76 subcode 20 error when a file IO operation performed a 2GB restriction check for an IFILE that was opened to an ISI/TXT file on a network drive mapped to a Win98 workstation. ------------------------------------------------------------------------------- PLBWIN - Modified the STATUSBAR panels to extend to the right edge of the Window when the Size Grip is used and the STATUSPANEL objects are using the spring capability. - Modified the PANEL object to support the CLIPCTRL property. - If the user application sets the CLIPCTRL property to FALSE for a WINDOW and PANEL, then this can be used to correct an EDITTEXT repaint problem when the EDITTEXT is disabled and enabled. - Modified the CONTROL object interface to support an ActiveX control IPersistStream interface. Some ActiveX controls require the IPersistStream interface to load and save component configuration file data. This modification is being made to resolve an O153 subcode 104 error that was occurring when an Adobe Acrobat Version 7 ActiveX control was being used. - Modified the *Options bit value for the SaveXmlFile method of a LISTVIEW object to include a new bit definition as follows: $LV_XMLWR_OUTPUTALLATTR 0x0040 The $LV_XMLWR_OUTPUTALLATTR bit value causes the Image Index and Parameter attributes to always be output to the XML file. - Modified the *Options bit value for the SaveXmlFile method of a TREEVIEW object to include a new bit definition as follows: $TV_XMLWR_OUTPUTALLATTR 0x04 The $TV_XMLWR_OUTPUTALLATTR bit value causes the Image Index, Parameter, and Selected Image attributes to always be output to the XML file. - Corrected a problem where the WINFRESH instruction was causing the border of an EDITTEXT object to disappear when the parent of the EDITTEXT was a PANEL object. - Corrected a GPF error that would occur when the MAINWINDOW object was used in a DBCONNECT instruction as follows: Example: DB DBFILE MW MAINWINDOW . DBCONNECT MW;DB,"","","" - Corrected a problem where the Toolbuttons for a TOOLBAR were being resized when the TEXT property was used and the AUTOSIZE property was set to be FALSE. - Corrected a problem where the TOPMOST property state for a WINDOW object could not be changed using the SETPROP instruction. ------------------------------------------------------------------------------- PLB(UNIX)- Corrected a problem where a OPEN/PREP using a PLBENV_ keyword that was retrieved from the Unix OS UET would cause the UET to be corrupted. This problem was caused by a change in 9.0G. ------------------------------------------------------------------------------- PLBCMP - Modified the compiler to allow an AUTOMATION, CONTAINER, and CONTROL object to be declared with a CLASS literal specified. A program compiled in this case can not be loaded by any runtime version earlier than 9.0H and causes a U12 error for earlier runtime versions. - Modified all instructions using an XFILE variable to give a compilation error when a VARLIST or RECORD reference is used. - Corrected a problem where a record member label reference was not being used when it was used in an instruction using an XFILE variable. Example: REC RECORD ABC DIM 5 DEF FORM 5 RECORDEND . XF XFILE . WRITE XF,SEQ;REC.ABC ;XML TAG ==> 'ABC' - Corrected a problem where the compiler was generating invalid program codes for the following logic. Execution of this logic would cause a runtime GPF error. Example: CALL X STOP . Y ROUTINE GOTO Z . X ROUTINE Z PROCEDURE RETURN - Corrected a problem where the compiler was not properly identifying the end of common when a RECORD variable was the first non-common variable. This problem would cause C09 errors. - Corrected a problem where the compiler was allowing a GOTO to a FUNCTION label reference when the GOTO was specified before the FUNCTION. With this correction, the compiler gives an appropriate compilation error. - Corrected a problem where the compiler was not accepting a decimal immediate value for the Increment parameter of a FOR instruction. - Corrected a problem where the compiler was not displaying error messages properly when the screen definition file row setting was larger than 50 and the Windows Console shell line setting was larger than 50. - Corrected a problem that was caused by a change in release 9.0E where the '@' pointer declaration for a GUI object was not being processed properly. In the following example, the button object was not being created as a pointer. Example: BUT1 BUTTON @ ------------------------------------------------------------------------------- PLBDSIGN - Modified the PANEL object to support the CLIPCTRL property. - Modified the CONTROL object interface to support an ActiveX control IPersistStream interface. Some ActiveX controls require the IPersistStream interface to load and save component configuration file data. This modification is being made to resolve an O153 subcode 104 error that was occurring when an Adobe Acrobat Version 7 ActiveX control was being used. ------------------------------------------------------------------------------- UTILITY - Modified the EMBEDINI utility to cause the INI data to be encrypted by default. A new option '-a' has been added to cause the INI data to be written as non-encrypted ASCII data. ------------------------------------------------------------------------------- ODSBAC32.DLL- Corrected a problem where negative values were not being allowed as input values for SQL statements. ------------------------------------------------------------------------------- SA_DLL32.DLL- Corrected a problem where the wrong version information was returned for an 8.7x ISI file using GETFILE_ISI_INFO. ------------------------------------------------------------------------------- SUNFHSYS.DLL- Corrected a problem where the wrong version information was returned for an 8.7x ISI file using GETFILE_ISI_INFO. ------------------------------------------------------------------------------- ADMIN - Corrected a problem in the Admin service commands where the user-count was decrementing an extra count for a Unix version of a PLBSERVE/SUNFM server when an ADMCOMMAND $ADMCMDHARDTERM was executed. This could cause the logon connection for the Unix version of these servers to become invalid resulting in user logon problems. Note, that the ADMCOMMAND $ADMCMDHARDTERM command is executed by the WATCH program when a HARD Termination is requested for a child process. ------------------------------------------------------------------------------- SUNIDE - *** Added a compare files function. *** - Corrected a problem where if a user had multiple files of the same name opens from different locations, the IDE could not tab back and forth between them. - Refresh dependancies now reloads the project ini file so changes there can take effect. - Modified date mask max size from 12 to 100 bytes. - Modified list file processing after compile to report the location of the makefile used for determination for "old list file". - Added button to temporarily collaps the source map to allow more space for editor windows for small screens. - Modified Copy Project logic to remember the last selected location for the instance. - Modified build process to make sure compiler options start with a hyphen to identify the start of options. - Added when you double click on a compiler error after a build, all the errors for a given file are bookmarked for easy next/previous error navigation using F11/shift F11. - Modified save logic to double check read-only status of file to see if file is still read only. - Mapped bookmark navigation/managment features for F11. ------------------------------------------------------------------------------- DBGIFACE - Corrected a bug where local includes with multiple include letters were not being handled properly. - Fixed up comments that start in 1st column to show better. ------------------------------------------------------------------------------- SUNSCAN - Added right and left mouse clicks for page up/page down. ------------------------------------------------------------------------------- DATALEN - Increased supported record size and number of records. -------------------------------------------------------------------------------