Hi Jerry,
Jerry DeLisle wrote:
I agree with this and I will look into whats going on with formatted
stream. I would suggest simplifying the test case for the NEWLINE()
intrinsic to avoid this problem and I will use the example you have
given here as a test case for the stream I/O fix.
For new_line() I will use as suggested the simple achar(10) ==
new_line('a') test.
I have a better(?) test case for stream, see below. The test case below
works nicely with f95. g95 seems to have the same problems are gfortran,
plus some of its own.
One of the tests has been adapted from
http://groups.google.com/group/comp.lang.fortran/browse_thread/thread/8ad976f815df0fae/a2f51d975fa3a537
Tobias
program stream_test
implicit none
character(len=*), parameter :: rec1 = 'record1'
character(len=*), parameter :: rec2 = 'record2'
character(len=50) :: str1,str2
integer :: len, i
real :: r
open(10,form='formatted',access='stream',&
status='scratch',position='rewind')
write(10,'(a)') rec1//new_line('a')//rec2
rewind(10)
read(10,*) str1
read(10,*) str2
if(str1 /= rec1 .or. str2 /= rec2) call abort()
rewind(10)
read(10,'(a)') str1
read(10,'(a)') str2
if(str1 /= rec1 .or. str2 /= rec2) call abort()
close(10)
open(10,form='formatted',access='stream',&
status='scratch',position='rewind')
write(10,*) '123 '//trim(rec1)//' 1e-12'
write(10,*) '12345.6789'
rewind(10)
read(10,*) i,str1
read(10,*) r
if(i /= 123 .or. str1 /= rec1 .or. r /= 12345.6789) &
call abort()
close(10)
open(unit=10,form='unformatted',access='stream', &
status='scratch',position='rewind')
write(10) rec1//new_line('a')//rec2
len = len_trim(rec1//new_line('a')//rec2)
rewind(10)
read(10) str1(1:len)
if(str1 /= rec1//new_line('a')//rec2) call abort()
end program stream_test