CLS SPORT: INPUT "SELECT SERIAL PORT TO SPEAKER SELECTOR (1-4) <1> = ", P$ IF P$ = "1" THEN PS$ = "COM1:": GOTO SPORTX ELSE IF P$ = "2" THEN PS$ = "COM2:": GOTO SPORTX ELSE IF P$ = "3" THEN PS$ = "COM3:": GOTO SPORTX ELSE IF P$ = "4" THEN PS$ = "COM4:": GOTO SPORTX ELSE IF P$ = "" THEN PS$ = "COM1:": GOTO SPORTX ELSE GOTO SPORT SPORTX: PRINT " = ESCAPE" EF1 = 0 FS$ = PS$ + "9600,N,8,1,BIN,CD0,CS0,DS0,OP0,RS" OPEN FS$ FOR RANDOM AS #1 LEN = 4096 SRT0: IF LOC(1) > 0 THEN B$ = INPUT$(LOC(1), 1): GOTO SRT0 ELSE GOTO CLRERR SRT1: PRINT " " PRINT " MAKE FUNCTION SELECTION:" PRINT " 1 = SETUP EACH RELAY FOR X10 HOUSE/UNIT CODE" PRINT " 2 = SETUP EACH RELAY FOR IR ADDRESS/KEY CODE" PRINT " 3 = TURN EACH RELAY ON/OFF" PRINT " 4 = VIEW X10 HOUSE/UNIT/FUNCTION CODES" PRINT " 5 = VIEW IR ADDRESS/KEYS" PRINT " SELECTION ="; GOSUB GETKEY IF A$ = "" THEN GOTO DONE ELSE IF A$ = "1" THEN GOTO SUX10 ELSE IF A$ = "2" THEN GOTO SUIR ELSE IF A$ = "3" THEN GOTO SUSR ELSE IF A$ = "4" THEN GOTO VX10 IF A$ = "5" THEN GOTO VIR CLS GOTO SRT1 SUX10: F$ = "0010" PRINT " PLEASE SELECT WHICH RELAY YOU WANT TO ASSIGN HOUSE/UNIT CODE TO" PRINT " 0=A/B OR 1,2,3,4,5,6,7,8 ="; GOSUB GETKEY IF A$ = "" THEN GOTO SRT1 ELSE IF A$ = "0" THEN XR$ = "0000": GOTO SUX10A ELSE IF A$ = "1" THEN XR$ = "0001": GOTO SUX10A ELSE IF A$ = "2" THEN XR$ = "0010": GOTO SUX10A ELSE IF A$ = "3" THEN XR$ = "0011": GOTO SUX10A ELSE IF A$ = "4" THEN XR$ = "0100": GOTO SUX10A ELSE IF A$ = "5" THEN XR$ = "0101": GOTO SUX10A ELSE IF A$ = "6" THEN XR$ = "0110": GOTO SUX10A ELSE IF A$ = "7" THEN XR$ = "0111": GOTO SUX10A ELSE IF A$ = "8" THEN XR$ = "1000": GOTO SUX10A ELSE GOTO SUX10 SUX10A: PRINT " PLEASE SELECT HOUSE CODE (A,B,C,D,E,F,G,H,I,J,K,L,M,O,P ="; GOSUB GETKEY IF A$ = "" THEN GOTO SUX10 ELSE IF A$ = "A" THEN XH$ = "0110": GOTO SUX10B ELSE IF A$ = "B" THEN XH$ = "1110": GOTO SUX10B ELSE IF A$ = "C" THEN XH$ = "0010": GOTO SUX10B ELSE IF A$ = "D" THEN XH$ = "1010": GOTO SUX10B ELSE IF A$ = "E" THEN XH$ = "0001": GOTO SUX10B ELSE IF A$ = "F" THEN XH$ = "1001": GOTO SUX10B ELSE IF A$ = "G" THEN XH$ = "0101": GOTO SUX10B ELSE IF A$ = "H" THEN XH$ = "1101": GOTO SUX10B ELSE IF A$ = "I" THEN XH$ = "0111": GOTO SUX10B ELSE IF A$ = "I" THEN XH$ = "1111": GOTO SUX10B ELSE IF A$ = "K" THEN XH$ = "0011": GOTO SUX10B ELSE IF A$ = "L" THEN XH$ = "1011": GOTO SUX10B ELSE IF A$ = "M" THEN XH$ = "0000": GOTO SUX10B ELSE IF A$ = "N" THEN XH$ = "1000": GOTO SUX10B ELSE IF A$ = "O" THEN XH$ = "0100": GOTO SUX10B ELSE IF A$ = "P" THEN XH$ = "1100": GOTO SUX10B ELSE GOTO SUX10A SUX10B: PRINT " PLEASE SELECT UNIT CODE (1 TO 16) ="; GOSUB GETKEY IF A$ = "" THEN GOTO SUX10A ELSE IF A$ = "1" THEN XU$ = "0110": GOTO SUX10C ELSE IF A$ = "2" THEN XU$ = "1110": GOTO SUX10C ELSE IF A$ = "3" THEN XU$ = "0010": GOTO SUX10C ELSE IF A$ = "4" THEN XU$ = "1010": GOTO SUX10C ELSE IF A$ = "5" THEN XU$ = "0001": GOTO SUX10C ELSE IF A$ = "6" THEN XU$ = "1001": GOTO SUX10C ELSE IF A$ = "7" THEN XU$ = "0101": GOTO SUX10C ELSE IF A$ = "8" THEN XU$ = "1101": GOTO SUX10C ELSE IF A$ = "9" THEN XU$ = "0111": GOTO SUX10C ELSE IF A$ = "10" THEN XU$ = "1111": GOTO SUX10C ELSE IF A$ = "11" THEN XU$ = "0011": GOTO SUX10C ELSE IF A$ = "12" THEN XU$ = "1011": GOTO SUX10C ELSE IF A$ = "13" THEN XU$ = "0000": GOTO SUX10C ELSE IF A$ = "14" THEN XU$ = "1000": GOTO SUX10C ELSE IF A$ = "15" THEN XU$ = "0100": GOTO SUX10C ELSE IF A$ = "16" THEN XU$ = "1100": GOTO SUX10C ELSE GOTO SUX10B SUX10C: T$ = F$ + XR$ + XH$ + XU$ GOTO SEND SUIR: F$ = "0100" SUIRB: PRINT " PLEASE SELECT 1 TO 256 ADDRESS CODE ="; GOSUB GETKEY IF A$ = "" THEN GOTO SUIR ELSE A = VAL(A$) IF A < 1 THEN GOTO SUIRB ELSE IF A > 256 THEN GOTO SUIRB ELSE A = A - 1 M$ = HEX$(A) IF LEN(M$) < 2 THEN M$ = "0" + M$ ELSE M$ = RIGHT$(M$, 2) H$ = LEFT$(M$, 1) GOSUB H2B IA$ = B$ H$ = RIGHT$(M$, 1) GOSUB H2B IA$ = IA$ + B$ T$ = F$ + "0000" + IA$ GOTO SEND SUSR: F$ = "0110" PRINT " PLEASE SELECT WHICH RELAY YOU WANT TO TURN ON/OFF" PRINT " 0=A/B OR 1,2,3,4,5,6,7,8 ="; GOSUB GETKEY IF A$ = "" THEN GOTO SRT1 ELSE IF A$ = "0" THEN SR$ = "0000": GOTO SUSRA ELSE IF A$ = "1" THEN SR$ = "0001": GOTO SUSRA ELSE IF A$ = "2" THEN SR$ = "0010": GOTO SUSRA ELSE IF A$ = "3" THEN SR$ = "0011": GOTO SUSRA ELSE IF A$ = "4" THEN SR$ = "0100": GOTO SUSRA ELSE IF A$ = "5" THEN SR$ = "0101": GOTO SUSRA ELSE IF A$ = "6" THEN SR$ = "0110": GOTO SUSRA ELSE IF A$ = "7" THEN SR$ = "0111": GOTO SUSRA ELSE IF A$ = "8" THEN SR$ = "1000": GOTO SUSRA ELSE GOTO SUSR SUSRA: PRINT " PLEASE SELECT ON/OFF (1/0) ="; GOSUB GETKEY SO$ = A$ IF SO$ = "" THEN GOTO SUSR ELSE IF SO$ = "0" THEN GOTO SUSRB ELSE IF SO$ = "1" THEN GOTO SUSRB ELSE GOTO SUSRA SUSRB: T$ = F$ + SR$ + SO$ + "0000000" GOTO SEND SEND: PRINT " SENDING = "; GOSUB B2H SEND1: O$ = "!" + O$ PRINT O$ PRINT " VERIFING= "; V$ = "" FOR X = 1 TO LEN(O$) PRINT #1, MID$(O$, X, 1); IF MID$(O$, X, 1) = "!" THEN TOCK = 0: TIMER ON: ON TIMER(1) GOSUB TICK: GOTO SEND0 ELSE TIMER OFF TOCK = 0 SEND0: P$ = INKEY$ IF P$ = "" THEN GOTO SEND7 ELSE IF ASC(P$) = 27 THEN GOTO SRT1 ELSE SEND7: IF TOCK > 0 THEN PRINT #1, "!"; : PRINT "!"; : TOCK = 0 ELSE IF LOC(1) = 0 THEN GOTO SEND0 ELSE B$ = INPUT$(LOC(1), 1) V$ = V$ + B$ PRINT B$; NEXT X IF V$ <> O$ THEN K$ = "-" ELSE K$ = "*" IF K$ = "-" THEN PRINT "ERROR="; ELSE IF K$ = "*" THEN PRINT " SENDING OK="; ELSE PRINT #1, K$; SEND6: P$ = INKEY$ IF P$ = "" THEN GOTO SEND8 ELSE IF ASC(P$) = 27 THEN GOTO SRT1 ELSE SEND8: IF LOC(1) = 0 THEN GOTO SEND6 ELSE B$ = INPUT$(LOC(1), 1) PRINT B$ PRINT " " GOTO SRT1 VX10: O$ = "!8000" GOTO SENDFB VIR: O$ = "!A000" GOTO SENDFB SENDFB: PRINT " SENDING = "; PRINT O$ PRINT " VERIFING="; V$ = "" FOR X = 1 TO LEN(O$) PRINT #1, MID$(O$, X, 1); IF MID$(O$, X, 1) = "!" THEN TOCK = 0: TIMER ON: ON TIMER(1) GOSUB TICK: GOTO SFB0 ELSE TIMER OFF TOCK = 0 SFB0: P$ = INKEY$ IF P$ = "" THEN GOTO SFB7 ELSE IF ASC(P$) = 27 THEN GOTO SRT1 ELSE SFB7: IF TOCK > 0 THEN PRINT #1, "!"; : PRINT "!"; : TOCK = 0 ELSE IF LOC(1) = 0 THEN GOTO SFB0 ELSE B$ = INPUT$(LOC(1), 1) PRINT B$; V$ = V$ + B$ NEXT X IF V$ <> O$ THEN K$ = "-" ELSE K$ = "*" IF K$ = "-" THEN PRINT "ERROR="; ELSE IF K$ = "*" THEN PRINT " SENDING OK="; ELSE PRINT #1, K$; SFB6: P$ = INKEY$ IF P$ = "" THEN GOTO SFB8 ELSE IF ASC(P$) = 27 THEN GOTO SRT1 ELSE SFB8: IF LOC(1) = 0 THEN GOTO SFB6 ELSE B$ = INPUT$(LOC(1), 1) PRINT B$ SFB1: P$ = INKEY$ IF P$ = "" THEN GOTO SFB9 ELSE IF ASC(P$) = 27 THEN GOTO SRT1 ELSE SFB9: IF LOC(1) = 0 THEN GOTO SFB2 ELSE B$ = INPUT$(LOC(1), 1) C$ = C$ + B$ IF LEN(C$) = 5 THEN GOTO FMT1 ELSE GOTO SFB1 SFB2: A$ = INKEY$ IF A$ = "" THEN GOTO SFB1 ELSE IF ASC(A$) = 27 THEN GOTO SRT1 ELSE GOTO SFB1 DONE: CLOSE #1 SYSTEM B2H: O$ = "" Y = 1 FOR Z = 1 TO 4 B$ = MID$(T$, Y, 4) IF B$ = "0000" THEN O$ = O$ + "0": GOTO B2HX ELSE IF B$ = "0001" THEN O$ = O$ + "1": GOTO B2HX ELSE IF B$ = "0010" THEN O$ = O$ + "2": GOTO B2HX ELSE IF B$ = "0011" THEN O$ = O$ + "3": GOTO B2HX ELSE IF B$ = "0100" THEN O$ = O$ + "4": GOTO B2HX ELSE IF B$ = "0101" THEN O$ = O$ + "5": GOTO B2HX ELSE IF B$ = "0110" THEN O$ = O$ + "6": GOTO B2HX ELSE IF B$ = "0111" THEN O$ = O$ + "7": GOTO B2HX ELSE IF B$ = "1000" THEN O$ = O$ + "8": GOTO B2HX ELSE IF B$ = "1001" THEN O$ = O$ + "9": GOTO B2HX ELSE IF B$ = "1010" THEN O$ = O$ + "A": GOTO B2HX ELSE IF B$ = "1011" THEN O$ = O$ + "B": GOTO B2HX ELSE IF B$ = "1100" THEN O$ = O$ + "C": GOTO B2HX ELSE IF B$ = "1101" THEN O$ = O$ + "D": GOTO B2HX ELSE IF B$ = "1110" THEN O$ = O$ + "E": GOTO B2HX ELSE IF B$ = "1111" THEN O$ = O$ + "F": GOTO B2HX ELSE STOP B2HX: Y = Y + 4 NEXT Z RETURN H2B: IF H$ = "0" THEN B$ = "0000": RETURN ELSE IF H$ = "1" THEN B$ = "0001": RETURN ELSE IF H$ = "2" THEN B$ = "0010": RETURN ELSE IF H$ = "3" THEN B$ = "0011": RETURN ELSE IF H$ = "4" THEN B$ = "0100": RETURN ELSE IF H$ = "5" THEN B$ = "0101": RETURN ELSE IF H$ = "6" THEN B$ = "0110": RETURN ELSE IF H$ = "7" THEN B$ = "0111": RETURN ELSE IF H$ = "8" THEN B$ = "1000": RETURN ELSE IF H$ = "9" THEN B$ = "1001": RETURN ELSE IF H$ = "A" THEN B$ = "1010": RETURN ELSE IF H$ = "B" THEN B$ = "1011": RETURN ELSE IF H$ = "C" THEN B$ = "1100": RETURN ELSE IF H$ = "D" THEN B$ = "1101": RETURN ELSE IF H$ = "E" THEN B$ = "1110": RETURN ELSE IF H$ = "F" THEN B$ = "1111": RETURN ELSE STOP RETURN GETKEY: A$ = "" GETKEY1: Q$ = INKEY$ IF Q$ = "" THEN GOTO GETKEY1 ELSE IF ASC(Q$) = 27 THEN A$ = "": PRINT CHR$(13): RETURN ELSE IF ASC(Q$) = 13 THEN PRINT CHR$(13): RETURN ELSE PRINT Q$; A$ = A$ + Q$ GOTO GETKEY1 FMT1: IF LEFT$(C$, 1) = "#" THEN GOTO IRFB ELSE B4$ = "" FOR I = 2 TO 5 H$ = MID$(C$, I, 1) GOSUB H2B1 B4$ = B4$ + B1$ NEXT I HOUSE$ = MID$(B4$, 8, 4) GOSUB B2HOUSE KEY$ = MID$(B4$, 12, 4) FUNCTION$ = MID$(B4$, 12, 4) IF RIGHT$(B4$, 1) = "1" THEN GOTO FBFUNCTION ELSE GOTO FBKEY PRINT C$ C$ = "" GOTO SFB1 CLRERR: PRINT #1, " "; PRINT #1, " "; PRINT #1, " "; PRINT #1, " "; GOTO SRT1 TICK: TOCK = TOCK + 1 RETURN IRFB: H$ = MID$(C$, 2, 1) GOSUB H2D B2 = B1 * 16 H$ = MID$(C$, 3, 1) GOSUB H2D B2 = (B2 + B1) + 1 IRA = B2 H$ = MID$(C$, 4, 1) GOSUB H2D B2 = B1 * 16 H$ = MID$(C$, 5, 1) GOSUB H2D B2 = (B2 + B1) IRK = B2 PRINT "IR ADDRESS="; PRINT IRA; PRINT " KEY="; PRINT IRK C$ = "" GOTO SFB1 H2D: IF H$ = "0" THEN B1 = 0: RETURN ELSE IF H$ = "1" THEN B1 = 1: RETURN ELSE IF H$ = "2" THEN B1 = 2: RETURN ELSE IF H$ = "3" THEN B1 = 3: RETURN ELSE IF H$ = "4" THEN B1 = 4: RETURN ELSE IF H$ = "5" THEN B1 = 5: RETURN ELSE IF H$ = "6" THEN B1 = 6: RETURN ELSE IF H$ = "7" THEN B1 = 7: RETURN ELSE IF H$ = "8" THEN B1 = 8: RETURN ELSE IF H$ = "9" THEN B1 = 9: RETURN ELSE IF H$ = "A" THEN B1 = 10: RETURN ELSE IF H$ = "B" THEN B1 = 11: RETURN ELSE IF H$ = "C" THEN B1 = 12: RETURN ELSE IF H$ = "D" THEN B1 = 13: RETURN ELSE IF H$ = "E" THEN B1 = 14: RETURN ELSE IF H$ = "F" THEN B1 = 15: RETURN ELSE STOP H2B1: IF H$ = "0" THEN B1$ = "0000": RETURN ELSE IF H$ = "1" THEN B1$ = "0001": RETURN ELSE IF H$ = "2" THEN B1$ = "0010": RETURN ELSE IF H$ = "3" THEN B1$ = "0011": RETURN ELSE IF H$ = "4" THEN B1$ = "0100": RETURN ELSE IF H$ = "5" THEN B1$ = "0101": RETURN ELSE IF H$ = "6" THEN B1$ = "0110": RETURN ELSE IF H$ = "7" THEN B1$ = "0111": RETURN ELSE IF H$ = "8" THEN B1$ = "1000": RETURN ELSE IF H$ = "9" THEN B1$ = "1001": RETURN ELSE IF H$ = "A" THEN B1$ = "1010": RETURN ELSE IF H$ = "B" THEN B1$ = "1011": RETURN ELSE IF H$ = "C" THEN B1$ = "1100": RETURN ELSE IF H$ = "D" THEN B1$ = "1101": RETURN ELSE IF H$ = "E" THEN B1$ = "1110": RETURN ELSE IF H$ = "F" THEN B1$ = "1111": RETURN ELSE STOP B2HOUSE: IF HOUSE$ = "0110" THEN HC$ = "A": RETURN ELSE IF HOUSE$ = "1110" THEN HC$ = "B": RETURN ELSE IF HOUSE$ = "0010" THEN HC$ = "C": RETURN ELSE IF HOUSE$ = "1010" THEN HC$ = "D": RETURN ELSE IF HOUSE$ = "0001" THEN HC$ = "E": RETURN ELSE IF HOUSE$ = "1001" THEN HC$ = "F": RETURN ELSE IF HOUSE$ = "0101" THEN HC$ = "G": RETURN ELSE IF HOUSE$ = "1101" THEN HC$ = "H": RETURN ELSE IF HOUSE$ = "0111" THEN HC$ = "I": RETURN ELSE IF HOUSE$ = "1111" THEN HC$ = "I": RETURN ELSE IF HOUSE$ = "0011" THEN HC$ = "K": RETURN ELSE IF HOUSE$ = "1011" THEN HC$ = "L": RETURN ELSE IF HOUSE$ = "0000" THEN HC$ = "M": RETURN ELSE IF HOUSE$ = "1000" THEN HC$ = "N": RETURN ELSE IF HOUSE$ = "0100" THEN HC$ = "O": RETURN ELSE IF HOUSE$ = "1100" THEN HC$ = "P": RETURN ELSE STOP B2KEY: IF KEY$ = "0110" THEN KC$ = "1": RETURN ELSE IF KEY$ = "1110" THEN KC$ = "2": RETURN ELSE IF KEY$ = "0010" THEN KC$ = "3": RETURN ELSE IF KEY$ = "1010" THEN KC$ = "4": RETURN ELSE IF KEY$ = "0001" THEN KC$ = "5": RETURN ELSE IF KEY$ = "1001" THEN KC$ = "6": RETURN ELSE IF KEY$ = "0101" THEN KC$ = "7": RETURN ELSE IF KEY$ = "1101" THEN KC$ = "8": RETURN ELSE IF KEY$ = "0111" THEN KC$ = "9": RETURN ELSE IF KEY$ = "1111" THEN KC$ = "10": RETURN ELSE IF KEY$ = "0011" THEN KC$ = "11": RETURN ELSE IF KEY$ = "1011" THEN KC$ = "12": RETURN ELSE IF KEY$ = "0000" THEN KC$ = "13": RETURN ELSE IF KEY$ = "1000" THEN KC$ = "14": RETURN ELSE IF KEY$ = "0100" THEN KC$ = "15": RETURN ELSE IF KEY$ = "1100" THEN KC$ = "16": RETURN ELSE STOP B2FUNCTION: IF FUNCTION$ = "0000" THEN FC$ = "All Units Off": RETURN ELSE IF FUNCTION$ = "0001" THEN FC$ = "All Lights On": RETURN ELSE IF FUNCTION$ = "0010" THEN FC$ = "On": RETURN ELSE IF FUNCTION$ = "0011" THEN FC$ = "Off": RETURN ELSE IF FUNCTION$ = "0100" THEN FC$ = "Dim": RETURN ELSE IF FUNCTION$ = "0101" THEN FC$ = "Bright": RETURN ELSE IF FUNCTION$ = "0110" THEN FC$ = "All Lights Off": RETURN ELSE IF FUNCTION$ = "0111" THEN FC$ = "Extended Code": RETURN ELSE IF FUNCTION$ = "1000" THEN FC$ = "Hail Request": RETURN ELSE IF FUNCTION$ = "1001" THEN FC$ = "Hail Acknowledge": RETURN ELSE IF FUNCTION$ = "1010" THEN FC$ = "Pre-Set Dim High": RETURN ELSE IF FUNCTION$ = "1011" THEN FC$ = "Pre-Set Dim low": RETURN ELSE IF FUNCTION$ = "1100" THEN FC$ = "Extended Data": RETURN ELSE IF FUNCTION$ = "1101" THEN FC$ = "Status=on": RETURN ELSE IF FUNCTION$ = "1110" THEN FC$ = "Status=off": RETURN ELSE IF FUNCTION$ = "1111" THEN FC$ = "Status Request": RETURN ELSE STOP FBFUNCTION: GOSUB B2FUNCTION PRINT " HOUSE CODE = " + HC$ + " FUNCTION= " + FC$ C$ = "" GOTO SFB1 FBKEY: GOSUB B2KEY PRINT " HOUSE CODE = " + HC$ + " KEY CODE= " + KC$ C$ = "" GOTO SFB1