home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1 / HamRadio.cdr / misc / miscbas / morsetst.bas < prev    next >
BASIC Source File  |  1992-01-01  |  7KB  |  238 lines

  1. 10 ' A BASIC CODE TRAINER - KH6FHN/4 BOX 3292, MCLEAN VA 22103
  2. 20 ' TAKEN FROM "COMPUTER TRADER" ISSUE OF JULY, 1984
  3. 30 ' MODIFICATIONS BY N6MPP (GILLMANN@ISIB.ARPA)
  4. 40 ' PROGRAM SPEED VARIES AMONG BASIC BASICA BASCOM AND AMONG PC/AT/PCJR
  5. 45 ' SET CONSTANT M5 TO ADJUST FOR THIS
  6. 50 RANDOMIZE TIMER
  7. 60 O=VAL(MID$(TIME$,7,2))+10*VAL(MID$(TIME$,4,2))
  8. 70 FOR I=1 TO O : R=RND : NEXT I
  9. 80 DIM A$(100)
  10. 90 HBNDA = 44
  11. 100 REM SINGLE
  12. 110 A$(1)    = "E."
  13. 120 A$(2)    = "T-"
  14. 130 REM DOUBLE
  15. 140 A$(3)    = "A.-"
  16. 150 A$(4)    = "I.."
  17. 160 A$(5)    = "M--"
  18. 170 A$(6)    = "N-."
  19. 180 REM TRIPLE
  20. 190 A$(7)    = "D-.."
  21. 200 A$(8)    = "G--."
  22. 210 A$(9)    = "K-.-"
  23. 220 A$(10)    = "O---"
  24. 230 A$(11)    = "R.-."
  25. 240 A$(12)    = "S..."
  26. 250 A$(13)    = "U..-"
  27. 260 A$(14)    = "W.--"
  28. 270 REM QUADRUPLE
  29. 280 A$(15)    = "B-..."
  30. 290 A$(16)    = "C-.-."
  31. 300 A$(17)    = "F..-."
  32. 310 A$(18)    = "H...."
  33. 320 A$(19)    = "J.---"
  34. 330 A$(20)    = "L.-.."
  35. 340 A$(21)    = "P.--."
  36. 350 A$(22)    = "Q--.-"
  37. 360 A$(23)    = "V...-"
  38. 370 A$(24)    = "X-..-"
  39. 380 A$(25)    = "Y-.--"
  40. 390 A$(26)    = "Z--.."
  41. 400 REM QUINTUPLE
  42. 410 A$(27)    = "0-----"
  43. 420 A$(28)    = "1.----"
  44. 430 A$(29)    = "2..---"
  45. 440 A$(30)    = "3...--"
  46. 450 A$(31)    = "4....-"
  47. 460 A$(32)    = "5....."
  48. 470 A$(33)    = "6-...."
  49. 480 A$(34)    = "7--..."
  50. 490 A$(35)    = "8---.."
  51. 500 A$(36)    = "9----."
  52. 510 A$(37)    = "/-..-."    ' DN
  53. 520 A$(38)      = "=-...-"    ' BT
  54. 530 A$(39)      = "a.-.-."    ' AR
  55. 540 REM SEXTUPLE
  56. 550 A$(40)    = "..-.-.-"
  57. 560 A$(41)    = ",--..--"
  58. 570 A$(42)    = "?..--.."
  59. 580 A$(43)      = "s...-.-"      ' SK
  60. 590 REM SPECIAL (NOT ON GENERAL TEST)
  61. 600 A$(44)    = "~.-...-"      ' NEW LINE
  62. 610 REM START OF CODE TRAINER PROGRAM
  63. 620   CLS
  64. 630   M5 = 20    ' BASIC SPEED CONSTANT = MAX WPM, BASICA=13 BASIC=15 BASCOM=20
  65. 640   F = 837   ' TONE FREQ. IN HZ. FCC SAYS 700 TO 1000 HZ.
  66. 650   PRINT "KH6FHN CODE SENDER, MODIFIED BY N6MPP 1985"
  67. 660   PRINT "ENTER T FOR TABLE, M FOR MEMORY TEST, P FOR PRACTICE";
  68. 670   INPUT S$
  69. 680     IF (S$ = "P") OR (S$ = "P") GOTO 930
  70. 690     IF (S$ = "M") OR (S$ = "m") GOTO 1820
  71. 700   PRINT
  72. 710   PRINT "A .-      S ...      . .-.-.-"
  73. 720   PRINT "B -...    T -        , --..--"
  74. 730   PRINT "C -.-.    U ..-      ? ..--.."
  75. 740   PRINT "D -..     V ...-     / -..-.  (DN)"
  76. 750   PRINT "E .       W .--      = -...-  (BT = DOUBLE DASH)"
  77. 760   PRINT "F ..-.    X -..-     a .-.-.  (AR = END OF MESSAGE)"
  78. 770   PRINT "G --.     Y -.--     s ...-.- (SK = END OF CONTACT)"
  79. 780   PRINT "H ....    Z --..     ~ .-...- (NEW LINE)"
  80. 790   PRINT "I ..      0 -----"
  81. 800   PRINT "J .---    1 .----"
  82. 810   PRINT "K -.-     2 ..---"
  83. 820   PRINT "L .-..    3 ...--"
  84. 830   PRINT "M --      4 ....-"
  85. 840   PRINT "N -.      5 ....."
  86. 850   PRINT "O ---     6 -...."
  87. 860   PRINT "P .--.    7 --..."
  88. 870   PRINT "Q --.-    8 ---.."
  89. 880   PRINT "R .-.     9 ----."
  90. 890   PRINT
  91. 900   PRINT "(PRESS ANY KEY TO CONTINUE)"
  92. 910   IF INKEY$ = "" THEN 910
  93. 920   GOTO 610
  94. 930 REM PRACTICE
  95. 940   PRINT USING "ENTER DESIRED CODE SPEED 5-##";M5;
  96. 950   INPUT T1
  97. 960     IF T1 < 5 THEN 930
  98. 970     IF T1 > M5 THEN 930
  99. 980     T = M5 / T1
  100. 990     IF T1 <= 12 THEN T = M5 / (T1 - 1)
  101. 1000     IF T1 <= 11 THEN T = M5 / (T1 - 2)
  102. 1010     IF T1 <=  9 THEN T = M5 / (T1 - 3)
  103. 1020     T13 = T
  104. 1030     IF T1 < 13 THEN T13 = M5 / 13
  105. 1040   REM HERE WE CAN ALSO ENTER TONE FREQ. F (HZ)
  106. 1050   PRINT "ENTER K TO SEND FROM KBD, F TO SEND A FILE, R FOR RANDOM";
  107. 1060   INPUT S$
  108. 1070     IF (S$ = "K") OR (S$ = "k") THEN GOSUB 1460
  109. 1080     IF (S$ = "F") OR (S$ = "f") THEN GOSUB 1110
  110. 1090     IF (S$ = "R") OR (S$ ="r") THEN GOSUB 1530
  111. 1100   GOTO 620
  112. 1110 REM FILE SEND
  113. 1120   PRINT "ENTER THE FILE TO SEND";
  114. 1130   INPUT DSNAME$
  115. 1140   OPEN DSNAME$ FOR INPUT AS 1
  116. 1142   PRINT "(PRESS ANY KEY WHEN READY)"
  117. 1143   T = 1.4*T ' MORE FUDGE
  118. 1144   GOSUB 2190 : T0 = O  ' TIME IN SECONDS
  119. 1146   S = 0
  120. 1148   IF INKEY$ = "" THEN 1144
  121. 1150   IF EOF(1) THEN 1250
  122. 1160     LINE INPUT # 1, REC$
  123. 1170     LL = LEN(REC$)
  124. 1180     FOR L1 = 1 TO LL
  125. 1190       C$ = MID$(REC$, L1, 1)
  126. 1195       S = S + 1 : IF C$ > "Z" THEN S = S + 1
  127. 1200       GOSUB 1270 ' GEN MORSE
  128. 1210     NEXT L1
  129. 1220     C$ = " " : GOSUB 1270
  130. 1230     PRINT
  131. 1240     GOTO 1150
  132. 1250   CLOSE # 1 : PRINT
  133. 1252   GOSUB 2190 : O = O - T0
  134. 1255   PRINT USING "ACTUAL WPM BY FCC STANDARDS = ##.#";(S/O)*12
  135. 1257   PRINT "(PRESS ANY KEY TO CONTINUE)"
  136. 1258   IF INKEY$ = "" THEN 1258
  137. 1260   RETURN ' FILE LIST
  138. 1270 REM GENERATE MORSE FOR CHARACTER C$ AT RATE T.
  139. 1280   FOR J = 1 TO HBNDA
  140. 1290     IF MID$(A$(J), 1, 1) = C$ THEN GOSUB 1360 ' MAKE SOUND
  141. 1300     NEXT J
  142. 1310   IF F = 838 THEN RETURN
  143. 1320   IF C$ = " " THEN SOUND 32767, T*4
  144. 1330   IF C$ = "~" THEN PRINT " "
  145. 1340   IF C$ <> "~" THEN PRINT C$;
  146. 1350   RETURN ' END GENERATE MORSE
  147. 1360 REM MAKE SOUND
  148. 1370   K = LEN(A$(J))
  149. 1380   FOR L = 2 TO K
  150. 1390     SL = 1
  151. 1400     IF MID$(A$(J), L, 1) = "-" THEN SL = 3
  152. 1410     SOUND F, T13*SL
  153. 1420     SOUND 32767, T13   ' SPACE
  154. 1430     NEXT L
  155. 1440   SOUND 32767,3*T-T13
  156. 1450   RETURN
  157. 1460 REM KEYBOARD
  158. 1470   PRINT "ENTER * TO END KEYBOARD MODE"
  159. 1480   C$ = INKEY$
  160. 1490   IF C$ = "" THEN 1480
  161. 1500   IF C$ = "*" THEN RETURN
  162. 1510   GOSUB 1270
  163. 1520   GOTO 1480
  164. 1530 REM RANDOM
  165. 1540   PRINT "TEST WILL LAST 5 MINUTES"
  166. 1550   PRINT "STRIKE ANY KEY WHEN READY"
  167. 1560   PRINT
  168. 1570   T0=RND : IF INKEY$ = "" THEN 1570
  169. 1580   GOSUB 2190 : T0 = O  ' TIME IN SECONDS
  170. 1590   S = 0 : S0 = 0
  171. 1600   Z = 7
  172. 1610   GOSUB 2110
  173. 1620   I = 0
  174. 1630   C$ = INKEY$
  175. 1640   IF C$ <> "" THEN 1780
  176. 1650   GOSUB 2190 : IF O > T0+300 THEN 1760
  177. 1660   I = I + 1
  178. 1670   C$ = " "
  179. 1680   IF I = INT(I/6)*6 THEN 1730         ' GROUPS OF FIVE
  180. 1690   K = INT(RND*Z1)+1
  181. 1700   IF K>26 THEN IF VAL(MID$(TIME$,7,2))<15 THEN K = INT(RND*26)+1
  182. 1710   C$ = MID$(A$(K), 1, 1)
  183. 1720   S0 = S0 + 1 : S = S + 1 : IF K > 26 THEN S = S + 1
  184. 1730   GOSUB 1270                          ' TOOT TOOT!
  185. 1740   IF I = INT(I/24)*24 THEN PRINT      ' FOUR GROUPS
  186. 1750   GOTO 1630
  187. 1760   PRINT : IF I <> INT(I/24)*24 THEN PRINT
  188. 1770   PRINT USING "### CHARS AT ACTUAL WPM BY FCC STANDARDS OF ##.#";S0,S/25
  189. 1780   PRINT "(PRESS ANY KEY TO CONTINUE)"
  190. 1790   C$ = INKEY$
  191. 1800   IF C$ = "" THEN 1790
  192. 1810   RETURN[
  193. 1820 REM MEMORY TEST
  194. 1830   T1=13  ' WPM
  195. 1840   T=M5/T1
  196. 1850   T13=T
  197. 1860   F = 838
  198. 1870   Z=4     ' INITIAL MAX LENGTH OF SYMBOLS
  199. 1880   S=0
  200. 1890   FOR J9=1 TO 10
  201. 1900   E=0
  202. 1910   GOSUB 2110
  203. 1920   FOR I=1 TO 10
  204. 1930     K9 = INT(RND*Z1)+1
  205. 1940     B$ = A$(K9)
  206. 1950     C$ = MID$(B$, 1, 1)
  207. 1960     GOSUB 1270
  208. 1970     PRINT USING "### : ";10*(J9-1)+I;
  209. 1980     S$ = INKEY$ : IF S$ = "" THEN 1980
  210. 1990     PRINT S$;
  211. 2000     IF S$=C$ THEN S=S+1 : PRINT " RIGHT!"
  212. 2010     IF S$<>C$ THEN E=E+1 : PRINT " WRONG, IT'S ",B$
  213. 2020   NEXT I
  214. 2030   IF E=0 THEN Z=Z+1
  215. 2040   IF Z>6 THEN Z=6
  216. 2050   IF E>1 THEN Z=Z-1
  217. 2060   NEXT J9
  218. 2070   PRINT "YOUR SCORE WAS ",S
  219. 2080   PRINT "(PRESS ANY KEY TO CONTINUE)"
  220. 2090   IF INKEY$ = "" THEN 2090
  221. 2100   GOTO 610
  222. 2110 REM SUBR TO GET MAX CHAR LEN --- Z1
  223. 2120     IF Z>= 6 THEN Z1 = 43
  224. 2130     IF Z = 5 THEN Z1 = 39
  225. 2140     IF Z = 4 THEN Z1 = 26
  226. 2150     IF Z = 3 THEN Z1 = 14
  227. 2160     IF Z = 2 THEN Z1 = 6
  228. 2170     IF Z<= 1 THEN Z1 = 2
  229. 2180   RETURN
  230. 2190 REM TIMER SUBROUTINE
  231. 2200   X$=TIME$
  232. 2210   O1$=MID$(X$,1,2)
  233. 2220   O2$=MID$(X$,4,2)
  234. 2230   O3$=MID$(X$,7,2)
  235. 2240   O=VAL(O1$)*3600+VAL(O2$)*60+VAL(O3$)
  236. 2250   RETURN
  237. 2260 END
  238.