'-------------------------------------------------------

'FILE = "PRIMESLIST.EBA"

'COMPILE AS "CONSOLE EXE".

'WHEN THE PROGRAM BEGINS, MAXIMIZE THE CONSOLE WINDOW.

'IF THE PROGRAM QUITS IMMEDIATELY AFTER STARTING,
'THEN, SET THE VALUE OF THE CONSTANT, "MAXPRIMES", SMALLER.

'-------------------------------------------------------

CONST MAXPRIMES = 10000000
CONST SHOWINTERVAL = 25000
UINT64 PRIMESLIST[MAXPRIMES + 1]
DOUBLE R
INT N = 2
INT NEXTINT = 3

'-------------------------------------------------------

OPENCONSOLE

SHOWINSTRUCTIONS()

PRIMESLIST[1] = 2
PRIMESLIST[2] = 3

WHILE TRUE

LABEL L1

NEXTINT += 2
R = SQRT(NEXTINT)

FOR I = 2 TO N
IF PRIMESLIST[I] > R THEN GOTO L2
IF NEXTINT % PRIMESLIST[I] = 0 THEN GOTO L1
NEXT I

LABEL L2

N += 1
PRIMESLIST[N] = NEXTINT
IF N % SHOWINTERVAL = 0 THEN SHOWPRIME(N)

IF N = MAXPRIMES THEN SHOWTERMINATION()
IF INKEY$ = CHR$(27) THEN SHOWQUITEARLY()

ENDWHILE
END

'-------------------------------------------------------

SUB SHOWPRIME(INT I)
COLOR 12,0
STRING PC = USING("0########",I)
STRING PV = USING("##########",PRIMESLIST[I])
STRING CS = APPEND$(PC,"    ",PV)
PRINT CS
ENDSUB

'-------------------------------------------------------

SUB SHOWINSTRUCTIONS()
COLOR 11,0
STRING S
PRINT "YOU CAN QUIT THE PROGRAM AT ANYTIME,"
PRINT "BY PRESSING THE 'ESC' KEY."
PRINT
PRINT "PRESS 'ESC' TO QUIT NOW,"
PRINT "OR (ALMOST) ANY OTHER KEY TO BEGIN."
PRINT
WHILE TRUE
S=INKEY$
IF S > CHR$(0) THEN GOTO L3
ENDWHILE
LABEL L3
IF S=CHR$(27)
END
ELSE
RETURN
ENDIF
ENDSUB

'-------------------------------------------------------

SUB SHOWQUITEARLY()
COLOR 11,0
STRING S
PRINT
PRINT "YOU HAVE CHOSEN TO QUIT PREMATURELY."
PRINT "TO DO SO NOW, PRESS THE 'ESC' KEY AGAIN."
PRINT "OR, PRESS (ALMOST) ANY OTHER KEY, TO RESUME EXECUTION."
PRINT
WHILE TRUE
S=INKEY$
IF S > CHR$(0) THEN GOTO L4
ENDWHILE
LABEL L4
IF S=CHR$(27)
END
ELSE
RETURN
ENDIF
ENDSUB

'-------------------------------------------------------

SUB SHOWTERMINATION()
COLOR 11,0
PRINT
PRINT " PROGRAM DONE. PRESS (ALMOST) ANY KEY TO QUIT."
PRINT
COLOR 14,0
PRINT "(THANK YOU FOR COMING, AND SEE YOU AGAIN SOON.)"
WHILE TRUE
IF INKEY$ > CHR$(0) THEN END
ENDWHILE
ENDSUB

'-------------------------------------------------------
'-------------------------------------------------------
