home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaMiscModsCD3.iso / _PROGRAMME / PLAYER / GUI / EasyPlayer.lha / EYP / Source / modsrc / randomlisttest.e < prev    next >
Encoding:
Text File  |  1999-09-20  |  828 b   |  52 lines

  1. MODULE 'timer','devices/timer','exec/io'
  2.  
  3. ENUM ERR_NONE,ERR_TIMER
  4.  
  5. PROC main()
  6. DEF p,i,n=10
  7.     PrintF('RandomListTest\n')
  8.     p:=randomlist(n)
  9.     FOR i:=0 TO n-1
  10.         PrintF('\d\n',p[i])
  11.     ENDFOR
  12.     END p
  13. ENDPROC
  14.  
  15. PROC randomlist(n) HANDLE
  16. DEF seed,tv:PTR TO timeval,tr:PTR TO timerequest,
  17. i,j,k,r,p,m
  18.     NEW p[n]
  19.     NEW tr
  20.     timerbase:=NIL
  21.     IF (OpenDevice('timer.device',UNIT_MICROHZ,tr,0))<>0 THEN Raise(ERR_TIMER)
  22.     timerbase:=tr.io.device
  23.     NEW tv
  24.     GetSysTime(tv)
  25.     seed:=-tv.micro
  26.     Rnd(seed)
  27.  
  28.     NEW m[n]
  29.     FOR i:=0 TO n-1 DO m[i]:=i
  30.     j:=0
  31.     REPEAT
  32.         r:=Rnd(n)
  33.         p[j]:=m[r]
  34.         k:=0
  35.         FOR i:=0 TO n-2
  36.             IF m[i]=p[j] THEN k++
  37.             m[i]:=m[k]
  38.             k++
  39.         ENDFOR
  40.         n--
  41.         j++
  42.     UNTIL n=0
  43.     END m
  44.     RETURN p
  45. EXCEPT DO
  46.     IF timerbase THEN CloseDevice(tr)
  47.     SELECT exception
  48.         CASE ERR_TIMER
  49.             PrintF('random() - Couldn''t open timer.device.\n')
  50.     ENDSELECT
  51. ENDPROC
  52.