DECLARE SUB wpgen (t!) DECLARE SUB test1 () DECLARE SUB setup () REM ********************************************************** REM ***** SIMTEST Ver 1.0 Date: 5/16/97 ***** REM ***** Programed by Yoshi Takahashi / JJ1SLW ***** REM ***** Copyright Yoshi Takahashi All right reserved ***** REM ********************************************************** DECLARE SUB nogen () DECLARE SUB judge (ref$, in$) DECLARE SUB keyin (a$, f!, s!) DECLARE SUB keyer (a!, f!, s!) DECLARE SUB callgen () COMMON SHARED CALL$, rxtn, rxspd, ret, no$, txtn, txspd, mycall$, power, pile CLS REM cw generator OPTION BASE 0 chsize = 90 - 44: REM english version DIM SHARED mcode(chsize, 5), PRE$(100) code: REM English Version ASC("44" to "47") , - . / REM 1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5 DATA 1,2,1,2,1,2,3,3,3,3,3,3,1,2,1,2,1,3,2,1,1,2,1,3 REM from 48-57 (0 to 9) REM 1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5 DATA 2,2,2,2,2,3,1,2,2,2,2,3,1,1,2,2,2,3,1,1,1,2,2,3,1,1,1,1,2,3 DATA 1,1,1,1,1,3,2,1,1,1,1,3,2,2,1,1,1,3,2,2,2,1,1,3,2,2,2,2,1,3 REM 58 - 62 (Blank) DATA 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 REM 63 (?) 64 DATA 1,1,2,2,1,1,3,3,3,3,3,3 REM 65-69 abcde REM 1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5 DATA 1,2,3,3,3,3,2,1,1,1,3,3,2,1,2,1,3,3,2,1,1,3,3,3,1,3,3,3,3,3 REM 70-74 fghij DATA 1,1,2,1,3,3,2,2,1,3,3,3,1,1,1,1,3,3,1,1,3,3,3,3,1,2,2,2,3,3 REM 75-79 klmno DATA 2,1,2,3,3,3,1,2,1,1,3,3,2,2,3,3,3,3,2,1,3,3,3,3,2,2,2,3,3,3 REM 80-84 pqrst DATA 1,2,2,1,3,3,2,2,1,2,3,3,1,2,1,3,3,3,1,1,1,3,3,3,2,3,3,3,3,3 REM 85-89 uvwxy DATA 1,1,2,3,3,3,1,1,1,2,3,3,1,2,2,3,3,3,2,1,1,2,3,3,2,1,2,2,3,3 REM 90 z DATA 2,2,1,1,3,3 REM RESTORE code FOR n = 0 TO chsize FOR m = 0 TO 5 READ mcode(n, m) NEXT m NEXT n REM Callsign Data call$(100) calldata: DATA "JA","JG","JR","7J","JH","JJ","JI","8J","BY","HL" DATA "W","WA","N","AA","NI","NH","K","KA","VE","XE" DATA "OK","I","DL","YT","YU","LA","OZ","EC","G","GI" DATA "ZB","GM","SV","HA","ZS","UA","UV","SP","CX","YC" DATA "YB","VK","VK","VK","KH","YE","LZ","UQ","UA","UA" DATA "DU","ZL","OH","F","SM","HA","PY","EA","PZ","SP" DATA "JA","JG","JR","7J","JH","JJ","JI","8J","BY","HL" DATA "W","WA","N","AA","NI","NH","K","KA","VE","XE" DATA "YB","VK","VK","VK","KH","YE","LZ","UQ","UA","UA" DATA "W","WA","N","AA","NI","NH","K","KA","VE","XE" RESTORE calldata FOR n = 1 TO 100 READ PRE$(n) NEXT n REM --Data load End -- REM Main process CALL setup CALL wpgen(20) CALL test1 END SUB callgen REM callsign generation RANDOMIZE -2 PRE = INT(RND * 100) + 1 AREA = INT(RND * 10) + 48 s1 = INT(RND * 26) + 65 s2 = INT(RND * 26) + 65 s3 = INT(RND * 26) + 65 oldt = INT(RND * 2) + 1 rxspd = INT(RND * 1.5) + 1.6 + .4 rxtn = INT(RND * 600) + 600 REM Call Generation CALL$ = PRE$(PRE) + CHR$(AREA) + CHR$(s1) + CHR$(s2) SELECT CASE PRE$(PRE) CASE "JA", "W", "N", "K" IF oldt = 1 THEN GOTO callend CASE ELSE CALL$ = CALL$ + CHR$(s3) END SELECT CALL keyin("DE " + CALL$, rxtn, rxspd) REM PRINT call$ callend: END SUB SUB judge (ref$, kin$) REM RET=1:Collect,RET=2:PERTIALLY,RET3:NG REM upper case collection lin = LEN(kin$) lref = LEN(ref$) FOR n = 1 TO lin a = ASC(MID$(kin$, n, 1)) IF a >= 97 AND a <= 122 THEN LET a = a - 32 in$ = in$ + CHR$(a) NEXT n REM IF ref$ = in$ THEN ret = 1: GOTO judgeend END IF REM partially collect FOR n = 1 TO lin FOR m = 1 TO lref IF MID$(in$, n, 1) = MID$(ref$, m, 1) THEN ret = 2: GOTO judgeend END IF NEXT m, n REM QRS request IF in$ = "QRS" OR in$ = "qrs" THEN ret = 2 rxspd = rxspd + .5 END IF REM NG:ret=3 judgeend: END SUB SUB keyer (a, f, s) IF a >= 97 AND a <= 122 THEN LET a = a - 32: REM lower case exception SELECT CASE a: REM protect a range CASE 32 SOUND 32000, s GOTO space CASE IS < 46 GOTO space CASE IS > 90 GOTO space CASE ELSE END SELECT REM print chr(a) FOR l = 0 TO 5 REM PRINT mcode(a-44, l) SELECT CASE mcode(a - 44, l) CASE 1 SOUND f, s / 3 REM PRINT ". "; CASE 2 SOUND f, s REM PRINT "- "; CASE 3 GOTO space END SELECT SOUND 32000, s / 3 NEXT l space: SOUND 32000, s END SUB SUB keyin (a$, f, s) lg = LEN(a$) FOR n = 1 TO lg z = ASC(MID$(a$, n, 1)) CALL keyer(z, f, s) NEXT n END SUB SUB nogen RANDOMIZE -2 n1 = INT(RND * 10) + 48 n2 = INT(RND * 10) + 48 n3 = INT(RND * 10) + 48 no$ = CHR$(n1) + CHR$(n2) + CHR$(n3) END SUB SUB setup CLS PRINT "<< Welcome to SIMTEST, a CQ contest simulator! >>" set1: INPUT "Please enter your call sign >>", mycall$ IF mycall$ = "" OR LEN(mycall$) < 3 THEN PRINT "Entry is not valid, please re-enter" GOTO set1 END IF txspd = 1.8 txtn = 800 set2: CALL keyin("VVV DE " + mycall$, txtn, txspd) INPUT "Is your keying speed OK? (Y/N) >>", spcfm$ IF spcfm$ = "n" OR specfm$ = "N" THEN set3: INPUT " Please enter the speed (from 30 to 60 W/M)", ss IF ss > 60 THEN LET txspd = 1.2: GOTO set2 IF ss > 50 THEN LET txspd = 1.5: GOTO set2 IF ss > 40 THEN LET txspd = 1.8: GOTO set2 IF ss > 30 THEN LET txspd = 2: GOTO set2 txspd = 2.2: GOTO set2 END IF station: PRINT " Please select your station" PRINT " (1) 1.5KW + Beam antenna" PRINT " (2) 100W + Beam antenna" PRINT " (3) 100W + DP" PRINT " (4) 10W + Beam antenna" PRINT " (5) 10W + DP" set4: INPUT "Enter( 1 - 5 ) >>", power IF power < 0 OR power > 5 THEN GOTO set4 CLS END SUB SUB test1 REM Parameter begin: REM CQ DE your call tx1$ = "TEST DE " + mycall$ + " " + mycall$ + " TEST K" rpt: ret = 3 PRINT "--"; tx1$ CALL keyin(tx1$, txtn, txspd) REM Wait Control XX = INT(RND * 5000): FOR n = 1 TO XX: NEXT n CALL callgen xt: REM PRINT "**"; CALL$ INPUT "CALL=?", rcv$ REM Judgement Routine CALL judge(CALL$, rcv$) IF ret = 3 THEN GOTO begin IF ret = 2 THEN CALL keyin(rcv$ + "?", txtn, txspd) CALL keyin(CALL$, rxtn, rxspd) GOTO xt END IF IF ret = 1 THEN TX2$ = "--" + rcv$ + "5nnou5 bk" PRINT "--"; rcv$ + " 599025 BK" CALL keyin(TX2$, txtn, txspd) END IF REM ** Contest number ** ret = 3 CALL nogen txn: rx2$ = "ur 5nn" + no$ + "BK" CALL keyin(rx2$, rxtn, rxspd) INPUT "Contest#=", test$ CALL judge(no$, test$) IF ret = 1 THEN tx3$ = test$ + "TU" PRINT tx3$ CALL keyin(tx3$, txtn, txspd) CALL keyin("tu", rxtn, rxspd) GOTO fin END IF IF ret = 2 OR ret = 3 THEN tx3$ = test$ + "?" PRINT "--"; tx3$ CALL keyin(tx3$, txtn, txspd) IF ret = 3 THEN rxspd = rxspd + .3 GOTO txn END IF fin: tx1$ = "TEST " + mycall$ + " K": GOTO rpt END SUB SUB wpgen (t) s = 2 FOR n = 1 TO t SOUND 2000, s / 50 SOUND 32000, s NEXT n END SUB