Opening RM File

I'm having trouble opening an RM/COBOL indexed file. This program is a very simple example of the issue. It opens an indexed file and then writes the file status from that open step to an output flat file. When this program is run in Visual Studio the file status is 00 but when the exe is run (either by double clicking the exe file or by running it in command prompt) it is 30.


I tried running Process Monitor (technet.microsoft.com/.../processmonitor.aspx) with a filter for any path containing "c:\temp\in-file". Leaving that while running the test program in Visual Studio, I see many processes show up. But then if I keep the monitoring going while running the exe, it shows no processes trying to access the input file, almost as if it never even tries to open the file.


What could be different about running this program in Visual Studio vs running the compiled exe?

      $SET CHECKNUM
      $SET DIALECT"RM"
      $SET IDXFORMAT"21"
       IDENTIFICATION DIVISION.
       PROGRAM-ID. Program1.
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
       SELECT IN-FILE ASSIGN TO "c:\temp\in-file"
                  ORGANIZATION IS INDEXED
                  ACCESS MODE IS DYNAMIC
                  RECORD KEY IS IN-KEY
                  FILE STATUS IS FILESTAT.
       select out-file assign to "C:\temp\out-file"
           organization is line sequential.
       DATA DIVISION.
       FD  IN-FILE
           LABEL RECORD IS STANDARD
           DATA RECORD IS PL-POINTER-RECORD.
       01  IN-RECORD.
           02  IN-KEY.
               03  FILLER          PIC X(3).
               03  FILLER          PIC 9(3).
           02  FILLER              PIC 9(2).
      
       fd out-file.
       01 out-rec pic x(8).
          
       WORKING-STORAGE SECTION.

       01  FILESTAT                   PIC X(2).
       01  FILESTAT-EXTENDED REDEFINES FILESTAT.
           02  FILESTAT-EXT-1         PIC X.
           02  FILESTAT-EXT-2         PIC X.
           02  FILESTAT-EXT-2-BINARY REDEFINES FILESTAT-EXT-2 PIC 99 COMP-X.
       01  FILESTAT-EXT-2-BINARY-DISP PIC 9(03). 
      

       PROCEDURE DIVISION.
           open output out-file.
           OPEN INPUT IN-FILE.
           move filestat to out-rec. 
           write out-rec.
           close in-file out-file.
           EXIT PROGRAM.

Parents
  • I did another test to prove there isn't a problem with the input file I'm using, which was created by an RM/COBOL program. First, in Visual Studio, I executed the write-rm-file paragraph to create a new indexed file using Visual COBOL. There were no errors and the out-file showed filestat 00 when the program was done. Then I changed the * to perform read-rm-file. It worked, showing filestat 00 and in-rec "00000000". Then I tried the same test using the exe, outside Visual Studio. The first part of the test, write-rm-file, shows that the program couldn't even successfully open a new output indexed file. The filestat was 30 again.

          PROCEDURE DIVISION.

          start-program.

              perform read-rm-file.

         *    perform write-rm-file.

              goback.

          read-rm-file.

              open output out-file.

              OPEN INPUT IN-FILE.

              move filestat to out-rec.  

              write out-rec.

              read in-file next

              move IN-RECORD to out-rec.

              write out-rec.

              close in-file out-file.

          write-rm-file.

              open output out-file.

              open output in-file.

              move filestat to out-rec.

              write out-rec.

              move zeros to in-record.

              write in-record.

              move 1 to in-record.

              write in-record.

              close in-file out-file.

Reply
  • I did another test to prove there isn't a problem with the input file I'm using, which was created by an RM/COBOL program. First, in Visual Studio, I executed the write-rm-file paragraph to create a new indexed file using Visual COBOL. There were no errors and the out-file showed filestat 00 when the program was done. Then I changed the * to perform read-rm-file. It worked, showing filestat 00 and in-rec "00000000". Then I tried the same test using the exe, outside Visual Studio. The first part of the test, write-rm-file, shows that the program couldn't even successfully open a new output indexed file. The filestat was 30 again.

          PROCEDURE DIVISION.

          start-program.

              perform read-rm-file.

         *    perform write-rm-file.

              goback.

          read-rm-file.

              open output out-file.

              OPEN INPUT IN-FILE.

              move filestat to out-rec.  

              write out-rec.

              read in-file next

              move IN-RECORD to out-rec.

              write out-rec.

              close in-file out-file.

          write-rm-file.

              open output out-file.

              open output in-file.

              move filestat to out-rec.

              write out-rec.

              move zeros to in-record.

              write in-record.

              move 1 to in-record.

              write in-record.

              close in-file out-file.

Children
No Data