962 IF RST THEN INPUT "ENTER THE NAME OF THE FILE CONTAINING RUNTIME PARAMETERS";PS$
964 IF LEFT$(PS$,1)=" " THEN PS$=RIGHT$(PS$,LEN(PS$)-1):GOTO 964
967 IF PS$="" THEN PARMS$="PARMS.RTY" ELSE PARMS$=PS$
970 ON ERROR GOTO 3280
980 FERR=0:OPEN PARMS$ FOR INPUT AS #1
990 IF FERR THEN GOTO 1480
1000 WHILE NOT EOF(1)
1010 INPUT#1,P$
1020 FOR PL=1 TO LEN(P$)
1030 P=ASC(MID$(P$,PL,1)):IF (P>&H60) AND (P<&H7B) THEN MID$(P$,PL,1)=CHR$(P-&H20)
1040 NEXT PL:PL$=LEFT$(P$,4):PRINT P$
1050 IF PL$="XTAL" THEN PL=INSTR(P$,"="):IF PL=0 OR PL=LEN(P$) THEN 1460 ELSE XTAL!=VAL(RIGHT$(P$,LEN(P$)-PL))*1000000!/16:GOTO 1470
1060 IF PL$="COMM" THEN PL=INSTR(P$,"="):IF PL=0 OR PL=LEN(P$) THEN 1460 ELSE DIV.LSB=VAL(RIGHT$(P$,LEN(P$)-PL)):GOTO 1470
1070 IF PL$="COM2" THEN COMM=2:DIV.LSB=&H2F8:GOTO 1470
1080 IF PL$="TIME" THEN PL=INSTR(P$,"="):IF PL=0 OR PL=LEN(P$) THEN 1460 ELSE TMTYP$=RIGHT$(P$,LEN(P$)-PL):IF LEFT$(TMTYP$,1)="?" THEN GOTO 1470 ELSE QTIME=0:TMTYP$=LEFT$(TMTYP$,3):GOTO 1470
1090 IF LEFT$(PL$,3)="RTS" THEN PL=INSTR(P$,"="):IF PL=0 OR PL=LEN(P$) THEN 1460 ELSE RTS=VAL(RIGHT$(P$,LEN(P$)-PL)):IF (RTS>1 AND RTS<10) OR (RTS>11) THEN 1460 ELSE 1470
1100 IF LEFT$(PL$,3)="DTR" THEN PL=INSTR(P$,"="):IF PL=0 OR PL=LEN(P$) THEN 1460 ELSE DTR=VAL(RIGHT$(P$,LEN(P$)-PL)):IF (DTR>1 AND DTR<10) OR (DTR>11) THEN 1460 ELSE 1470
1110 IF PL$<>"BAUD" THEN 1120 ELSE PL=INSTR(P$,"="):IF PL=0 OR PL=LEN(P$) THEN 1460
1112 IF PL=5 THEN IF MAXBAUD(1)=10 THEN 1460 ELSE P=MAXBAUD(1):MAXBAUD(1)=P+1:GOTO 1114 ELSE P=VAL(MID$(P$,5,PL-5)):IF P>10 OR P>MAXBAUD(1)+1 THEN 1460 ELSE IF P>MAXBAUD(1) THEN MAXBAUD(1)=P:P=P-1 ELSE P=P-1
1120 IF PL$<>"ASCI" THEN 1130 ELSE PL=INSTR(P$,"="):IF PL=0 OR PL=LEN(P$) THEN 1460
1122 IF PL=5 THEN IF MAXBAUD(0)=10 THEN 1460 ELSE P=MAXBAUD(0):MAXBAUD(0)=P+1:GOTO 1124 ELSE P=VAL(MID$(P$,5,PL-5)):IF P>10 OR P>MAXBAUD(0)+1 THEN 1460 ELSE IF P>MAXBAUD(0) THEN MAXBAUD(0)=P:P=P-1 ELSE P=P-1
1450 IF PL$="FILE" THEN PL=INSTR(P$,"="):IF PL=0 OR PL=LEN(P$) THEN 1460 ELSE P=VAL(MID$(P$,5,PL-5)):IF P<1 OR P>10 THEN 1460 ELSE FLNM$(P)=RIGHT$(P$,LEN(P$)-PL):GOTO 1470
1460 PRINT "INVALID PARMS.RTY ENTRY":PRINT " ";P$;" ":INPUT "PRESS ENTER TO CONTINUE";P$
1470 WEND
1480 CLOSE #1
1490 P=VAL(RIGHT$(TIME$,2)):P=P+3:IF P>59 THEN P=P-60
1846 IF UNSHIFT THEN FK$(4)="UOS ON" ELSE FK$(4)="UOS OF"
1850 ON ERROR GOTO 3210
1860 'START COMMUNICATIONS FILE
1870 I = INP(LINE.STS)
1871 IF PACKET THEN 1875
1873 OPEN COMM$+":110,N,7,2,RS,CS0,DS0,CD0" AS #1:GOTO 1880
1875 OPEN COMM$+":110,N,8,1" AS #1:
1876 GOSUB 3970:'SET TO XMIT MODE
1880 GOSUB 3570:'SET MODE
1890 OUT MOD.CTL,(INP(MOD.CTL) AND &HFC) OR RMSK:'SET DTR AND RTS (PUT T.U. IN RX MODE)
1900 ON KEY(1) GOSUB 3320:KEY(1) ON:ON KEY(2) GOSUB 3970:KEY(2) ON
1910 GOSUB 3320
1920 IF NOT QTIME THEN 2010
1930 CLS:PRINT "THE DEFAULT TIME TYPE IS 'UTC'":INPUT "ENTER THE TIME TYPE ";TMTYP$:IF TMTYP$="" THEN TMTYP$="UTC" ELSE FOR PL=1 TO LEN(TMTYP$):P=ASC(MID$(TMTYP$,PL,1)):IF (P>&H60) AND (P<&H7B) THEN MID$(TMTYP$,PL,1)=CHR$(P-&H20):NEXT PL
1940 TMTYP$=LEFT$(TMTYP$,3)
1950 PRINT "THE TIME IS SET TO "+TIME$+" "+TMTYP$
1960 INPUT "ENTER THE TIME ";TCH$
1970 IF TCH$<>"" THEN TIME$ = TCH$
1980 PRINT "THE DATE IS SET TO "+DATE$
1990 INPUT "ENTER THE DATE ";TCH$
2000 IF TCH$<>"" THEN DATE$=TCH$
2010 TCH = VAL(RIGHT$(DATE$,4)):MON(2)=28:IF (TCH MOD 4) = 0 AND (TCH MOD 100) <>0 THEN MON(2)=29
2020 IF TMTYP$="UTC" THEN UTM=0 ELSE IF ZTM THEN INPUT "ENTER THE TIME DIFFERENCE FOR ZULU TIME";UTM
2030 CLS:GOSUB 3980:GOSUB 3420
2035 IF PACKET AND PDATOK THEN GOSUB 6030
2036 FOR I = 1 TO 12
2037 CALL SCROLL (RRB,RRE,CMAX,SCRX)
2038 CALL SCROLL (RWB,RWE,CMAX,SCTX)
2039 NEXT I
2040 LOCATE RW,CW,0:COLOR TXBR,TXFR:PRINT " ";
2050 GOSUB 5640:TSS!=TCS!
2060 IF INKEY$<>"" THEN 2060:'CLEAR THE INKEY$ BUFFER
2070 GOSUB 5660
2080 REM $PAGE
2090 '
2100 'THIS IS THE MAIN PROGRAM LOOP
2110 COLOR STSF,STSB:LOCATE 12,1,0:PRINT TIME$+" "+TMTYP$;:IF DATE$ <> ZDT$ THEN GOSUB 5660
2120 GOSUB 5640:IF TCS!<TSS! THEN TCS!=TCS!+86400!
2130 TS!=TCS!-TSS!:TH=INT(TS!/3600):TM=INT(TS!/60)-TH*60:TS=TS!-CSNG(TH)*3600-CSNG(TM)*60:LOCATE 12,30,0:PRINT USING "##_:##_:##";TH,TM,TS;
2140 IF BFILE THEN IF CMAX=40 THEN LOCATE 13,1,0 ELSE LOCATE 12,41,0
2150 IF BFILE THEN PRINT LEFT$("RX-"+BF$,19);
2160 IF RFILE THEN IF CMAX=40 THEN LOCATE 13,21,0 ELSE LOCATE 12,61,0
2170 IF RFILE THEN PRINT LEFT$("TX-"+RF$,19);
2180 COLOR TXF,TXB
2190 TCS!=FRE("")
2200 IF MSG THEN IF PMSG=VAL(RIGHT$(TIME$,2)) THEN GOSUB 5730
2210 FOR ML = 1 TO 10
2220 IF RST THEN IF PS$="" THEN 1750 ELSE CLOSE:CLEAR:RST=-1:GOTO 400
2230 IF NEWLINE THEN NEWLINE=0:B$=CHR$(13):GOSUB 3890:B$=CHR$(10):GOSUB 3890
2240 FOR MLL = 1 TO 2:IF NOT EOF(1) THEN GOSUB 2560:NEXT MLL
2250 IF TXEND THEN GOSUB 4010:GOTO 2280
2260 IF MODE=1 AND BUFS<>BUFE THEN GOSUB 4110 ELSE IF DIDL AND (MODE=1) AND NOT TPAUSE THEN GOSUB 5640:IF LDS<>SS THEN LDS=SS:COA=0:GOSUB 4190
2270 IF COA = 5 THEN GOSUB 3970:COA=0
2280 IF BUFFULL THEN 2320
2290 IF UNCOMP THEN GOSUB 4360:GOTO 2320
2300 IF RFILE THEN IF NOT EOF(2) THEN TCH$=INPUT$(1,#2):GOSUB 4360:GOTO 2320 ELSE GOSUB 5110:GOTO 2320
2310 IF DFILE THEN IF LEN(DTTM$)=0 THEN DFILE=0 ELSE TCH$=LEFT$(DTTM$,1):DTTM$=RIGHT$(DTTM$,LEN(DTTM$)-1):GOSUB 4360
2320 KCH$=INKEY$:IF KCH$="" THEN GOTO 2480
2330 IF LEN(KCH$)=1 THEN GOTO 2480 ELSE KCH2=ASC(RIGHT$(KCH$,1))
2340 IF KCH2<>30 THEN 2360 ELSE ART=NOT ART:GOSUB 4082
2350 GOSUB 5450:GOTO 2510
2360 IF KCH2<>31 THEN GOTO 2400 ELSE SELCAL=NOT SELCAL:IF SELCAL THEN GOSUB 5560 ELSE MSG$="SELCAL TURNED OFF":GOSUB 5680:GOTO 2510
2370 GOSUB 5620:INPUT "DO YOU WANT SELCAL DATA SENT TO DISK OR PRINTER (D/P) ";FSEL$:IF FSEL$="" THEN SELCAL=0:GOTO 2390 ELSE P$=LEFT$(FSEL$,1):IF P$<>"P" AND P$<>"p" AND P$<>"D" AND P$<>"d" THEN GOTO 2370
2380 IF P$="p" OR P$="P" THEN BSEL=0:MSG$="SELCAL SET TO PRINT":GOSUB 5680 ELSE BSEL=-1:GOSUB 5620:INPUT "ENTER SELCAL FILENAME FOR RECEIVING ";FSEL$
2390 GOSUB 5660:GOSUB 5590:GOTO 2510
2400 IF KCH2<>38 THEN GOTO 2450 ELSE GOSUB 5560:GOSUB 5620:INPUT "ENTER CALLSIGN OF STATION WORKED ";LOG1$
2410 GOSUB 5620:INPUT "ENTER COMMENTS AND/OR OTHER DATA ";LOG2$
2420 FERR=0:OPEN "LOG.RTY" FOR APPEND AS #5:IF FERR THEN GOTO 2440
2450 IF KCH2<>20 THEN 2460 ELSE MSG$="SWAP TRANSMIT BUFFER":GOSUB 5680:GOSUB 5780:GOTO 2510
2460 IF KCH2<>46 THEN 2470 ELSE MSG$="CLEAR TRANSMIT BUFFER":GOSUB 5680:GOSUB 5950:GOTO 2510
2470 IF KCH2<>49 THEN 2475 ELSE NOTKEYS=NOT NOTKEYS:IF NOTKEYS THEN MSG$="NOT AT KEYS MSG ON":GOSUB 5680:GOTO 2510 ELSE MSG$="NOT AT KEYS MSG OFF":GOSUB 5680:GOTO 2510
2475 IF KCH2<>32 THEN 2479 ELSE GOSUB 6030:GOTO 2510
2479 KCH2 = KCH2 - 119:IF KCH2<1 OR KCH2>10 THEN 2510 ELSE MSG$="SEND FILE"+STR$(KCH2):GOSUB 5680:GOSUB 5020:GOTO 2510
2480 IF (BUFFULL OR UNCOMP OR RFILE OR DFILE) THEN KEYBUF$=KEYBUF$+KCH$:GOTO 2510 ELSE IF LEN(KEYBUF$)=0 THEN TCH$=KCH$ ELSE TCH$=LEFT$(KEYBUF$,1):KEYBUF$=RIGHT$(KEYBUF$,LEN(KEYBUF$)-1)+KCH$
2490 IF LEN(TCH$)=0 THEN 2510
2500 GOSUB 4360
2510 NEXT ML
2520 GOTO 2110
2530 REM $PAGE
2540 '
2550 'GET THE NEXT RECEIVED CHARACTER AND DISPLAY IT
2560 IF NOT SELCAL THEN IF NOTKEYS THEN 2585 ELSE 2600
2570 IF TYPE=0 THEN 2580 ELSE IF BSELCAL$=RIGHT$(SELCHK$,LEN(BSELCAL$)) OR GBSEL$=RIGHT$(SELCHK$,LEN(GBSEL$)) THEN GOSUB 3030:GOTO 2600 ELSE GOTO 2590
2580 IF ASELCAL$=RIGHT$(SELCHK$,LEN(ASELCAL$)) OR GASEL$=RIGHT$(SELCHK$,LEN(GASEL$)) THEN GOSUB 3030:GOTO 2600
2585 IF NOTKEYS$=RIGHT$(SELCHK$,LEN(NOTKEYS$)) THEN GOSUB 5200:GOSUB 5082:IF NOT SELCAL THEN FSEL$="WHILE.OUT":GOSUB 3040:GOTO 2600 ELSE GOTO 2600
2590 IF ESEL$=RIGHT$(SELCHK$,LEN(ESEL$)) OR GESEL$=RIGHT$(SELCHK$,LEN(GESEL$)) THEN GOSUB 3100
2600 BAU=ASC(INPUT$(1,#1)) AND &H7F
2610 IF TYPE = 0 THEN B$=CHR$(BAU):IF BAU > 31 OR BAU=7 OR BAU=10 OR BAU=13 OR BAU=8 THEN 2690 ELSE RETURN
2620 'CONVERT BAUDOT INPUT TO ASCII CHARACTER
2630 IF BAU=0 THEN IF SELCAL OR NOTKEYS THEN SELCHK$=RIGHT$(SELCHK$,9)+CHR$(0):RETURN ELSE RETURN
2640 IF BAU=27 THEN IF CASE<>1 THEN CASE=1:RETURN ELSE IF SELCAL OR NOTKEYS THEN SELCHK$=RIGHT$(SELCHK$,9)+CHR$(24):RETURN ELSE RETURN
2650 IF BAU=31 THEN IF CASE<>0 THEN CASE=0:RETURN ELSE IF SELCAL OR NOTKEYS THEN SELCHK$=RIGHT$(SELCHK$,9)+CHR$(25):RETURN ELSE RETURN
2660 IF UNSHIFT AND BAU=4 THEN CASE=0
2670 IF CASE=0 THEN B$=CHR$(BDLOW(BAU)) ELSE B$=CHR$(BDUP(BAU))
2680 'B$ CONTAINS THE ASCII CHARACTER
2690 CURIN=ASC(B$)
2700 IF SELCAL OR NOTKEYS THEN SELCHK$=RIGHT$(SELCHK$,9)+B$
2710 IF CURIN=13 AND LASTIN=13 THEN RETURN
2711 IF MARS AND CURIN=7 AND TYPE<>0 THEN B$="@"
2720 IF NOT COMP THEN 2780
2730 IF NOT BFILE THEN 2850
2740 IF CURIN=10 THEN GOTO 2760
2750 IF CURIN=LASTIN THEN RCNT=RCNT+1:GOTO 2800 ELSE IF LASTIN<>10 AND LASTIN<>13 THEN IF RCNT=1 THEN PRINT#3,CMP$;:GOTO 2770 ELSE IF RCNT=2 THEN PRINT#3,CMP$;CMP$;:GOTO 2770
2760 IF LASTIN<>10 AND LASTIN<>13 THEN IF RCNT=26 THEN PRINT#3,CMP$;CHR$(255);CHR$(25);CMP$; ELSE PRINT#3,CHR$(255);CHR$(RCNT);CMP$;
2770 CMP$=B$:RCNT=1
2780 IF NOT BFILE THEN 2850
2790 IF ART THEN 2830
2800 IF CURIN=13 THEN PRINT#3,:GOTO 2840
2810 IF CURIN=10 AND LASTIN<>13 THEN PRINT#3,
2820 GOTO 2840
2830 IF CURIN=10 OR CURIN=13 THEN PRINT#3,CHR$(CURIN+10); ELSE IF LASTIN=10 OR LASTIN=13 THEN PRINT#3,
2840 IF NOT COMP AND CURIN<>10 AND CURIN<>13 THEN PRINT#3,B$;
2850 IF ART OR (CURIN <> 10 AND CURIN <> 13) THEN 2900
2860 IF CURIN=10 AND LASTIN=13 THEN LASTIN=10:RETURN
2870 IF CURIN=10 THEN 2900
2880 GOSUB 3890:IF PRNTR THEN LP$=B$:GOSUB 3140
2890 B$=CHR$(10)
2900 LASTIN = CURIN
2901 IF MARS AND CURIN=7 AND TYPE<>0 THEN B$=CHR$(7)
2910 IF PRNTR THEN LP$=B$:GOSUB 3140
2920 GOSUB 3890:'PUT CHARACTER ON SCREEN
2930 RETURN
2940 '
2950 'SET TO BAUDOT LETTERS MODE
2960 CASE=0:RETURN
2970 REM $PAGE
2980 'FORCE A CR-LF IN RX MODE
2990 IF PRNTR THEN LP$=CHR$(13):GOSUB 3140:LP$=CHR$(10):GOSUB 3140
3000 IF BFILE THEN PRINT#3,
3010 NEWLINE=-1:RETURN
3020 'START SELCAL SAVE FILE
3030 IF NOT BSEL THEN IF NOT PRNTR THEN PRNTR=-1:FK$(6)="PRT ON":GOSUB 5450:SCACT=-1:RETURN
3040 IF BFILE THEN RETURN ELSE GOSUB 5560:COMP=0:IF FSEL$="" THEN 3080
3050 BF$=FSEL$:FERR=0:OPEN FSEL$ FOR APPEND AS #3
3060 IF FERR THEN CLOSE #3:GOTO 3080
3070 BFILE=-1:SCACT=-1:GOSUB 5620
3080 GOSUB 5660:GOSUB 5590:RETURN
3090 'STOP SELCAL SAVE FILE
3100 IF NOT NOTKEYS AND NOT BSEL THEN IF SCACT THEN SCACT=0:PRNTR=0:FK$(6)="PRT OF":GOSUB 5450:RETURN
3110 IF BFILE AND NOT SCACT THEN RETURN ELSE GOSUB 5560:PRINT#3,:CLOSE #3:BFILE=0:SCACT=0:GOSUB 5660:GOSUB 5590:RETURN
3120 '
3130 'SEND DATA TO PRINTER
3140 ON ERROR GOTO 3290
3150 LP=ASC(LP$)
3160 IF LP<>7 THEN PRINT#4,LP$;
3170 IF LP>31 THEN LPCNT=LPCNT+1 ELSE IF LP=12 OR LP=13 THEN LPCNT=0 ELSE IF LP=10 THEN PRINT#4,STRING$(LPCNT," ");
3180 ON ERROR GOTO 3210:RETURN
3190 '
3200 'ERROR HANDLER
3210 IF ERR=57 OR ERR=69 THEN RESUME
3220 IF ERR=53 OR ERR=55 OR ERR=64 THEN FERR=-1:GOTO 3250
3230 IF ERR<>61 THEN ON ERROR GOTO 0:CLS:ERROR ERR:END
3240 BFILE=0:CLOSE #3
3250 IF ERR=53 THEN MSG$="FILE NOT FOUND" ELSE IF ERR=55 THEN MSG$="FILE ALREADY OPEN" ELSE IF ERR=64 THEN MSG$="BAD FILE NAME" ELSE MSG$="DISK FULL"
3260 GOSUB 5680:BEEP
3270 RESUME NEXT
3280 FERR=-1
3285 PRINT "ERROR ACCESSING FILE - ";PARMS$
3287 PRINT "ERROR NUMBER";ERR
3290 RESUME NEXT
3300 '
3310 'TOGGLE THE FUNCTION KEY DEFINITIONS
3320 KEYS = NOT KEYS
3330 GOSUB 5450
3340 IF KEYS THEN 3370
3350 ON KEY(3) GOSUB 3770:KEY(3) ON:ON KEY(4) GOSUB 5420:KEY(4) ON:ON KEY(5) GOSUB 3680:KEY(5) ON:ON KEY(6) GOSUB 3640:KEY(6) ON
4540 IF TCH=18 THEN DTTM$=DTTM$+TL$:DFILE=-1:RETURN
4550 IF TCH=19 THEN 4770
4560 IF TCH=255 THEN USTRT=-1:RETURN
4570 IF TCH=13 OR TCH=10 THEN IF LTCH=20 OR LTCH=23 THEN RETURN ELSE TCH$=CHR$(TCH+10)
4580 LOCATE RW,CW,0:STCH=SCREEN(RW,CW):COLOR TXF,TXB:IF TCH<>10 AND TCH<>20 THEN PRINT TCH$ ELSE IF STCH<>32 THEN PRINT CHR$(STCH); ELSE IF NOT NOBP OR NOT ART OR TCH<>7 THEN PRINT TCH$;
4590 IF TCH=10 THEN BUFL(BUFE)=0 ELSE IF TCH=20 THEN BUFL(BUFE)=200 ELSE BUFL(BUFE)=CW
4600 IF TCH=13 OR TCH=23 THEN CW=1:GOTO 4630
4610 IF TCH=10 OR TCH=20 THEN RW=RW+1:GOTO 4630
4620 IF CW=CMAX-1 THEN RW=RW+1:CW=1 ELSE CW=CW+1
4630 BUFN=BUFE+1:IF BUFN=BSIZ+1 THEN BUFN=0
4640 BUFC=BUFN-BUFS:IF BUFC<0 THEN BUFC=BUFC+BSIZ
4650 IF BUFC>=BSIZ-2 THEN BUFFULL=-1
4660 IF TCH=20 OR TCH=23 THEN BUF(BUFE)=TCH-10 ELSE BUF(BUFE)=TCH
4670 BUFE=BUFN:LTCH=TCH
4680 IF TCH=13 THEN TCH=10:CRLF=-1:BUFL(BUFE)=0:GOTO 4610
4690 IF QBEL AND TCH=39 THEN TCH=7:TCH$=CHR$(7):QBL=-1:GOTO 4580
4700 IF RW=24 THEN RW=23:CALL SCROLL (RWB,RWE,CMAX,SCTX)