PROGRAM C2111

use f90_iostat

TYPE Link
  REAL :: N
  TYPE (Link) , POINTER   :: Next
END TYPE Link

TYPE (Link) , POINTER :: Root, Current

INTEGER :: I=0
INTEGER :: IO_Stat_Number=0

  ALLOCATE(Root)
  READ (UNIT = *, FMT = *, IOSTAT = IO_Stat_Number) Root%N
  if (io_stat_number == ioerr_eof) then
    NULLIFY(Root%Next)
  ELSE if(io_stat_number == ioerr_ok) then
    i=i+1
    ALLOCATE(Root%Next)
  ENDIF

  Current => Root

  DO WHILE (ASSOCIATED(Current%Next))

    Current => Current%Next

    READ (UNIT=*,FMT=*, IOSTAT=IO_Stat_Number) Current%N

    if (io_stat_number == ioerr_eof) then
      NULLIFY(current%Next)
    ELSE if(io_stat_number == ioerr_ok) then
      i=i+1
      ALLOCATE(current%Next)
    ENDIF

  END DO

  print *,i,' items read'

  Current => Root

  DO WHILE (ASSOCIATED(Current%Next))
    PRINT * , Current%N
    Current => Current%Next
  END DO

END PROGRAM C2111


