Interactive COBOLEnvyr Corporation

Windows FAQ

How does ICOBOL under Windows handle .DLLs?
ICOBOL on Windows uses .DLLs to load portions of its code. The following rules are applied in the order indicated below to find .DLLs:

  • The system searches the set of pre-installed .DLLs.
  • The directory where the executable module for the current process is located is searched.
  • The current directory is searched.
  • The Windows system directory is searched.
  • The Windows directory is searched.
  • The directories in the PATH environment variable are searched.

If a specific .DLL cannot be located, the system terminates the process and displays a dialog box reporting the error.

Almost every ICOBOL executable requires ICSYS.DLL and the Microsft Visual C Runtime DLLs (MSVCRTxx).

The ICOBOL Runtime requires the ICRUN.DLL.  The runtime loads the ICBLTN.DLL if it is found.  The SP2.DLL is loaded when required for SP2. The QPR.DLL is loaded when required for FormPrint.

ICIDE and ICEDCFW require the Microsoft Foundation Classes .DLLs (MFCxxx)

ICIDE requires additional .DLLs (icoe*, icot*, icsfl*).

ICPERMIT.EXE requires the appropriate Rainbow Sentinel .DLLs if a parallel or USB protection device is being used. ICSP2.EXE and ICQPRW.EXE require the UIB.DLL.

Once I have finished installing, can I rename the ICOBOL folder?
No, the folder (directory) should not be renamed. To place the installation in a new directory, you should uninstall and re-install, making sure that you save any modified files. If the installation directory is renamed, uninstalling from the Control Panel will not work, certain shortcuts set up by the installation script will not work, and any services will not work.

How long can a username be?
Currently, ICOBOL handles usernames of up to fifteen (15) characters. Longer usernames will generate a warning and the name will be truncated to 15 characters.

Change your username to be fifteen (15) characters or less.

I keep seeing exit code 128 in my icexec.lg or icnetd.lg files. What do these mean?
Under Windows, if you encounter one of the following situations:

  • "Initialization of the dynamic library ...\system32\user32.dll failed"
  • In the ICEXEC log, you get an exit code 128 when starting a runtime,
  • In the ICNETD log, you get an exit code 128 when starting a surrogate
  • You cannot seem to get more than 4-10 Runtimes active on serial lines or telnet sessions or icnetd surrogates logged on

Look at Microsoft Article ID Q184802, which provides information on updating the registry for a particular value for heap memory.


The Microsoft article describes updating the following subkey under the HKEY_LOCAL_MACHINE subtree:

\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows

Where there is a "SharedSection=1024,3072" in the data for this value you must replace it with "SharedSection=1024,3072,512". You must reboot for the new value(s) to take effect.

The "512" causes each heap allocation to be smaller to keep from overflowing the Windows Heap space which is fixed allocated. This value should increase the number of allowed processes. To further increase process count, continue to decrease this number to 256 and then 128, if needed. Please refer to Microsoft Article Q184802 for more information on this setting.

Note: ICINFO prints out the value for this registry entry as "NT Heap:" so you can see the setting without starting regedit or regedt32.

When I change an environment entry, the Runtime does not seem to see the change. Why is this?
Under Windows, if an environment entry, such as ICROOT, is placed in the system environment, then you must remember to reboot after changing the value in order for the change to take effect in all processes (and especially in the service manager). Rebooting is especially important if ICROOT was placed in the system environment, and then a new revision was loaded into a different directory.

Note: Placement of ICROOT in the system environment generally is not recommended because it is always available from the registry entry set by the ICOBOL installation process for all ICOBOL executables.

When I try to print, I keep getting an invalid parameter error (oserr=87). What causes this?
First, check the spool settings of the Microsoft print driver to make sure that they're not set to print directly. ICOBOL cannot send data to a print spooler that is set to print directly to the printer, rather than spooling jobs.

