1 'Tandy102 Keyer/Logger
from AE4GX
2 'version log005.do
11/16/98
10 POWERCONT:CLS:RESTORE:DC=0
20 CLEAR 2000
25 DIM C$(40), MG$(5),HA#(300)
30 KEY ON
40 GOSUB 9200
41 GOSUB 9400
42 PRINT@280,IV$+"FILE"+NV$+"
"+IV$+"LOG"+NV$+" "+IV$+"CAL"+NV$+" "+IV$+"SPC"+NV$+"
"+IV$+"HST"+NV$+" "+IV$+"MST"+NV$+" "+IV$+"COM"+NV$+"
"+IV$+"MSG"+NV$+" ";
43 PRINTCN$;:PRINT@150,"DE
AE4GX"
44 M$="s15":GOSUB 8600
50 ON KEY GOSUB 1000,2000,3000,4000,5000,6000,7000,8000
51 A$=INKEY$:IF LEN(A$)<>0
THEN 51
52 PRINT@110,TIME$;:PRINT@220,CL$;:GOTO50
1000 'file open/close
1005 IF LEN(FI$)<>0
THEN GOTO 1100
1010 PRINT@220,"filename";
1020 INPUTFI$
1030 OPEN FI$ FOR APPEND
AS 1
1050 PRINT@30,FI$;:PRINT@70,DATE$;:PRINT@110,TIME$;
1060 RETURN
1100 PRINT@230,"close?";
1110 N$=INKEY$:IF N$=""THEN
1110
1120 IF N$="n"THEN RETURN
1130 FI$="":CLOSE:PRINT@30,CL$:PRINT@70,CL$:PRINT@110,CL$:RETURN
2000 'logcall
2005 IF LEN(FI$)<>0
THEN 2007
2006 GOSUB1000
2007 IFLEN(HR$)=0THENE$="NoHRst":GOSUB9300:RETURN
2008 IFLEN(CA$)=0THENE$="NO
CALL":GOSUB9300:RETURN
2009 IFLEN(ST$)=0THENE$="NO
SPC":GOSUB9300:RETURN
2010 PRINT#1,DATE$+","+TIME$+","+CA$+","+ST$+","+HR$+","+MR$+","+BN$+","+MD$+","+PW$
2020 FOR I=1 TO 20:PRINT@248+I,"
";:NEXT I
2025 QC=QC+1:PRINT@40*5,"Q's=
";STR$(QC);:CA$="":ST$="":HR$=""
2026 IF QC=300THENCLOSE:KEY
OFF:CLS:PRINT"QSOs exceeded":END
2027 HA#(QC)=HV#
2030 RETURN
3000 'getcall
3010 PRINT@230,"CAL";
3015 PRINT@249,"
";
3020 CX=234:MX=6:GOSUB9500
3030 IF LEN(M$)<3
OR LEN(M$)>6 THEN E$="badcal":GOSUB9300:RETURN
3040 HV#=0
3050 FORI=1TOLEN(M$)
3060 N$=MID$(M$,I,1)
3070 DI=ASC(N$)
3080 HV#=HV#*100+DI
3090 NEXTI
3100 'if DUPCHK active
CHK IT
3105 IF DC=0THEN3900
3110 FORI=1 TO QC+1
3120 IFHA#(I)<>HV#THEN
3200
3130 E$="DUPCALL":GOSUB9300:RETURN
3200 NEXT I
3900 PRINT@249,"
";:CA$=M$:PRINT@249,CA$:RETURN
4000 'getstate
4010 PRINT@230,"spc";
4015 PRINT@256,"
";
4020 CX=234:MX=6:GOSUB9500
4030 IF LEN(M$)<>2
THEN E$="badparm":GOSUB9300:RETURN
4040 ST$=M$:PRINT@256,ST$:RETURN
5000 'get HisRST
5010 PRINT@230,"HRST";
5015 PRINT@260,"
";
5020 CX=234:MX=6:GOSUB9500
5030 GOSUB6100
5040 IFIX=0THENHR$=M$:PRINT@260,HR$;:RETURN
6000 'get MyRST
6010 PRINT@230,"MRST";
6015 PRINT@265,"
";
6020 CX=234:MX=6:GOSUB9500
6030 GOSUB6100
6040 IF IX=0THEN MR$=M$:PRINT@265,MR$;:RETURN
6100 'RST range ck
6110 IX = O:'clr rtn
flg
6120 N$=MID$(M$,1,1)
6130 IF VAL(N$)<1
OR VAL(N$)>5 THEN IX=1
6140 N$=MID$(M$,2,1)
6150 IF VAL(N$)<1
OR VAL(N$)>9 THEN IX=1
6160 N$=MID$(M$,3,1)
6165 IF VAL(N$)<1
OR VAL(N$)>9 THEN IX=1
6170 IF IX<>0THEN
E$="badparm":GOSUB9300:RETURN
6180 RETURN
7000 'band/pwr/mode
7010 PRINT@230,"COM"+CL$;
7020 CX=234:MX=6:GOSUB9500
7030 N$=MID$(M$,1,1)
7045 IF N$="b"THEN7100
7050 IF N$="m"THEN7200
7060 IF N$="p"THEN7300
7061 IF N$="d"THEN7400
7065 IF N$="x"THEN CLOSE:KEY
OFF:CLS:END
7070 E$="badparm":GOSUB9300:RETURN
7100 'band chg
7110 IF LEN(M$)<>3THENGOTO7070
7115 BN$=MID$(M$,2,2):BN=VAL(BN$)
7116 IF BN<>80 AND
BN<>40 AND BN<>20 AND BN<>15 AND BN<>10THEN GOTO 7070
7120 PRINT@270,BN$;:RETURN
7200 'mode chg
7210 IF LEN(M$) <>
2 THEN7070
7220 N$=MID$(M$,2,1)
7230 IF ASC(N$)=ASC("c")
OR ASC(N$)=ASC("s")THEN7240
7235 GOTO 7070:REM bad
parm
7240 MD$=N$:PRINT@273,MD$;:RETURN
7300 'pwr chg
7310 N$=MID$(M$,2)
7320 IF VAL(N$)<1
OR VAL(N$)>99THEN7070
7330 PW$=N$:PRINT@274,PW$;
7340 RETURN
7400 'DUP CHK TOGGLE
7410 IF DC=O THEN 7450
7420 DC=0:PRINT@289,"
";:RETURN
7450 DC=1:PRINT@289,"*";:RETURN
8000 'keyer entry
8205 PRINT@230,"CMD"+CL$;
8210 CX=234:MX=6:GOSUB
9500
8211 IF LEN(M$) <
2 THEN E$="misparm":GOSUB9300:RETURN
8212 N$=MID$(M$,1,1):REM
get cmd type
8220 IF N$ = "p" THEN8300
8230 IF N$ = "c" THEN8400
8240 IF N$ = "s" THEN8600
8242 IF N$="a"THEN8370
8250 E$="BAD CMD":GOSUB9300:RETURN
8300 'play msg
8320 M$=MID$(M$,2,1)
8330 IF VAL(M$) >= 1
AND VAL(M$) <= 5 THEN8350
8340 E$="BAD PLAY":GOSUB
9300:RETURN
8350 IF LEN(MG$(VAL(M$)))
= 0 THEN8340
8355 GOSUB 8700
8360 RETURN
8370 'turn audio on/off
8371 IF MID$(M$,2,1)="y"THEN
SO=1:RETURN
8372 IF MID$(M$,2,1)="n"THEN
SO=0:RETURN
8373 E$="bad cmd":GOSUB9300:RETURN
8400 'chg msg
8405 IF LEN(M$) <>
2 THEN8430
8410 M$=MID$(M$,2,1)
8420 IF VAL(M$) >= 1
AND VAL(M$) <= 5 THEN 8460
8430 E$="m# out rng":GOSUB
9300:RETURN
8460 MG$(VAL(M$)) =
""
8470 FOR I=1 TO 30
8480 PRINT@(VAL(M$)*40-40+I-1),"
";
8485 NEXT I
8490 PRINT@(VAL(M$)*40-40),CY$;
8500 FOR I=1 TO 30
8510 A$=INKEY$: IF A$
= "" THEN8510
8515 PRINT CN$
8520 IF A$ = CHR$(13)
THEN8550
8525 CH$= A$:GOSUB 8800
8526 IF IX = 0 THEN
E$="inv char":GOSUB9300:GOTO 8510
8530 PRINT@(VAL(M$)*40-40+I-1),A$
8531 MG$(VAL(M$)) =
MG$(VAL(M$)) + A$
8540 NEXT I
8550 RETURN
8600 'set wpm
8620 SP$=MID$(M$,2):SP=VAL(SP$)
8630 IF SP<5 OR SP>30
THEN E$="sperr":GOSUB9300:RETURN
8640 DO = (60/(SP*50))/.02
8645 PRINT @276,SP;
8650 RETURN
8700 'send msg
8710 FOR J=1 TO LEN(MG$(VAL(M$)))
8720 CH$= MID$(MG$(VAL(M$)),J,1)
8730 GOSUB 8800
8740 FOR K=1 TO LEN(C$(IX))
8750 IFMID$(C$(IX),K,1)
= "-" THEN GOSUB 8900:'TX -
8760 IF MID$(C$(IX),K,1)
= "." THEN GOSUB 8950:'TX .
8770 NEXT K
8775 SOUND0,DO
8780 IF MID$(C$(IX),1,1)
= "s" THEN GOSUB 8980:'TX wd space
8786 NEXT J
8790 RETURN
8800 'covert ch$ to
index
8810 IX = 0:'clr rtn
8820 IC = ASC(CH$)
8830 IF IC >= 48 AND
IC <= 57 THEN IX = IC - 46 :'0-9
8840 IF IC = 63 THEN
IX = 12:' "?"
8845 IF IC = 47 THEN
IX = 1:'"/"
8850 IF IC >=65 AND
IC<=90 THEN IX = IC -52:'A-Z
8860 IF IC >=97 AND
IC <= 122 THEN IX = IC - 84:'a-z
8865 IF IC = 32 THEN
IX = 39:'" "
8870 RETURN
8900 'TX -
8905 CALL5288
8910 IF SO=1THENSOUND750,DO*3ELSESOUND0,DO*3
8915 CALL5290
8920 SOUND 0,DO
8930 RETURN
8950 'TX .
8955 CALL5288
8960 IF SO=1 THENSOUND750,DOELSESOUND0,DO
8970 CALL5290
8974 SOUND0,DO
8975 RETURN
8980 'TX wd space
8990 SOUND 0,DO * 6
9000 RETURN
9100 'convert char
9110 DATA "-..-.","-----",".----","..---","...--","....-","....."
9120 DATA "-....","--...","---..","----.","..--.."
9130 DATA ".-","-...","-.-.","-..",".","..-.","--.","....","..",".---"
9140 DATA "-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-"
9150 DATA "..-","...-",".--","-..-","-.--","--..","s"
9200 'init convert table
9210 FOR I=1 TO 39
9220 READ C$(I)
9230 NEXT I
9240 RETURN
9300 'play err
9310 PRINT@230,CHR$(27)+CHR$(75);
9320 PRINT@230,CHR$(27)+CHR$(112)+E$+CHR$(27)+CHR$(113);
9330 SOUND0,50
9340 PRINT@230,CHR$(27)+CHR$(75);
9350 RETURN
9400 'esc cmds
9410 IV$=CHR$(27)+CHR$(112)
9420 NV$=CHR$(27)+CHR$(113)
9430 CL$=CHR$(27)+CHR$(75)
9440 CY$=CHR$(27)+CHR$(80)
9450 CN$=CHR$(27)+CHR$(81)
9499 RETURN
9500 'input str with
limit
9504 M$=""
9505 FORI=1TOMX
9515 MI$=INKEY$:IFMI$=""THENGOTO9515
9516 IF ASC(MI$)= 13
THEN RETURN
9517 PRINT@CX+I-1,MI$;
9520 M$=M$+MI$
9540 NEXTI:RETURN