home *** CD-ROM | disk | FTP | other *** search
- MODULE 'timer','devices/timer','exec/io'
-
- ENUM ERR_NONE,ERR_TIMER
-
- PROC main()
- DEF p,i,n=10
- PrintF('RandomListTest\n')
- p:=randomlist(n)
- FOR i:=0 TO n-1
- PrintF('\d\n',p[i])
- ENDFOR
- END p
- ENDPROC
-
- PROC randomlist(n) HANDLE
- DEF seed,tv:PTR TO timeval,tr:PTR TO timerequest,
- i,j,k,r,p,m
- NEW p[n]
- NEW tr
- timerbase:=NIL
- IF (OpenDevice('timer.device',UNIT_MICROHZ,tr,0))<>0 THEN Raise(ERR_TIMER)
- timerbase:=tr.io.device
- NEW tv
- GetSysTime(tv)
- seed:=-tv.micro
- Rnd(seed)
-
- NEW m[n]
- FOR i:=0 TO n-1 DO m[i]:=i
- j:=0
- REPEAT
- r:=Rnd(n)
- p[j]:=m[r]
- k:=0
- FOR i:=0 TO n-2
- IF m[i]=p[j] THEN k++
- m[i]:=m[k]
- k++
- ENDFOR
- n--
- j++
- UNTIL n=0
- END m
- RETURN p
- EXCEPT DO
- IF timerbase THEN CloseDevice(tr)
- SELECT exception
- CASE ERR_TIMER
- PrintF('random() - Couldn''t open timer.device.\n')
- ENDSELECT
- ENDPROC
-