12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- character(len=*), intent(in) :: buffer
- integer, intent(inout) :: ierror
- integer :: n
- integer :: i
- integer :: step
- integer :: ierr
- allocate( work(len(buffer)/2+1) )
- n = 1
- do while ( n <= size(work) )
- n = 2 * n
- enddo
- n = n / 2
- step = n / 2
- do while ( step > 0 )
- read( buffer, *, iostat = ierr ) (work(i), i = 1,n)
- if ( ierr /= 0 ) then
- ierror = ierr ! Store the error code for later use
- n = n - step
- else
- n = n + step
- endif
- step = step / 2
- enddo
- if ( associated( var ) ) then
- deallocate( var )
- endif
- read( buffer, *, iostat = ierr ) (work(i), i = 1,n)
- if ( ierr < 0 ) then
- n = n - 1
- endif
- allocate( var(n) )
- var(1:n) = work(1:n)
- deallocate( work )
- if ( ierror .lt. 0 ) then
- ierror = 0
- endif
|