home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib38b.dsk / MORSECODE.TUTOR.bas < prev    next >
BASIC Source File  |  2023-02-26  |  10KB  |  319 lines

  1. 10  REM  *************************
  2. 20  REM  * MORSECODE.TUTOR       *
  3. 30  REM  * BY JOHN WHITNEY       *
  4. 40  REM  * COPYRIGHT(C) 1990     *
  5. 50  REM  * MINDCRAFT PUBL. CORP. *
  6. 60  REM  * CONCORD, MA 01742     *
  7. 65  REM  *************************
  8. 70  DIM C(40,6),PN(15)
  9. 80 PN(1) = 66:PN(2) = 89:PN(3) = 32
  10. 90 PN(4) = 74:PN(5) = 79:PN(6) = 72
  11. 100 PN(7) = 78:PN(8) = 32:PN(9) = 87
  12. 110 PN(10) = 72:PN(11) = 73:PN(12) = 84:PN(13) = 78:PN(14) = 69:PN(15) = 89
  13. 120  HOME : PRINT  CHR$(21): VTAB 3: HTAB 13: PRINT "MORSE CODE TUTOR": PRINT "COPYRIGHT(C) 1990 MINDCRAFT PUBL. CORP."
  14. 130  FOR VN = 1 TO 15
  15. 140  VTAB (7): HTAB (13)
  16. 150  FOR VO = VN TO 1  STEP  -1
  17. 160  PRINT  CHR$(PN(16 -VO));
  18. 170  NEXT VO
  19. 180  PRINT 
  20. 190  NEXT VN
  21. 200  PRINT 
  22. 210  VTAB (11): HTAB (12): PRINT " LOADING DATA...  ": REM  1 AND 2 SPACES 
  23. 220  READ P,S,L,W
  24. 230  FOR CT = 1 TO 126
  25. 240 CT$ = CT$ +"^"
  26. 250  NEXT CT
  27. 260  FOR I = 1 TO 40
  28. 270 CT = 0: READ CR$
  29. 280  FOR J = 1 TO 6
  30. 290  READ C(I,J)
  31. 300  IF C(I,J) = 1  THEN CT = (CT *2) +1
  32. 310  IF C(I,J) = 3  THEN CT = (CT *2) +2
  33. 320  NEXT J
  34. 330  IF CT = 1  THEN CT$ = CR$ + MID$ (CT$,2): GOTO 360
  35. 340  IF CT = 126  THEN CT$ =  LEFT$(CT$,125) +CR$: GOTO 360
  36. 350 CT$ =  LEFT$(CT$,CT -1) +CR$ + MID$ (CT$,CT +1)
  37. 360  NEXT I
  38. 370  FOR I = 770 TO 792
  39. 380  READ X
  40. 390  POKE I,X
  41. 400  NEXT : VTAB 24: PRINT "PRESS RETURN TO CONTINUE";: GET XX$
  42. 410  HOME : VTAB (3): HTAB (18): INVERSE : PRINT "MENU": NORMAL : VTAB (7)
  43. 420  PRINT " (1) TRANSLATE SENTENCE TO CODE"
  44. 430  PRINT " (2) SINGLE LETTER DRILLS"
  45. 440  PRINT " (3) PRACTICE SENDING"
  46. 450  PRINT " (4) CHANGE WORDS PER MINUTE (DEFAULT=5)"
  47. 460  PRINT " ESC EXIT PROGRAM"
  48. 470  VTAB (15): PRINT "ENTER OPTION: ";: GET OP$
  49. 480  IF  ASC(OP$) = 27  THEN  HOME : END 
  50. 490 OP =  VAL(OP$)
  51. 500  ON OP GOSUB 520,970,1800,2150
  52. 510  GOTO 410
  53. 520  HOME : VTAB (3): HTAB (7): INVERSE : PRINT "TRANSLATE SENTENCE TO CODE": NORMAL : PRINT : PRINT 
  54. 530 MS$ = "": PRINT "DO YOU WANT VISUAL? ";: GET V$: PRINT V$
  55. 540  PRINT "ENTER THE SENTENCE YOU WISH TO HEAR"
  56. 550  PRINT "TRANSLATED (ESC TO QUIT):"
  57. 560  VTAB (10): HTAB (1): CALL  -958: GET M$: PRINT  SPC( 160): VTAB (10): HTAB (1): GOTO 580
  58. 570  GET M$
  59. 580  IF  ASC(M$) = 13  THEN 660
  60. 590  IF  ASC(M$) = 27  THEN  RETURN 
  61. 600  IF  ASC(M$) = 8  AND MS$ = ""  THEN  GOTO 570
  62. 610  IF  ASC(M$) = 8  AND  LEN(MS$) = 1  THEN MS$ = "": PRINT M$;: GOTO 570
  63. 620  IF  ASC(M$) = 8  THEN MS$ =  LEFT$(MS$, LEN(MS$) -1): PRINT M$;: GOTO 570
  64. 630  IF  ASC(M$) = 21  THEN M$ = " "
  65. 640  PRINT M$;:MS$ = MS$ +M$
  66. 650  GOTO 570
  67. 660  GOSUB 670:MS$ = "": GOTO 560
  68. 670  REM  *****STRING THRU MS$*****
  69. 680  VTAB (13): PRINT  SPC( 160)
  70. 690 K = 0:LN =  LEN(MS$)
  71. 700 K = K +1
  72. 710  IF K >LN  THEN  RETURN 
  73. 720 MC$ =  MID$ (MS$,K,1)
  74. 730 CI =  ASC(MC$)
  75. 740  VTAB (13): HTAB (K): PRINT  MID$ (MS$,K,1);
  76. 750  GOSUB 790
  77. 760  FOR XX = 1 TO L: NEXT 
  78. 770  GOTO 700
  79. 780  REM  *****PLAY CHARACTER*****
  80. 790  VTAB (20): HTAB (1): PRINT  SPC( 39): VTAB (20): HTAB (2)
  81. 800  IF CI >64  AND CI <91  THEN CI = CI -64: GOTO 880
  82. 805  IF CI >96  AND CI <123  THEN CI = CI -96: GOTO 880
  83. 810  IF CI >47  AND CI <58  THEN CI = CI -21: GOTO 880
  84. 820  IF CI = 46  THEN CI = 37: GOTO 880
  85. 830  IF CI = 44  THEN CI = 38: GOTO 880
  86. 840  IF CI = 63  THEN CI = 39: GOTO 880
  87. 850  IF CI = 47  THEN CI = 40: GOTO 880
  88. 860  PRINT " ";: FOR XX = 1 TO W: NEXT 
  89. 870  RETURN 
  90. 880 CC = 1
  91. 890  POKE 768,P
  92. 900  POKE 769,S *C(CI,CC)
  93. 910  IF V$ = "Y"  OR V$ = "y"  THEN  INVERSE : PRINT  SPC( C(CI,CC));: NORMAL : PRINT " ";
  94. 920  CALL 770
  95. 930  FOR XX = 1 TO S *2: NEXT 
  96. 940 CC = CC +1: IF CC >6  THEN  RETURN 
  97. 950  IF C(CI,CC) = 0  THEN  RETURN 
  98. 960  GOTO 890
  99. 970  REM  *****LETTER DRILL*****
  100. 980 DG$ = ""
  101. 990  HOME : VTAB (3): HTAB (14)
  102. 1000  INVERSE : PRINT "LETTER DRILL": NORMAL 
  103. 1010  VTAB (6)
  104. 1020  HTAB (10): PRINT "DRILL 1: E T M A N I"
  105. 1030  HTAB (10): PRINT "      2: R D U S C O": REM  6 SPACES THROUGH LINE 1100
  106. 1040  HTAB (10): PRINT "      3: K P B G W F"
  107. 1050  HTAB (10): PRINT "      4: Q H L Y"
  108. 1060  HTAB (10): PRINT "      5: J X V Z"
  109. 1070  HTAB (10): PRINT "      6: 1 2 3 4"
  110. 1080  HTAB (10): PRINT "      7: 5 6 7 8"
  111. 1090  HTAB (10): PRINT "      8: 9 0 . , / ?"
  112. 1100  HTAB (10): PRINT "      9: CHOOSE YOUR OWN"
  113. 1110  PRINT 
  114. 1120  HTAB (10): PRINT "RETURN TO START, ESC TO QUIT"
  115. 1130  VTAB (20): PRINT "SELECTION LIST: ";DG$: VTAB (18): HTAB (1): PRINT  SPC( 40): VTAB (18): HTAB (1): PRINT "ENTER OPTION: ";
  116. 1140  GET DR$: PRINT 
  117. 1150  IF  ASC(DR$) = 27  THEN  RETURN 
  118. 1160 DR =  VAL(DR$)
  119. 1170  IF  ASC(DR$) = 13  THEN 1300
  120. 1180  IF DR = 1  THEN DG$ = DG$ +"ETMANI": GOTO 1130
  121. 1190  IF DR = 2  THEN DG$ = DG$ +"RDUSCO": GOTO 1130
  122. 1200  IF DR = 3  THEN DG$ = DG$ +"KPBGWF": GOTO 1130
  123. 1210  IF DR = 4  THEN DG$ = DG$ +"QHLY": GOTO 1130
  124. 1220  IF DR = 5  THEN DG$ = DG$ +"JXVZ": GOTO 1130
  125. 1230  IF DR = 6  THEN DG$ = DG$ +"1234": GOTO 1130
  126. 1240  IF DR = 7  THEN DG$ = DG$ +"5678": GOTO 1130
  127. 1250  IF DR = 8  THEN DG$ = DG$ +"90.,/?": GOTO 1130
  128. 1260  IF DR < >9  THEN  PRINT "": GOTO 1130
  129. 1270  VTAB (18): PRINT  TAB( 25)" "
  130. 1280  VTAB (18): HTAB (1): INPUT "ENTER STRING: ";D2$
  131. 1290 DG$ = DG$ +D2$: GOTO 1130
  132. 1300  IF DG$ = ""  THEN  RETURN 
  133. 1310  PRINT : PRINT : PRINT : PRINT "DO YOU WANT VISUAL? ";: GET V$: PRINT V$
  134. 1320  REM  **** REVIEW ****
  135. 1330  HOME : VTAB (3): HTAB (12): INVERSE : PRINT "REVIEW SELECTIONS"
  136. 1340  VTAB (23): NORMAL : PRINT "(PRESS SPACE BAR TO PROCEED)": INVERSE 
  137. 1350  VTAB (10): HTAB (18): PRINT  SPC( 4)" "
  138. 1360  VTAB (11): HTAB (18): PRINT " "
  139. 1370  VTAB (11): HTAB (22): PRINT " "
  140. 1380  VTAB (12): HTAB (18): PRINT " "
  141. 1390  VTAB (12): HTAB (22): PRINT " "
  142. 1400  VTAB (13): HTAB (18): PRINT " "
  143. 1410  VTAB (13): HTAB (22): PRINT " "
  144. 1420  VTAB (14): HTAB (18): PRINT  SPC( 4)" "
  145. 1430  NORMAL 
  146. 1440  FOR YY = 1 TO  LEN(DG$)
  147. 1450 CI =  ASC( MID$ (DG$,YY,1))
  148. 1460  VTAB (12): HTAB (20): PRINT  CHR$(CI)
  149. 1470  GOSUB 790
  150. 1480  VTAB (1): HTAB (1): GET KB$
  151. 1490  NEXT YY
  152. 1500  REM  ***** START QUIZ *****
  153. 1510  HOME : VTAB (3): HTAB (18): INVERSE : PRINT "QUIZ"
  154. 1520  VTAB (10): HTAB (18): PRINT  SPC( 4)" "
  155. 1530  VTAB (11): HTAB (18): PRINT " "
  156. 1540  VTAB (11): HTAB (22): PRINT " "
  157. 1550  VTAB (12): HTAB (18): PRINT " "
  158. 1560  VTAB (12): HTAB (22): PRINT " "
  159. 1570  VTAB (13): HTAB (18): PRINT " "
  160. 1580  VTAB (13): HTAB (22): PRINT " "
  161. 1590  VTAB (14): HTAB (18): PRINT  SPC( 4)" "
  162. 1600  NORMAL : VTAB (23): PRINT "(PRESS ESC TO QUIT)"
  163. 1610  FOR QQ = 1 TO 300: NEXT 
  164. 1620  VTAB (16): PRINT  SPC( 80)
  165. 1630  GOSUB 1750
  166. 1640  GOSUB 790
  167. 1650  VTAB (8): HTAB (17): PRINT "ANSWER:"
  168. 1660  VTAB (12): HTAB (20)
  169. 1670  GET KB$: PRINT KB$
  170. 1680 KB =  ASC(KB$)
  171. 1690  IF KB = 27  THEN  GOTO 970
  172. 1700  VTAB (16): PRINT  SPC( 80)
  173. 1710  IF KB =  ASC(DC$)  THEN  VTAB (16): HTAB (17): PRINT "CORRECT": GOTO 1610
  174. 1720  VTAB (16): HTAB (16): PRINT "INCORRECT"
  175. 1730  VTAB (17): HTAB (20): PRINT DC$:CI =  ASC(DC$): GOTO 1640
  176. 1740  GOTO 1610
  177. 1750  REM  ****PICK RANDOM CHARACTER****
  178. 1760 DC =  INT( RND(1) * LEN(DG$)) +1
  179. 1770 DC$ =  MID$ (DG$,DC,1)
  180. 1780 CI =  ASC(DC$)
  181. 1790  RETURN 
  182. 1800  REM  ***** SEND *****
  183. 1810  HOME : VTAB (3): HTAB (12): INVERSE : PRINT "PRACTICE SENDING": NORMAL 
  184. 1820  VTAB (5): PRINT "PRESS SPACE BAR FOR DOT,"
  185. 1830  PRINT "ANY OTHER KEY FOR DASH"
  186. 1840  PRINT "PRESS ESC TO QUIT"
  187. 1845  PRINT : PRINT "= ... TOOK TOO MUCH TIME": PRINT "^ ... UNRECOGNIZABLE SEQUENCE"
  188. 1850 CT = 0: VTAB (15)
  189. 1860  IF  PEEK( -16384) >127  THEN 1890
  190. 1870 PU = PU +1: IF PU >L/25  THEN  GOSUB 2070
  191. 1880  GOTO 1860
  192. 1890 PU = 0
  193. 1900  GET KB$: IF  ASC(KB$) = 27  THEN  RETURN 
  194. 1910  IF KB$ = " "  THEN  GOSUB 1930: GOTO 1860
  195. 1920  GOSUB 2000: GOTO 1860
  196. 1930  REM  ***** PLAY DOT *****
  197. 1940  POKE 768,P
  198. 1950  POKE 769,S
  199. 1960  CALL 770
  200. 1970 CT = (CT *2) +1
  201. 1980  IF CT >126  THEN  PRINT "^";:CT = 0
  202. 1990  RETURN 
  203. 2000  REM  ***** PLAY DASH *****
  204. 2010  POKE 768,P
  205. 2020  POKE 769,S *3
  206. 2030  CALL 770
  207. 2040 CT = (CT *2) +2
  208. 2050  IF CT >126  THEN  PRINT "^";:CT = 0
  209. 2060  RETURN 
  210. 2070  REM  ***** DISPLAY TRANSLATED CHAR *****
  211. 2080 PU = 0
  212. 2090  IF CT = 0  THEN XT = XT +1
  213. 2100  IF XT = 7  THEN  PRINT "=";:XT = 0: GOTO 2140
  214. 2110  IF CT = 0  THEN 2140
  215. 2120  PRINT  MID$ (CT$,CT,1);
  216. 2130 CT = 0
  217. 2140  RETURN 
  218. 2150  REM  ***** SET WORDS PER MINUTE *****
  219. 2160  HOME : VTAB (3): HTAB (10): INVERSE : PRINT "SET WORDS PER MINUTE": NORMAL 
  220. 2170  PRINT : PRINT : PRINT 
  221. 2180  INPUT "WORDS PER MINUTE: ";WP
  222. 2190  IF WP <3  THEN  PRINT "TOO SLOW - REENTER": VTAB (7): GOTO 2180
  223. 2200  IF WP >250  THEN  PRINT "TOO FAST - REENTER": VTAB (7): GOTO 2180
  224. 2210 S = 250/WP
  225. 2220 L = S *50
  226. 2230 W = 2 *L
  227. 2240  RETURN 
  228. 2250  REM  PITCH
  229. 2260  DATA  81
  230. 2270  REM  DURATION (SPEED MULTIPLIER)
  231. 2280  DATA  50
  232. 2290  REM  LETTER GAP
  233. 2300  DATA  750
  234. 2310  REM  WORD GAP
  235. 2320  DATA  1500
  236. 2330  REM  *** CHARACTERS ***
  237. 2340  DATA  A  
  238. 2350  DATA  1,3,0,0,0,0  
  239. 2360  DATA  B  
  240. 2370  DATA  3,1,1,1,0,0 
  241. 2380  DATA  C 
  242. 2390  DATA  3,1,3,1,0,0
  243. 2400  DATA  D
  244. 2410  DATA  3,1,1,0,0,0
  245. 2420  DATA  E
  246. 2430  DATA  1,0,0,0,0,0
  247. 2440  DATA  F 
  248. 2450  DATA  1,1,3,1,0,0
  249. 2460  DATA  G
  250. 2470  DATA  3,3,1,0,0,0
  251. 2480  DATA  H
  252. 2490  DATA  1,1,1,1,0,0
  253. 2500  DATA  I
  254. 2510  DATA  1,1,0,0,0,0
  255. 2520  DATA  J
  256. 2530  DATA  1,3,3,3,0,0
  257. 2540  DATA  K
  258. 2550  DATA  3,1,3,0,0,0
  259. 2560  DATA  L
  260. 2570  DATA  1,3,1,1,0,0
  261. 2580  DATA  M
  262. 2590  DATA  3,3,0,0,0,0
  263. 2600  DATA  N
  264. 2610  DATA  3,1,0,0,0,0
  265. 2620  DATA  O
  266. 2630  DATA  3,3,3,0,0,0
  267. 2640  DATA  P
  268. 2650  DATA  1,3,3,1,0,0
  269. 2660  DATA  Q
  270. 2670  DATA  3,3,1,3,0,0
  271. 2680  DATA  R
  272. 2690  DATA  1,3,1,0,0,0
  273. 2700  DATA  S
  274. 2710  DATA  1,1,1,0,0,0
  275. 2720  DATA  T
  276. 2730  DATA  3,0,0,0,0,0
  277. 2740  DATA  U
  278. 2750  DATA  1,1,3,0,0,0
  279. 2760  DATA  V
  280. 2770  DATA  1,1,1,3,0,0
  281. 2780  DATA  W
  282. 2790  DATA  1,3,3,0,0,0
  283. 2800  DATA  X
  284. 2810  DATA  3,1,1,3,0,0
  285. 2820  DATA  Y
  286. 2830  DATA  3,1,3,3,0,0
  287. 2840  DATA  Z
  288. 2850  DATA  3,3,1,1,0,0
  289. 2860  DATA  0
  290. 2870  DATA  3,3,3,3,3,0
  291. 2880  DATA  1
  292. 2890  DATA  1,3,3,3,3,0
  293. 2900  DATA  2
  294. 2910  DATA  1,1,3,3,3,0
  295. 2920  DATA  3
  296. 2930  DATA  1,1,1,3,3,0
  297. 2940  DATA  4
  298. 2950  DATA  1,1,1,1,3,0
  299. 2960  DATA  5
  300. 2970  DATA  1,1,1,1,1,0
  301. 2980  DATA  6
  302. 2990  DATA  3,1,1,1,1,0
  303. 3000  DATA  7
  304. 3010  DATA  3,3,1,1,1,0
  305. 3020  DATA  8
  306. 3030  DATA  3,3,3,1,1,0
  307. 3040  DATA  9
  308. 3050  DATA  3,3,3,3,1,0
  309. 3060  DATA  "."
  310. 3070  DATA  1,3,1,3,1,3
  311. 3080  DATA  ","
  312. 3090  DATA  3,3,1,1,3,3
  313. 3100  DATA  "?"
  314. 3110  DATA  1,1,3,3,1,1
  315. 3120  DATA  "/"
  316. 3130  DATA  3,1,1,3,1,0
  317. 3140  REM  TONE DATA
  318. 3150  DATA  173,48,192,136,208,5,206,1,3,240
  319. 3160  DATA  9,202,208,245,174,0,3,76,2,3,96,0,0