' Itza-Million ... A Speed Test and BASIC Language demonstration program
' Uses multiplications of 1 million-or-more items as a way of checking computation speed on any given PC.
#COMPILE EXE "Itza-Million"
#DIM ALL
DECLARE FUNCTION AT0(BYVAL RRow AS LONG, BYVAL RCol AS LONG) AS STRING
DECLARE FUNCTION AT2(BYVAL RRow AS LONG, BYVAL RCol AS LONG, BYVAL RRGB AS LONG) AS STRING
FUNCTION PBMAIN () AS LONG
LOCAL ZGA AS EXT, ZGB AS EXT, WFOR AS LONG, Clok1 AS SINGLE, Clok2 AS SINGLE
LOCAL ZGC AS LONG, RowSpot AS LONG, XzitFAR AS LONG, JColor AS LONG
LOCAL WFAA AS STRING, WFBB AS STRING, GZED AS STRING, Action AS LONG, SKIP AS STRING
CONSOLE SET LOC 40,80
CONSOLE SET SCREEN 43, 80
CURSOR OFF
KEY 10, CHR$(250)
KEY 12, CHR$(254)
SKIP=UCASE$(COMMAND$):' All letters made uppercase
SKIP=TRIM$(SKIP):' All leading/trailing spaces removed - very important if command line arguments are to work
' Skip can bypass Gazillion Gag, and allow tests to 100 Million or 1 Billion.
Action=1:' For initial running of program
DO
IF Action=9 THEN EXIT LOOP
IF Action=1 THEN
CLS
? AT2(03,3,14);"Power-BASIC ";AT2(03,15,15);"Console Compiler Speed Test"
? AT2(05,3,11);"Variable ";AT2(5,12,15);"ZGA ";AT2(5,16,11);"is initially equal to ";: COLOR 15: ? "1"
? AT2(06,3,11);"Variable ";AT2(6,12,15);"ZGB ";AT2(6,16,11);"is equal to ";: COLOR 15: ? "1.000001"
? AT2(09,3,11);"example, the number of multiplications will be shown, along with"
? AT2(10,3,11);"the difference, in seconds, between the start and finish times"
? AT2(11,3,11);"of the multiplications."
WFBB="Five"
SELECT CASE SKIP
CASE "SKIP","FOUR","BP4","4","44","444","4444","4 4"
WFBB="Four"
CASE "TREY","THREE","BP3","3","33","333","3333","3 3"
WFBB="Three"
END SELECT
END IF
SELECT CASE Action
CASE 3: WFBB="Three"
CASE 4: WFBB="Four"
CASE 5: WFBB="Five"
END SELECT
? AT2(08,3,11);WFBB;" examples of multiplying ZGA by ZGB will be done. In each such "
IF Action=1 THEN
? AT2(14,3,11);"Press the ";
COLOR 15: ? "SPACEBAR ";
COLOR 11: ? "to begin the test."
DO
GZED=INKEY$
IF GZED=CHR$(32) THEN EXIT LOOP
LOOP
? AT0(14,3);STRING$(56,32):' clear out previous text
Action=8:' Done with Action=1 processes. Allows run of all tests, plus the Gazillion gag.
END IF
IF Action=3 OR Action=4 OR Action=5 THEN ? AT0(14,3);STRING$(1760,32):' clear out previous test results text
? AT2(14,07,11);"Number of"
? AT2(15,03,15);"#";AT2(15,7,11);"Multiplications";AT2(15,25,11);"Elasped Time (seconds)"
? AT2(15,49,11);"Final Result of ";: COLOR 15: ? "ZGA"
RowSpot=15
FOR WFOR = 1 TO 5
RowSpot = RowSpot+2
WFAA=USING$("#",WFOR)
? AT2(RowSpot,3,15);WFAA;" - "
WFAA=CHOOSE$(WFOR,"1 Million","10 Million","100 Million","1 Billion","A Gazillion")
WFBB="Standby - Calculations in Progress"
IF WFOR=5 THEN WFBB="Standby - Whole Lotta Calculations in Progress"
? AT2(RowSpot,7,11);WFAA;AT2(RowSpot,25,7);WFBB
IF WFOR<5 THEN
ZGA = 1
ZGB = 1.000001
ZGC = CHOOSE(WFOR,6,7,8,9)
Clok1=0
Clok2=0
Clok1 = TIMER
FOR XzitFAR = 1 TO 10^ZGC
ZGA = ZGA*ZGB
NEXT XzitFAR
Clok2 = TIMER - Clok1
WFBB=USING$("##.#################",Clok2) + STRING$(21,32)
JColor=15
ELSEIF WFOR=5 THEN
WFBB="Sorry - That's way too many for me!"+ STRING$(15,32)
SLEEP 2800
JColor=14
END IF
? AT2(RowSpot,25,JColor);WFBB
IF JColor=15 THEN ? AT2(RowSpot,48,15);ZGA
SELECT CASE SKIP
CASE "SKIP","FOUR","BP4","4","44","444","4444","4 4"
IF Action>5 THEN Action=4: SKIP=""
CASE "TREY","THREE","BP3","3","33","333","3333","3 3"
IF Action>5 THEN Action=3: SKIP=""
END SELECT
IF WFOR=Action THEN EXIT FOR:' When Action=3 or 4, the Gazillion gag (WFOR=5, Action=5 or 8) will be bypassed
NEXT WFOR
SLEEP 0444
? AT2(RowSpot+2,3,14);"TEST OVER"
? AT2(RowSpot+5,3,11);"Press ";
COLOR 15: ? "F-10 ";
COLOR 11: ? "to repeat the test up to 100 Million."
? AT2(RowSpot+7,3,11);"Press ";
COLOR 15: ? "F-12 ";
COLOR 11: ? "to repeat the test up to 1 Billion."
? AT2(RowSpot+9,3,11);"Press the ";
COLOR 15: ? "SPACEBAR ";
COLOR 11: ? "to exit this program."
Action=8
DO
GZED=INKEY$
IF GZED=CHR$(250) THEN Action=3
IF GZED=CHR$(254) THEN Action=4
IF GZED=CHR$(126) THEN Action=5
IF GZED=CHR$(32) THEN Action=9
SELECT CASE Action
CASE 3,4,5,9: EXIT LOOP
END SELECT
LOOP
LOOP UNTIL (Action=9)
? AT2(RowSpot+11,3,15);"OK"
SLEEP 1040
CONSOLE SET SCREEN 25,80
COLOR 7,0
CURSOR ON
' PowerBasic's Original 100 Million Iterations Demo Code
' x## = 1
' y## = 1.000001
' t! = Timer
' For i& = 1 To 100000000
' x## = x## * y##
' Next
' t! = Timer - t!
END FUNCTION
FUNCTION AT0(BYVAL RRow AS LONG, BYVAL RCol AS LONG) AS STRING
' on-screen cursor placement
LOCATE RRow, RCol
END FUNCTION
FUNCTION AT2(BYVAL RRow AS LONG, BYVAL RCol AS LONG, BYVAL RRGB AS LONG) AS STRING
' on-screen cursor placement with foreground color
LOCATE RRow, RCol
COLOR RRGB
END FUNCTION