! { dg-do run { target fd_truncate } }
! Test of gfortran list directed read> check delimiters are correctly
! treated.  Written in f77 so that g77 will run for comparison.
!
! f , e and i edit reads are terminated separately by read_real.c
!
! PThomas                                                   Jan 2005
! BDavis        
      program list_read_4
      integer i(10),l(10),k,j 
      real x(10),y(10)
! expected results
      data y / 1.0,2.0,3.0,-1.0,-1.0,-1.0,4.0,4.0,99.0,99.0 /
      data l /1,2,3,-1,-1,-1,4,4,99,99/
! put them in a file
      open (10,status="scratch")
      write (10,*) " 1.0, 2.0 , 3.0,, 2* , 2*4.0 , 5*99.0"
      write (10,*) " 1.0e0, 2.0e0 , 3.0e0,, 2* , 2*4.0e0 , 5*99.0e0"
      write (10,*) " 1,   2 ,   3,,   2* , 2*4 ,   5*99"
      write (10,*) " 1,   2 ,   3,,   2* , 2*4 ,   5*99"
      rewind (10)
!
      do k = 1,10
        x(k) = -1.0
      enddo
      read (10,*,iostat=ier) x
      if (ier.ne.0) call abort
      do k = 1,10
         if (x(k).ne.y(k)) call abort
         x(k) = -1
      end do
      READ(10,*,iostat=ier) x
      if (ier.ne.0) call abort
      do k = 1,10
         if (x(k).ne.y(k)) call abort
         x(k) = -1
      end do
      READ(10,*,iostat=ier) x
      if (ier.ne.0) call abort
      do k = 1,10
         if (x(k).ne.y(k)) call abort
         x(k) = -1
      end do
! integer
      do k = 1,10
        i(k) = -1
      end do 
      READ(10,*,iostat=ier) (i(j),j=1,10)
      if (ier.ne.0) call abort
      do k = 1,10
         if (i(k).ne.y(k)) call abort
         i(k) = -1
      end do
      end
