I feel like I’m swimming with a heavy bag of poorly coded bits across the finish line. Did I jump into the pool without knowing how deep the water is? Probably, but it’s too late now. I did manage to get most of my goals working! But I suspect that feature creep happens to most people who try to make anything. Wouldn’t this be neat? If it does that then it should do this other thing over here, too. Hey, maybe with just a few more lines it could REALLY be cool!
(Big sigh and let out a deep breath)………………………………………………..
This challenge has been great fun with all the frustration that real software developers must face every day. (It makes me feel better to think that’s true.)
Here’s a poor video. (My first video ever uploaded. It’s poor in quality and I’ll get a better one up later this weekend.)
Code is below the video….
5 REM CONTEST LOG-CHARLES MOORE N5ATD FROM 73 MAGAZINE APRIL 1984 – SEARCH ARCHIVE.ORG
7 REM FD MODS BY RICHARD GORDON KD0RG TO ADD BAND AND MODE FEATURES
10 DIM URC$(10),CALL$(14255),C$(10),QSO$(20),HOLD$(10),CLASS$(3),SECTION$(3),FILE$(11),D$(14)
12 DIM BND$(3),CBM$(14), BAND$(3),MODE$(1),TEST$(20)
15 GOTO 880
19 GRAPHICS 2
20 GOSUB 520:GOOD=0
30 FOR Z=1 TO 40:CALL$(Z,Z)=” “:NEXT Z
31 BAND$(1,3)=” 20″:BND$(1,3)=”20″:MODE$=”P”
35 TRAP 65:CLOSE #1
36 SETCOLOR 0,8,7:SETCOLOR 1,1,14:SETCOLOR 2,12,6
40 POSITION 1,2:? #6;” input callsign: “;
45 POSITION 1,4:? #6;”*****************”;
50 POSITION 1,5:? #6;”* *”;
55 POSITION 1,6:? #6;”* *”;
60 POSITION 1,7:? #6;”*****************”;
62 POSITION 2,8:? #6;”band=”;BAND$;” mode=”;MODE$
65 POSITION 0,0:? #6;”WORKED=”;GOOD
70 ? ” “;
75 IF GOOD=0 THEN CALL$=””:C$=””
80 IF GOOD=750 THEN 330
85 ? “Enter CALLSIGN (up to 10 characters)”:?:?” or QSY QSOS MENU PRINTER”
90 INPUT C$:IF LEN(C$)=0 THEN 70
95 HOLD$=” ”
100 HOLD$(1,LEN(C$))=C$(1,LEN(C$))
105 POSITION 3,5:? #6;” “;
110 POSITION 3,6:? #6;” “;
115 ? ” “;
120 POSITION 3,5
125 ? #6;C$;
129 IF C$=”QSY” THEN 650
130 IF C$=”QSOS” THEN 415
132 IF C$=”SEC” THEN 600
135 IF C$=”MENU” THEN 330
140 IF C$=”PRINTER” THEN 490
141 IF C$=”BONUS1″ THEN GOTO 1100
142 IF C$=”BONUS2″ THEN GOTO 1200
143 IF C$=”BONUS3″ THEN GOTO 1300
144 REM IF C$=”INTRO” THEN GOTO 1000
149 IF GOOD=0 THEN GOSUB 280:GOTO 40
150 GOSUB 155
151 IF GOOD=BONUS THEN 1100
152 IF GOOD=BONUS*2 THEN 1200
153 IF GOOD=BONUS*3 THEN 1300
154 GOTO 40
155 CBM$(1,LEN(BND$))=BND$(1,LEN(BND$)):CBM$(LEN(BND$)+1)=MODE$:CBM$(LEN(BND$)+2,LEN(BND$)+2+LEN(C$))=C$(1,LEN(C$))
158 CBM$(LEN(BND$)+LEN(C$)+2)=” ”
160 LY=LEN(CALL$):LX=LEN(CBM$):POKE 207,LX-1
165 B=LY-LX-1+3
170 A=USR(1664,ADR(CALL$(1)),ADR(CBM$),B)
175 IF A=0 THEN 190
180 POSITION 6,6:? #6;”dupe!”;:S=240:W=4:GOSUB 700:GOTO 65
185 IF HOLD$(1,10)=CALL$(LEN(CALL$)-15,LEN(CALL$)-6) THEN 180
190 COLOR 3:POSITION 6,6:? #6;”good!!”;
195 S=50:W=2:GOSUB 700
200 POSITION 1,2:? #6;” continue? “;:? ” “:? ” “:? ” CONTINUE QSO? (ENTER / N)”;:OPEN #1,4,0,”K:”
205 GET #1,T:CLOSE #1:? ” “:IF T=155 THEN 220
210 IF CHR$(T)=”N” THEN 278
215 GOTO 200
220 CS=20*GOOD+1
225 CALL$(CS,CS+19)=” ”
230 GOSUB 800
265 POSITION 1,2:? #6;”press enter to log”;:? “PRESS ENTER TO LOG QSO, A TO ABORT”:OPEN #1,4,0,”K:”
267 GET #1,Q:CLOSE #1:? ” “:IF Q=155 THEN 276
268 IF Q=65 OR 97 THEN 278
270 GOTO 265
276 CALL$(CS,CS+19)=QSO$(1,20)
277 GOOD=GOOD+1:S=50:W=2:GOSUB 700:GOTO 279
278 S=240:W=2:GOSUB 700
279 RETURN
280 POSITION 1,2:? #6;” continue? “;:?:? ” CONTINUE QSO? (ENTER / N)”;:?:OPEN #1,4,0,”K:”
300 GET #1,T:CLOSE #1:? ” “:IF T=155 THEN 315
305 IF CHR$(T)=”N” THEN 328
310 GOTO 200
315 GOSUB 800
320 POSITION 1,2:? #6;” enter to log “;:? “PRESS ENTER TO LOG QSO, A TO ABORT”:OPEN #1,4,0,”K:”
321 GET #1,T:CLOSE #1:IF T=155 THEN 326
322 IF T=65 OR 97 THEN 328
325 GOTO 320
326 CALL$(1,20)=QSO$(1,20)
327 S=50:W=2:GOOD=GOOD+1:GOSUB 700:GOTO 329
328 S=240:W=2:GOSUB 700
329 RETURN
330 GRAPHICS 0:CLOSE #1:TRAP 330
335 GOTO 355
340 ? “INPUT FILE NAME ex: ‘BAND10′”:?
343 FILE$=” ”
346 INPUT FILE$:IF LEN(FILE$)=0 THEN 340
350 RETURN
355 D$=” ”
360 OPEN #1,4,0,”K:”
365 ? ” DISK, CASS, OR H1 ?”:GET #1,Z
370 IF Z=68 THEN D$(1,2)=”D:”:GOSUB 340:GOTO 585
375 IF Z=72 THEN D$(1,3)=”H1:”:GOSUB 340:GOTO 586
376 IF Z=67 THEN D$(1,2)=”C:”:GOTO 385
380 GOTO 330
385 ? ” “:? ” SAVE LOAD QUIT”:GET #1,Z
390 IF Z=81 THEN GRAPHICS 2:GOTO 35
400 IF Z=83 THEN CLOSE #1:GOSUB 510:OPEN #1,8,0,D$:GOTO 450
405 IF Z=76 THEN CLOSE #1:GOSUB 510:OPEN #1,4,0,D$:GOTO 475
410 GOTO 330
415 IF GOOD=0 THEN GRAPHICS 2:GOTO 35
420 GRAPHICS 0
421 ? “# BND MD CALL CLS SEC”
425 FOR Z=0 TO GOOD-1:CS=(20*Z)+1
430 QSO$=CALL$(CS,CS+19)
435 POSITION 2,Z+1
436 ? Z+1;” “;QSO$(1,3);” “;QSO$(4,4);” “;QSO$(5,14);” “;QSO$(15,17);” “;QSO$(18,20)
437 NEXT Z
445 FOR Z=1 TO 100*(GOOD+3):NEXT Z:GRAPHICS 2:GOTO 35
450 IF GOOD=0 THEN ? “NOTHING TO SAVE”:FOR Z=1 TO 700:NEXT Z:GOTO 35
455 PRINT #1,GOOD
460 FOR Z=0 TO GOOD-1:CS=20*Z+1
465 TEST$=CALL$(CS,CS+19):? #1;TEST$:NEXT Z
470 TEST$=CALL$(LEN(CALL$)-19,LEN(CALL$)):? #1;TEST$:CLOSE #1:RUN
475 GOOD=0:INPUT #1,GOOD:FOR Z=0 TO GOOD:CS=20*Z+1
480 INPUT #1,TEST$:CALL$(CS,CS+19)=TEST$(1,20)
485 NEXT Z:GRAPHICS 2:GOTO 35
490 OPEN #1,8,0,”P:”:FOR Z=0 TO GOOD-1:CS=20*Z+1
495 TEST$=CALL$(CS,CS+19):? #1;TEST$:NEXT Z
500 ? #1;CALL$(LEN(CALL$)-19,LEN(CALL$))
505 CLOSE #1:GRAPHICS 2:GOTO 35
510 ? ” “:? “PREPARE DISK/CASSETTE”:? 😕 “PRESS RETURN”
515 INPUT TEST$:RETURN
520 FOR I=1664 TO 1755:READ A:POKE I,A:NEXT I:RETURN
525 DATA 104,104,133,204,104,133,203,104,133
530 DATA 206,104,133,205,104,141,222,6,104
535 DATA 141,221,6,169,1,133,212,169,0,133
540 DATA 213,160,255,200,177,203,209,205
545 DATA 240,40,24,165,203,105,1,133,203
550 DATA 165,204,105,0,133,204,24,165,212
555 DATA 105,1,133,212,165,213,105,0,133
560 DATA 213,205,222,6,208,216,165,212,205
565 DATA 221,6,208,209,240,7,152,197,207,208
570 DATA 204,240,6,169,0,133,212,133,213,96
585 D$(3,LEN(FILE$)+2)=FILE$(1,LEN(FILE$)):GOTO 385
586 D$(4,LEN(FILE$)+3)=FILE$(1,LEN(FILE$)):GOTO 385
600 GRAPHICS 0
605 ? “THE FOLLOWING SECTIONS ARE NEEDED”
610 ? ” ”
615 ? “THIS FUNCTION IS NOT AVAILABLE”
620 FOR Z=0 TO 200:NEXT Z
625 S=75:W=1:GOSUB 700
645 GRAPHICS 2:GOTO 35
650 ? ” “:? “INPUT BAND 2,6,10,15,20,40,80,or 160″:? ” ”
655 INPUT BND$
660 IF LEN(BND$)=0 THEN ? “HMMM, NOT SURE WHAT HAPPENED. TRY AGAIN.”:GOTO 650
665 IF LEN(BND$)=1 THEN BAND$(1,2)=” ”
670 IF LEN(BND$)=2 THEN BAND$(1,1)=” ”
675 BAND$(4-LEN(BND$),3)=BND$(1,LEN(BND$))
680 ? “INPUT MODE:”:?”C FOR CW P FOR PHONE D FOR DIGITAL”
685 INPUT MODE$
690 IF LEN(MODE$)<>1 THEN 680
695 GOTO 35
700 FOR X=1 TO W:FOR Z=1 TO 20:SOUND 0,S,10,2:NEXT Z:FOR Y=1 TO 5:SOUND 0,0,0,0:NEXT Y:NEXT X
710 RETURN
800 QSO$(1,20)=” ”
805 QSO$(1,3)=BAND$(1,3)
810 QSO$(4,4)=MODE$
815 QSO$(5,14)=HOLD$(1,10)
820 CLASS$(1,3)=” ”
823 POSITION 1,6:? #6;”* *”;
825 POSITION 1,2:? #6;” enter class for “;
826 ?:? “ENTER CLASS”;:?:INPUT CLASS$
830 IF LEN(CLASS$)=0 THEN 825
831 POSITION 5,6:? #6;CLASS$;
835 QSO$(18-LEN(CLASS$),17)=CLASS$(1,LEN(CLASS$))
840 SECTION$(1,3)=” ”
844 POSITION 1,2:? #6;”enter section for “;
845 ?:? “ENTER SECTION”;:?:INPUT SECTION$
850 IF LEN(SECTION$)=0 THEN 845
851 POSITION 11,6:? #6;SECTION$;
855 QSO$(21-LEN(SECTION$),20)=SECTION$(1,LEN(SECTION$))
860 ? ” “:? QSO$(1,3);” “;QSO$(4,4);” “;QSO$(5,14);” “;QSO$(15,17);” “;QSO$(18,20):? ” ”
865 RETURN
880 ? ” “:? “THIS IS THE ATARI FIELD DAY LOGGER”:?
883 ? “PLEASE ENTER YOUR CALLSIGN”:?
884 URC$=” ”
885 INPUT URC$:IF LEN(URC$)=0 THEN 880
886 ?:? “CORRECT? PRESS Y OR N”:OPEN #1,4,0,”K:”
890 GET #1,Q:CLOSE #1:? ” “:IF CHR$(Q)=”Y” THEN 893
891 IF CHR$(Q)=”N” THEN 883
892 GOTO 886
893 ?:? “A BONUS SCREEN WILL DISPLAY”:? ” AFTER A CERTAIN # OF QSOS.”:?
894 ? “HOW MANY CONTACTS FOR YOUR”:? ” 1ST BONUS GRAPHIC?”:?
896 INPUT BONUS
898 GOTO 19
1100 GRAPHICS 23
1105 SETCOLOR 4,8,2:SETCOLOR 2,0,11:SETCOLOR 1,15,13:SETCOLOR 0,12,9
1110 COLOR 2
1115 PLOT 120,55:DRAWTO 130,75:DRAWTO 125,75
1120 POKE 765,2:POSITION 120,60:XIO 18,#6,0,0,”S:”:PLOT 120,60
1125 POKE 765,3:POSITION 115,75:XIO 18,#6,0,0,”S:”:PLOT 115,75
1130 DRAWTO 110,75
1135 POKE 765,2:POSITION 119,56:XIO 18,#6,0,0,”S:”
1140 COLOR 1:PLOT 159,76:DRAWTO 131,76
1145 POKE 765,1:POSITION 126,65:XIO 18,#6,0,0,”S:”
1150 PLOT 114,65:DRAWTO 65,65:DRAWTO 40,50:PLOT 159,95:DRAWTO 0,95
1155 POKE 765,1:POSITION 0,65:XIO 18,#6,0,0,”S:”:PLOT 0,65
1160 POKE 765,1:POSITION 39,50:XIO 18,#6,0,0,”S:”
1165 COLOR 2:PLOT 80,70:DRAWTO 80,20:DRAWTO 81,20:DRAWTO 81,70
1170 COLOR 3:PLOT 1,60:DRAWTO 80,19:DRAWTO 81,19:DRAWTO 159,60
1175 FOR Z=1 TO 100:NEXT Z:GOSUB 1600
1180 FOR Z=1 TO 100:NEXT Z:GOSUB 1550
1185 GRAPHICS 2:GOTO 35
1200 GRAPHICS 23
1205 SETCOLOR 4,8,2:SETCOLOR 2,0,11:SETCOLOR 1,15,13:SETCOLOR 0,12,9
1210 COLOR 2
1215 PLOT 125,35:DRAWTO 150,55:DRAWTO 150,75:DRAWTO 138,75
1220 POKE 765,2:POSITION 135,60:XIO 18,#6,0,0,”S:”:PLOT 135,60
1225 POKE 765,2:POSITION 125,48:XIO 18,#6,0,0,”S:”:PLOT 125,48
1230 POKE 765,3:POSITION 115,60:XIO 18,#6,0,0,”S:”:PLOT 115,60
1235 POKE 765,3:POSITION 112,75:XIO 18,#6,0,0,”S:”:PLOT 112,75
1240 DRAWTO 100,75
1245 POKE 765,2:POSITION 100,55:XIO 18,#6,0,0,”S:”:PLOT 100,55
1250 POKE 765,2:POSITION 124,36:XIO 18,#6,0,0,”S:”
1255 COLOR 1:PLOT 151,95
1260 POKE 765,1:POSITION 151,65:XIO 18,#6,0,0,”S:”:PLOT 20,55
1265 DRAWTO 65,65:PLOT 159,95:DRAWTO 0,95
1270 POKE 765,1:POSITION 0,65:XIO 18,#6,0,0,”S:”:PLOT 0,65
1275 POKE 765,1:POSITION 20,55:XIO 18,#6,0,0,”S:”
1280 COLOR 2:PLOT 75,70:DRAWTO 78,5:DRAWTO 81,70
1285 COLOR 3:PLOT 1,35:DRAWTO 78,5:DRAWTO 159,35
1290 FOR Z=1 TO 100:NEXT Z:GOSUB 1600
1295 FOR Z=1 TO 100:NEXT Z:GOSUB 1550
1296 GRAPHICS 2:GOTO 35
1300 GRAPHICS 23
1306 SETCOLOR 4,8,2:SETCOLOR 2,0,11:SETCOLOR 1,15,13:SETCOLOR 0,12,9
1310 COLOR 1:PLOT 140,10:DRAWTO 150,40:DRAWTO 130,40:POKE 765,1:POSITION 139,11:XIO 18,#6,0,0,”S:”
1313 COLOR 3:PLOT 95,45:DRAWTO 105,55:DRAWTO 95,55:POKE 765,3:POSITION 95,46:XIO 18,#6,0,0,”S:”
1316 PLOT 85,52:DRAWTO 85,57:DRAWTO 80,57:POKE 765,3:POSITION 80,52:XIO 18,#6,0,0,”S:”
1320 PLOT 70,45:DRAWTO 70,55:DRAWTO 55,55:POKE 765,3:POSITION 55,45:XIO 18,#6,0,0,”S:”
1323 COLOR 2:PLOT 143,41:DRAWTO 143,50:DRAWTO 137,50:POKE 765,2:POSITION 137,41:XIO 18,#6,0,0,”S:”
1326 PLOT 106,55:DRAWTO 94,43:DRAWTO 95,43:DRAWTO 106,54:DRAWTO 106,68:DRAWTO 50,68
1330 POKE 765,2:POSITION 50,46:XIO 18,#6,0,0,”S:”:PLOT 50,46
1333 POKE 765,2:POSITION 53,43:XIO 18,#6,0,0,”S:”:PLOT 71,56
1336 POKE 765,2:POSITION 71,45:XIO 18,#6,0,0,”S:”:PLOT 86,58
1340 POKE 765,2:POSITION 86,52:XIO 18,#6,0,0,”S:”
1343 COLOR 1:PLOT 0,95:DRAWTO 159,95:PLOT 29,40:DRAWTO 49,50:PLOT 144,95
1346 POKE 765,1:POSITION 144,46:XIO 18,#6,0,0,”S:”:PLOT 0,46
1350 POKE 765,1:POSITION 29,41:XIO 18,#6,0,0,”S:”:PLOT 86,29:DRAWTO 112,42:DRAWTO 136,46
1353 PLOT 64,42:POKE 765,1:POSITION 85,30:XIO 18,#6,0,0,”S:”:PLOT 107,69
1356 POKE 765,1:POSITION 107,54:XIO 18,#6,0,0,”S:”:PLOT 107,54
1360 POKE 765,1:POSITION 95,42:XIO 18,#6,0,0,”S:”:DRAWTO 63,42
1363 COLOR 0:PLOT 88,68:DRAWTO 88,50:DRAWTO 77,50:DRAWTO 77,68:PLOT 79,60:PLOT 79,59
1366 FOR CR=1 TO 4:PLOT 65-CR,73-CR:DRAWTO 65+CR,73-CR:PLOT 95-CR,73-CR:DRAWTO 95+CR,73-CR:NEXT CR
1370 COLOR 2:PLOT 40,75:DRAWTO 40,15:DRAWTO 41,15:DRAWTO 41,75:PLOT 38,13:DRAWTO 42,17
1373 COLOR 3:PLOT 15,13:DRAWTO 61,13:PLOT 17,15:DRAWTO 63,15:PLOT 19,17:DRAWTO 39,17:PLOT 42,17:DRAWTO 65,17
1376 FOR Z=1 TO 100:NEXT Z:GOSUB 1600
1380 FOR Z=1 TO 100:NEXT Z:GOSUB 1550
1385 GRAPHICS 2:GOTO 35
1550 GRAPHICS 18:SETCOLOR 0,12,11:SETCOLOR 1,3,11:SETCOLOR 2,6,11:SETCOLOR 3,9,9
1555 ? #6;” ******************”:? #6;” * atari *”:? #6;” * field day *”
1560 ? #6;” * logger *”:? #6;” ******************”
1565 POSITION 3,6:? #6;URC$;”, you have”
1570 ? #6;” “;:? #6;GOOD;:? #6;” contacts ”
1571 ? #6;” “:? #6;” CQ FIELD DAY! ”
1575 FOR X=1 TO 4:SETCOLOR 0,3,11:SETCOLOR 1,6,9:SETCOLOR 2,9,11:SETCOLOR 3,12,8
1580 FOR Z=1 TO 50:NEXT Z:SETCOLOR 0,12,11:SETCOLOR 1,3,11
1585 FOR Z=1 TO 50:NEXT Z:NEXT X:RETURN
1600 FOR X= 1 TO 2
1605 GOSUB 1650:GOSUB 1660:GOSUB 1650:GOSUB 1660:GOSUB 1670
1610 GOSUB 1650:GOSUB 1650:GOSUB 1660:GOSUB 1650:GOSUB 1670
1615 GOSUB 1660:GOSUB 1660:GOSUB 1650:GOSUB 1660:GOSUB 1670
1620 GOSUB 1650:GOSUB 1660:GOSUB 1660:GOSUB 1670
1625 NEXT X
1630 RETURN
1650 S=52:V=15 :GOSUB 1700:REM DAH
1655 RETURN
1660 S=52:V=5 :GOSUB 1700:REM DIT
1665 RETURN
1670 S=0:V=10 :GOSUB 1700:REM WORD SPACE
1675 RETURN
1700 SETCOLOR 2,0,15
1710 FOR Z=1 TO V:SOUND 0,S,10,1:NEXT Z
1720 SETCOLOR 2,0,11
1730 FOR Y=1 TO 10:SOUND 0,0,0,0:NEXT Y
1740 RETURN