integer function random_number_seed(info,file)
integer,optional,intent(in) :: info,file
integer :: t(8),rn,is
integer,parameter :: LMASK=huge(rn) ! = 0111...111
integer,parameter :: LUN=676769
character (len=80) :: rdev0='/dev/urandom',rdev1='/dev/random',rdev
logical :: openok,readok,printinfo
openok=.true.
readok=.true.
if (present(file)) then
if (file==0) then
rdev=rdev0
else
rdev=rdev1
end if
else
rdev=rdev0
end if
if (present(info)) then
printinfo=(info/=0)
else
printinfo=.false.
end if
open(LUN,file=rdev,form='unformatted',access='stream',action='read',iostat=is)
if (is/=0) then
openok=.false.
print *,'open',is
else
read(LUN,iostat=is) rn
if (is/=0) then
readok=.false.
end if
end if
if (openok) close(LUN)
if (openok.and.readok) then
rn=iand(rn,LMASK) ! Make it positive, i.e. zero the leftmost bit
if (printinfo) write(6,'(a,a,a,i0)') 'Seed from ',trim(rdev),': ',rn
else
call date_and_time(values=t)
rn=t(7)+60*(t(6)+60*(t(5)+24*(t(3)-1+31*(t(2)-1+12*t(1)))))+t(8)
if (printinfo) write(6,'(a,i12)') 'Seed from time:',rn
end if
random_number_seed=rn
return
end function random_number_seed