############################################################################ PRONTO-4GL Release Notes ############################################################################ ** Release 6.5v3.1 (BETA) ** ============================ Miscellaneous ------------- - Internal changes for OLE implementation. - Fixed issue with radio button selection when clicking on a grayed accept. - Added PRODISTDICT (distributor dictionary) support to the proman, progen and proenq utilities. - PRODISTDICT support also added to the PRONTO-ODBC service. Version 3.2.4 of the ODBC client driver is required to individually select PRODISTDICT. Older version drivers will include PRODISTDICT automatically if both the primary and secondary dictionaries are selected. ** Release 6.5v3.0 (BETA) ** ============================ Row/Object Parameters --------------------- - Parameters for a routine can now be defined as a complete row/record for an object. This allows the entire row to be passed without the need to specify individual fields. Rows may also be specified as return values. - NOTE: the entire contents of the row/record is copied. If only a subset of the record is needed it may be more efficient to pass individual fields. - This mechanism is designed for passing row values to/from routines defined in component libraries. - The syntax for passing a row parameter within the DO statement is: PARAMETER is .* [ RETURNING .* ] For example: do xyz parameter is deb-master.* returning deb-master.* - The syntax for defining a routine with a row parameter is: PARAMETER .* LIKE .* [ RETURNING .* ] For example: parameter is deb.* like deb-master.* returning deb.* - Multiple row parameters may be passed and/or returned. Other parameter fields may also be passed/returned. - You can return a previously defined row (i.e. a row defined as a parameter). You are also permitted to return the values of a globally defined object. - Parameter rows defined using the LIKE clause are automatically defined as NO-JOINS. This means that when referencing a field within a row you must prefix it with its . For example: message "deb.accountcode is ", deb.accountcode - Field values within a row can be copied using the same mechanism used for NO-JOINS objects (refer to the OBJECT declaration in the reference manual). - The row parameter is not an object definition. File I/O operations cannot be performed using . - A routine can also receive a row into a globally defined object. To do this you specify the following for the parameter definition: PARAMETER .* GLOBAL For example: parameter is deb-master.* global - If you receive a row into a global object parameter you may reference the fields within that object as normal, without the need to prefix the object name unless the object itself is defined as NO-JOINS. - Revieving a row into a global object is similar to performing a RESTORE operation. The current row for the object is not affected. The physical file/table being processed by the object may be different to that of the object whose row was passed. - Routines that receive global object parameters should not be called recursively, as the same global data area is used for each call. Data Triggers ------------- - A trigger is a routine that is automatically invoked (triggered) whenever a specific condition occurs. - Data triggers can be defined for the following trigger conditions: Before a record is inserted into an object After a record is inserted into an object Before a record is updated After a record is updated Before a record is deleted After a record is deleted - An object defined LIKE another object will inherit the triggers of the LIKE object, if the base object is defined in a data dictionary. - Triggers are only invoked for INDEXED tables. They are never invoked for other table types. - Triggers can be disabled for an object if that object is opened with the NO-TRIGGERS clause specified. Programs that perform data conversions etc. may need to turn trigger processing off for certain objects. For example: OPEN deb-master NO-TRIGGERS - The "before" triggers are intended for final data validation and referential integrity checks prior to the operation being performed. A "before" trigger can stop the operation from being performed if it exits with a non-zero exit status. The operation will fail with error EFAILEDTRIGGER (10012). - Data triggers are defined in the data dictionaries. Standard triggers for an object are defined in the same dictionary that the object is defined in. These triggers will be compiled into any program that references that object. - User defined triggers may be specified in the PROUSRDICT dictionary on site. These triggers may be defined for any object regardless of the dictionary that the object is defined in. User triggers are identified at run time and do not need to be compiled into programs. User triggers can be maintained by running: prospl prodict -user-triggers - The following trigger types are defined: TRIGGER_BEFORE_INSERT, TRIGGER_BEFORE_UPDATE, TRIGGER_BEFORE_DELETE TRIGGER_AFTER_INSERT, TRIGGER_AFTER_UPDATE, TRIGGER_AFTER_DELETE - Data triggers must be defined in component libraries. A trigger routine has three parameters passed to it. The first is the old row, the second is new row, and the third is the trigger type. The old and new row values are the same for insert and delete triggers. The returning clause is optional, and if used must specify the new row. For example: procedure deb-master-trigger export parameters are oldrow.* like deb-master.*, newrow.* like deb-master.*, trigger-type pic 9(4) returning newrow.* - A standard (compiled in) trigger may define a RETURNING clause specifying the new row. Any changes made to values of the new row by a before update or before insert trigger will be returned to the calling routine and applied to the operation. Returning values are IGNORED for all other trigger types, and all user defined triggers regardless of their type. - NOTE: Data triggers are only invoked for changes to the data made by PRONTO-4GL programs (including browse screens). Changes to the data made using the PROCOPY utility, PRONTO-SQL, external (non PRONTO) applications, or changes made directly to the database will not invoke PRONTO data triggers. - Triggers are not invoked as a result of the SERIAL statement. PRONTO Thin Client (Unix/Linux only) ------------------------------------ - Improved protocol for determining if images are present on a workstation. This is intended to improve the performance on some networks (e.g. WANs) that have significant delays on round trip communications. - By default, the runtime will not query the existence of a bitmap. Instead, it will assume that the bitmap is cached on the client. If the bitmap is not cached on the client then the client will request it. This request will only occur once user input is sought from the runtime. - To avoid waiting for user input before a bitmap request will be received from the client if it is not cached, the NO-WAIT clause may be specified for the DISPLAY BITMAP statement. e.g. DISPLAY BITMAP "/pronto/bitmaps/test.jpg" @10,10 NO-WAIT OLE/ActiveX ----------- - Added the OLE-BULK-PUT () function. If this function is called with a non-zero parameter value (e.g. TRUE) it will disable the querying of the result status for individual ole-put-property functions. This can be used when a large number of calls to ole-put-property are used (e.g. to populate the contents of a spread sheet). - When OLE-BULK-PUT is called with zero parameter value (e.g. FALSE) it turns off bulk processing. The return status of the function will indicate if any of the put propery functions had failed. - This function when used with the PRONTO Thin client may improve the performance on networks that have significant delays on round trip comms. It will have no impact on Windows based implementations. Miscellaneous ------------- - Changes by the SERIAL statement to a serial number stream on a table are no longer written to the audit.log if auditing has been enabled for that table. - The SERIAL statement now indicates no current record for that table after it completes. - Fixed fault where invoking a Windows based task that could not be found did not report an error using the COMMAND statement. - Fixed issue where down arrow could bypass accepts in standard entry mode. ** Release 6.5v2.0 (BETA) ** ============================ Miscellaneous ------------- - Added the AUTO-TRANSACTION clause to a PROCEDURE. If the procedure is invoked and there is no transaction in progress, a transaction will be automatically started. Upon exit of the procedure, the transaction will be either committed or rolled back depending upon the exit status of the procedure. If the procedure runs to completion or exits via an EXIT statement with a zero (0) exit status, then the transaction is committed. If the procedure exits via any other method such as via an EXIT statement with a non-zero exit status, the transaction will be rolled back. If a transaction is already in progress when the procedure is invoked then no automatic commit or roll back will be issued on exit. - Added the TRANSACTION-ACTIVE() function. This function returns TRUE if a transaction is currently in progress within the application, otherwise it returns FALSE. - Added the PROLOGINTLOCKS (log interactive locks) environment variable. This variable can be set to the full path name of a file to write log entries to if the runtime encounters user input when the application has locked records or is in a transaction. Tables that have application locks defined for them are not logged. This is for analysis purposes only. - Fixed problem with Find "binocular" icon availability for saved data grid views. - Fixed problem where a blank display trigger return value would not overwrite existing non-blank data on the screen. - Fixed data-grid column scroll issue during data entry when PRONTO-Xi navigation control bar used. OLE/ActiveX ----------- - The following functions were added to enable interaction with applications on a Windows workstation using OLE (ActiveX) automation. ole-get-active-object (class-id) - This returns an interface ID number for the COM object with the specified class ID if one is currently active. It returns zero if no such object is currently active. ole-create-instance (class-id, context-flag) - Create an instance of a COM object with the specified class ID. If successful the interface ID number is returned, otherwise zero is returned. ole-create-control (class-id, row, column, height, width) - This returns an Interface ID number for the control. The control is created within the current active window at the coordinates specified. ole-query-interface (interface-id, class-id) - Queries a COM object for an interface. If the class ID is found the query interface ID number is returned, otherwise zero is returned. ole-addref (interface-id) - This function increments the reference count for a COM object. If successful TRUE is returned, otherwise FALSE is returned. ole-get-dispatch-id (interface-id, prop-meth-name) - Get the dispatch interface ID of a property or method. ole-get-property (interface-id, dispatch-name, return-field, parameter-values) - Get a value from a property on an interface. The return-field contains the property value returned. If successful the function returns TRUE, otherwise FALSE is returned. ole-put-property (interface-id, dispatch-name, value) - Put a value into a property on an interface. If successful the function returns TRUE, otherwise it returns FALSE. ole-put-property_byref (interface-id, dispatch-name, value) - Put a value into a property by reference on an interface. If successful the function returns TRUE, otherwise it returns FALSE. ole-call-method (interface-id, dispatch-name, return-field, parameter-values) - Call a method on an object interface. The return-field will contain any return value from the method. This must be specified even if the method does not return a value. If successful the function returns TRUE, otherwise it returns FALSE. ole-advise-event (interface-id, class-id, queue-size) - Register a COM object to receive events based on an outgoing class ID. If successful an advise interface ID number is returned, otherwise zero is returned. ole-unadvise-event (interface-id, advise-interface-id) - Deregister from event notification for the specified advise interface. If successful the function returns TRUE, otherwise it returns FALSE. ole-unadvise-all (interface-id) - Deregister from all events for the COM object. If successful the function returns TRUE, otherwise it returns FALSE. ole-get-event (interface-id, advise-interface-id) - Get the next event from the event queue. An event interface ID is returned if an event was found, otherwise zero is returned. ole-enum-reset (interface-id) - Reset the enumeration cursor to the start of the collection. If successful the function returns TRUE, otherwise it returns FALSE. ole-enum-next (interface-id, return-field) - Return the next value in the enumeration. If successful the function returns TRUE, otherwise it returns FALSE. ole-release (interface-id) - Decrement the reference count for the interface ID. The resources for the interface will be deallocated if the reference count is zero. This function must be called for every interface ID allocated once the application is finished with that interface. If successful the function returns TRUE, otherwise it returns FALSE. ole-status () - Return the error status number for the most recent OLE call. ole-error-description (error-status) - Return the description for the specified OLE error number. The parameters used are: - class-id can be either the string format of the object's ID number (e.g. "{000208020-0000-0000-C000-000000000046}"), or its program ID (e.g. "Excel.Sheet"). The program ID format may vary between different languages or locales, and should be avoided for applications that may need to run in multiple locales. - context-flag is a number specifying one or more of the following predefined values: CLSCTX_INPROC_SERVER, CLSCTX_INPROC_HANDLER, CLSCTX_LOCAL_SERVER, CLSCTX_INPROC_SERVER16, CLSCTX_REMOVE_SERVER, CLSCTX_INPROC_HANDLER16, CLSCTX_NO_CODE_DOWNLOAD, CLSCTX_NO_CUSTOM_MARSHAL, CLSCTX_ENABLE_CODE_DOWNLOAD, CLSCTX_NO_FAILURE_LOG, CLSCTX_DISABLE_AAA, CLSCTX_ENABLE_AAA, CLSCTX_FROM_DEFAULT_CONTEXT - interface-id is the ID number returned by various functions used to identify a specific interface. Fields that store this should be defined as OLE-INTERFACE. NOTE: all interface IDs allocated must be released (deallocated) by the application via a call to ole-release when they are no longer needed. - prop-meth-name is the name of a property or method within the interface. - dispatch-name can be either the name of a property or method, or it can be the numeric dispatch interface ID of the property or method as returned by ole-get-dispatch-id. Names may be specified as dot separated multi-part names (e.g. "Application.Workbooks.Add"). - return-field is the name of a field which will store the return value of the property or method being invoked. The return-field must be of the required type and size for the property or method. A return-field may not be an array or an element of an array. - parameter-values are optional parameter values required by the property or methods. - queue-size is a number specifying the maximum pending events to queue up. If zero is specified a default value will be used. - error-status is the error number returned by a call to ole-status. - A new field data type called OLE-INTERFACE has been added. This may only be specified for fields defined within a 4GL program, and is not valid for dictionary based fields. This data type can be used to store an OLE interface ID. Unix/Linux ---------- - Unix/Linux implementations will require PRONTO-Xi Thin Client release 6.5v2.0 to activate various features in this release. ** Release 6.5v1.5 ** ===================== Miscellaneous ------------- - Fixed issue with memory files which could potentially result in unaccessable records under a specific set of conditions. - Worked around loss of child process exit status caused by Oracle 10. ** Release 6.5v1.4 ** ===================== Miscellaneous ------------- - Fixed field context help lookup problem. - Fixed printer name matching problem in proprint when printers defined in upper case. - Fixed time of day functions for 64bit AIX. ** Release 6.5v1.3 ** ===================== Miscellaneous ------------- - Overcome QUIT signal problem with entry of Euro symbol (Unix only). - Fixed window size issue in the Report Manager (proprint) when displaying #P format reports. SQL Server ---------- - Changed SQL lock timeout to overcome an issue where PROCOPY could encounter a a locked record despite the table being locked. ** Release 6.5v1.2 ** ===================== Miscellaneous ------------- - Internal operations table memory management changes. ** Release 6.5v1.1 ** ===================== Miscellaneous ------------- - Fixed scaling reset issue on input for ACCEPT fields with scaling specified. - Overcame "define table overflow" error in 4GL preprocessor for Windows implmentations. ** Release 6.5v1.0 ** ===================== Official Release ---------------- - This is the official PRONTO-Xi Phase IV release - Unix/Linux users should install Pronto Thin Client release 6.5v1.0. ** Release 6.5v0.7 (BETA Release) ** ==================================== Miscellaneous ------------- - Fixed reported "Internal error in rec_offs()" error. ** Release 6.5v0.6 (BETA Release) ** ==================================== Windows ------- - Fixed fault in mail-send() function that duplicated the mail body if attachments were used and the message was sent to multiple recipients. - Fixed performance issue introduced in release 6.4v1.1 for SQL Server. ** Release 6.5v0.5 (BETA Release) ** ==================================== Miscellaneous ------------- - An additional include directory location can be specified to PROCMP via the PROCMPINC environment. This include directory will be searched after any directories specified on the command line via the -I option, and before the default directory location/s. Care must be taken on systems that specify this environment that have multiple application versions or sets installed. This environment may need to be defined for each separate application set on the system to avoid the possibility of the incorrect include directory locations being used. For example, if it is used the PROCMPINC environment should be set everywhere that the PRODICT environment is also set. ** Release 6.5v0.4 (BETA Release) ** ==================================== Miscellaneous ------------- - Fixed problem with hover button highlight occasionally not being reset. - Fixed issue that allowed user to arrow key away from a field that failed a screen customiser after_accept trigger test. Thin Client (Unix only) ----------------------- - Support binary (control) characters in general data transmitted between the thin client and the Unix based runtime (e.g. by calls to the get-registry-value function). This has no effect on the existing auxiliary/slave printing and file transmission facilities. ** Release 6.5v0.3 (BETA Release) ** ==================================== Miscellaneous ------------- - Added -I option to PROCMP. This allows for the specification of additional include directory locations. Multiple -I options may be specified on the command line, and will be searched in order. e.g. procmp -I $CUS/include -I $BMS/include myprog.spl An informational message will be displayed by the compiler indicating the additional include directories if the -I option is used. - The text (BETA Release) will be added to the data area name if a BETA runtime is in use. - The F2 key will invoke the Windows calendar popup if the calendar icon is shown for the field. - The function REFRESH-QUICK-LINKS() was added. This will enable Quick Links and refresh the key values used. For example, this may be called in Entry mode once the key values have been entered. - The mathematical functions SIN(), COS() and TAN() were added. - The attributes UNDERLINE, BOLD and ITALIC were added to the OPTION statement. These impact the way text is displayed within the button. If the UNDERLINE attribute is used on an OPTION statement that does not specify a bitmap, then the button will be shown in a hyperlink style. - Added -e and -a options to the PROWHAT utility. The -e option lists the names of all exported routines. The -a option lists all API routines defined. The utility also now lists all component libraries referenced by the program. - The 4GL debugger now supports the ";ll" command to list all loaded component libraries. - Added additional data grid export options via the Tool menu. - Support added for Windows XP theme buttons. This can be selected within the color selection dialog window. - Data grid columns now support user specified conditional cell highlighting (color selection). - Scrolling the mouse wheel when current on an input field that traps up and down arrows will result in up/down arrow key processing rather than tabbing between the fields. - Unix/Linux implementations require Thin Client release 6.5v0.3 or later. Screen Customisation -------------------- - Added a new trigger type called "export_data_grid". This can be applied to a "confirmed" trigger for a mode in a data grid screen. The contents of the data grid will be exported and written to an XML file, which is passed as a parameter to the trigger program. The trigger program will be passed three additional parameters on the command line. These are 1) the name of the XML file, 2) a tag to identify the data grid, and 3) the title of the data grid screen. ** Release 6.5v0.2 (Internal BETA Release) ** ============================================= Miscellaneous ------------- - Added CAN-OVERRIDE and NO-OVERRIDE clauses. These can be specified for a routine's definition after the EXPORT clause to indicate if the routine is allowed to be overriden by custom component versions. If neither is specified then CAN-OVERRIDE is currently assumed. - Allow one additional row specified for a data-grid before "Review area too large" error is triggered. - Fixed fault where the SKIP statement could go past the report depth if multiple lines were skipped. - Fixed transaction active error message when a component library is loaded while a transaction is in progress. - Refresh colors for the DISPLAY and BOX statements if colors change. ** Release 6.5v0.0/6.5v0.1 (Internal BETA Release) ** ===================================================== Window Size and Coordinates --------------------------- - Windows may now be specified larger than 24 lines/rows (up to 255). - Statements that support row and column addressing within a window (e.g. DISPLAY, ACCEPT and BOX) now supports decimal places within the coordinates. e.g. @10.5,19.2 - NOTE: the coordinate for the origin of the screen (i.e. top/left) is @1,1 (not @0,0). Row/Column values less than 1.0 are invalid. - Even though decimal places are supported, the coordinate addressing is still based on a character grid. Unless otherwise specified, when an area of the screen is addressed, that area includes a full character cell position to the bottom and right of the end coordinate. For example: - "display ws-text @10,10 pic x(20)" occupies an area of the screen from @10.0,10.0 to @10.9999,30.9999. - "display ws-text @10.5,10.5 pic x(20)" occupies an area of the screen from @10.5,10.5 to @11.4999,31.4999. - "display bitmap 'abcd.bmp' @10,10 to @14,20" occupies an area of the screen from @10,10 to @14.9999,20.9999. - "window @1,1 to @23,80" refers to an area from @1.0,1.0 to @23.9999,80.9999. - The ABSOLUTE-COORDINATES clause was added to the BOX, CLEAR, DISPLAY BITMAP, and OPTION statements. This affects the interpretation of the "TO" coordinate if specified. The area specified does not include any part of the screen below or to the right of the "TO" coordinate. That is, it does not allow for the additional character position. For example: - "display bitmap 'abcd.bmp' @10,10 to @14,20 absolute-coordinates" occupies an area of the screen from @10,10 to @14,20 only. See later for more details of this clause when used with the BOX statement. - Added the GET-SYSTEM-METRICS () function. This returns the value for the requested system metric. The metrics currently supported are: 1: Width of standard character in pixels 2: Height of standard character in pixels 3: Width of screen in pixels 4: Height of screen in pixels NOTE: this function queries the client interface for this information, which means that there is a communications overhead each time it is called. Applications should store these values in a field if the values are used multiple times. For example, to address an individual pixel you can determine the coordinate increment for a pixel as follows: FIELD x-increment pic 9v9(6) FIELD y-increment pic 9v9(6) SET x-increment = 1 / GET-SYSTEM-METRICS (1) SET y-increment = 1 / GET-SYSTEM-METRICS (2) DISPLAY "TEST" @10 + y-increment, 10 + x-increment The above code will position 1 pixel down and to the right of the @10,10 coordinate. It is recommended that a field used to store the pixel increments be defined with a minimum of 4 decimal places. - The WINDOW-POSITION clause has been added to the SCREEN/MENU/PROCEDURE declarations. This clause only has affect if the WINDOW clause is also specified. The WINDOW-POSITION clause specifies a numeric value indicating the size or initial position of the window. The following values are currently supported: -1 Run this window in full screen mode. 1 to 9 The initial position of the window within the container window. The numbers are based on the following grid: 1 2 3 4 5 6 7 8 9 Where 1 means top/left, 2 means top/center, etc. e.g. WINDOW-POSITION IS 8 - NOTE: DATA-GRID columns do not currently support decimal addressing. The row/column coordinate for each field in the data-grid must use whole numbers. - Unix/Linux implementations require Thin Client release 6.5v0.0 or later. The BOX statement ----------------- - The SUNKEN clause was added to the BOX statement. Boxes with this attribute are drawn with a 3D sunken border. - The BOX statement now supports the COLOR is clause. The foreground color specifies the color of the box border. If a background color is specified then the box is filled with this color. The foreground color is ignored for sunken boxes. e.g. BOX @10,10 to @15,70 COLOR IS BLACK ON WHITE If the SUNKEN clause is also specified then the foreground color is ignored, but it will be filled with the specified background color if specified. - If a color is specified for a BOX with the TITLE clause, then the color will apply only to the text specified, and not for the box itself. - The ABSOLUTE-COORDINATES clause was added to the BOX statement. Normally the coordinates that the box is actually drawn is offset by half a standard character. That is, the box is drawn in the middle of the character cells rather than on the outer edge. The ABSOLUTE-COORDINATES clause means that the box will be draw at the coordinates specified, and are not offset by the half character. The OPTION statement -------------------- - The TEXT-POSITION clause was added to the OPTION statement. This clause allows you to specify the location of text within the button for the OPTION. If the BITMAP clause is also used, then a TEXT-POSITION value greater than zero indicates that the text for the option is to be overlayed on top of the bitmap. The position for the text is specified directly after this clause as a number between 1 to 9 or 11 to 19. The numbers are based on the following grids: 1 2 3 11 12 13 4 5 6 or 14 15 16 7 8 9 17 18 19 Where 1:11 means top/left, 2:12 means top/center, etc. Position numbers between 11 and 19 indicates that the text is to be displayed on multiple lines. The text must specify the line breaks by using "
" tags. e.g. OPTION "This is
a three line
button" @10,10 to @14,30 TEXT-POSITION is 15 - The SCALE clause for the OPTION statement now supports expressions. - The BITMAP-HOVER clause was added to the OPTION statement. This clause specifies a bitmap to be displayed when the mouse pointer is hovering (or floating) over the button. e.g. BITMAP-HOVER IS "hover.bmp" - The HOT-KEY clause was added. This clause specifies a hot key to be associated with the OPTION. When this hot key is pressed the OPTION is activated (depending on any WHEN condition). Currently only function keys (F1 - F24) can be specified as hot keys. The numeric codes to identify the function keys are the same as the function key number (e.g. the code for F5 is 5). e.g. HOT-KEY IS 5 NOTE: Hot keys are not processed in pop-up menus. - The HIDDEN clause was added. This clause indicates that this is a hidden (non displayed) option. This is primarily intended for use with the HOT-KEY clause to enable hot key functions without displaying a button. Coordinates are optional if HIDDEN is specified, however the option text is still required. Miscellaneous ------------- - The BACKGROUND clause was added to the DISPLAY BITMAP statement. Background bitmaps may be overlayed by text and other fields within the window. - Bitmaps will now be stretched to fit within the area specified for the bitmap. Previously bitmaps would only be shrunk if their size exceeded that of the area allowed. The aspect ratio of the bitmap will be preserved if any scaling is performed, unless the NO-ASPECT-RATIO clause is specified (see below). Bitmaps will not be stretched if only one coordinate is specified (i.e. no TO coordinate is given to specify an area). - The NO-ASPECT-RATIO clause has been added to the OPTION and DISPLAY BITMAP statements. This clause indicates that the aspect ratio of the bitmap will not be maintained if it is being stretched or shrunk. That is, it will be stretched/shrunk both vertically and horizontally to fully fit the area specified for the bitmap. - A DISPLAY statement that is positioned over a BOX or a BACKGROUND BITMAP will now be transparent (i.e. the box or bitmap will show through). This does not apply to displays that have a background color specified (e.g. by REVERSE or the COLOR statement). - The SCALE statement is now valid for an ACCEPT statement. It is ignored if the field being accepted forms part of a data grid. - The function ENABLE-STATUS-BAR () was added. This controls whether the status bar at the bottom of the container window is present or not. - Mail generation (via mail-send()) is no longer cancelled if a child program is invoked after the mail has been started but prior to the mail being sent. - Fixed XML tag generation error when printing a subscripted field at a column position that is specfied by an expression.