What is Windows Terminal Server edition?
Windows Terminal Server is an optional component of Windows Server which provides multiple independent Windows desktop sessions to allow client logins from "Client Sessions" running on other computers using a Remote Desktop client. These sessions actually cause the programs to execute on the Terminal Server machine with only the screen images/results being reflected out to the client. This capability provides multi-user operation of the base machine, just like the capability available on Linux machines. The network connection is used only to send compressed screen data to the client and to receive keyboard/mouse data from the client. All disk I/O is performed at machine/memory speeds on the base machine. In addition, WinTerms (a fancy dumb terminal or a very simple PC, depending on your perspective) can also be used as a client.

Under Windows, when viewing the System Log using the Event Viewer, I see messages from the Service Control Manager about the ICOBOL services (ICEXEC, ICPERMIT, ICNETD). What do these messages mean?
The event log may contain messages such as:

  • "The icnetd service terminated with service-specific error 6"
  • "The icexec service failed to start due to service-specific error 6"

The service-specific error is the exit code from that service (executable). Exit codes are documented in the Introduction chapter of "Installing and Configuring ICOBOL on Windows". In most cases, you can also examine the log file for the service (e.g., icexec.lg, icpermit.lg, or icnetd.lg) in the C:\WINNT or C:\Windows directory to obtain the interpretation of the specific error message you observed in the System Log.

If the event log contains a message such as:

  • "The icexec service failed to start due to the following error: The service did not start due to a login failure."

Then you need to look at the next message in the event log. That message should identify the actual login error. It should tell you that the username that you were using does not have the appropriate privilege setting. Check the username identified in the message, and add the needed privileges on this machine and on any network machine that the username might need to access.

How much disk space does the ICOBOL product for Windows require?
A full release (Developer and Runtime environment) requires about 65MB, while the Runtime environment alone only requires about 15MB.

When I try to bring up ICEXEC under Windows, I get a "Must be running as service" message. What does this mean?
Go into the registry under HKEY_LOCAL_MACHINE, System, CurrentControlSet, Services, ICEXEC. If the image path for ICEXEC shows the -A switch, this needs to be changed to -sA.

Is there a way to do a scripted installation of ICOBOL?
Under Windows, the installation process can now be scripted so that batch installs can be performed. To build a sample script, you must execute the install with the record option (e.g., win500.exe /r) and make the appropriate selections. After all of the selections are complete, you will be prompted to save the settings in a file of your choosing. To use the file, run setup with /S:<pathname> (e.g., win500 /S:c:\temp\mysettings.ini).

Do I need to increase the value of any System Parameter entries in ICCONFIG?
A good way to determine this is by running the system built-in IC_SYS_INFO. This will cause statistical information about the various system parameters to be displayed. If the Max and MaxUsed values for an adjustable entry are equal or nearly equal, you should probably increase the Max value for that entry.

How can I have unique terminal numbers on a Windows network?
There is no automatic way to enforce unique terminal numbers across a network. On a single Windows machine, ICEXEC provides unique terminal numbers only on that one machine. Currently, the only way to provide unique terminal numbers across a network that runs ICOBOL on multiple machines is to have a different configuration file for each machine with a different (unique) console enabled for each configuration. For ease of maintenance, the different configuration files can all reside on a single machine.

Can I use a redirected LPT port to open a network printer?
Yes, in Windows environments, you can open a network printer using a redirected LPT port. For example, a "NET USE LPT9 \\machine\printer"can be executed, and then LPT9 can be entered as the device name for an @PRN or @SER logical device.

What device name should I use for an @PCQ in ICCONFIG?
For Windows, PCQ devices should be the printer names as shown in the Printer Control Panel for local printers and should be the network port name (i.e., \\machine\printer) for redirected printers. Use Notepad or ICINFO to view the available printers, and then use those names in ICCONFIG.

How does ICOBOL handle the default settings for serial devices?
Under Windows, the Runtime uses the last setting for serial devices to set up the default parameters (baud, parity, data, etc.) on an OPEN. The MODE command can be used to specify these settings if needed. This MODE will be remembered until another setting is stored. Alternatively, extended OPEN options can be used to set the needed values.

[ General | Capabilities | Client/Server | ODBC | License Server | Runtime | Debugging | Windows-specific | Linux-specificNetwork-specific | What Is? ]