0 'MORSE.BA 9/12/87, ver. 1.0 1 'Copyright 1987, Mike Aiello, 71066,155 2 DEFINT A-Z 3 PL=170:SF=0:FF=0:CF=0 4 RV$=CHR$(27)+"p":NR$=CHR$(27)+"q":FN$="-none-" 5 GOSUB 138:GOSUB 139:GOSUB 136:GOSUB 106:GOSUB 107:GOSUB 105 6 SCREEN 0,0:CALL 23161:KEY OFF 7 FOR II=1TO8:READ KY$(II):KX=II:GOSUB 111:NEXT II 8 EX = -1 9 ON KEY GOSUB 59, 65, 76, 86, 91, 96, 101, 104 10 IF EX THEN 10 11 CLS:CALL 23164,0,23366:CALL 27795:KEY OFF:CLOSE:MAXFILES=1:MENU 12 FOR II=0TO4 13 ON CC(II) GOSUB 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58 14 NEXT II 15 SOUND NL,WS:RETURN 16 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 17 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 18 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 19 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 20 SOUND FQ,DI:SOUND NL,CS:RETURN 21 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 22 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 23 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 24 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 25 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 26 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 27 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 28 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 29 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 30 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 31 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 32 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 33 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 34 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 35 SOUND FQ,DA:SOUND NL,CS:RETURN 36 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 37 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 38 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 39 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 40 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 41 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 42 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 43 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 44 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 45 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 46 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 47 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 48 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 49 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 50 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 51 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 52 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 53 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 54 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 55 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 56 SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 57 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,CS:RETURN 58 SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,BS:SOUND FQ,DI:SOUND NL,BS:SOUND FQ,DA:SOUND NL,CS:RETURN 59 GOSUB 118:GOSUB 105:KX=1:GOSUB 115 60 IF NOT FF THEN K1$=KY$(1) 61 FF=NOT FF 62 IF FF THEN GOSUB 119:OPEN FN$ FOR OUTPUT AS 1 ELSE CLOSE 1: FN$="-none-" 63 IF FF THEN KY$(1)=RV$+K1$+NR$ ELSE KY$(1)=K1$ 64 GOSUB 105:GOSUB 117:EX=-1:RETURN 65 GOSUB 118:GOSUB 105:KX=2:GOSUB 115 66 PRINT@PL,"Enter WPM, (5-30) and "; 67 PRINT@PL+80,"WPM==>";:WP$="" 68 SS$=INKEY$:IF SS$="" THEN 68 69 IF SS$=CHR$(8) AND LEN(WP$)>0 THEN PRINT CHR$(127);:WP$=LEFT$(WP$,LEN(WP$)-1):GOTO 68 70 IF SS$=CHR$(13) THEN 73 71 IF (SS$ < "0" OR SS$ > "9") THEN BEEP ELSE WP$=WP$+SS$:PRINT SS$; 72 GOTO 68 73 WP=VAL(WP$):IF WP < 5 OR WP > 30 THEN BEEP:PRINT@PL," ":GOTO 67 74 GOSUB 107:GOSUB 105 75 GOSUB 117:EX=-1:RETURN 76 KX=3:GOSUB 115:GOSUB 118:KV=-1:GOSUB 116:KN(7)=0:KX=7:GOSUB 111:MS=125 77 PRINT@MS,"Adjust with up/down arrow keys," 78 PRINT@MS+40,"Press ";RV$;"Test";NR$;" to try tone" 79 PRINT@MS+80,"Exit adjustment with ..." 80 SS$=INKEY$:IF SS$="" THEN 80 81 IF SS$=CHR$(27) THEN 85 82 IF ASC(SS$)=31 THEN FQ=FQ+200:SOUND FQ,DA:GOTO 80 83 IF ASC(SS$)=30 THEN FQ=FQ-200:SOUND FQ,DA:GOTO 80 84 GOTO 80 85 GOSUB 107:GOSUB 105:KV=0:GOSUB 116:GOSUB 117:EX=-1:RETURN 86 KX=4:GOSUB 115:GOSUB 118:KV=-1:GOSUB 116:KN(5)=0:KX=5:GOSUB 111 87 GOSUB 128:GOSUB 12:PRINT@PL," "; 88 IF FF THEN PRINT@PL, "See file ";FN$;" for copy.."; ELSE PRINT@PL,"Xmit'd: ";CR$; 89 IF CF THEN GOTO 87 90 KV=0:GOSUB 116:GOSUB 117:EX=-1:RETURN 91 GOSUB 118 92 IF NOT CF THEN K5$=KY$(5) 93 CF=NOT CF 94 IF CF THEN KY$(5)=RV$+K5$+NR$ ELSE KY$(5)=K5$ 95 GOSUB 117:EX=-1:RETURN 96 GOSUB 118 97 IF NOT SF THEN K6$=KY$(6) 98 SF=NOT SF 99 IF SF THEN KY$(6)=RV$+K6$+NR$ ELSE KY$(6)=K6$ 100 GOSUB 107:GOSUB 117:EX=-1:RETURN 101 KX=7:GOSUB 115:GOSUB 118 102 GOSUB 31:GOSUB 16:GOSUB 33:GOSUB 24:GOSUB 34 103 GOSUB 117:EX=-1:RETURN 104 EX=0:RETURN 105 CLS:DL=42:PRINT@DL,"WPM:";WP;:PRINT@DL+10,"File: ";FN$;:EX=-1:RETURN 106 FQ=6000:NL=2:TF#=50:BM=1:CM=3:WM=5:WP=10:RETURN 107 UT#=60/(50*WP):IF WP < 13 THEN U0#=60/(50*13) ELSE U0#=UT# 108 UN=INT(TF#*UT#):U1=INT(TF#*U0#) 109 IF SF THEN DI=U1:DA=U1*3:BS=U1*BM ELSE DI=UN:DA=UN*3:BS=UN*BM 110 CS=UN*CM:WS=UN*WM:RETURN 111 IF KN(KX) THEN RETURN 112 KP=280+(KX-1)*5:PRINT@KP, KY$(KX);:KEY KX,"":KEY (KX) ON:KA(KX)=0:RETURN 113 IF KA(KX) THEN RETURN 114 KP=280+(KX-1)*5:PRINT@KP, " ";:KEY (KX) OFF:KA(KX)=0:RETURN 115 KP=280+(KX-1)*5:PRINT@KP, RV$+KY$(KX)+NR$;:KEY (KX) OFF:KA(KX)=-1:RETURN 116 FOR KX=1TO8:KN(KX)=KV:NEXT KX:RETURN 117 FOR KX=1TO8:GOSUB 111:NEXT KX:RETURN 118 FOR KX=1TO8:GOSUB 113:NEXT KX:RETURN 119 PRINT@PL,"File? ";:FN$="" 120 SS$=INKEY$:IF SS$="" THEN 120 121 IF SS$=CHR$(8) AND LEN(FN$)>0 THEN PRINT CHR$(127);:FN$=LEFT$(FN$,LEN(FN$)-1):GOTO 120 122 IF SS$=CHR$(13) THEN IF LEN(FN$)>0 THEN RETURN ELSE BEEP:GOTO 120 123 IF LEN(FN$) = 6 THEN BEEP:GOTO 120 124 IF (SS$ >= "a" AND SS$ <= "z") THEN SS$=CHR$(ASC(SS$)-(ASC("a")-ASC("A"))) 125 IF (SS$ >= "A" AND SS$ <= "Z") THEN FN$=FN$+SS$:PRINT SS$;:GOTO 120 126 IF (LEN(FN$) > 0 AND (SS$ >= "0" AND SS$ <= "9")) THEN FN$=FN$+SS$:PRINT SS$;:GOTO 120 127 BEEP:GOTO 120 128 CR$="" 129 FOR II=0TO4 130 CC(II)=(((RND(1)*513)+(RND(1)*RA)) MOD C0)+1 131 IF C1(CC(II)) THEN CR$=CR$+RV$+CH$(CC(II))+NR$ ELSE CR$=CR$+CH$(CC(II)) 132 IF FF THEN IF C1(CC(II)) THEN PRINT#1, "(";CH$(CC(II));")"; ELSE PRINT#1,CH$(CC(II)); 133 NEXT II 134 IF FF THEN PRINT#1,"" 135 RETURN 136 PRINT@280,"Randomizing... "; 137 SC=VAL(RIGHT$(TIME$,2)):FOR II=1TOSC:RM=RND(1):NEXTII:RA=VAL(MID$(TIME$,4,2)):RETURN 138 CLS:SCREEN 0,0:PRINT@125,"* * Morse Code Trainer * *";:PRINT@205," Copyright 1987 M. Aiello";:RETURN 139 PRINT@280,"Loading code table... "; 140 READ C0 141 DIM CH$(C0),C1(C0) 142 FOR II=1 TO C0:READ CH$(II),C1(II):NEXT II:RETURN 143 DATA 43 144 DATA "A",0,"B",0,"C",0,"D",0,"E",0,"F",0, "G",0,"H",0,"I",0,"J",0,"K",0,"L",0, "M",0,"N",0,"O",0,"P",0,"Q",0,"R",0, "S",0,"T",0,"U",0,"V",0,"W",0,"X",0, "Y",0,"Z",0 145 DATA "1",0,"2",0,"3",0,"4",0,"5",0,"6",0, "7",0,"8",0,"9",0,"0",0,".",0,",",0, "?",0,"/",0 146 DATA "BT",-1,"AR",-1,"SK",-1 147 DATA "File","WPM ","Tone","Send","Cont","Spce","Test","Exit"