Extensions to namelist - The GNU Fortran Compiler
Description: The GNU Fortran Compiler

Next: X format descriptor without count field, Previous: Old-style variable initialization, Up: Extensions implemented in GNU Fortran

#### 6.1.3 Extensions to namelist

GNU Fortran fully supports the Fortran 95 standard for namelist I/O including array qualifiers, substrings and fully qualified derived types. The output from a namelist write is compatible with namelist read. The output has all names in upper case and indentation to column 1 after the namelist name. Two extensions are permitted:

Old-style use of ‘`$`’ instead of ‘`&`’

         $MYNML
          X(:)%Y(2) = 1.0 2.0 3.0
          CH(1:4) = "abcd"
         $END

It should be noted that the default terminator is ‘`/`’ rather than ‘`&END`’.

Querying of the namelist when inputting from stdin. After at least one space, entering ‘`?`’ sends to stdout the namelist name and the names of the variables in the namelist:

          ?

         &mynml
          x
          x%y
          ch
         &end

Entering ‘`=?`’ outputs the namelist to stdout, as if `WRITE(*,NML = mynml)` had been called:

         =?

         &MYNML
          X(1)%Y=  0.000000    ,  1.000000    ,  0.000000    ,
          X(2)%Y=  0.000000    ,  2.000000    ,  0.000000    ,
          X(3)%Y=  0.000000    ,  3.000000    ,  0.000000    ,
          CH=abcd,  /

To aid this dialog, when input is from stdin, errors send their messages to stderr and execution continues, even if `IOSTAT` is set.

`PRINT` namelist is permitted. This causes an error if `-std=f95` is used.

         PROGRAM test_print
           REAL, dimension (4)  ::  x = (/1.0, 2.0, 3.0, 4.0/)
           NAMELIST /mynml/ x
           PRINT mynml
         END PROGRAM test_print

Expanded namelist reads are permitted. This causes an error if `-std=f95` is used. In the following example, the first element of the array will be given the value 0.00 and the two succeeding elements will be given the values 1.00 and 2.00.

         &MYNML
           X(1,1) = 0.00 , 1.00 , 2.00
         /