Date: 11-12-2010 Subject: PATCH RELEASE 9.4D Runtime Files These release notes pertain to the following programs or files: PLBCLI 9.4D 12 Nov 2010 9,4,4,600 PLBCLICON 9.4D 12 Nov 2010 9,4,4,500 PLBCLIENT 9.4D 12 Nov 2010 9,4,4,500 PLBCLINET 9.4D 12 Nov 2010 9,4,4,500 PLBCON 9.4D 12 Nov 2010 9,4,4,500 PLBCONET 9.4D 12 Nov 2010 9,4,4,500 PLBNET 9.4D 12 Nov 2010 9,4,4,500 PLBRUN 9.4D 12 Nov 2010 9,4,4,600 PLBSERVE 9.4D 12 Nov 2010 9,4,4,500 PLBSERVET 9.4D 12 Nov 2010 9,4,4,500 (Threaded Server) PLBWIN 9.4D 12 Nov 2010 9,4,4,500 SUNINDEX 9.4D 12 Nov 2010 9,4,4,500 SUNINDEX64 9.4D 12 Nov 2010 9,4,4,500 SUNSORT 9.4D 12 Nov 2010 9,4,4,500 SUNSORT64 9.4D 12 Nov 2010 9,4,4,500 ODSBAC32.DLL 9.4D 12 Nov 2010 PLBNETSUP.DLL 9.4D 12 Nov 2010 9,4,4,500 Required for PLBNET PLBWSEC.DLL 9.4D 12 Nov 2010 9,4,4,500 Req'd PLBWIN/PLBNET SA_DLL32.DLL 9.4D 12 Nov 2010 9,4,4,500 SUNCS21.OCX 9.4D 12 Nov 2010 ADMIN.PLC 9.4D 12 Nov 2010 DBEXPLORER.PLC 9.4D 12 Nov 2010 DESIGNER.PLC 9.4D 12 Nov 2010 EDITOR.PLC 9.4D 12 Nov 2010 PLBCMP.PLC 9.4D 12 Nov 2010 PROFILER.PLC 9.4D 12 Nov 2010 SUNIDE.PLC 9.4D 12 Nov 2010 ADMEQU.INC 9.4D 12 Nov 2010 *============================================================================== Notes for DOCUMENTATION: - In the PL/B Language Reference manual, change the DIVIDE instruction for the Note (3.) to read as follows: 3. If a source operand is equal to zero, the OVER Condition Flag is set (TRUE). The destination variable is determined as follows: If the source operand is an INTEGER and the destination variable is a FORM, the destination variable is set to the largest number possible by filling the variable with all '9' numeric characters. If the source operand is a FORM variable without a decimal point and the destination variable is a FORM, the destination variable is set to the largest number possible by filling the variable with all '9' numeric characters. If the source operand is a FORM variable with a decimal point and the destination variable is a FORM, the destination variable is set to a zero value. If the source operand is an INTEGER variable and the destination variable is an INTEGER, the destination variable is set to a zero value. If the source operand is a FORM variable and the destination variable is an INTEGER, the destination variable is set to a zero value. - Add a U60 error described as follows: "U60 - A divide operation with a zero divisor has been executed." - Change the keyword names in the Sunbelt PL/B Runtime Reference as follows: PLBWIN Keywords and PLBUNIX Environment Variables sections Change the PLB_FMALTIP keyword name to be PLB_DMALTIP. The older name PLB_FMALTIP is supported for legacy usage. Change the PLB_FMCHILDRECOVERY keyword name to be PLB_DMCHILDRECOVERY. The older name PLB_FMCHILDRECOVERY is supported for legacy usage. Also, note that the runtime supports an older alternate keyword named PLB_CHILDRECOVERY that provides the same functionality. Change the PLB_FMKEEPALIVE keyword name to be PLB_DMKEEPALIVE. The older name PLB_FMKEEPALIVE is supported for legacy usage. - Add the following subcode error description for the I23 error: "43: It is invalid to have more than one file variable in a FILELIST opened to the same ISI/AAM file." - Add the following subcode error values for the U46 error that reflect communication errors between a Plbserve server and a Plbclient. 101 - Error receiving message at Plbserve from Plbclient. 102 - Plbserve hard shutdown command executed. 103 - Error un-compressing a Plbclient message at the Plbserve server. 104 - Error sending a message to a Plbclient while flushing a buffer. 105 - Error sending a message to a Plbclient while flushing an implode buffer. 106 - Error sending a message to a Plbclient while flushing a cache list buffer. 107 - Error sending a message to a Plbclient during an EventQueue operation. 108 - Error sending a message to a Plbclient during an EventCheck operation. 109 - Error sending a message to a Plbclient during an EventWait operation. - For the FILL instruction, add the following note: 5. The FILL instruction ignores any Numeric Variables that are encountered in the {dest} list. The basic operation of the FILL instruction is only meant to manipulate a Character String variable. The ability to compile a Numeric Variable into a FILL {dest} list was ONLY provided for situations where both Character String variables and Numeric Variables exist in the same RECORD or VARLIST. In this case, the FILL operation is executed for any Character String variables and any Numeric Variables are ignored. - Add the following note for the READ instruction for AFILE, FILE, and IFILE variable types. n. When reading a data field into a FORM variable, any non-leading white space characters read are converted to zero characters. This read IO behavior exists because this was the legacy behavior that existed for the original Databus IO read instructions. As an example, if the data being read is 's1s2s3', where the 's' character is a white space, Then the resulting FORM variable value would be 's10203'. This read IO behavior is the default for Sunbelt runtimes. For runtime versions 9.4D or later, this behavior can be changed using the PLB_ANSIIO runtime keyword or the SETMODE *PLBANSIIO keyword to force a FORMAT error when non-leading white space characters are encountered. *============================================================================== The following files have been changed as noted: ------------------------------------------------------------------------------- PLBSERVE - Added two new keywords for the SETMODE that are named *CEUSERNAME={svar} and *CECOMPUTERNAME={svar}. The intended use of these keywords is to allow the computername and username for a Windows CE runtime or client modules to be temporarily assigned/used in a PLB program. This is needed because the Windows CE runtimes/clients do not use a computername or username from the Windows CE OS. These keywords are described as follows: *CECOMPUTERNAME={svar} When using a PLBWCEPK or PLBWCENE runtime, the string for this keyword is used to specify a computername that is used by the CE runtime. Otherwise, the computername used by the runtime is either a default name 'PocketPC' or it is a name specified by an INI keyword named 'PLBCE_COMPUTERNAME={name}'. When using a PLBSERVE runtime that is accessed by a Windows CE PLBCLIENT module, the string for this keyword is used to specify a computername that is temporarily assigned/used by a program that is executing at the PLBSERVE server. *CEUSERNAME={svar} When using a PLBWCEPK or PLBWCENE runtime, the string for this keyword is used to specify a username that is used by the CE runtime. Otherwise, the username used by the runtime is either a default nulled name or it is a name specified by an INI keyword named 'PLBCE_USERNAME={name}'. When using a PLBSERVE runtime that is accessed by a Windows CE PLBCLIENT module, the string for this keyword is used to specify a username that is temporarily assigned/used by a program that is executing at the PLBSERVE server. ------------------------------------------------------------------------------- PLBCLINET - Modified to detect the Application Server version before sending GUI event result data. This change is to insure that the client module can properly execute with Application Server versions older than the 9.4D release. - Modified to properly swap message fields for event results when accessing a Application Server that is executing on a Big Endian platform. ------------------------------------------------------------------------------- PLBSERVE, PLBCLIENT, PLBCLICON, PLBCLINET - In patch release 9.4C, a change was made to the EVENTINFO instruction to support key state information when an event occurred. This change worked as expected when a 9.4C Application Server was being accessed by a 9.4C client module. However, this change caused a problem when either the client module or the Application Server was executing a 9.4C version and the other associated component was using an older version. A symptom of this problem was that an unexpected O105 error could occur after a GUI GUI user event with an argument (arg) parameter was processed. Corrections have been applied to both the 9.4D client and server components to insure that they can properly execute with older versions when processing GUI user event information. ------------------------------------------------------------------------------- PLB(UNIX), PLBSERVE(UNIX) - Modified the INDEX instruction to use the input extension when initializing the output extension to a default if the 'C' compact mode is being used. This change is to insure proper operation executing under a Unix OS. Otherwise, a compact operation could fail to be executed. ------------------------------------------------------------------------------- PLBWIN, PLBNET - Modified the runtimes to give a debug log named when the startup message is presented to the end-user when using the '-d3' option. The startup message now reads as follows: "Debug log file created. (plbwin.log)" - Modified the runtimes to give a profile log named when the startup message is presented to the end-user when using the '-d5' option. The startup message now reads as follows: "Profile log file created. (Profile_nnnn.log)" Where the 'nnnn' value is a process identification number. - Corrected a GPF error that might occur when a runtime was terminating as a NT Service and the PLB_SERVICE_RESTART keyword was set to ON. This GPF error would not affect any operations in a PLB program since the runtime was in the final stage of terminating. However, an unexpected plbwin.gpf file would be created. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX) - Modified the processing for any expressions in PLB structured logic to always zero out any intermediate results that are evaluated from a divide operation with a zero divisor value. Recognizing that any divide by zero in an expression can cause unexpected results, this change does help to clarify the operation of any given divide operation without regard to whether a divisor operand has a decimal point or not. Prior to this change the expression divide by zero results would change depending on whether the divisor had a decimal point or not. Example of problem: PRDRTL FORM 4.2 PRDNUM FORM 2 RES FORM 2 clear prdrtl clear prdnum IF ( ( PRDRTL / PRDNUM ) > "0" ) ALERT STOP, "Unexpected result from divide by zero", RES ELSE ALERT STOP, "Acceptable result from divide by zero", RES ENDIF - Added a new keyword name *STRICTMATH={nvar} for the GETMODE and SETMODE instructions. When this keyword is set to a non-zero value, the runtime executes divide operations in a strict math mode. When the strict math mode is being used, a U60 error is generated when a divide by zero operation is executed in a PLB program. The strict math mode is being implemented to eliminate any situations where unpredictable/unexpected results can occur because of bad data and/or PLB logic. - Added two new keywords for the GETMODE that are named *COMPUTERNAME={svar} and *USERNAME={svar}. These keywords are described as follows: *COMPUTERNAME={svar} When using a PLBWIN, PLBNET, or PLB(Unix) runtime, this keyword returns the current computer name assigned to the system where the runtime is being executed. When using a PLBSERVE runtime, this keyword returns the current computer name assigned to the system where the client module is being executed. *USERNAME={svar} When using a PLBWIN, PLBNET, or PLB(Unix) runtime, this keyword returns the current user name that is being used at the system where the runtime is being executed. When using a PLBSERVE runtime, this keyword returns the current user name that is being used at the system where the client module is being executed. - A new instruction named 'HTTP' has been implemented. This instruction can be used to directly access Web Servers using HTTP communications. [label] HTTP {HostName},{ResourcePath}[,{options}] Where: label Optional. A Program Execution Label. HostName Required. A previously defined Character String Variable or literal that contains the host name or IP address of a Web Server that is being accessed. An example of a host name is 'www.sunbelt-plb.com'. The port number is not specified as ResourcePath Required. A previously defined Character String Variable or literal that contains the resource path and optional query string data that is appended to the {HostName} to formulate a HTTP command that is sent to a Web Server. The default HTTP command is sent as a 'GET' using the {HostName} plus the {ResourcePath} string. If the *POSTMESSAGE option is used, the HTTP command is sent as a 'POST' with the *POSTMESSAGE data appended to the {ResourcePath} string. Options Optional. One or more of the options described below. Flags Affected: ZERO, EOS, OVER Note the following: 1. The {options} that may follow the required operands are: Options with descriptions: *ERROR={svar} (Output parameter) This optional parameter specifies a Character String variable that receives any error information returned by the HTTP instruction. If this parameter is not specified, error information is stored in the S$ERROR$ variable. The EOS flag is set if the error information has to be truncated when it is stored into the {svar} variable. *FLAGS={dnumnvar} (Input parameter) This optional parameter is a numerical value that is a bitmask to control specialized behaviors for the execution of the HTTP instruction. The following bitmask definitions can be used: 0x00000001 - The HTTP instruction executes in a raw HTTP command data mode. In this case, the command data for the instruction is used exactly as specified by the application for the {HostName} and the {ResourcePath} data. In this case, the application must specify the {ResourcePath} with the appropriate GET, HEAD, or POST command plus the appropriate ResourcePath data required to access a Web Server. If this bitmask state is not used, the default action by the HTTP instruction is to prepend the appropriate HTTP command as GET, HEAD, or POST to the ResourcePath data. If this bitmask state is used and the end-user specifying the HTTP/1.1 protocol, then the HTTP command should specify the "Connection: close" request-header field in the request message. This is needed because the HTTP instruction does not support a persistent socket connection. 0x00000002 - When this bit is set, the HTTP instruction does not return any HTTP header information for the data retrieved from a Web Server. 0x00000004 - When this bit is set, the HTTP instruction uses the HTTP HEAD command to only retrieve the HTTP header information from a Web Server. 0x00000008 - When this bit is set, the HTTP instruction executes using the SSL (Secure Sockets Layer) to access a Web Server using a secured communications connection. 0x00000010 - When this bit is set, the HTTP instruction includes the HOST request-header and the Connection request-header fields in the HTTP request message. The HOST request-header field MUST be included in all HTTP/1.1 request messages. The Connection request-header field is included because the HTTP instruction does not support a persistent socket connection. This bit is only used when the 0x00000001 bit mask (i.e. Raw data mode bit) is NOT used. *PORT={dnumnvar} (Input parameter) This optional parameter specifies the port number used when logging on to the Web Server. If this parameter is not specified, the default port number of eighty (80) is used when the SSL mode is not being used and the port number of (443) is used when the SSL mode is being used. *POSTMESSAGE={svarlit} (Input parameter) This optional parameter specifies a Character String variable or a String literal that contains data that is to be sent using a HTTP POST command. *HTTPLENGTH={nvar} (Output parameter) This optional parameter specifies a Numeric variable that returns the value as specified by the 'Content-Length:' field that is returned in the HTTP header. If the value to be stored in the {nvar} is too large and must be truncated, the OVER flag is set. *HTTPRESULT={svar} (Output parameter) This optional parameter specifies a Character String variable that only receives the result that was sent by the Web Server as a response to the HTTP command. A normal expected result may be a string '200 OK'. The EOS flag is set if the data stored into the {svar} is too large and it has to be truncated. *HTTPTYPE={svar} (Output parameter) This optional parameter specifies a Character String variable that returns the 'Content-Type:' field that is returned in the HTTP header that was received from the Web Server. As an example, the 'Content-Type:' field may return the string as 'text/html'. The EOS flag is set if the data stored into the {svar} is too large and it has to be truncated. *RESULT={svar} (Output parameter} This optional parameter specifies a Character String variable that returns data received from the Web Server that is being accessed. The data put into this variable may be filtered as controlled by the *FLAGS bitmask value. The EOS flag is set if the data stored into the {svar} is too large and it has to be truncated. *RESULTLENGTH={nvar} (Output parameter) This optional parameter specifies a Numeric variable that returns the total number of characters that have been returned from the Web Server that is being accessed. This value includes all of the characters received including the header data as well as the data count for the body. If the value to be stored in the {nvar} is too large and must be truncated, the OVER flag is set. *SUNDM={svarlit} (Input parameter) This optional parameter specifies a Character String variable or a String literal that specifies the URL or IP address and port number for a Sunbelt Data Manager. When this keyword is specified, the HTTP instruction logs onto a Data Manager and the HTTP command is executed by the Data Manager. Examples: "127.0.0.1" "127.0.0.1:3934" When the *SUNDM keyword is being used, parameters for the HTTP instruction support two tags specified as '' or ''. The '' and '' data for a tag replaces the data of a HostName, ResourcePath, or *PostMessage parameter in the HTTP instruction. The '' tag is used to specify an environment variable name that exists in the SUNDM CFG file. The data string for the specified environment variable is substituted into a HTTP instruction parameter that contains the tag. The '' tag is used to specify the name for a file located at the Data Manager that contains the data string to be substituted into the parameter that contains this tag. The support for these embedded tags have been implemented to maximize the ability to configure the HTTP operations when using the Data Manager. When the '' or '' tags are used, they must be specified as the first data in keyword data string. Note: A. The '' tag must be followed by a keyname that is appended to a prefix named 'HTTP_'. A full keyword named 'HTTP_keyname' is used to find the keyword in the SUNDM CFG file. The data specified by the 'HTTP_keyname' keyword is retrieved and used for the given HTTP parameter that includes the 'keyname' tag. The 'HTTP_keyname' keywords must be placed in the 'environment' section of the SUNDM CFG file. B. The '' tag must be followed by a name that identifies a file whose data is to be read and substituted for the HTTP parameter that includes the 'filename' tag. The filename supports the normal PLB $Macro and Datapoint style name formats the same as a PLB OPEN instruction. The file identified by the filename must be located at the Data Manager server. C. The '' or '' tag substitution can ONLY be used for the HostName, ResourcePath, and the *PostMessage parameters in the HTTP instruction. D. Example of '' and '' tag substitution for HTTP: [Environment] ( SUNDM CFG file ) HTTP_Movies=movies.yahoo.com HTTP_All=GET /showtimes-tickets/all/?location=Tyler+TX Sample HTTP using tag substitution: HTTP "Movies": "All": *Result=D1000 In this example, the '' tags are being used to retrieve the HostName and ResourcePath parameters from the SUNDM CFG file. *TIMEOUT={dnumnvar} (Input parameter) This optional parameter specifies the timeout value used when communicating with the Web Server. If this parameter is not specified, the default timeout of five (5) seconds is used. There are no restrictions placed on the value specified. 2. The flags are used for the HTTP instruction has follows: ZERO The ZERO flag is set to a TRUE state when the HTTP instruction has successfully been completed. Otherwise, the ZERO flag is cleared to indicate that the HTTP instruction detected an error. EOS The EOS flag is set to a TRUE state if any of the options that returns a string has truncated the data. Otherwise, this flag is cleared. OVER The OVER flag is set to a TRUE state if any of the options that returns a numeric value has truncated the numeric data value because a numeric variable was too small. Otherwise, this flag is cleared. 3. When the ZERO flag is cleared to indicate an error for the execution of the HTTP instruction, then an error code is stored in the variable specified by the *ERROR keyword. Otherwise, the error code is stored in the S$ERROR$ runtime variable. The following error codes can occur: Error Code Meaning... 1 Insufficient memory to execute HTTP instruction. 2 Unable to perform initialization required for socket operations. 3 Unable to open a socket. 6 Unable to resolve hostname into an IP address. Bad host name specified. 7 Unable to create a socket connection. 8 Unable to logon to a SunDM Data Manager. 9 The Data Manager that is being accessed does not provide HTTP support. 10 There was a timeout that exceeded 180 seconds when the HTTP instruction was being executed Data Manager. 11 An invalid message was received from the Data manager as a response when the HTTP instruction was being executed a the Data Manager. 12 The or parameter substitution failed for the HTTP HostName parameter. 13 The or parameter substitution failed for the HTTP ResourcePath parameter. 14 The or parameter substitution failed for the HTTP *PostMessage parameter. 15 A socket error occurred while sending a HTTP request to a Web Server. 16 A socket error occurred in a select operation while waiting to receive a response from a Web Server. 17 A timeout occurred while waiting to receive a response from a Web Server. 18 A receive error was detected when executing a select operation while waiting to receive a response from a Web Server. 19 A socket error occurred when a receive operation was executed as a response from a Web Server was being processed. 20 A socket operation was lost while receiving a response from a Web Server. 21 A selection operation failed while waiting to receive a response from a Web Server. This error was not a socket error. 22 It is invalid to execute a HTTP instruction with a HostName parameter that has a zero length. 23 Unable to locate/open the 'OpenSSL library required to provide SSL support. 24 Unable to connect a SSL socket. EXAMPLE: Code using HTTP to perform default GET access: Response DIM 1000 HostName INIT "tycho.usno.navy.mil" ResourcePath INIT "/cgi-bin/timer.pl" RichEdit RICHEDITTEXT . CREATE RichEdit=1:25:5:75, BDRSTYLE=2, SCROLLBAR=1 ACTIVATE RichEdit . HTTP HostName: ResourcePath: *RESULT=Response ;Response from server SETPROP RichEdit, TEXT=Response . LOOP EVENTWAIT REPEAT EXAMPLE1: Code using HTTP executing in RAW command data mode. Response DIM 1000 HostName INIT "tycho.usno.navy.mil" ResourcePath INIT "GET /cgi-bin/timer.pl /HTTP/1.0",0x0A,0x00A RichEdit RICHEDITTEXT . CREATE RichEdit=1:25:5:75, BDRSTYLE=2, SCROLLBAR=1 ACTIVATE RichEdit . HTTP HostName: ResourcePath: *FLAGS=1: ;Execute in Raw command mode *RESULT=Response ;Response from server SETPROP RichEdit, TEXT=Response . LOOP EVENTWAIT REPEAT - Modified the ISAM support in the PLB runtimes to automatically compact an ISI file when a PLB IO operation is executed where an ISAM key is to be inserted into the ISI tree structure. This change is being implemented to minimize the impact on end-user applications where an I62 error could be encountered as the PLB program is adding keys to an ISI file. The automatic ISI compact action can occur in any of the following PLB IO instructions for ISAM. WRITE IFILE INSERT IFILE WRITE FILELIST UPDATE FILELIST Note: 1. Since all of the PLB instructions that can invoke a compact action are guaranteed to have an enqueue lock applied, any other end-user applications with a pending lock on the text file associated with the ISI file will wait until the compact action is completed. 2. The automatic ISI compact action is implemented as the default behavior by the PLB runtimes. The runtime keyword named 'PLB_AUTOISICOMPACT={on|off}' can be used to define the default behavior to be implemented. If this keyword is not specified, the default behavior is the same as being set to 'ON'. If this keyword is set to 'ON', the automatic ISI compacting is enabled for all IFILE variables. If this keyword is set to 'OFF', the runtime does not perform any automatic ISI compacting action unless the IFILE variable is opened using a new CMP_ISICOMPACT mode bit value. 3. Two new bit mask values have been added for the MODE option for an OPEN and PREPARE of an IFILE variable. The new MODE bit mask values have been implemented as follows: CMP_ISICOMPACT 0x00008000 Enable ISI compacting for the specific IFILE variable. CMP_NOISICOMPACT 0x00010000 Disable ISI compacting for the specific IFILE variable. If both the CMP_ISICOMPACT and CMP_NOISICOMPACT bit mask bits are set to a zero bit value or to a one bit value, the runtime uses the current default behavior that is being used by the runtime for the compacting action. - Modified the FILELIST IO processing to insure that all of the AFILE/IFILE variables in the FILELIST are using unique ISI/AAM physical disk files. If a DELETE, UPDATE, or WRITE IO instruction for a FILELIST is executed where any two file variables in the FILELIST variables are using the same ISI/AAM file, then an I23 subcode 43 error occurs. - Modified the FILELIST UPDATE processing to give an appropriate IO error when a key to be deleted can not be found. - Modified the 'Pn{=|#}{c}' option for the INDEX and SORT instructions to explicitly allow the {c} character to be bounded by double quotes. This change ONLY allows a single character for the {c} character to be specified between the double quotes characters. This change is being made because versions 9.1 and earlier implicitly allowed double quotes even though double quotes have never been explicitly supported or documented. Example of changes: index "x.txt, x.isi,l10 -p3###"X#", 5-10" index "x.txt, x.isi,l10 -p3=#" #", 5-10" index "x.txt, x.isi,l10 -p3=#"#"#", 5-10" index "x.txt, x.isi,l10 -p3=#"ab#", 5-10" ;ERROR expected! - Added a new runtime keyword named 'PLB_ANSIIO={on|off}'. This keyword can be used to change the runtime IO behaviors to comply with the PL/B ANSI standard. At the initial implementation of this keyword, the following IO behavior is being changed when this keyword is set to the 'on' state: 1. For any READ instruction that is transferring record data into a FORM variable in a FILE, AFILE, or IFILE variable list, a FORMAT error is generated if the record data contains non-leading white space characters. - Added a new keyword named '*PLBANSIIO={nvar}' for the GETMODE/SETMODE instructions. This keyword allows the current runtime state for the runtime 'PLB_ANSIIO' keyword to be accessed/changed under program control. See the description for the 'PLB_ANSIIO' runtime keyword for more information. It should be noted when accessing a Data Manager that the SETMODE *PLBANSIIO keyword MUST be set before the executing program logs onto the Data Manager. The current runtime state for the *PLBANSIO keyword is ONLY used during the logon process and the Data Manager usage can not be changed until the next time that a logon is performed after all of the managed files have been closed. - Corrected a problem for a WRITE AFILE that could cause either a GPF or indeterminate data to be put into a record. This problem could possibly occur for record sizes larger than 2048 bytes. - Corrected a problem where a READKG or READKGP instruction with a filter applied could return duplicate records to the end-user program. - Corrected a problem where a 'SETMODE *DMKEEPACTIVE=0' operation did not work. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE - Modified the COMOPEN for the Windows runtimes to allow the serial ports COM1 to COM15 to be opened. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, ALL GUI CLIENTS - Added a new keyword named '*EDITDATETIME={nvar}' for the GETMODE/SETMODE instructions. When this keyword is set to a value of 1, any EDITDATETIME object is created with an edit state that causes the control to be initialized with the UTC time only when the TEXT property for the control is set to a null DIM string. The keyword value of 1 is used to force a legacy runtime behavior before any 9.4D changes were made. When this keyword is set to a value of 2, any EDITDATETIME object is created with the same behavior as described for the value of 1 and additionally, the EDITDATETIME object is initialized to the UTC time when the object is created. When this keyword is set to a value of 0, the EDITDATETIME object is always initialized with the current workstation local time. The new default behavior for the EDITDATETIME object is the same as when the value is 0. - Modified the EDITDATETIME object to support a 'UtcMode' method. This method is used to cause the EDITDATETIME object to be initialized with the UTC time or the current workstation local time. The following new method has been added to an EDITDATETIME object to to initialize the object with the UTC time or the current workstation local time. ------------------------------------------------------------------------- . UtcMode Method for EDITDATETIME object . The UtcMode method initializes the EDITDATETIME object to the UTC time or the current workstation local time. This method uses the following format: [label] {object}.UtcMode [GIVING {return}]: USING [*VALUE=]{mode} Where: label Optional. A Program Execution Label. object Required. A EDITDATETIME object that is created. return Optional. A Numeric Variable that receives the current UTC state flag value that is being used for the EDITDATETIME object. mode Optional. A Numeric Variable or decimal value that specifies the the new UTC state value to be applied to the EDITDATETIME object. 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 EOS Condition Flag is always cleared (FALSE). 3. The OVER Condition Flag is set if the {return} variable it too small to receive the method result without truncation. 4. The {mode} value can be specified as 0, 1, or 2 with the following action: {mode} Expected Action 0 The UTC state is turned off and the EDITDATETIME object is initialized to the current workstation local time. 1 The UTC state is turned on and the EDITDATETIME object is initialized to the UTC time only when the SETPROP TEXT property is set to a null DIM string. 2 Same action as for value 1. This value is only used to set the EDITDATETIME state to a value that reflects an original UTC state that existed when an EDITDATETIME object was created. - Added a new method named 'GetColumnOrderArray' for the LISTVIEW object. This method retrieves the indices for the current column order and returns the indices in a DIM variable as a comma delimited string. The following new method has been added to a LISTVIEW object to retrieve the current left-to-right order of the columns. ------------------------------------------------------------------------- . GetColumnOrderArray Method for LISTVIEW object . The GetColumnOrderArray method retrieves the indices for the current left-to-right order of the columns. All of the indices are returned in a single DIM variable as a comma delimited string. This method uses the following format: [label] {object}.GetColumnOrderArray GIVING {return} Where: label Optional. A Program Execution Label. object Required. A LISTVIEW object that is created. return Optional. A Character String Variable that contains a comma delimited string of column indices. Flags Affected: EOS, OVER, ZERO Note the following: 1. If {return} variable is too small to contain the delimited string, the EOS flag is set TRUE. Otherwise, the EOS is set FALSE. 2. The ZERO and OVER Condition Flags are always cleared (FALSE). - Modified the *Options parameter for the SaveCSVFile method of a LISTVIEW object to allow the CSV data to be stored in the current left-to-right order for the columns. The following option bit mask value has been added. $LV_CSVWR_ORDERARRAY 0x80 Output the data using the current left-to-right column order. If this bit mask value is not specified, the default output is ordered using the columns as created. - Modified the *Options parameter for the GetItemTextAll method of a LISTVIEW object to allow the data to be returned in the current left-to-right order for the columns. The following option bit mask value has been added. $LV_GETITEM_ORDERARRAY 0x80 Return the data using the current left-to-right column order. If this bit mask value is not specified, the default is to return the data using the column order as created. ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Added a new keyword named '*RESETCOPIES={nvar}' for the GETMODE/SETMODE instructions. When this keyword is set to a non-zero value, this invokes a behavior in the PLB runtimes to force the 'Number of Copies' found in a print dialog to be reset to a value of 1 when the dialog is activated. Otherwise, the 'Number of Copies' found in a print dialog can remain set to the last entry made by an end-user. - Modified the SetImageList method to force a repaint of the TOOLBAR object. This corrects a problem where a SetImageList method for a TOOLBAR might not repaint the toolbar buttons using a newly connected imagelist. - Modified the EDITTEXT and RICHEDITTEXT objects to update their windows when the PASSWORDCHAR property is changed using the SETPROP instruction. - Modified the PANEL object to allow an Advanced Print Preview window to created in the PANEL object window. This support can be used by executing new PANEL object methods. The execution of the Panel Print Preview methods causes a Print Preview window to be created and used in a similar manner as a PRTPLAY instruction. The following new methods have been added to a PANEL object to provide the PANEL Advanced Print Preview support. ------------------------------------------------------------------------- . PrtPreviewOpen Method for PANEL object . The PrtPreviewOpen method creates an Advanced Print Preview window on the PANEL object window. This method uses the following format: [label] {object}.PrtPreviewOpen [GIVING {return}]: USING [*SPOOLFILE=]{spoolfile}[: [*PRINTERNAME=]{printername}][: [*STARTPAGE=]{startpage}][: [*GOTOPAGE=]{gotopage}][: [*ENDPAGE=]{endpage}][: [*ZOOM=]{zoom} Where: label Optional. A Program Execution Label. object Required. A PANEL object that is created. return Optional. A Numeric Variable that indicates the success or failure of the method. spoolfile Required. A Character String Variable or literal that specifies the file name that contains the spool file to be used when creating the print preview window in the {object}. This spool file MUST have been previously created as the output from an Advance Print operation. printername Optional. A previously defined Character String Variable or literal that contains a printer name that is used to determine the print characteristics for the print preview window. startpage Optional. A Numeric Variable or decimal value the specifies the beginning physical page that is page one in the Print Preview presentation. If this option is not specified, page one defaults to the first physical page generated from the spool file that is being used. gotopage Optional. A Numeric Variable or decimal value that specifies the first page presented from the print preview page set being used. The {gotopage} value should be between one and the last logical page being reviewed endpage Optional. A Numeric Variable or decimal value that specifies the ending physical page that is the last page in the Print Preview presentation. If this option is not specified, the last page defaults to the last paged generated from the spool file that is being used. zoom Optional. A Numeric Variable or decimal value that specifies the initial zoomed state for the Print Preview window that is created on the PANEL window. The {zoom} value can be specified as a value equal to or greater than zero. If the {zoom} value is specified as zero, the Print Preview window is created to best fit within the PANEL window. If the {zoom} value is greater than zero, the numeric value specifies a percentage used to zoom the Print Preview window. The {zoom} value can be specified as a value of zero or as a value in the range of 10 to 400 percent inclusive. Flags Affected: EOS, OVER, ZERO Note the following: 1. If the value returned is zero, the ZERO (or EQUAL) Condition Flag is set (TRUE). The returned value is zero if the method was executed successfully. Otherwise, the returned value is a non-zero value that indicates that the method failed. 2. The EOS Condition Flag is always cleared (FALSE). 3. The OVER Condition Flag is set if the {return} variable it too small to receive the method result without truncation. 4. If the PANEL object is created with scrollbars, the operation of the scrollbars is taken over by the Advanced Print Preview window to control the scrolling of the print page that is being viewed within the PANEL object. 5. If the autofit mode is being used, the Advanced Print Preview window is automatically scaled to give the best fit in the PANEL window when the PANEL window is resized. ------------------------------------------------------------------------- . PrtPreviewAction Method for PANEL object . The PrtPreviewAction method performs specialized actions to manipulate and control the Advanced Print Preview window that has been created on a PANEL object window. This method uses the following format: [label] {object}.PrtPreviewAction [GIVING {return}]: USING [*ACTION=]{action}: [*VALUE=]{value} Where: label Optional. A Program Execution Label. object Required. A PANEL object that is created. return Optional. A Numeric Variable receives either the success/failure of the method or receives the result of an action inquiry that returns numeric data as per the action being executed. action Required. A Numeric Variable or decimal value that specifies the action to be executed for the Advanced Print Preview window that is created on the PANEL object window. value Required. A Numeric Variable or decimal value that is used to clarify the specific operation for the {action} being executed. 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 EOS Condition Flag is always cleared (FALSE). 3. The OVER Condition Flag is set if the {return} variable it too small to receive the method result without truncation. 4. The following {action} values are supported for this method: {Action} {Value} $PPA_GotoPage EQU 1 Numeric value The {value} specifies a page number that is to be presented in the Advanced Print Preview window on the PANEL window. The {value} is specified as a one based number. $PPA_NextPage EQU 2 Not Used $PPA_PrevPage EQU 3 Not Used $PPA_FirstPage EQU 4 Not Used $PPA_LastPage EQU 5 Not Used $PPA_ZoomIn EQU 6 Not Used The Advanced Print Preview window zooms in by increments of 25% each time this method is executed. $PPA_ZoomOut EQU 7 Not Used The Advanced Print Preview window zooms out by increments of 25% each time this method is executed. $PPA_Scale EQU 8 Numeric value specifying a percent. If the {value} is specified as zero, the Advanced Print Preview window is set to perform the autofit mode where the print page is scaled to best fit the PANEL window. If the {value} is specified as a positive number, the value specifies a percent by which the print page is scaled within the PANEL window. $PPA_GetInfo EQU 9 Numeric value specifying command The {value} identifies the data to retrieved from the Advanced Print Preview that has been created on a PANEL object window. The following {value} are supported. {value} Data Returned 1 Return the current page number 2 Return the first page number 3 Return the last page number 4 Return the position for the horizontal scrollbar. 5 Return the maximum position for the horizontal scrollbar. 6 Return the position for the vertical scrollbar. 7 Return the maximum position for the vertical scrollbar. 8 Return the current scaling factor for the Advanced Print Preview window. $PPA_SetHorzPos EQU 10 Numeric value of position The {value} is the new position for the horizontal scrollbar. $PPA_SetVertPos EQU 11 Numeric value of position The{value} is the new position for the vertical scrollbar. $PPA_SetKeystroke EQU 12 Numeric value of key stroke The{value} is a virtual keystroke value that is applied to the Advanced Print Preview window. The following values are supported: {value} Keystroke Behavior 1 VK_UP Move up one line 2 VK_DOWN Move down one line 3 VK_LEFT Scroll left 4 VK_RIGHT Scroll right 5 VK_PRIOR Move up one page 6 VK_NEXT Move down one page ------------------------------------------------------------------------- . PrtPreviewClose Method for PANEL object . The PrtPreviewClose method closes a Advanced Print Preview window that has been created on a PANEL object window. This method uses the following format: [label] {object}.PrtPreviewClose [GIVING {return}]: Where: label Optional. A Program Execution Label. object Required. A PANEL object that is created. return Optional. A Numeric Variable receives either 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). The returned value is zero if the method operation is successful. Otherwise, the returned value is non-zero. 2. The EOS Condition Flag is always cleared (FALSE). 3. The OVER Condition Flag is set if the {return} variable it too small to receive the method result without truncation. - Modified the WINDOW and PANEL objects to not repaint static objects like PICT, STATTEXT, LINE, SHAPE...etc when the parent object is being resized to be smaller. This change is to minimize flickering. - Corrected a problem where the DEACTIVATE of a COLLECTION was leaving a WINDOW visible when any of the WINDOW’s children objects were in the COLLECTION list before the WINDOW object. - Corrected a problem where a hot-key action to change a TOOLBUTTTON pressed state was not changing the TOOLBUTTON appearance if the TOOLBUTTON already existed in a pressed state from a mouse click action. This problem existed when a TOOLBUTTON style was set to be $TBSTYLETOGGLE or $TBSTYLETOGGLEGRP. - Corrected a problem where the STATTEXT data was being truncated when the ALIGNMENT property was set to right position and the USEALTKEY property was set FALSE. - Corrected a problem where an EDITDATETIME object was being initialized to UTC time rather than the current workstation local time when the SETPROP TEXT property was being set to a null DIM string. Likewise, using the SETITEM to set an EDITDATETIME object to a null DIM string was changed to correct the same problem. This change is being made to cause the expected behavior as documented in the PLB Language Reference manual. WARNING: This corrective action is changing the default behavior when an EDITDATETIME object is being set to a null DIM string. If an end-user application requires the use of the UTC time, then the SETMODE *EDITDATETIMEUTC keyword can be used or a method named 'UtcMode' for an EDITDATETIME object can be used to force the UTC time to be set into the control. - Corrected a problem for an EDITNUMBER object where the up/down buddy control actions did not honor the ALLOWMINUS property when it was set to be TRUE and UPDOWNMAX/UPDOWNMIN properties were set to include negative values. - Corrected problem where a LINE object was not being painted properly when the parent of the LINE object was being resized. - This corrects a problem where a LABELTEXT object was getting the focus when a user was using the tab key to step through the objects on a form. Even though the LABELTEXT object is created with a Windows window, this object should not receive the focus for a PLB program. - Corrected a GPF error that would occur if the DATA property was specified with a single data item without a terminating ';' character and the size of the input data was larger than 40960 bytes. In this case, the GPF error would occur if the DATA property was used in a CREATE or SETPROP instruction. - Corrected a GPF error that would occur in a GETITEM instruction if a single datalist item had a size larger than 40960 bytes. It should be noted that any one datalist item with a size larger than 40960 is not expected nor recommended. Visual presentation issues occurs when any one datalist item has a size larger than 32762 bytes. If a single datalist item has a size larger than 40960 bytes, the GETITEM instruction does not return any data. - Corrected GPF error that could occur when a GUI object creation error occurred on a objects only form. - In release 9.4C, a change was made to a PRTOPEN instruction that allowed the {jobname} string size to support up to 100 characters. Unfortunately, this change caused the header for a spool file to become larger. The increased size for the spool file header caused two problems as follows: 9.4C Spool file Header Problems: 1. Any spool file created by a 9.4C runtime used the larger header size. In this case, any spool file created by the 9.4C runtime CAN NOT be opened/used by any runtime versions before the 9.4C release. 2. The 9.4C runtimes CAN NOT open/use any spool files that have been created by a runtime version before the 9.4C release. The operation behavior changes for use of advanced print spool files in the 9.4C release were not intended. Therefore, the 9.4D patch release has been changed to correct the unexpected operation behaviors as follows: 9.4D Spool file Usage to correct 9.4C problems: 1. The 9.4D runtimes can open/use any spool files created before the 9.4D version. This includes advanced print spool files created by 9.4C or any previous runtime versions. 2. If a PRTOPEN {jobname} string size is larger than 50 characters, the 9.4D runtimes create an advanced spool file that requires a larger spool file header. In this case, the spool file header version is changed to identify a newer version. With this change, any 9.4D spool file with the larger {jobname} string size CAN NOT be opened/used by any previous runtime versions including the 9.4C version. 3. If a PRTOPEN {jobname} string size is less than or equal to 50 characters, the 9.4D runtimes create an advanced spool file that has a size/format that is consistent to any runtimes that existed prior to the 9.4C release. This change allow spool files with smaller {jobname} string sizes to be opened/used by older runtimes except for the 9.4C runtime. 4. Unfortunately, since the 9.4C runtime problems caused unexpected results when opening/using advanced spool files, any advanced spool file created by the 9.4D runtime CAN NOT be opened/used by a 9.4C runtime. ------------------------------------------------------------------------------- PLBNET, PLBCLINET - Corrected a problem where the ACCEPTTAB property was not being set for a NETCONTROL using a SETPROP COLLECTION instruction when the NETCONTROL was in a COLLECTION. ------------------------------------------------------------------------------- PLB(UNIX) - Corrected a problem for a Unix runtime where the *T timeout control did not work for a KEYIN. This change was originally made in release 9.3C. However, the change was mistakenly lost for all following versions until the 9.4D patch release. ------------------------------------------------------------------------------- PLBCMP.PLC - Added the *STRICTMATH keyword for the GETMODE/SETMODE instructions. - Modified the SETPROP instruction to support enhanced array processing. When the target {object} for the SETPROP is an array that does not specify an explicit element, the compiler generates the necessary logic to cause the execution of the SETPROP to be repeated for all of the objects in the array. Example: ARR BUTTON (3) I FORM 1 APPEAR INTEGER 4,("1"),("2"),("1") . FOR I, 1, 3 PACK S$CMDLIN, "TEST",I CREATE ARR(I)=(I*2):((I*2)+1):5:20, TITLE=S$CMDLIN REPEAT . SETPROP ARR, APPEARANCE=APPEAR, VISIBLE=1 . - Modified the compilation processing of a method instruction for the runtime GUI objects to give a warning for comments that terminate the instruction when the comments are not clearly identified. By default, a comment that terminates a method instruction is determined to be clearly identified when the start with any one of the following character(s): ';' period '+' plus ';' semicolon '//' forward slash sequence In addition, the compiler '-zr' command line option can be used to specify the instruction comment delimiters. The '-zr' delimiters are used to identify the instruction comments and the method instruction warning is not given by the compiler. Example: X LISTVIEW RES FORM 5 . X.FindItem GIVIN RES ;New warning is expected for 'GIVIN' that ;has been misspelled. X.FindItem GIVING RES: USEING 1 ;New warning is expected for 'USEING' ;that has been misspelled. X.FindItem GIVING RES *Start=1 ;New warning expected because ;of missing USING preposition. X.FindItem GIVING RES 1 ;New warning is expected because USING ;preposition is missing. - Modified to support the EDITDATETIMEUTC keyword for the GETMODE/SETMODE instructions. - Added the compiler directives named 'MGIVING', 'MUSING', and 'MNULL' to support macro operations that required evaluation of the input parameters. The description of these new macro directives is a follows: -------------------------------------------------------------------------- . MGIVING . The MGIVING compiler directive indicates whether a macro parameter is specified as the string 'giving'. This directive uses the following format: MGIVING(macroparam) Where: macroparam Required. A currently valid {param} label reference for a MACRO definition replacement parameter. Flags Affected: NONE Note the following: 1. This directive is only valid when used in a %IF, CIF, %ELSEIF, or CELSEIF directive that exists in the body of a MACRO. 2. To be processed, a directive operator requires an exact syntax format. 3. When the valid syntax is detected, this operator and parameter label reference are replaced in the conditional directive source line a single numeric zero or one as follows: Value The replacement string... 0 was not specified as 'giving'. 1 was specified as 'giving'. Example code: MDELM " " MMODE BLANKON . $TestMacro MACRO &P1="", &P2="" . %IF MGIVING(&P1) . DISPLAY "P1 is specified as 'giving'" . %IF MNULL(&P2) Parameter Error...: second parameter is required! %ELSE DISPLAY "P2 has been specified as a parameter" %ENDIF . %ELSE . DISPLAY "P1 is NOT specified as 'giving'" . %ENDIF . MEND . ......................................................... $TestMacro ......................................................... $TestMacro giving ......................................................... $TestMacro giving S$CMDLIN ......................................................... -------------------------------------------------------------------------- . MUSING . The MUSING compiler directive indicates whether a macro parameter is specified as the string 'using'. This directive uses the following format: MUSING(macroparam) Where: macroparam Required. A currently valid {param} label reference for a MACRO definition replacement parameter. Flags Affected: NONE Note the following: 1. This directive is only valid when used in a %IF, CIF, %ELSEIF, or CELSEIF directive that exists in the body of a MACRO. 2. To be processed, a directive operator requires an exact syntax format. 3. When the valid syntax is detected, this operator and parameter label reference are replaced in the conditional directive source line a single numeric zero or one as follows: Value The replacement string... 0 was not specified as 'using'. 1 was specified as 'using'. Example code: MDELM " " MMODE BLANKON . $TestMacro MACRO &P1="", &P2="" . %IF MUSING(&P1) . DISPLAY "P1 is specified as 'using'" . %IF MNULL(&P2) Parameter Error...: second parameter is required! %ELSE DISPLAY "P2 has been specified as a parameter" %ENDIF . %ELSE . DISPLAY "P1 is NOT specified as 'using'" . %ENDIF . MEND . ......................................................... $TestMacro ......................................................... $TestMacro using ......................................................... $TestMacro using "second" ......................................................... -------------------------------------------------------------------------- . MNULL . The MNULL compiler directive indicates whether a macro parameter is specified as a null literal. This directive uses the following format: MNULL(macroparam) Where: macroparam Required. A currently valid {param} label reference for a MACRO definition replacement parameter. Flags Affected: NONE Note the following: 1. This directive is only valid when used in a %IF, CIF, %ELSEIF, or CELSEIF directive that exists in the body of a MACRO. 2. To be processed, a directive operator requires an exact syntax format. 3. When the valid syntax is detected, this operator and parameter label reference are replaced in the conditional directive source line a single numeric zero or one as follows: Value The replacement string... 0 was not specified as a NULL literal. 1 was specified as literal. Example code: $TestMacro MACRO &P1="", &P2="" . %IF MNULL(&P1) . %IF MNULL(&P2) DISPLAY "P1 and P2 are both NULL" %ELSE DISPLAY "P1 is null and P2 is not null" %ENDIF . %ELSEIF MNULL(&P2) . DISPLAY "P1 not null and P2 is NULL" . %ELSE . DISPLAY "P1 and P2 are both NOT NULL" . %ENDIF . MEND . ......................................................... $TestMacro ......................................................... $TestMacro "First" ......................................................... $TestMacro "First", "Second" ......................................................... $TestMacro , "Second" ......................................................... - Modified the MACRO replacement processing to allow a comment that is specified using the '//' comment identifier or a user specified delimiter (-zr option) to terminate the input parameters used as replacement values. This change helps resolve issues that could be encountered where a comment was being used as a replacement string in a macro by mistake. Example of change: MDELM " " MMODE BLANKON . MyMacro MACRO &P1="", &P2="" . . macro code... . MEND . MyMacro "param1" //This is a comment . MyMacro "param1", //This is a comment . MyMacro "param1" ;This is a comment if '-zr="; "' is used - Corrected a problem where the compiler was not giving a compilation error for the following ACTIVATE statement syntax forms: Compilation Error is expected for the following ACTIVATE statements: LV LISTVIEW LVARR LISTVIEW (5) RES FORM 10 ... ACTIVATE LV.Routine,RES ACTIVATE LV TO Routine WITH RES. ACTIVATE LV TO Routine WITH RES: ACTIVATE LVARR(2).Routine, RES - Corrected a problem where an unexpected compilation error would occur for a MAILSEND instruction when an *OPENSSL option was used more than one MAILSEND instruction. ------------------------------------------------------------------------------- SUNINDEX.EXE - Modified the 'Pn{=|#}{c}' option for the SUNINDEX and SUNSORT utilities to explicitly allow the {c} character to be bounded by double quotes. This change ONLY allows a single character for the {c} character to be specified between the double quotes characters. This change is being made because versions 9.1 and earlier implicitly allowed double quotes even though double quotes have never been explicitly supported or documented. Example of changes: sunindex x.txt, x.isi,l10 -p3#"X", 5-10 sunindex x.txt, x.isi,l10 -p3=" ", 5-10 sunindex x.txt, x.isi,l10 -p3=""", 5-10 sunindex x.txt, x.isi,l10 -p3="ab", 5-10 ;ERROR expected! - Modified the SUNINDEX utility to use the input extension when initializing the output extension to a default if the 'C' compact mode is being used. This change is to insure proper operation executing under a Unix OS. Otherwise, a compact operation could fail to be executed. ------------------------------------------------------------------------------- ADMEQU.INC - Added the following equates: $ADMITEMSRVREPID 134 $ADMITEMSRVREPSTATE 135 ------------------------------------------------------------------------------- ODSBAC32.DLL - Modified the date and timestamp format masks to support an encoded year format 'ZZ'. The [date mask] description has been changed as follows: The [date mask] is comprised of up to 25 characters, that must include the following special characters: ZZ or yy or yyyy - 2 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 [date mask] is 'mm-dd-yy' The [timestamp mask] description has been changed as follows: The [timestamp mask] is comprised of up to 25 characters, that must include the following special characters: ZZ or 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 '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. Encoded Data Calculated year 00 - 1900 ... 99 - 1999 A0 - 2000 ... A9 - 2009 B0 - 2010 ... The default [timestamp mask] is 'yyyymmddhhnnss' ------------------------------------------------------------------------------- SA_DLL32.DLL - Modified for 'P/S' option changes that affect the SA_SORT and SA_INDEX operations. See runtime changes for information. ------------------------------------------------------------------------------- ADMIN.PLC - Added two new server data types for the ADMGETINFO instruction. The two server data types are defined as follows: $ADMITEMSRVREPID 134 This data item returns the current replication identification for a Data Manager. If the returned value is zero, the Data Manager is executing as a Primary Server when replication is enabled. If the returned value is non-zero, the Data Manager is executing as a Secondary/Backup Server. $ADMITEMSRVREPSTATE 135 This data item returns the current replication state value for a Data Manager. The following replication states can be returned: 0 = Replication is Not Active 1 = Replication is Starting 2 = Secondary is waiting for Primary 3 = Secondary is contacting Primary 4 = Secondary is synchronizing with Primary 5 = Server is online as Secondary 6 = Primary Communication Failure 7 = Automatic Rollback to Primary replication server 100 = Primary is waiting for Secondary 101 = Server is online as Primary when $ADMITEMSRVREPID value is zero. 101 = Server is online as Rollover Primary when the $ADMITEMSRVREPID is non-zero. ------------------------------------------------------------------------------- DBEXPLORER.PLC - Added a preview function to the flat file import. Columns with invalid data are shown in red. - Modified the flat file import to catch syntax errors and suggest the user try the import function rather than reporting the invalid SQL. - Modified the SQL execution routine to retrieve the correct number of lines from the edit buffer. - Added checks for blank lines in SQL statements. - Modified the PLB import logic to compute decimal sizes correctly. - Corrected handling of constraint failures during data modification. - Initialized the up/down maximum value and number of integer digits for fields with no specifications. - Corrected the add new data row logic. - Added logic to synchronize the treeview when navigating the tables, columns, indexes, views, and triggers listviews using the arrow keys. - Added support for column names containing spaces in indexes. - Corrected the display of available columns during index editing. - Corrected issues with data addition. - Added log entries to the error report. - Added a Tools menu function to email a log report to Sunbelt. - Corrected an issue with editing flat data export columns and lengths. - Added an "email using SSL" option. ------------------------------------------------------------------------------- DESIGNER.PLC - Corrected retrieval of ActiveX control standard properties. - Modified the moving and selecting logic. - Added a TreeView node collection editor. - Corrected an issue in the removal of empty code blocks logic. - Corrected the initial state of the single or full edit mode switch. - Corrected an issue regarding the deletion of child objects. - Corrected an issue regarding the flagging of a redirected load event's local or remote status during form open - Corrected an issue with event renaming during paste operations. - Corrected an issue with setting a combobox WIDTH property. - Corrected an issue regarding the WINBORDER property. - Corrected an issue where the designer mistakenly thought a change in the form name was an attempt to create an array. - Corrected an issue with the setting of the default object text for array objects. - Corrected the spurious addition of a blank before the #S in the code section of the form. - Corrected several issues regarding array element event registrations. - Corrected export to PLS output when generating object arrays. - Corrected the generation of exported code. - Added a printpage inclusion file designer. - Added logic to prevent the current working directory from being changed by various open dialogs such as picture selection for the image property. - Added SSL replication emailing option. - Open Backup Form menu and toolbar function added. - Corrected an issue in retrieving some ActiveX object properties and events. - Corrected an issue with recreating tab controls that contained tab images. ------------------------------------------------------------------------------- SUNIDE.PLC - Corrected a Browse Labels bug where the wrong object type could be displayed in the VarType column. ------------------------------------------------------------------------------- PROFILER.PLC - Corrected an I22 and O105 error on exit. ------------------------------------------------------------------------------- SUNCS21.OCX - Modified scroll bar handling so you can not scroll the entire contents off the screen. This eliminates the extra area at the bottom of the scrollbar that you couldn't move the scroll position into when working with small source files. ------------------------------------------------------------------------------- EDITOR.PLC - Added logic to default to Courier New font if the font for the editor cannot be used for printing. - Added designer code management routines - Printer setup dialog automatically check "Selection" box if there are selected lines in the editor. -------------------------------------------------------------------------------