Date: 02-14-2012 Subject: RELEASE 9.5B1 Runtime Files These release notes pertain to the following programs or files: PLBCLI 9.5B 30 Jan 2012 9,5,2,600 PLBCLIENT 9.5B 30 Jan 2012 9,5,2,500 PLBCLINET 9.5B 30 Jan 2012 9,5,2,500 PLBCLICON 9.5B 30 Jan 2012 9,5,2,500 PLBCON 9.5B1 14 Feb 2012 9,5,2,501 PLBCONET 9.5B1 14 Feb 2012 9,5,2,501 PLBNET 9.5B1 14 Feb 2012 9,5,2,501 PLBRUN 9.5B1 14 Feb 2012 9,5,2,601 PLBSERVE 9.5B1 14 Feb 2012 9,5,2,501 PLBSERVET 9.5B1 14 Feb 2012 9,5,2,501 (Threaded Server) PLBWIN 9.5B1 14 Feb 2012 9,5,2,501 SUNAAMDX 9.5B 30 Jan 2012 9,5,2,500 SUNAAMDX64 9.5B 30 Jan 2012 9,5,2,500 ODSBAC32.DLL 9.5B 30 Jan 2012 ODSBAC64.DLL 9.5B 30 Jan 2012 PLBNETSUP.DLL 9.5B1 14 Feb 2012 9,5,2,501 Required for PLBNET PLBWSEC.DLL 9.5B1 14 Feb 2012 9,5,2,501 Req'd PLBWIN/PLBNET SA_DLL32.DLL 9.5B 30 Jan 2012 9,5,2,500 DBEXPLORER.PLC 9.5B 30 Jan 2012 PLBCMP.PLC 9.5B 30 Jan 2012 PLBDBUG.PLC 9.5B 30 Jan 2012 REFORMAT.PLC 9.5B 30 Jan 2012 SCHEMAEDITOR.PLC 9.5B 30 Jan 2012 SUNIDE.PLC 9.5B 30 Jan 2012 SUNCS21.OCX 9.5B 30 Jan 2012 PLBEQU.INC 9.5B 30 Jan 2012 *============================================================================== Notes for some NEW Items: - Modified the runtimes to support a new variable type named LABEL that is a code label pointer. - Added new instructions to support the LABEL code pointer. CLEARLABEL GETLABEL LOADLABEL MOVELABEL MOVELV MOVEVL STORELABEL TESTLABEL - Added a new instruction named CONVERTUTF that performs UTF conversions. - Enhanced the SQLIO implementation for SQL date, time, and datetime types. - Added new keywords to HTTP for enhanced operations. *============================================================================== Notes for WARNINGS: - As documented for the MAXCOLS property of an EDITTEXT object, the MAXCOLS should only affect the behavior of a multiline EDITTEXT. If a user program has been implemented to manipulate the MAXCOLS property via a SETPROP for a single line EDITTEXT object, the use of the MAXCOLS should be evaluated. *============================================================================== Notes for DOCUMENTATION: - In the PL/B Runtime Reference manual, replace PLB_PATH with PLB_SYSTEM in the U11 error description. - In the PL/B Language Reference manual, change the Note number 3 for the AAMDEX, INDEX, and SORT instructions to include the following description of the 'S00' data stored in the S$ERROR$ variable. Note: 3. The OVER flag is set if the utility instruction encounters a failure. If the OVER flag is set, the S$ERROR$ variable contains the error code as defined in the PL/B Runtime Reference. If the OVER flag is cleared, the instruction performed successfully and the 'S00' data string is stored in the S$ERROR$ variable. - In the PL/B Language Reference manual, change the notes (1.) and (4.) for the HASH instruction to read as follows: "Note: 1. The Logical String of the {source} variable is evaluated to generate the hash string. A NULL source variable is valid for generating a hash string. Note: 4. The ZERO flag is set to a TRUE state if the hash string is generated. Otherwise, the ZERO flag is set to FALSE." - In the PL/B Language Reference manual, for the PATH instruction change the note number (3.) to remove the following sentence. "Under Windows, any drive but the current drive is always in the root directory. Windows only keeps track of one current path and that is the current path on the current drive." - Add the following I86 error subcodes to the PL/B Runtime Reference manual. Subcode Comment 40 - Invalid sql_type date, time, or datetime mask. 41 - Invalid to define more than one primary key column to be used for SQLIO operations. 42 - Direct PLB IO operations are not allowed for SQLIO when a user defined primary column is being used and a sun_recno column is not being used. 43 - Invalid data content for a PLB FORM data type. - Add the following I85 error subcodes to the PL/B Runtime Reference manual. Subcode Comment 131 - Invalid FILTER skipcount value. The skipcount must have a value between 0 and 65535. 132 - Invalid file type for FILTER $SKIPKEYS$ operator. The $SKIPKEYS$ operator can only be used for an IFILE. 133 - Invalid sql_type date, time, or datetime mask. - Add the following subcodes in the PL/B Runtime Reference manual under the S(Sort) Errors. Subcode Comment 13 - The INDEX instruction has encountered an ISI tree depth stack overflow error. This error indicates that the ISI tree structure required for the number of records being indexed has exceeded the capabilities of the runtime. This error can only be corrected by increasing the number of ISI tree levels supported by the runtime. 14 - The AAMDEX instruction has encountered an error performing an OS 'lseek' function. This means that the OS has given an error attempting to seek to a position in the input data file. If Windows is being used, the 'Windows Error Code' is appended to the error message to give more information about the failure. 15 - The AAMDEX instruction has encountered an error performing an OS 'read' function. This means that the OS has given an error attempting to read the input data file. If Windows is being used, the 'Windows Error Code' is appended to the error message to give more information about the failure. - Add this description for the F12 format error to the PLB Runtime Reference manual and the 'pat95B.me' readme file. F12 - A LABEL execution pointer is referencing an EXTERNAL load module declaration and it is being used in a flow control instruction that does not support an EXTERNAL instruction. For example, a GOTO instruction does not support an EXTERNAL reference. *============================================================================== The following files have been changed as noted: ------------------------------------------------------------------------------- PLBSERVE - Corrected an issue where DEACTIVATE or SETPROP *visible=0 of a PLFORM COLLECTION containing a modal dialog would cause indeterminate program running behaviors or cause a GPF error. ------------------------------------------------------------------------------- PLB(UNIX), PLBSERVE(UNIX) - Corrected a problem that could cause a SEGV error for an OPEN IFILE operation when the OS platform required WORD alignment. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX) - Modified the runtimes to support the character debugger 'PLBDBUG' operations for LABEL code pointer debugger actions. - Modified the runtimes to support a new variable type named LABEL. The LABEL variable type declares an program code label pointer that can be changed when a PLB program is running. See the PLBCMP section for a full description. - Added a new instruction named CONVERTUTF that performs UTF conversions: The CONVERTUTF instruction allows UTF conversions UTF-8, UTF-16, and UTF-32 to be performed. The basic operations of this instruction allow a PLB character data stream to be converted to/from UTF-8, UTF-16, and UTF-32. In addition, this instruction can allow an application to convert UTF formats directly to other UTF formats. Format: [label] CONVERTUTF , [, ] Where: This operand is a character variable (DIM) or literal whose logical string is contains the data to be converted. This operand is required. This operand is a character variable (DIM) that receives the converted data. This operand is required. This operand is a decimal number, numeric variable or numeric literal that gives a numeric value which identifies the type of UTF conversion to be performed. The operand is optional. If the operand is not specified in the instruction, the default behavior is that the data string is a PLB character stream and this data is to be converted to UTF-8 and stored in the . Flags: EOS, OVER, and ZERO Note: 1. The ZERO flag is set to be TRUE if the conversion was successful. Otherwise, the ZERO flag is cleared. 2. Likewise, the OVER flag is set to be TRUE when a conversion error has occurred. Otherwise, the OVER flag is cleared. 3. The EOS flag is set to be TRUE when the variable is too small to receive all of the converted data. Otherwise, the EOS flag is cleared. 4. If the logical string of the operand is NULL, the flags are cleared and the instruction terminates immediately. 5. If a conversion operation is performed, the S$ERROR$ variable contains a character string as follows: T00 - Conversion successful! T01 - Partial character in source! T02 - Insufficient room in target for conversion! T03 - Source data sequence is illegal/malformed! T04 - Invalid conversion mode specified! T09 - Insufficient memory to perform conversion! 6. The conversion values can be specified as follows: Type Value Conversion action 0 PLB data to UTF-8 1 PLB data to UTF-16 2 PLB data to UTF-32 3 UTF-8 to PLB data 4 UTF-16 to PLB data 5 UTF-32 to PLB data 6 UTF-8 to UTF-16 7 UTF-8 to UTF-32 8 UTF-16 to UTF-8 9 UTF-16 to UTF-32 10 UTF-32 to UTF-8 11 UTF-32 to UTF-16 - Modified PLB_DEBUG to support the 'ond4' value. This allows the '-d4' mode to be started using this keyword when a program is run. - Modified the HASH instruction to use a NULL variable as an input operand to generate a hash value. This change has been done to be consistent with other hash generating applications used to meet end-user requirements. - Enhanced the SQLIO and VIEW implementations for the runtimes to support standard date, time, and datetime SQL data types. The changes to support these SQL data types are described as follows: Columns schema definitions for both SQLIO and VIEWS now support 'sql_type' data type values as follows: 9 - Date (SQL_DATE) 10 - Time (SQL_TIME) 11 - Datetime (SQL_DATETIME) Example: 9 Columns schema definitions for both SQLIO and VIEWS also support a 'format_mask' definition in the format of: The SQL_DATE 'format_mask' must include the following special characters to identify the mask format to be used: zz or yy or yyyy - 2 year or 4 digit year mm - 2 digit month dd - 2 digit day The 'zz' year is a 2 character mask field that has the year encoded to represent a 4 digit number value for a year. The high order (first) character of the 'zz' mask can be a numeric character '0' to '9' or it can be an uppercase alpha character 'A' to 'Z'. The low order (second) character of the 'zz' mask can only be a numeric character '0' to '9'. Both of the 'zz' characters are used to calculate a 4 digit year. Example of data for 'zz' encoded character mask: Encoded Data Calculated year 00 - 1900 ... 99 - 1999 A0 - 2000 ... A9 - 2009 B0 - 2010 The default SQL_DATE format_mask is 'mm-dd-yy' The SQL_TIME 'format_mask' must include the following special characters to identify the mask format to be used: hh - 2 digit hours mm - 2 digit minutes ss - 2 digit seconds The default SQL_TIME format_mask is 'hh:mm:ss' The SQL_DATETIME 'format_mask' must include the following special characters to identify the mask format to be used: yy or yyyy - 2 or 4 digit year mm - 2 digit month dd - 2 digit day hh - 2 digit hours nn - 2 digit minutes ss - 2 digit seconds The default SQL_DATETIME format_mask is 'yyyymmddhhnnss' Example: 9 mm/dd/yy Note: 1. The 'sql_type' and 'format_mask' column data is found in the schema table named 'sun_columns' when using a VIEW. When defining SQLIO schema data, the 'sql_type' and 'format_mask' column data is found in the 'sun_sqlio_columns' table. 2. For a VIEW and the 'sql_type', only the date, time, and datetime SQL data types are supported at this time. All other data type values are ignored at this time. 3. Standard SQL formats are defined as follows: Date: yyyy-mm-dd Time: hh:mm:ss Datetime: yyyy-mm-dd hh:mm:ss These formats are the required/expected formats that are used to perform actual SQL operations. When the runtime performs SQL operations for the date, time, and datetime data types, appropriate conversions are performed using the 'format_mask' to insure proper operations. 4. Using new data types with SQLIO. a. Columns are created as special date, time , or datetime columns in MySql or SqlServer b. Columns are created as a char type but they are treated in a standard way in SQLite. c. A WRITE operation causes the PL/B data to be transformed using the 'format_mask' into the standard SQL format. d. A READ operation converts data from the standard SQL format into the format specified by the 'format_mask'. 5. Using new data types with VIEWs. a. A WRITE by columname= operation converts data from the standard SQL format into the format specified by the 'format_mask'. b. A READ by columname= operation causes the PL/B data to be transformed using the 'format_mask' into the standard SQL format. c. A FILTER statement handles a column marked as a date or time column by transforming the data using the 'format_mask' into the standard SQL format for comparison. A string constant in a FILTER expression can be in either the standard SQL form or the form specified by the 'format_mask'. Example: FILTER ORDERS_DISK,"ORDERDATE > '1991-04-24'" FILTER ORDERS_DISK,"ORDERDATE > '04/24/91'" - For SQLIO operations using the PLB type of a 1 (FORM), the runtime processing has been improved to better verify the data for WRITE and UPDATE operations. In addition, better formatting on READ operations has been added. - The SQLIO operations use an implicit column named 'sun_recno' that has unique values to support simulation of all PL/B IO instructions. If an end-user SQL table has an implicit column with unique values like the 'sun_recno' column, a new type value of 12 has been added to allow the user defined column name to replace the implicit 'sun_recno' column for all SQL operations. This new SQL data type is identified as a SQL_IDENTITY type. Columns schema definition for the SQLIO data type has been modified to support a value of 12 as follows: 12 - Identity (SQL_IDENTITY) Example SQLIO schema: user_recno 108 5 1 0 12 0 0 0 - For all SQL tables created and maintained via PLB instructions using the SQLIO runtime support, there is always a 'sun_recno' implicit column that has unique values that are used to simulate PL/B IO instructions. A change has been made to the SQLIO support to allow a native SQL table with a prime key to be used when there is no 'sun_recno' implicit column. This change allows a 'native' SQL table to be accessed via SQLIO PL/B instructions by using the prime key column data. To use a prime key in place of the 'sun_recno', the SQLIO schema settings require that a value of 101 must be assigned for the column definition value. This type of SQLIO access does not allow direct file operations for FPOSIT, REPOSIT, READ, UPDATE, WRITE, DELETE, WEOF, and POSITEOF instructions including random and sequential operations. In the Schema Record definitions, the can be assigned a value of 101 to indicate that a prime key column is to be used when there is no 'sun_recno' implicit column. When the prime key access is being used, the column data type can either be a character SQL data type or it can be a numeric SQL data type. If the column is specified as a character data type for the prime key column, the data is processed to provide PL/B language simulation where a low key value is all blanks and a high key value is all 'z' characters. If the column is specified as a numeric data type for the prime key column, the data is processed to provide PL/B language simulation where a low key value is zero and the high key value is 4,294,967,295 (ie 0xFFFFFFFF). Example SQLIO schema to use Prime Key column as character SQL type: CUSTID customer 4 character id 1 5 0 0 1 0 1 1 101 Example SQLIO schema to use Prime Key column as numeric SQL type: PRODID 1 3 0 0 6 1 0 0 101 - Here are some tips where the embedded SQLite database engine in the runtimes can be used to enhance the PL/B language operations regarding date/time functions. SQLite Date And Time Functions By creating an in-memory database, the programmer can get quick and easy access to the SQLite date and time functions. Access to an in-memory database using SQLite can be achieved using the DBCONNECT instruction as follows: Conn DBFILE DbConnect Conn, "SQLITE;;:memory:","","" SQLite supports five date and time functions as follows: 1. date(timestring, modifier, modifier, ...) The date() function returns the date as YYYY-MM-DD. 2. time(timestring, modifier, modifier, ...) The time() function returns the time as HH:MM:SS. 3. datetime(timestring, modifier, modifier, ...) The datetime() function returns YYYY-MM-DD HH:MM:SS. 4. julianday(timestring, modifier, modifier, ...) The julianday() function returns the Julian day that is the number of days since noon in Greenwich on November 24th, 4714 B.C. 5. strftime(format, timestring, modifier, modifier, ...) The strftime() function returns the date formatted according to a format string specified by the first argument to the function. These SQLite functions can be specified in a SQL SELECT statement to perform the desired SQL operation to retrieve the desired data. All five date and time functions take a time string as an argument. The time string is followed by zero or more modifiers. The strftime() function also takes a format string as its first argument. More information about these functions is available as described by the SQLite documentation at the 'www.sqlite.org' web site. The 'timestring' argument in the these functions can be followed by zero or more modifiers that alter date and/or time. Each modifier is a transformation that is applied to the time value to its left. Modifiers are applied from left to right; order is important. The available modifiers are as follows. 1. NNN days 2. NNN hours 3. NNN minutes 4. NNN.NNNN seconds 5. NNN months 6. NNN years 7. start of month 8. start of year 9. start of day 10. weekday N 11. unixepoch 12. localtime 13. utc The first six modifiers (1 through 6) simply add the specified amount of time to the date and time specified by the preceding timestring and modifiers. Note that "±NNN months" works by rendering the original date into the YYYY-MM-DD format, adding the ±NNN to the MM month value, then normalizing the result. Thus, for example, the data 2001-03-31 modified by '+1 month' initially yields 2001-04-31, but April only has 30 days so the date is normalized to 2001-05-01. A similar effect occurs when the original date is February 29 of a leap year and the modifier is ±N years where N is not a multiple of four. The "start of" modifiers (7 through 9) shift the date backwards to the beginning of the current month, year or day. The "weekday" modifier advances the date forward to the next date where the weekday number is N. Sunday is 0, Monday is 1, and so forth. The "unixepoch" modifier (11) only works if it immediately follows a timestring in the DDDDDDDDDD format. This modifier causes the DDDDDDDDDD to be interpreted not as a Julian day number as it normally would be, but as Unix Time - the number of seconds since 1970. If the "unixepoch" modifier does not follow a timestring of the form DDDDDDDDDD which expresses the number of seconds since 1970 or if other modifiers separate the "unixepoch" modifier from prior DDDDDDDDDD then the behavior is undefined. Due to precision limitations imposed by the implementations use of 64-bit integers, the "unixepoch" modifier only works for dates between 0000-01-01 00:00:00 and 5352-11-01 10:52:47 (unix times of -62167219200 through 10675199167). The "localtime" modifier (12) assumes the time string to its left is in Universal Coordinated Time (UTC) and adjusts the time string so that it displays localtime. If "localtime" follows a time that is not UTC, then the behavior is undefined. The "utc" is the opposite of "localtime". "utc" assumes that the string to its left is in the local timezone and adjusts that string to be in UTC. If the prior string is not in localtime, then the result of "utc" is undefined. Example Program Using SQLite Date/Time Functions: Conn DBFILE F1 FORM "10" Data Dim 40 DbConnect Conn, "SQLITE;;:memory:","","" Keyin *ES,"Test SQLite date functions: ",Ans .----------------------------------------------------------- Display "Compute the current date. "; DbSend Conn;"SELECT date('now')" DbExecute Conn Dbfetch Conn,F1;Data Display Data .----------------------------------------------------------- Display "Compute the last day of the current month." DbSend Conn;"SELECT date('now','start of ": "month','+1 month','-1 day')" DbExecute Conn Dbfetch Conn,F1;Data Display Data .----------------------------------------------------------- Display "Compute the date and time given a unix ": "timestamp 1092941466." DbSend Conn;"SELECT datetime(1092941466, ": "'unixepoch')" DbExecute Conn Dbfetch Conn,F1;Data Display Data .----------------------------------------------------------- Display "Compute the date and time given a unix ": "timestamp 1092941466, and compensate for ": "your local timezone." DbSend Conn;"SELECT datetime(1092941466, ": "'unixepoch', 'localtime')" DbExecute Conn Dbfetch Conn,F1;Data Display Data .----------------------------------------------------------- Display "Compute the current unix timestamp." DbSend Conn;"SELECT strftime('%s','now')" DbExecute Conn Dbfetch Conn,F1;Data Display Data .----------------------------------------------------------- Display "Compute the number of days since the ": "signing of the US Declaration of ": "Independence." DbSend Conn;"SELECT julianday('now') - ": "julianday('1776-07-04')" DbExecute Conn Dbfetch Conn,F1;Data Display Data .----------------------------------------------------------- Display "Compute the number of seconds since a ": "particular moment in 2004:" DbSend Conn;"SELECT strftime('%s','now') - ": "strftime('%s','2004-01-01 ": "02:34:56')" DbExecute Conn Dbfetch Conn,F1;Data Display Data .----------------------------------------------------------- Display "Compute the date of the first Tuesday in ": "October for the current year." DbSend Conn;"SELECT date('now','start of ": "year','+9 months','weekday 2')" DbExecute Conn Dbfetch Conn,F1;Data Display Data .----------------------------------------------------------- Display "Compute the time since the unix epoch in ": "seconds (like strftime('%s','now') except ": "includes fractional part):" DbSend Conn;"SELECT (julianday('now') - ": "2440587.5)*86400.0" DbExecute Conn Dbfetch Conn,F1;Data Display Data .----------------------------------------------------------- Keyin Ans DbDisconnect Conn Stop Example Program Using SQLite Date/Time Functions: .Sample code to update a date by 10 days in a file. . Conn DBFILE ... ... ... DbConnect Conn, "SQLITE;;:memory:","","" . OPEN ORDERS_DISK,"OrdersDt.txt",VIEW="OrdersDt" READ ORDERS_DISK,KEY1;; LOOP FILEPI 99;ORDERS_DISK READKS ORDERS_DISK;ORDERID=ORDERID: ORDERDATE=ORDERDT BREAK IF OVER DBSEND Conn;"Select date('",ORDERDT,"','+10 day')" DBEXECUTE Conn DBFETCH Conn,F1;ORDERDT UPDATE ORDERS_DISK;ORDERDATE=ORDERDT FILEPI 0 REPEAT FILEPI 0 CLOSE ORDERS_DISK - Modified the SHUTDOWN instruction to use a fast close mode when implicitly closing files that are opened at a Data Manager. This new implicitly close mode allows a PLB application to shutdown faster. The end-user may not observe an improved performance for a SHUTDOWN unless there is a large number of user applications logged on to a Data Manager. - Modified the runtimes to detect that a SUNDM Data Manager has enabled a keyword named DM_DELAYCLOSE. When this keyword is enabled, the close operation is delayed for any AFILE, IFILE, or FILE file variables opened at a SUNDM server. This behavior of a PLB runtime can ONLY be invoked by the DM_DELAYCLOSE keyword that can be defined in the SUNDM.CFG file. The intended use of this keyword is to improve the performance of a PLB program when managed files are closed either explicitly or implicitly. Note: 1. The program closing action for managed AFILE, IFILE, or FILE variables are delayed until one of the following conditions occurs: 1) A maximum of 50 files to a specific SUNDM is delayed. 2) All opened files to a specific SUNDM are closed. 3) Any PLB language instruction is encountered in a program that requires a log-on to a specific SUNDM. This includes OPEN, PREP, AAMDEX, INDEX, RENAME, SORT, COPYFILE, and any other instructions that logs onto a SUNDM server. 4) More than 2 seconds elapses between the first close and a keepalive runtime check. This is to prevent any unnecessary wasted time to close files opened at a SUNDM server. 5) Any PLB language instruction that can suspend keepalive messages to a SUNDM server. As an example, an PLB instructions that would cause a Windows OS dialog to be presented. As an example, a PLB ALERT would cause the keepalive messages to a SUNDM to be suspended. This same instruction would cause any delayed/queues close operations to be sent to a SUNDM to be performed. 2. The Data Manager DM_DELAYCLOSE keyword helps improve the performance when non-common file variables are opened at the Data Manager and they are implicitly being closed by a PLB CHAIN operation. 3. The DM_DELAYCLOSE keyword should not be used except in extreme scenarios where there are an excessive large number of users have files opened at a specific SUNDM server. It would be recommended that this keyword should NOT be used unless there are more than a 1000 users logged on to a Data Manager. - A new bit mask value has been added to the HTTP instruction *FLAGS option described as follows: *FLAGS Value $HTTP_FLAG_RAW_RESULT = 0x00000020 The entire unedited response received for a HTTP request is returned in the result. - Modified the HTTP instruction to support new keywords that are defined as follows: *FILENAME={svarlit} ( Input ) This keyword is a Character String Variable or a string literal that specifies a fully qualified path and file name of a file where the result data is to be stored. If the HTTP_FLAG_RAW_RESULT is used in the *FLAGS= options, the entire response is stored into the file specified. If the HTTP_FLAG_RAW_RESULT is not used, the header is stored in the *RESULT= field and the body is stored in the specified file. If the SUNDM keyword is being used the fully qualified path and file name must exist as the system where the Data Manager is running. *MAXDATASIZE={dnumnvar} ( Input ) The value specified by this keyword identifies the maximum amount of data to be received before terminating the HTTP transaction. If this keyword option is not used, the default has NO MAXIMUM when the *FILENAME= is used. If the *FILENAME= is not being used, the default is the physical size of the variable specified by the *RESULT= option. The intent of this keyword is to prevent an excessive amount of data from being written into a data files when the *FILENAME= keyword is being used. *MAXTIMEOUT={dnumnvar} ( Input ) The value specified by this keyword identifies the maximum time to spend processing the HTTP request. This keyword allows a user to put an absolute time limit to process a complete HTTP request. If this keyword is not used, there is no time limit on completing a HTTP request. - Correct a problem for SQLIO READ operation where a column was a type 2 (Integer) and the value being read was negative. The value was being returned as positive value. - Corrected a U62 error that occurred when a LOWERCASE or UPPERCASE was performed with only a source operand specified. - Corrected a problem where a READKP or READKS instruction performed with a FILTER could prematurely set the OVER flag. - Corrected a problem where the FILTER comparisons for an array was just matching the first element of the array. The original intent was to allow a FILTER to match any of the elements in an array when an array index was not specified. Example of Array Comparison without Index: FILTER F, "PRODCODE = '3'" This FILTER looks to match any element in the PRODCODE array that is 3. - Corrected a problem where the '(' character was not allowed as a termination character for the FILTER operators AND, OR, NOT, OVER, NOCASE and LIKE. Prior to this change, these FILTER operators had to have a WS (blank) character as the termination character. Example of Acceptable Unary Operator Syntax: FILTER F, "OVER (NAME = 'Bill')" FILTER F, "OVER(NAME = 'Bill')" ;Now allowed by this change! - Corrected a problem where the FILTER instruction comparison did not allow a syntax format where an index was specified for a array. Example of Array with an Index: FILTER F, "PRODCODE(4)='4'" This FILTER matches the 4th element of the PRODCODE array to be 4. - Corrected issue where an array at the end of a VIEW definition caused the record size to be miscalculated. - Modified the COUNTKEYS instruction to preserve the current file position of the IFILE file variable. - Corrected a problem where the actual timeout value used to receive messages from a mail server was 1/3 of the value as specified by the MAILSEND TIMEOUT parameter. This problem was caused by a change made in release 9.3A. - Corrected a problem where the AAMDEX instruction could perform in an indeterminate or unexpected behavior if an OS error occurred accessing or reading the input data file. The AAMDEX instruction has been modified to report an appropriate error if an OS error occurs. Two new subcode values have been added for the 'S(Sort)' errors that can occur. The new subcode values are described as follows: Subcode Comment 14 - The AAMDEX instruction has encountered an error performing an OS 'lseek' function. This means that the OS has given an error attempting to seek to a position in the input data file. If Windows is being used, the 'Windows Error Code' is appended to the error message to give more information about the failure. 15 - The AAMDEX instruction has encountered an error performing an OS 'read' function. This means that the OS has given an error attempting to read the input data file. If Windows is being used, the 'Windows Error Code' is appended to the error message to give more information about the failure. - Corrected a problem where a BATCH instruction was causing a buffer overflow resulting in indeterminate runtime behavior. This could occur when the following conditions were encountered in the running of a program. 1. The BATCH command contained a leading '!' character. 2. The running of the command would fail. 3. The program continued to perform the same BATCH command over and over. 4. Eventually, a runtime buffer would overflow causing indeterminate processing or a runtime GPF error. - Correct a GPF error that would occur when a pointer was initialized to an auto initialized variable. Example of Problem Code: D16 DIM 160000 pD16 DIM ^,D16 . MOVE "1", pD16 A GPF error could occur in any PLB instruction that attempted to use the 'pD16' pointer as defined in this example. - Corrected a problem where '-d4' command line option was not logging opcode data. - Modified the EDITTEXT object behavior to ignore the MAXCOLS property when a single line (non-multiline) EDITTEXT is being used. This change is done to correct a problem in the PLB Designer where changing the MAXCOLS property was limited the Text data that could be stored into the EDITTEXT at design time. WARNING: As documented for the MAXCOLS property of an EDITTEXT object, the MAXCOLS should only affect the behavior of a multiline EDITTEXT. If a user program has been implemented to manipulate the MAXCOLS property via a SETPROP for a single line EDITTEXT object, the use of the MAXCOLS should be evaluated. - Corrected a problem where DBFILE connections were being closed when an EXECUTE instruction was performed. This problem was caused by a change that was made in release 9.5A. - 9.5B1 - Corrected a problem where a FILEPI for an IFILE would hang after the COUNTKEYS instruction was execute using the same IFILE. This problem was caused by a change in the 9.5B patch release. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE (Windows) - Modified the PATH CHANGE instruction such that a PATH CURRENT using the 'x:' (drive only) format retrieves the last PATH CHANGE setting for the specific drive. - Modified the PATH CURRENT instruction to retrieve the full path for a specific drive when the 'x:' (drive only) format is used. Example of expected results for the PATH CHANGE/CURRENT changes that have been made. For this sample, the 'z:' current directory starts in the 'windows' directory: MOVE "z:", S$CMDLIN PATH CURRENT, S$CMDLIN ;Returns with 'z:\windows' . PATH CHANGE, "z:\myappdir" . MOVE "z:", S$CMDLIN PATH CURRENT, S$CMDLIN ;Returns 'z:\myappdir' . PATH CHANGE, "c:" . MOVE "z:", S$CMDLIN PATH CURRENT, S$CMDLIN ;Returns 'z:\myappdir' ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Modified the event modifier for the LISTVIEW Default, Click, and double Click events to include the ALT, CTRL, and SHIFT keyboard state flags. - Modified to allow a WINERR code to be reported if it is available when creating an AUTOMATION or CONTAINER object. - Modified the GETMODE instruction to support a new keyword named 'SERVICE={nvar}'. This keyword can be used to determine whether a runtime or client module is running as a Windows service process. The returned values for this keyword are defined as follows: Value Comment 0 - A runtime/client is not running as a Windows service. 1 - A runtime is running as a Windows service. 2 - A runtime is running as a secondary service process. 10 - A client is running as a Windows service. 20 - A client is running as a secondary service process. - Modified the SetTbFlags method for the TOOLBAR object to support a new bit mask value that allows the tooltips to be turned on and off for the new style tooltips implemented in version 9.4C. Bit Mask Value Meaning 0x02 - This bit mask value only takes affect for the tooltip support implemented in version 9.4C. When this bit mask value is set on, any tooltips specified for visible TOOLBUTTON objects are visible. When this bit mask value is cleared, all tooltips for the TOOLBUTTON objects are not visible. Note: The SHOWTIPS property for a TOOLBAR is a CREATE/GETPROP only property and can not be used to change the display state of the TOOLTIPS after the CREATE instruction has been performed. - Modified the default style implemented for a single line EDITTEXT object to cause a Windows OS behavior that would allow more than 1 character of keyed data to be affected by an undo action. - Modified the default operation for the creation of an Advanced Print spool file to eliminate the size restriction of 4GB. In addition, any one PICT object image that is used repeatedly in the printed output is automatically optimized to only be stored once in the spoolfile as long as the PICT object is not changed or recreated during the printing process. With these changes, the size of an Advanced Print spoolfile can be reduced significantly. Also, the time duration for the creation of the spoolfile can be reduced. - Added a new keyword named '*ADVSPOOLFILE95A' to the GETMODE and SETMODE instructions. This keyword can be used to force the spoolfile format using Advanced Print operations to be compatible with the 9.5A patch release and prior versions. The description for this keyword is as follows: SETMODE *ADVSPOOLFILE95A={nvar|ivar|dnum} When this keyword is set to a value of 1, the runtime generates an Advanced Print spoolfile to be compatible with the 9.5A or earlier runtimes. In this case, the spoolfile format is restricted to a size of 4GB and does not implement any picture optimization. If this keyword is set to a value of 0, the runtime generates an Advanced Print spoolfile format that allows the spoolfile to grow to a size larger than 4GB. In addition, any one PICT object image that is used repeatedly in the printed output is automatically optimized to only be stored once in the spoolfile as long as the PICT object is not changed or recreated during the printing process. If this keyword is not set, the default operation by the runtime is the same as when the keyword value is 0. The intended use of the ADVSPOOLFILE95A keyword is to allow a users application to generate spoolfiles that can be used by runtimes older than the 9.5B patch release. GETMODE *ADVSPOOLFILE95A={nvar|ivar} This keyword returns the current runtime state value that identifies the type of Advanced Print spoolfile format this is being used. If the returned value is non-zero, the runtime is generating a spoolfile format that is compatible with the 9.5A or earlier versions. If the returned value is zero, the runtime is generating a spoolfile format that eliminates the 4GB restriction and implements PICT object optimization as described in the SETMODE ADVSPOOOFILE95A description. - Added a new keyword named 'PLB_ADVSPOOLFILE95A={on|off}' that can be specified in the INI file for PLBWIN, PLBNET, or PLBSERVE. When this keyword is set to a value of ON, the runtime generates an Advanced Print spoolfile to be compatible with the 9.5A or earlier runtimes. In this case, the spoolfile format is restricted to a size of 4GB and does not implement any picture optimization. If this keyword is set to a value of OFF, the runtime generates an Advanced Print spoolfile format that allows the spoolfile to grow to a size larger than 4GB. In addition, any one PICT object image that is used repeatedly in the printed output is automatically optimized to only be stored once in the spoolfile as long as the PICT object is not changed or recreated during the printing process. If this keyword is not used, the default operation by the runtime is the same as when the keyword is set to be OFF. - Corrected a problem where a SETPROP VISIBLE to a TRUE state for a MENU object was causing the MENU to be enabled although the MENU ENABLED property was set to a FALSE state. - Corrected an issue where the $LV_CSVWR_NOZEROWIDTH option in a LISTVIEW SaveXmlFile method was causing a GPF error when column 0 had a width of zero. - Corrected a problem where ENABLED and BGCOLOR properties did not work for RADIOGRP and CHECKGRP objects when they were changed via a COLLECTION. - Corrected a problem where statusbar panels with a fixed width were not being scaled when the WINDOW scale method was performed. - Corrected a problem where a ToolButton tooltip was still active after the ToolButton VISIBLE property was turned off. This problem was allowing the tooltip of the invisible ToolButton to appear unexpectedly. - Corrected a problem where the SHOWTIPS property for a TOOLBAR object was not being honored since version 9.4C. - Modified to work around a problem where the VT_UI8 variant type was not supported for Windows OS versions before XP. This problem would cause unexpected O144 errors. The following PLB syntax would cause the error when using an AUTOMATION control: Example of Problem on a Windows 2000 System: RANGE AUTOMATION . .... . i4c INTEGER 4 SETPROP RANGE,*StartLineNo=(i4c+1) Note: When an integer expression is used, the result is always an I8 integer variable. In this case, the result of the '(i4c+1)' expression was converted into a variant data form with a VT_UI8 type. This was causing the unexpected O144 error. ------------------------------------------------------------------------------- PLBNET - Corrected a problem that was causing an unexpected O123 error in the PLB Designer for a .NET Timer object. ------------------------------------------------------------------------------- PLBNET, PLBCLINET - Modified the runtimes to track the active or inactive states for .NET objects. This change has been made to prevent unexpected ALT+key events from being processed for .NET objects that are not active or visible. - Modified the SETPROP instruction using a COLLECTION to support the named property syntax format using a leading '*' character. This syntax format can ONLY be used for NETCONTROL and NETOBJECT objects specified in a COLLECTION. When this syntax format is used, there is no change made for any other GUI objects that have been specified in the COLLECTION. Example: A NETCONTROL B NETCONTROL COL COLLECTION . CREATE A ... CREATE B ... ... LISTINS COL, A, B ... SETPROP COL, *AllowDrop="False" ;Only changes .NET objects ... - Corrected problem where keyed events was being sent to .NET controls such as context menus that are not visible. ------------------------------------------------------------------------------- PLB(UNIX) - Added two keywords named 'PLB_FILEPIUSLEEP={microseconds}' and 'PLB_FCNTLWAIT={0|1} that can used to configure the operational behaviors of the FILEPI instruction. These keywords allow the end-user to adapt the operation of the FILEPI instruction to perform in a manner that gives the best performance for the Unix OS platform, version, and PL/B applications being used. PLB_FILEPIUSLEEP={microseconds} This keyword allows the microseconds parameter for the usleep function in the FILEPI instruction to be configured for a Unix runtime. The intended use of the usleep function in the FILEPI instruction is to relinquish any remaining time such that another process can be running while the FILEPI is waiting for a file lock. The {microseconds} values can be specified from 0 to 1000000 inclusive. PLB_FCNTLWAIT={0|1} This keyword allows the fcntl function used in the FILEPI instruction to run in a lock wait mode when the value of 1 is specified. If the lock wait mode is enabled, the fcntl function used to lock a file causes the Unix OS to suspend the current process until a file is locked. Please note that this keyword ONLY takes affect when a FILEPI locks one file only. If the FILEPI has more than one PL/B file variable specified in the FILEPI instruction, the lock wait mode is ignored to avoid possible dead lock scenarios. ------------------------------------------------------------------------------- PLBCMP - Modified the PERFORM/PERFORMF instructions to allow an EXTERNAL label reference to be included in the list of program labels. - Modified the VERB prototype to support the LABEL code pointer type. The LABEL prototype type allows a Program code label reference to be passed as a parameter when the user-defined verb is performed. - Modified the compiler to support a new variable type named LABEL. The LABEL variable type declares an program code label pointer that can be changed when a PLB program is running. Program Control instructions can use the [label] name reference for the LABEL variable in place of normal program code label references. Format: label LABEL [^|@] Note: 1. The LABEL variable is a pointer that can be assigned to the address of a program code label reference. 2. See the descriptions for the following instructions regarding the use/manipulation of the LABEL variable: CLEARLABEL GETLABEL LOADLABEL MOVELABEL MOVELV MOVEVL STORELABEL TESTLABEL VERB ( User defined verb ) 3. The following Program Control instructions can use the LABEL variable: BRANCH BRANCHF CALL GOTO PERFORM PERFORMF EXCEPTSET TRAP 4. The LABEL variable can not be used in an EVENTREG instruction. In this case, a compiler error occurs. 5. The LABEL variable can not be declared as a common or global variable. 6. The label name reference for a LABEL pointer is mapped into the program code labels. The LABEL pointer can not be specified in a CALL USING variable list or a LROUTINE/ROUTINE/PROCEDURE parameter variable list. 7. A code LABEL pointer can not be declared within the scope of a LFUNCTION/FUNCTIONEND or FUNCTION/FUNCTIONEND. 8. When normal program flow control instructions are being used, a code LABEL pointer can be passed as a parameter using a TYPELESS VAR variable. Example: . VAR1 VAR ^ . DISPLAY "Pass Program Code Label as parameter!" MOVELV ProgLabel, VAR1 CALL ExeLabel USING VAR1 KEYIN "Hit enter to exit...:",S$CMDLIN SHUTDOWN . LABx LABEL ^ VARx VAR ^ ExeLabel ROUTINE VARx . MOVEVL VARx, LABx CALL LABx RETURN . ProgLabel DISPLAY "ProgLabel is doing something!" RETURN - The following instructions have been added to support the code LABEL pointer. ............................................................ CLEARLABEL The CLEARLABEL instruction clears the code LABEL pointer. Format: CLEARLABEL {exeptr} Where: {exeptr} Required. This parameter is a previously declared code LABEL pointer. Flags: None ............................................................ GETLABEL The GETLABEL instruction retrieves the code address of an EXTERNAL variable and stores it into a code LABEL pointer. Format: GETLABEL {extname}{sep}{exeptr} Where: {extname} Required. This parameter is a previously declared Character String Variable or Literal that contains the label name reference for an EXTERNAL declaration. {sep} Required. A comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, INTO. {exeptr} Required. This parameter is a previously declared code LABEL pointer. Flags: OVER Note: 1. The string label name specified in the {extname} parameter is the actual label name reference of the EXTERNAL statement. If the program was compiled with case sensitive labels and the program is being run by a runtime for case sensitive labels, the {extname} is processed with case sensitivity. 2. The OVER flag is set if label string does not match an EXTERNAL label name in the current program being performed. In addition, the OVER flag is set if {extname} is NULL or the string length is longer than 32 characters. 3. The OVER flag is also set if the {extname} is found but the load module for the EXTERNAL is not loaded. ............................................................ LOADLABEL The LOADLABEL instruction loads a code LABEL pointer from a list of Program code labels, LABEL pointers, and EXTERNAL labels. This instruction uses a numeric index to find and load the code program label into the destination. Format: LOADLABEL {extptr}{sep}{index}{sep}{prog-exe-list} Where: {exeptr} Required. This parameter is a previously declared code LABEL pointer that is loaded with the address of a program code label. {index} Required. A previously defined Numeric Variable or Expression used in selecting a Program code label that is loaded. {prog-exe-list} Required. A list of Program code labels, previously defined code LABEL pointers, or previously defined EXTERNAL variables. {sep} Required. A comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, INTO. Flags: None Note: 1. If the {index} value is less than 1 or greater than the total number of items in the {prog-exe-list}, the LOADLABEL instruction is ignored without any changes. 2. Additional lines may be used by ending each continued line with a colon (:). 3. If {index} is not a decimal integer, only the integer portion of the variable is used. For example, if it has a value of 3.6, 3 is used. 4. Null entries in the list are allowed and are signified by two commas with no label name between them. When the index value is associated with a null entry, LOADLABEL instruction is ignored without any changes. This feature allows a program to define a default LABEL pointer action that can be pre-defined before the LOADLABEL instruction is performed. 5. If the index value is associated with an EXTERNAL label reference, the LOADLABEL instruction automatically loads and resolves all external routines in the load module if the load modules is not previously loaded. This capability allows a program to only load the load modules that are referenced in the program on a demand basis. ............................................................ MOVELABEL The MOVELABEL instruction moves the program code label address for the source operand and stores it into the second operand which is a code pointer. Format: MOVELABEL {source}{sep}{exeptr} Where: {source} Required. A program Code label, previously defined code LABEL pointer, or previously defined EXTERNAL variable. {sep} Required. A comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, INTO. {exeptr} Required. This parameter is a previously declared code LABEL pointer. Flags: None Note: 1. If the {source} operand is a code LABEL pointer that is empty, the destination {exeptr} is also set to be empty. 2. If the {source} operand is an EXTERNAL label reference, the MOVELV instruction automatically loads and resolves all external routines in the load module if the load module is not previously loaded. ............................................................ MOVELV The MOVELV instruction moves the program code label address for the source operand and stores it into the second operand which is a Typeless VAR variable. Format: MOVELV {source}{sep}{typeless} Where: {source} Required. A program code label, previously defined code LABEL pointer, or previously defined EXTERNAL variable. {sep} Required. A comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, INTO. {typeless} Required. This parameter is a previously declared Typeless VAR pointer. Flags: None Note: 1. If the {source} operand is a code LABEL pointer that is empty, an F04 error occurs. 2. If the {source} operand is an EXTERNAL label reference, the MOVELV instruction automatically loads and resolves all external routines in the load module is the load module is not previously loaded. ............................................................ MOVEVL The MOVEVL instruction moves the pointer contents from a Typeless VAR pointer into a code LABEL pointer. Format: MOVEVL {typeless}{sep}{exeptr} Where: {typeless} Required. This parameter is a previously declared Typeless VAR pointer. {sep} Required. A comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, INTO. {exeptr} Required. This parameter is a previously declared code LABEL pointer that is loaded with the pointer contents from the {typeless} variable. Flags: None Note: 1. If the {typeless} does not contain a code program label address, a F05 error occurs. ............................................................ STORELABEL The STORELABEL instruction stores a program code address into a LABEL pointer that is selected from a list of code LABEL pointers. Format: STORELABEL {source}{sep}{index}{sep}{exeptrlist} Where: {source} Required. A program code label, previously defined code LABEL pointer, or previously defined EXTERNAL variable. {index} Required. A previously defined Numeric Variable or Expression used in selecting a code LABEL pointer from the list of LABEL pointer variables. {exeptrlist} Required. A list of previously defined code LABEL pointers. {sep} Required. A comma or one of the following prepositions: BY, TO, OF, FROM, USING, WITH, IN, INTO. Flags: None Note: 1. If the {index} value is less than 1 or greater than the total number of items in the {prog-exe-list}, the STORELABEL instruction is ignored without any changes. 2. Additional lines may be used by ending each continued line with a colon (:). 3. If {index} is not a decimal integer, only the integer portion of the variable is used. For example, if it has a value of 3.6, 3 is used. 4. Null entries in the list are allowed and are signified by two commas with no label name between them. When the index value is associated with a null entry, the STORELABEL instruction is ignored without any changes. This feature allows a program to define a default LABEL pointer action that can be pre-defined before the STORELABEL instruction is performed. 5. If the {source} operand is associated with an EXTERNAL label reference, the STORELABEL instruction automatically loads and resolves all external routines in the load module if the load modules is not previously loaded. ............................................................ TESTLABEL The TESTLABEL instruction validates a code LABEL pointer. Format: TESTLABEL {exeptr} Where: {exeptr} Required. This parameter is a previously declared code LABEL pointer. Flags: OVER Note: 1. The OVER flag is set if the {exeptr} LABEL is empty or if the {exeptr} LABEL code address is not valid for any of the currently loaded program including all load modules. Otherwise, the OVER flag is cleared. - Modified the 'zv' option to accept optional clarification values that can be used to identify label name conflicts with the PLB Condition Flag and Function Key names in enhanced expressions. The 'zv' option has been changed as follows: Format: -zv[{=|#|:}{0|1|2}] -zv Gives error for label declares that conflict with condition flag and function key names. -zv#0 Warning for expressions with a variable that overrides condition flag usage! -zv#1 Warning for expressions with a variable that overrides function key names. -zv#2 Warning for expressions with a variables that override either condition flag or function key names. - Added a new keyword named '*ADVSPOOLFILE95A' to the GETMODE and SETMODE instructions. The description for this keyword is as described in the runtime sections. The compiler supports this keyword as follows: SETMODE *ADVSPOOLFILE95A={nvar|ivar|dnum} GETMODE *ADVSPOOLFILE95A={nvar|ivar} - Modified the SETPROP instruction using a COLLECTION to support the support the named property syntax format using a leading '*" character. This syntax format can ONLY be used for NETCONTROL and NETOBJECT objects specified in a COLLECTION. When this syntax format is used, there is no change made for any other GUI objects that have been specified in the COLLECTION. Example: A NETCONTROL B NETCONTROL COL COLLECTION . CREATE A ... CREATE B ... ... LISTINS COL, A, B ... SETPROP COL, *AllowDrop="False" ;Only changes .NET objects ... - Modified the HTTP instruction to support new keywords. See the descriptions in the runtime section. The new keywords are defined as follows: *FILENAME={svarlit} ( Input ) *MAXDATASIZE={dnumnvar} ( Input ) *MAXTIMEOUT={dnumnvar} ( Input ) - Corrected a problem where a CALLS might generate program code (pcode) that would force reentrant runtime processing. Reentrant pcode for a CALLS would cause expected initialization for the parameters of a FUNCTION. Example of Program logic that caused the problem: . StartOfProgram CALL Main keyin "hit enter to exit:",s$cmdlin shutdown . Main function entry lText dim 80 . pack lText, "Some text..." calls "test" using lText . functionend . test function parm dim 80 ;Problem symptom was the 'parm' was NULL! entry . display "NULL 'parm' NOT EXPECTED!...:",*ll,parm,"<<<" . functionend . ------------------------------------------------------------------------------- PLBDBUG - Modified the debugger to support the code LABEL pointer. - Added a new command named 'DX '. This new command is only available when the 9.5B runtime is being used. The DX command displays the module name and program instruction pointer address for a code label, code LABEL pointer, or an EXTERN label reference. - Modified the 'DV' command for a GUI object to provide the RUNTIME property name when it is available. - A change has been made to the character debugger that forces a 'TP' variable to be updated in the Trace Point window when the variable is changed using a 'MV', 'MF', or 'ML' command. - Corrected a problem where a 'T' command had to be performed twice after a 'MV' command when the variable being changed by the 'MV' command was also specified as a 'TP' trace variable. With this correction, the 'T' command only needs to be performed once for this scenario. ------------------------------------------------------------------------------- SUNAAMDEX - Corrected a problem where the SUNAAMDEX utility could perform in an indeterminate or unexpected behavior if an OS error occurred accessing or reading the input data file. ------------------------------------------------------------------------------- PLBEQU.INC - Added the following HTTP *FLAGS bit mask values to the 'plbequ.inc' include file. $HTTP_FLAG_RAWCOMMAND INTEGER 4,"0x0001" $HTTP_FLAG_NOHEADER INTEGER 4,"0x0002" $HTTP_FLAG_JUSTHEADER INTEGER 4,"0x0004" $HTTP_FLAG_SSL INTEGER 4,"0x0008" $HTTP_FLAG_HTTP11 INTEGER 4,"0x0010" $HTTP_FLAG_RAW_RESULT INTEGER 4,"0x0020" ------------------------------------------------------------------------------- ODSBAC64.DLL - Corrected a problem where a 64 bit version of the driver was giving an unexpected 'not installed' error after the installation was completed. ------------------------------------------------------------------------------- SUNIDE - Corrected issue resolving includes when the compiler options included a -E# option (-E= alternate syntax) - Corrected updating of the files tab tooltip. - Made the option screens sizable and added help button. - Implemented alt key item selection of various dialogs. - Added dialog title bar icons. - Corrected the decoding of NetControls, NetObjects, and object pointers in the Browse Labels list. ------------------------------------------------------------------------------- EDITOR - 9.5B1 - Corrected an initialization problem created in 9.5B ------------------------------------------------------------------------------- SUNCS21.OCX - Suncs21.ocx: Corrected a syntax highlighting where if a comment line appeared in the middle of multiple line continuations, valid code was highlighted as a comment. ------------------------------------------------------------------------------- DBExplorer - Added PLB array import capability. - Added a note to the export data to a flat file dialog explaining that the starting position and length are required for each selected column. - Corrected exporting of data to a flat file from the SQL tab. - Corrected column selection when exporting data from the SQL tab. ` - Corrected showcut menu for SQL tab. - Corrected SQL syntax definitions in the editor. - Modified the column affinity check to default to string. ------------------------------------------------------------------------------- SchemaEditor - Added Elements column to the ViewEditor and View Columns panel. - Enabled listview AutoRedraw after column deletions. - Corrected display when editing columns. - Corrected enabling and disabling of menu items based on current content. - Added the ability to automatically maintain the column offset sequence when adding, updating, or deleting columns. - Corrected validation of column name when editing a column in a new view. - Corrected resetting of scale and element count when adding columns. - Corrected constraint issue when adding a column to an existing file. - Modified SQLIO column import from ODBC schema files to correctly set the SQL type to Integer or Decimal as required. - Added a view import function for SQLIO files to retrieve columns from previously defined views. - Corrected several display issues regarding files and columns. - Added a file import function for views to retrieve columns from previously defined SQLIO files. - Modified to support the prime key value (101) for the column unique value. - Corrected the setting of the SelectedView value when changing tabs between Views and SQLIO. - Corrected the initialization of form values when editing SQL columns. - Corrected the retrieval of form values when adding or updating SQL columns. - Corrected an issue in the tab control selection logic that could result in an F04 error. - Corrected display issues in the SQLIO file copy function. ------------------------------------------------------------------------------- REFORMAT - Corrected a problem with REFORMAT not working on files larger than 4 Gig. -------------------------------------------------------------------------------