REM This QBasic program plots a log file made by MEVO REM For FreeBasic compile using options -lang qb -e REM 9/30/09 WTN REM Graphics setup SCREEN 12 xscreen = 640 'pixel width of graphics mode yscreen = 480 'pixel height of graphics mode xtextsize = 80 'number of text columns ytextsize = 30 'number of text rows xplotmax = 610 'maximum plotted X pixel (not counting label text) yplotmax = 345 'maximum plotted Y pixel (X axis labels below this) xoffset = 36 'minimum plotted X pixel (room for Y axis labels) yoffset = 23 'minimum plotted Y pixel (space at top of display) ON ERROR GOTO errortrap PRINT PRINT " === MEVO Log Plotter ===" INPUT " Logfile (mevo.log) :", f$ IF f$ = "" THEN f$ = "mevo.log" f$ = LTRIM$(RTRIM$(f$)) IF f$ = "" THEN GOTO sysexit OPEN f$ FOR INPUT AS #1 : CLOSE INPUT " Autodetect settings? (Y/N):", a$ IF UCASE$(LEFT$(a$,1)) <> "Y" THEN INPUT " X iterations (9000000) :", xiter& INPUT " Y score (200) :", yscore INPUT " Averaging size (100) :", avgsize INPUT " Y score increm (50) :", yscoreinc INPUT " X iter increm (1000000) :", xiterinc& ELSE OPEN f$ FOR INPUT AS #1 WHILE NOT EOF(1) INPUT #1, a$ IF a$ = "BENCH" THEN INPUT #1, a$ INPUT #1, a$: topscore = VAL(a$) INPUT #1, a$: INPUT #1, a$: INPUT #1, a$ INPUT #1, a$: iter& = VAL(a$) INPUT #1, a$ END IF WEND CLOSE 'validate... IF topscore = 0 OR topscore > 300 OR iter& = 0 THEN GOTO errortrap 'set yscore to next highest 50-point increment past top score yscore = INT((topscore + 4) / 50) * 50 + 50 'determine xiterinc& based on magnitude xiterinc& = 100000 IF iter& >= 1400000 THEN xiterinc& = 200000 IF iter& >= 3000000 THEN xiterinc& = 500000 IF iter& >= 8000000 THEN xiterinc& = 1000000 IF iter& >= 14000000 THEN xiterinc& = 2000000 IF iter& >= 30000000 THEN xiterinc& = 5000000 IF iter& >= 80000000 THEN xiterinc& = 10000000 'set xiter& to next highest xiterinc& increment past iter& xiter& = INT((iter& - 1) / xiterinc&) * xiterinc& + xiterinc& END IF 'autodetect IF xiter& = 0 THEN xiter& = 9000000 IF yscore = 0 THEN yscore = 200 IF avgsize = 0 THEN avgsize = 100 IF yscoreinc = 0 THEN yscoreinc = 50 IF xiterinc& = 0 THEN xiterinc& = 1000000 yplotsize = yplotmax - yoffset xplotsize = xplotmax - xoffset DIM prevscores(avgsize) OPEN f$ FOR INPUT AS #1 CLS COLOR 2 LINE (xoffset - 1, yoffset)-(xoffset - 1, yplotmax) LINE (xoffset, yoffset)-(xoffset, yplotmax) LINE (xoffset - 1, yplotmax)-(xplotmax, yplotmax) LINE (xoffset - 1, yplotmax + 1)-(xplotmax, yplotmax + 1) FOR i = yscoreinc TO yscore STEP yscoreinc y = INT(yoffset + (yplotsize - (i / yscore) * yplotsize)) LINE (xoffset - 1, y)-(xplotmax, y) a$ = LTRIM$(STR$(i)) LOCATE INT(y * (ytextsize / yscreen) + 1), 5 - LEN(a$) PRINT a$; NEXT i yloc = INT(yplotmax * (ytextsize / yscreen) + 2) FOR i& = xiterinc& TO xiter& STEP xiterinc& x = INT(xoffset + (i& / xiter&) * xplotsize) LINE (x, yoffset)-(x, yplotmax) a$ = LTRIM$(STR$(i& / 1000000)) IF i& <> 0 THEN a$ = a$ + "M" LOCATE yloc, 1 + INT(x * (xtextsize / xscreen)) - INT(LEN(a$) / 2) PRINT a$; NEXT i& WHILE NOT EOF(1) INPUT #1, a$ IF a$ = "BENCH" THEN INPUT #1, a$: score = VAL(a$) INPUT #1, a$: topscore = VAL(a$) INPUT #1, a$: INPUT #1, a$: INPUT #1, a$ INPUT #1, a$: iter& = VAL(a$) INPUT #1, a$ px = x x = INT(xoffset + (iter& / xiter&) * xplotsize) y = INT(yoffset + yplotsize - (score / yscore) * yplotsize) IF x > xoffset AND x < xplotmax AND y >= yoffset AND y < yplotmax THEN COLOR 5 PSET (x, y) END IF y = INT(yoffset + yplotsize - (topscore / yscore) * yplotsize) IF x > xoffset AND x < xplotmax AND y >= yoffset AND y < yplotmax THEN COLOR 6 IF px = 0 OR ptsy = 0 THEN PSET (x, y) ELSE LINE (px, ptsy)-(x, y) END IF ptsy = y END IF avgscore = 0: avgtop = 0 FOR i = avgsize TO 2 STEP -1 prevscores(i) = prevscores(i - 1) avgscore = avgscore + prevscores(i) IF avgtop < prevscores(i) THEN avgtop = prevscores(i) NEXT i prevscores(1) = score IF avgtop < score THEN avgtop = score avgscore = avgscore + score avgscore = avgscore / avgsize y = INT(yoffset + yplotsize - (avgscore / yscore) * yplotsize) IF x > xoffset AND x < xplotmax AND y >= yoffset AND y < yplotmax THEN COLOR 4 PSET (x, y) END IF y = INT(yoffset + yplotsize - (avgtop / yscore) * yplotsize) IF x > xoffset AND x < xplotmax AND y >= yoffset AND y < yplotmax THEN COLOR 11 IF px = 0 OR paty = 0 THEN PSET (x, y) ELSE LINE (px, paty)-(x, y) END IF paty = y END IF END IF 'BENCH tag detected WEND CLOSE WHILE INKEY$ = "": SLEEP 1 : WEND sysexit: 'SCREEN 0 SYSTEM errortrap: PRINT " An error occured. Press a key..." WHILE INKEY$ = "": SLEEP 1 : WEND 'SCREEN 0 SYSTEM