Search code examples
cobolgnucobol

How to get all files in directory in cobol


I am working with GnuCOBOL(Using Windows) and I need to write a compiler with it.

What i am asking is - given directory path, can i modify the files inside of it using COBOL? It is important to say that you can't know the files names. You know only the path of the directory which contains them.


Solution

  • Here is some code for POSIX systems

           identification division.
           program-id. SAMPLE.
    
           environment division.
           configuration section.
           repository.
               function all intrinsic.
    
    data   data division.
           working-storage section.
           01 dir                  usage pointer.
           01 dent                 usage pointer.
           01 dirent                                based.
              05 filler            pic x(19).   *> HERE BE DRAGONS
              05 entname           pic x(256).
              05 filler            pic x(237).
           01 sayname              pic x(256).
    
          *> ************************************************
    code   procedure division.
           call "opendir" using
               by content z"."
               returning dir
               on exception
                   display "error: no opendir found" upon syserr end-display
    bail           stop run returning 1
           end-call
           if dir not equal null then
               call "readdir" using
                   by value dir
                   returning dent
               end-call
    
               perform until dent equal null
                   *> set address of the based dirent and pull out the name
                   set address of dirent to dent
                   initialize sayname
                   string entname delimited by x"00" into sayname end-string
                   display trim(sayname TRAILING) end-display
    
                   call "readdir" using
                       by value dir
                       returning dent
                   end-call
               end-perform
    
               call "closedir" using by value dir end-call
           else
               call "perror" using by content z"" returning omitted end-call
    bail       stop run returning 1
           end-if
    
    done   goback.
           end program SAMPLE.
    

    Originally posted to SourceForge, licensed under the GPL. Due to the assumption on sizing of dirent you'd want to duff the code over a little bit before unleashing it on the unwary.