'===========================================================================
' Subject: TYPING TUTOR                       Date: 05-19-96 (12:00)       
'  Author: Darryl Schneider                   Code: QB, QBasic, PDS        
'  Origin: fish2@datanet.ab.ca              Packet: MISC.ABC
'===========================================================================
'This is a little typing drill that tests how
'fast you can type the message and how accurate
'you are in doing so.
'
'Written by Darryl Schneider
'fish2@datanet.ab.ca
'The QBasic Zone
'http://www.geocities.com/SiliconValley/4244/qbasic.html
'
CLS
START:                         'start of program
RANDOMIZE TIMER
DIM TIMEVAR AS DOUBLE          'declaring all variables
DIM WPM AS INTEGER
DIM BEGIN AS STRING
DIM NUMWORDS AS INTEGER
DEFINT E
DEFSTR M, T

TIMEVAR = TIMER                'giving values to the variables
MA1 = "THE "
MA2 = "QUICK "
MA3 = "BROWN "
MA4 = "FOX "
MA5 = "JUMPED "
MA6 = "OVER "
MA7 = "LAZY "
MA8 = "DOG."

MESSAGE1 = MA1 + MA2 + MA3 + MA4 + MA5 + MA6 + MA1 + MA7 + MA8
NUMWORDS = LEN(MESSAGE1) / 5    'calculating # of words in message

CLS                             'starting the type test
PRINT ""
PRINT "                   TYPE TEST"
PRINT ""
PRINT "*************************************************"
PRINT ""
PRINT "THE MESSAGE:"
PRINT ""
PRINT MESSAGE1
PRINT ""
PRINT "READY TO BEGIN(Y)? "     'prompts user for start
DO
BEGIN = UCASE$(INKEY$)
IF BEGIN = "Y" THEN GOSUB TYPING
IF BEGIN = "N" OR BEGIN = "Q" THEN GOSUB QUIT
LOOP WHILE BEGIN = ""

TYPING:
PRINT ""
INPUT "GO: ", TYPEMESSAGE1                'user message input
TYPEMESSAGE1 = UCASE$(TYPEMESSAGE1)
TIMEVAR = TIMER - TIMEVAR

MB1 = LEFT$(TYPEMESSAGE1, 4)              'giving each variable
MB2 = MID$(TYPEMESSAGE1, 5, 6)            'of the input the value
MB3 = MID$(TYPEMESSAGE1, 11, 6)           'of a word
MB4 = MID$(TYPEMESSAGE1, 17, 4)
MB5 = MID$(TYPEMESSAGE1, 21, 7)
MB6 = MID$(TYPEMESSAGE1, 28, 5)
MB7 = MID$(TYPEMESSAGE1, 33, 4)
MB8 = MID$(TYPEMESSAGE1, 37, 5)
MB9 = RIGHT$(TYPEMESSAGE1, 4)

MC1 = LEFT$(MESSAGE1, 4)                  'giving each variable
MC2 = MID$(MESSAGE1, 5, 6)                'of the message the value
MC3 = MID$(MESSAGE1, 11, 6)               'of a word
MC4 = MID$(MESSAGE1, 17, 4)
MC5 = MID$(MESSAGE1, 21, 7)
MC6 = MID$(MESSAGE1, 28, 5)
MC7 = MID$(MESSAGE1, 33, 4)
MC8 = MID$(MESSAGE1, 37, 5)
MC9 = RIGHT$(MESSAGE1, 4)

PRINT ""
ERRORS = 0
WPM = 60 / TIMEVAR * NUMWORDS        'calculates words per minute
PRINT "It took you "; TIMEVAR; " seconds to type that message."
PRINT "You typed that message at "; WPM; " words per minute."
PRINT ""

IF NOT MB1 = MC1 THEN ERRORS = ERRORS + 1        'tabulates number of
IF NOT MB2 = MC2 THEN ERRORS = ERRORS + 1        'errors
IF NOT MB3 = MC3 THEN ERRORS = ERRORS + 1
IF NOT MB4 = MC4 THEN ERRORS = ERRORS + 1
IF NOT MB5 = MC5 THEN ERRORS = ERRORS + 1
IF NOT MB6 = MC6 THEN ERRORS = ERRORS + 1
IF NOT MB7 = MC7 THEN ERRORS = ERRORS + 1
IF NOT MB8 = MC8 THEN ERRORS = ERRORS + 1
IF NOT MB9 = MC9 THEN ERRORS = ERRORS + 1

PRINT "You made "; ERRORS; " errors. "
E1RRORS = 9 - ERRORS                   'calculates accuracy
E2RRORS = E1RRORS / 9 * 100
PRINT "Your accuracy was "; E2RRORS; " %"
IF ERRORS = 0 THEN GOSUB AGAIN

PRINT ""
PRINT "These are the following errors that you made: "
PRINT ""
IF NOT MB1 = MC1 THEN PRINT MB1; " should be "; MC1     'shows
IF NOT MB2 = MC2 THEN PRINT MB2; " should be "; MC2     'corrections
IF NOT MB3 = MC3 THEN PRINT MB3; " should be "; MC3
IF NOT MB4 = MC4 THEN PRINT MB4; " should be "; MC4
IF NOT MB5 = MC5 THEN PRINT MB5; " should be "; MC5
IF NOT MB6 = MC6 THEN PRINT MB6; " should be "; MC6
IF NOT MB7 = MC7 THEN PRINT MB7; " should be "; MC7
IF NOT MB8 = MC8 THEN PRINT MB8; " should be "; MC8
IF NOT MB9 = MC9 THEN PRINT MB9; " should be "; MC9

AGAIN:
PRINT ""
PRINT "Try the test again(Y)? "          'prompt to start again
DO
TT = UCASE$(INKEY$)
LOOP WHILE TT = ""
IF TT = "Y" THEN GOSUB START
IF NOT TT = "Y" THEN GOSUB QUIT

QUIT:
END
