!---------------------------------------------------------------------------------------- program dots ! @(#) random dots on screen till ctrl-C use M_attr, only : attr implicit none integer :: x, y integer :: z character(len=1) :: p integer :: fg, bg real :: r real :: c integer :: icount character(len=10),parameter :: colors(8)=[character(len=10) :: 'RED','GREEN','BLUE','CYAN','MAGENTA','YELLOW','BLACK','WHITE'] fg = 8 bg = 7 r=80 c=24 icount=0 INFINITE: do x=int((c*ranf())+1) y=int((r*ranf())+1) if (ranf() > 0.9) then p="*" else p=" " endif write(*,'(*(g0))',advance='no')attr('<CSI>',reset=.false.),x,';',y,'f',p z=min(8,int(ranf()*8+1)) write(*,'(a)',advance='no')attr('<'//trim(colors(z))//'>',reset=.false.) icount=icount+1 write(*,'(*(g0))',advance='no')attr('<CSI>1;1f',reset=.false.),icount if(icount.gt.24*80*250)exit enddo INFINITE write(*,*)attr("<reset>That was two hundred and fifty pages worth of dots") CONTAINS !---------------------------------------------------------------------------------------- FUNCTION ranf() result (r) IMPLICIT NONE REAL :: r LOGICAL,SAVE :: already_run=.TRUE. IF(.NOT.already_run)THEN CALL init_random_seed_by_clock() already_run=.TRUE. ENDIF CALL random_number(r) END FUNCTION ranf !---------------------------------------------------------------------------------------- SUBROUTINE init_random_seed_by_clock() implicit none INTEGER :: i, n, clock INTEGER, DIMENSION(:), ALLOCATABLE :: seed CALL RANDOM_SEED(size = n) ALLOCATE(seed(n)) CALL SYSTEM_CLOCK(COUNT=clock) seed = clock + 37 * (/ (i - 1, i = 1, n) /) CALL RANDOM_SEED(PUT = seed) DEALLOCATE(seed) END SUBROUTINE init_random_seed_by_clock !---------------------------------------------------------------------------------------- END PROGRAM dots