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

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