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 to getenv()
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 the PARAM SAVE-ENVIRONMENT
to ON
, so getenv()
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: