How to run fortran77 program with inputs from file?

I made the following program file prog.f

       program test

       character IN*30,OUT*30,line*80

       PRINT *,'Input file '
       READ(*,'(A)') IN
       OPEN(1,FILE=IN,STATUS='OLD')
       PRINT *,'Output file?'
       READ(*,'(A)') OUT
       OPEN(2,FILE=OUT,STATUS='NEW',BLANK='ZERO')


       read (1,'(a80)') line
       write (2,*) "I read ", line
       end

compiled & linked it with

gfortran prog.f -o prog

I put a text string into an input file

echo "Hello World" > in

Then I sent the names of the input file in and output file out to the program

$ <<< 'in
out' ./prog
 Input file 
 Output file?

and checked the output file

$ cat out
 I read Hello World                                                                     

<<< works in bash. You may prefer piping from echo which is more portable,

$ rm out
rm: remove normal file 'out'? y

$ echo 'in
out' | ./prog
 Input file 
 Output file?
$ cat out
 I read Hello World                                                                     

If you are lucky then maybe

<infile ./program  >outfile

will work. Redirection to give a filedescriptor. Options/arguments???


While we earthlings write something like...

$ <77in cat >77.out
$ cat 77in >77.out

(This copies just 77in to 77.out)

...this Fortran77 program/command wanted it's operands linewise in one input file/stream:

$  <77.io cat
77in
77.out

Now if cat was something else it would parse first line as input file (containing "hello\nworld" eg.) and the second as file to create.

And that is just the newer, easy way it seems...


Instead of a long argument list like cp -a dir1 dir2 dest it is <in_list cpa77.

But then you need an additional file...just like modern cpio does:

<filelist cpio -o >files.cpio. Of course cpio just needs STDIN linewise:

find . | cpio -o >files.cpio

(cpio has this special call syntax because of its functioning, working with many files. It is one command and a half. Same for tar, in a different way)

If anything is typical of unix, then it is this flexibility in feeding control and data to commands in the shell. As I commented: good Q after all! (Thx to accepted answer!)