Date: 03-08-2013 Subject: RELEASE 9.6A Runtime Files These release notes pertain to the following programs or files: EMBEDINI 9.6A 08 Mar 2013 9,6,1,500 EMBEDINI64 9.6A 08 Mar 2013 9,6,1,500 HEXDUMP 9.6A 08 Mar 2013 9,6,1,500 HEXDUMP64 9.6A 08 Mar 2013 9,6,1,500 MAKECLI 9.6A 08 Mar 2013 9,6,1,500 MAKECON 9.6A 08 Mar 2013 9,6,1,500 MAKECONET 9.6A 08 Mar 2013 9,6,1,500 MAKEDEF 9.6A 08 Mar 2013 9,6,1,500 MAKEMFD 9.6A 08 Mar 2013 9,6,1,500 OBJMATCH 9.6A 08 Mar 2013 9,6,1,500 OBJMATCH64 9.6A 08 Mar 2013 9,6,1,500 PLBCLICON 9.6A 08 Mar 2013 9,6,1,500 (ComCtl 6) PLBCLIENT 9.6A 08 Mar 2013 9,6,1,500 (ComCtl 6) PLBCLINET 9.6A 08 Mar 2013 9,6,1,500 (ComCtl 6) PLBCON 9.6A 08 Mar 2013 9,6,1,500 (ComCtl 6) PLBCONET 9.6A 08 Mar 2013 9,6,1,500 (ComCtl 6) PLBDSIGN 9.6A 08 Mar 2013 9,6,1,500 PLBNET 9.6A 08 Mar 2013 9,6,1,500 (ComCtl 6) PLBSERVE 9.6A 08 Mar 2013 9,6,1,500 PLBSERVET 9.6A 08 Mar 2013 9,6,1,500 (Threaded Server) PLBWIN 9.6A 08 Mar 2013 9,6,1,500 (ComCtl 6) SETGUID 9.6A 08 Mar 2013 9,6,1,500 SUNAAMDX 9.6A 08 Mar 2013 9,6,1,500 SUNAAMDX64 9.6A 08 Mar 2013 9,6,1,500 SUNINDEX 9.6A 08 Mar 2013 9,6,1,500 SUNINDEX64 9.6A 08 Mar 2013 9,6,1,500 SUNLS 9.6A 08 Mar 2013 9,6,1,500 SUNMOD 9.6A 08 Mar 2013 9,6,1,500 SUNMOD64 9.6A 08 Mar 2013 9,6,1,500 SUNSORT 9.6A 08 Mar 2013 9,6,1,500 SUNSORT64 9.6A 08 Mar 2013 9,6,1,500 PLBCLICON5 9.6A 08 Mar 2013 9,6,1,500 (ComCtl 5) PLBCLIENT5 9.6A 08 Mar 2013 9,6,1,500 (ComCtl 5) PLBCLINET5 9.6A 08 Mar 2013 9,6,1,500 (ComCtl 5) PLBCON5 9.6A 08 Mar 2013 9,6,1,500 (ComCtl 5) PLBCONET5 9.6A 08 Mar 2013 9,6,1,500 (ComCtl 5) PLBNET5 9.6A 08 Mar 2013 9,6,1,500 (ComCtl 5) PLBWIN5 9.6A 08 Mar 2013 9,6,1,500 (ComCtl 5) ODSBAC32.DLL 9.6A 08 Mar 2013 ODSBAC64.DLL 9.6A 08 Mar 2013 PLBNETSUP.DLL 9.6A 08 Mar 2013 9,6,1,500 Required for PLBNET PLBWSEC.DLL 9.6A 08 Mar 2013 9,6,1,500 Req'd PLBWIN/PLBNET SA_DLL32.DLL 9.6A 08 Mar 2013 9,6,1,500 SUNWADO.DLL 9.6A 08 Mar 2013 9,6,1,500 SUNWADO25.DLL 9.6A 08 Mar 2013 9,6,1,500 SUNWADO28.DLL 9.6A 08 Mar 2013 9,6,1,500 SUNWMSQL.DLL 9.6A 08 Mar 2013 9,6,1,500 SUNWODBC.DLL 9.6A 08 Mar 2013 9,6,1,500 SUNWSRV.DLL 9.6A 08 Mar 2013 9,6,1,500 DBEXPLORER.PLC 9.6A 08 Mar 2013 DBGIFACE.PLC 9.6A 08 Mar 2013 DESIGNER.PLC 9.6A 08 Mar 2013 EDITOR.PLC 9.6A 08 Mar 2013 PLBCMP.PLC 9.6A 08 Mar 2013 PLBDBUG.PLC 9.6A 08 Mar 2013 SCHEMAEDITOR.PLC 9.6A 08 Mar 2013 SUNCS21.OCX 9.6A 08 Mar 2013 SUNIDE.PLC 9.6A 08 Mar 2013 WATCH.PLC 9.6A 08 Mar 2013 ADMEQU.INC 9.6A 08 Mar 2013 PLBEQU.INC 9.6A 08 Mar 2013 PLBMETH.INC 9.6A 08 Mar 2013 PLBCLI.ZIP 9.6A 08 Mar 2013 9,6,1,600 (ComCtl 6) PLBRUN.ZIP 9.6A 08 Mar 2013 9,6,1,600 (ComCtl 6) *============================================================================== Notes for WARNINGS: - The Windows OS has implemented a subtle change for the Windows APIs named 'LoadLibrary' and 'LoadLibraryEx'. Starting with Windows XP with Service Pack 2 (SP2), a security change was implemented to enable a safe DLL mode by default. For the most part, this subtle change does not affect the majority of the PL/B users. The security change for these APIs causes the DLL searching order to be changed to cause the system path directories to be searched before the current working directory when the safe DLL mode is enabled. The following Microsoft documentation is a description of the DLL searching order by default. If SafeDllSearchMode is enabled, the search order is as follows: 1. The directory from which the application loaded. 2. The system directory. Use the GetSystemDirectory function to get the path of this directory. 3. The 16-bit system directory. There is no function that obtains the path of this directory, but it is searched. 4. The Windows directory. Use the GetWindowsDirectory function to get the path of this directory. 5. The current directory. 6. The directories that are listed in the PATH environment variable. Note that this does not include the per-application path specified by the App Paths registry key. The App Paths key is not used when computing the DLL search path. *============================================================================== The following files have been changed as noted: ------------------------------------------------------------------------------- PLBCLIENT, PLBCLICON, PLBCLINET - Changed the 'PLBCS_ERRORn' maximum allowed string length to be 500 characters from a previous maximum of 300 characters. - Corrected a problem where the PLBCLIENT would prematurely terminate if a 'PLBCS_ERRORn' keyword data size was 183 characters or larger. A symptom of this problem was that a PLBCLIENT client would immediately terminate as program starts to execute. ------------------------------------------------------------------------------- PLBWIN, PLBNET - Corrected a U48 subcode 202 error that would occur when the GUI PLB debugger was invoked for a PLB program that was using the TRANSACTION instruction. - Corrected a U19 subcode 13 problem that could occur when a PLBNET or PLBWIN was run after being installed using the product installation for a PLBWNT product type. - Corrected a problem that would prevent the Automation Server from initializing the registry as required. This was causing the Automation Server operations to fail with an unexpected O103. ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, PLB(UNIX) - Two new keywords named 'PLB_IOCANCELCHAR={abortkey}' and 'PLB_IOCHECKTIME={seconds} have been added for the PL/B runtimes. These keywords replace the 'PLB_AAMCANCELCHAR' and 'PLB_AAMCHECKTIME' keywords. The 'PLB_AAMCANCELCHAR' and 'PLB_AAMCHECKTIME' keywords should be considered obsolete. The new keywords are used to set the default abort characters to be used for all PL/B instructions that support abort operations. At this point in time, only the read operations for FILE, AFILE and IFILE file variables support abort actions. The following gives the descriptions for the new runtime keywords: PLB_IOCANCELCHAR={abortkey} This keyword is used to define a default character or function key that can be used to abort/cancel a read operation for a FILE, AFILE and IFILE. When this keyword is specified, the runtime read file operations automatically enable the abort/cancel support for the file variables for read instructions. If this keyword is not specified, the default behavior of the runtimes does not allow read operations to be aborted/canceled. Note, that the SETMODE *IOCANCELCHAR keyword can be used to enable the read abort/cancel mode for a specific program that is running. Where: {abortkey} This parameter can be specified as a single key for a character such as A, B, C,... etc. Also, this parameter can be specified as a key name that identifies a key to be used like ESC, F1, F2,...etc. The following key names are supported for the {abortkey} parameter: ESC, ESCAPE, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, F25, F26, F27, F28, F29, F30, F31, F32, F33, F34, F35, F36, F37, F38, F39, F40, UP, DOWN, LEFT, RIGHT, INS, INSERT, DEL, DELETE, HOME, PGUP, PAGEUP, PGDN, PAGEDOWN, END Example: PLB_IOCANCELCHAR=a PLB_IOCANCELCHAR=F3 PLB_IOCANCELCHAR=ESC PLB_IOCANCELCHAR=ESCAPE Note: 1. For the FILE and IFILE abort support, the read abort capability ONLY takes affect when a FILTER is being used for the FILE and IFILE read operations. PLB_IOCHECKTIME={seconds} This keyword is used to define the default value in seconds that is used as the elapse time before checking for a FILE, AFILE, or IFILE read abort/cancel character. The number of seconds specified by this keyword must be in the range from 0 to 30 seconds. This keyword setting is used when the FILE, AFILE, or IFILE read abort action is enabled by the PLB_IOCANCELCHAR keyword or the SETMODE *IOCANCELCHAR instruction. If this keyword is not specified, the runtimes use a default of 2 seconds while the Application Server clients and Data Manager uses 5 seconds as the default. Where: {seconds} This parameter must be specified from 0 to 30 seconds. If the specified value is greater than 30 seconds, the value is reset to be 30 seconds. Example: PLB_IOCHECKTIME=1 PLB_IOCHECKTIME=5 - Modified the runtimes to allow a FILE or IFILE read operation to be aborted when a FILTER is being used. This feature is being implemented such that an end-user can abort a FILE or IFILE read that is taking an excessively long time before finding a record. By default, the runtimes do not allow a FILE or IFILE READ to be aborted. This ability to abort the FILE or IFILE read can be enabled using a new keyword named PLB_IOCANCELCHAR keyword in a runtime INI file or by using the SETMODE *IOCANCELCHAR instruction. If a FILE or IFILE read is aborted by using the IO Cancel character/key, the OVER flag is set to a TRUE state. There is a new GETFILE CANCELFLAG keyword that retrieves a FILE or IFILE Cancel character/key flag that indicates whether the FILE or IFILE read was aborted or not. Also, note that there are new keywords for the FILE and IFILE OPEN and PREP instructions that can allow individual file variables to invoke the use of the IO Cancel character support. Note: 1. The IO Cancel support must be enabled before the OPEN/PREP action of a FILE or IFILE variable. When file variables are opened or prepared, the current IO Cancel support is enabled for the file variables. Changing the runtime IO cancel read default settings after a file variable is opened does not change the IO Cancel support being used by the opened file variable. 2. The CHAIN instruction resets to current program IO Cancel character value back to the default setting specified by the PLB_IOCANCELCHAR INI keyword. 3. When a FILTER is being applied to a file variable, the IO Cancel support affects the file variable read operations. - Modified the SETMODE instruction 'RESLIB' keyword to allow Windows drive substitution to be used when the [SubstDrives] section is being used. - Modified the SETMODE instruction to support new keywords that can be used to change the current default settings for the IO Cancel character support. The new keywords are named 'IOCANCELCHAR' and 'IOCHECKTIME'. These new keywords replace the previous keywords named 'AAMCANCELCHAR' and 'AAMCHECKTIME'. The new keywords are defined as follows: IOCANCELCHAR={svarslit} This keyword can be used in the SETMODE instruction to change the current default IO Cancel character to be used for aborting a FILE, AFILE, or IFILE read instruction. This keyword only changes the IO Cancel character setting for the current program and load modules that are being used. The {svarslit} identifier is the same as described by the PLB_IOCANCELCHAR INI keyword. After the SETMODE *IOCANCELCHAR is changed, the new setting only takes affect for a FILE, AFILE, or IFILE when the file variable is re-opened or prepared. A SETMODE *IOCANCELCHAR change does not affect any FILE, AFILE, or IFILE variables that are already opened/prepared when the change was made. IOCHECKTIME={nvarlit} This keyword can be used in the SETMODE instruction to change the current default IO abort check time value that specifies the elapsed time in seconds for checking FILE\AFILE\IFILE abort actions. This keyword only changes the IO abort check time setting for the current program and load modules that are being used. The {nvarlit} value is the same as described by the PLB_IOCHECKTIME INI keyword. After the SETMODE *IOCHECKTIME is changed, the new setting only takes affect for a FILE\AFILE\IFILE when the file variable is re-opened or prepared. A SETMODE *IOCHECKTIME change does not affect any FILE\AFILE\IFILE variables that are already opened/prepared when the change was made. - Modified the GETMODE instruction to support new keywords that can be used to retrieve the current default settings for the IO Cancel character support. The new keywords are defined as follows: PLBIOCANCELCHAR={svar} This keyword returns the current default setting used for the IO Cancel character support by a runtime. The {svar} variable is set to the IO Cancel characters as described in the PLB_IOCANCELCHAR INI keyword setting. If the IO Cancel character support is not being used, the {svar} variable is set to be NULL. This keyword replaces the PLBAAMCANCELCHAR keyword. PLBIOCHECKTIME={nvar} This keyword returns the current default setting used for the check time in seconds that is being used for the IO Cancel character support by a runtime. The [nvar} variable returns a value as described in the PLB_IOCHECKTIME INI keyword setting. The returned value should be from 0 to 30 seconds. The keyword replaces the PLBAAMCHECKTIME keyword. IOCANCELCHAR={svar} This keyword returns the default setting that is being used for the current PLB program and load modules. The value set into the {svar} variable is the same as described for the PLB_IOCANCELCHAR INI keyword. If the IO Cancel character support is currently disabled, the {svar} is set to be NULL. Also, this program default setting is reset to the runtime default setting after a CHAIN instruction is executed. This keyword replaces the AAMCANCELCHAR. IOCHECKTIME={nvar} This keyword returns the default setting that is being used for the current PLB program and load modules. The value set into the {nvar} variable is the same as described for the PLB_IOCHECKTIME INI keyword. Also, this program default setting is reset to the runtime default setting after a CHAIN instruction is executed. - Added two new keywords for an OPEN/PREPARE instruction of a FILE\IFILE variable. The following keywords can be used to enable the IO Cancel character support for an individual FILE\IFILE variable. CANCELCHAR={svarslit] This keyword specifies the IO Cancel character that is to be used to abort a FILE\IFILE read operation when a FILTER is being used. The {svarslit} can be specified using the same character and key names as specified for the PLB_IOCANCELCHAR INI keyword. If the {svarslit} is specified as a NULL variable or literal, the IO Cancel character support is disabled for this FILE\IFILE variable. If this keyword is not specified the IO Cancel character feature is determined by the current program/runtime default settings. CHECKTIME={nvar} This keyword specifies the elapse time in seconds that is to be used when checking for abort character/key for a FILE\AFILE\IFILE read. The {nvar} value is the same as described for the PLB_IOCHEKCTIME INI keyword. If this keyword is not specified the IO Cancel character feature is determined by the current program/runtime default settings. Example: IFILE IFILE IFILE1 IFILE F1 INIT "F1" . OPEN IFILE, "isifile", CANCELCHAR="ESC": CHECKTIME=1 FILTER IFILE, "CompanyName = 'bill'" . PREP IFILE1, "txtfile", "isifile", CANCEL=F1: CHECKTIME=0 FILTER IFILE1, "CompanyName = 'bill'" - Modified the GETFILE instruction to support new keywords that can be used to return the current IO Cancel character settings being used for a specific FILE\AFILE\IFILE variable. The new keywords are defined as follows: CANCELCHAR={svar} This keyword for a GETFILE instruction returns the current setting being used for the IO Cancel character support as applied for the specified FILE\AFILE\IFILE variable. If the IO Cancel character is not being used, the {svar} variable is set to be NULL. Otherwise, the {svar} is set to the character or key name as specified by the PLB_IOCANCELCHAR INI keyword. CHECKTIME={nvar} This keyword for a GETFILE instruction returns the current setting being used for the IO Cancel character support as applied for the specified FILE\AFILE\IFILE variable. The returned value is the same as described for the PLB_IOCHECKTIME INI keyword. CANCELFLAG={nvar} This keyword returns the flag value of 0 or 1 depending on whether the last FILE\AFILE\IFILE read operation was aborted using an IO Cancel character or not. The value of 1 indicates that a FILE\AFILE\IFILE read was terminated by an IO Cancel character. This flag continues to persist until the next FILE\AFILE\IFILE read operation. - Added a new U64 untrapped error that indicates when an unexpected instruction error code has been generated. The subcode error value that is reported is the actual unexpected returned value from the instruction. Prior to implementation of the U64, a PL/B program behavior would unexpectedly start executing at the program code address of zero. By implementing the U64 error, we can clearly identify the PL/B instruction code address that has generated the unexpected error value. Under normal circumstances, the U64 should never occur unless the PL/B runtime has a bug or is executing erroneously. - Corrected an I85 subcode 104 error that would occur if a FILTER expression numeric value started with a period character. Example: FILTER IFILE,"label = .00" - Corrected a problem where a NULL XML tag could be written to a XFILE. This would cause an unexpected I83 subcode 308 error to occur when the XFILE data was being output to a '.xml' file. The problem is that a NULL XML tag should never have been written. Therefore, a change has been made to give a new I83 subcode 16 error if the XML tag name is NULL when writing to a XFILE. - Corrected an unexpected I01 error that could occur for a COUNTKEYS instruction. This I01 error would only occur when the current ISI tree had a specific structure resulting from unique isam key data. Therefore, this problem was highly unpredictable except under certain key data sequences. - Corrected a problem where a PREP IFILE of a SQL table using SQLIO was reporting an I03 error. The I03 has been changed to be an I86 error. - Corrected a problem where a GPF error would occur under the following conditions: 1. The PL/B character debugger (PLBDBUG.PLC) was used to debug a end-user program. 2. The end-user PL/B program has program exceptions set using the EXCEPTSET instruction. 3. The PL/B character debugger encounters an error (IO, FORMAT, etc...) that is the same as an exception that is set for the end-user application. This was causing a GPF error that would prematurely terminate the runtime because of conflicting error processing between the end-user program exception settings and the character debugger program. A scenario that could cause this kind of error would be an IO error where a 'program.sdb' file could not be found in the character debugger while an end-user application has an EXCEPTSET set for IO error. - Removed a trailing WS from the 'MAIL FROM:' command when using the MAILSEND instruction. This change is needed to eliminate an error on some email servers that perform strict syntax checking. . ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE (Windows) - Expanded the GETINFO SYSTEM data to include Windows OS specific information retrieved from the API named 'GetVersionEx'. In addition, a new 2 character PLB Operating system version field has been added to provide version numbers beyond 9. This addresses an issue of identifying the Windows 8 OS type. See the Microsoft MSDN documentation for detailed information about the extended OS version data fields. The new expanded fields are identified as follows: Column Size Value 645 2 Operating system version 00 - unknown 01 - Windows NT 02 - WIN32s Widnows 3.1x (obsolete) 03 - Windows 95 (obsolete) 04 - Windows 98 (obsolete) 05 - Windows 2000 06 - Windows XP 07 - Windows VISTA 08 - Windows CE 09 - Windows 7 10 - Windows 8 647 10 Windows OS Major Version ( See MSDN GetVersionEx ) 657 10 Windows OS Minor Version ( See MSDN GetVersionEx ) 667 10 Windows OS build number ( See MSDN GetVersionEx ) 677 10 Windows OS PlatformId ( See MSDN GetVersionEx ) 687 5 Windows Major version number of the latest Service Pack installed on the system. ( See MSDN GetVersionEx ) 692 5 Windows Minor version number of the latest Service Pack installed on the system. ( See MSDN GetVersionEx ) 697 5 A bit mask that identifies the product suites available on the Windows system. ( See MSDN GetVersionEx ) 702 5 Additional information about the system. This field can be used in conjunction with the OS Major and Minor numbers to determine the specific Windows OS type being used. ( See MSDN GetVersionEx ) ------------------------------------------------------------------------------- PLBWIN, PLBNET, PLBSERVE, ALL GUI CLIENTS - Modified the runtimes to support two methods named 'GetUnicode' and 'SetUnicode' for an EDITTEXT object. These methods are used to transfer raw Unicode (UTF-16) data to and from an EDITTEXT object. These methods can be used for scenarios where nationalized data needs to be used or processed on systems configured for a different national locale. ............................................................... . GetUnicode Method for EDITTEXT . The GetUnicode method returns the raw Unicode (UTF-16) data from an EDITTEXT object. The method uses the following format: [label] {object}.GetUnicode GIVING {return}[: USING [*Flags=]{flags}] Where: {label} is an optional Program Execution Label. {object} is a required EDITTEXT object to be accessed. {return } is a Character String Variable that receives the Unicode (UTF-16) data. (flags} is a Numeric variable or decimal number that is a bit mask value to control operational behaviors for this method. This parameter is optional. Flags Affected: EOS, OVER, ZERO Note the following: 1. The OVER and ZERO flags are always cleared. 2. The EOS flag is set to a TRUE state if the returned data is truncated because the {return} variable is too small. Otherwise, the EOS flag is cleared. 3. The bit mask definitions for the {flags} parameter is defined as follows: Bit Mask Value Description 0x00000001 - Strip trailing Unicode NULL termination characters. 4. The PLB CONVERTUTF instruction can be used to perform UTF conversions to and from UTF-16 formatted data strings. ............................................................... . SetUnicode Method for EDITTEXT . The SetUnicode method transfers raw Unicode (UTF-16) data directly to an EDITTEXT object. The method uses the following format: [label] {object}.GetUnicode GIVING {return}: USING [*String=]{string}[: [*Flags=]{flags}] Where: {label} is an optional Program Execution Label. {object} is a required EDITTEXT object to be accessed. {return } is a Numeric variable that returns the pass\fail results for the execution of the method. {string} is a Character String variable that contains the Unicode (UTF-16) data to be transferred to the EDITTEXT object. (flags} is a Numeric variable or decimal number that is a bit mask value to control operational behaviors for this method. This parameter is optional. Flags Affected: EOS, OVER, ZERO Note the following: 1. The ZERO flag is set to a TRUE state when the {return} value zero. Otherwise the ZERO flag is cleared. 2. The OVER flag is set to a TRUE state if the value returned is too big to be stored into the {return} variable. 3. The EOS flag is always cleared. 4. The bit mask definitions for the {flags} parameter is defined as follows: Bit Mask Value Description TBD - Available for future use. 5. The PLB CONVERTUTF instruction can be used to perform UTF conversions to and from UTF-16 formatted data strings. 6. The {result} Numeric variable is set to a value of zero when data has been transferred to the EDITTEXT object. If there no data transferred to the EDITTEXT using this method, the {result} returns a value of one. - Integrated PDF support into the Advanced Print operations of the PLB runtimes. The PDF support can be invoked using the PRTOPEN or PRTPLAY instructions by specifying a printer device named 'pdf:' with the JOBNAME name specifying the actual file where the PDF output is written. Overview of PDF support: PDF support has been implemented into the Advanced Print operations to be used seamlessly in existing PLB programs. The intent is that existing PLB programs using the Advanced Print instructions can have the print {device} name specified as 'pdf:' or '!pdf:' for a PRTOPEN instruction. In addition, the {jobname} is used to specify the file name for the PDF output. These are the minimal changes required for existing PLB programs to generate a PDF file output. The Sunbelt PDF support is implemented based on the guidelines as defined by the PDF 1.4 specifications. By default PDF compression is turned on for PDF output. Also, encryption, embedded fonts and attachments are implemented for the Sunbelt PDF support. Sunbelt PDF Features 1. Implemented to PDF support based on a PDF 1.4 specification. This means that a PDF reader that supports the 1.4 level can read the Sunbelt PDF output. 2. Embedded fonts optionally supported. Only TrueType fonts are supported. Embedded fonts are not on by default. 3. Encryption is optionally supported. Encryption is not on by default. 4. Compression is supported. Compression is on by default. 5. Attachments are supported. 6. All PRTPAGE controls are supported for PDF output. 7. PDF support implemented for Windows runtimes, Unix runtimes, Application Server runtimes (Windows\Unix), and Windows clients. 8. Advanced Print PDF output is supported local to the Application Server system. 9. Advanced Print PDF output is supported for Windows CE runtimes and clients. (PLBWCENE and CLIWCENE). 10. Attachments, Fonts, and PDF output can be used in conjunction with a Data Manager. 11. The number of pages in a PDF is limited to 10,000,000 pages. 12. Page index support is used for quick page access by PDF readers. 13. The maximum size for PDF output is 4GB. Windows Runtimes 1. The Windows runtimes (PLBWIN & PLBNET) support the PDF implementation. The PRTOPEN, PRTPAGE, PRTCLOSE, PRTPLAY, and GETINFO instructions have been modified to support the PDF implementation. 2. To invoke PDF output, the {device} in the PRTOPEN can be specified as 'pdf:' or '!pdf:'. The '!' is ignored by PLBWIN\PLBNET and is processed the same as 'pdf:'. The '!' {device} name format is used by an Application Server to cause the PDF processing to be executed at the client workstation where a PLBCLIENT is executed. 3. When using the PRTPLAY instruction using a {device} specified as 'pdf:', any spoolfile can be used to create a PDF output. Therefore, previously existing spoolfiles can be used to create a PDF file. 6. When executing the PRTPAGE *FONT control on a Windows OS platform, the runtime first looks to see if a [pdffonts] alias mapping section has been defined in the runtime '.ini' configuration file. If the *FONT control font name is found in the [pdffonts] alias keywords, it use used as declared. If the [pdffonts] alias mapping is NOT used or the *FONT control font is NOT found, the runtime looks in the Windows registry to find the *FONT font when it is installed for the Windows OS. Using this technique allows the PL/B '.ini' [pdffonts] alias mappings to override the Windows installed fonts. Unix Runtimes 1. The PRTOPEN, PRTPAGE, and PRTCLOSE instructions can be compiled into a program and executed by a Unix runtime only when the printer {device} is specified as 'pdf:'. If a printer {device} other than 'pdf:' is specified, an appropriate error occurs. 2. The PRTPLAY instruction is NOT supported when using a Unix runtime. 3. Print Preview is not supported when using a Unix runtime. 4. For a PRTOPEN instruction, the only {options} supported for a Unix runtime are specified as follows: PAGEWIDTH PAGEHEIGHT PIXELWIDTH PIXELHEIGHT All other {options} are ignored when using a Unix runtime. 5. The GETINFO instruction is not supported when using a Unix runtime. 6. When executing the PRTPAGE *FONT control on a Unix OS platform, the new [pdffonts] section must be setup in the PLB runtime '.ini' configuration file to map the expected fonts that are to be used. See the PRTPAGE section description on the *FONT control for details on the [pdffonts] section supported keywords. Application Server Runtimes 1. When using the Application Server, a PRTOPEN with a {device} specified as 'pdf:' causes the PDF processing to be directly executed local to the server system. However, a PRTOPEN with a {device} specified as '!pdf:' causes the PDF processing to occur on the client workstation where the PLBCLIENT is executing. When the '!pdf:' {device} is used, the PDF output file is created and written at the client workstation. 2. PRTPLAY and Print Preview are not supported for local output at the server system for Application Server when a {device} is specified as 'pdf:'. However, if the {device} is specified as '!pdf:', both PRTPLAY and\or Print Preview are processed and executed at the client workstation where PLBCLIENT is executed. 3. For a PRTOPEN instruction using a {device} specified as 'pdf:', the only {options} supported for server local output are specified as follows: PAGEWIDTH PAGEHEIGHT PIXELWIDTH PIXELHEIGHT All other {options} are ignored when using the Application Server runtime. 4. When executing the PRTPAGE *FONT control on a PLBSERVE Application Server with 'pdf:' output being directly written local to the server, the rules for the *FONT font processing are the same as implemented for a Unix platform. See the PDF overview for a Unix platform. If the '!pdf:' output is being redirected to the PLBCLIENT client, the rules for the *FONT font processing are the same as implemented for a Windows runtime. See the PDF overview for a Windows platform. If the [pdffonts] alias section mappings are being used, the [pdffonts] section can be placed in the 'plbserve.ini' or the 'plbclient.ini' depending on whether Unix or Windows font usage rules are being used for the PDF output. Data Manager Support 1. The PDF support has been implemented to allow a Data Manager to be used for Windows runtimes (PLBWIN\PLBNET), Unix runtimes, and a PLBSERVE runtime with local PDF output at the server. Data Manager support is not available when the PDF output is processed and written at the PLCLIENT client workstation. 2. When Data Manager support is allowed, the vertical bar '|' can be used to append an IP address or URL to the file name that is specified in the PRTOPEN {jobname} or the 'PDFNAME' keyword. This allows the PDF output to be written directly to a Data Manager. Example: P PFILE PRTOPEN P, "pdf:", "pdfout.pdf|127.0.0.1" 3. When Data Manager support is allowed, the attached file name as specified by a PRTPAGE *ATTACH control can have an IP address or URL appended to the file name using the vertical bar '|' character to access the file from a Data Manager. 4. When Data Manager support is allowed, the font files as specified in the [pdffonts] alias mapping can use the vertical bar '|' character to append an IP address or URL to retrieve the font file from a Data Manager. 5. The PDF support can be used with any previous version of Data Managers prior to 9.6A. However, only the 9.6A version of the Data Manager can provide current modification date information for a PDF attachment that is retrieved from the Data Manager. Older Data Manager versions can not provide the PDF modification date information for attachments. Windows CE Runtimes\Clients 1. The Advanced Print instructions (PRTOPEN, PRTPAGE, and PRTCLOSE) can be executed using Windows CE runtimes and clients ONLY when the {device} is specified as 'pdf:'. 2. For the PDF support using Windows CE runtimes\clients, the '[pdffonts]' alias mapping must be used. Otherwise, a S17 error occurs. See the description below for '[pdffonts]' section. PRTPAGE Advanced Print PDF Controls The PDF implemented provides support for the PRTPAGE controls controls as follows: Name Support ------------------------------- --------- *ALIGNMENT=<*DECIMAL|*LEFT|*RIGHT> Yes *ALLOFF Yes *ATTACH={svarslit} New 9.6A *BGCOLOR=n Yes *BIN Ignored *BLANKOFF Yes *BLANKON Yes *BOLDOFF Yes *BOLDON Yes *C Yes *CLIPTEXT Yes *COLLATE Ignored *COLOROFF Yes *COLORUSE Yes *COLSPACE Yes *COPIES Ignored *DUPLEX Ignored *ENCRYPT={svarslit} New 9.6A *F Yes *FGCOLOR Yes *FILL Yes *FONT Yes *H Yes *HA Yes *INFO={svarslit} New 9.6A *JC Yes *L Yes *MARGINL Yes *MARGINT Yes *LINE Yes *LL Yes *N Yes *NEWPAGE Yes *ORIENT Yes *OVAL Yes *OVERLAYOFF Yes *OVERLAYON Yes *P Yes *PAPER Yes *PENSIZE Yes *PICT Yes *PICTCLIP Yes *PICTRECT Yes *PICTVIS Yes *PIXELOFF Yes *PIXELON Yes *PL Yes *PLENGTH Yes *PSCALE Ignored *PWIDTH Yes *QUALITY Ignored *RECT Yes *RNDRECT Yes *ROWSPACE Yes *RPTCHAR Yes *RPTDOWN Yes *SL Yes *TAB Yes *ULOFF Yes *ULON Yes *UNITS Yes *V Yes *VA Yes *ZF Yes *ZFOFF Yes *ZFON Yes *ZS Yes Note: 1. Several new advanced print controls have been added for the PRTPAGE instruction to provide extended capabilities with regard to the PDF support. The new PDF print controls are defined as follows: *INFO={svarslit} This advanced print control takes a comma separated list of fields as provided in the {svarslit} data string to include additional user information in the PDF output file. 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. Each *INFO data field is optional and is not required when generating a PDF output file. The following *INFO fields are supported: Where: - A user specified string that may or may not include double quote characters. - A date string is specified as a YYYMMDDhhmmss format. Fields: A= //Optional Author Include an Author description in the PDF output file. P= //Optional Producer Include a Producer description in the PDF output file. T= //Optional Title Include a Title description in the PDF output file. K= //Optional Keywords Include Keyword data in the PDF output file. Keywords are provided as simple associations in a PDF file as applied by a PDF reader. In this case, the data can be specified a one or more keywords separated by a white space (blank) character. C= or C //Optional CreationDate & ModDate Include the CreationDate and ModDate field data in the PDF output file. If the 'C' syntax format is used without a '=' character, a default timestamp is included in the PDF output file. Note: 1. Only one PRTPAGE *INFO can be executed for inclusion in a PDF output file. If a second PRTPAGE *INFO is executed a S30 subcode 106 error is generated. 2. All of the expected *INFO field information MUST be included in the first and only PRTPAGE *INFO when executed. Examples: xInfo INIT "A=Bill,C,K=#"Test Sample Plbwin#",": "P=Plbwin,T=Test" . PrtPage Prt;*Info="A=Bill,C,K=Plbwin" PrtPage Prt;*Info=xInfo *ATTACH={svarslit} This advanced print control takes a comma separated list of fields as provided in the {svarslit} data string to specify parameters that allow an attachment to be embedded into a PDF output file along with other pertinent information. 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 'F' field is required while all other *ATTACH data fields are optional when embedding an attachment in a PDF output file. The following *ATTACH fields are supported: Where: - A user specified string that may or may not include double quote characters. - A date string is specified as a YYYMMDDhhmmss format. Fields: C= or C //Optional Creation Date Used to provide a creation date for the attachment file. If the is specified by the user application, the specified is a static date that is output to the PDF file. If the is not specified, the is the current OS creation date for the attachment file when the PDF file is created. D= //Optional Description Used to provide a user specific description for the attachment to be included in the PDF output file. F= //Required Filename Required to specify the fully qualified path and file name to be embedded in the PDF output file as an attachment. Please note that the attachment file must be available when the PDF file is created. I= //Optional Icon Optional field to specify whether an Icon is to be used to represent the attachment by a PDF reader. The for the 'I' field can be specified as one of the following decimal ASCII characters: 0 - Paperclip(default if 'I' not used) 1 - Attachment 2 - Graph 3 - Tag O= //Optional Output filename Optional output file name that is created by a PDF reader for the attachment specified by the 'F' field. If the 'O' filename is not specified, the 'F' filename is used by default. P= //Optional Position t:b:l:r Optional field to specify the position where an Icon for the attachment is to be placed. If this 'P' field is not specified, the Icon for an attachment is placed at the current print position. If the is specified as a 't:b:l:r' data, the 't', 'b', 'l', and 'r' are specified as a decimal characters to represent the position of the Icon. In addition, when the 't:b:l:r' syntax format is being used, the 'b' and 'r' values can be specified as a 0 character. In this case, the 't' and 'l' location identifies are used to position the top/left of the attachment Icon. The 't', 'b', 'l', and 'r' decimal values represent the number of units as applied by the *UNITS for a PRTPAGE instruction. Example: P=5:15:20:35 //Use full position P=5:0:20:0 //Use top/left position T= //Optional Title Optional field to specify the Title to be put into the PDF output file for the attachment file. M= or M //Optional Modification Date Used to provide a modification date for the attachment file. If the is specified by the user application, the specified is a static date that is output to the PDF file. If the is not specified, the is the current OS modification date for the attachment file when the PDF file is created. Note: 1. The PRTPAGE *ATTACH print control can be executed at any point in the generation\ of a PDF output file. Also, the PRTPAGE *ATTACH print control can be executed more than one time 2. The PRTPAGE *ATTACH file name as specified by the 'F=' field can use a vertical bar '|' character appended to the file name so an IP address or URL can be applied. This allows the attachment to be retrieved from a Data Manager. To avoid any conflicts with the field comma delimiter, the double quote '"' characters can be used for the . Examples of *ATTACH: -------------------------------------------- FINDFILE "tpdf.pls",write=moddate Pack EmbedLine: "F=#"tpdf.pls#",": "T=tpdf,": "D=#"PL/B Source Code#",": "M=",moddate ;Static mod date! PrtPage Prt; *ATTACH=EmbedLine -------------------------------------------- Pack EmbedLine: "F=#"tpdf.pls|127.0.0.1#",": "T=tpdf,": "D=#"PL/B Source Code#",": "M" ;Use file mod date! PrtPage Prt; *ATTACH=EmbedLine *ENCRYPT={svarslit} This advanced print control takes a comma separated list of fields as provided in the {svarslit} data string to specify parameters that allow PDF encryption to be used for the PDF output file. 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 *ENCRYPT fields are optional. The following *ENCRYPT fields are supported: Where: - A user specified string that may or may not include double quote characters. - A date string is specified as a YYYMMDDhhmmss format. Fields: O= //Optional Owner password When the owner password field is specified, this password is used to encryption the user password. U= //Optional User password When the user password field is specified, a PDF reader will ask for input of this password. P= //Optional Permissions as a set of bits This field specifies the permissions that are to be applied by a PDF reader. The specified for the permissions is composed of decimal characters that represents a bit mask value: The permissions are defined as follows: Permissions as Bit Mask: Permissions = D7+D6+D5+D4+D3+D2+D1+D0 D0 - Reserved must be 0 D1 - Reserved must be 0 D2 - Allow document to be printed. Add a value of (4) to enable this permission. D3 - Allow the contents of the PDF document to be modified. Add a value of (8) to enable this permission. D4 - Allow text and graphics to be copied or extracted from the PDF document. Add a value of (16) to enable this permission. D5 - Allow additions and modifications for document text annotations. Also, allow interactive form fields to be filled. In addition, if the D3 permission is enabled, allow form fields to be set, created, or modified. Add a value of (32) enable this permission. Note: 1. Only one PRTPAGE *ENCRYPT can be executed to invoke encryption for the PDF output file. If a second PRTPAGE *ENCRYPT is executed a S30 error occurs. 2. All of the expected *ENCRYPT field settings MUST be included in the first and only PRTPAGE *ENCRYPT when executed. 3. Also, a S30 error with appropriate subcode is generated if the PRTPAGE *ENCRYPT is executed after the PDF data output has already been started. Therefore, if encryption is to be used, the *ENCRYPT control should be executed after the PRTOPEN and before print data has started. Examples: PrtPage Prt;*ENCRYPT="O=sunbelt,P=4,U=Bill" 2. For FONT usage when redirecting the output to a 'pdf:' device, there are some guidelines that should be observed. There are four basic points that must be considered: 1) There are built-in fonts named 'Times', 'Helvetica', and 'Courier' that can be used. When a PDF reader encounters these fonts in a PDF file, the PDF reader substitutes\uses an appropriate font based on the OS platform being used. When any of these built-in fonts are used, the substituted\used font is NOT embedded in the PDF output file. 2) The PDF implementation only supports TrueType (.ttf) fonts for Advanced Print output to a 'pdf:' device. The TrueType fonts are supported by Windows OS and Unix OS platforms. 3) The Sunbelt runtimes support a new configuration section named '[pdffonts]' that exist in the runtime '.ini' files. The keywords that are put into the [pdffonts] section allow a PL/B application to define font alias names that can be used in the PRTP PRTPAGE *FONT control. The defined font alias names are associated with TrueType (.ttf) font files. The keywords that can be defined in the '[pdffonts]' section are described as follows: KEYWORD {fontname}[_{B|I|BI}]={fontfile} These keywords allow a user to define specific font names that can be used in a PRTPAGE *FONT control. When the PRTPAGE *FONT control is processed, the runtimes can find the appropriate font that can be used when creating the 'pdf:' output file. The font mapping capability was originally implemented for the Unix runtimes. This would allow Windows TrueType (.ttf) fonts to be copied to a Unix platform and used in PRTPAGE *FONT operations on a Unix platform where the fonts are not installed on the Unix system. The font mapping capability is also available when executing in a Windows OS environment for some special scenarios. Keep in mind, that fonts MUST be installed on a Windows system when Advanced Print Preview viewing is to be done. Where: {fontname} The {fontname} is the font name that is used in the PRTPAGE *FONT control. This font name can be any name that is desired by an PL/B developer. However, it is highly recommended that the {fontname} should be representative of the true font name expected for a associated '.ttf' file. When the expected font name normally has embedded blank characters, the blank characters should be replaced by an underscored (_) character. By using a font name that is representative of a true font name, the same program can be executed on Windows and Unix runtime to generate a PDF output file. In addition, a suffix attribute clarifier can be appended to the {fontname} keyword. The attribute suffix clarifiers are defined as '_B',', '_I', or '_BI'. These suffix identifiers allow the runtime to use the appropriate font file when a PRTPAGE *FONT control is specified with the appropriate syntax format used to specify the attributes for 'Bold', 'Italic', or 'Bold\Italic', respectively. Note, these attribute suffix clarifiers are NOT included in the PRTPAGE *FONT font name in a program. Examples: [pdffonts] Courier_New=/tmp/fonts/cour.ttf Courier_New_B=/tmp/fonts/courbd.ttf Courier_New_I=/tmp/fonts/couri.ttf Courier_New_BI=/tmp/fonts/courbi.ttf [pdffonts] Courier_New=c:\temp\fonts/cour.ttf Courier_New_B=c:\temp\fonts/courbd.ttf Courier_New_I=/tmp/fonts/couri.ttf Courier_New_BI=/tmp/fonts/courbi.ttf {fontfile} The {fontfile} is a fully qualified path and file name where the font file is located that is to be processed when the {fontname} is encountered in a PRTPAGE *FONT control. The {fontfile} file name can be specified with a vertical bar '|' character to allow an IP address or URL of a Data Manager to be appended. The vertical bar file name syntax format allows fonts to be retrieved and used from a Data Manager. Note: 1. When executing on a Unix system, make sure that the appropriate permissions are being used by the PLB runtime to access the mapped font files. Example [PDFFONTS] Section Unix 'plb.ini': [pdffonts] MS_LineDraw=/home/myfonts/linedraw.ttf Example Program Code Windows & Unix: P PFILE . PRTOPEN P,"pdf:", "myfile.pdf" . PRTPAGE P;*FONT="Times": "Something in 'Times'!" PRTPAGE P;*FONT="MS LineDraw": "LineDraw is used!" .... 4) When using a Unix runtime, a new keyword named 'FONT_PATH={dir}[;{dir1}[;...]]' can be placed in the '[pdffonts]' section of the 'plb.ini' runtime configuration file. The 'FONT_PATH' is one or more directories that contain the TrueType fonts that can be used in the PRTPAGE *FONT control operations. When the 'FONT_PATH' keyword is being used, a Unix OS file named 'fonts.scale' MUST exist in each specified directory that is an Unix OS font index file that defines the font names, attributes and there associated TrueType (.ttf) files. If the Unix OS font index file does not exist, the Unix command named 'mkfontscale' can be used to create the 'fonts.scale' index file each directory specified in the 'FONT_PATH' keyword. PRTOPEN instruction notes: [label] PRTOPEN [{window};]{pfile},{device},{jobname}[,{options}...] 1. If the {device} for the PRTOPEN is specified with the 'pdf:', the {jobname} parameter can be NULL or it can contain the fully qualified path and PDF file name where the Advanced Print operations are to be written. If the {jobname} is NULL, a File selection Dialog is presented to allow the end-user to specify the PDF file name to be used for output. Optionally, an {options} keyword named 'PDFNAME={svarslit}' can be used to specify a PDF output file name. If the PDFNAME keyword parameter is used, the PDFNAME file name is used for the PDF output and the {jobname} is expected to contain a print job name. 2. The basic PDF output it written requiring a PDF reader version 1.4 or later. 3. A new {options} keyword named 'FLAGS={dnumnvar}' has been added for a PRTOPEN instruction that specifies a numeric value that is a bit mask to invoke specialized behaviors for the PDF implementation. FLAGS={dnumnvar} Bit mask value to invoke specialized behaviors for the PDF support implemented for advanced printing. The bit mask values are defined as follows: P_FLAGS_NO_COMPRESSION EQU 1 Do not compress data in the PDF output file. P_FLAGS_EMBED_FONTS EQU 2 Embed fonts in the PDF output file. When built-in fonts named Times, Helvetica, and Courier are being used in a PRTPAGE *FONT control, these fonts are NOT embedded the PDF output file. Only, non-built-in fonts are embedded in the PDF output file. P_FLAGS_SUB_GENFONTS EQU 4 When this bit is turned on, the PDF support detects when a Windows font with a specific name is used in a PRTPAGE and then a PDF built-in generic font is substituted and put into the PDF output file. See the following table: Windows Font in PRTPAGE PDF Output Font Times New Roman Times Arial Helvetica Courier New Courier P_FLAGS_SUB_WINFONTS EQU 8 When this bit is turned on, the PDF support detects when a PDF built-in font with a specific name is used in a PRTPAGE and then a Windows font is substituted and put into the PDF output file. See the following table: PDF Built-in Font in PRTPAGE PDF Output Font Times Times New Roman Helvetica Arial Courier Courier New 4. A new {options} keyword named 'PDFNAME={svarslit}' has been added for a PRTOPEN instruction that specifies a fully qualified path and file name used to write the PDF output. PDFNAME={svarslit} This optional keyword parameter can be used to specify a path and file name to write the PDF output. When the keyword parameter is used, it takes precedence and its file name is used for PDF output instead of the {jobname} string. The implementation of this keyword is intended to give a PL/B application the flexibility to specify both a {jobname} and a PDF output file name when using an advanced Print Preview that has both a PRINT and PDF output button available. Example of PRTOPEN to a PDF file: PRTOPEN Prt,"@pdf:","c:\temp\test.pdf" In this case, the Print Preview is being used and the {jobname} specifies the PDF output file. In addition, the Print Preview has a single output button titled 'To PDF'. The Print Preview can only output to a PDF file. Also, when this PL/B statement is executed by a PLBSERVE Application Server, the UI output is always shown at the PLBCLIENT client workstation. Otherwise, all other PL/B runtimes that execute this case generates the PDF output relative to the system where the runtime is executing. PRTOPEN Prt,"pdf:","c:\temp\test.pdf" In this case, a PDF file specified in the {jobname} is written directly. When this statement is executed by a PL/B runtime, the PDF file is located on the system where the runtime is executed. Therefore, when this statement is executed for a PLBSERVE Application Server, the PDF output file is located at the server system where PLBSERVE is executing. PRTOPEN Prt,"!pdf:","c:\temp\test.pdf" In this case, a PDF file specified in the {jobname} is written directly. When this statement is executed by a PLBSERVE Application Server, the PDF file output is located at the PLBCLIENT client workstation. Otherwise, the other PL/B runtimes ignore the '!' character and the PDF output is located relative to the system where runtime is executing. PRTOPEN Prt,"@HP-Printer","My Job",PDFNAME="c:\temp\test.pdf" In this case, the Print Preview is being used and the PDFNAME keyword specifies the PDF output file. The Print Print Preview has two output buttons with one titled 'To PDF' and the other button titled 'PRINT'. The end user has the option of either printing to the printer device or of outputting to a PDF file. PRTPLAY instruction notes: [label] PRTPLAY {spool file},{prtname}[,{options }...] 1. If the {prtname} for the PRTPLAY is specified with the 'pdf:' printer device name, the 'JOBNAME={name}' option can be NULL or it can contain the fully qualified path and PDF file name where the Advanced Print operations are to be written for the un-spooled actions of the PRTPLAY instruction. If the JOBNAME is not specified or if it is specified as a PLB NULL DIM or literal, an File selection Dialog is presented to allow the end-user to specify the PDF file name to be used for output. Optionally, an {options} keyword named 'PDFNAME={svarslit}' can be use to specify a PDF output file name. If the PDFNAME keyword parameter is used, the PDFNAME file name is used for the PDF output and the JOBNAME is expected to contain a print job name. 2. The basic PDF output it written requiring a PDF reader version 1.4 or later. 3. The PDF support as implemented by the PRTPLAY instruction can allow existing PLB advanced print spool files to be converted to a PDF file as needed by a PLB application. 4. The internal processing for the PRTPLAY instruction requires the Windows sub-system. Therefore, a PRTPLAY statement executed by a PLBSERVE Application Server is always processed at the PLBCLIENT client workstation. In addition, the PDF output for a PRTPLAY is always generated and located at the PLBCLIENT client workstation. 5. A new {options} keyword named 'FLAGS={dnumnvar}' has been added for a PRTPLAY instruction that specifies a numeric value that is a bit mask to invoke specialized behaviors for the PDF implementation. FLAGS={dnumnvar} Bit mask value to invoke specialized behaviors for the PDF support implemented for advanced printing. The bit mask values are defined as follows: P_FLAGS_NO_COMPRESSION EQU 1 Do not compress data in the PDF output file. P_FLAGS_EMBED_FONTS EQU 2 Embed fonts in the PDF output file. When built-in fonts named Times, Helvetica, and Courier are being used in a PRTPAGE *FONT control, these fonts are NOT embedded the PDF output file. Only, non-built-in fonts are embedded in the PDF output file. P_FLAGS_SUB_GENFONTS EQU 4 When this bit is turned on, the PDF support detects when a Windows font with a specific name is used in a spool file and then a PDF built-in generic font is substituted and put into the PDF output file. See the following table: Windows Font in SpoolFile PDF Output Font Times New Roman Times Arial Helvetica Courier New Courier P_FLAGS_SUB_WINFONTS EQU 8 When this bit is turned on, the PDF support detects when a PDF built-in font with a specific name is used in a spool file and then a Windows font is substituted and put into the PDF output file. See the following table: PDF Built-in Font in SpoolFile PDF Output Font Times Times New Roman Helvetica Arial Courier Courier New 6. A new {options} keyword named 'PDFNAME={svarslit}' has been added for a PRTPLAY instruction that specifies a fully qualified path and file name used to write the PDF output. PDFNAME={svarslit} This optional keyword parameter can be used to specify a path and file name to write the PDF output. When the keyword parameter is used, it takes precedence and its file name is used for PDF output instead of the JOBNAME string. The implementation of this keyword is intended to give a PL/B application the flexibility to specify both a JOBNAME and a PDF output file name when using an advanced Print Preview that has both a PRINT and PDF output button available. Example of PRTPLAY to a PDF file: PRTPLAY "test.spl","pdf:",JOBNAME="c:\temp\testspl.pdf" The PDF file output is generated at the PLBCLIENT client workstation. PRTPLAY "test.spl","pdf:",PDFNAME="c:\temp\testspl.pdf" The PDF file output is generated at the PLBCLIENT client workstation. PRTPLAY "test.spl","@pdf:",JOBNAME="c:\temp\testspl.pdf" A Print Preview is presented to the end user at the PLBCLIENT client workstation. The Print Preview has a single output button titled 'To PDF'. The PDF output file is located at PLBCLIENT client workstation. PRTPLAY "test.spl","@pdf:",PDFNAME="c:\temp\testspl.pdf" A Print Preview is presented to the end user at the PLBCLIENT client workstation. The Print Preview has a single output button titled 'To PDF'. The PDF output file is located at PLBCLIENT client workstation. PRTPLAY "test.spl","@HP-Printer",JOBNAME="My Job Name": PDFNAME="c:\temp\testspl.pdf" A Print Preview is presented to the end user at the PLBCLIENT client workstation. The Print Preview has two output buttons. One button is titled 'To PDF' and the other button is titled 'PRINT'. If the 'PRINT' button is selected, the printed output is at the PLBCLIENT client workstation. If the PDF output is selected, PDF file is located at PLBCLIENT client workstation. GETFILE instruction notes: 1. The PRTNAME keyword returns a 'pdf:' name for a PFILE that has been opened using the 'pdf:' device name. 2. The 'GETFILE PRTNAME=' instruction is supported for all clients and runtimes including PLBCLIENT, PLB (Unix), PLBSSERVE (Windows and Unix), PLBWIN, and PLBNET. GETINFO PFILE instruction notes: 1. The GETINFO instruction is not supported when using a Unix runtime. 2. The 'GETINFO FONTS' instruction is supported for Windows PLBCLIENT clients and for PLBWIN\PLBNET runtimes. 3. The 'GETINFO TYPE={font},,PRINTER=' instruction is supported for Windows PLBCLIENT clients and for PLBWIN\PLBNET runtimes. 4. The 'GETINFO TYPE={pfile}' instruction is supported and can be executed for all supported runtimes and clients. When a PFILE has been opened for a 'pdf:' device, the GETINFO PFILE instruction returns the data as relating to the Sunbelt PDF device. This table shows the expected values to be returned when a 'pdf:' device is opened in a PFILE used in a 'GETINFO TYPE={pfile}' instruction. The '(xxx)' indicates the expected results when a 'pdf:' device is being used. Column Size Comment 1 8 Current Sunbelt PDF version level (Value = 1) 9 8 Page width in current print Units 17 8 Page height in current print Units 25 8 Page width in millimeter Units 33 8 Page height in millimeter Units 41 8 Number of color bits per pixel (Value = 24) 49 8 Number of PDF specific fonts (Value = 5) 57 1 Can draw pictures? (Y or N) (Value = Y) 58 4 Number of copies (Value = 1) 62 1 Print all PDF pages (Value = Y) 63 1 Print selection only (Value = N) 64 8 Print dialog start page (Value = 1) 72 8 Print dialog end page (Value = 32000) 80 1 Print alignment right (Y or N) 81 1 Print alignment decimal (Y or N) 82 1 Fill On Enabled (Y or N) 83 1 Pict Rectangle Enabled (Y or N) 84 1 Overlay Enabled (Y or N) 85 4 Number of characters in Printer Name (Value = 4) 89 31 Printer Name (Value = 'pdf:') 120 110 All values are returned as '0'. 230 8 Current vertical print position 238 8 Current horizontal print position 246 4 Current print units 250 8 Current print character height in pixels 258 8 Current print character width in pixels 266 8 Current vertical print position in PFILE Units. 274 8 Current horizontal print position in PFILE Units. ------------------------------------------------------------------------------- PLBWIN, PLBNET, ALL GUI CLIENTS - Added a new property named 'AUTOFORWARD={dnumvar}' for an EDITDATETIME object. By default when this property is not being used, the data entry for an EDITDATETIME object is entered on a field by field basis and the end user action using the left/right arrow keys is used to go to the next field to be entered. If the AUTOFORWARD property is set to a value of one, the runtime automatically detects when a field in the EDITDATETIME object has been entered by the end user and the focus is automatically change to the next field in to be entered. If the AUTOFORWARD property is set to a value of zero, the behavior is the same as described for the default. - Modified the PANEL object to support the AUTOREDRAW property. By making this change, a PLB program can selectively disable the immediate painting actions for all of the GUI objects on a PANEL. By using the AUTOREDRAW property on a PANEL can eliminates issues where the AUTOREDRAW set to FALSE for a WINDOW object was causing a 'ghost' affect such that the Windows OS was passing Windows mouse messages to other applications outside the scope of the WINDOW object. - Corrected a problem where an O103 error or even possibly a GPF error might occur when creating a CONTROL object for an ActiveX control. This problem would only occur if the ActiveX control was executing some of its code from allocated data buffers which is not an expected normal behavior. Note: 1. The problems as identified were occurring on systems that supported DEP (Data Execution Prevention) detection. The DEP detection prevents an application from executing logic from data buffers that have been allocated. The Sunbelt products NEVER execute code from allocated buffers. However, if an ActiveX control is being loaded and used by a Sunbelt runtime or client, the ActiveX control logic can execute its code from allocated buffers. 2. The problems as described above could occur when using a 9.6 PLBWIN, PLBNET, PLBCLIENT, or PLBCLINET when using an ActiveX control. All of these Sunbelt products were created using a Microsoft 2010 Development Studio. It turns out that the 2010 Studio created the runtimes with DEP enabled by default. Therefore, the problems as described could occur using these runtimes. 3. However, the problems as described did NOT occur when executing PLBWIN5, PLBNET5, PLBCLIENT5, or PLBCLINET5. All of these Sunbelt products were created using a Microsoft 2005 Development Studio. The 2005 Studio DOES NOT have DEP support and therefore these modules are NEVER built with DEP detection enabled. 4. The corrective action for 9.6A is to turn the DEP feature OFF when building the Sunbelt products using the Microsoft 2010 Development Studio. - Corrected a problem where the PRTPAGE instruction was ignoring the underline attribute of a FONT object. - Corrected a problem where the Print Preview window was not spacing text string data properly. A symptom of this problem is that a string printed as many small segments would give different character spacing versus when all of the text data is output as a single string. - Corrected a problem where a MouseWheelMode method result for a WINDOW object was not being returned to the user program. - Corrected a problem where the column attribute fonts were not being scaled for a LISTVIEW object. This column attribute fonts are the fonts that have been inserted using the InsertAttrFont method for a LISTVIEW. - Corrected a problem where an EXECUTE instruction did not work as expected when the runtime executed a command line as follows: 1. The PLB_CURDIR keyword was defined for the runtime. 2. The command line to be executed contained embedded WS characters. 3. A leading and trailing double quote (") character around the command line string. - Corrected a problem for a RADIO and CHECKBOX object where the foreground text color could not be set or changed. This problem was caused by changes in the 9.6 release when the THEME support was added. - Corrected a problem for a RADIO and CHECKBOX object where the foreground text color could not be set or changed. This problem was caused by changes in the 9.6 release when 'visual style' was being applied using ComCtrl32 version 6. With this change for 9.6A, the 'visual style' is now removed when the foreground color is set to a color other than BLACK. If the foreground color is set to BLACK, the 'visual style' is applied when using ComCtrl32 version 6. ------------------------------------------------------------------------------- PLBNET, PLBCLINET - Modified the .NET runtimes to work around a VALIDATION problem caused when a custom user .NET object gains the Windows focus and yet it does not generate a notification when the .NET object loses the focus. The Sunbelt VALIDATION operation as originally implemented expects to get a Windows message\notification of a got focus and also expects to get a Windows message\notification of a lost focus to execute as expected. This modification is to work around a special case when an object does not generate a lost focus event as expected. ------------------------------------------------------------------------------- PLBCMP - Added a 'LIKEPTR' keyword to a RECORD declaration. The 'LIKEPTR' keyword causes a record structure composed of all variable pointers based on a specified RECORD template. Format: (6) [label] RECORD [*][(arraysize)] LIKEPTR {record} Note: 13. If the LIKEPTR clause is used , the {record} label that is referenced must be a previously declared record declaration or a previously declared record prototype definition. If a record array is desired, it must be specified at this time. All of the record members are created as variable pointers when the LIKEPTR clause is used. Also, the record member pointers are created an un-initialized pointers when the {record} is a record DEFINITION. Otherwise, the record member pointers are created and initialized to point to the corresponding member in the {record} structure. Example: ORG RECORD A DIM 5 B DIM 5 RECORDEND . ORGPTR RECORD LIKEPTR ORG . ORGARR RECORD (3) LIKEPTR ORG . - In release 9.6, a compiler change was made to correct an internal compiler error that would prematurely terminate the compiler when a RECORD without a member specified was passed as parameter in a CALL USING list. The corrective changes for that internal compiler error caused a secondary error in the 9.6 compiler that can cause unexpected program code that results indeterminate program execution. As a result, the 9.6 compiled program can encounter unexpected program execution when a RECORD array with an index is used under the following conditions: 1. An indexed RECORD array with a member specified is used in a CALL USING list or as a parameter for a LROUTINE or ROUTINE. 2. The index used for the RECORD array is a decimal immediate value or an EQUATE value. 3. The failing behavior can change depending on the data and how the data is aligned in the UDA when the CALL USING instruction is executed. Example of Errors using a RECORD Array as described above: REC1 RECORD A DIM 10 B DIM 10 RECORDEND . RECARR RECORD (2) LIKE REC1 RECARRX RECORD (2) LIKE REC1 . NDX FORM "2" E2 EQUATE 2 C2 CONST "2" . MOVE "1111111111", RECARR(1).A MOVE "2222222222", RECARR(1).B MOVE "3333333333", RECARR(2).A MOVE "4444444444", RECARR(2).B MOVE "AAAAAAAAAA", RECARRX(1).A MOVE "BBBBBBBBBB", RECARRX(1).B MOVE "CCCCCCCCCC", RECARRX(2).A MOVE "DDDDDDDDDD", RECARRX(2).B . ; CALL "YYY" USING RECARR(E2).B ;F05 error (EQUATE) ; CALL "YYY" USING RECARR(2).B ;F05 error (Decimal Immediate) ; CALL "YYY" USING RECARR(C2).B ;OK (CONST) CALL "YYY" USING RECARR(NDX).B ;OK (Numeric Variable) . keyin "hit enter to exit:",s$cmdlin shutdown . . YYY ROUTINE RECARRX(E2).B ;GPF\F05 (EQUATE) ;YYY ROUTINE RECARRX(2).B ;GPF\F05 (Decimal Immediate) ;YYY ROUTINE RECARRX(NDX).B ;OK (CONST) ;YYY ROUTINE RECARRX(NDX).B ;OK (Numeric Variable) . DISPLAY RECARRX(2).B . RETURN - Modified the compiler to support a new property for an EDITDATETIME object that is named 'AUTOFORWARD={dnumnvar}'. See the runtime AUTOFORWARD property description for more details. - Modified to allow MOVE operations between RECORD POINTERs and VARLIST or VARLIST pointers. Since a RECORD pointer actually contains the address of a varlist of the members of a RECORD, this change can allow a member to member MOVE operation of every variable in the source and destination variable lists. With this compiler change, now a RECORD pointers can be used for both the source and destination operands of a MOVE instruction. Example: Rec1List LIST Rec1 RECORD A DIM 5 B DIM 5 RECORDEND LISTEND Rec1Ptr RECORD ^, Rec1 . Rec2List LIST Rec2 RECORD X DIM 5 Z DIM 5 RECORDEND LISTEND Rec2Ptr RECORD ^, Rec2 ..... . All of these MOVE syntax formats are now allowed to give the . same results. . MOVE Rec1List, Rec2List MOVE Rec1Ptr, Rec2Ptr ;Now supported in 9.6A MOVE Rec1Ptr, Rec2List ;Now supported in 9.6A MOVE Rec1List, Rec2Ptr ;Now supported in 9.6A . - Modified the compiler to allow the AUTOREDRAW property for a PANEL object. - Modified the GETMODE and SETMODE instructions to support a keyword named IOCANCELCHAR and IOCHECKTIME as described in the runtime sections. - Modified the GETFILE to support the keywords named CANCELCHAR and CHECKTIME for a FILE, AFILE, and IFILE file variable. - Modified the OPEN/PREPARE instructions for the FILE and IFILE file variables to support the CANCELCHAR and CHECKTIME keywords. With this change the OPEN/PREPARE instructions for a FILE, AFILE, or IFILE file variable now supports the CANCELCHAR and CHECKTIME keywords. - Modified to allow the PRTOPEN, PRTPAGE, and PRTCLOSE instructions to be compiled when the PLBCMP compiler is executed using a Unix OS system. - Corrected a problem where a program using DBFILE and DBxxxx statements could not be compiled on a Unix system. ------------------------------------------------------------------------------- PLBDBUG - Modified the 'IP' command to return the current program code address and module name when the no parameter is specified. - Modified the PL/B character debugger to retain the initial command line program path and filename used when retrieving the starting SDB file. This change allows the PL/B character debugger to avoid unnecessary IO errors that could occur when the starting SDB is not found in the normal locations searched by the runtime. - Modified to retain SDB path and file name information for the primary program started from a command line or started by a CHAIN instruction. This change helps the character debugger locate the SDB file when the primary program is not located in a directory searched by a runtime. ------------------------------------------------------------------------------- EMBEDINI - Modified the 'Embedini' utility to output an appropriate EOR depending on whether a Windows or Unix OS platform is being used. This change is to correct a problem where the last source line in an embedded INI in a plbclient could not be accessed unless it was terminated with an appropriate EOR sequence. ------------------------------------------------------------------------------- SUNAAMDEX - Modified to detect that too many AAM blocks have been written as determined from the size of the TXT file and expected number of records. This change has been made to prevent an error scenario where a '.aam' could continue to grow to fill a disk volume unexpectedly. - Modified to report an error where the same TXT record or record block could be read more than once after an OS read error had occurred. This error is reported as follows: "LastLFA Re-read Error Detected...:(nnn)" ------------------------------------------------------------------------------- ADMEQU.INC - Reviewed for 9.6A patch release. ------------------------------------------------------------------------------- PLBEQU.INC - Added the VT_I1 definition. - Added extended VT type values that can be returned from GETPROP VARIANT VARTYPE operation. ------------------------------------------------------------------------------- PLBMETH.INC - Reviewed for 9.6A patch release. ------------------------------------------------------------------------------- SA_DLL32.DLL - Corrected a problem where Sunaccess Read and Write functions would cause an unexpected exception error (GPF) when the files were opened and accessed via a Data Manager. ------------------------------------------------------------------------------- SUNWODBC.DLL - Modified the DBCONNECT support to give extended OS error information that gives the SQL State diagnostic value when it is available for an error. The SQL State diagnostic values are described at the following Microsoft link: "http://msdn.microsoft.com/en-us/library/ms714687.aspx" ------------------------------------------------------------------------------- SUNWADO.DLL - In release 9.6, three ADO drivers were generated and named: sunwado.dll - Compatible with 9.5 and earlier versions of driver sunwado25.dll - Compatible with 9.5A and 9.5B versions of driver sunwado28.dll - Created using latest ADO interface libraries The end-user should choose the appropriate 9.6 version of a SUNWADO driver depending on the previous version that was being used. ------------------------------------------------------------------------------- DESIGNER.PLC - Corrected an issue with saving a form that had a user defined event registered. - Now insures the toolbox tab is selected when opening or creating a form and using the integrated layout. - Corrected an issue with maintaining the categorized view selection of the property window. - Added logic to maintain the property window events display selection in the ini file. - Corrected an issue involving the creation of an object array using multiple selection. - Restricted comboboxes within the Designer to forty visible rows. - Now provides an option that allows the user to select a font used throughout the program. - The user specified form font is now applied to newly created .Net objects and controls. - Now checks the position of the main form to insure it is on an active monitor. - Added a behavior option to disallow ComCtrl6 objects and properties. This allows a designer with ComCtrl6 availability to create and modify forms for runtimes that do not have ComCtrl6 available. - Corrected an issue in the copy and paste of objects involving the FloatMenu property. - Corrected an issue in closing a form and selecting another open form. - Corrected an issue in locking and unlocking all form controls. - Added a splash screen to inform the user of the Designer's initialization process. - Corrected an issue with selecting an object using the code window combobox. - Optimized the form open logic for improved performance when accessing a form with a large number of objects. - Added a display of the number of objects on the active form to the toolbar area of the main window. - Modified the alignment line algorithm resulting in greatly improved performance when drawing or moving objects on forms with a large number of objects. ------------------------------------------------------------------------------- EDITOR.PLC - Added logic to create the program working directory if necessary when the configuration file is not found. - Corrected issues in the Remove Trailing Spaces logic that occurred when a column selection had a width of zero. ------------------------------------------------------------------------------- SUNIDE.PLC - Corrected source file name checking that resulted in an infinite loop if UNC names were used. ------------------------------------------------------------------------------- SUNCS21.OCX - Corrected several issues regarding syntax coloring. ------------------------------------------------------------------------------- SCHEMAEDITOR.PLC - Now provides an option that allows the user to select a font used throughout the program. ------------------------------------------------------------------------------- DBGIFACE.PLC (Graphical Debugger) - Corrected an issue with restoring the command window height on startup. ------------------------------------------------------------------------------- WATCH.PLC - Now provides an option that allows the user to select a font used throughout the program. ------------------------------------------------------------------------------- DBEXPLORER.PLC - Now provides an option that allows the user to select a font used throughout the program. -------------------------------------------------------------------------------