!Sieve o f eratothenes!

INCLUDE D:TERMINAL.LIB
CONST size=8190,false=0,true=1
BYTE flags[size+1]
INT prime,count,k,i,j,stop
CONST none=255
BYTE CH=764
BYTE RTCLOCK1=19,RTCLOCK2=20

MAIN()
BEGIN
 WRTLN("10 iterations")
 RTCLOCK1=0
 RTCLOCK2=0
 FOR j=1 TO 10 DO
   prime=0
   count=0
   FOR i=0 TO size DO
    flags[i]=true
   NEXT
   FOR i=0 TO size DO
    IF flags[i] THEN
     prime=i+i+3
     k=i+prime
     WHILE k <= size DO
      flags[k]=false
      k=k+prime
     ENDWHILE
     count=count + 1
    ENDIF
   NEXT
 NEXT
 stop=RTCLOCK1 * 256 + RTCLOCK2
 WRITE(count) WRTLN(" primes")
 WRITE(stop) WRTLN(" ticks")
 WHILE CH=none DO ENDWHILE CH=none
END
