When this program runs in Visual Studio, it opens the RM/COBOL file with FILE STATUS zero. Maybe I’m overlooking an error status and should try a USE statement. But, it appears there isn't an error opening the file, because the program is able to read the file.
When this program runs outside Visual Studio, a non-zero FILE STATUS is returned when the RM/COBOL file is opened. And the program can't read any records. In that case, it appears not to need the USE statement to return a non-zero FILE STATUS.
Perhaps this program simplifies the test:
open output out-file.
open output in-file.
move FILESTAT to out-rec.
write out-rec.
move "AA" to in-record.
write in-record.
close in-file.
open input in-file.
move FILESTAT to out-rec.
write out-rec.
initialize in-record.
read in-file next.
move FILESTAT to out-rec.
write out-rec.
move IN-RECORD to out-rec.
write out-rec.
close in-file out-file.
The contents of out-file after running in Visual Studio:
00
00
00
AA
The contents of out-file after running the exe (the fourth record is spaces):
30
30
47
I appreciate the suggestion to try a USE statement. I haven’t written RM/COBOL programs and I wasn’t familiar with that syntax. I added this to the top of the procedure division:
DECLARATIVES.
OUT-FILE-IO-ERROR-HANDLING SECTION.
USE AFTER STANDARD ERROR PROCEDURE ON IN-FILE.
display "error " filestat.
accept filestat from console.
END DECLARATIVES.
MAIN-PROGRAM SECTION.
Running in Visual Studio, it never hits the USE error section. Running the exe outside Visual Studio results in the following displays on the screen:
error 30
error 48
error 42
error 30
error 47
error 42
The question remains: Why is this program working differently in Visual Studio from outside Visual Studio?