I have a client running an application compiled using MF cobol for Unix V3.2, running on a bare metal install of SCO Openserver 6.0.0
As the current hardware is now 8 years old, I have attempted to move the application to a Virtualbox on LinuxMint 19.3.
All is well, except for one not so minor detail, the F10 and up and down arrow keys do not work, all the other F keys work, as well as the left and right arrow keys.
I do not have the source code. The application does not appear to use a special termcap or terminfo, nor does it use an adisctrl file.
I have given up. The problem occurs at the console, also with telnet, and is even worse with ssh.
I have installed another application written in MF cobol for which I have the source code, but a later version of the compiler (4.1) that uses adis This newer application does not exhibit the problem.
My assumption now is that this is a timing issue and that the overhead of the virtual system causes the application to misinterpret function keys.
There is a slight chance that the environment variable COBKEYTIMEOUT might help the original problem, if you haven't completely given up.
Function Keys and COBKEYTIMEOUT
On network-based UNIX systems, information is split into packets, and thus under certain conditions it is possible for part of a function key sequence to be split across two packets. This can lead to incorrect key recognition. This typically occurs while using the telnet or the rlogin commands.
Server Express provides you with the COBKEYTIMEOUT environment variable, which you can use to determine the time-out between the arrival of the first key of a function or special key sequence and the arrival of the next. Setting this environment variable allows function key sequences to be recognized correctly.
The time-out period, a value in the range 1 through 126, is dependent on the type of connection and the effective average baud rate. For example, ethernet connections should not require a value greater than 10. Using too small a value results in incorrect function and special key recognition; too large a value results in a delay when certain keys are pressed (such as Escape) unless they are followed by other keys (such as Escape).
If the value of the COBKEYTIMEOUT environment variable is outside the range 1 to 126, null, non-integer or the variable does not exist, then a direct connection between the terminal and the machine is assumed.
You could also use the COBKEYTIMEOUT environment variable to recognize function key sequences on terminals which do not send such sequences at the correct baud rate, but insert pauses between the characters instead.
This environment variable is read once only, when the screen handling subsystem is initialized. Changing its value after this has no effect.