LOCATE 15,10:INPUT"Enter last two digits of contest year:";yr$
IF yr$="" THEN GOTO git.year
git.mode:
LOCATE 17,10:INPUT"Enter mode - CW or SSB:";mo$
mo$=UCASE$(mo$)
IF mo$ <> "CW" AND mo$ <> "SSB" THEN GOTO git.mode
PALETTE 5,1,1,0
GOSUB fill.sec.array
OPEN "SECDAT"+yr$+mo$ AS #2 LEN = 4
FIELD #2,3 AS sec2$,1 AS chk2$
get.ans:CLS
LOCATE 6,16
INPUT "Is this the beginning of the Contest Y/N ";ans$
ans$ = UCASE$(ans$)
IF ans$ <> "Y" AND ans$ <> "N" THEN get.ans
IF ans$ = "N" THEN GOSUB part.fill ELSE GOSUB full.fill
GOSUB prt.header
GOSUB sign.in
band.in:
LINE (0,80)-(399,87),0,bf
LOCATE 11,1:INPUT "Enter Band ";band$
IF band$ = "10" OR band$ = "15" OR band$ = "20" OR band$ = "40" OR band$ = "80" OR band$ = "160" THEN prt.this.contact1
COLOR 5,0:LOCATE 12,3:PRINT band$;" is not a valid Band, please Re-Enter."
BEEP:BEEP::COLOR 1,0
GOTO band.in
his.call.in:LINE (0,80)-(399,183),0,bf
his.call.in2:My$ = "":her.cal$=""
new.sect$ = "X"
LOCATE 12,1:PRINT "Enter Call or Band (-1 to quit): "; 'her.cal$
row = 12:col = 34:GOSUB gk
her.cal$ = My$
IF her.cal$ = "" THEN LOCATE 13,5:PRINT "Get a Call or part of call!":GOTO his.call.in2
LOCATE 13,5:PRINT STRING$(27," ")
IF her.cal$ = "-1" THEN GOSUB sign.out:GOTO wrap.today
IF her.cal$ = "+" THEN GOSUB update.variable.sections:GOSUB refill.array:GOTO his.call.in
IF her.cal$ = "10" OR her.cal$ = "15" OR her.cal$ = "20" OR her.cal$ = "40" OR her.cal$ = "80" OR her.cal$ = "160" THEN band$ = her.cal$:GOTO prt.this.contact1
her.cal$ = UCASE$(her.cal$)
i = 0
dup.loop:i = i + 1
IF i > qso.ptr THEN GOTO his.nr 'Call sign is not a duplicate
IF q$(i) = her.cal$ THEN GOSUB f6 ELSE GOTO dup.loop
LOCATE 15,5:PRINT "Enter His Precedence "; 'her.prec$
row = 15:col = 26:sw = 8:GOSUB gk
her.prec$ = My$:My$=""
her.prec$ = UCASE$(her.prec$)
LINE (63,72)-(640,79),0,bf
GOSUB prt.this.contact:LINE (0,80)-(399,183),0,bf
RETURN
ff9:My$ = "":LINE (0,80)-(399,183),0,bf
LINE (0,120)-(399,127),0,bf
LOCATE 15,5:PRINT "Enter His Check "; 'her.chek$
row = 15:col = 26:sw = 9:GOSUB gk
her.chek$ = My$:My$=""
LINE (63,72)-(640,79),0,bf
GOSUB prt.this.contact:LINE (0,80)-(399,183),0,bf
RETURN
ff10:My$ = "" :LINE (0,80)-(399,183),0,bf
LOCATE 15,5:PRINT "Enter His Section "; 'her.sect$
row = 15:col = 26:sw = 10:GOSUB gk
her.sect$ = My$:My$=""
ctr = LEN(her.sect$) ' makes her.sect$
IF ctr = 2 THEN her.sect$ = her.sect$ + " " '3 characters long
her.sect$ = UCASE$(her.sect$)
LINE (63,72)-(640,79),0,bf
GOSUB prt.this.contact:LINE (0,80)-(399,183),0,bf
RETURN
fill.sec.array:
FOR i=1 TO 77
READ sections$(i)
NEXT
RETURN
delet:LINE (0,80)-(399,183),0,bf
LINE (63,72)-(640,79),0,bf
GOTO his.call.in
prt.this.contact1:LINE (63,72)-(640,79),0,bf
COLOR 5,0
LOCATE 10,10:PRINT band$
COLOR 1,0
GOTO his.call.in
prt.this.contact:LINE (63,72)-(640,79),0,bf
COLOR 5,0
LOCATE 10,10:PRINT band$
LOCATE 10,15:PRINT my.date$
LOCATE 10,25:PRINT my.time$
LOCATE 10,31:PRINT my.numb$
LOCATE 10,37:PRINT her.nr$
LOCATE 10,44:PRINT her.prec$
LOCATE 10,48:PRINT her.cal$
LOCATE 10,61:PRINT her.chek$
LOCATE 10,65:PRINT her.sect$
LOCATE 10,71:PRINT new.sect$
LOCATE 10,76:PRINT two$:COLOR 1,0
RETURN
1000 'Code Generator
c$=CHR$(ASC(i$) OR 32)
IF c$="a" THEN b$=".-":GOTO 2000
IF c$="b" THEN b$="-...":GOTO 2000
IF c$="c" THEN b$="-.-.":GOTO 2000
IF c$="d" THEN b$="-..":GOTO 2000
IF c$="e" THEN b$=".":GOTO 2000
IF c$="f" THEN b$="..-.":GOTO 2000
IF c$="g" THEN b$="--.":GOTO 2000
IF c$="h" THEN b$="....":GOTO 2000
IF c$="i" THEN b$="..":GOTO 2000
IF c$="j" THEN b$=".---":GOTO 2000
IF c$="k" THEN b$="-.-":GOTO 2000
IF c$="l" THEN b$=".-..":GOTO 2000
IF c$="m" THEN b$="--":GOTO 2000
IF c$="n" THEN b$="-.":GOTO 2000
IF c$="o" THEN b$="---":GOTO 2000
IF c$="p" THEN b$=".--.":GOTO 2000
IF c$="q" THEN b$="--.-":GOTO 2000
IF c$="r" THEN b$=".-.":GOTO 2000
IF c$="s" THEN b$="...":GOTO 2000
IF c$="t" THEN b$="-":GOTO 2000
IF c$="u" THEN b$="..-":GOTO 2000
IF c$="v" THEN b$="...-":GOTO 2000
IF c$="w" THEN b$=".--":GOTO 2000
IF c$="x" THEN b$="-..-":GOTO 2000
IF c$="y" THEN b$="-.--":GOTO 2000
IF c$="z" THEN b$="--..":GOTO 2000
IF c$="1" THEN b$=".----":GOTO 2000
IF c$="2" THEN b$="..---":GOTO 2000
IF c$="3" THEN b$="...--":GOTO 2000
IF c$="4" THEN b$="....-":GOTO 2000
IF c$="5" THEN b$=".....":GOTO 2000
IF c$="6" THEN b$="-....":GOTO 2000
IF c$="7" THEN b$="--...":GOTO 2000
IF c$="8" THEN b$="---..":GOTO 2000
IF c$="9" THEN b$="----.":GOTO 2000
IF c$="0" THEN b$="-----":GOTO 2000
IF c$="." THEN b$=".-.-.-":GOTO 2000
IF c$="?" THEN b$="..--..":GOTO 2000
IF c$="," THEN b$="--..--":GOTO 2000
IF c$="-" THEN b$="-...-":GOTO 2000
IF c$="/" THEN b$="-..-.":GOTO 2000
IF i$=" " THEN b$=" ":GOTO 2000
IF i$=CHR$(8) THEN 'BACKSPACE FOR SENDING ERROR
b$="........"
LOCATE ,POS(0)
PRINT"";
GOTO 2000
END IF
IF i$=":" THEN b$="---...":GOTO 2000
IF i$=";" THEN b$="-.-.-.":GOTO 2000
IF i$="(" OR c$=")" THEN b$="-.--.-":GOTO 2000
IF i$="=" THEN b$="...-.-":GOTO 2000 'USE = FOR SK
IF i$="]" THEN b$=".-.-.":GOTO 2000 'USE ] FOR AR
IF i$="[" THEN b$="-...-.-":GOTO 2000 'USE [ FOR BK
IF i$="\" THEN b$=".-...":GOTO 2000 'USE \ FOR AS
c$="" :b$="":i$=""
2000 'SOUND ROUTINES
FOR E = 1 TO LEN(b$)
IF MID$(b$,E,1) ="." THEN
SOUND f,S,200
ELSEIF MID$(b$,E,1) ="-" THEN
SOUND f,S*3,200
ELSE
SOUND f,ELE*3,0 'SOUND F,ELE*3,0,0 = WORD SPACE
END IF
SOUND f,ELE,0 'SPACE AFTER DOT OR DASH
NEXT E 'GET THE NEXT DOT OR DASH IN THE CHAR
SOUND f,ELE*1.3,0 'SOUND F,ELE*3,0,0 = CHAR SPACE
RETURN 'GET THE NEXT CHAR
END
key29:
IF wpm < 6 THEN getout
wpm = wpm - 1
getout:
LOCATE 16,73:COLOR 2,6:PRINT USING "#####";wpm:COLOR 1,0
RETURN
key28:
IF wpm > 59 THEN getout2
wpm = wpm + 1
getout2:
LOCATE 16,73:COLOR 2,6:PRINT USING "#####";wpm:COLOR 1,0
RETURN
calc.speed:
IF wpm < 13 THEN CWPM=13 ELSE CWPM = wpm
S=21.84/CWPM 'sets code element timing
IF wpm >= 13 THEN ELE=S ELSE ELE = (43.68 -1.68 * wpm) / wpm
RETURN
full.fill:RESTORE
FOR i=1 TO file.len 'Fill changed.sections$ array with all Sections
READ changed.sections$(i)
NEXT
OPEN "SS"+yr$+mo$ AS #3 LEN = 63
FIELD #3,11 AS his.cal$,8 AS dayt$,5 AS tyme$,4 AS his.nr$,1 AS his.prec$,2 AS his.chek$,3 AS bnd$,3 AS his.sect$,1 AS nu.sect$,4 AS my.nr$,1 AS poynt$,5 AS time.prev$,5 AS time.on$,5 AS sign.in$,5 AS sign.out$
qso.ptr = 0:LOCATE 10,10
RETURN
sign.in:
LINE (0,80)-(399,87),0,bf
LOCATE 11,1:INPUT "Sign ON!:",sig$ 'starts keeping track of
sig$=UCASE$(sig$) 'operating time
IF sig$ <> "ON" AND sig$ <> "OFF" THEN sign.in
IF sig$="ON" THEN in.sign$ = LEFT$(TIME$,5)
qctr=0 'session qso counter
prev.time$ = in.sign$ 'establishes start time
RETURN
sign.out:
LINE (0,80)-(399,87),0,bf
LOCATE 11,1:INPUT "Sign OFF!:",sig$
sig$=UCASE$(sig$)
IF sig$ <> "ON" AND sig$ <> "OFF" THEN sign.out
IF sig$="OFF" THEN out.sign$=LEFT$(TIME$,5)
IF qctr=0 THEN GOSUB no.qsos:GOSUB prt.header:GOTO wrap.today
GOSUB calc.time
GOSUB re.calc.time
temp.secs=on.time.secs:GOSUB convert.secs
on.time$=hm$
qso.ptr = qso.ptr
LSET sign.out$ = out.sign$
LSET time.on$ = on.time$
PUT #3, qso.ptr
RETURN
no.qsos:
GOSUB calc.time
GOSUB re.calc.time
temp.secs=on.time.secs:GOSUB convert.secs
on.time$=hm$
qso.ptr = qso.ptr
LSET time.on$ = on.time$
PUT #3, qso.ptr
RETURN
part.fill:
FOR i = 1 TO file.len
GET #2, i
changed.sections$(i) = sec2$
NEXT
OPEN "SS"+yr$+mo$ AS #3 LEN = 63
FIELD #3,11 AS his.cal$,8 AS dayt$,5 AS tyme$,4 AS his.nr$,1 AS his.prec$,2 AS his.chek$,3 AS bnd$,3 AS his.sect$,1 AS nu.sect$,4 AS my.nr$,1 AS poynt$,5 AS time.prev$,5 AS time.on$,5 AS sign.in$,5 AS sign.out$
qso.ptr = LOF(3)/63:LOCATE 10,10
FOR i=1 TO qso.ptr
GET #3,i 'Get all previous contacts
ctr = INSTR(his.cal$," ") 'Enter this contact into q$ array
q$(i) = LEFT$(his.cal$,ctr-1) 'with no trailing blanks
ctr = INSTR(his.cal$," ") 'Enter this contact into q2$ array
q2$(1,1) = LEFT$(his.cal$,ctr-1) 'with no trailing blanks
q2$(1,2) = dayt$
q2$(1,3) = tyme$
q2$(1,4) = his.nr$
q2$(1,5) = his.prec$
q2$(1,6) = his.chek$
q2$(1,7) = bnd$
q2$(1,8) = his.sect$
q2$(1,9) = nu.sect$
IF nu.sect$ = "X" THEN sect.ctr = sect.ctr + 1
q2$(1,10) = my.nr$
q2$(1,11) = poynt$
q2$(1,12) = time.prev$
q2$(1,13) = time.on$
q2$(1,14) = sign.in$
q2$(1,15) = sign.out$
temp$ = time.on$:GOSUB re.calc.time
time.prev$=sign.out$:GOSUB calc.time
NEXT
RETURN
prt.header:CLS
LOCATE 1,5:COLOR 3,0:PRINT "WARNING: NEVER STOP THIS PROGRAM BY USING THE MOUSE!!! USE -1 INSTEAD.":COLOR 1
LOCATE 2,1:line.ptr = 0
FOR i=1 TO file.len
line.ptr = line.ptr + 1 'prints 15 sections per line
IF line.ptr > 15 THEN PRINT:line.ptr = 1
PRINT " ";changed.sections$(i);
NEXT
LOCATE 8,1:PRINT STRING$(77,"-")
LOCATE 9,1:PRINT "Previous Band Date Time My# His# Prec. Call-Sign Chk. Sec. New Pt."