IMD 1.16: 29/05/2007 12:04:32 FOGCPM.013 --FOGCPM013MENU BASDOC BASDELUXQSLBAS& DELUXQSLDOC LOG BAS LOG DOC LOGFMT LOGPRINT OKIQSL BAS(SUPERDUPBASSUPERDUPDATSUPERDUPDOCTENTEN BASTENTEN DOCTIMEMACHBAS !"TIMEMACHDOC#QSO BAS$QSOEDIT BAS%&'QSOFIND BAS(QSOLIST BAS)QSOSCAN BAS*+,RTY COMt-./0123456789:;RTYCPM DOCB<=>?@ABCDRTY CFGEVERTICALBAS#FGHIJVHF-YAGEBASKLMVHFPROP BASNDIPOLE BASOPQORBIT BASRSTUVWXYZ[\]^_`aORBIT BAS]bcdefghijklm-12-00 85 CODE BAS noCONTEST BASpqrCOPY 'stuvwLOGBOOK BAS^xyz{|}~ORBITPRGBASDGPTR PASY-CPM013 DOC This is the disk name. 100 REM -- MENU program by Jim Woolley, FOG Diak Librarian, 8/82 110 CLEAR 120 DEFINT I-N 130 DIM PROG$(41) 140 FMT$="##. &" 150 INPUT"Press for MENU",NBR 160 PRINT CHR$(26); 170 RESTORE 180 I=0 190 WHILE PROG$(I)<>"NOMOREDATA" 200 I=I+1:READ PROG$(I) 210 WEND 220 LAST=I-1:ILAST=LAST 230 IF ILAST>19 THEN ILAST=20 240 FOR I=1 TO ILAST 250 PRINT USING FMT$;I;PROG$(I); 260 J=20+I 270 IF J>LAST THEN PRINT ELSE PRINT TAB(25);:PRINT USING FMT$;J;PROG$(J) 280 NEXT I 290 PRINT 300 INPUT"Enter program number (0 to quit): ",NBR 310 IF NBR=0 THEN END 320 IF NBR<1 OR NBR>LAST THEN 300 330 RUN PROG$(NBR) 340 REM -- Enter program filenames as DATA statements 350 DATA DOC,DELUXQSL,LOG,OKIQSL,SUPERDUP,TENTEN 355 DATA TIMEMACH 998 REM -- Next line must be last DATA statement 999 DATA NOMOREDATA DELUXQSL,LOG,OKIQSL,SUPERDUP,TENTEN 355 DATA TIMEMACH 998 REM5 PRINT 10 PRINT 20 PRINT "NOTE ANY OF THESE PROGRAMS REQUIRE A PRINTER BE" 30 PRINT "CONNECTED AND TURNED ON IN ORDER TO PROPERLY RUN" 40 RUN "MENU" "NOTE ANY OF THESE PROGRAMS REQUIRE A PRINTER BE" 30 PRINT "CONNECTED AND TURNED ON IN ORDER TO PR10 REM *** DELUXQSL.BAS *** May 13, 1984 20 REM SCREEN GRAPHICS FOR OSBORNE 1 LINES 30 - 220 30 PRINT CHR$(26) 40 WHILE A<>32:Z1=Z:READ Z,A:Z=Z1+Z:POKE Z+61440!,A:WEND 50 DATA 145,68,1,69,1,76,1,85,1,88,1,69,367,10,1,22,1,22,1,22,1,22 60 DATA 1,22,1,22,1,22,1,22,1,22,1,8,5,10,1,22,1,22,1,22,1,22,1,22 70 DATA 1,22,1,22,1,25,6,22,1,22,98,22,1,22,1,25,6,21,1,22,1,22 80 DATA 5,22,1,22,1,25,12,22,1,22,98,22,1,22,8,22,1,22,5,22,1,22 90 DATA 1,8,12,22,1,22,98,22,1,22,8,22,1,22,5,21,1,22,1,22,1,22 100 DATA 1,22,1,22,1,22,1,22,1,8,6,22,1,22,98,22,1,22,8,22,1,22 110 DATA 11,21,1,22,1,22,6,22,1,22,98,22,1,22,1,8,6,10,1,22,1,22 120 DATA 11,10,1,22,1,22,6,22,1,22,1,8,97,21,1,22,1,22,1,22,1,22 130 DATA 1,22,1,22,1,22,1,22,1,22,1,22,5,10,1,22,1,22,1,22,1,22 140 DATA 1,22,1,22,1,22,1,25,6,22,1,22,1,22,1,22,1,22,1,22,1,22 150 DATA 1,22,1,22,1,25,97,21,1,22,1,22,383,65,2,80,1,82,1,79,1,71 160 DATA 1,82,1,65,1,77,2,70,1,79,1,82,2,77,1,65,1,75,1,73,1,78 170 DATA 1,71,113,81,1,83,1,76,2,67,1,65,1,82,1,68,1,83,251,66,1,89 180 DATA 250,87,1,46,2,84,1,69,1,82,1,82,1,89,2,87,1,72,1,65,1,76 190 DATA 1,73,1,78,1,44,1,84,1,71,1,57,1,87,1,66,360,80,1,82,1,69 200 DATA 1,83,1,83,3,69,1,78,1,84,1,69,1,82,2,84,1,79,2,66,1,69 210 DATA 1,71,1,73,1,78,32,32 220 Y$=INPUT$(1) 230 PRINT CHR$(26) 240 PRINT: PRINT 250 PRINT " DELUXE QSL PROGRAM ":PRINT 260 PRINT "This is a program for personalizing QSL cards." 270 PRINT "Originally the program appeared in QST Magazine" 280 PRINT "and was written by Stan Horzepa, WA1LOU. It is" 290 PRINT "appears here in an extensively revised format. " 300 PRINT "Any bugs or revisions to this program would be" 310 PRINT "appreciated by the author, Terry Whalin, TG9WB " 320 PRINT "7500 W. Camp Wisdom Road, Dallas, TX 75236." 330 PRINT 340 PRINT "Note lines 990 - 1020 will have to be changed " 350 PRINT "to personalize the program with your call, name " 360 PRINT "and address. Edit these using the MBASIC editor." " 370 PRINT 380 PRINT "PLEASE TURN ON YOUR PRINTER & PRESS ANY KEY TO BEGIN" 390 Y$=INPUT$(1) 400 PRINT CHR$(26) 410 LPRINT CHR$(30) 420 REM ORIGINAL DELUXE QSL PROGRAM BY STAN HORZEPA, WA1LOU 430 REM APPEARED IN QST MAGAZINE WRITTEN 10 JUN 81 440 REM REWORKED INTO MBASIC FOR OSBORNE BY TERRY WHALIN,TG9WB 450 CLEAR 14000 460 P$="Please QSL - Thanks and 73" 470 T$="Thanks for QSL - 73" 480 DIM WC$(50), F$(50), M$(50), D$(50), T$(50), S$(50), Q$(50) 490 GOSUB 1300 500 PRINT CHR$(26) 510 PRINT CHR$(23) 520 PRINT: INPUT "DATE (DY MON YR): ",D$ 530 IF TEST=1 THEN GOTO 590 540 PRINT: INPUT "FREQUENCY (MHZ.): ",F$ 550 IF TEST=1 THEN GOTO 590 560 PRINT: INPUT "MODE: ",M$ 570 IF TEST=1 THEN GOTO 590 580 TEST=1 590 PRINT CHR$(26) 600 PRINT CHR$(23) 610 PRINT TAB(15) D$ 620 PRINT 630 PRINT TAB(15) F$; " MHZ." 640 PRINT 650 PRINT TAB(15) M$ 660 PRINT 670 D$(K)=D$ 680 F$(K)=F$ 690 M$(K)=M$ 700 PRINT " " 710 PRINT " To change DATE type - D " 720 PRINT " To change FREQ type - F " 730 PRINT " To change MODE type - M " 740 PRINT " " 750 INPUT "CALLSIGN OF STATION WORKED: ",WC$(K) 760 IF WC$(K)="D" THEN GOTO 520 770 IF WC$(K)="d" THEN GOTO 520 780 IF WC$(K)="F" THEN GOTO 540 790 IF WC$(K)="f" THEN GOTO 540 800 IF WC$(K)="M" THEN GOTO 560 810 PRINT 820 INPUT "TIME (UTC): ",T$(K) 830 PRINT 840 INPUT "SIGNAL REPORT (RS(T)): ",S$(K) 850 PRINT 860 INPUT "QSL - PSE OR TNX (P/T): ",Q$ 870 PRINT 880 IF Q$="P" THEN Q$(K)=P$ 890 IF Q$="p" THEN Q$(K)=P$ 900 IF Q$="T" THEN Q$(K)=T$ 910 IF Q$="t" THEN Q$(K)=T$ 920 INPUT "OK (Y/N): ",O$ 930 IF O$="Y" THEN GOTO 980 940 IF O$="y" THEN GOTO 980 950 IF O$="N" THEN GOTO 590 960 IF O$="n" THEN GOTO 590 970 GOTO 590 980 LPRINT 990 LPRINT TAB(20) "TG9WB" 1000 LPRINT TAB(15) "Terry Whalin" 1010 LPRINT TAB(15) "7500 W. Camp Wisdom Rd" 1020 LPRINT TAB(15) "Dallas, TX 75236 USA " 1030 LPRINT 1040 LPRINT TAB(10);"CONFIRMING QSO WITH STATION:" 1050 LPRINT TAB(20);WC$(R) 1060 LPRINT 1070 LPRINT "Thanks for the ";F$(R);" MHZ. ";M$(R);" contact on" 1080 LPRINT D$(R); " at ";T$(R);" UTC. Your signals RST ";S$(R) 1090 LPRINT Q$(R) 1100 LPRINT 1110 LPRINT 1120 PRINT CHR$(26) 1130 PRINT 1140 PRINT 1150 PRINT 1160 PRINT 1170 INPUT "MORE CARDS? (Y/N)"; MR$ 1180 IF MR$="Y" THEN GOTO 590 1190 IF MR$="y" THEN GOTO 590 1200 RUN "MENU" 1210 PRINT CHR$(26) 1220 PRINT CHR$(23) 1230 FOR F=1 TO 5 1240 FOR D=1 TO 42 1250 LPRINT "X"; 1260 NEXT 1270 LPRINT 1280 NEXT 1290 LPRINT 1300 REM 1310 PRINT CHR$(26) 1320 PRINT " LABEL ALIGNMENT" 1330 PRINT 1340 PRINT "If yes, this prints a string of the letter X to" 1350 PRINT "allow you to position your QSL in the printer." 1360 PRINT:PRINT 1370 INPUT "NEED ALIGNMENT (Y/N)"; MO$ 1380 PRINT 1390 IF MO$<>"Y" THEN RETURN 1400 GOTO 1210 printer." 1360 PRINT:PRINT 1370 INP 1020 LPRINT TAB(15) "Dallas, TX 75236 USA " 1030 LPRINT 1040 LPRINT TAB(10);"CONFIRMING QSO WITH STATION:" 1050 LPRINT TAB(20);WC$(R) 1060 LPRINT 1070 LPRINT "Thanks for the ";F$(R);" MHZ. ";M$(R);" contact on" 1080 LPRINT D$(R); " at ";T$(R);" UTC DELUXQSL.DOC by W. Terry Whalin Thi i progra t produc QS card o lette qualit printer Instruction ar include wit th program Yo wil nee t modif line 990- 102 fo you correc cal sign address etc t appea o th fina card Th progra i a excellen wa t tak advantag o you ow compute equipmen fo personalize QS̠ card withou lo o extr expense. An enhancement o correction t thi progra woul b appreciate b th autho c/ Wycliff Bibl Translators Huntingto Beach C 92647 A o 7/8 thi progra wa workin o m Osborn an m Okidat an Olympi printers. 10 REM *** LOG.BAS *** by Wayne Leman,KL7FDQ 6/24/83 20 DIM LISTCALL$(300) 30 DIM LISTQTH$(100) 40 ON ERROR GOTO 430 50 OPEN "I",#1,"LOG.DAT" 60 REM IF FILE EXISTS, WRITE IT TO "COPY" 70 OPEN "O",#2,"COPY" 80 IF EOF(1) THEN 120 90 LINE INPUT #1,A$ 100 PRINT #2,A$ 110 GOTO 80 120 CLOSE #1 130 KILL "LOG.DAT" 140 REM ADD NEW ENTRIES TO FILE 150 INPUT "NEW DATE? Y or CR";Q$ 160 IF Q$="" THEN 180 170 INPUT "NEW DATE";ND$ 180 INPUT "TIME";TIME$ 190 INPUT "STATION WORKED";C$ 200 IF C$ = "DONE" THEN 400 210 REM CHECK FOR DUPES 220 GOSUB 460 230 N=N+1 240 INPUT "RST SENT";SENT$ 250 INPUT "REPORT RECEIVED";RCVD$ 260 INPUT "STATE, PROVINCE, OR COUNTRY";QTH$ 270 REM CHECK FOR NEW MULTIPLIER 280 GOSUB 520 290 INPUT "POINTS";P 300 TOTALP = TOTALP + P 310 SCORE=M*TOTALP 320 PRINT #2,ND$;",";TIME$;",";CHR$(34); 330 PRINT #2,USING "\ \";C$; 340 PRINT #2,CHR$(34);",";SENT$;"MONT,";CHR$(34); 350 PRINT #2,USING "\ \";RCVD$; 360 PRINT #2,CHR$(34);",";CHR$(34); 370 PRINT #2,USING "\ \";NEWQTH$; 380 PRINT #2,CHR$(34);",";P;",";DUPE$;",";TOTALP;",";M;",";SCORE 390 PRINT:GOTO 150 400 CLOSE 410 REM CHANGE FILENAME BACK TO "LOG.DAT" 420 NAME "COPY" AS "LOG.DAT" 430 IF ERR=53 AND ERL=50 THEN OPEN "O",#2,"COPY":RESUME 150 440 ON ERROR GOTO 0 450 RUN "MENU" 460 LISTCALL$(N)=C$ 470 FOR I=0 TO N-1 480 IF C$=LISTCALL$(I) THEN PRINT:PRINT "***DUPE***":PRINT:GOTO 510 490 NEXT I 500 DUPE$="":RETURN 510 DUPE$="DUPE":RETURN 520 LISTQTH$(M)=QTH$ 530 FOR I = 0 TO M-1 540 IF QTH$ = LISTQTH$(I) THEN NEWQTH$ = "---":RETURN 550 NEXT I 560 NEWQTH$ = QTH$:M=M+1:RETURN TH$ 530 FOR I = 0 TO M-1 540 IINPUT "STATE, PROVINCE, OR COUNTRY";QTH$ 270 REM CHECK FOR NEW MULTIPLIER 280 GOSUB 520 290 INPUT "POINTS";P 300 TOTALP = TOTALP + P 310 SCORE=M*TOTALP 320 PRINT #2,ND$;",";TIME$;",";CHR$(34); 330 PRINT #2,USING "\ \";C$; 340 PRINT #2,CHR$(34);",";SENT$;"MONT,";CHR$(34); 350 PRINT #2,USING "\ \";RCVD$; 360 PRINT #2,CHR$(34);",";CHR$(34); 370 PRINT #2,USIN DOCUMENTATION FOR LOG.BAS, LOG.DAT, LOGFMT AND LOGPRINT by W. Terry Whalin LOG.BAӠ i progra t b use b amateu radi operator wh hav compete i weeken typ contest LOG.BA wa writte b Wayn Leman KL7FDQ Thi progra help chec duplicat contact an prin ou cop o you lo t ente t th contes committee Usin th progra scree prompts yo wil ente th contact mad durin th contes an th progra wil tel yo i th contac i duplicate LOG.BAӠ create fil whe use calle LOG.DAT sampl o LOG.DAԠ ha bee include i thi grou o programs Afte enterin al th contact o th contest the merg prin LOGPRIN i orde t prin ou th log Befor mergeprinting b sur tha thre file ar presen o th disk: LOG.DAT LOGPRINT LOGFMT LOGFM format th dat i LOG.DA s i print correctly LOGPRINԠ set u th firs pag an print header o successiv pages LOGPRIN work bes whe printe condense type ɠ hav tried Pica and it outruns the margins. Thi progra wil nee adaptatio b th use t modif th name but it is given as an example. Good contesting and good DX! Terry Whalin, TG9WB 5/14/84 mittee Usin th progra scree prompts yo wil ente th contact mad durin th contes an th progra wil tel yo i th contac i duplicate LOG.BAӠ create fil whe use calle LOG.DAT sampl o LOG.DAԠ ha bee include i thi grou o programs Afte enterin al th contact o th contest the merg prin LOGPRIN i orde t prin ou th log Befor mergeprinting b sur tha thre file ar presen o th disk: LOG.DAT LOGPRINT LOGFMT LOGFM format th dat i LOG.DA s i print correctly LOGPRINԠ set u th firs pag an print he..LOGFMT: file to print LOG.DAT .PF ON .RM 87 .DF LOG.DAT .RV ND,TIME,CALL,SENT,RCVD,NEWQTH,P,DUPE,TOTALP,M,SCORE &ND& &TIME&Z &CALL& &SENT& &RCVD& &P& &NEWQTH& &DUPE& .HE CALL: KL7FDQ/7 ALL C.W. 10 MTR CONTEST .PN 1 CALL: KL7FDQ/7 Wayne Leman, Box 127, Busby, Montana 59016 1981 ARRL 10 METER CONTEST ALL CONTACTS C.W. DATE TIME WORKED SENT RCVD PTS MULTPLR DUPES .FI LOGFMT LOGPRINT$$$10 REM *** OKIQSL.BAS *** 5/26/84 20 REM Still needs some reworking on the output to match qsl.doc. 30 REM In the meantime working!! 40 PRINT CHR$(26) 50 WHILE A<>32:Z1=Z:READ Z,A:Z=Z1+Z:POKE Z+61440!,A:WEND 60 DATA 144,79,1,75,1,73,1,68,1,65,1,84,1,65,367,10,1,22,1,22,1,22 70 DATA 1,22,1,22,1,22,1,22,1,22,1,8,6,10,1,22,1,22,1,22,1,22,1,22 80 DATA 1,22,1,22,1,22,1,25,6,22,1,22,97,22,1,22,1,22,1,22,1,22 90 DATA 1,22,1,22,1,22,1,22,1,22,6,22,1,22,14,22,1,22,97,22,1,22 100 DATA 7,22,1,22,6,22,1,22,14,22,1,22,97,22,1,22,7,22,1,22,6,21 110 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,8,6,22,1,22,97,22 120 DATA 1,22,7,22,1,22,14,22,1,22,6,22,1,22,97,22,1,22,1,22,1,22 130 DATA 1,22,1,22,1,22,1,22,1,22,1,22,14,22,1,22,6,22,1,22,97,21 140 DATA 1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,25,14,22,1,22 150 DATA 6,22,1,22,102,21,1,22,1,22,8,10,1,22,1,22,1,22,1,22,1,22 160 DATA 1,22,1,22,1,22,1,25,6,22,1,22,1,22,1,22,1,22,1,22,1,22 170 DATA 1,22,1,22,1,22,1,25,479,77,1,65,1,75,1,69,2,81,1,83,1,76 180 DATA 2,67,1,65,1,82,1,68,1,83,2,87,1,73,1,84,1,72,111,65,1,78 190 DATA 2,79,1,75,1,73,1,68,1,65,1,84,1,65,2,80,1,82,1,73,1,78 200 DATA 1,84,1,69,1,82,117,66,1,89,249,84,1,101,1,114,1,114,1,121 210 DATA 2,87,1,104,1,97,1,108,1,105,1,110,3,84,1,71,1,57,1,87,1,66 220 DATA 238,80,1,82,1,69,1,83,1,83,2,69,1,78,1,84,1,69,1,82,2,84 230 DATA 1,79,2,66,1,69,1,71,1,73,1,78,32,32 240 Y$=INPUT$(1) 250 REM *** OKIQSL.BAS *** 260 PRINT CHR$(26) 270 PRINT: PRINT 280 PRINT " DELUXE QSL PROGRAM ":PRINT 290 PRINT "This is a program for personalizing QSL cards." 300 PRINT "Originally the program appeared in QST Magazine" 310 PRINT "and was written by Stan Horzepa, WA1LOU. It is" 320 PRINT "appears here in an extensively revised format. " 330 PRINT "Any bugs or revisions to this program would be" 340 PRINT "appreciated by the author, Terry Whalin, TG9WB " 350 PRINT "7500 W. Camp Wisdom Road, Dallas, TX 75236." 360 PRINT 370 PRINT "Note lines 1070 -1090 will have to be changed " 380 PRINT "to personalize the program with your call, name " 390 PRINT "and address. Edit these using the MBASIC editor." " 400 PRINT 410 PRINT "PLEASE TURN ON YOUR PRINTER & PRESS ANY KEY TO BEGIN" 420 Y$=INPUT$(1) 430 PRINT CHR$(26) 440 LPRINT CHR$(30) 450 REM DELUXE QSL PROGRAM BY STAN HORZEPA, WA1LOU 460 REM REWORKED INTO MBASIC FOR OSBORNE BY TERRY WHALIN,TG9WB 470 REM PROGRAM WRITTEN 10 JUN 81 FOUND IN QST MAG 480 CLEAR 14000 490 P$="Please QSL - Thanks and 73" 500 T$="Thanks for QSL - 73" 510 DIM WC$(50), F$(50), M$(50), D$(50), T$(50), S$(50), Q$(50) 520 GOSUB 1350 530 PRINT CHR$(26) 540 PRINT CHR$(23) 550 INPUT "DATE (DY MON YR): ",D$ 560 IF TEST=1 THEN GOTO 640 570 PRINT 580 INPUT "FREQUENCY (MHZ.): ",F$ 590 PRINT 600 IF TEST=1 THEN GOTO 640 610 INPUT "MODE: ",M$ 620 IF TEST=1 THEN GOTO 640 630 TEST=1 640 PRINT CHR$(26) 650 PRINT CHR$(23) 660 PRINT TAB(15) D$ 670 PRINT 680 PRINT TAB(15) F$; " MHZ." 690 PRINT 700 PRINT TAB(15) M$ 710 PRINT 720 D$(K)=D$ 730 F$(K)=F$ 740 M$(K)=M$ 750 PRINT " " 760 PRINT " To change DATE type - D " 770 PRINT " To change FREQ type - F " 780 PRINT " To change MODE type - M " 790 PRINT " " 800 INPUT "CALLSIGN OF STATION WORKED: ",WC$(K) 810 IF WC$(K)="D" THEN GOTO 550 820 IF WC$(K)="d" THEN GOTO 550 830 IF WC$(K)="F" THEN GOTO 580 840 IF WC$(K)="f" THEN GOTO 580 850 IF WC$(K)="M" THEN GOTO 610 860 PRINT 870 INPUT "TIME (UTC): ",T$(K) 880 PRINT 890 INPUT "SIGNAL REPORT (RS(T)): ",S$(K) 900 PRINT 910 INPUT "QSL - PSE OR TNX (P/T): ",Q$ 920 PRINT 930 IF Q$="P" THEN Q$(K)=P$ 940 IF Q$="p" THEN Q$(K)=P$ 950 IF Q$="T" THEN Q$(K)=T$ 960 IF Q$="t" THEN Q$(K)=T$ 970 INPUT "OK (Y/N): ",O$ 980 IF O$="Y" THEN GOTO 1030 990 IF O$="y" THEN GOTO 1030 1000 IF O$="N" THEN GOTO 640 1010 IF O$="n" THEN GOTO 640 1020 GOTO 640 1030 LPRINT CHR$(27);CHR$(49) 1040 LPRINT CHR$(31);TAB(10) "TG9WB" 1050 LPRINT CHR$(30); TAB(15) " Terry Whalin" 1060 LPRINT TAB(15) "7500 W. Camp Wisdom Rd" 1070 LPRINT TAB(15) "Dallas, TX 75236 USA " 1080 LPRINT 1090 LPRINT TAB(10);"CONFIRMING QSO WITH STATION:" 1100 LPRINT TAB(20);WC$(R) 1110 LPRINT 1120 LPRINT "Thanks for the ";F$(R);" MHZ. ";M$(R);" contact on" 1130 LPRINT D$(R); " at ";T$(R);" UTC. Your signals RST ";S$(R) 1140 LPRINT Q$(R) 1150 LPRINT 1160 LPRINT 1170 PRINT CHR$(26) 1180 PRINT 1190 PRINT 1200 PRINT 1210 PRINT 1220 INPUT "MORE CARDS? (Y/N)"; MR$ 1230 IF MR$="Y" THEN GOTO 640 1240 IF MR$="y" THEN GOTO 640 1250 RUN "MENU" 1260 PRINT CHR$(26) 1270 PRINT CHR$(23) 1280 FOR F=1 TO 5 1290 FOR D=1 TO 42 1300 LPRINT "X"; 1310 NEXT 1320 LPRINT 1330 NEXT 1340 LPRINT 1350 REM 1360 PRINT CHR$(26) 1370 PRINT "LABEL ALIGNMENT" 1380 PRINT 1390 PRINT "If yes, this prints a string of the letter X to" 1400 PRINT "allow you to position your QSL in the printer." 1410 PRINT:PRINT 1420 INPUT "NEED ALIGNMENT (Y/N)"; MO$ 1430 PRINT 1440 IF MO$<>"Y" THEN RETURN 1450 GOTO 1260 printer." 1410 PRINT:PRINT 1420 INPUT "NEED ALIGNMENT (Y/N)"; MO$ 1430 PRINT 1440 IF MO$<>"Y" THEN RETU1 REM CONTEST PROGRAM by W0XI, modified by Bill Hobson, KA5OIT 2 PRINT CHR$(26) 10 PRINT TAB(5) "CONTEST PROGRAM by W0XI, modified by Bill Hobson, KA5OIT 15 REM INITIALIZE PROGRAM 20 CLEAR 1200:DEFSTR M 25 DIM M(1200,2):S$=" ":J=1 30 ' 35 ' INSTRUCTIONS: Hit O to enter Operator callsign, B for Band logged, D to send log to Disk, C to log Contact, P to Print data, and E to Edit log 40 PRINT:PRINT "CONTEST - NEW OPS TYPE O, B FOR BAND LOGGED " 41 PRINT "C FOR CONTACT, P TO LIST LOG, E TO EDIT LOG " 42 PRINT "D TO WRITE LOG TO DISK" 43 ' CHECK KEYBOARD INPUT 45 INPUT A$ 50 IF A$="D" THEN GOTO 1400 60 IF A$= "C" THEN GOTO 300 70 IF A$="P" THEN GOTO 1000 80 IF A$="O" THEN GOTO 500 90 IF A$="B" THEN GOTO 600 100 IF A$="E" THEN GOTO 1200 190 '*************************************************************** 191 ' 192 '***** DUPLICATE SEARCH SUBROUTINE ***** 193 ' 200 PRINT CHR$(26):PRINT "DUPE SEARCH" 210 INPUT "CALLSIGN TO CHECK";N$ 220 FOR I=1 TO J 230 IF N$=M(I,1) THEN GOTO 260 240 NEXT I 250 PRINT "NOT DUPE": RETURN 260 PRINT "DUPE!!!!":GOTO 40 300 ' *************************************************************** 301 ' 302 '***** GATHER CONTACT DATA ***** 303 ' 310 GOSUB 200 320 LINE INPUT "REPORT? ";W$ 340 INPUT "TIME";Y$ 350 M(J,1)=N$ 360 M(J,2)=W$+S$+Y$+S$+B$+S$+O$ 370 J=J+1:GOTO 40 500 '**************************************************************** 501 ' 502 ' ***** GET OPERATOR'S CALLSIGN SUBROUTINE ***** 503 ' 510 PRINT CHR$(26):INPUT "WHAT IS YOUR CALL AS CONTROL OP";O$ 520 PRINT "THANK YOU ";O$ 530 GOTO 40 600 '**************************************************************** 601 ' 602 '***** LOG BAND SUBROUTINE ***** 603 ' 610 PRINT CHR$(26): INPUT "WHAT BAND SHOULD I LOG";B$ 620 PRINT "THANK YOU ";O$;" WE WILL LOG BAND ";B$ 630 GOTO 40 1000 '*************************************************************** 1001 ' 1002 '***** LIST LOG SUBROUTINE ***** 1003 ' 1005 PRINT CHR$(26):INPUT "STARTING AT WHAT CONTACT #";K 1006 PRINT CHR$(26):PRINT "CONTEST LOG" 1010 PRINT "STATION","CONTACT #","REPORT TIME BAND OP" 1020 FOR I=K TO K+10:PRINT M(I,1),I,M(I,2):NEXT I 1030 GOTO 40 1200 '**************************************************************** 1201 ' 1202 '***** LOG EDITOR SUBROUTINE ***** 1203 ' 1210 PRINT CHR$(26):PRINT "EDIT LOG" 1220 INPUT "CHANGE CONTACT #";L 1230 INPUT "CALL";N$ 1240 INPUT "REPORT";W$ 1260 INPUT "TIME";Y$ 1270 M(L,1)=N$ 1280 M(L,2)=W$+S$+Y$+S$+B$+S$+O$ 1290 GOTO 40 1400 ' **************************************************************** 1401 ' 1402 ' ***** DISK STORAGE SUBROUTINE ***** 1403 ' 1405 KILL "SUPERDUP.DAT" 1410 OPEN "R",#1,"SUPERDUP.DAT",80 1415 FIELD#1, 7 AS D$, 6 AS E$, 67 AS F$ 1417 I=0 1420 FOR I=1 TO ( J - 1 ) 1430 LSET D$=M(I,1) 1440 RSET E$=STR$(I) 1450 RSET F$=M(I,2) 1500 PUT#1,I 1510 NEXT I 1520 CLOSE#1 1530 PRINT "DATA SENT TO DISK":GOTO 40 ET E$=STR$(I) 1450 RSET F$=M(I,2) 1500 PUT#1,I 1510 NEXT N5ETD 1 1B STX 01:00 10 METERS KA5OITDELUXQSLDOC LOG BAS LOG DOC LOGFMT LOGPRINT OKIQSL BAS(SUPERDUPBASSUPERDUP$$$ DOCUMENTATION FOR SUPERDUP.BAS AND SUPERDUP.DAT by W. Terry Whalin Thi progra i ver similia t grou o program calle LOG.BAS LOG.DAT LOGFMT an LOGPRINT LOG.DO i th fulle documentatio fo tha package SUPERDUP.BA i anothe progra fo us i ha radi contests Thi wil sor ou an duplicat contact o you lo sheets Thi i les comple tha LO bu als doe less. 10 REM *** TENTEN.BAS AS OF 5/3/84 *** 20 REM ORIGINAL AUTHOR - BUD JOHNSON, KC40C 30 REM PROGRAM WRITTEN 8-2-81 40 REM REWORKED INTO MBASIC FOR OSBORNE 1 BY TERRY WHALIN, TG9WB 50 PRINT CHR$(26):PRINT:PRINT:PRINT 60 PRINT " TENTEN.BAS":PRINT 70 PRINT "a program for organizing 10X numbers" 80 PRINT "collected on amateur radio's 10 meters":PRINT 90 INPUT "Do you need instructions ";ANS$ 100 IF ANS$="Y" GOTO 140 110 IF ANS$="y" GOTO 140 120 IF ANS$="N" GOTO 340 130 IF ANS$="n" GOTO 340 140 PRINT CHR$(26):PRINT:PRINT 150 PRINT "To begin using this program DATA statements will " 160 PRINT "need to be entered in the following manner:" 170 PRINT "CALLSIGN,00034050584 or CALL,TENTEN NUMBER with" 180 PRINT "5 digits (0 if needed, date as in example May 5," 190 PRINT "1984 (050584). No spaces should be in the list of" 200 PRINT "numbers for the program to work properly.":PRINT 210 PRINT "Once program has been initiated, it can be used to" 220 PRINT "check if duplicate numbers or calls are worked by" 230 PRINT "entering the number or the call and checking if" 240 PRINT "present in the DATA statements.":PRINT:PRINT 250 PRINT "The author welcomes any additions and enhancements" 260 PRINT "Please write: Terry Whalin, TG9WB " 270 PRINT " c/o Wycliffe Bible Translators" 280 PRINT " Huntington Beach, CA 92647":PRINT 290 INPUT "READY TO BEGIN ";G$ 300 IF G$="y" THEN GOTO 340 310 IF G$="Y" THEN GOTO 340 320 IF G$="N" THEN RUN "MENU" 330 IF G$="n" THEN RUN "MENU" 340 PRINT CHR$(26):PRINT:PRINT 350 T1=0:T2=0:T3=0 360 H1$=" 10X U.S. D.X. TOTAL" 370 H2$=" CALL* *10X* *DATE " 380 GOSUB 710 390 READ X$,Y$ 400 IF X$="X" THEN RESTORE:GOTO 460 410 IF LEFT$(X$,1)="W" THEN T1=T1+1:T3=T3+1:GOTO 390 420 IF LEFT$(X$,1)="K" THEN T1=T1+1:T3=T3+1:GOTO 390 430 IF LEFT$(X$,1)="N" THEN T1=T1+1:T3=T3+1:GOTO 390 440 IF LEFT$(X$,2)>"A9" AND LEFT$(X$,2)< "AM" THEN T1=T1+1:T3=T3+1:GOTO 390 450 T2=T2+1:T3=T3+1:GOTO 390 460 PRINT H1$ 470 PRINT ".....";T1;".....";T2;".....";T3 480 PRINT 490 PRINT "FREE SPACE= "FRE(0)" BYTES" 500 PRINT:PRINT 510 GOSUB 710 520 INPUT "ENTER CALL OR 10X OR TYPE + TO EXIT";W$ 530 PRINT:PRINT 540 IF W$="+" THEN RUN "MENU" 550 X=1 560 IF LEFT$(W$,1)< "A" AND MID$(W$,2,1)< "A" AND MID$(W$,3,1)< "A" THEN X=0 570 READ X$,Y$ 580 IF X$="X" THEN PRINT W$"-NOT IN FILE":PRINT:RESTORE:R=0:GOTO 520 590 IF X=1 AND W$=X$ THEN 620 600 IF X=0 AND W$=LEFT$(Y$,5) THEN 620 610 GOTO 570 620 PRINT H2$ 630 PRINT 640 PRINT X$;" ";LEFT$(Y$,5);" ";MID$(Y$,6,2); 650 PRINT "/";MID$(Y$,8,2);"/";RIGHT$(Y$,2) 660 IF X=1 THEN PRINT "-----" 670 IF X=0 THEN PRINT ".....-----" 680 PRINT 690 IF R=1 GOTO 570 700 RESTORE: R=0:GOTO 520 710 FOR Z=1 TO 20 720 NEXT Z:RETURN 730 REM DATA IS JUST A SAMPLE RUN AND SHOULD BE CHANGED 740 DATA"N0CQY",34901062082 750 DATA"N5BFO",26621071783 760 DATA"TG9WB",35008081283 770 DATA"PJ2WG",27999071783 780 DATA"KB5PJ",31049071683 790 DATA"X","X" TA"N5BFO",26621071783 760 DATA"TG9WB",35008081283 770 DATA"PJ2WG",279990  DOCUMENTATION FOR TENTEN.BAS by W. Terry Whalin Thi i progra fo keepin trac an sortin contact mad堠 o 1 meter wit蠠 TenTe International TenTe member exchang number fo award an fu o Te Meters I yo belon t TenTe the yo ma fin thi progra helpful Man enhancement ar lackin suc a bein abl t prin ou o contacts etc An enhancement o addition woul b appreciate b th author W Terr Whalin c/ Wycliff Bibl Translators Huntingto Beach C 92647. 10 REM ***** THE TIME MACHINE ***** 20 REM ***** FROM NOV 1983 POPULAR COMPUTING ***** 30 REM ***** FILED UNDER "TIMEMACH" ***** 40 REM ***** OCT 1983 PGB ***** 50 RESET 60 DEFINT A-Z 70 CLEAR 500 80 CW=11:CL=5:VL$=":":HL$="-" 90 PW=CW*7+1:R$=STRING$(PW-1,HL$):NB=CL-1 100 OF=INT((CW-3)/2)+1 110 BC$=VL$+STRING$(CW-1," ") 120 CN$=VL$+STRING$(CW-3," ")+"##" 130 MF$=VL$+"\"+STRING$(CW-3," ")+"\" 140 DIM MO$(12),MD(12),C(42),NL$(42,NB),WY$(7) 150 FOR I=1 TO 12:READ MO$(I):NEXT I 160 DATA JANUARY,FEBRUARY,MARCH,APRIL,MAY,JUNE,JULY 170 DATA AUGUST,SEPTEMBER,OCTOBER,NOVEMBER,DECEMBER 180 FOR I=1 TO 12:READ MD(I):NEXT I 190 DATA 31,28,31,30,31,30,31,31,30,31,30,31 200 FOR I=1 TO 7:READ WY$(I):NEXT I 210 DATA SUN,MON,TUE,WED,THU,FRI,SAT 220 PRINT "THE TIME MACHINE: A CALENDAR GENERATOR" 230 PRINT "--- ---- ------- - -------- ---------" 240 PRINT:PRINT "INPUT THE CALENDAR MONTH AS:MONTH,YEAR." 250 PRINT:PRINT "FOR EXAMPLE:'1,1984' FOR JANUARY 1984" 260 PRINT:PRINT "VALID MONTHS ARE 3,1920 THROUGH 11,2009" 270 PRINT:INPUT "NOW TYPE IN THE MONTH,YEAR ";M,Y 280 IF Y<1920 OR Y>2009 THEN 260 290 IF Y=1920 AND M<3 THEN 260 300 IF Y=2009 AND M>11 THEN 260 310 IF M<1 OR M>12 THEN 260 320 PRINT:PRINT "CREATING A CALENDAR FOR ";MO$(M);Y 330 FOR I= 1 TO 42:C(I)=0:FOR J= 1 TO NB:NL$(I,J)="":NEXT J:NEXT I 340 D=1 350 Y1!=Y-1920 360 IF M>2 THEN M1!=M-3 ELSE M1!=M+9:Y1!=Y1!-1 370 JD!=INT(1461*Y1!/4)+INT((153*M1!+2)/5)+D-1 380 WD = (JD!+1) MOD 7 390 IF (Y MOD 4 = 0 AND Y MOD 100 <>0) OR Y MOD 400 = 0 THEN LP = 1 ELSE LP = 0 400 IF (Y2=0 AND Y3<>=0)OR Y4=0 THEN LP=1 ELSE LP=0 410 LD = MD(M):IF LP=1 AND M=2 THEN LD=29 420 FOR I=1 TO LD:C(I+WD)=I:NEXT I 430 PRINT:PRINT "TO ANNOTATE A DATE,TYPE IN THE DATE(1-"LD");" 440 PRINT:INPUT "TYPE 0 WHEN FINISHED";SD 450 IF SD<1 OR SD >LD THEN 530 460 PRINT:PRINT "ENTER UP TO "NB"LINES. MAXIMUM LINE LENGTH IS "CW-1 470 FOR I=1 TO NB 480 PRINT:PRINT "ENTER LINE";I; 490 TX$="":INPUT TX$ 500 NL$(WD+SD,I)=TX$ 510 NEXT I 520 PRINT:PRINT "TEXT STORED. ":GOTO 430 530 PRINT:PRINT:PRINT R$ 540 H$=MO$(M)+STR$(Y):LH=LEN(H$):TB=INT((PW-LH)/2)+1 550 PRINT VL$ TAB(TB)H$ TAB(PW-1)VL$ 560 PRINT R$ 570 PRINT VL$; 580 FOR DA=1 TO 7 590 TB=(DA-1)*CW+OF 600 PRINT TAB(TB) WY$(DA); 610 NEXT DA 620 PRINT TAB(PW-1)VL$:PRINT R$ 630 LW=-INT(-(LD+WD)/7) 640 FOR W=1 TO LW 650 FOR ML =1 TO NB 660 FOR DA= 1 TO 7 670 TB=(DA-1)*CW 680 PRINT TAB(TB) VL$;NL$(DA+(W-1)*7,ML); 690 NEXT DA:PRINT TAB(PW-1)VL$:NEXT ML 700 FOR DA=1 TO 7 710 TB=(DA-1)*CW 720 DN=DA+(W-1)*7 730 IF C(DN)=0 THEN PRINT TAB(TB)BC$;:GOTO 750 740 PRINT TAB(TB) VL$;C(DN); 750 NEXT DA 760 PRINT TAB(PW-1) VL$:PRINT R$ 770 NEXT W 780 RESET 790 PRINT:PRINT:INPUT"DO YOU WANT HARD COPY ";X$ 800 IF X$ <>"Y" GOTO 1080 810 LPRINT:LPRINT:LPRINT R$ 820 H$=MO$(M)+STR$(Y):LH=LEN(H$):TB=INT((PW-LH)/2)+1 830 LPRINT VL$ TAB(TB)H$ TAB(PW-1)VL$ 840 LPRINT R$ 850 LPRINT VL$; 860 FOR DA=1 TO 7 870 TB=(DA-1)*CW+OF 880 LPRINT TAB(TB) WY$(DA); 890 NEXT DA 900 LPRINT TAB(PW-1)VL$:LPRINT R$ 910 LW=-INT(-(LD+WD)/7) 920 FOR W=1 TO LW 930 FOR ML =1 TO NB 940 FOR DA=1 TO 7 950 TB=(DA-1)*CW 960 LPRINT TAB(TB) VL$;NL$(DA+(W-1)*7,ML); 970 NEXT DA:LPRINT TAB(PW-1)VL$:NEXT ML 980 FOR DA=1 TO 7 990 TB=(DA-1)*CW 1000 DN=DA+(W-1)*7 1010 IF C(DN)=0 THEN LPRINT TAB(TB)BC$;:GOTO 1030 1020 LPRINT TAB(TB) VL$ ;C(DN); 1030 NEXT DA 1040 LPRINT TAB(PW-1) VL$:LPRINT R$ 1050 NEXT W 1060 LPRINT CHR$(12):INPUT "DO YOU WANT ANOTHER HARD COPY ";Y$ 1070 IF Y$="Y" GOTO 810 1080 PRINT:PRINT "END OF PROCESSING" 1090 RESET 1100 RUN "MENU" NT R$ 770 NEXT W 780 RESET 790 PRINT:PRINT:INPUT"DO YOU WANT HARD COPY ";X$ 800 IF X$ <>"Y" GOTO 1080 810 LPRINT:LPRINT:LPRINT R$ 820 H$=MO$(M)+STR$(Y):LH=LEN(H$):TB=INT((PW-LH)/2)+1 830 LPRINT VL$ TAB(TB)H$ TAB(PW-1)VL$ 840 LPRINT R$ 850 LPRINT VL$; 860 FOR DA=1 TO 7 870 TB=(DA-1)*CW+OF 880 LPRINT TAB(TB) WY$(DA); 890 NEXT DA 900 LPRINT TAB(PW-1)VL$:LPRINT R$ 910 L  DOCUMENTATION FOR TIMEMACH.BAS Thi i personalizabl calenda whic yo ma fin usefu i ha radi fo keepin trac o upcomin skeds etc I originall appeare i Popula Computin magazin Novembe 1983. LOGPRINT OKIQSL BAS(SUPERDUPBASSUPERDUPDATSUPERDUPDOCTENTEN BASTENTEN DOCTIMEMACHBAS !"TIMEMACH$$$1 PRINT PRINT "******************** QSO RECORDS *********************" PRINT " By WA2USS, January 1980":PRINT 2 PRINT:PRINT "Select from the following" PRINT " 1. Scan per page and change." PRINT " 2. Find any string." PRINT " 3. List file (for printout)" PRINT " 4. Enter new QSO's, sort, merge." PRINT " 5. End (back to CP/M)" PRINT:INPUT "Which number/item you select? ";A IF A>0 OR A<6 THEN 3 PRINT "Select by number from '1' to '5' !":GOTO 2 3 ON A GOTO 1000, 2000, 3000, 4000, 9999 %INCLUDE QSOSCAN %INCLUDE QSOFIND %INCLUDE QSOLIST %INCLUDE QSOEDIT %INCLUDE QSOMERGE 9999 END 4000 REM QSO LOG TPYFILE$="QSOSORT.FIL" FILE TPYFILE$ DIM CALL$(50),NAME$(50),QTH$(50),FREQ$(50),DATE$(50),TIME$(50),CARD$(50) ONE=1 CNT=ONE PRINT CHR$(26) PRINT "START OF UPDATE" INPUT "What date is today? (YYMMDD) ";TODAY$ 4050 REM DATA ENTRY INPUT "Enter call sign ";CALL$(CNT) IF CALL$(CNT)="END" OR CALL$(CNT)="End" THEN 4200 IF MID$(CALL$(CNT),2,1) < CHR$(58) THEN\ CALL$(CNT)=LEFT$(CALL$(CNT),1)+CHR$(32)+MID$(CALL$(CNT),2,7)+" " INPUT "Enter name";NAME$(CNT) INPUT "Enter QTH ";QTH$(CNT) INPUT "Enter frequency worked ";FREQ$(CNT) INPUT "Enter date worked (if today enter 'P')";DATE$(CNT) IF DATE$(CNT)="P" THEN DATE$(CNT)=TODAY$ INPUT "Enter time EST";TIME$(CNT) INPUT "Enter if QSL card was mailed (Y/N)";CARD$(CNT) PRINT PRINT CNT PRINT CALL$(CNT),NAME$(CNT),QTH$(CNT) PRINT FREQ$(CNT),DATE$(CNT),TIME$(CNT),CARD$(CNT) PRINT 4090 REM INPUT "ACCEPT(Y) ELSE REJECT(N): "; ANS$ IF ANS$="Y" THEN 4100 IF ANS$="N" THEN 4050 PRINT "PLS ENTER CORRECT OPTION" GOTO 4090 4100 REM BUMP UP COUNT PRINT "RECORD ACCEPTED" PRINT CNT=CNT+1 GOTO 4050 4200 REM COUNT UP AND SORT CNT=CNT-1 PRINT CNT;"ITEMS ENTERED" OFF=0 SET=1 TWO=2 FILLER$=" " PRINT "SORTING...", 4500 REM SORT LASTCNT=CNT-1 IF LASTCNT=0 THEN 4900 CNT=1 FLAG=OFF 4550 REM SORT ITERATION C$=CALL$(CNT)+FILLER$ C$=LEFT$(C$,1)+MID$(C$,3,7) IF LEFT$(C$,1)="K" OR LEFT$(C$,1)="N" OR LEFT$(C$,1)="A" \ OR LEFT$(C$,1)="W" THEN C$=MID$(C$,2,5)+FILLER$ NAME1$=C$ C$=CALL$(CNT+1)+FILLER$ C$=LEFT$(C$,1)+MID$(C$,3,7) IF LEFT$(C$,1)="K" OR LEFT$(C$,1)="N" OR LEFT$(C$,1)="A" \ OR LEFT$(C$,1)="W" THEN C$=MID$(C$,2,5)+FILLER$ NAME2$=C$ IF NAME1$ <= NAME2$ THEN 4600 GOSUB 4700 4600 CNT=CNT+1 IF CNT >LASTCNT THEN 4800 GOTO 4550 4700 REM SWAP FIELDS ZCALL$=CALL$(CNT) ZNAME$=NAME$(CNT) ZQTH$=QTH$(CNT) ZFREQ$=FREQ$(CNT) ZDATE$=DATE$(CNT) ZTIME$=TIME$(CNT) ZCARD$=CARD$(CNT) CALL$(CNT)=CALL$(CNT+1)  NAME$(CNT)=NAME$(CNT+1) QTH$(CNT)=QTH$(CNT+1) FREQ$(CNT)=FREQ$(CNT+1) DATE$(CNT)=DATE$(CNT+1) TIME$(CNT)=TIME$(CNT+1) CARD$(CNT)=CARD$(CNT+1) CALL$(CNT+1)=ZCALL$ NAME$(CNT+1)=ZNAME$ QTH$(CNT+1)=ZQTH$ FREQ$(CNT+1)=ZFREQ$ DATE$(CNT+1)=ZDATE$ TIME$(CNT+1)=ZTIME$ CARD$(CNT+1)=ZCARD$ FLAG=SET RETURN 4800 REM CHECK END OF SORT IF FLAG=OFF THEN 4900 FLAG=OFF CNT=ONE GOTO 4550 4900 REM WRITE OUT SORTED FILE FOR CNT=1 TO LASTCNT+1 PRINT #ONE; CALL$(CNT),NAME$(CNT),QTH$(CNT),FREQ$(CNT),\ DATE$(CNT),TIME$(CNT),CARD$(CNT) PRINT CALL$(CNT), NEXT CNT PRINT #ONE; "END","END","END","END","END","END","END" CLOSE 1 0 4600 CNT=CNT+1 IF CNT >LASTCNT THEN 4800 GOTO 4550 4700 REM SWAP FIELDS ZCALL$=CALL$(CNT) ZNAME$=NAME$(CNT) ZQTH$=QTH$(CNT) ZFREQ$=FREQ$(CNT) ZDATE$=DATE$(CNT) ZTIME$=TIME$(CNT) ZCARD$=CARD$(CNT) CALL$(CNT)=CALL$(CNT+1)  2000 REM FIND 2005 INPUT "FILENAME: ";FILENAME$ INPUT "What do you want to find";A$ COUNTER=0 FILE FILENAME$ 2010 REM READ #1; CALL$,NAME$,QTH$,FREQ$,\ DATE$,TIME$,CARD$ IF CALL$="END" THEN 2020 IF CALL$=A$ OR NAME$=A$ OR QTH$=A$ OR FREQ$=A$ OR DATE$=A$ \ OR TIME$=A$ OR CARD$=A$ THEN 2015 GOTO 2016 2015 PRINT PRINT CALL$;" -";TAB(10);NAME$;TAB(20);QTH$;TAB(42);FREQ$;\ TAB(55);DATE$;TAB(63);CARD$ PRINT " This is ";COUNTER+1;"th name on the list":PRINT 2016 COUNTER=COUNTER+1 GOTO 2010 2020 REM PRINT:PRINT "END OF LIST" PRINT "Total ";COUNTER;" names was searched" CLOSE 1 INPUT "More searching? (Y/N)";A$ IF A$="Y" THEN 2005 GOTO 2 3000 REM LIST PRINT "TURN PRINTER ON !!!!!!!!!!!!!!!!!!!!!" INPUT "FILENAME: ";FILENAME$ COUNTER=0 3060 FILE FILENAME$ LPRINTER PRINT FILENAME$ 3100 REM READ #1; CALL$,NAME$,QTH$,FREQ$,\ DATE$,TIME$,CARD$ IF CALL$="END" THEN 3200 COUNTER=COUNTER+1 PRINT CALL$;" -";TAB(11);NAME$;TAB(30);QTH$;\ TAB(55);DATE$;" ";CARD$ GOTO 3100 3200 CLOSE 1:CONSOLE INPUT "New filename? (or 'END')";F$ IF F$="END" THEN 3300 FILENAME$=F$:GOTO 3060 3300 REM LPRINTER:PRINT:PRINT "END OF LIST" PRINT COUNTER, "NAMES":CONSOLE:PRINT GOTO 2 QSOLIST $$$1000 REM SCAN INPUT "FILENAME: ";FILENAME$ FILEOUT$=FILENAME$ DIM FLAGS(20) DIM CALL$(20),NAME$(20),QTH$(20),FREQ$(20),DATE$(20),TIME$(20),CARD$(20) K=20 OUTCNT=0 COUNTER=0 FILE FILENAME$ FILE FILEOUT$ 1010 REM FOR J=1 TO 20 FLAGS(J)=0 NEXT J FOR J=1 TO 20 READ #1; CALL$(J),NAME$(J),QTH$(J),FREQ$(J),\ DATE$(J),TIME$(J),CARD$(J) IF CALL$(J)="END" THEN 1020 COUNTER=COUNTER+1 NEXT J 1020 GOSUB 1065 1033 REM PRINT PRINT "0=END PAGE / 1-20=DELETE ITEM / 21=RESTART / 22=CHANGE" 1035 REM INPUT ANSWER IF ANSWER = 0 THEN 1040 IF ANSWER = 21 THEN 1055 IF ANSWER = 22 THEN 1500 IF ANSWER > 20 THEN 1035 IF ANSWER <1 THEN 1035 FLAGS(ANSWER)=1 GOTO 1035 1040 REM FOR J=1 TO K IF FLAGS(J) <> 0 THEN 1045 PRINT #2; CALL$(J),NAME$(J),QTH$(J),FREQ$(J),\ DATE$(J),TIME$(J),CARD$(J) IF CALL$(J)="END" THEN 1022 OUTCNT=OUTCNT+1 1045 REM NEXT J GOTO 1010 1055 REM FOR J=1 TO 20 FLAGS(J)=0 NEXT J GOSUB 1065 GOTO 1033 1065 REM LIST PRINT CHR$(26) FOR J=1 TO 20 IF CALL$(J)="END" THEN 1070 GOSUB 1700 NEXT J 1070 RETURN 1022 REM END OF JOB ROUTINE PRINT "END OF LIST" PRINT COUNTER;" INPUT ITEMS" PRINT OUTCNT;" OUTPUT ITEMS" CLOSE 1:CLOSE 2 GOTO 1999 1500 REM CHANGE INPUT "Which item/number to change?";J GOSUB 1600 1510 INPUT "Which above field to change?";F$ INPUT "New entry: ";N$ IF F$="CALL" THEN CALL$(J)=N$ IF F$="NAME" THEN NAME$(J)=N$ IF F$="QTH" THEN QTH$(J)=N$ IF F$="FREQ" THEN FREQ$(J)=N$ IF F$="DATE" THEN DATE$(J)=N$ IF F$="TIME" THEN TIME$(J)=N$ IF F$="CARD" THEN CARD$(J)=N$ GOSUB 1700 INPUT "More field change? (Y/N)";A$ IF A$="Y" THEN GOTO 1510 INPUT "More number/items to change? (Y/N)";A$ IF A$="Y" THEN GOTO 1500 GOTO 1055 1600 PRINT "CALL";TAB(12);"NAME";TAB(23);"QTH";TAB(37);"FREQ";\ TAB(47);"DATE";TAB(57);"TIME";TAB(63);"CARD" 1700 PRINT J;CALL$(J);TAB(12);NAME$(J);TAB(23);QTH$(J);TAB(37);\ FREQ$(J);TAB(47);DATE$(J);TAB(57);TIME$(J);TAB(63);CARD$(J) RETURN 1999 GOTO 2 INE PRINT "END OF LIST" PRINT COUNTER;" INPUT ITEMS" PRINT OUTCNT;" OUTPUT ITEMS" CLOSE 1:CLOSE 2 GOTO 1999 1500 REM CHANGE INPUT "Which item/number to change?";J GOSUB 1600 1510 INPUT "Which above field to change?";F$ INPUT "New entry: ";N$ IF F$="CALL" THEN CALL$(J)=N$ IF F$="NAME" THEN NAME$(J)=N$ IF F$="QTH" THEN QTH$(J)=N$ IF F$="FREQ" THEN FREQ$(J)=N$ IF F$="DATE" THEN DATE$(J)=N$ IF F$="TIME" THEN TIME$(J)=N$ IF F$="CARD" THEN CARD$(J)=N$ GOSUB 1700 INPUT "More field change? (Y/N)";A$ IF A$="Y" THEN GOTO 1510 INPUT "More number/items to change? (Y/N)";A$ IF A$="Y" THEN GOTO 1500 GOTO 1055 1600 PRINT "CALL";TAB(12);"NAME";TAB(23);"QTH";TAB(37);"FREQ";\ TAB(47);"DATE";TAB(57);"TIME";TAB(63);"CARD" 1700 PRINT J;CALL$(J);TAB(12);NAME$(J);TAB(23);QTH$(J);TAB(37);\ FREQ$(J);TAB(47);DATE$(J);TAB(57);TIME$(J);TAB(63);CARD$(J) RET w9BNN253410470000:00GMT19834_9_________________RTTYCOPY________________330340  ' RNN82_16722__________________________________________________2__________________________________________________ 9?9!9:92"9:9.#9<9($9;9#%9B9p&999'999(999  )9H96 *9H9I +9@9\ ,9<9 -9;9f.9<9/9;9k09:90ccc19991ccc|29;939:949j959j9! ~__:  _:~#A7=z/W{/_zʄbk b0+w=Œ_{z)T])):;::8THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG'S BACK DE "RYRYRYRYRYRYRYRYRYRYRYRYRYRYRYRYRY  DISK PRINTDISK RELAY -BK-  NNNN .....  IDENT  .... -:-:- NEXT VIA  -:-:-:-:-: PREVIOUS VIA  :-:-:HEY HRTTY 2001.3 - W0SE ProgrammingY!HOn the shore of Lower Long LakeY"HBloomfield Hills, MIY$TBaud rate - DivisorY%X45.45 - 2534Y&X 110 - 1047Y'X 300 - 0384Y(X 1200 - 0096Y)X 2400 - 0048Y*X 4800 - 0024Y+X 9600 - 0012Y TimeY! Date (Day)Y" (Month)Y# (Year)Y$ ZoneY% MarginY& ASCII/Baudot (A or B)Y' Print Received (Y or N)Y( Print Sent (Y or N)Y) Filename (For Sending)Y* Filename (For Disk Out)Y+ Call SignY, UART Divisor (RTTY)Y- RTTY PortY. UART Divisor (Printing)Y/ ASCII Printer PortY0 Transmitted line lengthY0HPrinter Ready LOW (Y or N)Y1 Picture Mode? (Y or N)Y1HDisk Out Mode (R T B or N)Y2 Pace - 2 ms beats/charY3 Split Line LocationY4 Changeable String AY5 Changeable String BY7 KY7'RUNY7VUPDATE pConfigure ModeqY 9*́2 !7: 2  ABEND x w+ x w# z: w# :89/;  > 2# ͘:8:8:8: :8L7:8!:8  o|g+~#! =̓ p 0 Ͱo|g  ***JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDECSATSUNMONTUEWEDTHUFRI    :828: G ɯ2 x=*2 +"2 *q%+"q%: 2 =:828: <2 :>02 :<26>02>2 :<2:>02:<26>02:<24¨:2>022:>02:<2012>02!2f }ETT  O!2>21͈!.f }!(f  r\#͇>x>O!.>2-͈>2'MD!(͈ɯ2!~ʮ=#~Ý> !"~=#~÷!2f }2 !.f }2 !(f " !  t> ! ~=#~> : >o! o|g~#~#~> !1~O=#~>>,> !'~n=#~]> * N#FdEKBE MD* ##^#~OxG! > =~#ʳ#â~OxG{ * N#FE|! DME! ~#~#~!~+#4~o|gwg79?9ͽ͑́͘!7"`:22:82́ͫ :ʍͣ:  //xy :2z$ :@ABBCD%HMINʟQʕS$TUV WH́*:!7́*:!7"`*#~2:22́H:G:D=2́ú*:7W!^^"`*+~:=2:2*#~2ͫp_qY :G:*o|g6_:G:<*+¹=w:2*#~2́H:2ù:22́H*+:G:x22́Hͫ :ʑ *+~+#4o|gT]##+!!O #:_ͪn~#Y:G:<ʅڅ22́ :@H*+~HO:!H5oy=O*o|gT] 6_ͪ~#__H:!*+:!<22́H!:3=*~B!́!:*+wO+~_*}o|g {ʁp_qm`:2*#~2Hx ':2Ey6x5Y3 >P=-öY6 b44:)̫0:)u0jxY7]:_!  ~=#^2kýbg*q*ͅ*͢*{*)́*:7U!\\"`:22*#~2́H:ʘʨV: VV:0 :.:V:ABV:YNV:RTBNV*+:G:G~ +F#H282eb:7:b##:62e> 2 !f f~ʋ.ʄ#tn#t!"22q2s2t2e:<]D>2;*)*){ozg"?:<:!H~#o|gw292:2:J:##:I2> 2 ! >R2>Y2>A2~J.9#)222#)!"22222:<|:<™f>2<Ͷ:<2[`>A2o>2<T"e:;:2;3:<:2<:828:;"*?*k%ͪ:8!28;:e::!͢:828:8<28=!;o|g~?>F>2h% m ]s%-- ,:Y> W> ,:-m:Yʗ ʞ —!> :< *9;w*9#"9|ͭͶ͢:;+:<¹:|N>R2|ͭx5jY74q Y74pqky5ɯ2 !  ɯ2 ! !  !#J! J!*J!1JA:<A:<:!"b>2dA"::!"b>2dA"::A:7?:A:7A:<:!"b>2dA!::!"b>2dA!::A:7?ɯ25pEnter File Name to be sent: /v  ʲʲ_!54~o|gw!5~+v!5~5Nvvq2534230415521047>2:2!":=2*~2!~2!~2!~2#~2!":g.́.x́ .x>n:g.x́!:t:)t͖|2|2:g:g͑.>́͑.>́͑.>́͑.:@́>.:́.́͑.x ͑.x``͑.x .́"""͑.x\.x*w#"*{TzT*":828***!"2 ͌.x r.́͌.x ͌.>́͌.>́**}|~#*}|*"7?ɯ7:):N> 2͌.x !::)8:8x5jY7CpPRINTERqky5>27:):x5jY7C ky52:Ay>R2>Y2>Å>U2>*2>2!N #! >B2!>B2!>B2!>A2!N !  :)bg*ͅ*:2*":2:2 >n:)͖:g.>́.:́.:́.:́:4z :4 z M >z i :Yz > ---z w ---z ,k!*)#"):828 8!2 : A!:=2 <<2 <2 jx5Y4h Y5h Y2 ky5: : <2 p: :=2!<<2!<2$!jx5Y MY2 LY4h Y5h ky5> 2 : :):=2X!jx5Y F^Gky5>!2 0#:|R|!B!{*)w#")*)| !} !*)"):828:):)*)*)|!}!~#")*)|!}!*)")͐ :828:828:):Yn"*)*)|0"}0"*2 }怴p"!"2 :)K"*)}H"͇"*)~"*)#")*)|n"}n"*)"):)"͡!")2)>2)>I2)͕ڕ"> j>="> j>="> jò"ã"> j # # j:)H""j:)<2)ɯ2)> j> j> j">I2)j> j:Y*#2)>I2) $ $:0 $:[ʟ#![:1 ##Wʎ#Cʦ#Rʲ#Dʈ#Pu#Û#*k%}›#>].-Û#ͭÛ#*k%}›#>2)21 20 > 2)24 Û#:4ʛ#>!2)#:4ʛ#:4 ›#>24 :.%ʛ#1#Z›#:1 <21 ß##o|g>/$#Û#:[21 #21 >20 R$n$ʂ$ʑ$ʠ$ʲ$$ $ $ $Û#:a$>20 ã#N%> 20 ã#Dʪ$T›#>20 ã#I›#>20 ã#M›#>20 ã#E›#Î#>20 ã#I›#>20 ã#S›#> 20 ã#K›#:<ʛ#:|Rʎ#Bʎ#Û#N%> 20 ã#N›#:.%ڣ##:\N›#>21 %20 C#  X͵%*)w:- †%"`%#")*)|ž%}ž%*)"):)ʯ%*)"d%2)͞(7?:g%]l& E&!&%b&# %G:!- &:.%!-%%2.%&!.%4~o|gpl&>2):.%&=1&>]2g%,&!.%w?&=#~,.&2g%ɯ2.%&:!-l&l& &7l&2.%&l&:828:): Y&: ¹&:r%ʹ&!I"q%*)+")*. ##". > ':)&:h%&*k%}怴&:n%}&*o%"m%:)'*d%*)}&|&~ ' ' ''1'*)#")*)|-'}-'*)")͞(2) "1 "1*o%"m%88͐ :|Te'Bj'{: Yx'~'"*O%~ ҕ' ʕ' ʕ''1'*O%#"O%*Q%+"Q%}:)=2)!O%S% :)˜''!^%Z% "Q%"O%:)<2)'!''!''(s( ʃ(ʉ(ʒ()([:)^#'/>2)>I2)!"Q%*)"d%+")!". >2f%> 2):Yp" ()/U:)(^(f(͕(:(|(*)*)}_|W(*)*)}o|g"k%! "-"-"-"N-"P-"R-" " " "!"!" !>2f% -| E{0)+(wJwuwYw! "-"-"-"X-"Z-"\-" " " "&!"(!"*!*. -| E{0p)+U)wJwuwYw!  :)/y4> 2 :Yp":828͞>2):)$*>2):|N$*:H$*:2)Ϳ*:a*$*a*,R* [*,$*//$*n-$*1$*!f "!f "!f "o%:f0o:g02:k0o:l02/* *> 2*28*8ÿ*28*8ÿ*8ÿ*:)6+2)+_/ÿ* +0-ÿ* ++͖:ÿ*!¿*ͬ4ÿ*:)\+\+: YR+͉\+:828:8j+L7ÿ*:8ʃ+2)q&:)ʃ+ÿ*:8ʑ+ ÿ*:8ʟ+ͣ!ÿ*:8ʭ+!ÿ*: ʺ+V1ÿ*:f%+,ÿ*:8@+ÿ*:)+:Y+͉+:828:) ,:8@282)ÿ*:8ʿ*ÿ*Ϳ*: ʟ,Jc,Pʈ,Qq,Rʯ,TZ1U`1Vf1Wl1S$*2)!7"`:)B2)4$*:5X254$*5͎4$*:)2)™,͈5$*5$*:Y$*> s-$*:-0-P0-2-,$*@/]/^;/s%,1ɯ2f%,2-:<2-<2 -x5Y4h Y5h Y6 y5:- :-<2-pC1:<2F-2L-<2V-x5Y4 MY4h Y5h Y6 Ly5> 2- z-s%--,-- - ʅ.ʙ.ʢ.ʫ._/].ʱ/0:):4¬4*i%")>2h%*)+". ñ/s%---t.--n.> s-t.!f~@.=#~+.4. ,.![K..͕!K..>!2-> s-~=#~ ,L.!40-t.!40->2h%-}.`,!.> -> ,1/!È./!È.> s-t.͕!~.=#~,þ.>!2-> s-͕!~=#~/ / .,.![..--.>->,> s%--!o~:/=#~,)/:)^K/> ---!.> -> ,1͘/:4Yq/ͤ/È/:<ʈ/:|Rʅ/Bˆ/͞/.͵/>2h%s%Fç/Kç/P!> ͵/ : Yp":)0!t1"1*)"`%> 2r1>2)2)2h%252525!"Q%͸͖244: Ẏ"!I"q%*)"i%!O%2 >2)!):)A0!)"O%+n&"Q%*)+")ͬ͡>I2)*. #". !")>2)x5jY7 KY7%CONFIGUREY7cpSend Modeqky5x5jY7 KY7%CONFIGUREY7cpReceive Modeqky5*)")")"d%2)2g%2.%!"Q%". >2f%͞(!". -->=,--/*. +". *)#"):s1=173M1 3M1*. #". !4()>2f%4͙$*ͤ$*ͯ$*ͺ$* t1>2s1*)*)"b%}!2|!22*)*)}<2|<2*)+")C2*)+")*)~2_%6*d%*b%"b%}j2|j2*)"d%w2:.%=w22.%Î2*)*b%}Ž2|Ž2*d%"):_%2 ڶ22K:-= 22-2:_% 2 222273732"1"12"12K:-= 22-2s1͞(()t1*1ͪ23"1t1}O|G! t1*1ͪ23~2r1"1t1ͪg3*)"`%p3##^#V"`%:r121> 21:<6_*1t1}|3!1 *1t1ͪʯ3~21:<23<23x5Y1hKY6 MY0 L:1 *1 4=~# 3`23*){4z4*)3:1242-Y6 y523*11ͪG4!t1x1| *1"1:-w##*`%s#r*1"123p4=1e4:_>6ʇ4=> s-x4Y on>2440.> s-!|.> s-:4:.%ʾ41ì4> s-!.> s->->2h%ñ/!"d5"f5"h5"j5:4Y5!d5P :45!i54 :52p5:)2q5*"[5*"^5:2K52W52b52E52n5x5jY3!--Y3h--------Y3Ep__:__Y3hY3!qky52 >Y244>N242440` @  E A SIU DRJNFCKTZLWHYPQOBGMXV3 - 87 $4',!:(5")2*6019?+./;~ _  }%=<[>#`|@^&]\{e a siu drjnfcktzlwhypqobgmxvEMQIKORTZLC\]VWSAJPUGFXN^Y     #9.)!-:4&+/2<,867*%0'>3=51O!@6 ~O6:5 97~!56@77 (7797>97w67>@97w67>9707~@97>@ 7> 97w:7:7Ax:828:828ͭ:525:Aʪ7257777:5!5o|g!5o|g~5 A7 ڳ7ã7 ʣ7 ʣ7ʣ7A7>25A7>@25A7:5 7>25>Ã7:5A7:587A7>25A7> 25A7,8 P8 ʓ8g:A|6:B8825>=~#A8:Bi8>!5A8>!5A8>!5A8:5!5o|g~!5o|g>A8:Bʦ8>!5A8`8>!5A8q8>2)28*)")!"9 >+͐ >͐ >!8928p^Cq͡͸ͭ͢Ͷz:!;9*8"8"8*m%+"m%*8#"8}m9:828!"8: <2 *8*819  x !C")")")")!K")")")"`%")"d%"i%*")"8!;{_zW2 !")͙* "8!09" *("8:*28>2(!")*8"(:82**8" *8" * ":!09" * *:{OzGN:/Gy/OxZ: ;9N:>:: *("8:*28>2(!-!f:Ͷ-D:ɯ2-!:)͎4       w67>@97w67>9707~@97>@ 7> 97w:7:7Ax:828:828ͭ:525:Aʪ7257777:5!5o|g!5o|g~5 A7 ڳ7ã7 ʣ7 ʣ7ʣ7A7>25A7>@25A7:5 7>25>Ã7:5A7:587A7>25A7> 25A7,8 P8 ʓ8g:A|6:B8825>=~#A8:Bi8>!5A8>!5A8>!5A8:5!5o|g~!5o|g>A8:Bʦ8>!5A8`8>!5A8q8>2)28*)")!"9 >+͐ >͐ >!892 R T T Y 2 0 0 1.3(CP/M) 9/01/83 by PERRY TAYLOR, W0SE. Prior to using this version of RTY.COM, please remove or erase any previous RTY.CFG file. This version will not work with an old RTY.CFG file. Set INTERUPT 5 on the RTTY PORT. When calling up RTY.COM for CP/M, the first thing that will be shown is the "CONFIGURATION" screen. Enter the values on this screen to fit your station. This builds a configur- ation record. This configuration record can be saved on disk by pressing the "RED" key (ESC-Q). The next time the program is called, this configuration record will be read from disk. The "SPLIT" on the screen can be set on the "CONFIGURE" screen. In the middle of the line is the time in hours and minutes. At the right of the line it will say "RELAY" if the relay mode is activated (it comes up that way). If the mode is in use, the word "ON" will appear next to "RELAY". The line length can be set to any two digit length. Be aware that the RY's and the Quick Brown Fox, will not be shortened by this setting. 72 characters is maximum for RTTY operation with Teletype machines. This program can "LOG" both incomming and outgoing copy. In the field "DISK OUT MODE", "R" means "RECEIVE", "T" means "TRANSMIT", "B" means "BOTH" and "N" means "NEITHER". If it is "N" and the "CTRL-Y" is pressed, the "N" will change to "R". "DISK COPY MODE" comes up automatically if "CONFIGURED" for "R" or "T" or "B" and a fname.ext has been entered in the DISK COPY field. It is suggested that a fname.ext such as "SEPT01.AAA" be used so that each day's DISK COPY can be easily identified. Program the "PROGRAMABLE LINES "A" AND "B". Line "A" will be put in the "CONFIGURATION" record, line "B" will not, so it must be re-programed each time the program is called up. After finishing with the configuration record, begin the operation of the program by pressing the "f1" (ESC-S) key on the H-19. At the lower right corner of the screen will show "Receive Mode" if receiving and "Send Mode" if transmitting. Just to the left of the Mode indication there is a letter "B"or"A" and a number. These are from the configuration screen and indicate Baudot or ASCII and the divisor for RTTY input and output speed. If the printer has been programmed "ON" and the middle of the 24th line says "PRINTER", that means that the printer is not "READY" or the "HANDSHAKE" line is not properly set. One of the newest features of this program is called 3rd and 4th level BAUDOT. 3rd and 4th level BAUDOT is a prog- ramming method of sending the full ASCII character set over a BAUDOT channel. This program always transmits with 3rd and 4th level characters, and is always available. Unlock the "CAPS LOCK", to send lower case data. The print on a TTY machine, or on a CRT (with other than this program), will show as if it were normal Baudot. Of course, normal ASCII at 100 WPM, can also be used, if desired. Turn on 3rd and 4th level receive by hitting the "RED KEY", (while in "RUN") and note the "X" on the left of the Split line. Page 2. Only send lower case when the receiving program can copy them as the lower case puts in extra blanks, and makes a TTY machine work extra cycles, with no productive output. QRM and poor band conditions limit the accuracy of 3rd and 4th level reception, therefor 3/4 level reception may be turned OFF by the "RED KEY". These errors will be evident when lower case is rece- ived when upper case has been sent,or vice versa. Irv Hoff's IRTTY HDOS program will receive 3rd and 4th level Baudot and some of his HDOS and CP/M drivers will send 3rd and 4th level. When using "Disk Copy or Disk Transmit", a word in the left half of the 24th line will show "IN" or "OUT", meaning "Disk INput or Disk OUTput". If there is an error, then the error will be indicated next to the "IN" or "OUT" depending on which has the problem. From the "RUN" screen, the "WHITE" key (ESC-R) will allow you to enter a "fname.ext" to send without going to the "CONFIGURE" screen. The entry made will be placed into the field called "Filename for Sending". End by typing RETURN. "CTRL-D" calls up the file to be sent, and a second "CTRL-D",stops or aborts the file. Call up the file where ever in the pre-typing or transmit, the file should be sent. From the operation screen, type "CTRL-A" to see all of the controls that are available from the operation screen. Type RETURN to exit this Help screen. No incomming data will be lost when looking at the control menu. The un- sent pre-typed data will be scrolled back into the pre-type area when the "RETURN" is hit. The FAST BREAKIN mode, toggled by the "ERASE" key, is avail- able. The letter "B" in reverse video will appear on the left of the split line, when operating "BREAKIN".The "CTRL-G" will send "-BK-", and turn off the transmitter with out the 4 N's. "CTRL-X" will send only 4 diddles, and then the pretyped data, when in this mode. The "DELETE" key or "BACKSPACE" key may be used to erase data to make corrections in the pre-type area. Data in the pre- type area can be erased, including prior lines, until the char- acters being transmited are reached. Prior to transmitting data 24 lines of the pre-type area is available for changes. Page 3. Following are the controls for RTTY 2001.3 (CP/M) CTRL-x means key x, while holding down the CONTROL key CTRL-A - Display this Help CTRL-B - Reset Receive and Print Buffers CTRL-C - Enter twice to return to CP/M CTRL-D - Toggle Disk Input to Transmit ON/OFF CTRL-E - Manual Relay Control (ZC) CTRL-F - Replay Previous or Manual (ZR) CTRL-G - Go to Receive After NNNNN (or -BK- fast bk) CTRL-K - Play Ident + Time/Date CTRL-L - Play String "A" CTRL-M - Same as RETURN Key CTRL-N - Plays Quick Brown Fox CTRL-R - Play RYRY (U*U* in ASCII) CTRL-T - Play Time/Date CTRL-U - Send WRU CTRL-V - Go to Receive Mode without NNNNN CTRL-W - Force DISK COPY write. CTRL-X - Go to Send Mode 32 (or 4 fast-bk) DIDDLES CTRL-Y - Toggle Disk Copy ON/OFF CTRL-\ - Clear Transmit Buffer CTRL-] - Transmitter Off Immediately @ - Play BELL ^ - Play String "B" ] - Play line with fancy margin ESC RETURN - Send bare CR (PIX only) f2 Key or ESC T - 45.45 baud (Baudot 60 WPM) f3 Key or ESC U - 50 baud (Baudot 67 WPM) f4 Key or ESC V - 74.2 baud (Baudot 100 WPM) f5 Key or ESC W - 110 baud, (ASCII 100 WPM) ERASE Key - Toggle FAST BREAKIN mode ON/OFF BLUE Key - Toggle RELAY mode ON/OFF RED Key - Toggle 3/4 level receive ON/OFF WHITE Key _ Enter fname.ext for Disk Input This version for CP/M will respond to the following incomming commands, if preceeded by either a CR or LF. call signZC - Set RELAY to copy incoming,end with 4N's call signZR - Relay message, with VIA etc. call signZP - Replay previous t to the following incomming commands, if preceeded by either a CR or LF. call signZC - Set RELAY to copy (colon)TIME - Play WRU (colon)DISK - Play WRU if in DISK COPY W0NW AND W0SE....  4N's f2 Key or ESC T - 45.45 baud (Baudot 60 WPM) f3 Key or ESC U - 50 baud (Baudot 67 WPM) f4 Key or ESC V - 74.2 baud (Baudot 100 WPM) f5 Key or ESC W - 110 baud, (ASCII 100 WPM) ERASE Key - Toggle FAST BREAKIN mode ON/OFF BLUE Key - Toggle RELAY mode ON/OFF RED Key - Toggle 3/4 level receive ON/OFF WHITE Key _ Enter fname.ext for Disk Input This version for CP/M will respond to the following incomming commands, if preceeded by either a CR or LF. call signZC - Set RELAY to copy incoming,end with 4N's call signZR - Relay message, with VIA etc. call signZP - Replay previous tBNN253410470000:00GMT19834_9_________________RTTYCOPY________________330340  ' RNN82_16722__________________________________________________LOGPRINT OKIQSL BAS(SUPERDUPBASSUPERDUPDATSUPERDUPDOCTENTEN BASTENTEN DOCTIMEMACHBAS !"TIMEMACHDOC#QSO BAS$QSOEDIT BAS%&'QSOFIND BAS(QSOLIST BAS)QSOSCAN BAS*+,RTY COMt-./0123456789:;RTYCPM DOCB<=>?@ABCDRTY $$$10 REM THIS PROGRAM WAS WRITTEN BY EMMETT BEAN KZ5I ****** " 20 REM *********** VERTICAL ************** 30 CLS 40 LOCATE 1,30:COLOR 0,7:PRINT "1/4 WAVE VERTICAL":COLOR 7,0 50 LOCATE 3,1:PRINT "THIS PROGRAM WILL DETERMINE RESONANT LENGTH OF A 1/4 WAVE VERTICAL ANTENNA." 60 LOCATE 5,1:COLOR 16:PRINT "NOTE:":COLOR 7,0 70 LOCATE 5,9:COLOR 1:PRINT "THIS PROGRAM CAN BE USED FOR BOTH AMATEUR (HAM) AND SHORTWAVE FREQUENCIES.":COLOR 7,0 80 LOCATE 8,20:PRINT "THE AMATEUR (HAM) FREQUENCIES ARE AS FOLLOWS:" 90 LOCATE 10,25:COLOR 0,7:PRINT "10 METERS - 28 TO 29.7 MHz" 100 LOCATE 11,25:PRINT "15 METERS - 21 TO 21.45 MHz" 110 LOCATE 12,25:PRINT "20 METERS - 14 TO 14.35 MHz" 120 LOCATE 13,25:PRINT "30 METERS - 10.1 TO 10.15 MHz" 130 LOCATE 14,25:PRINT "40 METERS - 7 TO 7.3 MHz" 140 LOCATE 15,25:PRINT "80 METERS - 3.5 TO 4 MHz" 150 LOCATE 16,25:PRINT "160 METERS - 1.8 TO 2 MHz":COLOR 7,0 160 LOCATE 18,20:PRINT "THE SHORTWAVE (HF) FREQUENCIES ARE AS FOLLOWS:" 170 LOCATE 20,23:COLOR 0,7:PRINT "1.8 TO 30 MHz (INCLUDING AMATEUR BANDS)" 180 COLOR 7,0 190 LOCATE 22,1:COLOR 15:INPUT "TYPE IN DESIRED OPERATING FREQUENCY IN MHz AND PRESS ", F:COLOR 7,0 200 CLS 210 IF F<1.8 OR F>30 THEN LOCATE 13,3:COLOR 0,7:PRINT "YOUR ENTRY FALLS OUTSIDE OF THE SHORTWAVE SPECTRUM, PLEASE PRESS F2 TO RETRY.":COLOR 7,0:BEEP 220 IF F>=3.5 AND F<=4 THEN LOCATE 13,3:PRINT "THE LENGTH OF YOUR 1/4 WAVE VERTICAL AT";F;"MHz WILL BE";234/F;"FEET LONG.":LOCATE 14,8:COLOR 0,7:PRINT F;"MHz FALLS WITHIN THE AMATEUR FREQUENCY SPECTRUM. (80 METERS)":COLOR 7,0 230 IF F>=1.8 AND F<=2 THEN LOCATE 13,3:PRINT "THE LENGTH OF YOUR 1/4 WAVE VERTICAL AT";F;"MHz WILL BE";234/F;"FEET LONG.":LOCATE 14,8:COLOR 0,7:PRINT F;"MHz FALLS WITHIN THE AMATEUR FREQUENCY SPECTRUM. (160 METERS)":COLOR 7,0 240 IF F>2 AND F<3.5 THEN LOCATE 13,3:PRINT "THE LENGTH OF YOUR 1/4 WAVE VERTICAL AT";F;"MHz WILL BE";234/F;"FEET LONG.":LOCATE 14,13:COLOR 0,7:PRINT F;"MHz FALLS WITHIN THE (HF) FREQUENCY SPECTRUM.":COLOR 7,0 250 IF F>4 AND F<7 THEN LOCATE 13,3:PRINT "THE LENGTH OF YOUR 1/4 WAVE VERTICAL AT";F;"MHz WILL BE";234/F;"FEET LONG.":LOCATE 14,13:COLOR 0,7:PRINT F;"MHz FALLS WITHIN THE (HF) FREQUENCY SPECTRUM.":COLOR 7,0 260 IF F>=7 AND F<=7.3 THEN LOCATE 13,3:PRINT "THE LENGTH OF YOUR 1/4 WAVE VERTICAL AT";F;"MHz WILL BE";234/F;"FEET LONG.":LOCATE 14,8:COLOR 0,7:PRINT F;"MHz FALLS WITHIN THE AMATEUR FREQUENCY SPECTRUM. (40 METERS)":COLOR 7,0 270 IF F>7.3 AND F<10.1 THEN LOCATE 13,3:PRINT "THE LENGTH OF YOUR 1/4 WAVE ANTENNA AT";F;"MHz WILL BE";234/F;"FEET LONG.":LOCATE 14,13:COLOR 0,7:PRINT F;"MHz FALLS WITHIN THE (HF) FREQUENCY SPECTRUM.":COLOR 7,0 280 IF F>=10.1 AND F<=10.15 THEN LOCATE 13,3:PRINT "THE LENGTH OF YOUR 1/4 WAVE VERTICAL AT";F;"MHz WILL BE";234/F;"FEET LONG.":LOCATE 14,8:COLOR 0,7:PRINT F;"MHz FALLS WITHIN THE AMATEUR FREQUENCY SPECTRUM. (30 METERS)":COLOR 7,0 290 IF F>10.15 AND F<14 THEN LOCATE 13,3:PRINT "THE LENGTH OF YOUR 1/4 WAVE VERTICAL ANTENNA AT";F;"MHz WILL BE";234/F;"FEET LONG.":LOCATE 14,13:COLOR 0,7:PRINT F;"MHz FALLS WITHIN THE (HF) FREQUENCY SPECTRUM.":COLOR 7,0 300 IF F>=14 AND F<=14.35 THEN LOCATE 13,3:PRINT "THE LENGTH OF YOUR 1/4 WAVE VERTICAL AT";F;"MHz WILL BE";234/F;"FEET LONG.":LOCATE 14,8:COLOR 0,7:PRINT F;"MHz FALLS WITHIN THE AMATEUR FREQUENCY SPECTRUM. (20 METERS)":COLOR 7,0 310 IF F>14.35 AND F<21 THEN LOCATE 13,3:PRINT "THE LENGTH OF YOUR 1/4 WAVE ANTENNA AT";F;"MHz WILL BE";234/F;"FEET LONG.":LOCATE 14,13:COLOR 0,7:PRINT F;"MHz FALLS WITHIN THE (HF) FREQUENCY SPECTRUM.":COLOR 7,0 320 IF F>=21 AND F<=21.45 THEN LOCATE 13,3:PRINT "THE LENGTH OF YOUR 1/4 WAVE VERTICAL AT";F;"MHz WILL BE";234/F;"FEET LONG.":LOCATE 14,8:COLOR 0,7:PRINT F;"MHz FALLS WITHIN THE AMATEUR FREQUENCY SPECTRUM. (15 METERS)":COLOR 7,0 330 IF F>21.45 AND F<28 THEN LOCATE 13,3:PRINT "THE LENGTH OF YOUR 1/4 WAVE VERTICAL AT";F;"MHz WILL BE";234/F;"FEET LONG.":LOCATE 14,13:COLOR 0,7:PRINT F;"MHz FALLS WITHIN THE (HF) FREQUENCY SPECTRUM.":COLOR 7,0 340 IF F>=28 AND F<=29.7 THEN LOCATE 13,3:PRINT "THE LENGTH OF YOUR 1/4 WAVE VERTICAL AT";F;"MHz WILL BE";234/F;"FEET LONG.":LOCATE 14,8:COLOR 0,7:PRINT F;"MHz FALLS WITHIN THE AMATEUR FREQUENCY SPECTRUM. (10 METERS)":COLOR 7,0 350 IF F>29.7 AND F<=30 THEN LOCATE 13,3:PRINT "THE LENGTH OF YOUR 1/4 WAVE VERTICAL AT";F;"MHz WILL BE";234/F;"FEET LONG.":LOCATE 14,13:COLOR 0,7:PRINT F;"MHz FALLS WITHIN THE (HF) FREQUENCY SPECTRUM.":COLOR 7,0  LONG.":LOCATE 14,13:COLOR 0,7:PRINT F;"MHz FALLS WITHIN THE (HF) FREQUENCY SPECTRUM.":COLOR 7,0 320 IF F>=21 AND F<=21.45 THEN LOCATE 13,3:PRINT "THE LENGTH OF YOUR 1/4 WAVE VERTICAL AT";F;"MHz WILL BE";234/F;"FEET LONG.":LOCATE 14,8:COLOR 0,7:PRINT F;"MHz FALLS WITHIN THE AMATEUR FREQUENCY SPECTRUM. (15 METERS)":COLOR 7,0 330 IF F>21.45 AND F<28 THEN LOCATE 13,3:PRINT "THE LENGTH OF YOUR 1/4 WAVE VERTICAL AT";F;"MHz WILL BE";234/F;"FEET LONG.":LOCATE 14,13:COLOR 0,7:PRINT F;"MHz FALLS WITHIN THE (HF) FREQUENCY SPECTRUM.":COLOR 7,0 340 IF F>=28 AND F<=29.7 THEN LOCATE 13,3:PRINT "THE LENGTH OF YOUR 1/4 WAVE VERTICAL AT";F;"MHz W100 'This program calculates the demensions of a VHF Yagi antenna. 110 ' 120 'Design assumptions are: 130 ' 1. Driven element length in inches is 5600/frequency in MHZ. 140 ' 2. The reflector is 5% longer than the driven element. 150 ' 3. Reflector and first director spacing is 0.2 wavelengths from driven. 160 ' 4. The first director is 5% shorter than the driven element. 170 ' Subsequent director lengths are calculated by adding 1% to 180 ' the shortening factor of the previous director. For example, 190 ' the 2nd director is 6% shorter than the driven element, 200 ' the 3rd is 7% shorter, the 4th, 8% shorter, etc. 210 ' 5. Director spacing is 110% of previous spacing. Spacing starts 220 ' at 0.2 wavelengths. 230 ' 240 ' The program is well documented via remarks, so any of the above 250 ' assumptions may be easily changed. 260 ' 270 '-------------------- PROGRAM BEGINS -------------------------------------- 280 ' 290 CLS 300 DEFINT I 310 INPUT"WHAT FREQUENCY (MHZ) ";FREQ 320 INPUT"HOW MANY ELEMENTS (3 MINIMUM) ";ELNO 330 WL = 11808/FREQ 'wavelength in free space (inches) 340 DR = 5600/FREQ 'driven element length (inches) 350 RF = DR * 1.05 'reflector length 360 SPR = WL * .2 'reflector spacing 370 PL(1) = DR * .95'first director length 380 SPP(1) = WL * .2 'first director spacing 390 FOR I = 2 TO (ELNO -2) 400 SPP(I) = SPP(I-1) * 1.1 'each director spacing 10% greater than previous 410 PL(I) = DR * (100 - (4 + I))*.01 'director length 420 LN1 = LN1 + SPP(I) 'keep track of overall length 430 NEXT 440 DEF FNX(X) = INT(X*100+.5)*.01 'function to round off printing to 2 dec. 450 LNT = SPR + SPP(1) + LN1 'total beam length 460 LPRINT"DESIGN DATA FOR VHF YAGI BEAM ANTENNA: " 470 LPRINT 480 LPRINT"---- DESIGN FREQUENCY IS";FREQ;" MHZ" 490 LPRINT"---- TOTAL NUMBER OF ELEMENTS IS";ELNO 500 LPRINT 510 LPRINT 520 LPRINT TAB(35);"LENGTH IN INCHES" 530 LPRINT "REFLECTOR";TAB(40);FNX(RF) 540 LPRINT "REFLECTOR TO DRIVEN";TAB(41);FNX(SPR) 550 LPRINT "DRIVEN";TAB(40);FNX(DR) 560 LPRINT "DRIVEN TO 1st DIRECTOR";TAB(41);FNX(SPP(1)) 570 LPRINT "1st DIRECTOR LENGTH";TAB(40);FNX(PL(1)) 580 LPRINT 590 FOR I = 2 TO (ELNO -2) 600 LPRINT"DIRECTOR No.";I;" LENGTH IS";FNX(PL(I));" INCHES" 610 LPRINT "SPACED";FNX(SPP(I));" INCHES FROM DIRECTOR No.";I-1 620 LPRINT 630 NEXT 640 LPRINT "------ OVERALL BEAM LENGTH IS";FNX(LNT);" INCHES ------" );" INCHES FROM DIRECTOR No.";I-1 620 LPRINT 630 NEXT 640 LPRINT "------ OVERALL BEAM LENGTH IS";FNX(LNT);" INCHES ------P(I) 'keep track of overall length 430 NEXT 440 DEF FNX(X) = INT(X*100+.5)*.01 'function to round off printing to 2 dec. 450 LNT = SPR + SPP(1) + LN1 'total beam length 460 LPRINT"DESIGN DATA FOR VHF YAGI BEAM ANTENNA: " 470 LPRINT 480 LPRINT"---- DESIGN FREQUENCY IS";FREQ;" MHZ" 490 LPRINT"---- TOTAL NUMBER OF ELEMENTS IS";ELNO 500 LPRINT 510 LPRINT 520 LPRINT TAB(35);"LENGTH IN INCHES" 530 LPRINT "REFLECTOR";TAB(40);FNX(RF) 540 LPRINT "REFLECTOR TO DRIVEN";TAB(41);FNX(SPR) 550 LPRINT "DRIVEN"1 GOTO 10 2 SAVE "VHFPROP.BAS" 3 END 10 INPUT "ANTENNA HEIGHT (TRANSMITTING STATION)";H1 20 INPUT "ANTENNA HEIGHT (RECEIVING STATION)";H2 30 INPUT "DISTANCE BETWEEN STATIONS (IN MILES)";D0 40 INPUT "EARTH RADIUS FACTOR";K0 50 DH=HI-H2 60 K1=1.5*K0 70 K2=(D0^2)/K1 80 IF ABS(DH)>K2 THEN 170 90 D1=.75*K0*DH/DO+DO/2 100 H0=H1-D1^2/K1 110 IF H0<0 THEN PRINT "LOS NOT POSSIBLE" 120 FOR N=0 TO 20:D3=N*D0/20 140 PRINT D3,H3 150 NEXT N 160 END 170 K3=DH/DO+DO/K1 180 FOR N=O TO 20:D3=N*D0/20 190 H3=H1-K3*D3+D3^2/K1 200 PRINT D3,H3 210 NEXT N 220 END T N 160 END 170 K3=DH/DO+DO/K1 180 FOR N=O TO 20:D3=N*D0/20 190 H3QSOLIST BAS)QSOSCAN BAS*+,RTY COMt-./0123456789:;RTYCPM DOCB<=>?@ABCDRTY CFGEVERTICALBAS#FGHIJVHF-YAGEBASKLMVHFPROP $$$10 :REM USING THIS PROGRAM WAS WRITTEN BY **** EMMETT BEAN KZ5I **** 20 FIELD 30 RSET 1,27:OPEN 0,7:PRINT "AMATEUR RADIO:1/2 WAVE DIPOLE":OPEN 7,0 40 PRINT 50 PRINT 60 PRINT 70 RSET 5,10:PRINT "THIS PROGRAM WILL DETERMINE RESONANT LENGTH OF 1/2 WAVE DIPOLE." 80 RSET 7,21:PRINT "THE AMATEUR FREQUENCIES ARE AS FOLLOWS:" 90 RSET 9,29:OPEN 0,7:PRINT "10 METERS 28 - 29.7 MHz" 100 RSET 10,29:PRINT "15 METERS 21 - 21.45 MHz":RSET 11,29:PRINT "20 METERS 14 - 14.35 MHz" 110 RSET 12,29:PRINT "30 METERS 10 - 10.15 MHz":RSET 13,29 120 PRINT "40 METERS 7 - 7.3 MHz":RSET 14,29:PRINT "80 METERS 3.5 - 4 MHz" 130 OPEN 7,0 140 RSET 22,1:INPUT "TYPE IN DESIRED OPERATING FREQUENCY IN MHZ AND PRESS ", F 150 FIELD 160 IF F  U 3.5 m_M F  W 4 k k OPEN 15:PRINT "THE LENGTH OF YOUR 1/2 WAVE DIPOLE AT";F;"MHZ WILL NEED TO BE";468 ZM F;"FEET LONG.":OPEN 7,0 170 IF F _{P " 7 9_M F QJ # 7.3 7 k OPEN 15:PRINT "THE LENGTH OF YOUR 1/2 WAVE DIPOLE AT";F;"MHZ WILL NEED TO BE";468 AM F;"FEET LONG.":OPEN 7,0 180 IF F \{P  14 6_M F NJ 14.35 4 k OPEN 15:PRINT "THE LENGTH OF YOUR 1/2 WAVE DIPOLE AT";F;"MHZ WILL NEED TO BE";468 >M F;"FEET LONG.":OPEN 7,0 190 IF F Y{P  21 3_M F KJ  21.45 1 k OPEN 15:PRINT "THE LENGTH OF YOUR 1/2 WAVE DIPOLE AT";F;"MHZ WILL NEED TO BE";468 ;M F;"FEET LONG.":OPEN 7,0 200 IF F Y{P  28 3_M F |  29.7 1 k OPEN 15:PRINT "THE LENGTH OF YOUR 1/2 WAVE DIPOLE AT";F;"MHZ WILL NEED TO BE";468 ;M F;"FEET LONG.":OPEN 7,0 210 IF F KJ 3.5 4 k OPEN 0,7:PRINT "ENTRY OUT OF BAND EDGES, PLEASE CONSULT CHART, PRESS F2 TO RETRY.":OPEN 7,0:MERGE 220 IF F{P4 5_M F MJ 7 4 k OPEN 0,7:PRINT "ENTRY OUT OF BAND EDGES, PLEASE CONSULT CHART, PRESS F2 TO RETRY.":OPEN 7,0:MERGE 230 IF F{P7.3 4_M F LJ 10 4 k OPEN 0,7:PRINT "ENTRY OUT OF BAND EDGES, PLEASE CONSULT CHART, PRESS F2 TO RETRY.":OPEN 7,0:MERGE 240 IF F{P10.15 4_M F LJ 14 4 k OPEN 0,7:PRINT "ENTRY OUT OF BAND EDGES, PLEASE CONSULT CHART, PRESS F2 TO RETRY.":OPEN 7,0:MERGE 250 IF F{P14.35 4_M F LJ 21 4 k OPEN 0,7:PRINT "ENTRY OUT OF BAND EDGES, PLEASE CONSULT CHART, PRESS F2 TO RETRY.":OPEN 7,0:MERGE 260 IF F{P21.45 4_M F LJ 28 4 k OPEN 0,7:PRINT "ENTRY OUT OF BAND EDGES, PLEASE CONSULT CHART, PRESS F2 TO RETRY.":OPEN 7,0:MERGE 270 IF F{P29.7 3 k OPEN 0,7:PRINT "ENTRY OUT OF BAND EDGES, PLEASE CONSULT CHART, PRESS F2 TO RETRY.":OPEN 7,0:MERGE 0:MERGE 270 IF F{P29.7 3 k OPEN 0,7:PRINT "ENTRY OUT OF BAND EDGES, PLEASE CONSULT "MHZ WILL NEED TO BE";468 ;M F;"FEET LONG.":OPEN 7,0 210 IF F KJ 3.5 4 k OPEN 0,7:PRINT "ENTRY OUT OF BAND EDGES, PLEASE CONSULT CHART, PRESS F2 TO RETRY.":OPEN 7,0:MERGE 220 IF F{P4 5_M F MJ 7 4 k OPEN 0,7:PRINT "ENTRY OUT OF BAND EDGES, PLEASE CONSULT CHART, PRESS F2 TO RETRY.":OPEN 7,0:MERGE 230 IF F{P7.3 4_M F LJ 10 4 k OPEN 0,7:PRINT "ENTRY OUT OF BAND EDGES, PLEASE CONSULT CHART, PRESS F2 TO RETRY.":OPEN 7,0:MERGE 240 IF F{P10.15 4_M F LJ 14 4 k OPEN 0,7:PRINT "ENTRY OUT OF BAND EDGES, PLEASE CONSULT CHART, PRESS F2 TO RETRY.":OPEN 7,0:MERGE 250 IF F{P14.35 4_M F LJ 21 4 k OPEN 0,7:PRINT "ENTRY OUT OF BAND EDGES, PLEASE C10 REM ------------------------------------------------------------------------ 20 REM ******** ******** 30 REM ******** AMSAT ORBITAL PREDICTION PROGRAM ******** 40 REM ******** Written by: Dr. Thomas A. Clark, W3IWI ******** 50 REM ******** Converted for use with the IBM Personal Computer by: ******** 60 REM ******** Robert J. Diersing, N5AHD ******** 70 REM ******** May 31, 1982 ******** 80 REM ******** ******** 90 REM ------------------------------------------------------------------------ 92 REM ******** The subroutines equivalent to the functions used in ******** 93 REM ******** original North Star version of this program can be ******** 94 REM ******** found at the line numbers indicated. ******** 95 REM ********  ******** 96 REM ******** FNA(X,Y) at line 10040 - FNC(T) at line 10146 ******** 97 REM ******** FNO(D) at line 10550 - FNX(T) at line 10660 ******** 98 REM ******** FNM(T) at line 10345 - FNK(M) at line 10400 ******** 99 REM ------------------------------------------------------------------------ 120 DEFDBL A-Z : REM *** DEFAULT ALL DOUBLE PRECISION *** 130 DIM T$(20),S$(40),I$(40),C(3,2) : P = 0 : REM *** P = PAGE COUNTER *** 140 DIM C1$(50),X(4,9) : REM *** PLACE HOLDERS FOR STATION NAME / COORD *** 150 DIM S(10),T1$(20) : REM *** PLACE HOLDERS FOR MULTI-SATELLITE LOOP *** 154 I1$ = "###" : I2$ = "##/##/##" : I3$ = "##:##" 156 I4$ = "###.########" : I5$ = "##." : I6$ = "+###.##" 157 I7$ = "#####" : I8$ = "+#.########" : I9$ = "####.########" 158 I10$ = "##:##:##" : I11$ = "###.##" 168 STATION.RECSIZE% = 143 : ELEMENT.RECSIZE% = 174 169 MAX.STATIONS% = 4 : MAX.SATELLITES% = 10 170 REM ----------------------------------------------------------------------- 180 GOSUB 2650 : REM *** REINITIALIZATION FOR MULTIPLE PASSES *** 200 REM ----------------------------------------------------------------------- 210 PRINT CHR$(26): REM *** SIGNON HEADER AND DISCLAIMER *** 220 PRINT " AMSAT ORBITAL PREDICTION PROGRAM" 230 PRINT " Written by Dr. Thomas A. Clark, W3IWI" 240 PRINT " Converted for use with the IBM Personal Computer by:" 250 PRINT " Robert J. Diersing, N5AHD" 260 PRINT 270 PRINT " Copyright (c) 1980 by:" 280 PRINT " Dr. Thomas A. Clark, W3IWI" 290 PRINT " 6388 Guilford Road" 292 PRINT " Clarksville, MD 21029" 294 PRINT 296 PRINT " Permission granted for non-commercial use providing credit is given" 298 PRINT " to the author, AMSAT and ORBIT Magazine." 300 PRINT CHR$(7) 320 REM ----------------------------------------------------------------------- 830 REM *** SET STARTING DAY/TIME, DURATION, STEP SIZE, AND INITIALIZE *** 832 PRINT : PRINT TAB(28);"To continue press return "; : INPUT DUMMY$ 833 IF DUMMY$ = "END" OR DUMMY$ = "EOJ" THEN STOP 834 PRINT CHR$(26): PRINT TAB(25);"INITIALIZE STARTING PARAMETERS" : PRINT 836 INPUT " START DATE: Year = ",Y 838 Y = Y / 100 : Y2 = INT(100 * (Y - INT(Y)) + .1) 840 IF Y2 / 4 = INT(Y2 / 4) THEN F9 = 1 ELSE F9 = 0 850 INPUT " Month = ",MONTH 852 INPUT " Day = ",DAY 880 REM *** CALCULATE D8 = DAY#, MONTH #13 = JANUARY OF NEXT YEAR *** 890 RESTORE 2480 : FOR I% = 1 TO MONTH : READ D9 : NEXT I% : D8 = DAY + D9 900 IF M > 2 THEN D8 = D8 + F9 902 PRINT " Julian = "; : PRINT USING I1$;D8 910 INPUT " START UTC: Hours = ",H 920 INPUT " Minutes = ",M : T7 = D8 + H / 24 + M / 1440 940 INPUT " DURATION: Hours = ",H1 950 INPUT " Minutes = ",M1 : T8 = T7 + H1 / 24 + M1 / 1440 960 INPUT " TIME STEP: Minutes = ",M2 : T9 = M2 / 1440 970 PRINT : PRINT TAB(22);"Is data above correctly specified "; : INPUT DUMMY$ 980 IF DUMMY$ = "N" OR DUMMY$ = "NO" THEN GOTO 834 1000 REM ---------------------------------------------------------------------- 1010 REM *** GET VARIOUS PHYSICAL CONSTANTS *** 1020 RESTORE 2510 : READ P1,C,R0,F,G0,G1 1030 P2 = P1 * 2 : P0 = P1 / 180 : F = 1 / F 1040 READ Y1,G2 : IF Y1 = Y2 THEN 1090 ELSE IF Y1 > 0 THEN GOTO 1040 1050 PRINT : PRINT "Unable to find year ";Y2;" in Sidereal Time Table" : STOP 1070 REM ---------------------------------------------------------------------- 1080 REM *** SELECT OBSERVING STATIONS *** 1090 GOSUB 30000 : REM *** OPEN THE STATION INFORMATION FILE *** 1100 PRINT CHR$(26): PRINT TAB(29);"STATION SELECTION MENU" 1110 PRINT : SR% = 1 1112 PRINT TAB(16);"STATION";TAB(30);"W LONG";TAB(41);"N LAT"; 1114 PRINT TAB(50);"HEIGHT";TAB(60);"MIN ELEVATION" : PRINT 1120 REM *** READ AND DISPLAY ONE STATION RECORD *** 1130 GET #1, SR% 1132 W9 = CVD(W9$) : L9 = CVD(L9$) : H9 = CVD(H9$) : E8 = CVD(E8$) 1140 PRINT TAB(10); 1142 PRINT USING I5$;SR%; : PRINT TAB(16);C$; 1144 PRINT TAB(30); : PRINT USING I6$;W9; 1146 PRINT TAB(40); : PRINT USING I6$;L9; 1148 PRINT TAB(50); : PRINT USING I1$;H9; 1150 PRINT TAB(60); : PRINT USING I6$;E8 1160 IF SR% < INT(LOF( 1)/STATION.RECSIZE%) THEN SR% = SR% + 1 : GOTO 1130 1162 PRINT : PRINT TAB(16);"FIRST STATION WILL BE MASTER STATION" 1164 PRINT TAB(16);"YOU MAY CHOOSE UP TO 4 OTHERS" : PRINT 1170 K9 = 0 1180 PRINT CHR$(7);TAB(16);"SELECT STATION NUMBER ";K9;" <0 TO END> "; 1182 INPUT K% 1200 IF K% <= 0 THEN GOTO 1270 1210 IF K% > INT(LOF( 1)/STATION.RECSIZE%) THEN GOTO 1180 1220 SR% = K% : GET #1, SR% : K5 = K9 1230 W9 = CVD(W9$) : L9 = CVD(L9$) : H9 = CVD(H9$) : E8 = CVD(E8$) 1240 GOSUB 10520 : REM *** REPLACES FNO(D) *** 1250 X(K5,0) = 0 : X(K5,1) = X9 : X(K5,2) = Y9 : X(K5,3) = Z9 : X(K5,4) = 0 1260 X(K5,5) = E8 : X(K5,6) = S8 : X(K5,7) = C8 : X(K5,8) = S9 : X(K5,9) = C9 1262 C1$(K5) = C$ : K9 = K9 + 1 : IF K9 <= MAX.STATIONS% THEN GOTO 1180 1270 ? CHR$(26): PRINT TAB(22);"THE FOLLOWING STATIONS HAVE BEEN CHOSEN:" : PRINT 1272 FOR I% = 0 TO MAX.STATIONS% : PRINT TAB(35);C1$(I%) : NEXT I% 1274 PRINT : PRINT TAB(32);"Is this correct"; : INPUT DUMMY$ 1276 IF DUMMY$ = "N" THEN GOTO 1100 1290 CLOSE #1 1300 REM ---------------------------------------------------------------------- 1310 REM *** READ AND DISPLAY SATELLITES FROM THE ELEMENT SET FILE *** 1320 PRINT CHR$(26): PRINT TAB(28);"SATELLITE SELECTION MENU" : PRINT 1322 PRINT TAB(10);"SATELLITE NAME";TAB(36);"OBJECT";TAB(46);"IDENTIFIER"; 1324 PRINT TAB(60);"UPDATED";TAB(72);"SET NO." 1326 PRINT 1330 GOSUB 30100 : REM *** OPEN THE ELEMENT SET FILE *** 1332 FOR EK% = 1 TO INT(LOF( 2)/ELEMENT.RECSIZE%) : GET #2, EK% 1333 ES.NUMBER = CVD(ELEMENT.SET$) 1334 PRINT TAB( 4); : PRINT USING I5$;EK%; 1336 PRINT TAB( 8);S$;TAB(36);OBJECT.NUMBER$;TAB(48);IDENTIFIER$; 1338 PRINT TAB(60);ISSUE.DATE$;TAB(72); 1340 PRINT USING I1$;ES.NUMBER 1342 NEXT EK% 1344 IF EK% = > 1 THEN 1370 ELSE S(0) = 1 : S(1) = 1 : GOTO 1470 1370 PRINT : PRINT CHR$(7);TAB(22);"Select 1st satellite # <0 for all> "; 1380 INPUT J% : IF J% > 0 THEN GOTO 1410 ELSE S(0) = MAX.SATELLITES% 1400 FOR J% = 1 TO MAX.SATELLITES% : S(J%) = J% : NEXT J% : GOTO 1470 1410 S(0) = 1 : S(1) = J% 1412 PRINT TAB(20);"Select additional satellites <0 ends list> " 1414 J% = 2 1416 PRINT TAB(32);"Satellite # ";J%;" "; : INPUT K% 1430 IF K% <= 0 OR K% >= MAX.SATELLITES% THEN GOTO 1470 1440 S(0) = J% : S(J%) = K% : J% = J% + 1 : GOTO 1416 1450 REM ---------------------------------------------------------------------- 1460 REM *** OUTER LOOP THROUGH ALL REQUESTED SATELLITES *** 1470 FOR J4% = 1 TO S(0) 1480 EK% = S(J4%) : GET #2, EK% 1482 Y3 = CVD(Y3$) : D3 = CVD(D3$) 1484 H3 = CVD(H3$) : M3 = CVD(M3$) : S3 = CVD(S3$) 1486 K0 = CVD(K0$) : M0 = CVD(M0$) : N0 = CVD(N0$) : A0 = CVD(A0$) 1488 N1 = CVD(N1$) : I0 = CVD(I0$) : E0 = CVD(E0$) : W0 = CVD(W0$) 1490 O0 = CVD(O0$) : F1 = CVD(F1$) 1492 ES.NUMBER = CVD(ELEMENT.SET$) 1500 IF S(0) > 1 THEN GOTO 1540 : REM *** SUPRESS DOPPLER INQUIRY *** 1510 PRINT : PRINT TAB(17);"Doppler calculated for frequency = ";F1;" MHz" 1520 PRINT TAB(22);"Change frequency to <0 for default> "; : INPUT D 1530 IF D <> 0 THEN F1 = D 1535 ' PATCH BELOW....JRM 1540 GOTO 1590:'IF Y3 = Y2 THEN GOTO 1590 ELSE PRINT "ELEMENTS NOT FROM CURRENT YEAR" 1550 GOTO 2360 1560 REM *** IF D3 IS AN INTEGER THEN EPOCH IS ASSUMED TO BE HH:MM:SS *** 1580 REM *** IF D3 IS NOT AN INTEGER THEN D3 IS EPOCH IN DAYS + FRACTIONS *** 1590 IF D3 = INT(D3) THEN T0 = D3 + H3/24 + M3/1440 + S3/86400! ELSE T0 = D3 1610 REM ---------------------------------------------------------------------- 1620 REM *** PRINTOUT SUMMARY OF ELEMENTS AND OTHER INFORMATION *** 1630 GOSUB 2380 1640 PRINT TAB(14);"IBM Personal Computer Version OF W3IWI Orbit Program" 1650 PRINT TAB(20);"Revisions as of 10 January 1982 by W3IWI" 1652 PRINT TAB(8);"Conversion for IBM Personal Computer as of 31 May 1982 by N5AHD" 1654 PRINT "-------------------------------------------------------------------------------" 1655 LPRINT "-------------------------------------------------------------------------------" 1660 PRINT TAB(5);"Satellite Name = ";LEFT$(S$,18);"|"; 1661 LPRINT TAB(5);"Satellite Name = ";LEFT$(S$,18);"|"; 1670 PRINT TAB(44);"Reference Epoch = "; 1671 LPRINT TAB(44);"Reference Epoch = "; 1672 PRINT USING I1$;Y3; : PRINT " + "; : PRINT USING I4$;T0 1673 LPRINT USING I1$;Y3; :LPRINT " + "; :LPRINT USING I4$;T0 1680 PRINT TAB(9);"Identifier = ";IDENTIFIER$;TAB(40);"|"; 1681 LPRINT TAB(9);"Identifier = ";IDENTIFIER$;TAB(40);"|"; 1682 PRINT TAB(45);"Starting Epoch = "; 1683 LPRINT TAB(45);"Starting Epoch = "; 1690 PRINT USING I1$;Y2; : PRINT " + "; : PRINT USING I4$;T7 1691 LPRINT USING I1$;Y2; :LPRINT " + "; :LPRINT USING I4$;T7 1694 PRINT TAB(2);"Start Date & Time = "; 1695 LPRINT TAB(2);"Start Date & Time = "; 1696 PRINT USING I2$;Y2;MONTH;DAY; : PRINT " at "; : PRINT USING I3$;H;M; 1697 LPRINT USING I2$;Y2;MONTH;DAY; :LPRINT " at "; :LPRINT USING I3$;H;M; 1700 PRINT TAB(40);"|";TAB(44);"Element Set Age = "; 1701 LPRINT TAB(40);"|";TAB(44);"Element Set Age = "; 1702 PRINT USING I4$;T7-T0; : PRINT " Days" 1703 LPRINT USING I4$;T7-T0; :LPRINT " Days" 1710 PRINT TAB(11);"Duration = "; : PRINT (T8-T7)*1440;" Minutes";TAB(40);"|"; 1711 LPRINT TAB(11);"Duration = "; :LPRINT (T8-T7)*1440;" Minutes";TAB(40);"|"; 1712 PRINT TAB(44);"Element Set No. = ";ES.NUMBER 1713 LPRINT TAB(44);"Element Set No. = ";ES.NUMBER 1714 PRINT TAB(11);"Duration = "; : PRINT (T8-T7)*24;" Hours";TAB(40);"|"; 1715 LPRINT TAB(11);"Duration = "; :LPRINT (T8-T7)*24;" Hours";TAB(40);"|"; 1716 PRINT TAB(50);"Step Size = ";T9*1440;" Minutes" 1717 LPRINT TAB(50);"Step Size = ";T9*1440;" Minutes" 1750 PRINT "-------------------------------------------------------------------------------" 1751 LPRINT "-------------------------------------------------------------------------------" 1760 PRINT TAB(14);"Parameter";TAB(31);"At Reference Epoch"; 1761 LPRINT TAB(14);"Parameter";TAB(31);"At Reference Epoch"; 1762 PRINT TAB(54);"At Starting Epoch" 1763 LPRINT TAB(54);"At Starting Epoch" 1780 PRINT TAB(9);"--------------------";TAB(30);"--------------------"; 1781 LPRINT TAB(9);"--------------------";TAB(30);"--------------------"; 1782 PRINT TAB(52);"--------------------" 1783 LPRINT TAB(52);"--------------------" 1800 REM *** INITIALIZE EPOCH T BY CALLING FNC & FNM *** 1810 T = T7 : GOSUB 10110 : GOSUB 10310 1820 PRINT TAB(9);"Orbit Number"; 1821 LPRINT TAB(9);"Orbit Number"; 1822 PRINT TAB(34); : PRINT USING I7$;K0; : PRINT TAB(56); : PRINT USING I7$;K 1823 LPRINT TAB(34); :LPRINT USING I7$;K0; :LPRINT TAB(56); :LPRINT USING I7$;K 1830 PRINT TAB(9);"Mean Anomoly"; 1831 LPRINT TAB(9);"Mean Anomoly"; 1832 PRINT TAB(35); : PRINT USING I9$;M0; 1833 LPRINT TAB(35); :LPRINT USING I9$;M0; 1834 PRINT TAB(57); : PRINT USING I9$;M/P0 1835 LPRINT TAB(57); :LPRINT USING I9$;M/P0 1840 PRINT TAB(9);"Inclination"; 1841 LPRINT TAB(9);"Inclination"; 1842 PRINT TAB(35); : PRINT USING I9$;I0 1843 LPRINT TAB(35); :LPRINT USING I9$;I0 1850 PRINT TAB(9);"Eccentricity"; 1851 LPRINT TAB(9);"Eccentricity"; 1852 PRINT TAB(35); : PRINT USING I9$;E0 1853 LPRINT TAB(35); :LPRINT USING I9$;E0 1860 PRINT TAB(9);"Mean Motion"; 1861 LPRINT TAB(9);"Mean Motion"; 1862 PRINT TAB(35); : PRINT USING I9$;N0; 1863 LPRINT TAB(35); :LPRINT USING I9$;N0; 1864 PRINT TAB(57); : PRINT USING I9$;N 1865 LPRINT TAB(57); :LPRINT USING I9$;N 1870 PRINT TAB(9);"Drag Correction"; 1871 LPRINT TAB(9);"Drag Correction"; 1872 PRINT TAB(37); : PRINT USING I8$;N1 1873 LPRINT TAB(37); :LPRINT USING I8$;N1 1880 PRINT TAB(9);"Semi-Major Axis"; 1881 LPRINT TAB(9);"Semi-Major Axis"; 1882 PRINT TAB(35); : PRINT USING I9$;A0; 1883 LPRINT TAB(35); :LPRINT USING I9$;A0; 1884 PRINT TAB(57); : PRINT USING I9$;A 1885 LPRINT TAB(57); :LPRINT USING I9$;A 1890 PRINT TAB(9);"Perigee Height"; 1891 LPRINT TAB(9);"Perigee Height"; 1892 PRINT TAB(35); : PRINT USING I9$;A0*(1-E0)-R0; 1893 LPRINT TAB(35); :LPRINT USING I9$;A0*(1-E0)-R0; 1894 PRINT TAB(57); : PRINT USING I9$;A*(1-E0)-R0 1895 LPRINT TAB(57); :LPRINT USING I9$;A*(1-E0)-R0 1900 PRINT TAB(9);"Apogee Height"; 1901 LPRINT TAB(9);"Apogee Height"; 1902 PRINT TAB(35); : PRINT USING I9$;A0*(1+E0)-R0; 1903 LPRINT TAB(35); :LPRINT USING I9$;A0*(1+E0)-R0; 1904 PRINT TAB(57); : PRINT USING I9$;A*(1+E0)-R0 1905 LPRINT TAB(57); :LPRINT USING I9$;A*(1+E0)-R0 1910 PRINT TAB(9);"Argument of Perigee"; 1911 LPRINT TAB(9);"Argument of Perigee"; 1912 PRINT TAB(35); : PRINT USING I9$;W0; 1913 LPRINT TAB(35); :LPRINT USING I9$;W0; 1914 PRINT TAB(57); : PRINT USING I9$;W 1915 LPRINT TAB(57); :LPRINT USING I9$;W 1920 PRINT TAB(9);"R.A.A.N."; 1921 LPRINT TAB(9);"R.A.A.N."; 1922 PRINT TAB(35); : PRINT USING I9$;O0; 1923 LPRINT TAB(35); :LPRINT USING I9$;O0; 1924 PRINT TAB(57); : PRINT USING I9$;O 1925 LPRINT TAB(57); :LPRINT USING I9$;O 1930 PRINT TAB(9);"Beacon Frequency"; 1931 LPRINT TAB(9);"Beacon Frequency"; 1932 PRINT TAB(35); : PRINT USING I9$;F1; : PRINT TAB(72); 1933 LPRINT TAB(35); :LPRINT USING I9$;F1; :LPRINT TAB(72); 1934 K9 = 9000000000# : K8 = 9000000000# : D0 = 2# 1950 REM ---------------------------------------------------------------------- 1960 REM ****** HERE FOLLOWS THE ACTUAL COMPUTATION LOOP ****** 1968 T = T7 : REM *** FOR/NEXT NOT USED - ILLEGAL FOR DOUBLE PRECISION *** 1970 REM *** BEGINNING OF COMPUTATION LOOP *** 1972 IF K5 < 1 THEN 2000 1980 R6 = X(0,0) : X9 = X(0,1) : Y9 = X(0,2) : Z9 = X(0,3) : T6 = X(0,4) 1990 E8 = X(0,5) : S8 = X(0,6) : C8 = X(0,7) : S9 = X(0,8) : C9 = X(0,9) 2000 K7 = INT(T) : GOSUB 10345 2010 REM *** IF NEW ORBIT, UPDATE THE VALUES FOR W AND O 2020 IF K = K9 THEN 2040 : GOSUB 10110 : K8 = 9000000000# : K9 = 9000000000# 2030 REM *** ABOVE MINIMUM SPECIFIED ELEVATION OR IS IT NEW DATE? *** 2040 GOSUB 10400 : GOSUB 10660 : IF E9 < E8 THEN GOTO 2350 2070 REM *** SATELLITE IS ABOVE HORIZON, TEST ORBIT NO AND DATE *** 2080 IF K7 = K8 AND K9 = K THEN 2200 2140 IF K = K9 THEN 2190 ELSE GOSUB 2380 : K9 = K 2142 REM ---------------------------------------------------------------------- 2144 REM ****** HEADING FOR A NEW ORBIT OF NEW DAY ****** 2146 IF K5 > 0 THEN GOTO 2177 2150 PRINT TAB(3);"U.T.C.";TAB(12);"AZIMUTH";TAB(21);"ELEVATION"; 2151 LPRINT TAB(3);"U.T.C.";TAB(12);"AZIMUTH";TAB(21);"ELEVATION"; 2152 PRINT TAB(32);"DOPPLER";TAB(41);"RANGE";TAB(48);"HEIGHT"; 2153 LPRINT TAB(32);"DOPPLER";TAB(41);"RANGE";TAB(48);"HEIGHT"; 2154 PRINT TAB(56);"N LAT";TAB(63);"W LONG";TAB(71);"PHASE" 2155 LPRINT TAB(56);"N LAT";TAB(63);"W LONG";TAB(71);"PHASE" 2170 PRINT TAB(2);"HH:MM:SS";TAB(12);"Degrees";TAB(22);"Degrees"; 2171 LPRINT TAB(2);"HH:MM:SS";TAB(12);"Degrees";TAB(22);"Degrees"; 2172 PRINT TAB(35);"Hz";TAB(42);"Km";TAB(50);"Km";TAB(57);"Deg"; 2173 LPRINT TAB(35);"Hz";TAB(42);"Km";TAB(50);"Km";TAB(57);"Deg"; 2174 PRINT TAB(65);"Deg";TAB(71);"<256>" 2175 LPRINT TAB(65);"Deg";TAB(71);"<256>" 2176 GOTO 2190 2177 REM *** DIFFERENT HEADING FOR MUTUAL ACCESS MODE *** 2178 PRINT TAB(3);"U.T.C."; 2180 FOR I% = 0 TO K5 : PRINT TAB(13+I%*16);"AZIMUTH ELEV"; : NEXT I% 2182 PRINT : PRINT TAB(2);"HH:MM:SS"; 2184 FOR I% = 0 TO K5 : PRINT TAB(18+I%*16);C1$(I%); : NEXT I% 2188 PRINT 2190 PRINT TAB(16);"- - - DAY # ";K7;" - - - ORBIT # ";K;" - - -" 2191 LPRINT TAB(16);"- - - DAY # ";K7;" - - - ORBIT # ";K;" - - -" 2200 K8 = K7 : T4 = T - K7 2202 S4 = INT(T4 * 86400! + .5) 2204 H4 = INT(S4 / 3600 + .000001) 2206 M4 = INT((S4 - H4 * 3600) / 60 + .000001) 2208 S4 = S4 - 3600 * H4 - 60 * M4 2230 F9 = -F1 * 1000000! * R8 / C : REM *** F9=DOPPLER IN HZ *** 2240 PRINT TAB(2); : PRINT USING I10$;H4;M4;S4; 2241 LPRINT TAB(2); : LPRINT USING I10$;H4;M4;S4; 2242 PRINT TAB(13); : PRINT USING I11$;A9; 2243 LPRINT TAB(13); : LPRINT USING I11$;A9; 2244 PRINT TAB(20); : PRINT USING I6$;E9; 2245 LPRINT TAB(20); : LPRINT USING I6$;E9; 2246 IF K5 > 0 THEN GOTO 2260 2247 PRINT TAB(33); : PRINT USING I7$;F9; 2248 LPRINT TAB(33); : LPRINT USING I7$;F9; 2249 PRINT TAB(41); : PRINT USING I7$;R5; 2250 LPRINT TAB(41); : LPRINT USING I7$;R5; 2251 PRINT TAB(48); : PRINT USING I7$;R-R0; 2252 LPRINT TAB(48); : LPRINT USING I7$;R-R0; 2253 PRINT TAB(55); : PRINT USING I11$;L5; 2254 LPRINT TAB(55); : LPRINT USING I11$;L5; 2255 PRINT TAB(63); : PRINT USING I11$;W5; 2256 LPRINT TAB(63); : LPRINT USING I11$;W5; 2257 PRINT TAB(72); : PRINT USING I1$;M9 2258 LPRINT TAB(72); : LPRINT USING I1$;M9 2259 REM ---------------------------------------------------------------------- 2260 IF K5 = 0 THEN 2350 ELSE X(0,0) = R6 : X(0,4) = T6 2270 FOR I% = 1 TO K5 : REM *** LOOP THROUGH OTHER STATIONS *** 2280 R6 = X(I%,0) : X9 = X(I%,1) : Y9 = X(I%,2) : Z9 = X(I%, 3) : T6 = X(I%,4) 2290 E8 = X(I%,5) : S8 = X(I%,6) : C8 = X(I%,7) : S9 = X(I%, 8) : C9 = X(I%,9) 2300 GOSUB 10660 : IF E9 < E8 THEN 2330 ELSE F9 = -F1 * 1000000! * R8 / C 2310 PRINT TAB(13+(I%*16)); : PRINT USING I11$;A9; 2312 PRINT TAB(20+(I%*16)); : PRINT USING I6$;E9; 2330 X(I%,0) = R6 : X(I%,4) = T6 2340 NEXT I% : PRINT 2350 T = T + T9 : IF T < T8 THEN GOTO 1970 2352 PRINT "END OF LOOP # ";J4%;" FOR SATELLITE # ";S(J4%) 2360 NEXT J4% : PRINT : INPUT "Press return to continue ",D$ 2362 CLOSE #2 : GOTO 180 2370 REM --------------------------------------------------------------------- 2380 REM *** PAGE HEADER SUBROUTINE *** 2382 PRING CHR$(26) 2384 RETURN 2450 REM --------------------------------------------------------------------- 2460 REM *** NUMERICAL AND PHYSICAL CONSTANTS *** 2470 REM *** DAY # AT START OF EACH MONTH *** 2480 DATA 0,31,59,90,120,151,181,212,243,273,304,334,365 2490 REM *** PI, VELOCITY OF LIGHT, EARTH RADIUS, 1/EARTH FLATTENING *** 2510 DATA 3.1415926535, 2.997925E5, 6378.160, 298.25 2520 REM *** GRAVITATIONAL MASS (GM) OF EARTH IN UNITS OF 2530 REM *** ((ORBITS/DAY) ^ 2 / (KM ^ 3), AND SIDEREAL/SOLAR TIME RATE RATIO 2540 DATA 7.5369793E13, 1.0027379093 2550 REM *** GREENWICH SIDEREAL TIMES ON JAN 0.0 IN DAYS FOR 1979 THRU 1985 2560 DATA 79, 0.2751843198 2570 DATA 80, 0.2745212008 2580 DATA 81, 0.2765959911 2590 DATA 82, 0.2759328721 2600 DATA 83, 0.2752697531 2610 DATA 84, 0.2746066342 2620 DATA 85, 0.2766814244 2630 DATA 0, 0 : REM *** TERMINATES SIDEREAL TIME TABLE *** 2640 REM ---------------------------------------------------------------------- 2650 REM *** (RE)INITIALIZATION FOR MULTIPLE PASSES RETURNS HERE *** 2750 K5 = -1 : FOR I% = 0 TO MAX.SATELLITES% : S(I%) = 0 : NEXT I% 2752 S$ = "" : C$ = "" : I$ = "" 2770 RETURN 2780 REM ---------------------------------------------------------------------- 10000 REM ===================================================================== 10010 REM ********* REPLACES FNA(X,Y) IN ORIGINAL NORTH STAR VERSION ********** 10012 REM *** PARAMETERS ARE PASSED TO THIS ROUTINE IN XX AND YY AND THE *** 10014 REM *** INVERSE TANGENT IS RETURNED IN ZZ SINCE MULTIPLE LINE *** 10016 REM *** FUNCTIONS NOR PROCEDURES ARE ALLOWED IN THIS VERSION OF BASIC *** 10018 REM --------------------------------------------------------------------- 10020 REM *** CALCULATES INVERSE TANGENT IN PROPER QUADRANT LIKE ATAN2 *** 10030 REM *** CASES LYING IN QUADRANTS 2 AND 3 *** 10040 IF XX < 0 THEN ZZ = P1 + ATN(YY / XX) : RETURN 10060 REM *** THE TWO CASES FOR X = 0 *** 10070 IF XX = 0 AND YY <= 0 THEN ZZ = P1 / 2 : RETURN 10072 IF XX = 0 AND YY > 0 THEN ZZ = P1 * 3 / 2 : RETURN 10080 REM *** CASES LYING IN QUADRANTS 1 AND 4 *** 10090 IF XX > 0 AND YY >= 0 THEN ZZ = ATN(YY / XX) : RETURN 10092 IF XX > 0 AND YY < 0 THEN ZZ = P2 + ATN(YY / XX) : RETURN 10102 REM ===================================================================== 10110 REM ****** REPLACES FNC(T) IN ORIGINAL NORTH STAR VERSION ****** 10112 REM --------------------------------------------------------------------- 10120 REM *** ROUTINE TO INITIALIZE THE C(J,K) COORDINATE ROTATION MATRIX *** 10130 REM *** AND THE OTHER PARAMETERS ASSOCIATED WITH THE ORBITAL ELEMENTS *** 10139 REM *** GIVEN N0=MEAN MOTION, EXECUTE LINES 1014X *** 10140 REM *** INPUT ELEMENTS GIVE EITHER A0=SEMI-MAJOR AXIS IN KM OR *** 10142 REM *** N0=MEAN MOTION IN ORBITS/DAY. DECIDE WHICH WAS GIVEN AND *** 10144 REM *** CALCULATE THE OTHER, INCLUDING DRAG CORRECTIONS *** 10146 IF N0 > .1 THEN 10150 10148 N0 = SQR(G0 / (A0 ^ 3)) : GOTO 10154 : REM *** CALCULATE MEAN MOTION *** 10150 A0 = ((G0 / (N0 * N0)) ^ (1!/3!)) : REM *** CALCULATE SMA *** 10152 REM *** THE FOLLOWING CORRECTS FOR DRAG IN LOW ALTITUDE SATELLITES *** 10154 N = N0 + 2 * (T - T0) * N1 : REM *** MEAN MOTION AT T *** 10156 A = ((G0 / (N * N)) ^ (1!/3!)) : REM *** SMA AT T *** 10160 E2 = 1 - E0 ^ 2 : E1 = SQR(E2) : Q0 = M0 / 360 + K0 10170 REM *** ACCOUNT FOR NODAL EFFECTS DUE TO THE LUMPY GRAVITY FIELD *** 10180 REM *** DUE TO THE FLATTENED, OBLATE SPHEROIDAL, FIGURE OF EARTH *** 10190 K2 = 9.95 * ((R0 / A) ^ 3.5) / (E2 ^ 2) 10200 REM *** UPDATE ELEMENTS TO CURRENT EPOCH & EVALUATE SINs/COSs *** 10210 S1 = SIN(I0 * P0) : C1 = COS(I0 * P0) : REM *** I0 = INCLINATION *** 10220 O = O0 - (T - T0) * K2 * C1 10230 S0 = SIN(O * P0) : C0 = COS(O * P0) : REM *** O = R.A.A.N. *** 10240 W = W0 + (T - T0) * K2 * (2.5 * (C1 ^ 2) -.5) 10250 S2 = SIN(W * P0) : C2 = COS(W * P0) : REM *** W = ARGUMANT OF PERIGEE *** 10260 REM *** SET UP COORDINATE ROTATION MATRIX FOR THE CURRENT ORBIT *** 10270 C(1,1) = + (C2 * C0) - (S2 * S0 * C1) 10272 C(1,2) = - (S2 * C0) - (C2 * S0 * C1) 10280 C(2,1) = + (C2 * S0) + (S2 * C0 * C1) 10282 C(2,2) = - (S2 * S0) + (C2 * C0 * C1) 10290 C(3,1) = + (S2 * S1) 10292 C(3,2) = + (C2 * S1) 10294 RETURN 10300 REM ===================================================================== 10310 REM ****** REPLACES FNM(T) IN ORIGINAL NORTH STAR VERSION ****** 10312 REM --------------------------------------------------------------------- 10320 REM *** ROUTINE TO EVALUATE M=MEAN ANOMOLY IN (0 - 2*PI) RANGE *** 10330 REM *** K=PERIGEE PASSAGE COUNTER (=ORBIT ##) & M9 = MODULO 256 *** 10340 REM *** ORBITAL PHASE COMPATIBLE WITH PHASE3 GEN BEACON TELEMETRY *** 10345 Q = Q0 + N0 * (T - T0) + N1 * ((T - T0) ^ 2) : REM *** INCLUDE DRAG *** 10350 K = INT(Q + .000001) : M9 = INT((Q - K + .000001) * 256) : M = (Q - K) * P2 10352 RETURN 10360 REM ===================================================================== 10370 REM ****** REPLACES FNK(M) IN NORTH STAR VERSION ****** 10372 REM --------------------------------------------------------------------- 10380 REM *** ROUTINE TO SOLVE KEPLER'S EQUATION GIVEN M AND RETURN THE *** 10390 REM *** SATELLITE'S GEOCENTRIC COORDINATES *** 10400 E = M + E0 * SIN(M) + .5 * (E0 ^ 2) * SIN(2 * M) 10410 REM *** ITERATION LOOP TO SOLVE TRANSCENDENTAL KEPLER'S EQUATION *** 10420 S3 = SIN(E) : C3 = COS(E) : R3 = 1 - E0 * C3 : M1 = E - E0 * S3 10430 M5 = M1 - M 10432 IF ABS(M5) < .000001 THEN 10450 ELSE E = E - M5 / R3 : GOTO 10420 10440 REM *** NOW GET SATELLITE'S X,Y,Z COORDINATES *** 10450 X0 = A * (C3 - E0) : Y0 = A * E1 * S3 : R = A * R3 10460 REM *** ROTATE FROM ORBIT PLANE TO INERTIAL CELESTIAL COORDINATES *** 10470 X1 = X0 * C(1,1) + Y0 * C(1,2) 10472 Y1 = X0 * C(2,1) + Y0 * C(2,2) 10474 Z1 = X0 * C(3,1) + Y0 * C(3,2) 10480 REM *** ROTATE THRU CURRENT GHA OF ARIES, CONVERT TO GEOCENTRIC COORD *** 10490 G7 = T * G1 + G2 : G7 = (G7 - INT(G7)) * P2 : S7 = -SIN(G7) : C7 = COS(G7) 10500 X = + (X1 * C7) - (Y1 * S7) 10502 Y = + (X1 * S7) + (Y1 * C7) 10504 Z = Z1 10506 RETURN 10510 REM ===================================================================== 10520 REM *** THIS ROUTINE REPLACES FNO(D) IN FROM THE NORTH STAR VERSION *** 10522 REM --------------------------------------------------------------------- 10530 REM *** ROUTINE TO EVALUATE OBSERVER'S GEOCENTRIC COORDINATES *** 10540 REM *** X-AXIS=GREENWICH, Y-AXIS=VU-LAND, Z-AXIS=NORTH POLE *** 10550 L8 = L9 * P0 : S9 = SIN(L8) : C9 = COS(L8) : REM *** GEODETIC COORD *** 10560 S8 = SIN(-W9*P0) : C8 = COS(W9*P0) : REM *** W9=WEST LONGITUDE *** 10570 REM *** FOLLOWING ACCOUNTS FOR OBLATE SPHEROIDAL EARTH *** 10580 R9 = R0 * (1 - (F / 2) + (F / 2) * COS(2 * L8)) + H9 / 1000 10590 REM *** FOLLOWING MAKES L8 BE THE GEOCENTRIC LATITUDE *** 10600 L8 = ATN((1 - F) ^ 2 * S9 / C9) : Z9 = R9 * SIN(L8) 10610 X9 = R9 * COS(L8) * C8 : Y9 = R9 * COS(L8) * S8 10620 RETURN 10622 REM ===================================================================== 10630 REM ****** THIS ROUTINE REPLACES FNX(T) IN NORTH STAR VERSION ****** 10632 REM --------------------------------------------------------------------- 10640 REM *** ROUTINE TO EXTRACT ALL THE PARAMETERS YOU MIGHT EVER NEED *** 10650 REM *** FIRST GET THE VECTOR FROM THE OBSERVER TO SATELLITE *** 10660 X5 = (X - X9) : Y5 = (Y - Y9) : Z5 = (Z - Z9) 10662 R5 = SQR(X5 ^ 2 + Y5 ^ 2 + Z5 ^ 2) 10670 REM *** FINITE DIFFERENCE THE RANGE R5 TO GET THE VELOCITY R8 *** 10680 IF T6 <> T THEN R8 = ((R6 - R5) / (T6 - T)) / 86400! 10682 IF T6 = T THEN R8 = -8.999999E+09 10690 R6 = R5 : T6 = T : REM *** SAVE CURRENT RANGE & TIME FOR NEXT TIME *** 10700 REM *** NOW ROTATE INTO OBSERVER'S LOCAL COORDINATES *** 10710 REM *** WHERE X8=NORTH, Y8=EAST, Z8=UP (LEFT-HANDED SYSTEM) *** 10720 Z8 = + (X5 * C8 * C9) + (Y5 * S8 * C9) + (Z5 * S9) 10730 X8 = - (X5 * C8 * S9) - (Y5 * S8 * S9) + (Z5 * C9) 10732 Y8 = + (Y5 * C8) - (X5 * S8) 10740 S5 = Z8 / R5 : C5 = SQR(1 - S5 * S5) : E9 = ATN(S5 / C5) / P0 10750 XX = X8 : YY = Y8 : GOSUB 10000 : A9 = ZZ / P0 10760 XX = X : YY = Y : GOSUB 10000 : W5 = 360 - ZZ / P0 10770 B5 = Z / R : L5 = ATN(B5 / (SQR(1 - B5 ^ 2))) / P0 10780 RETURN 30000 REM ===================================================================== 30002 REM ****** OPEN AND DEFINE FIELDS FOR THE STATION INFORMATION FILE ****** 30003 REM --------------------------------------------------------------------- 30004 OPEN "R", 1, "B:STATIONS.DAT", STATION.RECSIZE% 30006 FIELD #1, 10 AS C$, 40 AS STA.NAME$, 25 AS STA.ADDRESS$, 15 AS STA.CITY$, 2 AS STA.STATE$, 9 AS STA.ZIP$, 10 AS STA.PHONE$, 8 AS L9$, 8 AS W9$, 8 AS H9$, 8 AS E8$ 30008 RETURN 30100 REM ===================================================================== 30102 REM ********** OPEN AND DEFINE FIELDS FOR THE ELEMENT SET FILE ********** 30103 REM --------------------------------------------------------------------- 30104 OPEN "R", 2, "B:ELEMENTS.DAT", ELEMENT.RECSIZE% 30106 FIELD #2, 24 AS S$, 6 AS OBJECT.NUMBER$, 8 AS IDENTIFIER$, 8 AS ISSUE.DATE$, 8 AS ELEMENT.SET$, 8 AS Y3$, 8 AS D3$, 8 AS H3$, 8 AS M3$, 8 AS S3$, 8 AS N1$, 8 AS I0$, 8 AS O0$, 8 AS E0$, 8 AS W0$, 8 AS M0$, 8 AS N0$, 8 AS K0$, 8 AS A0$, 8 AS F1$ 30108 RETURN 30200 REM ===================================================================== ---------------------- 30004 OPEN "R", 1, "B:STATIONS.DAT", STATION.RECSIZE% 30006 FIELD #1, 10 AS C$, 40 AS STA.NAME$, 25 AS STA.ADDRESS$, 15 AS STA.CITY$, 2 AS STA.STATE$, 9 AS STA.ZIP$, 10 AS STA.PHONE$, 8 AS L9$, 8 AS W9$, 8 AS H9$, 8 AS E8$ 30008 RETURN 30100 REM ===================================================================== 30102 REM ********** OPEN AND DEFINE FIE 10 REM MORSE CODE RECEIVER PROGRAM 20 DIMV(153):Z=0:REM Z=-1 TO PRINT DOTS & DASHES 30 INPUT "SPEED";S 40 P=126:REM INPUT PORT 50 B=32:REM PORT BIT 60 V=32:REM VALUE WHEN PRESSED 70 PRINT "INITIALIZING.."; 99 GOTO 10000 100 C=0 105 C=C+1:IF C>3*S THEN PRINT " ";:GOTO 100 110 IF (INP(P)ANDB)<>V THEN 105 120 X=1 130 C=0 140 C=C+1:IF (INP(P)ANDB)=V THEN 140 150 X=2*X+1+(C>S):IF Z THENPRINT MID$("_./",2+(C>S),1); 160 C=0 170 C=C+1:IF C>3*S THEN 190 175 IF (INP(P)ANDB)<>V THEN 170 180 IF C<2*S THEN 130 190 IF X>153 THEN 199 195 IF V(X)=0 THEN 199 196 PRINT CHR$(V(X));:GOTO 100 199 PRINT "(??)";:GOTO 100 1000 DATA .-,A,-...,B,-.-.,C,-..,D 1010 DATA .,E,..-.,F,--.,G,....,H 1020 DATA ..,I,.---,J,-.-,K,.-..,L 1030 DATA --,M,-.,N,---,O,.--.,P 1040 DATA --.-,Q,.-.,R,...,S,-,T 1050 DATA ..-,U,...-,V,.--,W 1060 DATA -..-,X,-.--,Y,--..,Z 1070 DATA .----,1,..---,2,...--,3,....-,4,.....,5 1080 DATA -....,6,--...,7,---..,8,----.,9,-----,0 1090 DATA .-.-.-,.,--..--.,",",..--..,"?" 1100 DATA -...-,*,.-.-.,/,END,E 10000 REM TABLE INIT 10020 READ X$,Y$:IF X$="END" THEN PRINT:GOTO 100 10030 X=1:FOR I=1 TO LEN(X$):X=X*2 10040 IF MID$(X$,I,1)="." THEN X=X+1 10050 NEXT 10060 V(X)=ASC(Y$):PRINT "."; 10070 GOTO 10020 10100 REM INITIALIZE TABLE 10040 IF MID$(X$,I,1)="." THEN X=X+1 10050 NEXT 10060 V(X)=ASC(Y$):PRINT "."; 10070 GOTO 10020 10100 REM INITIALIZE TABLE FSED ASMV/CODE BAS zCK COMMMAST CAT{|}~S THEN 130 190 IF X>153 THEN 199 195 IF V(X)=0 THEN 199 196 PRINT CHR$(V(X));:GOTO 100 199 PRINT "(??)";:GOTO 100 1000 DATA .-,A,-...,B,-.-.,C,-..,D 1010 DATA .,E,..-.,F,--.,G,....,H 1020 DATA ..,I,.---,J,-.-,K,.-..,L 1030 DATA --,M,-.,N,---,O,.--.,P 1040 DATA --.-,Q,.-.,R,...,S,-,T 1050 DATA ..-,U,...-,V,.--,W 1060 DATA -..-,X,-.--,Y,--..,Z 1070 DATA .----,1,..---,2,...--,3,....-,4,.....,5 1080 DATA -....,6,--...,7,---..,8,----.,9,-----,0 1090 DATA .-.-.-,.,--..--.,",",..--..,"?" 1100 DATA -1 GOTO 10 2 SAVE "CONTEST.BAS" 3 END 10 REM CONTEST PROGRAM, W0XI 15 REM INITIALIZE PROGRAM 20 PRINT CHR$(26):CLEAR 1200:DEFSTR M 25 DIM M(1200,2):S$=" ":J=1 30 ' 35 ' INSTRUCTIONS: Hit O to enter Operator callsign, B for Band logged, D for Dupe search, C to log Contact, P to Print data, and E to Edit log 40 PRINT "CONTEST - NEW OPS TYPE O, B FOR BAND LOGGED, C FOR CONTACT" 41 PRINT "P TO LIST LOG, E TO EDIT LOG" 43 ' CHECK KEYBOARD INPUT 45 INPUT A$ 50 IF A$="D" THEN GOSUB 200 60 IF A$= "C" THEN GOTO 300 70 IF A$="P" THEN GOTO 1000 80 IF A$="O" THEN GOTO 500 90 IF A$="B" THEN GOTO 600 100 IF A$="E" THEN GOTO 1200 190 '*************************************************************** 191 ' 192 '***** DUPLICATE SEARCH SUBROUTINE ***** 193 ' 200 PRINT CHR$(26):PRINT "DUPE SEARCH" 210 INPUT "CALLSIGN TO CHECK";N$ 220 FOR I=1 TO J 230 IF N$=M(I,1) THEN GOTO 260 240 NEXT I 250 PRINT "NOT DUPE": RETURN 260 PRINT "DUPE!!!!":GOTO 40 300 ' *************************************************************** 301 ' 302 '***** GATHER CONTACT DATA ***** 303 ' 310 GOSUB 200 320 INPUT "REPORT";W$ 330 INPUT "SECTION";X$ 340 INPUT "TIME";Y$ 350 M(J,1)=N$ 360 M(J,2)=W$+S$+X$+S$+Y$+S$+B$+S$+O$ 370 J=J+1:GOTO 40 500 '**************************************************************** 501 ' 502 ' ***** GET OPERATOR'S CALLSIGN SUBROUTINE ***** 503 ' 510 PRINT CHR$(26):INPUT "WHAT IS YOUR CALL AS CONTROL OP";O$ 520 PRINT "THANK YOU ";O$ 530 GOTO 40 600 '**************************************************************** 601 ' 602 '***** LOG BAND SUBROUTINE ***** 603 ' 610 PRINT CHR$(26): INPUT "WHAT BAND SHOULD I LOG";B$ 620 PRINT "THANK YOU ";O$;" WE WILL LOG BAND ";B$ 630 GOTO 40 1000 '*************************************************************** 1001 ' 1002 '***** LIST LOG SUBROUTINE ***** 1003 ' 1005 PRINT CHR$(26):INPUT "STARTING AT WHAT CONTACT #";K 1006 PRINT CHR$(26):PRINT "CONTEST LOG" 1010 PRINT "STATION","CONTACT # REPORT SECTION TIME BAND OP" 1020 FOR I=K TO K+10:PRINT M(I,1),I,M(I,2):NEXT I 1030 GOTO 40 1200 '**************************************************************** 1201 ' 1202 '***** LOG EDITOR SUBROUTINE ***** 1203 ' 1210 PRINT CHR$(26):PRINT "EDIT LOG" 1220 INPUT "CHANGE CONTACT #";L 1230 INPUT "CALL";N$ 1240 INPUT "REPORT";W$ 1250 INPUT "SECTION";X$ 1260 INPUT "TIME";Y$ 1270 M(L,1)=N$ 1280 M(L,2)=W$+S$+X$+S$+Y$+S$+B$+S$+O$ 1290 GOTO 40 1300 END 1250 INPUT "SECTION";X$ 1260 INPUT "TIME";Y$ ************************************************ 601 ' 602 '***** LOG BAND SUBROUTINE ***** 603 ' 610 PRINT CHR$(26): INPUT "WHAT BAND SHOULD I LOG";B$ 620 PRINT "THANK YOU ";O$;" WE WILL LOG BAND ";B$ 630 GOTO 40 1000 '*************************************************************** 1001 ' 1002 '***** LIST LOG SUBROUTINE ***** 1003 ' 1005 PRINT CHR$(26):INPUT "STARTING AT WHAT CONTACT #";K 1006 PRINT CHR$(26):PRINT "CONTEST LOG" 1010 PRINT "STATION","CONTACT # REPORT SECTION 12/12/81,1452,"WB5QVN/N ",599MONT,"599LA ","LA ", 4 ,, 4 , 1 , 4 12/12/81,1459,"N2IT ",599MONT,"599NJ ","NJ ", 2 ,, 6 , 2 , 12 12/12/81,1503,"KA2AEV ",599MONT,"599NY ","NY ", 2 ,, 8 , 3 , 24 12/12/81,1504,"WB3FYT ",599MONT,"599PA ","PA ", 2 ,, 10 , 4 , 40 12/12/81,1509,"AG2X ",599MONT,"599NY ","--- ", 2 ,, 12 , 4 , 48 12/12/81,1511,"N3AOT ",599MONT,"599PA ","--- ", 2 ,, 14 , 4 , 56 12/12/81,1512,"W4XD ",599MONT,"599VA ","VA ", 2 ,, 16 , 5 , 80 12/12/81,1514,"K3LR ",599MONT,"599PA ","--- ", 2 ,, 18 , 5 , 90 12/12/81,1516,"N4TY ",599MONT,"599KY ","KY ", 2 ,, 20 , 6 , 120 12/12/81,1535,"W4IKK ",599MONT,"599TENN ","TENN ", 2 ,, 22 , 7 , 154 12/12/81,1542,"WD8QBG ",447MONT,"599OH ","--- ", 0 ,(incomplete), 22 , 8 , 176 12/12/81,1545,"KA5GFJ/DF ",597MONT,"599TEX ","TEX ", 2 ,, 24 , 9 , 216 12/12/81,1547,"N1BOM ",599MONT,"599NH ","NH ", 2 ,, 26 , 10 , 260 12/12/81,1550,"WB5LUU/N ",599MONT,"579TX ","--- ", 4 ,, 30 , 10 , 300 12/12/81,1556,"N8DGV ",599MONT,"599WV ","WV ", 2 ,, 32 , 11 , 352 12/12/81,1558,"N4SO ",599MONT,"599TEXAS ","--- ", 2 ,, 34 , 11 , 374 12/12/81,1559,"K5SOR ",599MONT,"599TX ","--- ", 2 ,, 36 , 11 , 396 12/12/81,1605,"K3KA ",599MONT,"599MD ","MD ", 2 ,, 38 , 12 , 456 12/12/81,1607,"N5JJ ",599MONT,"599TEX ","--- ", 2 ,, 40 , 12 , 480 12/12/81,1610,"KF3Y ",559MONT,"459PA ","--- ", 2 ,, 42 , 12 , 504 12/12/81,1616,"N5ATW ",559MONT,"559LA ","--- ", 2 ,, 44 , 12 , 528 12/12/81,1619,"W5JQ ",599MONT,"599TEX ","--- ", 2 ,, 46 , 12 , 552 12/12/81,1621,"KC8NT ",599MONT,"599OH ","OH ", 2 ,, 48 , 13 , 624 12/12/81,1622,"NN4H ",599MONT,"599KY ","---  ", 2 ,, 50 , 13 , 650 12/12/81,1625,"NR4S ",339MONT,"599TN ","--- ", 2 ,, 52 , 13 , 676 12/12/81,1721,"N6RZ ",599MONT,"599CAL ","CA ", 2 ,, 54 , 14 , 756 12/12/81,1722,"N6NW ",599MONT,"599CA ","--- ", 2 ,, 56 , 14 , 784 12/12/81,1726,"KA8JBK/N ",599MONT,"599MICH ","MI ", 4 ,, 60 , 15 , 900 12/12/81,1728,"KA8IIN/N ",559MONT,"599MI ","--- ", 4 ,, 64 , 15 , 960 12/12/81,1731,"WB8KKI ",559MONT,"599OH ","--- ", 2 ,, 66 , 15 , 990 12/12/81,1733,"N9AZD ",569MONT,"599IND ","IN ", 2 ,, 68 , 16 , 1088 12/12/81,1736,"WD8ALG ",579MONT,"599OH ","--- ", 2 ,, 70 , 16 , 1120 12/12/81,1737,"WB9UIA/N ",599MONT,"599ILL ","IL ", 4 ,, 74 , 17 , 1258 12/12/81,1741,"N5CG ",599MONT,"599OK ","OK ", 2 ,, 76 , 18 , 1368 12/12/81,1742,"N7BLD ",599MONT,"599TEX ","--- ", 2 ,, 78 , 18 , 1404 12/12/81,1743,"NM4M ",599MONT,"599KY ","--- ", 2 ,, 80 , 18 , 1440 12/12/81,1744,"KC9CC ",599MONT,"599IND ","--- ", 2 ,, 82 , 18 , 1476 12/12/81,1747,"KB7HH ",599MONT,"599ARIZ ","AZ ", 2 ,, 84 , 19 , 1596 12/12/81,1749,"N7CW ",599MONT,"599AZ ","--- ", 2 ,, 86 , 19 , 1634 12/12/81,1750,"K3UA ",599MONT,"599PA ","--- ", 2 ,, 88 , 19 , 1672 12/12/81,1752,"W6VLD ",599MONT,"599CA ","--- ", 2 ,, 90 , 19 , 1710 12/12/81,1753,"K6LL/7 ",599MONT,"599AZ ","--- ", 2 ,, 92 , 19 , 1748 12/12/81,1756,"KA5Q ",599MONT,"599TX ","--- ", 2 ,, 94 , 19 , 1786 12/12/81,1756,"AD5Q ",599MONT,"599TEX ","--- ", 2 ,, 96 , 19 , 1824 12/12/81,1801,"KA6EEI ",599MONT,"589CA ","--- ", 2 ,, 98 , 19 , 1862 12/12/81,1803,"W6XJ ",599MONT,"599CA ","--- ", 2 ,, 100 , 19 , 1900 12/12/81,1804,"K2TW ",599MONT,"599NJ ","--- ", 2 ,, 102 , 19 , 1938 12/12/81,1806,"WB6DAW ",599MONT,"599CA ","--- ", 2 ,, 104 , 19 , 1976 12/12/81,1811,"W1GNR ",559MONT,"599CT ","CT ", 2 ,, 106 , 20 , 2120 12/12/81,1812,"W7ZMD ",599MONT,"599AZ ","--- ", 2 ,, 108 , 20 , 2160 12/12/81,1814,"WB2YOF ",597MONT,"A99NJ ","--- ", 2 ,, 110 , 20 , 2200 12/12/81,1818,"NF6H ",599MONT,"599CA ","--- ", 2 ,, 112 , 20 , 2240 12/12/81,1820,"WB7UYF ",599MONT,"599AZ ","--- ", 2 ,, 114 , 20 , 2280 12/12/81,1822,"KA2HWW ",599MONT,"599NY ","--- ", 2 ,, 116 , 20 , 2320 12/12/81,1825,"N6DNB/T ",599MONT,"599CA ","--- ", 4 ,, 120 , 20 , 2400 ,," ",MONT," "," ", 0 ,, 0 , 1 , 0 99MONT,"599CA ","--- ", 4 ,, 120 , 20 , 2400 ,," ",MONT," "," ", 0 ,, 0"--- ", 2 ,, 100 , 19 , 1900 12/12/81,1804,"K2TW ",599MONT,"599NJ ","--- ", 2 ,, 102 , 19 , 1938 10 REM COMPREHENSIVE LOG PROGRAM 30 PW  70:REM COLUM WIDTH OF PRINTOUT 40 L1 66: REM # LINES/PAGE 50 BL$" CHR$ (7):REM NEEDED--DON'T DELETE 60 HI$!"":LO$!"":REM HIGHLIGHTING CODES 130 E1$!"TOO LONG. " 140 E2$"" CHARACTERS MAXIMUM." 150 C1 ! 25:REM LENGTH OF COMMENT FIELD. IF CHANGED, ALSO CHANGE CM$ (LINE 202) 160 C2  49 NBJ C1:NW ! C1 NBJ 67 180 F1$!"B:LOGDATA":R1 C2 190 F2$""B:LOGINDEX":R2 ! 8 201 OPTION "B:LOGDATA" AS #1 LEN 128 202 7I FOR 1,8 AS DT$,4 AS UT$,10 AS KL$,3 AS RS$,3 AS RR$,8 AS FQ$,3 AS MD$,4 AS PR$,4 AS UE$,1 AS QS$,1 AS QR$,25 AS CM$ 204 OPTION "B:LOGINDEX" AS #2 LEN  128 205 5I FOR 2,6 AS QL$,2 AS P$ 206 IF 7B(1)OJ 1 5 k GOTO 3100 210 RN  0:GOSUB 2590 230 G$! KL$:GOSUB 3040:MK$" G$ 240 A  20 ?=C LEN (MK$) AM 2 250 FIELD:PRINT:PRINT HI$ 260 PRINT TO 15)"***************************************" 270 PRINT TO 10)" LOGBOOK OF " 280 PRINT TO A KBJ 15)MK$;TO 39)"" 290 PRINT TO 15)"****************************************" 300 G$ FQ$: GOSUB 3040:CD$ G$ 310 G$ CM$: GOSUB 3040:LE$! G$ 320 VL  VAL (UT$):LR  VAL (DT$) 330 PRINT LO$:PRINT:PRINT TO 17)"VOL ";VL;" CREATED ON ";FQ$ 340 PRINT TO 17)"# ENTRIES=";LR;" LAST ENTRY:";LE$ 350 GOSUB 2470: REM MENU 360 PRINT:C$ "":INPUT "ENTER COMMAND ";C$ 370 IF C$ "?" 3 k FIELD:GOSUB 2470:GOTO 360 380 IF C$ "QSO" 3 k 450 390 IF C$!"QRT" 4 k RANDOMIZE:END 400 IF C$!"FIND" 4 k 740 410 IF C$""LIST" 5 k 960 420 IF C$""EDIT" 5 k 1810 430 IF C$""LAST" 5 k 890 440 PRINT:PRINT BL$;"INVALID COMMAND. PLEASE TRY AGAIN": GOTO 360 450 REM ADD A NEQ QSO 460 GOSUB 2390:8I INPUT KL$ K$:REM GET CALL 470 GOSUB 2220:8I INPUT DT$! DA$:REM GET DATE 480 PRINT "WHAT IS THE STARTING TIME ";: GOSUB 2340:7I INPUT UT$ U$:REM GET TIME 490 A$"":INPUT "WHAT IS THE FREQUENCY ";A$:5I INPUT FQ$ A$ 500 IF LEN (A$){P8 5 k PRINT BL$;E1$;8;E2$ 510 A$!"":INPUT "WHAT IS THE MODE ";A$:8I INPUT MD$ A$ 520 IF LEN (A$)]{P 3 6 k PRINT BL$;E1$;3;E2$: GOTO 510 530 A$!"":INPUT "WHAT IS THE POWER ";A$:8I INPUT PR$ A$ 535 IF LEN (A$)\{P 4 6 k PRINT BL$;E1$;4;E2$:GOTO 530 540 A$!"":INPUT "WHAT IS HIS RST ";A$:8I INPUT RS$ A$ 550 IF LEN (A$)]{P 3 7 k PRINT BL$;E1$;3;E2$: GOTO 540 560 A$""":INPUT "WHAT RST DID YOU RECEIVE ";A$:9I INPUT RR$ A$ 570 IF LEN (A$){P3 5 k PRINT BL$;E1$;3;E2$: GOTO 560 590 PRINT "WHAT IS THE ENDING TIME OF THE QSO ";: GOSUB 2340:8I INPUT UE$ U$ 600 A$"":INPUT "IS QSL BEING SENT (Y/N) ";A$:6I INPUT QS$ A$ 610 IF LEN (A$)\{P 1 6 k PRINT BL$;E1$;1;E2$:GOTO 600 620 8I INPUT QR$!"" 630 PRINT "ENTER ANY COMMENTS (";C1;" CHARACTERS MAX)" 640 A$!"":INPUT A$:8I INPUT CM$! A$ 650 IF LEN (A$)^{P C1 5 k PRINT BL$; LEN (A$) ==C C1;" CHARACTERS TOO MANY. RETRY.": GOTO 640 660 LR  LR KBJ 1:RN LR: GOSUB 2760: REM WRITE LOG 670 RN  H: GOSUB 2930:IF P 0 7 k 690 680 RN  P: GOSUB 2930:IF P NJ \{P 0 8 k 680 690 P  LR MBJ 26: GOSUB 2990 700 RN P:P 0:=I INPUT QL$% KX$: GOSUB 2990 710 RN . 0: GOSUB 2590 720 8I INPUT CM$! DA$:7I INPUT DT$ STR$ (LR): GOSUB 2760 730 GOTO 360 740 REM FIND A CALL AND DISPLAY IT 750 GOSUB 2390: GOSUB 800:X ! 0:REM GET CALL & DISPLAY HEADER 760 RN ! H: GOSUB 2930: IF P ! 0 8 k 790 770 RN P: GOSUB 2930: IF KX$# QM$ 6 k GOSUB 840 780 IF P \{P 0 9 k 770 790 IF X ! 0 : k PRINT "NOT FOUND" 795 GOTO 360 800 PRINT:PRINT "RCD# DATE TIME MODE RST QRT " 810 PRINT " CALL FREQ PWR S/R QSL" 820 PRINT "---- ---------- -------- ---- --- ----" 830 RETURN 840 RN " RN >=C 26: GOSUB 2590:REM READ LOG 850 PRINT RN; TO 6)DT$; TO 17)UT$; TO 26)MD$; TO 31)RS$; TO 36)UE$ 860 PRINT TO 6)KL$; TO 17)FQ$; TO 26)PR$; TO 31)RR$; TO 37)QS$;"/";QR$ 870 PRINT TO 6)"COMMENTS:";CM$ 880 PRINT:X 1:RETURN 890 GOSUB 800: REM DISPLAY LAST 5 LOG ENTRIES 900 IF LR  0 8 k GOTO 360 910 N LR ==C 4: IF LR OJ 5 6 k N " 1 920 FOR RN ! N RESET LR 930 GOSUB 2590: GOSUB 850 940 NEXT RN 950 GOTO 360 960 REM LIST LOG ON PRINTER 970 N1 ! 0:L2 & L1 TBJ 6 980 PRINT: PRINT "LIST CALL BY:" 990 PRINT " 1. CALL SIGN" 1000 PRINT " 2. PREFIX" 1010 PRINT " 3. DATE" 1020 PRINT " 4. FREQUENCY" 1030 PRINT " 5. MODE" 1035 PRINT " 6. QSLS NOT RECEIVED" 1040 PRINT " 7. COMPLETE LOG" 1050 PRINT:INPUT "WHICH NUMBER";PL 1060 ON PL GOTO 1120,1170,1240,1400,1320,1481,1080 1070 PRINT "INVALID";BL$:GOTO 360 1080 FOR RN 1 RESET LR:REM LIST COMPLETE LOG 1090 GOSUB 2590: GOSUB 1630 1100 NEXT RN 1110 GOTO 790 1120 GOSUB 2390: REM LIST BY CALL 1130 RN ! H: GOSUB 2930: IF P # 0 9 k 360 1140 RN ! P: GOSUB 2930: IF KX$$ QM$ 7 k RN " RN ==C 26: GOSUB 2590: GOSUB 1630 1150 IF P Z{P 0 7 k 1140 1160 GOTO 790 1170 PX$!"":INPUT "WHAT IS THE PREFIX ";PX$:LX  LEN (PX$):REM LIST BY PREFIX 1180 IF PX$ "" 3 k PRINT BL$;"ERROR": GOTO 360 1190 FOR RN 1 RESET LR 1200 GOSUB 2590:G$$ KL$:GOSUB 3040 1210 IF LEN(G$)^{P LX 5 k IF LEFT$ (G$,LX)! PX$ 3 k GOSUB 1630 1220 NEXT RN 1230 GOTO 790 1240 DA$""":INPUT "WHAT IS THE STARTING DATE" (MM >M DD >M YY) ";DA$:GOSUB 2240 1242 SD$ RIGHT$(DA$,2)PBJ"/"PBJ LEFT$(SA$,5) 1250 DA$""":INPUT "WHAT IS THE ENDING DATE (MM/DD/YY) ";DA$: GOSUB 2240 1252 ED$! RIGHT$(DA$,2)QBJ"/"QBJ LEFT$)DA$,5) 1260 IF SD$_{P ED$ 6 k PRINT BL$"ERROR": GOTO 360 1270 FOR RN ! 1 RESET LR 1280 GOSUB 2590:X$& RIGHT$(DT$,2)SBJ"/"LEFT$)DA$,5) 1290 IF X$_{P ! SD$ 6 k IF X$PJ ! ED$ 6 k GOSUB 1630 1300 NEXT RN 1310 GOTO 790 1320 SM$#"":INPUT "WHAT IS THE MODE ";SM$:REM LIST BY MODE 1330 IF LEN (SM$)^{P 3 8 k PRINT BL$;E1$;3;E2$: GOTO 1320 1340 IF LEN (SM$)PJ 3 9 k FOR J % LEN (SM$) SBJ 1 RESET 3:SM$$ SM$ QBJ " ":NEXT J 1350 FOR RN  1 RESET LR 1360 GOSUB 2590 1370 IF SM$! MD$ 3 k GOSUB 1630 1380 NEXT RN 1390 GOTO 790 1400 INPUT "WHAT IS THE LOWER FREQUENCY LIMIT ";LF:REM LIST BY FREQ 1410 INPUT "WHAT IS THE UPPER FREQUENCY LIMIT ";UF 1420 IF UF MJ LF 4 k PRINT BL$;"ERROR": GOTO 360 1430 FOR RN ! 1 RESET LR 1440 GOSUB 2590 1450 F # VAL (FQ$) 1460 IF F _{P LF 6 k IF F NJ UF 5 k GOSUB 1630 1470 NEXT RN 1480 GOTO 790 1481 FOR RN # 1 RESET LR:REM LIST BY QSL'D 1482 GOSUB 2590 1483 IF QR$%"Y" 7 k 1485 1484 IF QS$RJ _{P " " 8 k IF QS$QJ ^{P "N" 6 k IF QS$MJ Z{P"0" 3 k GOSUB 1630 1485 NEXT RN:GOTO 790 1490 N1 N1 NBJ 1: REM NEW PAGE 1500 IF L2 ]{P L1 OBJ 6 7 k 1520 1510 FOR J ! L2 OBJ 1 RESET L1 QBJ 6: OUT:NEXT J 1520 OUT TO 29)"LOG OF "MK$;TO 55)"PAGE ";N1 1530 OUT TO 33)"VOL ";VL 1540 OUT 1550 OUT TO 50)"HIS MY QSL" 1560 OUT "RCD# DATE TIME CALL FREQ MODE PWR RST RST QRT S/R"; 1570 IF NW MJ  PW 4 k OUT " COMMENTS"; 1580 OUT 1590 OUT "---- -------- ---- ---------- -------- --- ---- --- --- ---- ---"; 1600 IF NW MJ  PW 4 k OUT " ---------------"; 1610 OUT 1620 L2 ! 12: RETURN 1630 IF L2 PBJ 3 `{P L1 @=C 6 7 k GOSUB 1490: REM NEW PAGE 1640 OUT RN;TO 6)DT$;TO 15)UT$;TO 20)KL$;TO 31)FQ$;TO 40)MD$;TO 45)PR$; 1650 OUT TO 50)RS$;TO 54)RR$;TO 58)UE$;TO 63)QS$;"/";QR$; 1760 IF NW OJ ! PW 6 k OUT " ";CM$:L2 " L2 PBJ 1: GOTO 1800 1770 OUT 1780 OUT TO 6)"COMMENTS: ";CM$ 1790 OUT :L2 # L2 PBJ 3 :X % 1 1800 RETURN 1810 PRINT:PRINT "ENTER THE RECORD # TO BE EDITED OR" 1820 A$$"": INPUT " TO EDIT THE LAST LOG ENTRY ";A$ 1830 IF A$$"" 7 k RN # LR: GOTO 1850 1840 RN # VAL (A$) 1850 IF RN `{P LR 7 k 2210 1860 IF RN QJ 1 ; k 2210 1870 FIELD:GOSUB 2590: GOSUB 800: GOSUB 850 1880 A$$"":INPUT "EDIT THIS (Y/N) ";A$ 1890 IF A$RJ _{P "Y" 8 k 360 1900 PRINT "ENTER TO LEAVE AN ITEM UNCHANGED." 1910 PRINT "ENTER A NEW VALUE TO CHANGE IT." 1920 PRINT:PRINT "DATE: ";DT$;:DA$%"": INPUT DA$: IF DA$OJ \{P"" 4 k GOSUB 2240:7I INPUT DT$ DA$ 1930 PRINT "STARTING TIME: ";UT$;:U$"":INPUT U$: IF U$KJ X{P"" 1 k GOSUB 2350:LSETUT$ U$ 1940 PRINT "FREQUENCY: ";FQ$;:A$"":INPUT A$: IF A$"" 2 k 1970 1950 IF LEN (A$)\{P 8 6 k PRINT BL$;E1$;8;E2$:GOTO 1940 1960 8I INPUT FQ$! A$ 1970 PRINT "MODE: ";MD$;:A$!"":INPUT A$: IF A$!"" 4 k 2000 1980 IF LEN (A$)]{P 3 7 k PRINT BL4;E1$;3;E2$: GOTO 1970 1990 9I INPUT MD$" A$ 2000 PRINT "POWER: ";PR$;:A$""":INPUT A$: IF A$""" 5 k 2030 2010 IF LEN (A$)]{P 4 7 k PRINT BL$;E1$;4;E2$: GOTO 2000 2020 9I INPUT PR$" A$ 2030 PRINT "RST SENT: ";RS$:A$""":INPUT A$: IF A$""" 5 k 2060 2040 IF LEN (A$)]{P 3 7 k PRINT E1$;3;E2$: GOTO 2030 2050 9I INPUT RS$" A$ 2060 PRINT "MY RST: ";RR$;:A$""":INPUT A$: IF A$""" 4 k 2090 2070 IF LEN (A$)^{P 3 8 k PRINT E1$;3;E2$: GOTO 2060 2080 :I INPUT RR$# A$ 2090 PRINT "ENDING TIME: ";UE$;:U$#"":INPUT U$: IF U$OJ \{P"" 2 k GOSUB 2350:8I INPUT UE$ U$ 2100 PRINT "QSL SENT: ";QS$;:A$"": INPUT A$: IF A$"" 1 k 2130 2110 IF LEN(A$)LJ Y{P 1 5 k PRINT BL$;E1$;1;E2$: GOTO 2100 2120 7I INPUT QS$ A$ 2130 PRINT "QSL RCVD: ";QR$;:A$ "":INPUT A$: IF A$ "" 3 k 2160 2140 IF LEN(A$)MJ Z{P 1 6 k PRINT BL$;E1$;1;E2$: GOTO 2130 2150 8I INPUT QR$! A$ 2160 PRINT "COMMENTS: ";CM$:A$!"":INPUT " ";A$: IF A$"" 1 k 2190 2170 IF LEN (A$){PC1 2 k PRINT BL$;E1$;C1;E2$: GOTO 2160 2180 7I INPUT CM$ A$ 2190 AS$!"":INPUT "OK (Y/N) ";A$: IF A$MJ Z{P"Y" 3 k 360 2200 GOSUB 2760: GOTO 360 2220 REM GET DATE 2230 DA$""":INPUT "WHAT IS THE DATA (MM/DD/YY) ";DA$ 2240 IF LEN(DA$)NJ 6 7 k 2330 2250 IF MID$ (DA$,3,1)%"/" 8 k 2280 2260 IF MID$ (DA$,2,1)RJ _{P"/" 8 k 2330 2270 DA$""0" OBJ DA$ 2280 IF MID$ (DA$,6,1)%"/" 8 k 2310 2290 IF MID$ (DA$,5,1)SJ `{P "/" 9 k 2330 2300 DA$" LEFT$ (DA$,3) RBJ "0" RBJ RIGHT$ (DA$,4) 2310 IF LEN (DA$)PJ ]{P 8 8 k 2330 2320 RETURN 2330 PRINT BL$;"INVALID. RE-ENTER.": GOTO 2220 2340 U$#"":INPUT "(HHMM) ";U$: REM GET TIME 2350 IF LEN (U$)`{P 4 : k PRINT BL$;E1$;4;E2$;" RE-ENTER": GOTO 2340 2360 IF U$ "" 3 k RETURN 2370 IF LEN (U$)NJ 4 7 k FOR J " LEN (U$) PBJ 1 RESET 4:U$#"0" PBJ U$: NEXT J 2380 RETURN 2390 REM GET CALL SIGN 2400 K$!"":INPUT "WHAT IS THE CALL SIGN ";K$ 2410 IF LEN (K$)]{P 10 6 k PRINT BL$;E1$;10;E2$: GOTO 2400 2420 IF LEN (K$)MJ 4 6 k 2460 2422 FOR J 1 RESET LEN(K$):IF MID$(K$,J,1)#"/" 6 k J " J ==C 1:GOTO 2425 2423 NEXT J 2425 IF J \{P 6 6 k J " 6 2426 KX$" MID$(K$,1,J) 2430 H " ASC ( MID$ (K$,4,1)) ?=C ASC ("A") PBJ 1 2440 IF H NJ 1 7 k 2460 2450 IF H NJ 26 8 k RETURN 2460 PRINT BL$;"INVALID CALL": GOTO 2400 2470 REM MENU 2480 PRINT:PRINT HI$:PRINT TO 15)"***************************************" 2485 PRINT TO 15)" LOG BOOK MENU " 2490 PRINT TO 15)" " 2500 PRINT TO 15)" '?' SHOWS THIS MENU " 2510 PRINT TO 15)" 'QSO' ENTERS A NEW QSO INTO THE LOG " 2520 PRINT TO 15)" 'QRT' EXITS THE LOG PROGRAM " 2530 PRINT TO 15)" 'LIST' RETRIEVES/PRINTS LOG DATA " 2540 PRINT TO 15)" 'FIND' FINDS A CALL IN THE LOG BOOK " 2550 PRINT TO 15)" 'LAST' SHOWS LAST 5 LOG ENTRIES " 2560 PRINT TO 15)" 'EDIT' EDITS A LOG ENTRY " 2570 PRINT TO 15)"**************************************" 2580 PRINT LO$:PRINT:RETURN 2590 REM READ LOG 2600 <I GOTO #1,RN RBJ 1 2750 RETURN 2760 REM WRITE LOG 2780 <I LET #1,RN RBJ 1 2920 RETURN 2930 REM READ F2 2940 =I GOTO #2,RN 2950 P %\END(P$) 2960 G$' QL$:GOSUB 3040:QM$$ G$ 2980 RETURN 2990 REM WRITE F2 3000 ;I INPUT P$#\DATA(P) 3010 ;I LET #2,RN:RETURN 3040 REM REMOVE TRAILING BLANKS FOR G$ 3050 FOR J # 1 RESET LEN (G$): IF MID$ (G$,J,1)%" " 8 k 3070 3060 NEXT J 3070 IF J " 1 8 k G$%"":RETURN 3080 G$$ MID$ (G$,1,J B=C 1) 3090 RETURN 3100 PRINT:PRINT TO 9)"INITIALIZING LOG FILES" 3120 PRINT :MK$$"":INPUT "WHAT IS YOUR CALL ";MK$ 3130 PRINT:INPUT "WHAT VOLUME NUMBER IS THIS LOG ";VL 3140 PRINT:GOSUB 2220:CD$% DA$ 3150 ;I INPUT DT$$"0":LR # 0 3160 =I INPUT KL$& MK$:=I INPUT FQ$% CD$ 3170 =I INPUT UT$& STR$(VL):=I INPUT CM$% CD$ 3180 RN $ 0: GOSUB 2760 3190 FOR RN # 1 RESET 26 3210 GOSUB 2990 3220 NEXT RN 3230 GOTO 230 R$(VL):=I INPUT CM$% CD$ 3180 RN $ 0: GOSUB 2760 3190 FOR RN # 1 RESET 26 3210 GOST:RETURN 2590 REM READ LOG 2600 <I GOTO #1,RN RBJ 1 2750 RETURN 2760 REM WRITE LOG 2780 <I LET #1,RN RBJ 1 2920 RETURN 2930 REM READ F2 2940 =I GOTO #2,RN 2950 P %\END(P$) 2960 G$' QL$:GOSUB 3040:QM$$ G$ 2980 RETURN 2990 REM WRITE F1 GOTO 10 2 SAVE "ORBITPRG.BAS" 3 END 10 PRINT CHR$(26) 15 PRINT "OBBITAL CROSSING PROGRAM by Dr. Ralph E. Taggert" 20 PRINT 25 INPUT "WHAT IS THE NAME OF THE SPACECRAFT";A$ 30 INPUT "ENTER THE ORBITAL PERIOD (IN MINUTES)";P 35 PRINT "ENTER THE MONTH, DAY, AND YEAR OF REFERENCE CROSSING" 40 INPUT "MONTH";L:INPUT "DAY";J:INPUT "YEAR";K:GOSUB 900:D=W:Z=W:PRINT CHR$(26) 45 INPUT "REFERENCE ORBIT NUMBER";N:X=N 50 PRINT "ENTER HOUR, MINUTE AND SECOND OF REFERENCE CROSSING" 55 INPUT "HOUR";H:INPUT "MINUTE";M:INPUT "SECOND";S:A=(60*H)+M+(S/60):G=A:PRINT CHR$(26) 60 INPUT "REFERENCE CROSSING POINT (DEG W)";C:Y=C 65 PRINT "ENTER MONTH, DAY, AND YEAR FOR DISPLAY" 70 INPUT "MONTH";L:INPUT "DAY";J:INPUT "YEAR";Q:GOSUB 900:T=W:PRINT CHR$(26) 75 IF QD+5 THEN 500 90 GOSUB 940 100 A=A+P:N=N+1 110 IF A>1440 THEN A=A-1440 120 C=((P/1440)*360)+C 130 IF C>360 THEN C=C-360 140 IF D=T THEN 200 150 IF D>T THEN 300 160 GOTO 100 200 H=INT(A/60) 210 M=INT(A-(H*60)) 220 S=A((H*60)+M):S=INT(S*60) 230 E=C+.05:E=INT(E*10)/10 240 PRINT N,H;":";M;":";S,E 250 GOTO 100 300 INPUT "DO YOU WANT ANOTHER DAY'S DATA (Y=1 N=0)";R 310 IF R=0 THEN 400 320 PRINT "ENTER MONTH, DAY, AND YEAR FOR DISPLAY" 330 INPUT "MONTH";L:INPUT "DAY";J:INPUT "YEAR";Q:GOSUB 900:T=W:PRINT CHR$(26) 340 IF QD+5 THEN 500 385 IF D>T THEN D=Z:A=G:C=Y:N=X:GOTO 75 390 GOSUB 940:GOTO 100 400 PRINT CHR$(26): INPUT "ANOTHER SPACECRAFT";R 410 IF R=1 THEN PRINT CHR$(26):GOTO 25 420 END 500 D=Z:A=G:C=Y:N=X 505 B=(T-1)-D:I=1440*B:B=INT(I/P)+1 510 A=(B*P)-I 520 V=B*((P/1440)*360):U=INT(V/360):C=V-(U*360) 530 D=T-1:N=N+B 540 GOSUB 940:GOTO 100 899 END 900 W=0 901 IF L=1 THEN W=J:RETURN 902 IF L=2 THEN W=31+J:RETURN 903 IF L=3 THEN W=59+J:RETURN 904 IF L=4 THEN W=90+J:RETURN 905 IF L=5 THEN W=120+J:RETURN 906 IF L=6 THEN W=151+J: RETURN 907 IF L=7 THEN W=181+J:RETURN 908 IF L=8 THEN W=212+J:RETURN 909 IF L=9 THEN W=243+J:RETURN 910 IF L=10 THEN W=273+J:RETURN 911 IF L=11 THEN W=304+J:RETURN 912 IF L=12 THEN W= 334+J:RETURN 930 PRINT "SORRY - PROGRAM DOES NOT COMPUTE DATA" 931 PRINT "PRIOR TO REFERENCE CROSSING":RETURN 940 PRINT CHR$(26):PRINT "DATE ";L;"/";J;"/";Q;" ";A$ 941 PRINT ORBIT","TIME","DEGREES W":RETURN 950 PRINT CHR$(26):PRINT "YOU JUST PRINTED DATA FOR ";L;"/";J;"/";Q 951 RETURN 999 END NT ORBIT","TIME">T THEN D=Z:A=G:C=Y:N=X:GOTO 75 390 GOSUB 940:GOTO 100 400 PRINT CHR$(26): INPUT "ANOTHER SPACECRAFT";R 410 IF R=1 THEN PRINT CHR$(26):GOTO 25 420 END 500 D=Z:A=G:C=Y:N=X 505 B=(T-1)-D:I=1440*B:B=INT(I/P)+1 510 A=(B*P)-I 520 V=B*((P/1440)*360):U=INT(V/360):C=V-(U*360) 530 D=T-1:N=N+B 540 GOSUB 940:GOTO 100 899 END 900 W=0 901 IF L=1 THEN W=J:RETURN 902 IF L=2 THEN W=31+J:RETURN 903 IF L=3 THEN W=59+J:RETURN 904 IF L=4 THEN W=90+J:RETURN 905 IF L=5 THEN W=120+J:RETURN 906 IF L=6 THEN W=151+program dgptr(output); {digital repeater control program} (*$c-,e-,f-,m-,p-,r-,s+,t-*) const maxinfofld = 128; {maximum info field in a frame} maxinfocnt = 129; {maximum info field count - 1} type tcbptr = ^tcb; {task control block pointer} qcbptr = ^qcb; {queue header pointer} mcbptr = ^mcb; {message control block pointer} frmptr = ^frame; {frame pointer} taskstate = (active,ready,blocked); {task running state} prid = 0..255; {priority and id} tcb = record {task control block} tcblk: tcbptr; {next lower priority tcb} tcbwt: tcbptr; {next waiting tcb} tcbsw: taskstate; {task status word} tcbmd: 0..255; {task mode} tcbrm: mcbptr; {message passed from rcv call} tcbid: prid; {task identity} tcbpr: prid; {task priority: 0=high, 255=low}  tcbsb: integer; {bottom of stack} tcbst: integer; {top of stack} tcbhb: integer; {bottom of heap} tcbpc: integer; {task start address} end; qcb = record {queue control block} qcblk: frmptr; {first message in queue} qcbwt: tcbptr; {first waiting tcb in queue} end; mcb = record {message control block} mcblk: frmptr; {next message in queue} mcbtp: 0..255; {message type} mcbvl: 0..255; {message value} end; byte = 0..255; {a byte} code = 0..255; {frame status} addressfield = byte; {address field octet} controlfield = byte; {control field octet} infofield = array[0..maxinfocnt] of byte; {information field length+2} textfield = array[1..70] of char; frame = record {frame control block}  lnk: mcb; {linkage to next frame} len: integer; {length of info field} cnt: integer; {current rcv or xmt count} res: 0..7; {residual byte length} adr: addressfield; {frame address} ctl: controlfield; {control field} inf: infofield; {information field} end; lcb = record lineno: 0..31; {physical line in system} baudrate: integer; {system clock divisor baud rate} clockrate: integer; {system clock divisor for 100 ms} timeout: 0..255; {100 ms. clock ticks for T1} a1: array[1..7] of byte; chfree: boolean; {current line state} modemchar: code; {modem characteristics} modemout: byte; {modem output status byte} modemin: byte; {modem input status byte} a2: array[1..19] of byte; rcvstatus: code; {rcv status} rcvmsg: mcb; {rcv message location} rcvframes: qcb; {rcv frames queue} a3: array[1..10] of byte; xmtstatus: code; {xmt status} xmtmsg: mcb; {xmt message location} xmtframes: qcb; {xmt frames queue} a4: array[1..8] of byte; end; var qfree: qcb; {free buffer pool} msg: mcbptr; {incoming message temporary} line: lcb; {line control block} iorun: boolean; {run flag} timecount: integer; {counter for main delay loop} freecount: integer; {counter for channel free condition} fp0,fp1,fp2,fp3: frmptr; {frame pointer temporaries} fp4,fp5,fp6,fp7: frmptr; {frame pointer temporaries} i,j,k: integer; (*$i+*) procedure initio;external; {initialize interrupt system} procedure enable;external; {turn on interrupt system, unfreeze proc. env.} procedure lkopn(var line: lcb);external; {initialize hdlc hardware} procedure lkcls(var line: lcb);external; {deinit hdlc hardware} procedure lkrcv(var line: lcb);external; {start packet receiver} procedure lkxmt(var line: lcb);external; {start packet transmitter} procedure lksts(var line: lcb);external; {line modem status} procedure cwid(var line: lcb);external; {cw identification} procedure delay(time: integer);external; {100 msec delay loop} {This procedure adds a frame to the end of the current list of frames.} procedure enquepkt(var qhdr: qcb; var fp: frmptr); var mp: frmptr; {pointer temporary} empty: boolean; {flag for an empty list} begin fp^.lnk.mcblk := nil; {reset link to next message} mp := qhdr.qcblk; {first message in list} empty := mp = nil; {flag for an empty list} if not empty then {queue has messages already waiting} begin while mp^.lnk.mcblk<>nil do mp := mp^.lnk.mcblk; {find end list} mp^.lnk.mcblk := fp; {put message at end of list} end else {queue is empty} begin qhdr.qcblk := fp {just add a new message} end; end; {This procedure initializes the receive frames and starts the receiver} procedure startrcvr; var fpr: frmptr; {temporary frame pointer} begin line.rcvframes.qcblk := nil; {reset the rcv queue} enquepkt(line.rcvframes,fp0); {enque frame for receiving} enquepkt(line.rcvframes,fp1); {enque frame for receiving} enquepkt(line.rcvframes,fp2); {enque frame for receiving} enquepkt(line.rcvframes,fp3); {enque frame for receiving} enquepkt(line.rcvframes,fp4); {enque frame for receiving} enquepkt(line.rcvframes,fp5); {enque frame for receiving} enquepkt(line.rcvframes,fp6); {enque frame for receiving} enquepkt(line.rcvframes,fp7); {enque frame for receiving} fpr := fp0; {initialize chain} repeat fpr^.lnk.mcbvl := 0; {zero frame status} fpr^.len := 2 + maxinfofld + 2; {set packet length maximum size + crc} fpr := fpr^.lnk.mcblk; {next frame in list} until fpr = nil; {end of list} lkrcv(line); {start the receiver} end; {This procedure initializes a new frame for transmission.} procedure fillpkt(fp: frmptr;adr: addressfield;ctl: controlfield; tfcount: integer;textstr:textfield); var i: integer; begin fp^.len := 4 + tfcount; {total xmt count} fp^.res := 0; {no residual bits} fp^.adr := adr; {initialize address field} fp^.ctl := ctl; {initialize control field} for i := 1 to tfcount do fp^.inf[i-1] := ord(textstr[i]); {move text} fp^.inf[tfcount] := 13; {add carriage return} fp^.inf[tfcount+1] := 10; {add line feed} end; {Send packets out for the beacon} procedure beacon; begin line.xmtframes.qcblk := nil; {reset the xmt queue} fillpkt(fp0,255,0,70, 'This is the KA6M ASCII/HDLC beacon in Menlo Park, California Rev 2.10'); fillpkt(fp1,255,2,69, 'The quick brown fox jumped over the lazy dog''s back. 0123456789 !@#$% '); fillpkt(fp2,255,20,70, 'You are receiving the signal of San Francisco''s first packet repeater.'); enquepkt(line.xmtframes,fp0); {enque frame 0} enquepkt(line.xmtframes,fp1); {enque frame 1} enquepkt(line.xmtframes,fp2); {enque frame 2} lkxmt(line); {transmit the packets} while line.xmtstatus = 0 do ; {wait for end of xmt} end; {Validate and repeat a packet.} procedure retransmit; var fpt: frmptr;  {frame being examined} fptnx: frmptr; {next frame in linkage} adr: addressfield; {local storage for address} adrok: boolean; {address in range flag} pst: 0..255; {packet status} pktok: boolean; {packet status acceptable flag} begin line.xmtframes.qcblk := nil; {reinit transmit queue} fpt := fp0; {pointer to first frame in chain} repeat fptnx := fpt^.lnk.mcblk; {get next frame in linkage} adr := fpt^.adr; {get received address} adrok := (adr>=128) and (adr<160); {address in range} pst := fpt^.lnk.mcbvl; {packet status} pktok := (pst=3) or (pst=7); {packet status without errors} if adrok and pktok then {repeat the packet} begin fpt^.len := fpt^.cnt; {set transmit length} fpt^.res := 0;  {no residue bits} fpt^.adr := fpt^.adr+32; {use sender's address offset by 32} enquepkt(line.xmtframes,fpt); {place frame onto transmit queue} end; fpt := fptnx; {point to next frame, if any} until fptnx = nil; {stop if end of chain} if line.xmtframes.qcblk <> nil then {if there any good packets} begin lkxmt(line); {transmit them} while line.xmtstatus = 0 do {nothing}; {wait for end of transmit} end; startrcvr; {restart receiver} end; begin {main program} initio; {set up interrupt world} lkopn(line); {initialize the hardware} enable; {turn on interrupt system} new(fp0);new(fp1);new(fp2);new(fp3); {allocate some frames} new(fp4);new(fp5);new(fp6);new(fp7); {allocate some frames} iorun  := true; {run forever} while iorun do begin cwid(line); {identify} beacon; {transmit beacon information} startrcvr; {setup and start the receiver} timecount := 3000; {controls delay before next id} freecount := 0; {controls free channel timer} repeat {listen for packets loop} delay(1); {wait 100 milliseconds} lksts(line); {get current modem status} if ((fp0^.lnk.mcbvl<>1) and line.chfree) then retransmit; {repeat pkt} if not line.chfree then freecount := 0 {count up 30 sec of clear chnl} else freecount := freecount + 1; if timecount <> 0 then timecount := timecount - 1; {countdown cwid} until (timecount = 0) and (freecount > 300); end; lkcls(line); {close down the hardware} end. acon; {transmit beacon information} startrcvr; {setup and start the receiver} timecount := 3000; {controls delay before next id} freecount := 0; {controls free channel timer} repeat {listen for packets loop} delay(1); {wait 100 milliseconds} lksts(line); {get current modem status} if ((fp0^.lnk.mcbvl<>1) and line.chfree) then retransmit; {repeat pkt} if not line.chfree then freecount := 0 {count up 30 sec of clear chnl} else freecount := freecount + 1; if timecount <> 0 then timecount := timecount - 1; {countdown cwid} until (timecount = 0) and (freecount > 300); end; lkcls(line); {close This is the release date of the disk. DOC BAS DELUXQSLBAS DELUXQSLDOC LOG BAS LOG DOC LOGFMT LOGPRINT OKIQSL BAS SUPERDUPBAS  SUPERDUPDAT SUPERDUPDOC TENTEN BAS  TENTEN DOC TIMEMACHBAS SUPERDUP.BAS C1 B0 3072 24 SUPERDUP.DAT CE 82 128 1 SUPERDUP.DOC EE E6 512 4 TENTEN .BAS FC 47 3072 24 TENTEN .DOC FD 00 640 5 TIMEMACH.BAS E2 F4 3712 29 TIMEMACH.DOC 77 07 256 2 QSO .BAS 65 7A 640 5 QSOEDIT .BAS 7F 07 2816 22 QSOFIND .BAS FD BC 768 6 QSOLIST .BAS E1 8C 640 5 QSOSCAN .BAS 2D E5 2176 17 RTY  Fog Library Disk FOG-CPM.013 Copyright (1985) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Disk 1 of 2. These programs for Amateur Radio operators (Hams) may not work properly. They have been released at the request of members who hope to make them work and then submit polished versions. Most require MBasic; some need dBASE or CBasic and some stand alone. Filename Description -12-00 .85 This is the release date of the disk. -CPM013 .DOC This is the description of the disk contents. MENU .BAS 032A 1K [Ham Radio Menu 1 of 16] A collection of MBasic programs, all callable from a menu, to print QSL cards, log contests, organize 10x numbers, etc. for Ham Radio operators. Designed for Osborne 1 but most modules will work on other CP/M computers. Source included for all modules. DOC .BAS 6A2D 1K [Ham Radio Menu 2 of 16] DELUXQSL.BAS 88EC 5K [Ham Radio Menu 3 of 16] DELUXQSL.DOC 3661 1K [Ham Radio Menu 4 of 16] LOG .BAS 465E 2K [Ham Radio Menu 5 of 16] LOG .DOC E650 2K [Ham Radio Menu 6 of 16] LOGFMT . 6B0F 1K ! [Ham Radio Menu 7 of 16] LOGPRINT. 8760 1K [Ham Radio Menu 8 of 16] OKIQSL .BAS 3FA5 5K [Ham Radio Menu 9 of 16] SUPERDUP.BAS C1B0 3K [Ham Radio Menu 10 of 16] SUPERDUP.DAT CE82 1K [Ham Radio Menu 11 of 16] SUPERDUP.DOC EEE6 1K [Ham Radio Menu 12 of 16] TENTEN .BAS FC47 3K [Ham Radio Menu 13 of 16] TENTEN .DOC FD00 1K [Ham Radio Menu 14 of 16] TIMEMACH.BAS E2F4 4K [Ham Radio Menu 15 of 16] TIMEMACH.DOC 7707 1K [Ham Radio Menu 16 of 16] QSO .BAS 657A 1K [QSO 1 of 5] CBasic source for QSO (Ham radio) record menu. QSOEDIT .BAS 7F07 3K [QSO 2 of 5] QSOFIND .BAS FDBC 1K [QSO 3 of 5] QSOLIST .BAS E18C 1K [QSO 4 of 5] QSOSCAN .BAS 2DE5 3K [QSO 5 of 5] RTY .COM 5959 15K [RTTY 1 of 3] RTTY program for Ham radio operators. RTYCPM .DOC 0250 9K [RTTY 2 of 3] RTY .CFG 4A3A 1K [RTTY 3 of 3] VERTICAL.BAS 4468 5K Determines 1/4 wave vertical antenna length for Ham Radio operators. VHF-YAGE.BAS 8A3F 3K Calculates dimensions of VHF yagi antenna for Hams. VHFPROP .BAS 8E9A 1K Calculates propagation from height, distance, and radius for Hams. DIPOLE .BAS FE4D 3K Calculates 1/2 wave dipole resonant length for Hams ORBIT .BAS AF43 28K AMSAT Orbital prediction program for Ham Radios. CODE .BAS 0CB8 2K Morse code receiving program. CONTEST .BAS BDF7 3K [QSL contest 1 of 2] QSL contest logging program for Ham Radio programs. COPY . 9FBB 5K [QSL contest 2 of 2] LOGBOOK .BAS 2EEC 12K Comprehensive log program for Hams. ORBITPRG.BAS DDE9 3K Orbital crossing program for Ham Radio operators. DGPTR .PAS F107 12K Digital repeater control program for Hams. IF diskno="000" IF dfile="FOG-DOS" ? "  This is the release date of the disk. DOC BAS DELUXQSLBAS DELUXQSLDOC LOG BAS LOG DOC LOGFMT LOGPRINT OKIQSL BAS SUPERDUPBAS  SUPERDUPDAT SUPERDUPDOC TENTEN BAS  TENTEN DOC TIMEMACHBAS "#$%&'