Date: 08-09-2013 Subject: RELEASE 9.6B Runtime Files These release notes pertain to the following programs or files: EMBEDINI 9.6B 09 Aug 2013 9,6,2,500 EMBEDINI64 9.6B 09 Aug 2013 9,6,2,500 HEXDUMP 9.6B 09 Aug 2013 9,6,2,500 HEXDUMP64 9.6B 09 Aug 2013 9,6,2,500 MAKECLI 9.6B 09 Aug 2013 9,6,2,500 MAKECON 9.6B 09 Aug 2013 9,6,2,500 MAKECONET 9.6B 09 Aug 2013 9,6,2,500 MAKEDEF 9.6B 09 Aug 2013 9,6,2,500 MAKEMFD 9.6B 09 Aug 2013 9,6,2,500 OBJMATCH 9.6B 09 Aug 2013 9,6,2,500 OBJMATCH64 9.6B 09 Aug 2013 9,6,2,500 ODBCINST64 9.6B 09 Aug 2013 9,6,2,500 PLBCGI 9.6B 09 Aug 2013 9,6,2,500 PLBCLICON 9.6B 09 Aug 2013 9,6,2,500 (ComCtl 6) PLBCLIENT 9.6B 09 Aug 2013 9,6,2,500 (ComCtl 6) PLBCLINET 9.6B 09 Aug 2013 9,6,2,500 (ComCtl 6) PLBCON 9.6B 09 Aug 2013 9,6,2,500 (ComCtl 6) PLBCONET 9.6B 09 Aug 2013 9,6,2,500 (ComCtl 6) PLBDSIGN 9.6B 09 Aug 2013 9,6,2,500 (Discontinued) PLBNET 9.6B 09 Aug 2013 9,6,2,500 (ComCtl 6) PLBSERVE 9.6B 09 Aug 2013 9,6,2,500 PLBSERVET 9.6B 09 Aug 2013 9,6,2,500 (Threaded Server) PLBWIN 9.6B 09 Aug 2013 9,6,2,500 (ComCtl 6) SETGUID 9.6B 09 Aug 2013 9,6,2,500 SETUPCE 9.6B 09 Aug 2013 9,6,2,500 SUNAAMDX 9.6B 09 Aug 2013 9,6,2,500 SUNAAMDX64 9.6B 09 Aug 2013 9,6,2,500 SUNINDEX 9.6B 09 Aug 2013 9,6,2,500 SUNINDEX64 9.6B 09 Aug 2013 9,6,2,500 SUNLS 9.6B 09 Aug 2013 9,6,2,500 SUNMOD 9.6B 09 Aug 2013 9,6,2,500 SUNMOD64 9.6B 09 Aug 2013 9,6,2,500 SUNSORT 9.6B 09 Aug 2013 9,6,2,500 SUNSORT64 9.6B 09 Aug 2013 9,6,2,500 WININST 9.6B 09 Aug 2013 9,6,2,500 PLBCLICON5 9.6B 09 Aug 2013 9,6,2,500 (ComCtl 5) PLBCLIENT5 9.6B 09 Aug 2013 9,6,2,500 (ComCtl 5) PLBCLINET5 9.6B 09 Aug 2013 9,6,2,500 (ComCtl 5) PLBCON5 9.6B 09 Aug 2013 9,6,2,500 (ComCtl 5) PLBCONET5 9.6B 09 Aug 2013 9,6,2,500 (ComCtl 5) PLBNET5 9.6B 09 Aug 2013 9,6,2,500 (ComCtl 5) PLBWIN5 9.6B 09 Aug 2013 9,6,2,500 (ComCtl 5) ODSBAC32.DLL 9.6B 09 Aug 2013 ODSBAC64.DLL 9.6B 09 Aug 2013 PLBNETSUP.DLL 9.6B 09 Aug 2013 9,6,2,500 Required for PLBNET PLBWSEC.DLL 9.6B 09 Aug 2013 9,6,2,500 Req'd PLBWIN/PLBNET SA_DLL32.DLL 9.6B 09 Aug 2013 9,6,2,500 SUNWADO.DLL 9.6B 09 Aug 2013 9,6,2,500 SUNWADO25.DLL 9.6B 09 Aug 2013 9,6,2,500 SUNWADO28.DLL 9.6B 09 Aug 2013 9,6,2,500 SUNWMSQL.DLL 9.6B 09 Aug 2013 9,6,2,500 SUNWODBC.DLL 9.6B 09 Aug 2013 9,6,2,500 SUNWSRV.DLL 9.6B 09 Aug 2013 9,6,2,500 DBEXPLORER 9.6B 09 Aug 2013 DESIGNER 9.6B 09 Aug 2013 EDITOR 9.6B 09 Aug 2013 PLBCMP 9.6B 09 Aug 2013 PLBDBUG 9.6B 09 Aug 2013 SCHEMAEDITOR 9.6B 09 Aug 2013 SUNIDE 9.6B 09 Aug 2013 WATCH 9.6B 09 Aug 2013 ADMEQU.INC 9.6A 08 Mar 2013 PLBEQU.INC 9.6A 08 Mar 2013 PLBMETH.INC 9.6B 01 Aug 2013 PLBCLI.ZIP 9.6B 09 Aug 2013 9,6,2,600 (ComCtl 6) PLBRUN.ZIP 9.6B 09 Aug 2013 9,6,2,600 (ComCtl 6) *============================================================================== The following files have been changed as noted: ------------------------------------------------------------------------------- PLBSERVE - Corrected a problem that would cause indeterminate errors including a S16 error when a PRTCLOSE used an option and the output was occurring at the PLBCLIENT workstation. - Corrected a problem for Application server child recovery failure caused by a partial receive resulting in a protocol failure. - Correct a GPF if an enhanced copyfile output was sent to a Data Manager from an application server. - Corrected problems when the PDF output was being generated at the system where PLBSERVE was executing for the following scenarios: 1. The PLB application closed the PFILE using a PRTCLOSE that specified the 'DIALOG=1' option. In this case, the PDF output was being truncated resulting in an invalid PDF format. Also, the PDF file could be left opened. 2. The PLB application did not execute a PRTCLOSE to close a PFILE being used to output to a PDF file. In this case, the PDF output was being truncated resulting in an invalid PDF format. Also, the PDF file could be left opened. - Corrected problems for a GETFILE PFILE instruction when the PFILE was used to output a PDF file at\local to the system where the PLBSERVE Application Server was executing. When one of the following keywords was used for a PFILE opened for PDF output at the server, the PLBCLIENT application could execute in an indeterminate manner including a possible GPF crash. ATTRIBUTES COMMENT DATATYPE DRIVERNAME HDC LOCATION PORTNAME PRINTNAME PRTBINNAMES PRTBINTYPES PROCESSOR SERVERNAME SHARENAME Note: 1. The specified GETFILE PFILE keywords are not supported when the PFILE output is to a PDF file that is at\local the PLBSERVE server system. ------------------------------------------------------------------------------- PLBCLIENT, PLBCLICON, PLBCLINET - Modified the PLBCS_CACHEDIR keyword for the Windows clients to allow a UET tag to be specified at the beginning of this keyword's data string. The UET tag must be specified using the format identified as '' or '?keyword?'. In both of these UET tag formats, the syntax requires the '<' and '>' characters or the '?' character around the keyword. In this case, the 'keyword' name MUST exist so it can be retrieved from the client's UET (i.e. User Environment Table). This change is being implemented to allow the clients to be configured to put any cached data into the Windows APPDATA system directory for a logged on user. Example of PLBCLIENT INI using UET tab substitution: [Environment] PLBCS_CACHEDIR=\clientcache When the client executable detects the PLBCS_CACHEDIR UET tag as described, the client retrieves the current APPDATA keyword data for the currently logged on user and replaces the UET tag in the PLBCS_CACHEDIR string. The resulting string is resolved as follows: "c:\users\Edward\AppData\Roaming\clientcache" Note: 1. The client executable DOES NOT perform any interpretation of the PLBCS_CACHEDIR other than to replace a properly formatted UET tag with the existing UET keyword data string. 2. If a properly formatted UET tag keyword can not be found in the UET, the UET tag remains in the PLBCS_CACHEDIR string. In this case, the resulting PLBCS_CACHEDIR is an invalid Windows OS directory name which can not be accessed or created. This method is used to prevent extraneous cache directories from being created because of a typing error for a keyword. The result is that the client caching is disabled. Example when a UET tag keyword is NOT found: [Environment] PLBCS_CACHEDIR=\clientcache When the client retrieves this PLBCS_STRING, the UET tag keyword is retrieved and it is NOT found in the UET. In this case, the UET tag remains in the PLBCS_CACHEDIR data string unchanged. The resulting string resolves as follows: "\clientcache" 3. If the client executable finds an invalid UET tag, the UET tag is NOT removed from the resulting PLBCS_CACHEDIR string. Example of invalid UET tags: [Environment] PLBCS_CACHEDIR=' tag delimiter. PLBCS_CACHEDIR=<>\clientcache In this case, there is no UET tag keyword. 4. The user is responsible for insuring that the UET tag format and that the keyword is available in the UET so it can resolve to a valid directory on the user workstation. The normal use of the UET tag substitution is to provide a means of specifying that an OS UET keyword can be substituted to give a properly formed OS directory path. For the Windows OS, the possible OS keywords that might be used are defined as follows: [Environment] Multiple examples: PLBCS_CACHEDIR=\mydir PLBCS_CACHEDIR=?LOCALAPPDATA?\mydir PLBCS_CACHEDIR=\mydir PLBCS_CACHEDIR=?TMP?\mydir 5. The UET tag keywords are ONLY retrieved from the OS UET. The UET tag keywords are NOT retrieved from an INI file. 6. The '?' character can be used in placed of the '<' and '>' characters that encapsulate the keyword. The '?' character is available because some installation products do not accept the '<' and '>' characters as output to an INI file. ------------------------------------------------------------------------------- PLB(UNIX), PLBSERVE(UNIX) - Modified the COMCHECK for Unix platforms to eliminate an unnecessary 1 second delay when the state mask byte for the write-enabled is being checked for a socket connection. ------------------------------------------------------------------------------- PLBWIN - Created a new install file called PLBWINR that can be used to install the portion of the software that is redistributable to your customers. This only applies to PLBWIN and certain files that are required for it to run. ------------------------------------------------------------------------------- PLBWIN, PLBNET - Corrected a problem that would cause a GPF error when the PLB Designer attempted to load a PLF that was severely corrupted or truncated. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX) - Modified GETFILE to give a U15 error to prevent an unexpected GPF error when an unknown keyword is encountered. - Modified the SQLIO to open a SQL VIEW. A SQL VIEW must be created by a SQL administrator before it can be opened by PLB SQLIO operations. - Modified the PAUSE instruction to allow the decimal digits specified in a FORM variable to be used for suspending program execution. This change allows program suspension periods less than 1 second to take affect. Note: 1. If a Unix OS is used that does not have APIs available to suspend a program for a period of time less than 1 second, then the PAUSE seconds value is truncated. Example: MS_100 FORM ".100" . PAUSE MS_100 //100 milliseconds or .1 seconds PAUSE ".1" //100 milliseconds or .1 seconds - Modified the DISPLAY *W=var control to allow the decimal digits specified in a FORM variable to be used for suspending program execution. This change allows program suspension periods less than 1 second to take affect. Note: 1. If a Unix OS is used that does not have APIs available to suspend a program for a period of time less than 1 second, then the DISPLAY *W=var seconds value is truncated. Example: MS_100 FORM ".100" . DISPLAY *W=MS_100; //100 milliseconds or .1 seconds - Modified the file information reported for an error that has occurred for an IO operation at the Data Manager to clarify the client IP address and include the Sundm IP address. Prior to this change, the file error information was being reported only with the client IP which could cause confusion. Example of extended file error data using CLOCK ERROR: I03 00000022*2 myfile.txt | 12.34.56.78 ( Client IP: 98.76.54.32 ) Where: 12.34.56.78 - Sundm IP address 98.76.54.32 - Client IP address resolved by the Data Manager for client the is logged on. This IP address can be used to evaluate Data log data entries. - Modified the SQLIO support for OPEN and PREP instructions to support a new MODE bit definition named CMP_NOSQLIO. This new MODE bit value is described as follows: CMP_NOSQLIO 0x00200000 If this bit value is specified in the MODE bit mask values, the PREPUSESQL and OPENUSESQL keywords are not used for the FILE, IFILE, or AFILE being opened or prepared. This bit mask value also applies to the SETMODE PREPUSESQL and OPENUSESQL keywords. - Modified the SQLIO native table support to allow SQL primary keys to be configured and composed from multiple SQLIO columns. The description of the prime keys can be found in the PL/B Language Reference manual under the SQLIO Schema File Format section for the tag. - Modified the SQLIO operations for WRITE instructions to use the configuration setting of a column to determine if an all blank field is to be inserted into a SQL table or not. If a SQLIO column is configured to enable the column attribute, the WRITE instructions do not insert a column whose data is all blanks. More information on this behavior can be found in the PL/B Language Reference manual under the 'SQLIO PLB Language Changes' for the WRITE instruction. - Modified the SQLIO schema format_mask usage for WRITE operations to only use\extract the date and time mask components without verifying other existing mask characters. Prior to this change, the SQLIO date data written had to exactly match all format_mask data specified in the format_mask string. Example using SQLIO Mask for SQL_DATE: YYYY/MM/DD wrtDate INIT "2013-07-25" rdDate DIM 30 . . This SQLIO WRITE does not verify the '-' characters! . WRITE FILE, $0$;wrtDate . . This SQLIO READ formats the SQL Date data to the format mask! . READ FILE, $0$;rdDate . . Result in 'rdDate' is: . . rdDate --> '2013/07/25' . - Modified the SCHEMA, SETMODE *SQLSCHEMADB, and SETMODE *SQLTABLEDB instructions to allow a database connection string to be specified with all of the connection information required by SQLIO. See the documentation description of these instructions for more details. - Modified the MAILSEND instruction to support a new keyword named '*ERRORLIST={svar}'. When the '*ERRORLIST' keyword is specified for a MAILSEND instruction, any {sendto}, *BCC, or *CC email address that is rejected by the SMTP mail server is stored into the {svar} DIM variable. Also, when the '*ERRORLIST' keyword is specified, the MAILSEND instruction continues to executed until all email addresses are processed. In this case, the email message is sent to any email addresses that are accepted by the SMTP mail server and any email addresses that are rejected are stored into the {svar} DIM variable specified by the '*ERRORLIST' keyword. Option Meaning *ERRORLIST={svar} All email addresses rejected by the SMTP mail server are stored in the {svar} variable. The MAILSEND instruction attempts to send every email address specified in {sendto}, *CC, and *BCC. The rejected email addresses are stored along with the Mnn error data in {svar}. The rejected email address is separated from the Mnn data using a comma (,) character. Multiple rejected email addresses are separated by a semi-comma (;) character. Format of *ERRORLIST data: ",Mnn Subcode: sss[; ,Mnn Subcode: sss OsError: ooo[; ...]]" Example of *ERRORLIST data: "myemail@mailserver.com,M03 Subcode: 44" Note: 1. The MAILSEND *ERRORLIST ONLY returns the email addresses that are rejected by the SMTP mail server. The MAILSEND instruction does not evaluate nor attempt to qualify any email address formats that are being provided by the end-user application. - Added a new keyword named 'SQLIORECORDS={nvar}' for the GETFILE and SETFILE instructions. The SQLIORECORDS keyword can be used to fetch or change the 'RECORDS' attribute. When using the SETFILE to set the SQLIORECORDS keyword, the new 'RECORDS' attribute takes affect when the current cached record set is exhausted or a READ by key operation is executed. - Added a new keyword named 'PDFNAME={svar}' for a PFILE variable using a GETFILE instruction. This keyword returns the name of the file name used for the PDF output of the PFILE. - Corrected an I62 error for an IFILE where an excessive number of IFILE WRITE and DELETE operations could cause the isam tree level to overflow. When the isam tree level overflow occurred, the runtimes starting with changes made in release 9.4D would invoke an internal ISI compact operation. After, the internal ISI compact operation, the program execution could become indeterminate depending on whether the ISI file had existing free sectors or not. The symptoms of this tree level overflow problem could result in an I37, I60, or I62 error to occur. - Corrected a problem when an IFILE was opened in EXCLUSIVE mode where an automatic internal ISI compact operation would not execute when trying to recover from an I62 error. The symptom of this problem is that an I62 could not be resolved using an automatic internal ISI compact operation before this correction. - Corrected a problem where the "GETFILE IFILE, TREELEVEL=nvar" returned an invalid value when the IFILE was opened in EXCLUSIVE mode. - Corrected a problem where the INDEX instruction was not removing two temporary files when the '-r' option was being used. - Corrected a problem where the INDEX instruction could cause indeterminate program execution when the '-c' compact option was being used. - Corrected a problem for Data Manager child recovery failure caused by a partial receive resulting in a protocol failure. - Corrected a problem where a '-' character was being put into the the {device} parameter of a PRTOPEN instruction when the {device} was set to a 'pdf:' printer device name. This problem was causing a program DIM variable or literal to be changed unexpectedly after a PRTOPEN instruction was executed as described. - Corrected a problem where a 'PRTPAGE *FONT=font' did not give an O105 error when the font object had not been created. Previous to this corrective change, a S17 subcode 0 was occurring when the PRTPAGE output was a PDF file. Also, previous to this correct change, the PRTPAGE was unexpectedly substituting a 'Courier New' font when the font object was not created and the output was to a Windows printer device. Now with this corrective change, an O105 occurs when a non-created font object is used in a PRTPAGE instruction whether the output is for a PDF file or not. - Corrected a problem where an escaped character specified in a FILTER data string was not being processed as expected for a non-LIKE operation. This change allows the following filter expression to be processed as expected: FILTER X, "Name = 'abc\'def'" Note: 1. The backslash forcing character is only used to force a single quote ('), a double quote ("), or a backslash (\) character for a FILTER expression. In all other instances of the escape character, it is assumed that the backslash is to be included and not used to force the next character. 2. This same backslash forcing character behavior is used for a non-LIKE operations used for READ XFILE filtered operations. - Corrected a GPF error when a FPOSITA instruction is executed using SQLIO for a SQL native table. With this change a FPOSITA now gives an I29 error with a subcode of 51 when a FPOSITA is executed for a SQLIO native table. - Corrected a problem for SQLIO where a write operation of a binary '0x0a' character could be written into the SQL table column data at the point where a variable length record EOR was expected. Inclusion of the binary '0x0a' character in the SQL table could cause unexpected interpretation of the SQL table data by 3rd party SQL applications. With the changes implemented in version 9.6B to eliminate the '0x0a' character, a PL/B SQLIO read operation now returns a full record as configured by the schema definitions. Blanks are returned for any column data that does not contain any SQL data. - Corrected a GPF problem for SQLIO when a TRANSACTION ROLLBACK operation was executed. - Corrected an I61 error for a DELETE IFILE operation on a Unix platform when the ISI data byte order is different than the platform executing the PLB program with the DELETE IFILE instruction. - Corrected a problem where an ISI could be corrupted when a DELETE IFILE was performed and the ISI file required the data byte order to be changed (i.e. reversed data byte order). This could occur only if the .ISI file data byte order was different from the runtime platform byte order. - Corrected a problem where the SQL View types of SQL_DATE, SQL_TIME, and SQL_DATETIME did not work as expected when using the Data Manager. - Corrected a problem where the data alignments in the Sunbelt PDF output were not properly calculated when generic font substitution was being used. - Corrected a problem that could result in indeterminate results when an array label reference without an index was used in a CLEAR instruction that had a list of variables to be cleared. One of the symptoms of this problem could be a GPF. - Modified the DBEXECUTE, DBSEND, DBFETCH, DBFETCHP, and SET instructions to prevent indeterminate results that can occur if an array reference without an index is used in the variable lists. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE (Windows) - Modified the default setting when the PLBWIN_XPIO keyword is NOT used to enable end of file validating when executing on a Windows XP system. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, ALL GUI CLIENTS - Upgraded the SQLite engine to version 3.7.17. - The Sunbelt PDF support has been implemented such that the PDF printed output to a printer is expected to be the same as printing directly to the printer without using a PDF when printing for the actual page size. - The default implementation for the PDF support detects when specific fonts (i.e. Arial, Courier New, or Times New Roman) are specified in a PRTPAGE instruction. If one of these fonts is detected, a generic built-in generic font name is substituted and written into the PDF output file. This default behavior is the same as setting the 'PDF_FLAGS_SUB_GENFONTS' FLAGS bit value in a PRTOPEN or PRTPLAY instruction. This default behavior can be changed by using either the 'PDF_FLAGS_SUB_WINFONTS' or the 'PDF_FLAGS_NOSUB_FONTS' bit mask values in FLAGS option of the PRTOPEN or PRTPLAY instructions. See the description of the FLAGS option for the PRTOPEN and PRTPLAY instructions for more information on font substitution. - Modified the embedded font processing for PDF output to be optimized to only include needed fonts one time. This helps minimize the size of the the PDF file when embedded fonts are being used. - The PDF output has been modified to automatically embed fonts. This change is being made to minimize issues caused where end-users may not have fonts required for the proper presentation of a PDF. It should be noted, that the size of the PDF file is larger when a font is embedded in the PDF file. Also, any built-in generic fonts are not embedded in a PDF output file. Modified the FLAGS option for the PRTOPEN and PRTPLAY instructions to to include a bit mask value to prevent fonts from being embedded into the PDF output. This new bit mask value can be used to override the default action of embedding fonts. PDF_FLAGS_NO_EMBED_FONTS EQU 32 When this bit is turned on, fonts are not embedded in the PDF output. This bit mask value can be used to override the default action where fonts are embedded into the PDF output. - Modified the FLAGS option for the PRTOPEN and PRTPLAY instructions to include a new bit mask value that forces the top and left margins to be initialized to zero for the PDF output. This new FLAGS bit mask value is described as follows: PDF_FLAGS_ZERO_DEF_MARGINS EQU 16 When this bit is turned on, the top and left margins are set to zero when generating the PDF output. This bit mask value can be used when the PLB application is attempting to create a Sunbelt PDF output consistent with a 3rd party PDF writer that does not use the top and left margins. - Modified the FLAGS option for the PRTOPEN and PRTPLAY instructions to include a new bit mask value (64 or 0x40) that causes the PRINT Preview to always generate a PDF file output on exit when PDF output is expected and the CLOSE button is selected. This new FLAGS bit mask value is described as follows: PDF_FLAGS_ALWAYS_PDF_OUTPUT EQU 64 When this bit is turned on, exiting the PRINT Preview window always generates a PDF output when the PRINT Preview has the PDF output as an optional output and the PRINT Preview CLOSE button is selected. This bit ONLY takes affect if the PRINT Preview window CLOSE button is selected. Therefore, if a PRINT Preview has both the 'ToPrint' and 'ToPDF' buttons specified, this bit has NO affect if the 'ToPrint' button is selected. - Modified to eliminate one last blank page from being output to a PDF file unless the blank page is the first page. If more than one blank page is output, only the last blank page is not being output. - Modified the PDF implementation for support Microsoft specific TTF font files. Previous to this change, the PDF implementation ONLY supported TTF files that have the 8-bit (i.e. 1 byte mapping tables) to get the character data characteristics used for PDF output. This change now allows TTF font files formatted for 2-byte mapping tables to be used for PDF output. An example of a Microsoft specific TTF font files that uses 2-byte mapping tables is the 'Tahoma' font. - Modified the PRTPAGE *INFO control used for PDF output as follows: PRTPAGE *INFO 1. By default the *INFO command data is always included in PDF output. An end-user program can used the PRTPAGE *INFO control to make changes of the information included in the PDF output. However, if the PRTPAGE *INFO control is not used the following information is output to the PDF with the following defaults: - The Title is the file name of the PDF file. - The Author is the user name - The Creator is always set to the runtime and version information. - The Producer defaults to the runtime and version information. - The dates default to the current date/time. 2. Added a new command field named 'S=' that can be included as an optional field in the PRTPAGE *INFO control. The 'S=' field is used to specify the subject to be included in the information of the PDF output. - Modified the PDF implementation to allow direct PRINT output and SPLOPEN output to be redirected to a PDF output file. In this case, the PDF output can be generated using PRINT instructions using one of the print device methods: 1. The PLB_TERM screen definition can be modified to direct the default runtime printed output to one of the following settings: :f:name.pdf In this case, the runtime default print device output is set for PDF output to a PDF file as shown. Please note, that the RELEASE or RELEASEJOB instruction must be used to close the PDF file before it can be accessed by a PDF reader. pdf: If the screen definition default printer device is set to the device named 'pdf:', the runtime printer is always redirected for PDF output. However, since there is no PDF file specification, the first PRINT instruction that starts the printing operation causes a PDF Open Dialog to appear for a Windows runtime. If the 'pdf:' is used on an Application Server system, an appropriate error occurs on the first PRINT instruction because a PDF Open Dialog can not be executed a the server system. 2. When using the Application Server, by default the PRINT and SPLOPEN direct print output is performed at the client workstation. However, the keyword named 'PLBCS_APSPOOL' can be used to force the output to be at the server system. If the exclamation mark (!) is used, the PDF output occurs at the client workstation no matter what 'PLBCS_APSPOOL' setting is being used. :f:!name.pdf In this case, the runtime default print device output is set for PDF output to a PDF file named 'name.pdf' on the client workstation no matter what the 'PLBCS_APSPOOL' keyword setting is being used. !pdf: If the default printer device is set to the device name of '!pdf:', the runtime printer is always redirected for PDF output at the client workstation unless the 'PLBCS_APSPOOL' is being used. In this case, the first PRINT instruction that starts the printing operation causes a PDF Open Dialog to appear at a Windows client workstation that is executing the program. The following instructions have been modified to implement the PDF support for the direct PRINT and SPLOPEN outputs: SETMODE *DEFPRT 1. Modified the {mode} to support a 'F' mode used to redirect the default print device output to a PDF file. Example: SETMODE *DEFPRT=":f:Invoice.pdf" In this instruction, the ':f:' identifies that PDF output is to be used with the output being written into the 'Invoice.pdf' file when a PRINT instruction is executed for printing to the default print device. 2. Support for the 'pdf:' device name has been added. When the 'pdf:' print device is detected, a standard file prep dialog is displayed. When an end-user selects a PDF file name, the file is created and output to the file is written in PDF format. When using an Application Server and the 'PLBCS_APSPOOL' keyword is used to force the PDF output to the server system, an appropriate Snn error occurs because a Windows Open Dialog can not be presented at the server system. Example: SETMODE *DEFPRT="pdf:" In this instruction, the 'pdf:' identifies that PDF output is to be used for printed output after an end-user selects a PDF file using a standard file prep dialog. PRINT 1. PRINT now works with a PFILE opened using a PRTOPEN or SPLOPEN. 2. The first PRINT or PRTPAGE *DEFPRT instruction that starts the printing operations to perform PDF output causes a Windows runtime or client to present a standard file prep dialog to get the name from an end-user because the output PDF file name is unknown. Additionally, if the PDF output is being generated at the server system for Application Server, a standard file prep dialog is not presented and an appropriate Snn error occurs because the PDF file name is unknown. SPLOPEN 1. SPLOPEN now has a new option 'F' that specifies the output is to be in PDF format. 2. SPLOPEN now detects a 'pdf:' device name and the standard file prep dialog is displayed. When the end-user selects afile name, the file is created and output to the file is written in PDF format. 3. The 'Q' option is not supported for PDF output. 4. A PFILE opened for PDF output using the SPLOPEN instruction can be used in PRTPAGE and PRTCLOSE statements. 5. If the 'SETMODE *USESPLEXT=ON' is set and the "F" mode is used for the SPLOPEN, the default extension of '.pdf' is always used for the output file. SPLCLOSE 1. SPLCLOSE can be executed using a PFILE opened using PRTOPEN or SPLOPEN. 2. If a SPLCLOSE is executed on a PFILE opened using a PRTOPEN, the SPLCLOSE executes with the same actions as a PRTCLOSE instruction. PRTOPEN 1. PRINT instructions can now be executed using a PFILE that has been opened with a PRTOPEN instruction. 2. A SPLCLOSE instruction can be executed to close a PFILE that has been opened with a PRTOPEN instruction. PRTPAGE 1. Can now use PFILEs opened via SPLOPEN only with PDF output support. Otherwise, an S16 error can occur. 2. The PRTPAGE instruction supports a new syntax format where the {pfile} can be specified as '*DEFPRT'. When the PRTPAGE *DEFPRT syntax is used, the *DEFPRT represents the current runtime default print device only when the default runtime is opened to generate a PEF output file. The PRTPAGE *DEFPRT change allows advanced print printer controls like font and paper size to be applied for the PDF output that otherwise could not be changed. Also, note that the first PRTPAGE *DEFPRT instruction can cause a Windows runtime or client to present a standard file prep dialog to get the name from an end-user when the output PDF file name is unknown. Additionally, if the PDF output is being generated at the server system for Application Server, a standard file prep dialog is not presented and an appropriate Snn error occurs because the PDF file name is unknown. PRTCLOSE 1. Can now use PFILEs opened via SPLOPEN with PDF output support. RELEASE 1. If the output is to a PDF file, the file is closed as if a SPLCLOSE has occurred. RELJOB 1. If the output is to a PDF file, the file is closed as if a SPLCLOSE has occurred. Note: 1. The PDF output can be invoked using one of the following methods when using direct PRINT or SPLOPEN instructions: A. Direct PRINT operations using screen definition file specified by the 'PLB_TERM' keyword in the runtime INI file. In this case, the 'makedef' utility can be used to set the screen definition 'Default Printer Device' to be one of the following: :f:filename.pdf OR pdf: B. Direct PRINT operations using a default printer device specified using the 'SETMODE *DEFPRT' keyword. In this case, the 'SETMODE *DEFPRT' keyword is used to set the default printer device to be one of the following: :f:filename.pdf OR pdf: C. Use SPLOPEN with a new mode 'F' option that causes PDF output to the {name} specified for the output file. In this case, use the 'F' option in the SPLOPEN instruction as follows: SPLOPEN "filename.pdf", "F" OR SPLOPEN PFILE, "filename.pdf", "F" D. SPLOPEN using the 'pdf:' printer device. In this case, use the 'pdf:' device name for the {name} specified in the SPLOPEN instruction. When this SPLOPEN is executed, a Windows standard file prep dialog appears to allow an end-user to select a PDF file to be used for PDF output. The following shows an example of SPLOPEN with 'pdf:' being used: SPLOPEN "pdf:" OR SPLOPEN PFILE; "pdf:" - A new PRTPAGE control named *TEMPLATE has been implemented for the PDF support. The '*TEMPLATE={svarslit}' control can be used to allow a page from a secondary PDF file to be extracted and combined as a PDF object into the current page being generated for PDF output. This control can be used to allow a template PDF page to be combined with PL/B program data and output to a PDF output file. The *TEMPLATE is implemented to support secondary PDF file pages as generated for the Sunbelt PDF file format. PRTPAGE P;*TEMPLATE= This advanced print control allows a page from a secondary PDF file to be included as a PDF object into the current page being generated for PDF output. This control can be used to allow a template PDF page to be combined with PL/B program data to be generated into a single PDF output file. This advanced print control takes a comma separated list of fields as provided in the data string. Each field is composed of a field identifier assigned using a '=' character followed by field data. The data field data can be specified with or without double quote characters. The following *TEMPLATE fields are supported: Where: - A user specified string that may or may not include double quote characters. Fields: F= //Required Specifies the file name of an existing template PDF file from which a PDF page is extracted and included as a PDF object in the current PDF page output being generated. P= //Optional Page This command specifies the page number to be retrieved from the template PDF file and included into the current PDF output file page as a PDF object. Notes: 1. The *TEMPLATE control is implemented to extract PDF pages and objects from a Sunbelt PDF formatted document. If a PL/B application is used to create a Sunbelt PDF document, this Sunbelt PDF document can be used as the template PDF document referenced by the *TEMPLATE control. A Sunbelt template PDF document has the following requirements: - The template PDF can not have more than 500 objects where the objects are determined as follows: Count Object Type 1 - Each Unique image 1 - Each Unique font 2 - Each page in the PDF document - PDF encryption is not allowed. - PDF compression is not allowed. - A maximum of 20 images per page are allowed. - A maximum of 20 fonts per page are allowed. 2. If a 3rd party PDF document meets the criteria as outlined for a Sunbelt PDF template document, then it might work with the *TEMPLATE control if basic PDF objects and formats are being used. 3. All of the PDF object attributes that exist in a page extracted from the template PDF document are static and remain unchanged by current PRTPAGE controls. 4. When the *Template control is used to embed PDF page objects into the current PDF output file, the PDF page objects are optimizes to re-use the first page object multiple times as needed. The PDF page object optimization helps to reduce the size of a PDF document the includes the multiple page objects. Example: PF PFILE . PRTOPEN PF, "pdf:","temptest.pdf" .... . This next PRTPAGE creates a PDF page object from the . third page of a PDF file named 'secondary.pdf'. This . newly created PDF page object is stored as a PDF . object into the current PDF file named 'temptest.pdf'. . PRTPAGE PF;*TEMPLATE="F=secondary.pdf,P=3"; . . Continue with current PRTPAGE operations. . PRTPAGE PF;*P5:20,"Test..." . ... . - Modified the 'GETINFO PRINTERS,' instruction to include the 'pdf:' as an available output device. - Modified the LISTVIEW 'SortColumn' method to support a date mask specified as 'm/d/yy'. When this date mask is specified, the SortColumn method supports dates that include either 1 or 2 character digits for the month or day data. Examples of Data using 'm/d/yy' date mask: Unsorted Sorted Ascending 6/15/13 1/3/13 6/5/13 6/1/13 6/1/13 6/5/13 10/20/13 6/15/13 6/25/13 6/25/13 1/3/13 10/20/13 - Corrected a problem where PREVIEW or printing of spool file created by a pre-95B runtime could cause unexpected results using a 9.5B or later runtime. This problem was being caused because the older (pre-9.5B) spool files contained uninitialized data that was being used by the new (9.5B or later) runtimes. - Corrected a problem where the PDF output was not using the top and left margins. This problem would cause the PDF printed output to be different than the direct printed output. - Corrected a problem where the PDF output for text data was being misplaced by '1' to 'n' pixels as compared to direct printed output depending on the specific font being used. This problem was occurring because the Sunbelt PDF was not taking into account the TTF ascender and descender metrics for a given TTF font. - Corrected a PDF output problem for the a *RECT, *RNDRECT, and *OVAL where the positions of the objects were misplaced when the *UNITS was set to be *CHARS or *FONTS. - Corrected a PDF problem where a new page operation was causing spool file information to be reset unexpectedly. This could cause unexpected positioning and lost colors for the PDF output. - Corrected a PDF problem where two picture images where being output to a Sunbelt PDF file when it was generated from a Advanced Print spool file. - Corrected a PDF problem where a font could result in an unexpected intensity level of being too bold. - Corrected a problem where the Print Preview 'ToPDF' button was invoking the Printer Open Dialog when the DIALOG option for the PRTCLOSE instruction was set to be ON. The Printer Open Dialog should not have been invoked when outputting to a PDF file in this case. - Corrected a S16 error that would occur when the PRTPLAY instruction was using an Advanced spool file created by a runtime version prior to the 9.5B patch release. - Corrected a problem for a PDF output where the FONT was not working as expected resulting in no output. - Corrected a PDF problem where a GPF could occur when using a FONT object that was not created. - Corrected a PDF problem where the printing position was not being reset when output to a new page occurred. This problem could cause the first output line to be positioned incorrectly or to be lost. - Corrected a GPF problem caused when a black and white PICT image was being written to a PDF file. - Corrected a problem where the colors for a black and white PICT image might be reversed when the image was output to PDF file using 'pdf:' as the printer device. - Corrected a problem where zeroing the *COLSPACE and *ROWSPACE controls for a PRTPAGE instruction did not reset the column and row spacing as expected when PDF output was being used. - Corrected a problem where a PDF image positioning was invalid when the vertical positions for the image rectangle were below or outside the bounds of a page. In this case, the PDF file was created with an invalid image positioning such that the image would not be displayed by a PDF reader. - Corrected a problem where the data alignments in the Sunbelt PDF output were not properly calculated when generic font substitution was being used. - Corrected a problem where the conversion of a numeric value in the Windows OS variant format to a PL/B FORM variable was not working as expected when the Windows locale was set to any locale region that uses a ',' as a decimal point character. ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - The Windows runtimes and clients have been built using a Windows linker option named 'Swap Run From Network'. This change is being made to address issues where the Windows OS can encounter unexpected issues that can crash a runtime when the runtimes are being loaded and executed over a Network using a mapped drive. The Microsoft description of this linker option is as follows: "The /SWAPRUN option tells the operating system to first copy the linker output to a swap file, and then run the image from there. This is a Windows NT 4.0 (and later) feature. If NET is specified, the operating system will first copy the binary image from the network to a swap file and load it from there. This option is useful for running applications over the network." Note: 1. See the Windows support issue with an article ID of '2536487' which describes crashing issues where loading an application from a network drive can crash the application. This article describes several ways to workaround this problem. - Modified to initialize the default keyboard accelerator UI state for a WINDOW object when it is activated. This is required to work around a problem where the Windows OS changes the keyboard accelerator UI state for all of the children objects based on the UI state of the last input event processed. This problem was most obvious in the PLB designer where keyword accelerator characters might not be underlined. - Modified the CREATE instruction of a BUTTON control to only apply\use the BUTTONTYPE values of $SPLITBUTTON and $COMMANDLINK when a PL/B runtime is executing on a Windows Vista OS version or later. This change is being made to avoid an issue where a Windows XP system does not render the BUTTON control to be visible when these BUTTONTYPE values are used. - Modified the CLIPSET instruction to allow a DIM variable size larger than 64KB to be used. With this change, the CLIPSET instruction is only limited by any limitations imposed by the Windows OS. - Corrected an issue where 2 prints of the same picture would use only the coordinates of the first picture printed when a spool file was being used. A spool file is used when the PRTOPEN uses the SPOOLFILE keyword or when the 'Print Preview' is being used. The symptom of this problem is that it would appear that a picture is only being printed once on a page. It appears that other prints of the same picture on the same page were being lost. Note: 1. If a '.spl' file is created using a 9.6B runtime where more than one print of the same picture is being printed on the same page, a PRTPLAY of this '.spl' using any older runtime before 9.6B will only output a picture border for any lost pictures. 2. For any '.spl' files created by runtimes older than the 9.6B runtime version where multiple prints of the same picture on a single page is output, a PRTPLAY of these '.spl' files does not output the lost pictures regardless of the runtime version. - Corrected a problem for a CLIPGET instruction that would corrupt memory if the last text line in the clipboard data had a size larger than 40kb. The corrupted memory would cause indeterminate runtime execution including the possibility of a GPF error. This problem could occur when CLIPGET was retrieving data into DIM variables. - Corrected a problem where an S16 error would occur for a PRTPLAY instruction when the Sunbelt Spool file had been created by any runtime version earlier than 9.4D. This problem existed for any runtime version 9.5B or later. - Corrected a problem where the data size for the TEXT property was being limited to 255 characters for the CREATE of the EDITTEXT and RICHEDITEXT objects. With this change, the new limit of the TEXT property is now 40960 characters. - Corrected a problem where the PRTPAGE MARGINT and MARGINL controls were not being calculated properly when a page transition occurred. This problem could cause the page data to be output at the wrong location on a page. - Corrected a problem where a black and white image could have the background and foreground colors reversed for PDF output. This problem appeared when the *PICTVIS PRTPAGE control was being used. - Corrected a problem where a mousewheel action with the SHIFT key depressed was causing unexpected Windows OS messages to be posted to the a LISTVIEW when executing on a Windows 7 system. In this case, this problem could cause an excessively high CPU usage percentage to exist for a runtime process. ------------------------------------------------------------------------------- PLBCON, PLBCONET, PLBCLICON - Corrected a problem where the OS Command Console cursor was not being restored when the PLBDBUG debugger was terminated. ------------------------------------------------------------------------------- PLBNET, PLBCLINET - When loading a PLF form, some properties for a NETCONTROL were not being properly processed. This could cause some properties to be reset to a default state unexpectedly. ------------------------------------------------------------------------------- PLB(UNIX) - Corrected a problem where unexpected memory was being zeroed out during the initialization of IO canceling used for read instructions. This caused a memory overflow that could cause indeterminate execution of the PLB runtimes. The symptoms of the indeterminate execution could be different for different Unix platform types. This problem was caused by the implementation of AAM READ canceling support added in release 9.6. ------------------------------------------------------------------------------- PLBCMP - Modified the compiler to allow a hex immediate value to be specified in an expression. The hex immediate value must be specified using the format of '0xNNNNN' where NNNN are hexadecimal digits 0 to 9 and A to F. Example: . N20 FORM 20 . MOVE (0xFFEEDD), N20 . IF ( N20 == 0Xffeedd ) DISPLAY "N20 == 0xFFEEDD" ELSE DISPLAY "N20 != 0xFFEEDD" ENDIF . CALC N20 = ( 0xFFEEDD + 1 ) . - Modified the compiler to support the keyword named 'SQLIORECORDS={nvar}' for the GETFILE and SETFILE instructions. See the runtime descriptions for more details. - Modified the compiler to support the keyword named 'PDFNAME={svar}' for the GETFILE instruction. See the runtime description for more details. - Modified the compiler syntax for the PRTPAGE instruction to allow the {pfile} parameter to be specified as '*DEFPRT'. See the runtime description for more details. - Corrected a problem where the PRTPAGE *TAB control was giving an unexpected compilation error. This problem was caused by PDF changes made in release 9.6A. - Corrected a problem where the FLAGS option for the PRTOPEN and PRTPLAY instructions was not allowing a decimal numeric value to be specified. The FLAGS option now properly supports a {dnumnvar} value. ------------------------------------------------------------------------------- PLBDBUG - Modified the DV command of a DIM variable to output a period (0x2E) character in place of the following characters: 0x07, 0x09, 0x0D, and 0x0A. This change allows the contents to be displayed without being distorted by these special characters. ------------------------------------------------------------------------------- SUNINDEX - Corrected a problem where the SUNINDEX utility was not removing two temporary files when the '-r' option was being used. - Corrected a problem where the SUNINDEX utility could cause indeterminate program execution when the '-c' compact option was being used. This could result in a GPF error. ------------------------------------------------------------------------------- PLBMETH.INC - Corrected some typo errors. ------------------------------------------------------------------------------- ODSBAC32.DLL, ODSBAC64.DLL - Corrected a problem where an SQL query was not finding a row\record when the query expression specified an integer parameter to be equal to a zero value. The following is an example of a SQL expression that did not work as expected: "SELECT * FROM table where colname = 0" Where: 'colname' SQL data type is defined to be an INTEGER. ------------------------------------------------------------------------------- ODSBAC64.DLL - Modified the 'odbcinst64' utility to allow the 'odsbac64.dll' driver to be installed on a 64-bit Windows 2003 Server. ------------------------------------------------------------------------------- SUNWODBC.DLL - Corrected a problem for this ODBC runtime driver where the SQL statements were being executed asynchronously and SQL errors were not being reported to the runtime. This problem was causing errors reported by a SQL database engine to be ignored as if the SQL operation was successful. ------------------------------------------------------------------------------- DESIGNER - Added logic to insure that the splash screen would be removed at the appropriate time. - Corrected an issue that would create a spurious 0105 error at location 02AA3A. - Modified the Test Report Error window to use a fixed width font for the code display. - Corrected an issue that would cause property validation failure alerts when changing the font using the font dialog for some object types. - Corrected the assignment of internal ids for nested .Net objects. - Reduced screen flickering during new, open, and close operations when in integrated mode. - Corrected handling of the visibile and zorder properties for NetControls during open. - Corrected the generation of listview column names containing a pound sign (#). - Modified the imagelist and resource addition routines to allow repetitive sequential selection. - Modified tab control image to indicate read-only forms when using the integrated mode. - Improved the handling of errors during backup when read-only files are encountered. - Modified the remove empty code logic to detect the absence of an object. - Corrected a bug in setting the Picture and Icon properties for a button. - Corrected an issue in recovering tab and help ids from an aborted session. - Corrected the pasting of events for child objects that referenced external labels. - Corrected a U02 error when using integrated mode, the form and code on a single tab, and single event code mode. - Added support for the .Net TableLayouPanels ColumnStyles and RowStyles collections. - Added support for the Column, Row, ColumnSpan, and RowSpan properties of a TableLayoutPanel child. - Corrected several issues of showing the incorrect help topic when using the F1 key. - Corrected an issue registering an ActiveX control that does not have a VersionIndependentProgID. - Modified the open logic for forms generated with the legacy designer to correctly unroll the event registration optimization. - Event code separator lines are no longer added to forms created with the legacy designer. - Modified the event editor to relocate an external event registration when the dialog button (...) is clicked in the property window event list. ------------------------------------------------------------------------------- EDITOR - Corrected issues in the Remove Trailing Spaces logic that occurred when a column selection had a width of zero. - Moved the alert of a wrapped search to the status panel. - Modified search wrapped message to indicate "no match" when the search string is not found. - Modified the editor control to correctly initialize the search wrap initial line number when only a find next or previous was performed. - Modified the editor to delete the recovery file if a recovery is declined by the user and added logic to insure that the recovery file is actually deleted or notify the user. - Added logic to ensure any existing recovery file is actually deleted when it should be. ------------------------------------------------------------------------------- DBEXPLORER - Modified XML output format to not use column names as tag names. - Corrected an issue with user supplied SQL and transactions. - Corrected an issue in building the constraints during a column update. - Update the column editor combobox to include the "DECIMAL" type. - Corrected a size computation error during the import of FORM variables that contain decimal points. - Modified the column update logic to exclude the column size if AUTOINCREMENT is selected. - Added logic to support default column values of "CURRENT_DATE", "CURRENT_TIME", and "CURRENT_TIMESTAMP". ------------------------------------------------------------------------------- SUNIDE - Suncs21.ocx: Corrected a syntax highlighting where if a comment line appeared in the middle of multiple line continuations, valid code was highlighed as a comment. - Corrected name checking code that ended in an infinite 9.6A loop when UNC names were used for source files. - Corrected handling of the return values from the Save All dialog. - Ensure the mouse cursor is reset to an arrow at the appropriate times. ------------------------------------------------------------------------------- SCHEMAEDITOR - Added CueText property to all forms. - Set MinimumHeight and MinimumWidth for all forms. - Set the default theme for all forms to "Explorer" and provided a program option to disable the theme. - Added a font option. - Increased size of the dialog variable used when retrieving host connection strings. - Added F1Help to the main window listviews. - Removed the password property setting for the SQL column editor format field. - Added a column name check for reserved SQL words. - Corrected an issue with parsing and calculating imported PLB INIT sizes. - Corrected an error with editing column names for new Files. - Added the ability to map PLB data types to supported SQL types during a column import from PLB source code. - Corrected an issue in the SQL Export function regarding columns. - Modified the XML Export file format to be compatible with the Import format by implementing the new Schema functions. - Modified the column addition and import from plb functions to assume the columns are nullable. - Corrected an issue with the column count when a File entry was edited. ------------------------------------------------------------------------------- WATCH - Corrected an issue with the creation of columns in the server logging listview. - Corrected the inadvertent deletion of a modified existing connection entry. -------------------------------------------------------------------------------