Search code examples
fortrangfortranfortran77

What is the meaning of arguments in the arguments in this pre-1977 fortran program?


The following snippet is the first few lines of the driver program for TOMS 494, published around 1975. While the second argument seems to possibly refer to a tape drive, it would be interesting to know what the arguments mean. The line seems to give error in gfortran 4.x

  PROGRAM BURGER(PDEOUT, TAPE3=PDEOUT)
  COMMON /MESH/ X(201)
  COMMON /COORD/ ICORD
  COMMON /SIZES/ NPDE,NPTS
  DIMENSION U(201)

output of compilation:

   PROGRAM BURGER(PDEOUT, TAPE3=PDEOUT)
         1

Error: Invalid form of PROGRAM statement at (1)


Solution

  • It can be found in this manual FORTRAN EXTENDED VERSION 4 USER'S GUIDE from CDC (CONTROL DATA CORPORATION)

    It was a way to pass the file names to be connected to when calling/launching the program. See page 7-3 (pdf 91).

    Example 1

    PROGRAM statement:
    PROGRAM  FOIST  (INPUT,  OUTPUT,  TAPE3)
    

    Name call statement:

    LGO(FIRST, SECOND)
    

    File names actually used:

    FIRST
    SECOND
    TAPE3
    

    the LGO(file1, file2) statement belongs to the loader as explained on the directly preceding pages and LGO is the default program name (sort of how a.out is today).

    name(p1,p2,...  ,pn) 
    

    Logical file name of the file to be loaded and executed, or name of the main program to be loaded and executed. Alternate file names for execution time file name substitution.

    ...

    The file name call is the commonest call and is usually used for the simple case in which the object code is written by default to the file LGO.

    The INPUT and OUTPUT files are what we call standard input and output today and were accessed by READ *,, PRINT *, and similar. TAPE3 was connected to unit 3 and TAPE5 to unit five like in the example on page 1-3 (pdf 13).

    PROGRAM NEWTON (INPUT, OUTPUT, TAPE5=OUTPUT)
    ...
    READ *, XO, EPS, ITMAX
    ...
    WRITE (5,20) ITMAX
    

    What did those tapes actually represented physically was controlled outside of Fortran and is explained in the manual as well.


    So in modern times you either pre-connect the files to those units by some other system-specific means, or you use the OPEN() statement to connect an external file to a Fortran unit number. We do not have the rest of your code so I cannot recommend any more detail.