program ptr
implicit none
type node
real :: x, y, sigma
type (node), pointer :: next
end type node
type(node), pointer :: list, first
integer, parameter :: input_lu = 10
character(len=8), parameter :: input_file = 'chi2.dat'
integer status, count, i
real, dimension(:), allocatable :: x, y, sigma
open(unit=input_lu, file=input_file, action='read', &
status='old', iostat=status, err=99)
write(*,*) 'reading file ', input_file
allocate(list); nullify(list%next)
first => list; count = 0
do
read(input_lu, fmt='(3f6.2)', end=100) list%x, list%y, list%sigma
count = count + 1
allocate(list%next); list => list%next; nullify(list%next)
end do
100 close(unit=input_lu)
write(*,*) 'read ', count, ' records'
write(*,*) 'allocating arrays for data'
if (count .gt. 0) then
allocate(x(count)); allocate(y(count)); allocate(sigma(count));
end if
write(*,*) 'listing the records and transferring data to the arrays'
list => first; count = 0
do while (associated(list%next))
write(*, '(3x, 3f6.2)') list%x, list%y, list%sigma
count = count + 1
x(count) = list%x; y(count) = list%y; sigma(count) = list%sigma
list => list%next
end do
write(*,*) 'listing the arrays'
do i = 1, count
write(*, '(3x, 3f6.2)') x(i), y(i), sigma(i)
end do
stop 0
99 write(*,*) 'Error opening file: ', input_file
write(*,*) 'iostat = ', status
stop 1
end program ptr