Interactive COBOL Release Notes 5.50 Mar-2024 The release notes are organized primarily by revision number, from newest to oldest for the 5.4x and up releases. For information on all of the 5.xx releases and additional notes on how the latest version is built, see readic.txt. Within each revision number section, there are up to three subsections: "Bug Fixes", "Changes and New Features", and "Known Problems". ********************************************************** NOTICE: Previous ICOBOL 5 Beta versions should be uninstalled before installing a final ICOBOL 5. ********************************************************** **** Revision 5.50 **** Changes and New features in 5.50 -------------------------------- 1. LINUX NOTICE: The Linux 6 builds (ln6xxx) are no longer being released since the build platform (CentOS 6) is past its End-of-Life date. Customers who still run that version of Linux should upgrade. 2. LINUX NOTICE: As time goes on it is becoming more and more difficult to obtain the 32-bit add-on packages to support the 32-bit components. The only reason we continue to release them is for 32-bit thin-clients (icrunrc) that require a 32-bit surrogate (icrunrs). Please consider the 32-bit components to be deprecated and they are being phased out as of the new Linux 9 build, which is 64-bit only. 3. ICLOG NOTICE: The file logging features provided by ICLOG and ICLOGS that were removed from the product in 5.40 have been permanently removed since no customers have requested it in the past 4 years. 4. ICRUNCGI NOTICE: The icruncgi version of the runtime executable has been removed from the release. That includes its readme and any example files. This was licensed separately in ICOBOL 4 and before, and after polling the few customers that had purchased it, it was apparent that no one uses it any more. There are other preferred methods for building web applications. 5. The toolsets and build platforms used to build ICOBOL have been updated. NOTE: All builds are run on 64-bit platforms with cross compilation for the 32-bit components. * The Windows builds now use Visual Studio 2022 instead of 2017 using Windows Server 2022 instead of 2016. This results in a newer set of Microsoft DLLs for the C runtime and Microsoft Foundation Classes. * The Linux 7 build is still run on CentOS 7.7 (gcc 4.8.5-39). * Since CentOS 8 moved from a stable release model to a rolling stream model (that previews upcoming releases), we have moved away from CentOS to Rocky Linux for Linux 8 and up. * The Linux 8 build is now run on Rocky Linux 8 (Red Hat gcc 8.5.0-10). * (NEW) The Linux 9 build is run on Rocky Linux 9 (Red Hat gcc 11.2.1-9) and is 64-bit ONLY (see item #2) 6. The SP2 and FormPrint components have all been updated. These components had not undergone a significant update in quite some time, so we recommend that you re-test your application after upgrading. See the readsp2.txt readme file for more details. 7. The Linux installations no longer install the SP2/QPR related examples (fpdemo, pcqutil, qprdemo, and sp2logon). They are installed as components of the SP2 Development installation on Windows and can be copied from there if desired. 8. Several open source libraries have been updated to newer versions: zlib has been updated to 1.2.12 openssl has been updated to 1.1.1w. Bug Fixes in 5.50 ----------------- 1. The Linux runtime system could hang when receiving frequent interrupts for pending screen messages (which uses SIGUSR2) while writing a print file to lp via a pipe. One result of this happening is messages in the ICEXEC log like the following: icexec: Info: Wakeup signal (#10) sent from pid 1649075 to pid 2658693 icexec: Warning: Wakeup signal (#10) from pid 1649075 to pid 2658693 not sent: interrupt busy with (4) The system was modified to defer SIGUSR1 and SIGUSR2 processing for the duration of each pipe write. 2. The runtime system would sometimes crash or get an invalid operation error when processing intrinsic functions with arguments that were expressions that included additional functions and the nested functions detected an error in its arguments. An example is: MOVE FUNCTION DATE-OF-INTEGER(FUNCTION INTEGER-OF-DATE(HOLD-FULL-YMD) + WS-ADJUST-DAY) TO HOLD-FULL-YMD. where HOLD-FULL-YMD was out of range. **** Revision 5.49.02 **** Bug Fixes in 5.49.02 -------------------- 1. The icpermit and icnetd were limited to 1016 socket connections causing them to be unable to service licenses with user counts greater than that number. The icpermit log would show the error: "There are no more license server connections available: Reserving slot in connection database". The limit was in place because of an inherent limitation in certain system calls used in Linux. The system was modified to use different OS system calls and the internal limit was raised to 2048, which is the largest user count we support in our licensing and in icconfig. **** Revision 5.49.01 **** Bug Fixes in 5.49.01 -------------------- 1. When icfixup was invoked with a wildcard template and a file was found that required fixup, the remaining files were also fixed whether they needed it or not. This was not harmful, but could extend the processing time significantly. **** Revision 5.49 **** Bug Fixes in 5.49 ----------------- 1. The fix of the logon semaphore documented under 5.47 missed an occurrence of the problem. 2. ICPERMIT could sometimes give spurious errors for connections that did not complete properly (it is a multi-step process). 3. Fixed a problem in IC_SEND_MAIL where BCC recipients were visible in the received email. 4. The 64-bit sp2.dll was updated to version 5.3.76 to fix a problem where playing a .wav file woould cause the runtime to crash. **** Revision 5.48 **** Bug Fixes in 5.48 ----------------- 1. Fixes were made to the PDF generator to fix a problem where very large output files were corrupt. **** Revision 5.47 **** Bug Fixes in 5.47 ----------------- 1. Fixes were made to the icrun terminal assignment code to fix a case that could result in a corruption of the logon/logoff semaphore. This could occur when the runtime was started with the -N b (no reassign) option and there were no more reassignable consoles or a requested console was already in use. The corrupted semaphore could lead to more than one process being assigned to use the shared area data structures that are meant to be unique per per process, causing them to over-write each other - often leading to process crashes and possibly unexplained file i/o errors. This bug has been present at least since ICOBOL 4.00. **** Revision 5.46 **** Bug Fixes in 5.46 ----------------- 1. Fixes were made to the buffer manager due to reports of application crashes during termination that were a result of corrupted buffer cache control structures. 2. Fixed icpermit, which could become unable to process license requests when connection counts reached or exceeded 1020. **** Revision 5.45 **** Bug Fixes in 5.45 ----------------- 1. Fixes were made to the icwhohas utility to correct program crashes that could occur on very busy systems. **** Revision 5.44 **** Changes and New features in 5.44 -------------------------------- 1. The Language Reference & Developer's Guide was updated with changes made since 5.40 and to update the Exception Status tables in the appendices. Bug Fixes in 5.44 ----------------- 1. A change was made in 5.42 to log unprintable characters using octal notation (\nnn); however, it had the unintended effect of converting the carriage control characters delimiting lines of text. This was corrected. 2. The intrinsic function IC-MSG-TEXT would fail to compile in the case where no argument was supplied. 3. ICRUNRS would sometimes crash with a memory violation while sending the network heartbeat. 4. The SlientInstall feature of the Windows installer was returning the error "Silent Install settings that were loaded appear to be corrupt." **** Revision 5.43 **** Changes and New features in 5.43 -------------------------------- 1. The intrinsic functions SQL-ADD-ESCAPES and SQL-REMOVE-ESCAPES were enhanced to also escape and remove the single-quote character ('). When building queries. It is sometimes more convenient to imbed a single-quoted string as an argument rather than supplying it dynamically using the ? placeholder. If the imbedded string itself has single-quotes in its content, those quotes must be escaped. **** Revision 5.42 **** Changes and New features in 5.42 -------------------------------- 1. Several customers informed us that they regularly used the icdump utility, which had been dropped from the Windows install, so it has been added back. 2. The log tracing for the PGM option has been enhanced to trace the arguments passed to CALL and CALL PROGRAM (up to 40 characters). Bug Fixes in 5.42 ----------------- 1. The icrev and icrevup utilities would give an error that the file size was too large when querying a file that was greater than 4GB. 2. When computing the difference between a DATE and a DAY-TIME INTERVAL, the runtime was adding instead of subtracting. 3. The compiler would give an "Unimplemented Feature" error when using the SQL-ADD-ESCAPES or SQL-REMOVE-ESCAPES intrinsic functions. **** Revision 5.41 **** Changes and New features in 5.41 -------------------------------- 1. The composed name for "anonymous" print jobs was changed to drop the occurrences of the '@' character from @PCQ and @CON. It appears this may have caused problems with some printer drivers. So, instead of "icrun - logon to @PCQ1 from @CON0" it will now be "icrun - logon to PCQ1 from CON0" Bug Fixes in 5.41 ----------------- 1. A PCQ job with a disposition of Delete (from the configuration) or with the extended open option ",d=d" could cause the runtime system to crash with a memory segmentation fault. The bug was introduced in 5.40.06. **** Revision 5.40 **** Changes and New features in 5.40 -------------------------------- 1. The toolset used to build ICOBOL has been updated. The Windows builds use Visual Studio 2017 instead of 2012. This results in a newer set of Microsoft DLLs for the C runtime and Microsoft Foundation Classes. The Linux 6 builds are run on CentOS 6.10 (Community version of Red Hat Enterprise Linux) using gcc 4.4.7 for Linux kernels 2.6.32 and up. The Linux 7 build is run on CentOS 7.7 (gcc 4.8.5-39) and the Linux 8 build is run on CentOS 8 (gcc 8.3.1-4). The builds are run on 64-bit platforms with cross compilation for the 32-bit components. 2. Windows Vista and Windows Server 2008 are no longer supported. The minimum support Windows versions are Windows 7 and Windows Server 2008 R2. Similarly, we no longer release a build for RHEL 5 (ln5x32.xxx and ln5x64.xxx). 3. The file logging features provided by ICLOG and ICLOGS have been removed from the product due to lack of customer interest and a negative impact on performance for certain common file operations. If this is a system requirement contact Sales to order a special build that still includes the features. 4. Several open source libraries have been updated to newer versions: zlib has been updated from 1.2.3 to 1.2.11 and openssl has been updated from 1.0.1g to 1.1.1c. 5. The names for the openssl libraries have changed from icssleay32/64 to iclibssl32/64 and from iclibeay32/64 to iclibcrypto32/64. 6. The compiler and IDE support a new source format called xcard (extended card) which is a hybrid of card format and free form format. It has a sequence area and indicator column like card format, but effectively has no right margin or comment area like free format. The new xcard format will be inferred from source files with the extension .xco. 7. ICIDE has undergone a major rewrite to have its own editor and windows controls based directly on MFC 10 rather than using 3rd party libraries. Thus you may see some changes in the appearance of the windows and tabs and other controls, although the overall structure and function remains the same. There are some handy visual enhancements like indent guides and modified-line indicators. 8. A new environoment variable called ICPROMPTCHAR is processed by the runtime system. The value is a single character. This will change the default padding character in screen input fields from underscore to the specified character. 9. The compiler listing file now contains the options that were used to create the listing. This was added to help ICIDE to color code the source code part of the listing. 10. A new option argument was added to ICNETD to specify the audit log for the various surrogate processes started by ICNETD. The option uses -L and has the same format as the -A option for auditing ICNETD itself. It only applies at ICNETD statup. When specified it over-rides the -S a:{on|off} option. 11. The default surrogate logging option used by -S {a|t}:{on|off} has been changed from ':p' (use PID) to ':t' (timestamp). The :p option was problematic in Windows, which reuses PID values much more quickly than Linux systems. 12. A new option argument (-T) was added to ICNETD to specify how long an ICRUNRS surrogate process will wait for a reconnection attempt before terminating itself and releasing its license. 13. Additonal tracing has been added for FILE, IND, and REL. 14. The old AOS compatibility builtins have been removed, along with the COPY file "cobsysid.in". The interfaces of these routines were inherently 32-bit and no longer work on 64-bit systems and most calls have alternative, supported replacements. If you need help with substitutes, please contact Support. 15. The install scripts for RHEL 7 and 8 now install the ICOBOL service daemons as native SYSTEMD daemons instead of running them under the old /etc/init.d system. The RHEL 6 install still uses the old system. The RHEL 6 build is available in both 32-bit and 64-bit versions, whereas the RHEL 7 and 8 builds are only available in 64-bit (with certain 32-bit components). 16. We have added three new scripts in for RHEL 7 and 8 that use use systemctl to start, stop, and show the status of the ICOBOL services. The scripts are named icstart, icstop, and icstatus. The scripts read /etc/opt/icobol/services.conf (created in installic) to control which services are managed. 17. The semaphore status functions that were in icinfo on Windows and in the tell_sem program on Linux systems have been moved into icsmview using icsmview -G s. The semaphore speed test that was in the tell_sem program has been abandoned as irrelevant given the performance of today's systems (a typical 3+ Ghz system is capable of around 1 million semaphore operations a second). 18. The DELETE FILE operation for Indexed and Relative files has been revised to perform its open file check differently and more efficiently. 19. The termi utility was dropped from the Linux builds. If you really need it because you are still using a nonstard terminal through terminfo, and you have a support contract, we will build it for you. 5.40.02 20. The system has been modified to reduce the number of calls to FlushFileBuffers (Windows) or fsync (Linux) for INDEXED and RELATIVE files. The calls were being made after every operation that modified the file. The change is that these calls are now only made when the file is closed by a process (even if the process has it open multiple times) UNLESS the global system parameter to enable Buffer Write-through is set in the .cfi file. It is our observation that most applications regularly open and close files as they move from one sub-program to another;, but, this change does slightly increase the risk of files not being up to date on the disk in the case of an operating system crash or sudden loss of power. (you do use battery backup and make regular backups, don't you?) 21. A change was made in the startup code of icpermit and icnetd to try to eliminate the problem where a service restart reports that the service port is still in use and one had to wait a couple of minutes to try again. 5.40.04 22. Two new tracing options were added to the system: IO and PCQ. The IO option traces i/o operations at the statement level and shows each i/o statement that is executed along with file status and exception status information. The individual SEQ, IND, and REL options mainly show opens and closes with a summary of the number of each type of i/o statement. The PCQ option traces the detailed steps for each print operation. Its purpose is to assist with finding why jobs sometimes do not print in Windows. An example of IO tracing would be: icrun -a::IO logon.cx. 5.40.05 23. The GCC compiler tuning option used for the ln7 build was changed to match the ln8 build. 24. ICPERMIT (with -i) was changed to log the license serial number and number of authorized users. 5.40.06 25. There were minor updates to detailed logging for IND and FILE. Bug Fixes in 5.40 ----------------- 1. ICSORT sometimes merged records incorrectly when using a TAG sort. 2. Depending on the authentication methods in use on Linux systems, process startup sometimes report a failure of the routine getpwuid. A call to an alternate routine was added as a fallback when this error occurs. If both routines fail, an error is reported on both. (5.40.02) 3. There were several race conditions on the status bits for INDEXED, RELATIVE, and lower level FILE objects where the status bits became corrupted. This usually manifested in a File Status 30, Exception Status 001 or 149 error on the file and only on extremely busy Linux servers with a high CPU core count (it was observed on a 900 user, 32 processor system). It is possible that it could lead to a file corruption, or a corruption of the reliability flag status. The fixes caused a change in the revision level of the global shared area (6 to 7). (5.40.03) 4. In Linux, DELETE FILE of an INDEXED or RELATIVE file where the file did not exist was returning an error instead of succeeding. (5.40.04) 5. The runtime system was not handling the setting of an INDICATOR variable when the INDICATOR was a variable set to NULL. The debugger would also display the value incorrectly. 6. Fixes to iccheck and icfixup. There were cases where icixup did not update values in the file headers and the fixed file would fail iccheck consistency checks. Similarly, iccheck sometimes missed an inconsistency that should have been reported. (5.40.06) 7. The runtime system SORT module and the ICSORT utility could close its temp file twice using the same internal id. If that id had been claimed by another process between those two closes, it could lead to file inconsistency errors (e.g., mismatched nx/xd = EXC 149) in other processes and ultimately could lead to file corruptions. This was only observed on a very fast, 32-core system with 700+ users, because the window between closes was just a few milliseconds. 8. (ln7/ln8) The default icnetd.conf was enabling an unsupported option. End of Release Notes