1 ' California QSO Party LOG program 2 ' 3 ' 9/10/94 REV 4.6 4 ' AD6E 10 KEY OFF: TOTAL = 0: I = 0: ARRAY = 0: Q$ = CHR$(27): CLS 60 MODE$ = "CW": BAND$ = "20": WPM = 28 70 DIM W$(2000), TOT(16) 80 DIM Z$(100, 27), CODES$(50), MAXARRAY(27), MULT$(61), MULTS(61) 90 GOSUB 2500: GOSUB 9800 100 COLOR WHITE, BLUE, BLUE: CLS : LOCATE 1, 70: PRINT "REV 4.6": LOCATE 1, 1 102 PRINT "California QSO Party Log": LOCATE 3, 1: PRINT "Main Menu": PRINT 105 PRINT "1 Append new QSOs to log" 110 PRINT "2 Display log by QSO number" 120 PRINT "3 Search log for call" 140 PRINT "4 Change an entry" 150 PRINT "5 Print out dupe sheet" 160 PRINT "6 Write ASCII log to disk" 170 PRINT "7 Operate on the air" 180 PRINT "8 Initialize program" 182 PRINT "9 Change band from "; BAND$; " "; MODE$: PRINT 190 PRINT "10 END" 200 PRINT : INPUT " Choice : "; CHOICE 210 IF CHOICE < 1 OR CHOICE > 10 THEN 100 220 IF CHOICE = 10 THEN CLOSE : END 230 ON CHOICE GOSUB 1000, 500, 3000, 4000, 4100, 5000, 8000, 2000, 700 240 GOTO 100 300 ' FIND SUFFIX OF CALL 310 A = ASC(RIGHT$(CAL$, 1)) - 64 320 IF A < 0 THEN A = 27 330 IF A > 26 THEN A = 27 350 RETURN 400 CLOSE : ' CLOSE, THEN OPEN FILES 405 IF FILE1$ < "0" THEN FILE1$ = "CALOG" 410 OPEN "R", #1, FILE1$, 42 420 FIELD #1, 4 AS T$, 10 AS C$, 4 AS N$, 20 AS S$, 1 AS P$, 3 AS B$ 450 RETURN 500 ' DISPLAY LOG BY QSO NUMBER SCREEN , , 2, 2: COLOR YELLOW, BLUE LOCATE 25, 15: PRINT "enter '0' to EXIT" 510 LOCATE 1, 2: PRINT "21 log entries to be displayed starting with Nr: "; 520 GOSUB 400 LOCATE 1, 50: INPUT II 530 IF II = 0 THEN SCREEN , , 0, 0: RETURN 550 COLOR WHITE, BLUE LOCATE 2, 1 PRINT "Nr Time Call Report Band Mode" 555 IF CHOICE = 3 THEN RETURN IF II < 1 THEN II = 1 560 FOR J = II TO II + 20 570 GET #1, J 580 PRINT USING "####"; J; IF T$ >= "0000" AND T$ < "2400" THEN PRINT " "; T$; " "; C$; " "; N$; " "; S$; " "; LEFT$(B$, 2); " "; RIGHT$(B$, 1); IF P$ = "1" AND T$ > "0" THEN PRINT " dupe " ELSE PRINT " " ELSE PRINT SPC(65); : PRINT END IF 610 IF CHOICE = 3 OR CHOICE = 4 THEN RETURN 620 NEXT J 630 GOTO 510 700 ' CHANGE BAND 710 PRINT : PRINT : PRINT " 2 6 10 15 20 40 80 or 160 meters" 720 LINE INPUT ; " Change band to: "; BAND$ 730 IF BAND$ = "6" THEN BAND$ = " 6": GOTO 760 740 IF BAND$ = "2" THEN BAND$ = " 2": GOTO 760 750 IF BAND$ <> "10" AND BAND$ <> "15" AND BAND$ <> "20" AND BAND$ <> "40" AND BAND$ <> "80" AND BAND$ <> "75" AND BAND$ <> "160" THEN 720 760 LINE INPUT ; " Enter PH or CW: "; MODE$: MODE$ = UCASE$(MODE$) 770 IF BAND$ = "160" THEN BAND$ = "16" 780 IF MODE$ <> "CW" THEN MODE$ = "PH" 790 FOR I = 1 TO 27 792 FOR J = 1 TO MAXARRAY(I): Z$(J, I) = "": NEXT J 794 MAXARRAY(I) = 0: NEXT I 796 ARRAY = 0: RETURN 1000 ' INPUT SEQUENTIAL QSOs 1010 CLS : LOCATE 1, 30: PRINT "Input sequential QSOs" 1030 LOCATE 13, 10: PRINT "Input format: Time,Call,Number,QTH " 1040 PRINT " example: 0347,W1XYZ,108,MA": PRINT 1042 LOCATE 25, 10: COLOR YELLOW: PRINT " to exit, enter ',,,' and return": LOCATE 16, 1: COLOR WHITE 1045 GOSUB 1500 1047 IF CHOICE = 4 THEN I = J - 1 1050 I = I + 1: TIMEE$ = "": CAL$ = "": RPT$ = "" 1060 PRINT "Nr"; : PRINT USING "#####"; I; 1070 INPUT ; ": "; TIMEE$, CAL$, HISNR$, RPT$ 1080 IF LEN(TIMEE$) < 4 THEN I = I - 1: RETURN 1090 GOSUB 1300 1092 IIT = 1 1094 IF RPT$ = LEFT$(MULT$(IIT), LEN(RPT$)) THEN GOTO 1100 1096 IIT = IIT + 1: IF IIT < 59 THEN 1094 1100 GOSUB 1700 1110 MAXARRAY(A) = MAXARRAY(A) + 1 1120 Z$(MAXARRAY(A), A) = CAL$: PRINT 1130 IF CHOICE = 1 THEN 1050 ELSE RETURN 1300 ' DUPE CHECK... 1310 DUPE$ = "0" 1320 GOSUB 300 1390 FOR J = 1 TO MAXARRAY(A) 1410 IF CAL$ <> Z$(J, A) THEN 1450 1414 IF RIGHT$(CALI$, 1) = " " THEN CALI$ = LEFT$(CALI$, LEN(CALI$) - 1): GOTO 1414 1415 IF CAL$ = CALI$ THEN 1450 1420 DUPE$ = "1" 1430 PRINT " Dupe " 1440 J = MAXARRAY(A) 1450 NEXT J 1480 RETURN 1500 ' READ IN ALL CALLS FROM DISK GOSUB 400: TOTP = 0: TOTC = 0 1510 ARRAY = 1: TMULT = 0: QSOS = 0: BANDMODE$ = BAND$ + LEFT$(MODE$, 1) FOR I = 1 TO 61 MULTS(I) = 0 NEXT I FOR I = 1 TO 16 TOT(I) = 0 NEXT I I = 0 1520 RO = CSRLIN: CO = POS(O): LOCATE 1, 60: PRINT "QRX - loading file" 1530 I = I + 1 1540 GET #1, I 1550 IF C$ < "0" OR T$ < "0000" OR T$ > "2400" THEN I = I - 1: GOTO 1630 1560 IF P$ = "0" THEN IF RIGHT$(B$, 1) = "C" THEN TOTC = TOTC + 1 ELSE TOTP = TOTP + 1 IF B$ = "16C" THEN TOT(1) = TOT(1) + 1 IF B$ = "80C" THEN TOT(2) = TOT(2) + 1 IF B$ = "40C" THEN TOT(3) = TOT(3) + 1 IF B$ = "20C" THEN TOT(4) = TOT(4) + 1 IF B$ = "15C" THEN TOT(5) = TOT(5) + 1 IF B$ = "10C" THEN TOT(6) = TOT(6) + 1 IF B$ = " 6C" THEN TOT(7) = TOT(7) + 1 IF B$ = " 2C" THEN TOT(8) = TOT(8) + 1 IF B$ = "16P" THEN TOT(9) = TOT(9) + 1 IF B$ = "80P" THEN TOT(10) = TOT(10) + 1 IF B$ = "40P" THEN TOT(11) = TOT(11) + 1 IF B$ = "20P" THEN TOT(12) = TOT(12) + 1 IF B$ = "15P" THEN TOT(13) = TOT(13) + 1 IF B$ = "10P" THEN TOT(14) = TOT(14) + 1 IF B$ = " 6P" THEN TOT(15) = TOT(15) + 1 IF B$ = " 2P" THEN TOT(16) = TOT(16) + 1 END IF RPT$ = S$: LOGIT = 1 1561 IF RIGHT$(RPT$, 1) = " " THEN RPT$ = LEFT$(RPT$, LEN(RPT$) - 1): GOTO 1561 GOSUB MULTCK: LOGIT = 0 IF P$ = "1" THEN GOTO 1530 1562 IF RIGHT$(B$, 1) = "C" THEN QSOS = QSOS + 3 ELSE QSOS = QSOS + 2 1570 IF B$ <> BANDMODE$ THEN 1530 1580 CAL$ = C$ 1590 IF RIGHT$(CAL$, 1) = " " THEN CAL$ = LEFT$(CAL$, LEN(CAL$) - 1): GOTO 1590 1600 GOSUB 300: MAXARRAY(A) = MAXARRAY(A) + 1 1610 Z$(MAXARRAY(A), A) = CAL$ 1620 GOTO 1530 1630 LOCATE 1, 60: COLOR WHITE: PRINT " "; 1640 LOCATE RO, CO: RETURN 1700 ' WRITE QSO TO DISK 1710 LSET C$ = CAL$ 1720 LSET N$ = HISNR$ 1730 LSET B$ = BAND$ + LEFT$(MODE$, 1) 1740 LSET T$ = TIMEE$ 1750 LSET S$ = RPT$ 1760 LSET P$ = DUPE$ 1770 PUT #1, I 1780 GOSUB 400: RETURN 2000 ' INITIALIZE PROGRAM 2010 OPEN "R", #3, "CAINITAL.DTA", 10 2020 FIELD #3, 10 AS A$ 2025 COLOR WHITE, BLUE, BLUE 2030 CLS : LOCATE 1, 20: PRINT "Initialization ": PRINT : PRINT "Existing data:": PRINT 2040 GET #3, 1: PRINT " 1 Contest call sign: "; A$ 2050 GET #3, 2: PRINT " 2 Operating IN or OUT of Calif: "; A$ 2060 IF LEFT$(A$, 1) = "O" OR LEFT$(A$, 1) = "o" THEN CALIF = 20 ELSE CALIF = 80 ' 2070 GET #3, 3: PRINT " 3 CW sequence in key F1: (CQ) "; A$; ' 2080 GET #3, 4: PRINT A$; : GET #3, 5: PRINT A$ ' 2090 GET #3, 6: PRINT " 6 CW sequence in key F2: (QRZ) "; A$; ' 2100 GET #3, 7: PRINT A$; : GET #3, 8: PRINT A$ ' 2110 GET #3, 9: PRINT " 9 CW sequence in key F9: "; A$; ' 2120 GET #3, 10: PRINT A$; : GET #3, 11: PRINT A$ 2130 GET #3, 14: PRINT "14 State or County . . . . . . "; A$ 2142 GET #3, 16: PRINT "16 monitor type . . . . . . . . "; A$ 2144 GET #3, 17: PRINT "17 CW sidetone, Hz . . . . . . . "; CVI(LEFT$(A$, 2)) 2146 GET #3, 18: PRINT "18 Log file name . . . . . . . "; A$ 2150 LOCATE 20, 1: INPUT " select number to change, enter 0 if all is OK "; SEL: IF SEL = 0 THEN 2250 2160 IF SEL = 1 THEN LINE INPUT ; " enter contest call sign: "; ME$: LSET A$ = ME$: PUT #3, 1: GOTO 2030 2161 IF SEL = 18 THEN LINE INPUT ; " enter log filename: "; ME$ 2162 IF SEL = 18 THEN LSET A$ = ME$: PUT #3, 18: GOTO 2030 2165 IF SEL = 17 THEN INPUT ; " enter CW sidetone frequency, Hz: "; ME 2166 IF SEL = 17 THEN LSET A$ = MKI$(ME): PUT #3, 17: GOTO 2030 2167 IF SEL = 16 THEN INPUT ; " enter 'COLOR' or 'MONICHROME': "; ME$: ME$ = UCASE$(ME$) 2168 IF SEL = 16 THEN LSET A$ = ME$: PUT #3, 16: GOSUB 2750: SEL = 0: GOTO 2025 2170 IF SEL = 2 THEN LINE INPUT ; " enter IN or OUT: "; ME$: ME$ = UCASE$(ME$) 2171 IF SEL = 2 THEN LSET A$ = ME$: PUT #3, 2: GOTO 2030 2172 IF SEL <> 14 THEN 2030 2180 LINE INPUT ; " enter new QTH: "; ME$: ME$ = UCASE$(ME$) 2200 LSET A$ = ME$: PUT #3, SEL 2220 GOTO 2030 2250 CLS : LOCATE 1, 20: PRINT "Multiplier list" 2260 LOCATE 2, 1 2270 FOR N = CALIF TO CALIF + 19 2280 GET #3, N: PRINT USING "###"; N - CALIF + 1; : PRINT " "; A$; TAB(29); 2290 GET #3, N + 20: PRINT USING "###"; N - CALIF + 21; : PRINT " "; A$; TAB(59); 2300 GET #3, N + 40: PRINT USING "###"; N - CALIF + 41; : PRINT " "; A$ 2310 NEXT N 2315 LOCATE 23, 45: PRINT " "; : LOCATE 23, 1 2320 INPUT "select number to change, enter 0 if all are OK "; SEL 2330 IF SEL = 0 THEN CLOSE #3: GOTO 2400 2340 IF SEL > 60 THEN GOTO 2315 2345 LOCATE 24, 22: PRINT " "; : LOCATE 24, 1 2350 LINE INPUT ; "new multiplier name: "; ME$: ME$ = UCASE$(ME$) 2360 LSET A$ = ME$: PUT #3, SEL + CALIF - 1 2370 GOTO 2260 2400 LOCATE 24, 1: PRINT " "; 2410 LOCATE 24, 1: INPUT "Print multiplier list to printer (1) or not (0)"; SEL 2420 IF SEL <> 1 THEN 2500 2430 LPRINT : LPRINT TAB(20); "California QSO Party Multiplier List": LPRINT 2440 FOR N = 1 TO 20 2450 LPRINT USING "###"; N; : LPRINT " "; MULT$(N); 2460 LPRINT TAB(29); USING "###"; N + 20; : LPRINT " "; MULT$(N + 20); 2470 LPRINT TAB(59); USING "###"; N + 40; : LPRINT " "; MULT$(N + 40) 2480 NEXT N 2490 LPRINT : LPRINT 2500 ' INPUT INITIALIZATION DATA 2510 OPEN "R", #3, "CAINITAL.DTA", 10 2520 FIELD #3, 10 AS A$ 2522 GET #3, 18: FILE1$ = A$: GET #3, 19: FILE2$ = A$ 2524 IF RIGHT$(FILE1$, 1) = " " THEN FILE1$ = LEFT$(FILE1$, LEN(FILE1$) - 1): GOTO 2524 2525 IF RIGHT$(FILE2$, 1) = " " THEN FILE2$ = LEFT$(FILE2$, LEN(FILE2$) - 1): GOTO 2525 2526 IF FILE1$ = "" THEN FILE1$ = "CA" 2530 GET #3, 17: HZ1 = CVI(LEFT$(A$, 2)): IF HZ1 > 10000 THEN HZ1 = 0 HZ = HZ1 2540 GET #3, 1: ME$ = A$: IF ME$ < "A" THEN ME$ = "AD6E" 2542 IF RIGHT$(ME$, 1) = " " THEN ME$ = LEFT$(ME$, LEN(ME$) - 1): GOTO 2542 2550 GET #3, 2: IF LEFT$(A$, 1) = "O" OR LEFT$(A$, 1) = "o" THEN CALIF = 20 ELSE CALIF = 80 2560 GET #3, 3: F1$ = A$ 2570 IF RIGHT$(F1$, 1) = " " THEN F1$ = LEFT$(F1$, LEN(F1$) - 1): GOTO 2570 2580 GET #3, 4: F2$ = A$ 2590 IF RIGHT$(F2$, 1) = " " THEN F2$ = LEFT$(F2$, LEN(F2$) - 1): GOTO 2590 GET #3, 5: F3$ = A$ 2591 IF RIGHT$(F3$, 1) = " " THEN F3$ = LEFT$(F3$, LEN(F3$) - 1): GOTO 2591 GET #3, 6: F4$ = A$ 2592 IF RIGHT$(F4$, 1) = " " THEN F4$ = LEFT$(F4$, LEN(F4$) - 1): GOTO 2592 GET #3, 7: F5$ = A$ 2593 IF RIGHT$(F5$, 1) = " " THEN F5$ = LEFT$(F5$, LEN(F5$) - 1): GOTO 2593 GET #3, 8: F6$ = A$ 2594 IF RIGHT$(F6$, 1) = " " THEN F6$ = LEFT$(F6$, LEN(F6$) - 1): GOTO 2594 GET #3, 9: F7$ = A$ 2595 IF RIGHT$(F7$, 1) = " " THEN F7$ = LEFT$(F7$, LEN(F7$) - 1): GOTO 2595 GET #3, 10: F8$ = A$ 2596 IF RIGHT$(F8$, 1) = " " THEN F8$ = LEFT$(F8$, LEN(F8$) - 1): GOTO 2596 GET #3, 11: F9$ = A$ 2610 IF RIGHT$(F9$, 1) = " " THEN F9$ = LEFT$(F9$, LEN(F9$) - 1): GOTO 2610 GET #3, 12: F10$ = A$ 2611 IF RIGHT$(F10$, 1) = " " THEN F10$ = LEFT$(F10$, LEN(F10$) - 1): GOTO 2611 2700 M = 0 2710 FOR N = CALIF TO CALIF + 59 2720 M = M + 1: GET #3, N: MULT$(M) = A$ 2740 NEXT N 2750 GET #3, 16: IF LEFT$(A$, 1) = "C" THEN MONI = 1 ELSE MONI = 0 2760 IF MONI = 1 THEN BLUE = 1: GREEN = 2: CYAN = 3: RED = 4: MAGENTA = 5: WHITE = 7 YELLOW = 14: HWHITE = 15: FLGREEN = 26: BROWN = 6: LGREEN = 10 LCYAN = 11: LRED = 12: REDB = 4 ELSE BLUE = 0: GREEN = 7: CYAN = 7: RED = 15: MAGENTA = 7: WHITE = 7 YELLOW = 15: HWHITE = 15: FLGREEN = 31: BROWN = 0: LGREEN = 15 LCYAN = 7: LRED = 7: REDB = 0 END IF SCREEN , , 1, 1: COLOR WHITE, BLUE: CLS : SCREEN , , 0, 0 SCREEN , , 2, 2: COLOR WHITE, BLUE: CLS : SCREEN , , 0, 0 2770 IF SEL = 16 THEN RETURN 2790 CLOSE #3: RETURN STOREF: OPEN "R", #3, "CAINITAL.DTA", 10 FIELD #3, 10 AS A$ LSET A$ = DUMMY$ PUT #3, F3LOC CLOSE #3 RETURN 3000 ' SEARCH FOR A CALL 3010 CLS : LOCATE 15, 25: PRINT "Search log for a CALL"; 3012 LOCATE 25, 1: PRINT "Enter a null call (just hit 'return') to get back to the main menu" 3015 LOCATE 17, 10: LINE INPUT "call to lookup:"; SCALL$: IF LEN(SCALL$) < 2 THEN RETURN SCALL$ = UCASE$(SCALL$) 3017 GOSUB 400 3020 J = 1: LOOK = 0: L = LEN(SCALL$) 3030 GET #1, J: IF C$ < "0" THEN 3060 3040 IF SCALL$ = LEFT$(C$, L) THEN GOSUB 3200 3050 J = J + 1: GOTO 3030 3060 LOCATE 19, 10: IF LOOK = 0 THEN PRINT SCALL$; " NOT FOUND" 3070 LOCATE 17, 24: PRINT " "; : GOTO 3015 3200 IF LOOK = 1 THEN GOSUB 580 ELSE LOOK = 1: GOSUB 550: GOSUB 580 3210 RETURN 4000 GOSUB 400: CLS ' CHANGE AN ENTRY 4010 PRINT : INPUT " Entry number to change: "; J: IF J < 1 THEN RETURN 4020 LOCATE 5, 1 4025 PRINT "Nr Time Call Report Band Mode" 4030 GOSUB 570 4040 PRINT : PRINT "entry will be edited to become "; BAND$; " "; MODE$: PRINT 4050 LINE INPUT "SURE?? "; X$ 4060 IF X$ = "Y" OR X$ = "y" THEN 4080 4070 RETURN 4080 CALI$ = C$: GOSUB 1030 4090 GOSUB 1500: RETURN 4100 CLS : ' PREPARE DUPE SHEET 4110 I = 1: LOCATE 1, 20: TOTQ = 0 4120 PRINT "Prepare DUPE sheet" 4130 PRINT : LINE INPUT "band: "; BAND$: AA$ = BAND$: IF AA$ = "" THEN RETURN 4140 IF AA$ <> "2" AND AA$ <> "6" AND AA$ <> "10" AND AA$ <> "15" AND AA$ <> "20" AND AA$ <> "40" AND AA$ <> "80" AND AA$ <> "160" AND AA$ <> "75" THEN 4100 4150 PRINT : LINE INPUT "CW or PH: "; MODE$: MODE$ = UCASE$(MODE$) 4152 IF MODE$ = "" THEN RETURN ELSE M$ = LEFT$(MODE$, 1) 4160 IF M$ <> "C" AND M$ <> "P" THEN 4100 4170 IF AA$ = "160" THEN AA$ = "16" 4180 AA$ = AA$ + M$: PRINT 4190 FOR I = 1 TO 2000: W$(I) = "": NEXT I 4202 GOSUB 400: I = 1 4204 GET #1, I: IF C$ > "0" AND B$ <> AA$ THEN I = I + 1: GOTO 4204 4206 W$(1) = C$: I = I + 1 4210 GET #1, I: IF C$ < "0" THEN 4400 4220 IF B$ <> AA$ OR P$ = "1" THEN 4320 4230 J = 0 4240 J = J + 1 4250 IF W$(J) < C$ AND W$(J) > "" THEN 4240 4260 IF W$(J) = C$ THEN 4310 4270 FOR K = I TO J STEP -1 4280 W$(K + 1) = W$(K) 4290 NEXT K 4300 W$(J) = C$ 4310 PRINT "."; : TOTQ = TOTQ + 1 4320 I = I + 1: GOTO 4210 4400 CLS : LOCATE 5, 10: PRINT "total QSOs this band: "; TOTQ 4405 LPRINT " Dupe sheet for "; BAND$; " meters "; MODE$ 4410 PRINT : PRINT 4420 COLLEN = FIX(TOTQ / 5) + 1 4430 FOR J = 1 TO COLLEN 4440 FOR JJ = 0 TO 4 4450 PRINT W$(J + (JJ * COLLEN)) + " "; 4460 LPRINT W$(J + (JJ * COLLEN)) + " "; 4470 NEXT JJ 4480 PRINT : LPRINT 4490 NEXT J 4500 LPRINT : LPRINT 4510 RETURN 5000 ' PRINT OUT THE LOG 5010 COLOR 7, 1, 1: CLS ' 5015 DIM MULTS(60), MULT$(60) FOR I = 1 TO 61 MULTS(I) = 0 NEXT I FOR I = 1 TO 16 TOT(I) = 0 NEXT I I = 0: TOTP = 0: TOTC = 0: TMULT = 0: QSOS = 0 5020 CLOSE : OPEN "R", #3, "CAINITAL.DTA", 10 5030 FIELD #3, 10 AS A$ 5040 GET #3, 1: ME$ = A$ 5050 IF RIGHT$(ME$, 1) = " " THEN ME$ = LEFT$(ME$, LEN(ME$) - 1): GOTO 5050 5060 GET #3, 18: FILE1$ = A$ 5070 IF RIGHT$(FILE1$, 1) = " " THEN FILE1$ = LEFT$(FILE1$, LEN(FILE1$) - 1): GOTO 5070 5074 OPEN "R", #1, FILE1$, 42 5076 FIELD #1, 4 AS T$, 10 AS C$, 4 AS N$, 20 AS S$, 1 AS P$, 3 AS B$ 5080 GET #3, 4: LOCATION$ = A$ 5090 IF RIGHT$(LOCATION$, 1) = " " THEN LOCATION$ = LEFT$(LOCATION$, LEN(LOCATION$) - 1): GOTO 5090 5100 SCORE = 0: PAGE = 0 GET #3, 2: IF LEFT$(A$, 1) = "O" OR LEFT$(A$, 1) = "o" THEN CALIF = 20 ELSE CALIF = 80 FOR N = CALIF TO CALIF + 57 GET #3, N MULT$(N - CALIF + 1) = A$ MULTS(N - CALIF + 1) = 0 NEXT N 5110 LOCATE 1, 5: COLOR 14 PRINT "Log Printout routine" COLOR 7 LOCATE 1, 40: PRINT "converts CQP log into an ASCII file" 5120 LOCATE 3, 5: PRINT "Call sign . . . . "; ME$ 5130 LOCATE 4, 5: PRINT "Operating from . . "; LOCATION$ LOCATE 5, 5: PRINT "Log file . . . . . "; FILE1$ 5150 LOCATE 6, 5: INPUT "contest year . . "; YEAR$ 5160 LOCATE 9, 5 LINE INPUT "File name for output: "; FILEOUT$ OPEN FILEOUT$ FOR OUTPUT AS 2 GOSUB SCORESET: WRITEFILE: GOSUB PAGEHEADING: FOR N = 1 TO 50 GOSUB WRITELINE: IF ENDLOG = 1 THEN N = 50 IF (P$ = "0") AND (ENDLOG = 0) THEN GOSUB SCORE: NEXT N IF ENDLOG = 0 THEN PRINT #2, CHR$(12); GOTO WRITEFILE: END IF ARRAY = 0 COLOR LGREEN LOCATE 5, 40: PRINT "Copy data from this screen onto"; LOCATE 6, 40: PRINT "your summary sheet, then hit ENTER"; COLOR BLUE LOCATE 2, 77: INPUT X COLOR WHITE RETURN SCORE: 5800 ' SCORE THE LINE 5810 IF B$ = " 2C" THEN LOCATE 15, 13: C2 = C2 + 1: PRINT USING "####"; C2; 5820 IF B$ = " 2P" THEN LOCATE 15, 23: P2 = P2 + 1: PRINT USING "####"; P2; 5830 IF B$ = " 6C" THEN LOCATE 16, 13: C6 = C6 + 1: PRINT USING "####"; C6; 5840 IF B$ = " 6P" THEN LOCATE 16, 23: P6 = P6 + 1: PRINT USING "####"; P6; 5850 IF B$ = "10C" THEN LOCATE 17, 13: C10 = C10 + 1: PRINT USING "####"; C10; 5860 IF B$ = "10P" THEN LOCATE 17, 23: P10 = P10 + 1: PRINT USING "####"; P10; 5870 IF B$ = "15C" THEN LOCATE 18, 13: C15 = C15 + 1: PRINT USING "####"; C15; 5880 IF B$ = "15P" THEN LOCATE 18, 23: P15 = P15 + 1: PRINT USING "####"; P15; 5890 IF B$ = "20C" THEN LOCATE 19, 13: C20 = C20 + 1: PRINT USING "####"; C20; 5900 IF B$ = "20P" THEN LOCATE 19, 23: P20 = P20 + 1: PRINT USING "####"; P20; 5910 IF B$ = "40C" THEN LOCATE 20, 13: C40 = C40 + 1: PRINT USING "####"; C40; 5920 IF B$ = "40P" THEN LOCATE 20, 23: P40 = P40 + 1: PRINT USING "####"; P40; 5930 IF B$ = "80C" THEN LOCATE 21, 13: C80 = C80 + 1: PRINT USING "####"; C80; 5940 IF B$ = "80P" OR B$ = "75P" THEN LOCATE 21, 23: P80 = P80 + 1: PRINT USING "####"; P80; 5950 IF B$ = "16C" THEN LOCATE 22, 13: C16 = C16 + 1: PRINT USING "####"; C16; 5960 IF B$ = "16P" THEN LOCATE 22, 23: P16 = P16 + 1: PRINT USING "####"; P16; 5970 LOCATE 23, 13: CWTOT = C2 + C6 + C10 + C15 + C20 + C40 + C80 + C16: PRINT USING "####"; CWTOT; 5980 LOCATE 23, 23: PHTOT = P2 + P6 + P10 + P15 + P20 + P40 + P80 + P16: PRINT USING "####"; PHTOT; 5990 LOCATE 24, 10: PRINT USING "#######"; CWTOT * 3; LOCATE 24, 20: PRINT USING "#######"; PHTOT * 2; LOCATE 20, 70: PRINT USING "########"; CWTOT * 3 + PHTOT * 2 LOCATE 21, 70: PRINT USING "########"; TMULT LOCATE 23, 70: PRINT USING "########"; TMULT * (CWTOT * 3 + PHTOT * 2) COLOR 7 RETURN SCORESET: ' SET UP SCORING DISPLAY COLOR 14 LOCATE 12, 8: PRINT "BAND TOTALS:"; COLOR 7 LOCATE 14, 15: PRINT "CW PH"; LOCATE 15, 8: PRINT " 2"; LOCATE 16, 8: PRINT " 6"; LOCATE 17, 8: PRINT "10"; LOCATE 18, 8: PRINT "15"; LOCATE 19, 8: PRINT "20"; LOCATE 20, 8: PRINT "40"; LOCATE 21, 8: PRINT "80"; LOCATE 22, 7: PRINT "160"; LOCATE 23, 1: PRINT "total QSOs"; LOCATE 24, 1: PRINT " points"; LOCATE 23, 58: COLOR 14: PRINT "FINAL SCORE"; : COLOR 7 LOCATE 21, 58: PRINT " Mults" LOCATE 20, 53: PRINT "total QSO points" RETURN PAGEHEADING: PAGE = PAGE + 1 PRINT #2, "C A L I F O R N I A Q S O P A R T Y " + YEAR$ PRINT #2, PRINT #2, "CALLSIGN . . "; ME$; " . ."; PRINT #2, SPC(10); "STATE/PROV/COUNTY. . ."; LOCATION$; ". . ." PRINT #2, " SENT RECEIVED PAGE "; PAGE PRINT #2, "_______________________________________________________________________________" PRINT #2, "| BAND |ON/OFF| TIME | CALL | NR || NR | QTH |MULT|PTS" PRINT #2, "-------------------------------------------------------------------------------" RETURN WRITELINE: GET #1, PAGE * 50 - 50 + N IF (C$ < "0") OR (VAL(B$) < 2) THEN ENDLOG = 1: CLOSE RETURN ELSE ENDLOG = 0 END IF HISNR = VAL(N$) PRINT #2, " " + B$ + " " + T$ + " " + C$; IF P$ = "1" THEN PRINT #2, " DUPE "; ELSE PRINT #2, " "; PRINT #2, USING "####"; PAGE * 50 - 50 + N; PRINT #2, " "; PRINT #2, USING "####"; HISNR; PRINT #2, " " + S$ + ""; S1$ = S$ 11 IF RIGHT$(S1$, 1) = " " THEN S1$ = LEFT$(S1$, LEN(S1$) - 1): GOTO 11 NM = 0 12 MULTIMULT = 0 IF INSTR(S1$, "/") > 2 THEN CTY$ = S1$ S1$ = LEFT$(S1$, INSTR(S1$, "/") - 1) CTY$ = RIGHT$(CTY$, LEN(CTY$) - INSTR(CTY$, "/")) MULTIMULT = 1 END IF FOR I = 1 TO 58 IF S1$ = LEFT$(MULT$(I), LEN(S1$)) THEN IF MULTS(I) = 0 THEN MULTS(I) = 1 TMULT = TMULT + 1 NM = 1 END IF I = 58 END IF NEXT I IF MULTIMULT = 1 THEN S1$ = CTY$ GOTO 12 END IF IF NM = 1 THEN PRINT #2, USING "##"; TMULT; ELSE PRINT #2, " "; END IF PRINT #2, " "; IF RIGHT$(B$, 1) = "C" THEN SCORE = 3 ELSE SCORE = 2 IF P$ = "1" THEN SCORE = 0: TOTDUPE = TOTDUPE + 1 PRINT #2, USING "#"; SCORE RETURN CLOSE 5999 RETURN DUPECK: ' CALL DUPE CHECK GOSUB 300: DUPE$ = "0" FOR J = 1 TO MAXARRAY(A) IF CAL$ = Z$(J, A) THEN J = I: DUPE$ = "1" NEXT J RETURN MULTCK: ' MULTIPLIER WORKED CHECK RPT1$ = RPT$ MULTCK1: NEWMULT = 0 IF INSTR(RPT1$, "/") > 2 THEN RPT2$ = LEFT$(RPT1$, INSTR(RPT1$, "/") - 1) RPT1$ = RIGHT$(RPT1$, LEN(RPT1$) - INSTR(RPT1$, "/")) MULTIMULT = 1 ELSE RPT2$ = RPT1$ MULTIMULT = 0 END IF MUL = 9: NEWMULT1 = 0 LRPT = LEN(RPT2$) FOR IT = 1 TO 58 IF RPT2$ = LEFT$(MULT$(IT), LRPT) THEN MUL = MULTS(IT) IF MUL < 9 THEN IIT = IT: IT = 58 NEXT IT IF MUL = 0 THEN NEWMULT = 1: NEWMULT1 = 1 IF LOGIT = 1 AND NEWMULT = 1 THEN TMULT = TMULT + 1: MULTS(IIT) = 1 IF MULTIMULT = 1 THEN GOTO MULTCK1: RETURN 8000 ' OPERATE ON THE AIR 8010 MODE = 1: ENDIT = 0: CLS 8070 IF ARRAY <> 1 THEN GOSUB 400: GOSUB 1500 8075 I = I + 1: GOSUB SCRSETUP: COLOR1 = LGREEN: GOSUB PRTBAND: I = I - 1 8080 LOCATE 15, 1: PRINT SPACE$(64) 8086 PRINT SPACE$(79) 8090 I = I + 1 8105 GOSUB 8900: ' go get new data from keyboard IF ENDIT = 1 THEN RETURN CAL$ = CALL1$ HISNR$ = NR1$ LOGIT = 1: GOSUB MULTCK: LOGIT = 0 IF ACTIVE = 1 THEN CH$ = "]": GOSUB EXCHANGE: 8290 TIMEE$ = LEFT$(TIME$, 2) + MID$(TIME$, 4, 2) 8300 GOSUB 1700: ' write QSO to disk 8310 MAXARRAY(A) = MAXARRAY(A) + 1: Z$(MAXARRAY(A), A) = CAL$ LOCATE 13, 15: PRINT SPC(50); 8320 LOCATE 13, 7: PRINT I, TAB(15); CAL$; TAB(30); HISNR$; TAB(43); RPT$; 8330 LOCATE 11, 1: PRINT BAND$; " "; MODE$; " "; TIMEE$ 8340 GOSUB 8850 COLOR LGREEN 8342 IF DUPE$ = "1" THEN GOTO 8080 IF MODE$ = "CW" THEN QSOS = QSOS + 3: TOTC = TOTC + 1 LOCATE 12, 71: PRINT USING "####"; TOTC; IF BAND$ = "16" THEN TOT(1) = TOT(1) + 1: LOCATE 3, 71: PRINT USING "####"; TOT(1); IF BAND$ = "80" THEN TOT(2) = TOT(2) + 1: LOCATE 4, 71: PRINT USING "####"; TOT(2); IF BAND$ = "40" THEN TOT(3) = TOT(3) + 1: LOCATE 5, 71: PRINT USING "####"; TOT(3); IF BAND$ = "20" THEN TOT(4) = TOT(4) + 1: LOCATE 6, 71: PRINT USING "####"; TOT(4); IF BAND$ = "15" THEN TOT(5) = TOT(5) + 1: LOCATE 7, 71: PRINT USING "####"; TOT(5); IF BAND$ = "10" THEN TOT(6) = TOT(6) + 1: LOCATE 8, 71: PRINT USING "####"; TOT(6); IF BAND$ = " 6" THEN TOT(7) = TOT(7) + 1: LOCATE 9, 71: PRINT USING "####"; TOT(7); IF BAND$ = " 2" THEN TOT(8) = TOT(8) + 1: LOCATE 10, 71: PRINT USING "####"; TOT(8); ELSE QSOS = QSOS + 2: TOTP = TOTP + 1 LOCATE 12, 76: PRINT USING "####"; TOTP; IF BAND$ = "16" THEN TOT(9) = TOT(9) + 1: LOCATE 3, 76: PRINT USING "####"; TOT(9); IF BAND$ = "80" THEN TOT(10) = TOT(10) + 1: LOCATE 4, 76: PRINT USING "####"; TOT(10); IF BAND$ = "40" THEN TOT(11) = TOT(11) + 1: LOCATE 5, 76: PRINT USING "####"; TOT(11); IF BAND$ = "20" THEN TOT(12) = TOT(12) + 1: LOCATE 6, 76: PRINT USING "####"; TOT(12); IF BAND$ = "15" THEN TOT(13) = TOT(13) + 1: LOCATE 7, 76: PRINT USING "####"; TOT(13); IF BAND$ = "10" THEN TOT(14) = TOT(14) + 1: LOCATE 8, 76: PRINT USING "####"; TOT(14); IF BAND$ = " 6" THEN TOT(15) = TOT(15) + 1: LOCATE 9, 76: PRINT USING "####"; TOT(15); IF BAND$ = " 2" THEN TOT(16) = TOT(16) + 1: LOCATE 10, 76: PRINT USING "####"; TOT(16); END IF 8347 LOCATE 14, 73: PRINT USING "#######"; TMULT; 8348 LOCATE 15, 73: PRINT USING "#######"; QSOS * TMULT 8350 COLOR WHITE 8360 GOTO 8080 AF4: 8500 ' AF4 KEY HIT - SHOW MULTIPLIERS SCREEN , , 1, 1: COLOR WHITE, BLUE LOCATE 1, 20: PRINT "Multiplier List" 8520 FOR N = CALIF + 1 TO CALIF + 20 8530 PRINT USING "###"; N - CALIF; : PRINT " "; 8540 IF MULTS(N - CALIF) = 0 THEN COLOR HWHITE, REDB 8550 PRINT " "; MULT$(N - CALIF); : COLOR WHITE, BLUE 8560 PRINT TAB(29); USING "###"; N - CALIF + 20; : PRINT " "; 8570 IF MULTS(N - CALIF + 20) = 0 THEN COLOR HWHITE, REDB 8580 PRINT " "; MULT$(N - CALIF + 20); : COLOR WHITE, BLUE 8590 PRINT TAB(59); USING "###"; N - CALIF + 40; : PRINT " "; 8600 IF MULTS(N - CALIF + 40) = 0 AND LEFT$(MULT$(N - CALIF + 40), 1) <> " " THEN COLOR HWHITE, REDB 8610 PRINT " "; MULT$(N - CALIF + 40): COLOR WHITE, BLUE 8620 NEXT N 8630 LOCATE 24, 10: PRINT "hit any key to continue"; 8640 CH1$ = INKEY$: IF LEN(CH1$) < 1 THEN 8640 SCREEN , , 0, 0 RETURN CWPROMPT: LOCATE 25, 1: COLOR YELLOW, BLUE IF MODE$ = "CW" THEN COLOR YELLOW: PRINT "F1:"; : COLOR HWHITE: PRINT LEFT$(F1$, 4); LOCATE 25, 7 COLOR YELLOW: PRINT " F2:# "; : COLOR HWHITE: PRINT LEFT$(F2$, 4); LOCATE 25, 17 COLOR YELLOW: PRINT " F3:"; : COLOR HWHITE: PRINT LEFT$(F3$, 4); LOCATE 25, 25 COLOR YELLOW: PRINT " F4:"; : COLOR HWHITE: PRINT LEFT$(F4$, 4); LOCATE 25, 33 COLOR YELLOW: PRINT " F5:"; : COLOR WHITE: PRINT "CALL"; LOCATE 25, 41 COLOR YELLOW: PRINT " F6:"; : COLOR HWHITE: PRINT LEFT$(F6$, 4); LOCATE 25, 49 COLOR YELLOW: PRINT " F7:"; : COLOR HWHITE: PRINT LEFT$(F7$, 4); LOCATE 25, 57 COLOR YELLOW: PRINT " F8:"; : COLOR HWHITE: PRINT LEFT$(F8$, 4); LOCATE 25, 64 COLOR YELLOW: PRINT " F9:"; : COLOR HWHITE: PRINT LEFT$(F9$, 4); LOCATE 25, 73 COLOR YELLOW: PRINT " F10:"; : COLOR HWHITE: PRINT LEFT$(F10$, 3); ELSE PRINT " "; END IF RETURN SCRSETUP: ' SET UP SCREEN SCREEN , , 0, 0 IF CHOICE = 6 THEN RETURN ELSE GOSUB 400: CLS GOSUB CWPROMPT: COLOR WHITE, BROWN: LOCATE 24, 1 PRINT "ALT: F1 band F3 log F4 mult F5,6,7: fix last QSO "; COLOR HWHITE PRINT " F8 EXIT "; COLOR WHITE PRINT " F9 H&P F10 CW "; COLOR WHITE, BLUE 8730 GOSUB CHMODE: GOSUB CHMODE: IF MODE$ = "CW" THEN GOSUB 9110: GOSUB 9160 8731 LOCATE 5, 1: COLOR GREEN: PRINT "File: "; FILE1$ 8732 COLOR GREEN LOCATE 2, 65: PRINT " BAND CW PH"; 8734 LOCATE 3, 65: PRINT " 160 "; USING "####"; TOT(1); : PRINT " "; USING "####"; TOT(9); LOCATE 4, 65: PRINT " 80 "; USING "####"; TOT(2); : PRINT " "; USING "####"; TOT(10); LOCATE 5, 65: PRINT " 40 "; USING "####"; TOT(3); : PRINT " "; USING "####"; TOT(11); LOCATE 6, 65: PRINT " 20 "; USING "####"; TOT(4); : PRINT " "; USING "####"; TOT(12); LOCATE 7, 65: PRINT " 15 "; USING "####"; TOT(5); : PRINT " "; USING "####"; TOT(13); LOCATE 8, 65: PRINT " 10 "; USING "####"; TOT(6); : PRINT " "; USING "####"; TOT(14); LOCATE 9, 65: PRINT " 6 "; USING "####"; TOT(7); : PRINT " "; USING "####"; TOT(15); LOCATE 10, 65: PRINT " 2 "; USING "####"; TOT(8); : PRINT " "; USING "####"; TOT(16); LOCATE 12, 65: PRINT " TOT "; USING "####"; TOTC; : PRINT " "; USING "####"; TOTP; LOCATE 14, 65: PRINT " mults: "; USING "#######"; TMULT; 8736 LOCATE 15, 65: PRINT " score: "; USING "#######"; TMULT * QSOS: COLOR WHITE 8740 LOCATE 2, 30: COLOR YELLOW 8750 PRINT BAND$; : IF BAND$ = "16" THEN PRINT "0 meters"; ELSE PRINT " meters"; 8760 PRINT " "; MODE$: LOCATE 12, 1: COLOR WHITE, BLUE 8770 PRINT "last number last call report QTH"; LOCATE 10, 1: PRINT "band time"; 8773 IF I > 2 THEN GET #1, I - 1 LOCATE 13, 1 8775 PRINT TAB(7); I - 1; " "; C$; TAB(30); N$; TAB(43); S$; LOCATE 11, 1 PRINT B$; " "; T$; 8777 GOSUB 8850 8840 COLOR WHITE RETURN 8850 ' PRINT "FIX" PROMPT LINE 8860 LOCATE 14, 1: COLOR YELLOW: PRINT "alt-F5 to fix"; CHR$(196); CHR$(196); CHR$(94); 8870 PRINT TAB(23); "alt-F6"; CHR$(196); CHR$(94); 8880 PRINT TAB(36); "alt-F7"; CHR$(196); CHR$(94); " "; 8890 COLOR WHITE: RETURN 8900 LOST = 0: ST$ = "": ' LINE INPUT CHARACTER BY CHARACTER ' input editor routine for free form data entry START: LOST = 0: CALL1$ = "": RPT$ = "": NR1$ = "": ST$ = "": SAWMULT = 0 LOCATE 22, 5: PRINT SPACE$(74); LOCATE 22, 5: COLOR LCYAN: PRINT "TYPE: "; CHR$(16); : COLOR WHITE RO = CSRLIN: CO = POS(0) NEXTIN: NUM = 0: COLOR WHITE LOCATE 20, 10: PRINT SPACE$(70); LOCATE 20, 10 PRINT "Nr "; USING "####"; I; LOCATE 20, 20: PRINT "Call: "; CALL1$; IF DUPE$ = "1" THEN COLOR HWHITE: PRINT " DUPE "; ELSE COLOR WHITE: PRINT " "; COLOR WHITE LOCATE 20, 40: PRINT "Nr: "; NR1$; LOCATE 20, 55: PRINT "QTH: "; IF NEWMULT1 = 1 THEN COLOR LRED PRINT RPT$; COLOR YELLOW LOCATE RO, CO, 1 GETCHR: CH$ = INKEY$ IF ENDIT = 1 THEN RETURN TIM = TIM + 1: IF TIM = 300 THEN TIM = 0: GOSUB DISPLTIME: IF CH$ = "`" OR CH$ = "\" OR CH$ = "[" OR CH$ = "]" THEN GOSUB EXCHANGE: GOTO GETCHR: END IF IF LEN(CH$) > 1 THEN CH = ASC(RIGHT$(CH$, 1)) IF CH = 134 OR CH = 106 THEN II = I - 20: SCREEN , , 2, 2: GOSUB 550 IF CH = 72 THEN GOSUB 9110 IF CH = 80 THEN GOSUB 9160 IF CH = 133 OR CH = 113 THEN GOSUB SETSER: IF CH = 17 THEN GOTO START: IF CH = 59 THEN GOSUB F1: IF CH = 60 THEN GOSUB F2: IF CH = 61 THEN GOSUB F3: IF CH = 62 THEN GOSUB F4: IF CH = 63 THEN GOSUB F5: IF CH = 64 THEN GOSUB F6: IF CH = 65 THEN GOSUB F7: IF CH = 66 THEN GOSUB F8: IF CH = 67 THEN GOSUB F9: IF CH = 68 THEN GOSUB F10: 'IF CH = 82 OR CH = 83 THEN CH$ = "]": GOSUB EXCHANGE: IF CH = 84 THEN GOSUB SF1: IF CH = 85 THEN GOSUB SF2: IF CH = 86 THEN GOSUB SF3: IF CH = 87 THEN GOSUB SF4: IF CH = 88 THEN GOSUB SF5: IF CH = 89 THEN GOSUB SF6: IF CH = 90 THEN GOSUB SF7: IF CH = 91 THEN GOSUB SF8: IF CH = 92 THEN GOSUB SF9: IF CH = 93 THEN GOSUB SF10: IF CH = 104 THEN GOSUB AF1: IF CH = 105 THEN GOSUB AF2: IF CH = 106 THEN GOSUB AF3: IF CH = 107 OR CH = 140 THEN GOSUB AF4: IF CH = 108 THEN GOSUB AF5: IF CH = 109 THEN GOSUB AF6: IF CH = 110 THEN GOSUB AF7: IF CH = 111 OR CH = 16 THEN GOSUB AF8: IF CH = 112 THEN GOSUB AF9: IF CH$ <> CHR$(27) THEN GOTO GETCHR: END IF IF CH$ = "~" THEN GOSUB AUTOCW: GOTO GETCHR: END IF IF ST$ = "" AND CH$ = CHR$(13) AND (RPT$ > "") AND (NR1$ > "") AND (CALL1$ > "") THEN RETURN IF (CH$ = " ") OR (CH$ = CHR$(13)) THEN CHH$ = " " GOSUB PRCH: GOTO PARSE: END IF IF CH$ = CHR$(11) THEN GOTO START: IF CH$ = CHR$(8) THEN IF LEN(ST$) = 0 THEN GOTO GETCHR: IF RIGHT$(ST$, 1) < "A" THEN NUM = NUM - 1 ST$ = LEFT$(ST$, LEN(ST$) - 1) LOCATE 22, POS(0) - 1 PRINT " "; LOCATE 22, POS(0) - 1 GOTO GETCHR: END IF CH$ = UCASE$(CH$) IF CH$ <> "/" AND (CH$ < "0" OR CH$ > "Z") THEN GOTO GETCHR: ST$ = ST$ + CH$ IF CH$ < "A" THEN NUM = NUM + 1 IF CH$ = "/" THEN NUM = NUM - 1 CHH$ = CH$: GOSUB PRCH: GOTO GETCHR: PRCH: PRINT " "; : LOCATE 22, POS(0) - 3 PRINT CHH$; CO = POS(0) IF POS(0) > 77 THEN LOCATE 22, 10: PRINT " "; : LOCATE 22, 10 RETURN PARSE: IF LEN(ST$) > 0 AND (NUM = 0 OR (LEN(ST$) = 3 AND NUM = 1)) THEN RPT$ = ST$ IF RPT$ = "SOUND" THEN HZ = HZ1: RPT$ = "" IF RPT$ = "NOSOUND" THEN HZ = 1: RPT$ = "" IF LEN(RPT$) > 20 THEN RPT$ = LEFT$(RPT$, 20) ST$ = "" IF LEN(RPT$) > 1 THEN GOSUB MULTCK: IF CH$ = CHR$(13) AND ((RPT$ > "") AND (NR1$ > "") AND (CALL1$ > "")) THEN RETURN ELSE GOTO NEXTIN: END IF IF NUM = LEN(ST$) AND LEN(ST$) > 0 THEN NR1$ = ST$ IF LEN(NR1$) > 4 THEN NR1$ = LEFT$(NR1$, 4) ST$ = "" IF CH$ = CHR$(13) AND (RPT$ > "") AND (NR1$ > "") AND (CALL1$ > "") THEN RETURN ELSE GOTO NEXTIN: END IF IF NUM > 0 AND NUM < LEN(ST$) THEN CALL1$ = ST$: ST$ = "" IF LEN(CALL1$) > 10 THEN CALL1$ = LEFT$(CALL1$, 10) CAL$ = CALL1$ GOSUB DUPECK: IF MODE = 0 AND ACTIVE = 1 THEN MORSE$ = CAL$ + " " GOSUB 9900 GOSUB F2: END IF IF CH$ = CHR$(13) AND (RPT$ > "") AND (NR1$ > "") AND (CALL1$ > "") THEN RETURN ELSE GOTO NEXTIN: END IF GOTO NEXTIN: DISPLTIME: TIM$ = TIME$ RO = CSRLIN: CO = POS(0) LOCATE 4, 33: COLOR WHITE, BLUE PRINT TIM$ LOCATE RO, CO RETURN 8998 LOCATE 25, 1: FOR K = 1 TO 79: PRINT " "; : NEXT K: RETURN 9100 ' CHANGE CW SPEED 9110 RO = CSRLIN: CO = POS(0): COLOR LGREEN 9120 WPM = WPM + 2 9130 LOCATE 1, 1: PRINT "CW speed "; USING "###"; WPM 9150 COLOR WHITE: LOCATE RO, CO: RETURN 9160 RO = CSRLIN: CO = POS(0): COLOR LGREEN 9170 WPM = WPM - 2: IF WPM < 6 THEN WPM = 6 9180 LOCATE 1, 1: PRINT "CW speed "; USING "###"; WPM 9190 COLOR WHITE: LOCATE RO, CO RETURN AF1: ' CHANGE BAND RO1 = CSRLIN: CO1 = POS(0) COLOR1 = FLGREEN: BANDCH = 0 GOSUB PRTBAND: CHBAND1: CH$ = INKEY$ IF CH$ = "" THEN GOTO CHBAND1: IF LEN(CH$) = 2 THEN IF ASC(LEFT$(CH$, 1)) = 0 AND ASC(RIGHT$(CH$, 1)) = 75 THEN BANDCH = 1 IF ASC(LEFT$(CH$, 1)) = 0 AND ASC(RIGHT$(CH$, 1)) = 77 THEN BANDCH = 1 IF ASC(LEFT$(CH$, 1)) = 0 AND ASC(RIGHT$(CH$, 1)) = 72 THEN BANDCH = 2 IF ASC(LEFT$(CH$, 1)) = 0 AND ASC(RIGHT$(CH$, 1)) = 80 THEN BANDCH = 3 GOTO CHBAND2: END IF IF ASC(CH$) = 52 OR ASC(CH$) = 54 THEN BANDCH = 1 IF ASC(CH$) = 56 THEN BANDCH = 2 IF ASC(CH$) = 50 THEN BANDCH = 3 CHBAND2: IF ASC(CH$) <> 13 AND BANDCH < 1 THEN GOTO CHBAND1: IF BANDCH = 1 THEN IF MODE$ = "CW" THEN MODE$ = "PH" ELSE MODE$ = "CW" GOSUB PRTBAND: BANDCH = 0 END IF IF BANDCH = 2 THEN IF BAND$ = "16" THEN BAND$ = " 2": GOTO CHBAND3: IF BAND$ = "80" THEN BAND$ = "16": GOTO CHBAND3: IF BAND$ = "40" THEN BAND$ = "80": GOTO CHBAND3: IF BAND$ = "20" THEN BAND$ = "40": GOTO CHBAND3: IF BAND$ = "15" THEN BAND$ = "20": GOTO CHBAND3: IF BAND$ = "10" THEN BAND$ = "15": GOTO CHBAND3: IF BAND$ = " 6" THEN BAND$ = "10": GOTO CHBAND3: IF BAND$ = " 2" THEN BAND$ = " 6" CHBAND3: GOSUB PRTBAND: BANDCH = 0 END IF IF BANDCH = 3 THEN IF BAND$ = "16" THEN BAND$ = "80": GOTO CHBAND4: IF BAND$ = "80" THEN BAND$ = "40": GOTO CHBAND4: IF BAND$ = "40" THEN BAND$ = "20": GOTO CHBAND4: IF BAND$ = "20" THEN BAND$ = "15": GOTO CHBAND4: IF BAND$ = "15" THEN BAND$ = "10": GOTO CHBAND4: IF BAND$ = "10" THEN BAND$ = " 6": GOTO CHBAND4: IF BAND$ = " 6" THEN BAND$ = " 2": GOTO CHBAND4: IF BAND$ = " 2" THEN BAND$ = "16" CHBAND4: GOSUB PRTBAND: BANDCH = 0 END IF IF ASC(CH$) <> 13 THEN GOTO CHBAND1: COLOR1 = LGREEN: GOSUB PRTBAND: GOSUB 790 GOTO 8000 RETURN PRTBAND: IF BAND$ = "16" AND MODE$ = "CW" THEN COLOR COLOR1 ELSE COLOR GREEN LOCATE 3, 71: PRINT USING "####"; TOT(1); IF BAND$ = "80" AND MODE$ = "CW" THEN COLOR COLOR1 ELSE COLOR GREEN LOCATE 4, 71: PRINT USING "####"; TOT(2); IF BAND$ = "40" AND MODE$ = "CW" THEN COLOR COLOR1 ELSE COLOR GREEN LOCATE 5, 71: PRINT USING "####"; TOT(3); IF BAND$ = "20" AND MODE$ = "CW" THEN COLOR COLOR1 ELSE COLOR GREEN LOCATE 6, 71: PRINT USING "####"; TOT(4); IF BAND$ = "15" AND MODE$ = "CW" THEN COLOR COLOR1 ELSE COLOR GREEN LOCATE 7, 71: PRINT USING "####"; TOT(5); IF BAND$ = "10" AND MODE$ = "CW" THEN COLOR COLOR1 ELSE COLOR GREEN LOCATE 8, 71: PRINT USING "####"; TOT(6); IF BAND$ = " 6" AND MODE$ = "CW" THEN COLOR COLOR1 ELSE COLOR GREEN LOCATE 9, 71: PRINT USING "####"; TOT(7); IF BAND$ = " 2" AND MODE$ = "CW" THEN COLOR COLOR1 ELSE COLOR GREEN LOCATE 10, 71: PRINT USING "####"; TOT(8); IF BAND$ = "16" AND MODE$ = "PH" THEN COLOR COLOR1 ELSE COLOR GREEN LOCATE 3, 76: PRINT USING "####"; TOT(9); IF BAND$ = "80" AND MODE$ = "PH" THEN COLOR COLOR1 ELSE COLOR GREEN LOCATE 4, 76: PRINT USING "####"; TOT(10); IF BAND$ = "40" AND MODE$ = "PH" THEN COLOR COLOR1 ELSE COLOR GREEN LOCATE 5, 76: PRINT USING "####"; TOT(11); IF BAND$ = "20" AND MODE$ = "PH" THEN COLOR COLOR1 ELSE COLOR GREEN LOCATE 6, 76: PRINT USING "####"; TOT(12); IF BAND$ = "15" AND MODE$ = "PH" THEN COLOR COLOR1 ELSE COLOR GREEN LOCATE 7, 76: PRINT USING "####"; TOT(13); IF BAND$ = "10" AND MODE$ = "PH" THEN COLOR COLOR1 ELSE COLOR GREEN LOCATE 8, 76: PRINT USING "####"; TOT(14); IF BAND$ = " 6" AND MODE$ = "PH" THEN COLOR COLOR1 ELSE COLOR GREEN LOCATE 9, 76: PRINT USING "####"; TOT(15); IF BAND$ = " 2" AND MODE$ = "PH" THEN COLOR COLOR1 ELSE COLOR GREEN LOCATE 10, 76: PRINT USING "####"; TOT(16); RETURN AF2: RETURN AF3: RETURN AF5: 9200 ' ALT-F5 KEY HIT - FIX THE LAST CALL RO = CSRLIN: CO = POS(0) LOCATE 15, 4: LINE INPUT ; "correct call: "; DUMMY$ DUMMY$ = UCASE$(DUMMY$) IF LEN(DUMMY$) < 3 THEN 9280 I = I - 1: GOSUB ALTERIN: CAL$ = DUMMY$ GOSUB 300: DUPE = 0 FOR J = 1 TO 100 IF CAL$ = Z$(J, A) THEN J = 100: PRINT " dupe "; : DUPE = 1 NEXT J IF DUPE = 0 THEN DUPE$ = "0" ELSE DUPE$ = "1" GOSUB 1700: I = I + 1 LOCATE 13, 15: PRINT " "; : LOCATE 13, 15: PRINT CAL$; : PRINT " "; 9280 LOCATE 15, 4: PRINT " "; GOSUB 8850: COLOR WHITE: LOCATE RO, CO GOSUB ALTEROUT: RETURN AF6: ' ALT-F6 KEY HIT - FIX QSO NUMBER RO = CSRLIN: CO = POS(0): LOCATE 15, 22 LINE INPUT ; "correct Nr:"; DUMMY$ IF LEN(DUMMY$) < 1 THEN 9040 I = I - 1: GOSUB ALTERIN: HISNR$ = DUMMY$ GOSUB 1700: I = I + 1 LOCATE 13, 30: PRINT HISNR$; " "; 9040 LOCATE 15, 22: PRINT " "; GOSUB 8850: LOCATE RO, CO GOSUB ALTEROUT: RETURN ALTERIN: DUMMY1$ = CAL$: DUMMY2$ = RPT$: DUMMY3$ = HISNR$ GET #1, I CAL$ = C$: HISNR$ = N$: TIMEE$ = T$: RPT$ = S$: DUPE$ = P$ RETURN ALTEROUT: CAL$ = DUMMY1$: RPT$ = DUMMY2$: HISNR$ = DUMMY3$ RETURN AF7: ' ALT-F7 KEY HIT - FIX QTH RO = CSRLIN: CO = POS(0): LOCATE 15, 30 LINE INPUT ; "correct QTH:"; DUMMY$: DUMMY$ = UCASE$(DUMMY$) IF LEN(DUMMY$) < 2 THEN 9090 I = I - 1: GOSUB ALTERIN: RPT$ = DUMMY$ GOSUB 1700: I = I + 1 LOCATE 13, 43: PRINT RPT$; " "; 9090 LOCATE 15, 30: PRINT " "; GOSUB 8850: COLOR WHITE: LOCATE RO, CO: GOSUB ALTEROUT: RETURN AF8: ENDIT = 1: ' ALT-F8 KEY HIT I = I - 1 RETURN AF9: CHMODE: ' ALT-F9 KEY HIT - CHANGE MODE RO = CSRLIN: CO = POS(0): LOCATE 1, 27: COLOR WHITE IF MODE = 0 THEN 9360 MODE = 0: PRINT " RUN mode "; LOCATE RO, CO: COLOR WHITE: RETURN 9360 MODE = 1: PRINT " Hunt and Pounce mode "; LOCATE RO, CO: COLOR WHITE RETURN EXCHANGE: TAU = 1 IF MODE = 0 AND (CH$ = "`" OR CH$ = "[") THEN MORSE$ = CAL$ + " ": GOSUB 9900: GOSUB F2: IF MODE = 0 AND (CH$ = "\" OR CH$ = "]") THEN MORSE$ = "TU QRZ": GOSUB 9900: GOSUB F4: IF MODE = 1 AND (CH$ = "`" OR CH$ = "[") THEN MORSE$ = "R ": GOSUB 9900: GOSUB F2: TAU = 0 RETURN AUTOCW: RO = CSRLIN: CO = POS(0) LOCATE 3, 2: COLOR GREEN IF ACTIVE = 1 THEN ACTIVE = 0 ELSE ACTIVE = 1 IF ACTIVE = 1 THEN PRINT "exchange ON " ELSE PRINT "exchange OFF" LOCATE RO, CO, 1: COLOR WHITE RETURN F1: ' F1 KEY HIT IF MODE$ = "PH" THEN RETURN MORSE$ = F1$ GOSUB 9900 RETURN SF1: ' CHANGE F1 KEY RO = CSRLIN: CO = POS(0) SCREEN , , 2, 2: COLOR WHITE, BLUE: CLS LOCATE 8, 25: PRINT "New CW string for F1 : "; LINE INPUT ; DUMMY$ IF LEN(DUMMY$) > 0 THEN F1$ = DUMMY$ F3LOC = 3: GOSUB STOREF: END IF CLS : SCREEN , , 0, 0 GOSUB CWPROMPT: LOCATE RO, CO RETURN F2: ' F2 KEY HIT IF MODE$ = "PH" THEN RETURN IF CALL1$ = "" THEN M = I - 1 ELSE M = I MORSE$ = "" IF M > 999 THEN MM = INT(M / 1000): MORSE$ = MORSE$ + CHR$(MM + 48): M = M - 1000 * MM IF M > 99 THEN MM = INT(M / 100): MORSE$ = MORSE$ + CHR$(MM + 48): M = M - 100 * MM ELSE MORSE$ = MORSE$ + "0" IF M > 9 THEN MM = INT(M / 10): MORSE$ = MORSE$ + CHR$(MM + 48): M = M - 10 * MM ELSE MORSE$ = MORSE$ + "0" MORSE$ = MORSE$ + CHR$(48 + M) MORSE$ = MORSE$ + " " + F2$ 'IF ACTIVE = 1 THEN MORSE$ = CALL1$ + " " + MORSE$ GOSUB 9900 RETURN SF2: ' CHANGE F2 KEY - QTH RO = CSRLIN: CO = POS(0) SCREEN , , 2, 2: COLOR WHITE, BLUE: CLS LOCATE 8, 25: PRINT "New QTH string for F2: "; LINE INPUT ; DUMMY$ IF LEN(DUMMY$) > 0 THEN F2$ = DUMMY$ F3LOC = 4: GOSUB STOREF: END IF CLS : SCREEN , , 0, 0: GOSUB CWPROMPT: LOCATE RO, CO RETURN F3: ' F3 KEY HIT IF MODE$ = "PH" THEN RETURN MORSE$ = F3$ GOSUB 9900 RETURN SF3: ' CHANGE F3 KEY RO = CSRLIN: CO = POS(0) SCREEN , , 2, 2: COLOR WHITE, BLUE: CLS LOCATE 8, 25: PRINT "New CW string for F3: "; LINE INPUT ; DUMMY$ IF LEN(DUMMY$) > 0 THEN F3$ = DUMMY$ F3LOC = 5: GOSUB STOREF: END IF CLS : SCREEN , , 0, 0: GOSUB CWPROMPT: LOCATE RO, CO RETURN F4: ' F4 KEY HIT IF MODE$ = "PH" THEN RETURN MORSE$ = F4$ GOSUB 9900 RETURN SF4: ' CHANGE F4 KEY RO = CSRLIN: CO = POS(0) SCREEN , , 2, 2: COLOR WHITE, BLUE: CLS LOCATE 8, 25: PRINT "New CW string for F4: "; LINE INPUT ; DUMMY$ IF LEN(DUMMY$) > 0 THEN F4$ = DUMMY$ F3LOC = 6: GOSUB STOREF: END IF CLS : SCREEN , , 0, 0 GOSUB CWPROMPT: LOCATE RO, CO RETURN F5: ' F5 KEY HIT - SEND IF MODE$ = "PH" THEN RETURN MORSE$ = CAL$ GOSUB 9900 RETURN SF5: RETURN F6: ' F6 KEY HIT IF MODE$ = "PH" THEN RETURN MORSE$ = F6$ GOSUB 9900 RETURN SF6: ' CHANGE F6 KEY RO = CSRLIN: CO = POS(0) SCREEN , , 2, 2: COLOR WHITE, BLUE: CLS LOCATE 8, 25: PRINT "New CW string for F6: "; LINE INPUT ; DUMMY$ IF LEN(DUMMY$) > 0 THEN F6$ = DUMMY$ F3LOC = 8: GOSUB STOREF: END IF CLS : SCREEN , , 0, 0 GOSUB CWPROMPT: LOCATE RO, CO RETURN F7: ' F7 KEY HIT IF MODE$ = "PH" THEN RETURN MORSE$ = F7$ GOSUB 9900 RETURN SF7: ' CHANGE F7 KEY RO = CSRLIN: CO = POS(0) SCREEN , , 2, 2: COLOR WHITE, BLUE: CLS LOCATE 8, 25: PRINT "New CW string for F7: "; LINE INPUT ; DUMMY$ IF LEN(DUMMY$) > 0 THEN F7$ = DUMMY$ F3LOC = 9: GOSUB STOREF: END IF CLS : SCREEN , , 0, 0 GOSUB CWPROMPT: LOCATE RO, CO RETURN F8: ' F8 KEY HIT IF MODE$ = "PH" THEN RETURN MORSE$ = F8$ GOSUB 9900 RETURN SF8: ' CHANGE F8 KEY RO = CSRLIN: CO = POS(0) SCREEN , , 2, 2: COLOR WHITE, BLUE: CLS LOCATE 8, 25: PRINT "New CW string for F8: "; LINE INPUT ; DUMMY$ IF LEN(DUMMY$) > 0 THEN F8$ = DUMMY$ F3LOC = 10: GOSUB STOREF: END IF CLS : SCREEN , , 0, 0 GOSUB CWPROMPT: LOCATE RO, CO RETURN F9: ' F9 KEY HIT IF MODE$ = "PH" THEN RETURN MORSE$ = F9$ GOSUB 9900 RETURN SF9: ' CHANGE F9 KEY RO = CSRLIN: CO = POS(0) SCREEN , , 2, 2: COLOR WHITE, BLUE: CLS LOCATE 8, 25: PRINT "New CW string for F9: "; LINE INPUT ; DUMMY$ IF LEN(DUMMY$) > 0 THEN F9$ = DUMMY$ F3LOC = 11: GOSUB STOREF: END IF CLS : SCREEN , , 0, 0 GOSUB CWPROMPT: LOCATE RO, CO RETURN F10: ' F10 KEY HIT IF MODE$ = "PH" THEN RETURN MORSE$ = F10$ GOSUB 9900 RETURN SF10: ' CHANGE F10 KEY RO = CSRLIN: CO = POS(0) SCREEN , , 2, 2: COLOR WHITE, BLUE: CLS LOCATE 8, 25: PRINT "New CW string for F10: "; LINE INPUT ; DUMMY$ IF LEN(DUMMY$) > 0 THEN F10$ = DUMMY$ F3LOC = 12: GOSUB STOREF: END IF CLS : SCREEN , , 0, 0 GOSUB CWPROMPT: LOCATE RO, CO RETURN 9800 ' SET UP MORSE CONDITIONS 9810 NUMCODES = 49: SOFF = 32767 IA = 0: A$ = TIME$ LOOP1: IF A$ = TIME$ THEN GOTO LOOP1: A$ = TIME$ LOOP2: IF A$ = TIME$ THEN IA = IA + 1: GOTO LOOP2: ' END IF 9820 RESTORE 9840: FOR K = 1 TO NUMCODES: READ CODES$(K): NEXT K 9840 DATA ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "...." 9841 DATA "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--." 9842 DATA "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-" 9843 DATA "-.--", "--.." 9844 DATA "-----", ".----", "..---", "...--", "....-", "....." 9845 DATA "-....", "--...", "---..", "----." 9846 DATA ".-.-.-", "--..--", "-..-.", "..--..", "-...-", "-.--.-" 9847 DATA ".-..-.", "---...", ".---.", "-.-.-.", "........", ".-.-.", "...-.-" GOSUB PRACSPEED: 9890 DEF FNUPPER (A$) = "A" <= A$ AND A$ <= "Z" 9892 DEF FNDIGIT (A$) = "0" <= A$ AND A$ <= "9" 9898 RETURN PRACSPEED: DIT = 22 / WPM DAH = 3 * DIT CS = 2.5 * DIT WS = 6 * DIT RETURN 9900 ' SEND MORSE STRING - MORSE$ 9904 IF MODE$ = "PH" THEN RETURN QRZ$ = LEFT$(MORSE$, 2) IF QRZ$ = "CQ" OR QRZ$ = "QR" OR QRZ$ = "TU" THEN MODE = 1: GOSUB CHMODE: IF LEFT$(MORSE$, LEN(ME$)) = ME$ THEN MODE = 0: GOSUB CHMODE: IF HZ < 38 THEN GOTO SERIAL: GOSUB PRACSPEED: 9910 FOR M = 1 TO LEN(MORSE$) 9912 CH$ = INKEY$ IF CH$ <> "" THEN IF ASC(RIGHT$(CH$, 1)) = 72 THEN GOSUB 9110: GOSUB PRACSPEED: IF ASC(RIGHT$(CH$, 1)) = 80 THEN GOSUB 9160: GOSUB PRACSPEED: IF CH$ = Q$ THEN RETURN GOTO 9912 END IF 9915 A$ = MID$(MORSE$, M, 1) 9920 IF " " = A$ THEN SOUND SOFF, WS: GOTO 9990 9921 IF "/" = A$ THEN MORSE = 39: GOTO 9950 9922 IF "," = A$ THEN MORSE = 38: GOTO 9950 9923 IF "." = A$ THEN MORSE = 37: GOTO 9950 9925 IF "?" = A$ THEN MORSE = 40: GOTO 9950 9930 IF FNUPPER(A$) THEN MORSE = ASC(A$) - ASC("A") + 1: GOTO 9950 9932 IF FNDIGIT(A$) THEN MORSE = ASC(A$) - ASC("0") + 27: GOTO 9950 9940 A$ = " ": GOTO 9920 9950 FOR MI = 1 TO LEN(CODES$(MORSE)) 9960 IF MID$(CODES$(MORSE), MI, 1) = "." THEN SOUND HZ, DIT: SOUND SOFF, DIT 9970 IF MID$(CODES$(MORSE), MI, 1) = "-" THEN SOUND HZ, DAH: SOUND SOFF, DIT 9980 NEXT MI: SOUND SOFF, CS 9990 NEXT M: SOUND SOFF, WS: RETURN SERSPEED: DIT = 1.3 * (IA / WPM) DAH = 3 * DIT CS = DIT * 3 WS = DIT * 5 RETURN SETSER: SCREEN , , 2, 2 COLOR WHITE, BLUE: IF PORTA = 0 THEN PORTA = 1 CLS : LOCATE 8, 25: PRINT "present port selection is: COM"; : PRINT PORTA; LOCATE 10, 25: PORTB = PORTA INPUT "Serial port for CW"; PORTA IF PORTA = 0 THEN PORTA = PORTB LOCATE 12, 25 IF PORTA <= 1 THEN PORT = 1020: PRINT "COM1 selected"; IF PORTA = 2 THEN PORT = 764: PRINT "COM2 selected"; IF PORTA = 3 THEN PORT = 1004: PRINT "COM3 selected"; IF PORTA > 3 THEN PORT = 748: PRINT "COM4 selected"; FOR ABCD = 1 TO 3 DUMMY$ = TIME$ 9989 IF DUMMY$ = TIME$ THEN GOTO 9989 NEXT ABCD SCREEN , , 0, 0 RETURN SERIAL: IF PORT < 634 THEN PORT = 1020 REM: NOTE: COM1=1020; COM2=764; COM3=1004; COM4=748 REM: LPT1= 890; LPT2=634 GOSUB SERSPEED: FOR AM = 1 TO LEN(MORSE$) A$ = MID$(MORSE$, AM, 1) IF FNUPPER(A$) THEN MORSE = ASC(A$) - ASC("A") + 1 IF FNDIGIT(A$) THEN MORSE = ASC(A$) - ASC("0") + 27 IF "/" = A$ THEN MORSE = 39 IF "," = A$ THEN MORSE = 38 IF "." = A$ THEN MORSE = 37 IF "?" = A$ THEN MORSE = 40 IF LEN(CODES$(MORSE)) < 1 OR A$ = " " THEN FOR J = 1 TO WS: A$ = TIME$: NEXT J ELSE FOR MI = 1 TO LEN(CODES$(MORSE)) 9998 CH$ = INKEY$ IF CH$ <> "" THEN IF CH$ = CHR$(27) THEN M = LEN(MORSE$): MI = LEN(CODES$(MORSE)): RETURN IF ASC(RIGHT$(CH$, 1)) = 72 THEN GOSUB 9110: GOSUB SERSPEED: IF ASC(RIGHT$(CH$, 1)) = 80 THEN GOSUB 9160: GOSUB SERSPEED: GOTO 9998 END IF IF MID$(CODES$(MORSE), MI, 1) = "." THEN OUT PORT, 1 FOR J = 1 TO DIT: A$ = TIME$: NEXT J OUT PORT, 2 FOR J = 1 TO DIT: A$ = TIME$: NEXT J END IF IF MID$(CODES$(MORSE), MI, 1) = "-" THEN OUT PORT, 1 FOR J = 1 TO DAH: A$ = TIME$: NEXT J OUT PORT, 2 FOR J = 1 TO DIT: A$ = TIME$: NEXT J END IF NEXT MI FOR J = 1 TO CS: A$ = TIME$: NEXT J END IF NEXT AM RETURN