From my COBOL program, I'm calling my C module which itself makes calls to a proprietary library. This library insists on writing to stderr
, although there's no stderr
available since the main program is written in COBOL. Consequently, the program aborts with this message:
cannnot open stderr
The support guys at HP advised me to issue
PARAM SAVE-ENVIRONMENT ON
in TACL before running the program. This indeed solved my problem. However, my program will be used by several people in a number of scripts and I don't want to force them to issue PARAM SAVE-ENVIRONMENT ON
prior to running the program.
Is there some COBOL85 directive which allows me to properly run the program without changing any parameters manually? Something like
?PARAM SAVE-ENVIRONMENT ON
would be great...
EDIT:
Since I'm able to modify the C module (not the library), I'd be completely satisfied with a C-based solution. However, simply opening stderr
before calling the library didn't solve my problem.
PARAM SAVE-ENVIRONMENT ON
makes HP COBOL-programs save environment variables (which they receive as messages at startup from Guardian) for future calls togetenv()
from C modules.Actually, the library I'm using tries to open
stderr
because it can't read environment variables. One solution is to set thePARAM SAVE-ENVIRONMENT
toON
, sogetenv()
will properly function again. This has to be done in each TACL session.Unless: you use the
?SAVE STARTUP
- or?SAVE ALL
-directive in your COBOL program to achieve the same effect.Lessons learned: