home *** CD-ROM | disk | FTP | other *** search
/ World of Ham Radio 1997 / WOHR97_AmSoft_(1997-02-01).iso / basic / remorse.bas < prev    next >
BASIC Source File  |  1997-02-01  |  7KB  |  165 lines

  1. 10 'MORSE.BAS  modified somewhat
  2. 20 'displays have been changed
  3. 30 'time delay after characters and words has been optimized for 20wpm
  4. 40 'you might want to adjust these values for low speed
  5. 50 'code speed is approximate, see comment below
  6. 60 'if you don't like the title page code, comment out the 3 lines after
  7. 70 '  ... send title page in morse ...
  8. 80 '
  9. 90 '-------------------------------------------------------------
  10. 100 'Variable-speed Morse code
  11. 110 'generator programmed by Dick Conklin
  12. 120 '
  13. 130 WIDTH 80: KEY OFF: KEY 1, "": KEY 3, "": KEY 4, ""
  14. 140 DEF SEG : POKE 106, 0: CLS : S = 1!: F = 1000
  15. 150 KEY 2, "CQ CQ de N4AT "
  16. 160 '
  17. 170 'send title page in morse
  18. 180 S = .8: F = 950: LOCATE 5, 31: MSG$ = "Morse Code Generator": GOSUB 540
  19. 190 S = 1.5: F = 850: LOCATE 10, 26: MSG$ = "Written by Dick Conklin, N4AT": GOSUB 540
  20. 200 S = 1!: F = 900: LOCATE 15, 29: MSG$ = "Variable Speed and Pitch": GOSUB 540
  21. 210 '
  22. 220 'main menu
  23. 230 CLS : LOCATE 5, 10: PRINT "Select Code Speed:"
  24. 240 LOCATE 8, 15: PRINT "Enter speed in words per minute."
  25. 250 LOCATE 10, 15: PRINT "Speed can be 1 to 98 wpm."
  26. 260 LOCATE 12, 15: PRINT "Default speed is 20 wpm ( no number entered )."
  27. 270 LOCATE 14, 15: PRINT "For SLOW ( Novice ) speed, enter 5"
  28. 280 LOCATE 16, 15: PRINT "For FAST speed, enter 40"
  29. 290 LOCATE 18, 15: PRINT "Enter 99 to stop this program."
  30. 300 LOCATE 21, 10: PRINT "ENTER desired code speed --> "
  31. 310 LOCATE 21, 40: INPUT "", W: IF W = 0 THEN W = 20
  32. 320 IF W = 99 THEN END
  33. 330 'this calculation sets actual code speed
  34. 340 S = 18 / W'original was S=21/W
  35. 350 '
  36. 360 'file options
  37. 370 CLS : LOCATE 1, 1
  38. 380 PRINT "You can enter the text to be coded from the keyboard or from a file."
  39. 390 LOCATE 3, 1: INPUT "Do you want to create a new file? [ Y/N ] --> "; Q$
  40. 400 IF (Q$ = "y") OR (Q$ = "Y") THEN GOSUB 1550
  41. 410 '
  42. 420 LOCATE 4, 1
  43. 430 INPUT "Do you want to generate code from an existing file? [ Y/N ] --> "; Q$:
  44. 440 IF (Q$ = "y") OR (Q$ = "Y") THEN GOSUB 1450: GOTO 230
  45. 450 '
  46. 460 'screen display of code entered from keyboard
  47. 470 CLS : LOCATE 25, 10
  48. 480 PRINT "F1 = End keyboard input    F3 = Lower tone     F4 = Higher tone";
  49. 490 LOCATE 1, 1: PRINT "Text typed below sent at "; W; " WPM:": LOCATE 3, 1, 1
  50. 500 'keyboard input
  51. 510 I$ = INKEY$: IF I$ = "" THEN 510
  52. 520 GOSUB 620
  53. 530 GOTO 510
  54. 540 '
  55. 550 'this subroutine sends characters to the code generator
  56. 560 FOR I = 1 TO LEN(MSG$)
  57. 570 I$ = MID$(MSG$, I, 1): GOSUB 600
  58. 580 NEXT I
  59. 590 RETURN
  60. 600 '
  61. 610 'this subroutine generates code for each character
  62. 620 C$ = CHR$(ASC(I$) OR 32)
  63. 630 IF C$ = "a" THEN B$ = ".-": GOTO 1250
  64. 640 IF C$ = "b" THEN B$ = "-...": GOTO 1250
  65. 650 IF C$ = "c" THEN B$ = "-.-.": GOTO 1250
  66. 660 IF C$ = "d" THEN B$ = "-..": GOTO 1250
  67. 670 IF C$ = "e" THEN B$ = ".": GOTO 1250
  68. 680 IF C$ = "f" THEN B$ = "..-.": GOTO 1250
  69. 690 IF C$ = "g" THEN B$ = "--.": GOTO 1250
  70. 700 IF C$ = "h" THEN B$ = "....": GOTO 1250
  71. 710 IF C$ = "i" THEN B$ = "..": GOTO 1250
  72. 720 IF C$ = "j" THEN B$ = ".---": GOTO 1250
  73. 730 IF C$ = "k" THEN B$ = "-.-": GOTO 1250
  74. 740 IF C$ = "l" THEN B$ = ".-..": GOTO 1250
  75. 750 IF C$ = "m" THEN B$ = "--": GOTO 1250
  76. 760 IF C$ = "n" THEN B$ = "-.": GOTO 1250
  77. 770 IF C$ = "o" THEN B$ = "---": GOTO 1250
  78. 780 IF C$ = "p" THEN B$ = ".--.": GOTO 1250
  79. 790 IF C$ = "q" THEN B$ = "--.-": GOTO 1250
  80. 800 IF C$ = "r" THEN B$ = ".-.": GOTO 1250
  81. 810 IF C$ = "s" THEN B$ = "...": GOTO 1250
  82. 820 IF C$ = "t" THEN B$ = "-": GOTO 1250
  83. 830 IF C$ = "u" THEN B$ = "..-": GOTO 1250
  84. 840 IF C$ = "v" THEN B$ = "...-": GOTO 1250
  85. 850 IF C$ = "w" THEN B$ = ".--": GOTO 1250
  86. 860 IF C$ = "x" THEN B$ = "-..-": GOTO 1250
  87. 870 IF C$ = "y" THEN B$ = "-.--": GOTO 1250
  88. 880 IF C$ = "z" THEN B$ = "--..": GOTO 1250
  89. 890 IF C$ = "1" THEN B$ = ".----": GOTO 1250
  90. 900 IF C$ = "2" THEN B$ = "..---": GOTO 1250
  91. 910 IF C$ = "3" THEN B$ = "...--": GOTO 1250
  92. 920 IF C$ = "4" THEN B$ = "....-": GOTO 1250
  93. 930 IF C$ = "5" THEN B$ = ".....": GOTO 1250
  94. 940 IF C$ = "6" THEN B$ = "-....": GOTO 1250
  95. 950 IF C$ = "7" THEN B$ = "--...": GOTO 1250
  96. 960 IF C$ = "8" THEN B$ = "---..": GOTO 1250
  97. 970 IF C$ = "9" THEN B$ = "----.": GOTO 1250
  98. 980 IF C$ = "0" THEN B$ = "-----": GOTO 1250
  99. 990 IF C$ = "." THEN B$ = ".-.-.-": GOTO 1250
  100. 1000 IF C$ = "?" THEN B$ = "..--..": GOTO 1250
  101. 1010 IF C$ = "," THEN B$ = "--..--": GOTO 1250
  102. 1020 IF C$ = "-" THEN B$ = "-...-": GOTO 1250
  103. 1030 IF C$ = "/" THEN B$ = "-..-.": GOTO 1250
  104. 1040 IF I$ = " " THEN B$ = " ": GOTO 1250
  105. 1050 FK = MID$(I$, 1, 1) = CHR$(0)
  106. 1060 F1 = MID$(I$, 2, 1) = CHR$(59)
  107. 1070 F3 = MID$(I$, 2, 1) = CHR$(61)
  108. 1080 F4 = MID$(I$, 2, 1) = CHR$(62)
  109. 1090 '
  110. 1100 IF FK AND F3 THEN F = F - 10
  111. 1110 IF FK AND F4 THEN F = F + 10
  112. 1120 IF FK AND F1 THEN 230
  113. 1130 '
  114. 1140 IF I$ = CHR$(8) THEN B$ = "........"
  115. 1150 LOCATE , POS(0) - 1: PRINT " ";
  116. 1160 LOCATE , POS(0) - 1: C$ = ""
  117. 1170 GOTO 1250
  118. 1180 '
  119. 1190 IF I$ = ":" THEN B$ = "---...": GOTO 1250
  120. 1200 IF I$ = ";" THEN B$ = "-.-.-.": GOTO 1250
  121. 1210 IF I$ = "(" OR C$ = ")" THEN B$ = "-.--.-": GOTO 1250
  122. 1220 IF I$ = "+" OR I$ = "&" THEN B$ = ". ...": GOTO 1250
  123. 1230 C$ = "": B$ = "": I$ = ""
  124. 1240 '
  125. 1250 PRINT I$; 'Display while sending
  126. 1260 '
  127. 1270 'convert code string to morse
  128. 1280 FOR C = 1 TO LEN(B$)
  129. 1290 'dit length = 1 * S
  130. 1300 IF MID$(B$, C, 1) = "." THEN SOUND F, S ELSE GOTO 1330
  131. 1310 GOTO 1380
  132. 1320 'dah length = 3 * S
  133. 1330 IF MID$(B$, C, 1) = "-" THEN SOUND F, S * 3 ELSE GOTO 1360
  134. 1340 GOTO 1380
  135. 1350 'blank space ( between words ) pause = 2 * S
  136. 1360 SOUND 32767, S * 2'original was S*1
  137. 1370 'pause after dit, dah, or blank = 1 * S
  138. 1380 SOUND 32767, S
  139. 1390 'get next dot or dash
  140. 1400 NEXT C
  141. 1410 'done with this character, pause after character = 2 * S
  142. 1420 SOUND 32767, S * 2'original was S*1.5
  143. 1430 RETURN 'Get the next letter
  144. 1440 '
  145. 1450 'Convert text file into code
  146. 1460 ON ERROR GOTO 1480: LOCATE 10, 1
  147. 1470 PRINT "Current files:  "; : FILES "*.   ": PRINT
  148. 1480 INPUT "Enter file name:  ", CODEFILE$
  149. 1490 OPEN CODEFILE$ + ".   " FOR INPUT AS #1
  150. 1500 CLS : LOCATE 25, 1: PRINT "Reading from file "; CODEFILE$
  151. 1510 LOCATE 1, 1: PRINT "Text typed below sent at "; W; " WPM": LOCATE 3, 1
  152. 1520 IF EOF(1) THEN CLOSE : CLS : RETURN
  153. 1530 INPUT #1, MSG$: GOSUB 540: PRINT : GOTO 1520
  154. 1540 '
  155. 1550 'Enter and store text
  156. 1560 ON ERROR GOTO 1580: LOCATE 10, 1
  157. 1570 PRINT "Current files:  "; : FILES "*.   ": PRINT
  158. 1580 INPUT "Enter file name: ", CODEFILE$: OPEN CODEFILE$ + ".   " FOR OUTPUT AS #1
  159. 1590 CLS : LOCATE 25, 1: PRINT "Push ENTER twice to close file."
  160. 1600 LOCATE 1, 1: PRINT "Enter text to be stored in file:"
  161. 1610 LINE INPUT TEXT$
  162. 1620 IF TEXT$ = "" THEN CLOSE : CLS : RETURN
  163. 1630 PRINT #1, CHR$(34); TEXT$; " "; CHR$(34): GOTO 1610
  164.  
  165.