home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib32b.dsk / KEYBOARD.TUTOR.bas < prev    next >
BASIC Source File  |  2023-02-26  |  21KB  |  268 lines

  1. 10  REM  **********************
  2. 20  REM  *   KEYBOARD.TUTOR   *
  3. 30  REM  * BY MARK R. CRAVEN  *
  4. 40  REM  * COPYRIGHT (C) 1987 *
  5. 50  REM  * BY MICROSPARC, INC *
  6. 60  REM  * CONCORD, MA  01742 *
  7. 70  REM  **********************
  8. 100  HOME : TEXT 
  9. 110  FOR I = 1 TO 39:L$ = L$ +"=": NEXT 
  10. 120  GOSUB 630
  11. 130  REM  LOAD FILES
  12. 140  VTAB 10: HTAB 2: PRINT "READING DISK FILES -- DON'T GO AWAY."
  13. 150  ONERR  GOTO 2660
  14. 160  PRINT  CHR$(4)"BLOAD CHAR.SET,A$9000": REM 36864
  15. 170  PRINT  CHR$(4)"BLOAD KEYS,A$9400": REM 37888
  16. 180  PRINT  CHR$(4)"BLOAD CURSOR,A$9500": REM 38144
  17. 190  PRINT  CHR$(4)"BLOAD FINGERS, A$8F00": REM 36608
  18. 200  POKE 216,0: REM CLEAR DISK ONERR
  19. 210  VTAB 7: CALL  -958
  20. 220  HIMEM: 35328: REM $8A00
  21. 230 L$ = "": FOR I = 1 TO 39:L$ = L$ +"=": NEXT 
  22. 240 CUR = 38144:TABLE = 233:T1 = 144:T2 = 148:T3 = 143: REM HI BYTES OF 3 SHAPE TABLES
  23. 250 BEEP = CUR -15:VK = 20:HK = 18: SCALE= 1: ROT= 0: HCOLOR= 3: POKE 230,64: REM NOISE, VERTICAL KEY,HORIZ.KEY,PLOT PAGE
  24. 260  POKE 232,0: REM LO BYTE OF SHAPE TABLE POINTER
  25. 270 HK$ = "ASDFJKL;": REM HOME KEYS
  26. 280  FOR I = 1 TO 4: READ LE(I): NEXT : REM LEFT EDGE FOR GRAPHICS
  27. 290  FOR I = 0 TO 13: READ J: POKE I +BEEP,J: NEXT : REM TONE ROUTINE POKE INTO MEMORY
  28. 300  REM 
  29. 310  REM DEFINE KEY POSITIONS
  30. 320  REM 
  31. 330  DEF  FN H(A) = LE(3) +(A +6 *(FLAG >0)) *HK: REM HOME KEY H POSITIONS
  32. 340  DEF  FN A(A) = (X$ = "1") +2 *(X$ = "Q") +3 *(X$ = "A") +4 *(X$ = "Z")
  33. 350  DEF  FN S(A) = (X$ = "2") +2 *(X$ = "W") +3 *(X$ = "S") +4 *(X$ = "X")
  34. 360  DEF  FN D(A) = (X$ = "3") +2 *(X$ = "E") +3 *(X$ = "D") +4 *(X$ = "C")
  35. 370  DEF  FN F(A) = (X$ = "4"  OR X$ = "5") +2 *(X$ = "R"  OR X$ = "T") +3 *(X$ = "F"  OR X$ = "G") +4 *(X$ = "V"  OR X$ = "B")
  36. 380  DEF  FN J(A) = (X$ = "6"  OR X$ = "7") +2 *(X$ = "Y"  OR X$ = "U") +3 *(X$ = "H"  OR X$ = "J") +4 *(X$ = "N"  OR X$ = "M")
  37. 390  DEF  FN K(A) = (X$ = "8") +2 *(X$ = "I") +3 *(X$ = "K") +4 *(X$ = ",")
  38. 400  DEF  FN L(A) = (X$ = "9") +2 *(X$ = "O") +3 *(X$ = "L") +4 *(X$ = ".")
  39. 410  DEF  FN C(A) = (X$ = "0") +2 *(X$ = "P") +3 *(X$ = ";") +4 *(X$ = "/")
  40. 420  FOR I = 1 TO 4: READ L$(I): NEXT : REM LEFT HOME KEYS
  41. 430  FOR I = 1 TO 4: READ R$(I): NEXT : REM RIGHT HOME KEYS
  42. 440  FOR I = 1 TO 4: READ F$(I): NEXT : REM FINGER NAMES
  43. 450  FOR I = 1 TO 4: READ Y(I): NEXT 
  44. 460 S$ = "1234567890QWERTYUIOPASDFGHJKL;ZXCVBNM,./"
  45. 470  GOTO 950: REM MAIN MENU
  46. 480  REM 
  47. 490  REM DRAW KEYBOARD
  48. 500  REM 
  49. 510  REM ROWS 1 & 2
  50. 520  REM 
  51. 530  POKE TABLE,T2: FOR I = 1 TO 12: DRAW 1 AT LE(1) +HK *I,VK: NEXT : FOR I = 1 TO 12: DRAW 1 AT LE(2) +HK *I,2 *VK: NEXT : FOR I = 1 TO 3: DRAW 1 AT 8 +I *9,3 *VK: NEXT 
  52. 540  REM ROW 3
  53. 550  FOR I = 1 TO 12: DRAW 1 AT LE(3) +HK *I,3 *VK: NEXT : FOR I = 1 TO 2: DRAW 1 AT LE(3) +12 *HK +(HK *I)/2,3 *VK: NEXT 
  54. 560  FOR I = 1 TO 4: DRAW 1 AT 8 +8.8 *I,4 *VK: NEXT : FOR I = 1 TO 11: DRAW 1 AT LE(4) +HK *I,4 *VK: NEXT : FOR I = 1 TO 4: DRAW 1 AT LE(4) +11 *HK +I *HK/2.5,4 *VK: NEXT 
  55. 570  REM ROW 4
  56. 580  DRAW 1 AT 4 *HK +LE(1),5 *VK: FOR I = 1 TO 9: DRAW 1 AT 4 *HK +LE(1) +I *HK/2,5 *VK: NEXT : RETURN 
  57. 590  REM 
  58. 600  REM SUBROUTINES
  59. 610  REM 
  60. 620  HOME : TEXT 
  61. 630  VTAB 1: PRINT  TAB( 10)"NIBBLE KEYBOARD TUTOR": PRINT  TAB( 19)"by": PRINT  TAB( 13)"Mark R. Craven": PRINT : PRINT "Copyright (c) 1987 by microSPARC, Inc.": PRINT L$: RETURN 
  62. 640  VTAB 21: HTAB 1: PRINT L$: PRINT " <- -> TO SELECT  <RETURN>  TO EXECUTE": PRINT  TAB( 4)"  UP AND DOWN ARROWS MAY BE USED": PRINT L$;: RETURN : REM PROMPTS
  63. 650 FL = 0: FOR K = 1 TO 4:T(K) = Y(K):T$(K) = L$(K):K$(K) = F$(K): NEXT :F$ = "LEFT ": RETURN : REM LEFT HOME KEYS
  64. 660 LINE = ( PEEK(4) +1)/2: RETURN : REM CURSOR CHOICE
  65. 670  VTAB 22: HTAB 1: PRINT L$: VTAB 23: HTAB 1: PRINT "Press <RETURN> to Continue...";: POKE  -16384,0: GET X$: RETURN 
  66. 680  HCOLOR= 0: FOR I = 1 TO  LEN(X$):N =  ASC( MID$ (X$,I,1)) -31: DRAW N AT C +HK +7 *I,R *VK: DRAW N AT C +1 +HK +7 *I,R *VK: NEXT : HCOLOR= 3: RETURN : REM DOUBLE THICK LETTERS
  67. 690  FOR I = 1 TO  LEN(X$): DRAW  ASC( MID$ (X$,I,1)) -31 AT H +8 *I,V: DRAW  ASC( MID$ (X$,I,1)) -31 AT H +1 +8 *I,V: NEXT : RETURN : REM DRAW TEXT
  68. 700  FOR I = 1 TO  LEN(X$): XDRAW  ASC( MID$ (X$,I,1)) -31 AT H +5 *I,V: NEXT : RETURN : REM DRAW TEXT
  69. 710 W = 20:X = 120:Y = 260:Z = 150: RETURN : REM BIG BOX
  70. 720  HPLOT W,X TO Y,X TO Y,Z TO W,Z TO W,X: FOR I = 1 TO 2: HPLOT W -I,X +I TO W -I,Z +I TO Y -I,Z +I: NEXT : RETURN : REM BIG MESSAGE BOX
  71. 730 X$ = "PRESS <RETURN>..."
  72. 740 W = 60:X = 165:Y = 215:Z = 185: RETURN : REM <RETURN> BOX
  73. 750  HCOLOR= 0: FOR I = X +1 TO Z -1: HPLOT W +1,I TO Y -1,I: NEXT : HCOLOR= 3: RETURN : REM ERASE BOX
  74. 760  HCOLOR= 0: FOR I = X +19 TO Z -1: HPLOT W +1,I TO Y -1,I: NEXT : HCOLOR= 3: RETURN : REM ERASE BOX
  75. 770  HOME 
  76. 780  POKE 49232,0: POKE 49239,0: POKE 49234,0: POKE 49237,0: RETURN : REM SWITCH TO GRAPHICS
  77. 790  GOSUB 530: POKE TABLE,T1: GOSUB 710: GOSUB 720: GOSUB 740: GOSUB 720: RETURN : REM MESSAGE BOXES
  78. 800  POKE TABLE,T2: FOR J = 1 TO 5: XDRAW 1 AT LE(1),VK: FOR Z = 1 TO 200: NEXT : GOSUB 820: NEXT : DRAW 2 AT LE(1),VK: POKE TABLE,T1:X$ = "ESC":V = VK:H = 11: GOSUB 700: RETURN 
  79. 810 X$ = "RTN":V = 3 *VK:H = LE(1) +7 +12 *HK: HCOLOR= 0: GOSUB 690: HCOLOR= 3: RETURN : REM PRINT ON KEY
  80. 820  POKE 7,10: POKE 6,15: CALL BEEP: RETURN : REM SPECIAL KEY
  81. 830  POKE 7,15: POKE 6,24: CALL BEEP: RETURN : REM MESSAGE BEEP
  82. 840  POKE 6,20: POKE 7,40: CALL BEEP: CALL BEEP: RETURN : REM RIGHT ANSWER
  83. 850  POKE 7,15: FOR I = 1 TO 8: POKE 6,20 -I: CALL BEEP: NEXT : RETURN : REM RIGHT KEY
  84. 860  POKE 6,60: POKE 7,20: CALL BEEP: RETURN : REM WRONG ANSWER
  85. 870  DRAW 1 AT HK +LE(I), FN A(I) *VK: RETURN 
  86. 880  DRAW 1 AT 2 *HK +LE(I), FN S(I) *VK: RETURN 
  87. 890  DRAW 1 AT HK *3 +LE( FN D(I)), FN D(I) *VK: RETURN 
  88. 900  DRAW 1 AT HK *(4 +(X$ = "5") +(X$ = "T") +(X$ = "G") +(X$ = "B")) +LE( FN F(I)), FN F(I) *VK: RETURN 
  89. 910  DRAW 1 AT HK *(6 +(X$ = "7") +(X$ = "U") +(X$ = "J") +(X$ = "M")) +LE( FN J(I)), FN J(I) *VK: RETURN 
  90. 920  DRAW 1 AT HK *8 +LE( FN K(I)), FN K(I) *VK: RETURN 
  91. 930  DRAW 1 AT HK *9 +LE( FN L(I)), FN L(I) *VK: RETURN 
  92. 940  DRAW 1 AT HK *(10 +(X$ = "-") +2 *(X$ = "=") +(X$ =  CHR$(91)) +2 *(X$ = "]") +(X$ = "'")) + +LE( FN C(I)), FN C(I) *VK: RETURN 
  93. 950  VTAB 7: HTAB 1: PRINT "'?'=Help"; TAB( 29)"<ESC>=Quit":F1 = 0: REM KEY DRILL FLAG
  94. 960  GOSUB 640: HTAB 1: VTAB 11: PRINT  TAB( 12)"LEARN HOME KEYS": PRINT : PRINT  TAB( 11)"HOME FINGER DRILL": PRINT : PRINT  TAB( 13)"KEYBOARD TEST"
  95. 970  CALL CUR,11,17,9,29
  96. 980  GOSUB 660: ON LINE GOTO 1010,1520,2130
  97. 990  IF LINE >100  THEN 2460: REM '?'
  98. 1000  TEXT : HOME : END : REM 'ESC'
  99. 1010  HOME : CALL 62450: PRINT  TAB( 9)"LEARNING THE HOME KEYS": PRINT : PRINT L$: PRINT  TAB( 27)"<ESC> to Menu"
  100. 1020  PRINT : PRINT "The keys known as the HOME KEYS are the": PRINT : PRINT "keys upon which your fingers lightly": PRINT : PRINT "rest when not actually typing."
  101. 1030  PRINT : PRINT "For your ";: INVERSE : PRINT "LEFT";: NORMAL : PRINT " hand, these keys are": PRINT : PRINT  TAB( 15)"A  S  D  F": PRINT : PRINT "and for your ";: INVERSE : PRINT "RIGHT";: NORMAL : PRINT " hand they are": PRINT : PRINT  TAB( 15)"J  K  L  ;": PRINT 
  102. 1040  GOSUB 670: IF X$ =  CHR$(27)  THEN  GOSUB 620: GOTO 950
  103. 1050  VTAB 5: HTAB 1: CALL  -958: PRINT : PRINT "Follow the instructions given next for": PRINT : PRINT "help in learning the correct position "
  104. 1060  PRINT : PRINT "for your fingers in order to learn to": PRINT : PRINT "type.": GOSUB 670: IF X$ =  CHR$(27)  THEN  GOSUB 620: GOTO 950
  105. 1070  GOSUB 770: REM GRAPHICS
  106. 1080 X$ = "LEARN THE HOME KEYS":V = 3:H = 65: POKE TABLE,T1: GOSUB 690
  107. 1090  GOSUB 790: REM MESSAGE BOXES
  108. 1100  GOSUB 710:X$ = "THIS IS THE TYPICAL COMPUTER":H = W +2:V = X +5: GOSUB 690:X$ = "KEYBOARD.":V = X +14: GOSUB 690
  109. 1110  GOSUB 730:H = W +2:V = X +5: GOSUB 690: GOSUB 830: GOSUB 810: REM PRINT RTN
  110. 1120  POKE  -16368,0: GET X$
  111. 1130  GOSUB 740: GOSUB 750: GOSUB 710: GOSUB 750: REM ERASE
  112. 1140 X$ = "DURING THE DRILL, YOU MAY":H = W +2:V = X +5: GOSUB 690:X$ = "QUIT BY PRESSING <ESC>":V = X +14: GOSUB 690
  113. 1150  GOSUB 800: REM <ESC>
  114. 1160  GOSUB 730:H = W +2:V = X +5: GOSUB 690
  115. 1170 X$ = "  OR <ESC>...":V = X +14: GOSUB 690: GOSUB 830: GET X$
  116. 1180  IF X$ =  CHR$(27)  THEN  GOSUB 620: GOTO 950
  117. 1190  GOSUB 740: GOSUB 750: GOSUB 710: GOSUB 750
  118. 1200  REM 
  119. 1210  REM HOME KEY DRILL
  120. 1220  REM 
  121. 1230  GOSUB 650: REM SET LEFT KEYS
  122. 1240  HCOLOR= 3: POKE TABLE,T3: FOR K = 1 TO 4: DRAW 1 AT 20 +187 *(FL = 1) +8 *K,99 -T(K): FOR I = 99 -T(K) +8 TO 115: HPLOT 20 +187 *(FL = 1) +K *8 +1,I TO 20 +187 *(FL = 1) +K *8 +7,I: NEXT : NEXT 
  123. 1250  IF FLAG = 0  THEN  DRAW 2 AT 60,107
  124. 1260  IF FLAG = 1  THEN  ROT= 48: DRAW 2 AT 207,115: ROT= 0
  125. 1270  FOR K = 1 TO 4: REM FOR EACH SET OF HOME KEYS
  126. 1280  POKE TABLE,T1:X$ = "PRESS THE '" +T$(K) +"' KEY WITH YOUR ":V = X +5:H = W +2: GOSUB 690:X$ = F$ +K$(K) +" FINGER.":V = X +14: GOSUB 690: GOSUB 830
  127. 1290  POKE TABLE,T2: FOR I = 1 TO 5: XDRAW 1 AT  FN H(K),3 *VK: NEXT : HCOLOR= 3: DRAW 1 AT  FN H(K),3 *VK: POKE TABLE,T1: XDRAW  ASC(T$(K)) -31 AT  FN H(K),3 *VK
  128. 1300  POKE  -16368,0
  129. 1310  IF  PEEK( -16384) >128  THEN X$ =  CHR$( PEEK( -16384) -128): GOTO 1330
  130. 1320  POKE TABLE,T3: XDRAW 1 AT 20 +187 *(FL = 1) +8 *K,99 -T(K): FOR J = 1 TO 50: NEXT : GOTO 1310
  131. 1330  IF X$ =  CHR$(27)  THEN K = 4: NEXT : GOSUB 650: GOSUB 620: GOTO 950
  132. 1340  IF X$ =  CHR$(91)  THEN 1370
  133. 1350  IF X$ <" "  THEN  GOSUB 860: GOTO 1300
  134. 1360  IF X$ < >T$(K)  THEN X$ =  CHR$( ASC(X$) -32)
  135. 1370  IF X$ < >T$(K)  THEN  GOSUB 860: GOTO 1300
  136. 1380  HCOLOR= 3: DRAW 1 AT 20 +187 *(FL = 1) +8 *K,99 -T(K)
  137. 1390  POKE TABLE,T1: GOSUB 840: GOSUB 710:X$ = "VERY GOOD!":V = X +23:H = Y -90: GOSUB 690
  138. 1400  GOSUB 710: GOSUB 750
  139. 1410  NEXT : IF FLAG = 1  THEN FLAG = 0: GOTO 1440
  140. 1420 FLAG = 1:F$ = "RIGHT ": FOR I = 1 TO 4:T$(I) = R$(I):K$(5 -I) = F$(I):T(I) = Y(5 -I): NEXT : GOTO 1240: REM RIGHT HOME KEYS
  141. 1430  POKE TABLE,T3: FOR K = 1 TO 4: XDRAW 1 AT 207 +8 *K,99 -T(K): FOR I = 99 -T(K) +8 TO 115: HPLOT 207 +K *8 +1,I TO 20 +K *8 +7,I: NEXT : NEXT 
  142. 1440  POKE TABLE,T1:X$ = "SPACE BAR":R = 5:C = 80: GOSUB 680: GOSUB 710: GOSUB 750:X$ = "HOME KEY DRILL COMPLETE.":V = X +5:H = W +2: GOSUB 690:X$ = "SPACE BAR TO REPEAT DRILL.":V = V +18: GOSUB 690
  143. 1450  GOSUB 730:H = W +2:V = X +5: GOSUB 690
  144. 1460 X$ = "OR SPACE BAR...":V = X +14: GOSUB 690
  145. 1470  POKE  -16368,0: GET X$: IF X$ < > CHR$(32)  THEN  GOSUB 620: GOTO 950: REM BACK TO MAIN MENU
  146. 1480  POKE TABLE,T2: GOSUB 550: POKE TABLE,T1: GOSUB 810: GOSUB 740: GOSUB 750: GOSUB 710: GOSUB 750: GOTO 1230: REM REPEAT DRILL
  147. 1490  REM 
  148. 1500  REM  * HOME KEY DRILL *
  149. 1510  REM 
  150. 1520  HOME : PRINT  TAB( 12)"HOME KEY DRILL": PRINT : PRINT L$: PRINT "'?'=Help" TAB( 28)"<ESC> to Menu"
  151. 1530  FOR I = 1 TO 8: VTAB 10: HTAB 5 +3 *I: PRINT " " + MID$ (HK$,I,1)" ": NEXT 
  152. 1540  INVERSE : FOR I = 1 TO 5: VTAB 7 +I: HTAB 7: PRINT " ";: HTAB 32: PRINT " ";: NEXT : FOR J = 8 TO 12  STEP 4: FOR I = 7 TO 32: VTAB J: HTAB I: PRINT " ";: NEXT : NEXT : NORMAL : PRINT 
  153. 1550  VTAB 21: PRINT L$
  154. 1560  VTAB 22: HTAB 1: PRINT "Select by pressing the HOME KEY you want";: PRINT "to Practice ";
  155. 1570  POKE  -16368,0: GET X$
  156. 1580  IF X$ =  CHR$(27)  THEN  GOSUB 620: GOTO 950: REM <ESC>
  157. 1590  IF X$ = "?"  THEN 2570: REM HELP (?)
  158. 1600  IF X$ =  CHR$(91)  THEN 1640
  159. 1610  FOR I = 1 TO 8: IF X$ =  MID$ (HK$,I,1)  THEN LINE = I:I = 8: NEXT : GOSUB 820: GOTO 1650
  160. 1620  NEXT 
  161. 1630  IF X$ >" "  THEN X$ =  CHR$( ASC(X$) -32): GOTO 1600
  162. 1640  GOSUB 860: GOTO 1570
  163. 1650  VTAB 10: HTAB 5 +LINE *3: INVERSE : PRINT " " MID$ (HK$,LINE,1)" ";: NORMAL 
  164. 1660  IF F1  THEN  GOSUB 780: GOTO 1680: REM SET GRAPHICS
  165. 1670  POKE TABLE,T1: CALL 62450:X$ = "FINGER DRILL":H = 86:V = 4: GOSUB 690: GOSUB 780: GOSUB 790
  166. 1680  ON LINE GOTO 1690,1720,1750,1780,1820,1870,1900,1930
  167. 1690 Z$ = "1QAZ": FOR I = 1 TO 4:X$ =  MID$ (Z$,I,1)
  168. 1700  POKE TABLE,T2: XDRAW 1 AT HK +LE(I), FN A(I) *VK: XDRAW 2 AT HK +LE(I), FN A(I) *VK: POKE TABLE,T1: XDRAW  ASC(X$) -31 AT HK +LE(I), FN A(I) *VK: GOSUB 820: NEXT 
  169. 1710  GOTO 1970
  170. 1720 Z$ = "2WSX": FOR I = 1 TO 4:X$ =  MID$ (Z$,I,1)
  171. 1730  POKE TABLE,T2: XDRAW 1 AT 2 *HK +LE(I), FN S(I) *VK: XDRAW 2 AT 2 *HK +LE(I), FN S(I) *VK: POKE TABLE,T1: XDRAW  ASC(X$) -31 AT 2 *HK +LE(I), FN S(I) *VK: GOSUB 820: NEXT 
  172. 1740  GOTO 1970
  173. 1750 Z$ = "3EDC": FOR I = 1 TO 4:X$ =  MID$ (Z$,I,1)
  174. 1760  POKE TABLE,T2: XDRAW 1 AT HK *3 +LE( FN D(I)), FN D(I) *VK: XDRAW 2 AT 3 *HK +LE( FN D(I)), FN D(I) *VK: POKE TABLE,T1: XDRAW  ASC(X$) -31 AT 3 *HK +LE( FN D(I)), FN D(I) *VK: GOSUB 820: NEXT 
  175. 1770  GOTO 1970
  176. 1780 Z$ = "45RTFGVB": FOR I = 1 TO 8:X$ =  MID$ (Z$,I,1)
  177. 1790  POKE TABLE,T2: XDRAW 1 AT HK *(4 +(X$ = "5") +(X$ = "T") +(X$ = "G") +(X$ = "B")) +LE( FN F(I)), FN F(I) *VK: XDRAW 2 AT HK *(4 +(X$ = "5") +(X$ = "T") +(X$ = "G") +(X$ = "B")) +LE( FN F(I)), FN F(I) *VK
  178. 1800  POKE TABLE,T1: XDRAW  ASC(X$) -31 AT HK *(4 +(X$ = "5") +(X$ = "T") +(X$ = "G") +(X$ = "B")) +LE( FN F(I)), FN F(I) *VK: GOSUB 820: NEXT 
  179. 1810  GOTO 1970
  180. 1820 Z$ = "67YUHJNM": FOR I = 1 TO 8:X$ =  MID$ (Z$,I,1)
  181. 1830  POKE TABLE,T2: XDRAW 1 AT HK *(6 +(X$ = "7") +(X$ = "U") +(X$ = "J") +(X$ = "M")) +LE( FN J(I)), FN J(I) *VK
  182. 1840  XDRAW 2 AT HK *(6 +(X$ = "7") +(X$ = "U") +(X$ = "J") +(X$ = "M")) +LE( FN J(I)), FN J(I) *VK
  183. 1850  POKE TABLE,T1: XDRAW  ASC(X$) -31 AT HK *(6 +(X$ = "7") +(X$ = "U") +(X$ = "J") +(X$ = "M")) +LE( FN J(I)), FN J(I) *VK: GOSUB 820: NEXT 
  184. 1860  GOTO 1970
  185. 1870 Z$ = "8IK,": FOR I = 1 TO 4:X$ =  MID$ (Z$,I,1)
  186. 1880  POKE TABLE,T2: XDRAW 1 AT HK *8 +LE( FN K(I)), FN K(I) *VK: XDRAW 2 AT HK *8 +LE( FN K(I)), FN K(I) *VK: POKE TABLE,T1: XDRAW  ASC(X$) -31 AT HK *8 +LE( FN K(I)), FN K(I) *VK: GOSUB 820: NEXT 
  187. 1890  GOTO 1970
  188. 1900 Z$ = "9OL.": FOR I = 1 TO 4:X$ =  MID$ (Z$,I,1)
  189. 1910  POKE TABLE,T2: XDRAW 1 AT HK *9 +LE( FN L(I)), FN L(I) *VK: XDRAW 2 AT HK *9 +LE( FN L(I)), FN L(I) *VK: POKE TABLE,T1: XDRAW  ASC(X$) -31 AT HK *9 +LE( FN L(I)), FN L(I) *VK: GOSUB 820: NEXT 
  190. 1920  GOTO 1970
  191. 1930 Z$ = "0P;/": FOR I = 1 TO  LEN(Z$):X$ =  MID$ (Z$,I,1)
  192. 1940  POKE TABLE,T2: XDRAW 1 AT HK *10 +LE( FN C(I)), FN C(I) *VK
  193. 1950  XDRAW 2 AT HK *10 +LE( FN C(I)), FN C(I) *VK
  194. 1960  POKE TABLE,T1: XDRAW  ASC(X$) -31 AT HK *10 +LE( FN C(I)), FN C(I) *VK: GOSUB 820: NEXT 
  195. 1970  VTAB 10: HTAB 5 +LINE *3: PRINT " " MID$ (HK$,LINE,1)" ";: ON F2 GOTO 2060
  196. 1980  IF LINE <5  THEN F$ = "LEFT": FOR I = 1 TO 4:K$(I) = F$(I): NEXT :F = LINE: GOTO 2000
  197. 1990 F$ = "RIGHT": FOR I = 1 TO 4:K$(I) = F$(5 -I): NEXT :F = LINE -4: REM SWAP FINGER NAMES
  198. 2000  GOSUB 710: ON F1 GOSUB 710: ON F1 GOSUB 760: ON F1 GOTO 2010:X$ = "THE OUTLINED KEYS ARE YOUR":V = X +5:H = W +3: GOSUB 690:X$ = "DRILL KEYS.  TYPE USING ONLY":V = X +14: GOSUB 690
  199. 2010  GOSUB 710:X$ = "YOUR " +F$ +" " +K$(F) +" FINGER.":H = W +3:V = X +23: GOSUB 690
  200. 2020  IF F1  THEN  GOSUB 830: GOTO 2050: REM DON'T PRINT <ESC> AGAIN
  201. 2030  GOSUB 740: GOSUB 750:X$ = " <ESC> TO MENU":V = X +5:H = W +3: GOSUB 690: GOSUB 800
  202. 2040 X$ = "BEGIN TYPING":V = X +14:H = W +20: GOSUB 690: GOSUB 830:F2 = 1:F1 = 1
  203. 2050  POKE  -16368,0: GET X$: IF X$ < > CHR$(27)  THEN 2070
  204. 2060  TEXT : POKE TABLE,T2: FOR I = 1 TO  LEN(Z$):X$ =  MID$ (Z$,I,1): ON LINE GOSUB 870,880,890,900,910,920,930,940: NEXT :F2 = 0: GOTO 1560
  205. 2070  IF X$ > CHR$(96)  THEN X$ =  CHR$( ASC(X$) -32)
  206. 2080  FOR J = 1 TO  LEN(Z$): IF X$ =  MID$ (Z$,J,1)  THEN J =  LEN(Z$): NEXT : GOSUB 850: GOTO 2050
  207. 2090  NEXT : GOSUB 860: GOTO 2050
  208. 2100  REM 
  209. 2110  REM  KEYBOARD TEST
  210. 2120  REM 
  211. 2130  TEXT : HOME : PRINT  TAB( 13)"KEYBOARD TEST": PRINT L$: PRINT "'?'=Help" TAB( 27)"<ESC> to Menu": POKE 34,3: HOME 
  212. 2140  VTAB 8: HTAB 18: PRINT "10": PRINT : PRINT  TAB( 18)"20": PRINT : PRINT  TAB( 18)"50": PRINT : PRINT  TAB( 17)"100": VTAB 18: PRINT "SELECT LENGTH OF TEST (# OF CHARACTERS)": GOSUB 640
  213. 2150  CALL CUR,8,14,15,22: GOSUB 660: IF LINE >100  THEN 2510: REM HELP
  214. 2160  IF LINE <1  THEN  TEXT : GOSUB 620: GOTO 950
  215. 2170 B = 10 *(LINE = 1) +20 *(LINE = 2) +50 *(LINE = 3) +100 *(LINE = 4)
  216. 2180  HOME 
  217. 2190  INVERSE : VTAB 4: HTAB 18: PRINT "*****": VTAB 5: HTAB 18: PRINT "*";: HTAB 22: PRINT "*": VTAB 6: HTAB 18: PRINT "*";: HTAB 22: PRINT "*": VTAB 7: HTAB 18: PRINT "*";: HTAB 22: PRINT "*": VTAB 8: HTAB 18: PRINT "*****"
  218. 2200  VTAB 10: HTAB 15: PRINT "            ": FOR I = 1 TO B/10: VTAB 10 +I: HTAB 15: PRINT " ";: HTAB 26: PRINT " ": NEXT : VTAB 10 +I: HTAB 15: PRINT "            ": NORMAL : REM BIG BOX--12 SPACES IN QUOTES
  219. 2210  VTAB 6: HTAB 25: PRINT "INCORRECT": HTAB 25: PRINT "RESPONSES SHOWN": HTAB 25: PRINT "AS ";: INVERSE : PRINT "INVERSE";: NORMAL : PRINT "."
  220. 2220  VTAB 22: PRINT L$: PRINT "Type the character that appears in the": PRINT "small box as it appears.";: HTAB 1: VTAB 3: PRINT "        ";: REM 8 SPACES IN QUOTES
  221. 2230  POKE 33,10: POKE 32,15: POKE 34,10: POKE 35,10 +B/10: HOME : POKE 35,11 +B/10
  222. 2240 WR = 0: FOR J = 1 TO B:Y$ =  MID$ (S$, LEN(S$) * RND(1) +1,1): REM # WRONGS=WR
  223. 2250  POKE 1683, ASC(Y$) +128: REM POKE CHARACTER INTO TEXT SCREEN
  224. 2260  POKE  -16368,0: GET X$
  225. 2270  IF X$ =  CHR$(27)  THEN J = B: NEXT : GOTO 2130
  226. 2280  IF X$ < CHR$(32)  THEN  GOSUB 860: GOTO 2260
  227. 2290  IF X$ = Y$  THEN  PRINT X$;: NEXT : GOTO 2320
  228. 2300  IF X$ > CHR$(96)  THEN X$ =  CHR$( ASC(X$) -32): GOTO 2290
  229. 2310  GOSUB 820: INVERSE : PRINT X$;: NORMAL :WR = WR +1: NEXT 
  230. 2320  VTAB 23: POKE 34,3: POKE 35,24: POKE 32,0: POKE 33,40: REM RESET WINDOW
  231. 2330  VTAB 5: HTAB 1: PRINT "YOU GOT "B -WR;: VTAB 6: HTAB 1: PRINT "RIGHT ANSWERS";: VTAB 7: HTAB 1: PRINT "OUT OF "B".";: VTAB 11
  232. 2340  PRINT : PRINT "THAT'S " INT(100 *(B -WR)/B)" %";
  233. 2350  VTAB 22: HTAB 1: CALL  -958: VTAB 22: PRINT L$
  234. 2360  VTAB 23: HTAB 1: PRINT "Press <RETURN> to Continue...";: POKE  -16368,0: GET X$: IF X$ =  CHR$(13)  THEN 2130
  235. 2370  IF X$ =  CHR$(27)  THEN  TEXT : GOSUB 620: GOTO 950
  236. 2380  GOSUB 860: GOTO 2360
  237. 2390  REM SOUND ROUTINE
  238. 2400  DATA  20,29,35,43: REM LEFT EDGE OFFSET FOR EACH KEY ROW
  239. 2410  DATA 166,7,173,48,192,165,6,32,168,252,202,208,245,96
  240. 2420  DATA  A,S,D,F
  241. 2430  DATA  J,K,L,;
  242. 2440  DATA  LITTLE,RING,MIDDLE,INDEX
  243. 2450  DATA  0,7,9,5
  244. 2460  HOME : PRINT  TAB( 10)"MAIN MENU HELP SCREEN": PRINT : PRINT L$: POKE 34,5
  245. 2470  PRINT : PRINT "The LEARN HOME KEYS selection will ": PRINT : PRINT "teach which keys go with which finger": PRINT : PRINT "on the HOME KEY row."
  246. 2480  PRINT : PRINT : PRINT "The HOME FINGER DRILL will exercise ": PRINT : PRINT "each HOME KEY finger over the range": PRINT : PRINT "of keys used by that finger."
  247. 2490  PRINT : PRINT : PRINT "The KEYBOARD TEST will provide a 'press": PRINT : PRINT "the right key' drill with scoring.": PRINT : PRINT L$
  248. 2500  VTAB 24: HTAB 1: PRINT "Press <RETURN> to Return to Main Menu";: GET X$: TEXT : GOSUB 620: GOTO 950
  249. 2510  TEXT : HOME : PRINT  TAB( 11)"KEYBOARD TEST HELP": PRINT : PRINT L$
  250. 2520  PRINT : PRINT "This is a test of ACCURACY, not speed.": PRINT : PRINT "Each correct response to the framed": PRINT : PRINT "character will cause the same character": PRINT : PRINT "to be printed in the larger box.": PRINT 
  251. 2530  PRINT : PRINT "An incorrect response will produce a ": PRINT : PRINT "click, and the character will be print-": PRINT : PRINT "ed in INVERSE mode in the large box."
  252. 2540  PRINT : PRINT "The score is given at the end of the ": PRINT : PRINT "exercise.": VTAB 23: PRINT L$: VTAB 24: HTAB 1: PRINT "Press <RETURN> to Continue...";: GET X$
  253. 2550  VTAB 4: CALL  -958: VTAB 6: HTAB 1: PRINT "REMEMBER:": PRINT : PRINT : PRINT "Keep your fingers over the appropriate": PRINT : PRINT "HOME KEYS.": PRINT : PRINT "Take your time.  Accuracy is more ": PRINT : PRINT "important than speed."
  254. 2560  VTAB 22: PRINT L$: VTAB 23: HTAB 1: PRINT "Press <RETURN> to Continue...";: GET X$: GOTO 2130
  255. 2570  HOME : PRINT  TAB( 7)"HOME KEY DRILL HELP SCREEN": PRINT : PRINT L$: POKE 34,4
  256. 2580  PRINT : PRINT "This drill lets you practice with the": PRINT : PRINT "individual HOME KEYS previously ": PRINT : PRINT "learned.  From the horizontal row of": PRINT 
  257. 2590  PRINT "letters, select the finger you wish to": PRINT : PRINT "practice with by pressing the": PRINT : PRINT "associated HOME KEY."
  258. 2600  PRINT : VTAB 23: PRINT L$: VTAB 24: HTAB 1: PRINT "Press <RETURN> to Continue...";: GET X$: HOME 
  259. 2610  PRINT : PRINT "You may exit the exercise by pressing": PRINT : PRINT "the ESC key while typing.  At that ": PRINT : PRINT "point, you may return to the main": PRINT : PRINT "menu or select another finger to ": PRINT : PRINT "practice."
  260. 2620  VTAB 23: PRINT L$: VTAB 24: HTAB 1: PRINT "Press <RETURN> to Return to DRILL MENU";: GET X$: TEXT : GOTO 1520
  261. 2630  REM 
  262. 2640  REM ** ONERR DOS ERRORS **
  263. 2650  REM 
  264. 2660  IF  PEEK(222) = 6  THEN E$ = "BINARY FILE NOT FOUND ON THIS DISK.": GOTO 2690
  265. 2670  IF  PEEK(222) = 8  THEN E$ = "DISK I/O ERROR ENCOUNTERED.":E1$ = "CHECK DRIVE DOOR AND RUN PROGRAM AGAIN": GOTO 2690
  266. 2680 E$ = "DOS ERROR # "; PEEK(222)" ENCOUNTERED.  ":E1$ = "CHECK YOUR DOS MANUAL FOR DETAILS.":
  267. 2690  VTAB 7: CALL  -958: VTAB 10:X$ = E$: GOSUB 2700: VTAB 12:X$ = E1$: GOSUB 2700: VTAB 21:X$ = "FATAL ERROR -- CANNOT CONTINUE.": GOSUB 2700: POKE 216,0: END 
  268. 2700  HTAB 20 - LEN(X$)/2: PRINT X$: RETURN