home *** CD-ROM | disk | FTP | other *** search
/ AMIGA PD 1 / AMIGA-PD-1.iso / Programme_zum_Heft / Programmieren / Kurztests / ACE / Prgs / X10 / acex10.lha / v3_1aceX10.b
Text File  |  1994-12-13  |  20KB  |  741 lines

  1. '************************************************************
  2. '* PROGRAM BY PETER ZIELINSKI (02)519-6352 SYDNEY NSW AUST. *
  3. '*               FOR THE X-10 HOME CONTROLER.               *
  4. '*                   VER 3.1 for A.C.E.                     *
  5. '*         PLEASE REF. TO PROGRAMMING GUIDE BOOK            *
  6. '*               SUPPLIED WITH THE X-10.                    *
  7. '************************************************************
  8. version$ = "$VER: V3.1 X10 (8.12.94) by Peter Zielinski"
  9. ' SAME AS 3.0 BUT ADDED HOUSE CODE DOWNLOAD
  10. if SYSTEM < 37 then reply=MsgBox("Need Wb 2.04 or higher.","OK"):END
  11. DEFINT a-z
  12. CONST     buffer_size=1024&
  13.  
  14. STRING   param$, buffer, bufferp, parity, data_bits, stop_bits, wires, Xon, share, fast,ux$
  15. LONGINT  baud,unit,unitx,chars
  16.  
  17. Mp=0
  18. '..create a port for this program called "reader"
  19. message open #1,"X10Port","r"
  20. if err=400 then 
  21.   goto Cot
  22. end if
  23. message clear #1
  24. Mp=1
  25.  
  26. Cot:
  27. SUB Ser_x
  28. shared unit,baud,param$ 
  29.   serial open 1,unit,baud,param$,5000
  30.   open "O",1,"X10_3.cnf"
  31.   write #1,unit,255
  32.   close 1
  33. END SUB
  34.  
  35. SUB about_box
  36.   x$="Written in ACE by Peter Zielinski for X10 Ver 3.1 "+CHR$(169)+" 1994"
  37.   dummy = MsgBox(x$,"OK")
  38. END SUB
  39.   unitx=0
  40.   unit=0
  41.   baud=600
  42.   parity="N"
  43.   data_bits="8"
  44.   stop_bits="1"  
  45.   wires="3" '7 or 3
  46.   Xon="?"  'X or ?
  47.   share="S" 'S or ?
  48.   fast="?" 'F or ?
  49.   param$ = parity+data_bits+stop_bits+wires+Xon+share+fast
  50.  
  51.   open "I",#1,"X10_3.cnf"
  52.   input #1,unit,unitx
  53.   close #1
  54.   if unitx<255 then 
  55.     gosub Ser
  56.   else 
  57.     serial open 1,unit,baud,param$,5000
  58.   end if
  59.  
  60.  palette 4,0.93,0.20,0 'red
  61.  palette 5,0.33,0.87,0 'green
  62.  
  63.  DIM HCODE(16)
  64.  DIM UCODE(8)
  65.  DIM JDATA(6)
  66.  UCODE(1)=128:UCODE(2)=64:UCODE(3)=32:UCODE(4)=16
  67.  UCODE(5)=8:UCODE(6)=4:UCODE(7)=2:UCODE(8)=1
  68.  HCODE(1)=96:HCODE(2)=224:HCODE(3)=32:HCODE(4)=160
  69.  HCODE(5)=16:HCODE(6)=144:HCODE(7)=80:HCODE(8)=208
  70.  HCODE(9)=112:HCODE(10)=240:HCODE(11)=48:HCODE(12)=176
  71.  HCODE(13)=0:HCODE(14)=128:HCODE(15)=64:HCODE(16)=192
  72.  
  73. '..set up some gadgets and window
  74. if Mp=0 then window 1,"X10 by P.J.Zielinski",(0,0)-(482,248),14
  75. if MP=1 then window 1,"X10 by P.J.Zielinski with MessagePort Named (X10Port) ",(0,0)-(482,248),14
  76. BEVELBOX (3,3)-(470,230),1
  77. FONT "topaz",8
  78. U=1:HC=1:L=7:DIM J(12)
  79. unitz=unit
  80. if unitz=0 then unitz=1
  81. locate 2,5:print "House Code" 
  82. gadget 1,1,16,(20,22)-(120,32),4    '..horizontal slider
  83. locate 4,16:print " ";CHR$(HC+64) 
  84. locate 6,5:print "Unit Code" 
  85. gadget 2,1,16,(20,55)-(120,65),4    '..horizontal slider
  86. locate 8,16:print U;chr$(8);"  "     
  87. locate 10,5:print "Dim Level"
  88. locate 14,2:print "MIN<-      ->MAX" 
  89. gadget 3,1,15,(20,85)-(120,95),4        '..horizontal slider
  90. gadget mod 3,8                            '..set slider to half way 
  91. locate 12,16:print L+1;chr$(8);"  " 
  92. gadget 4,1,"On",(20,120)-(70,140),1     '..boolean
  93. gadget 5,1,"Off",(71,120)-(118,140),1     '..boolean
  94. gadget 6,1,"About",(20,141)-(70,161),1     '..boolean
  95. gadget 7,1,"Dim",(71,141)-(118,161),1     '..boolean
  96. gadget 8,1,"Serial Port",(20,162)-(118,182),1 '..boolean
  97. gadget 9,1,"Quit",(20,183)-(118,203),1  '..boolean
  98. gadget 10,1,"1",(190,50)-(210,70),1     '..boolean
  99. gadget 11,1,"1",(190,73)-(210,93),1     '..boolean
  100. gadget 12,1,"2",(220,50)-(240,70),1     '..boolean
  101. gadget 13,1,"2",(220,73)-(240,93),1     '..boolean
  102. gadget 14,1,"3",(250,50)-(270,70),1     '..boolean
  103. gadget 15,1,"3",(250,73)-(270,93),1     '..boolean
  104. gadget 16,1,"4",(280,50)-(300,70),1     '..boolean
  105. gadget 17,1,"4",(280,73)-(300,93),1     '..boolean
  106. gadget 18,1,"5",(190,115)-(210,135),1   '..boolean
  107. gadget 19,1,"5",(190,138)-(210,158),1     '..boolean
  108. gadget 20,1,"6",(220,115)-(240,135),1     '..boolean
  109. gadget 21,1,"6",(220,138)-(240,158),1     '..boolean
  110. gadget 22,1,"7",(250,115)-(270,135),1     '..boolean
  111. gadget 23,1,"7",(250,138)-(270,158),1     '..boolean
  112. gadget 24,1,"8",(280,115)-(300,135),1     '..boolean
  113. gadget 25,1,"8",(280,138)-(300,158),1     '..boolean
  114. gadget 26,1,"09",(320,50)-(340,70),1     '..boolean
  115. gadget 27,1,"09",(320,73)-(340,93),1     '..boolean
  116. gadget 28,1,"10",(350,50)-(370,70),1     '..boolean
  117. gadget 29,1,"10",(350,73)-(370,93),1     '..boolean
  118. gadget 30,1,"11",(380,50)-(400,70),1     '..boolean
  119. gadget 31,1,"11",(380,73)-(400,93),1     '..boolean
  120. gadget 32,1,"12",(410,50)-(430,70),1     '..boolean
  121. gadget 33,1,"12",(410,73)-(430,93),1     '..boolean
  122. gadget 34,1,"13",(320,115)-(340,135),1  '..boolean
  123. gadget 35,1,"13",(320,138)-(340,158),1    '..boolean
  124. gadget 36,1,"14",(350,115)-(370,135),1    '..boolean
  125. gadget 37,1,"14",(350,138)-(370,158),1    '..boolean
  126. gadget 38,1,"15",(380,115)-(400,135),1    '..boolean
  127. gadget 39,1,"15",(380,138)-(400,158),1    '..boolean
  128. gadget 40,1,"16",(410,115)-(430,135),1  '..boolean
  129. gadget 41,1,"16",(410,138)-(430,158),1    '..boolean
  130. gadget 42,1,"D/load H/CODE",(140,22)-(250,33),1'..boolean
  131.  
  132. LOCATE 8,21:PRINT "ON"
  133. LOCATE 11,21:PRINT "OFF"
  134. LOCATE 16,21:PRINT "ON"
  135. LOCATE 19,21:PRINT "OFF"
  136. LOCATE 8,56:PRINT "ON"
  137. LOCATE 11,56:PRINT "OFF"
  138. LOCATE 16,56:PRINT "ON"
  139. LOCATE 19,56:PRINT "OFF"
  140. LOCATE 3,33:PRINT " X10 CONTROL"
  141. LOCATE 4,33:PRINT " Port # ";unitz
  142. LOCATE 3,51:color 1,5:PRINT "    ":color 1,0 
  143. LINE (220,190)-(400,225),,B
  144. LOCATE 24,36:PRINT "STATUS"
  145. LOCATE 22,24:PRINT "RESPONSE"
  146. LINE (135,170)-(177,225),,B
  147. LOCATE 23,18:PRINT " ???"
  148. LOCATE 24,18:PRINT " ???"
  149. LOCATE 25,18:PRINT " ???"
  150. LOCATE 26,18:PRINT " ???"
  151. LOCATE 27,18:PRINT " ???"
  152.  
  153. on gadget gosub handle_gad
  154. on mouse gosub handle_mouse
  155.  
  156. on window goto quit
  157. window on
  158.  
  159. window output 1
  160. gosub SETIME
  161.  
  162. gadget on
  163. mouse on
  164. {* main loop *}
  165. finished = 0
  166. while not finished
  167.    mouse stop
  168.    window output 1
  169.    locate 15,2:print "               " 
  170.    LOCATE 27,6:PRINT TIME$;
  171.    if Mp=1 then GOSUB Mport
  172.    gosub LOOKx
  173.    mouse on 
  174.    sleep for .05
  175. wend
  176. goto quit
  177. end
  178.  
  179. '..general purpose gadget handling routine
  180. handle_gad:
  181.   gad = gadget(1)
  182.      if gad=42 then                    'D/LOAD H/CODE gadget
  183.         I=0:S=16
  184.         WINDOW OUTPUT 1
  185.         locate 14,8:print "D/L" 
  186.         A=HCODE(HC):C=0:D=0
  187.         gosub SENDIT 
  188.         locate 14,8:print "   "
  189.      end if
  190.      if gad=41 then                    'unit 16 off gadget
  191.         A=3:I=1:S=16
  192.         WINDOW OUTPUT 1
  193.         locate 14,8:print "OFF" 
  194.         C=1:D=0
  195.         gosub SENDIT 
  196.         locate 14,8:print "   "
  197.      end if
  198.      if gad=40 then                    'unit 16 on gadget
  199.         A=2:I=1:S=16
  200.         WINDOW OUTPUT 1
  201.         locate 14,8:print "ON "
  202.         C=1:D=0 
  203.         gosub SENDIT
  204.         locate 14,8:print "   "
  205.     end if
  206.      if gad=39 then                    'unit 15 off gadget
  207.         A=3:I=1:S=16
  208.         WINDOW OUTPUT 1
  209.         locate 14,8:print "OFF" 
  210.         C=2:D=0
  211.         gosub SENDIT 
  212.         locate 14,8:print "   "
  213.      end if
  214.      if gad=38 then                    'unit 15 on gadget
  215.         A=2:I=1:S=16
  216.         WINDOW OUTPUT 1
  217.         locate 14,8:print "ON "
  218.         C=2:D=0 
  219.         gosub SENDIT
  220.         locate 14,8:print "   "
  221.     end if
  222.      if gad=37 then                    'unit 14 off gadget
  223.         A=3:I=1:S=16
  224.         WINDOW OUTPUT 1
  225.         locate 14,8:print "OFF" 
  226.         C=4:D=0
  227.         gosub SENDIT 
  228.         locate 14,8:print "   "
  229.      end if
  230.      if gad=36 then                    'unit 14 on gadget
  231.         A=2:I=1:S=16
  232.         WINDOW OUTPUT 1
  233.         locate 14,8:print "ON "
  234.         C=4:D=4 
  235.         gosub SENDIT
  236.         locate 14,8:print "   "
  237.     end if
  238.      if gad=35 then                    'unit 13 off gadget
  239.         A=3:I=1:S=16
  240.         WINDOW OUTPUT 1
  241.         locate 14,8:print "OFF" 
  242.         C=8:D=0
  243.         gosub SENDIT 
  244.         locate 14,8:print "   "
  245.      end if
  246.      if gad=34 then                    'unit 13 on gadget
  247.         A=2:I=1:S=16
  248.         WINDOW OUTPUT 1
  249.         locate 14,8:print "ON "
  250.         C=8:D=0 
  251.         gosub SENDIT
  252.         locate 14,8:print "   "
  253.     end if
  254.      if gad=33 then                    'unit 12 off gadget
  255.         A=3:I=1:S=16
  256.         WINDOW OUTPUT 1
  257.         locate 14,8:print "OFF" 
  258.         C=16:D=0
  259.         gosub SENDIT 
  260.         locate 14,8:print "   "
  261.      end if
  262.      if gad=32 then                    'unit 12 on gadget
  263.         A=2:I=1:S=16
  264.         WINDOW OUTPUT 1
  265.         locate 14,8:print "ON "
  266.         C=16:D=0 
  267.         gosub SENDIT
  268.         locate 14,8:print "   "
  269.     end if
  270.      if gad=31 then                    'unit 11 off gadget
  271.         A=3:I=1:S=16
  272.         WINDOW OUTPUT 1
  273.         locate 14,8:print "OFF" 
  274.         C=32:D=0
  275.         gosub SENDIT 
  276.         locate 14,8:print "   "
  277.      end if
  278.      if gad=30 then                    'unit 11 on gadget
  279.         A=2:I=1:S=16
  280.         WINDOW OUTPUT 1
  281.         locate 14,8:print "ON "
  282.         C=32:D=0
  283.         gosub SENDIT
  284.         locate 14,8:print "   "
  285.     end if
  286.      if gad=29 then                    'unit 10 off gadget
  287.         A=3:I=1:S=16
  288.         WINDOW OUTPUT 1
  289.         locate 14,8:print "OFF" 
  290.         C=64:D=0
  291.         gosub SENDIT 
  292.         locate 14,8:print "   "
  293.      end if
  294.      if gad=28 then                    'unit 10 on gadget
  295.         A=2:I=1:S=16
  296.         WINDOW OUTPUT 1
  297.         locate 14,8:print "ON "
  298.         C=64:D=0 
  299.         gosub SENDIT
  300.         locate 14,8:print "   "
  301.     end if
  302.      if gad=27 then                    'unit 9 off gadget
  303.         A=3:I=1:S=16
  304.         WINDOW OUTPUT 1
  305.         locate 14,8:print "OFF"        
  306.         C=128:D=0
  307.         gosub SENDIT 
  308.         locate 14,8:print "   "
  309.      end if
  310.      if gad=26 then                    'unit 9 on gadget
  311.         A=2:I=1:S=16
  312.         WINDOW OUTPUT 1
  313.         locate 14,8:print "ON "
  314.         C=128:D=0 
  315.         gosub SENDIT
  316.         locate 14,8:print "   "
  317.     end if
  318.  
  319.      if gad=25 then                    'unit 8 off gadget
  320.         A=3:I=1:S=16
  321.         WINDOW OUTPUT 1
  322.         locate 14,8:print "OFF" 
  323.         C=0:D=1
  324.         gosub SENDIT 
  325.         locate 14,8:print "   "
  326.      end if
  327.      if gad=24 then                    'unit 8 on gadget
  328.         A=2:I=1:S=16
  329.         WINDOW OUTPUT 1
  330.         locate 14,8:print "ON "
  331.         C=0:D=1 
  332.         gosub SENDIT
  333.         locate 14,8:print "   "
  334.     end if
  335.      if gad=23 then                    'unit 7 off gadget
  336.         A=3:I=1:S=16
  337.         WINDOW OUTPUT 1
  338.         locate 14,8:print "OFF" 
  339.         C=0:D=2
  340.         gosub SENDIT 
  341.         locate 14,8:print "   "
  342.      end if
  343.      if gad=22 then                    'unit 7 on gadget
  344.         A=2:I=1:S=16
  345.         WINDOW OUTPUT 1
  346.         locate 14,8:print "ON "
  347.         C=0:D=2 
  348.         gosub SENDIT
  349.         locate 14,8:print "   "
  350.     end if
  351.      if gad=21 then                    'unit 6 off gadget
  352.         A=3:I=1:S=16
  353.         WINDOW OUTPUT 1
  354.         locate 14,8:print "OFF" 
  355.         C=0:D=4
  356.         gosub SENDIT 
  357.         locate 14,8:print "   "
  358.      end if
  359.      if gad=20 then                    'unit 6 on gadget
  360.         A=2:I=1:S=16
  361.         WINDOW OUTPUT 1
  362.         locate 14,8:print "ON "
  363.         C=0:D=4 
  364.         gosub SENDIT
  365.         locate 14,8:print "   "
  366.     end if
  367.      if gad=19 then                    'unit 5 off gadget
  368.         A=3:I=1:S=16
  369.         WINDOW OUTPUT 1
  370.         locate 14,8:print "OFF" 
  371.         C=0:D=8
  372.         gosub SENDIT 
  373.         locate 14,8:print "   "
  374.      end if
  375.      if gad=18 then                    'unit 5 on gadget
  376.         A=2:I=1:S=16
  377.         WINDOW OUTPUT 1
  378.         locate 14,8:print "ON "
  379.         C=0:D=8 
  380.         gosub SENDIT
  381.         locate 14,8:print "   "
  382.     end if
  383.      if gad=17 then                    'unit 4 off gadget
  384.         A=3:I=1:S=16
  385.         WINDOW OUTPUT 1
  386.         locate 14,8:print "OFF" 
  387.         C=0:D=16
  388.         gosub SENDIT 
  389.         locate 14,8:print "   "
  390.      end if
  391.      if gad=16 then                    'unit 4 on gadget
  392.         A=2:I=1:S=16
  393.         WINDOW OUTPUT 1
  394.         locate 14,8:print "ON "
  395.         C=0:D=16 
  396.         gosub SENDIT
  397.         locate 14,8:print "   "
  398.     end if
  399.      if gad=15 then                    'unit 3 off gadget
  400.         A=3:I=1:S=16
  401.         WINDOW OUTPUT 1
  402.         locate 14,8:print "OFF" 
  403.         C=0:D=32
  404.         gosub SENDIT 
  405.         locate 14,8:print "   "
  406.      end if
  407.      if gad=14 then                    'unit 3 on gadget
  408.         A=2:I=1:S=16
  409.         WINDOW OUTPUT 1
  410.         locate 14,8:print "ON "
  411.         C=0:D=32 
  412.         gosub SENDIT
  413.         locate 14,8:print "   "
  414.     end if
  415.      if gad=13 then                    'unit 2 off gadget
  416.         A=3:I=1:S=16
  417.         WINDOW OUTPUT 1
  418.         locate 14,8:print "OFF" 
  419.         C=0:D=64
  420.         gosub SENDIT 
  421.         locate 14,8:print "   "
  422.      end if
  423.      if gad=12 then                    'unit 2 on gadget
  424.         A=2:I=1:S=16
  425.         WINDOW OUTPUT 1
  426.         locate 14,8:print "ON "
  427.         C=0:D=64 
  428.         gosub SENDIT
  429.         locate 14,8:print "   "
  430.     end if
  431.      if gad=11 then                    'unit 1 off gadget
  432.         A=3:I=1:S=16
  433.         WINDOW OUTPUT 1
  434.         locate 14,8:print "OFF"        
  435.         C=0:D=128
  436.         gosub SENDIT 
  437.         locate 14,8:print "   "
  438.      end if
  439.      if gad=10 then                    'unit 1 on gadget
  440.         A=2:I=1:S=16
  441.         WINDOW OUTPUT 1
  442.         locate 14,8:print "ON "
  443.         C=0:D=128 
  444.         gosub SENDIT
  445.         locate 14,8:print "   "
  446.     end if
  447.  
  448.      if gad=9 then quit
  449.      if gad=8 then 
  450.          serial close 1
  451.          gosub Ser
  452.          WINDOW OUTPUT 1
  453.          unitz=unit
  454.          if unitz=0 then unitz=1
  455.          LOCATE 4,33:PRINT " Port # ";unitz;"  "
  456.          gosub SETIME
  457.       end if
  458.      if gad=7 then                     'dim gadget for selected unit  
  459.         A=DA:I=1:S=16:T=8  
  460.         locate 14,8:print "DIM" 
  461.         IF U>8 THEN D=0:C=UCODE(U-8)
  462.         IF U<9 THEN C=0:D=UCODE(U)
  463.         IF L<8 THEN T=7
  464.         IF L>8 THEN T=9
  465.         gosub SENDIT
  466.         locate 14,8:print "   "
  467.      end if
  468.      if gad=6 then                     'about gadget
  469.         about_box
  470.      end if
  471.      if gad=5 then                     'off gadget for selected unit
  472.         A=3:I=1:S=16
  473.         WINDOW OUTPUT 1
  474.         locate 14,8:print "OFF" 
  475.         IF U>8 THEN D=0:C=UCODE(U-8)
  476.         IF U<9 THEN C=0:D=UCODE(U)
  477.         gosub SENDIT 
  478.         locate 14,8:print "   "
  479.      end if
  480.      if gad=4 then                     'on gadget for selected unit
  481.         A=2:I=1:S=16
  482.         WINDOW OUTPUT 1
  483.         locate 14,8:print "ON " 
  484.         IF U>8 THEN D=0:C=UCODE(U-8)
  485.         IF U<9 THEN C=0:D=UCODE(U)
  486.         gosub SENDIT
  487.         WINDOW OUTPUT 1
  488.         locate 14,8:print "   "
  489.      end if
  490.      if gad=3 then                     'slider for dim level
  491.         L=ABS(gadget(3)-15)            'CONV 0-15 TO 15-0
  492.         IF L>15 THEN L=15
  493.         IF L<0 THEN L=0
  494.         DA=5+(240 AND (L*16))
  495.         WINDOW OUTPUT 1
  496.         locate 12,16:print gadget(3);chr$(8);" " 
  497.      end if
  498.      if gad=2 then                     'slider for unit code
  499.         U=gadget(3)
  500.         U=U+1
  501.         IF U<1 THEN U=1
  502.         IF U>16 THEN U=16
  503.         IF U>8 THEN D=0:C=UCODE(U-8)
  504.         IF U<9 THEN C=0:D=UCODE(U)
  505.         WINDOW OUTPUT 1
  506.         locate 8,16:print U;chr$(8);"  " 
  507.      end if
  508.      if gad=1 then                     'slider for house code
  509.        HC=gadget(3)
  510.        HC=HC+1
  511.        IF HC<1 THEN HC=1 
  512.        IF HC>16 THEN HC=16
  513.        B=HCODE(HC)
  514.        WINDOW OUTPUT 1
  515.        locate 4,16:print " ";CHR$(HC+64) 
  516.      end if
  517.     mouse on
  518.     return
  519.  
  520. SENDIT:
  521.  WINDOW OUTPUT 1
  522.  LOCATE 3,51:color 1,4:PRINT " TX ":color 1,0
  523.  IF I=1 THEN E=A+B+C+D 'CHECKSUM
  524.  IF I=2 THEN E=A+B+C   'CLOCK CHSM
  525.  IF I=0 THEN E=A+B+C   'CLOCK CHSM
  526.  IF E>256 THEN E=E-256
  527.  IF E>256 THEN E=E-256
  528.  FOR J=1 TO S
  529.  serial write 1,CHR$(255),1 'SYNC TO X10
  530.  NEXT J
  531.  serial write 1,CHR$(I),1 'BIT17 DIRECT COMMAND
  532.  serial write 1,CHR$(A),1 'BIT18 FUNCTION/LEVEL
  533.  serial write 1,CHR$(B),1 'BIT19 HOUSE CODE
  534.  serial write 1,CHR$(C),1 'BIT20 UNIT BIT 9-16     
  535.  IF I=1 THEN serial write 1,CHR$(D),1 'BIT21 UNIT BIT 1-8
  536.  serial write 1,CHR$(E),1 'CHKSUM
  537.  LOCATE 26,30:PRINT " CHECKSUM IS         "
  538.  LOCATE 26,30:PRINT " CHECKSUM IS ";E
  539.  COUNT=0:X=0:K=0
  540.  sleep for T
  541.  T=1
  542.  LOCATE 3,51:color 1,5:PRINT "    ":color 1,0  
  543.  
  544. LOOK:
  545.    IF X=0 THEN sleep for .05:COUNT=COUNT+1
  546.    IF COUNT=100 AND X=0 THEN LOCATE 27,30:PRINT " X-10 IS NOT ON LINE ":BEEP:return
  547.    IF K>6 AND X=1 THEN LOCATE 27,30:PRINT " X-10 ACK DONE      ":return
  548.    IF I=2 AND X=1 THEN LOCATE 27,30:PRINT " X-10 ACK DONE      ":return
  549.    chars=serial(1,0)
  550.    IF chars=0 THEN LOOK
  551.    COUNT=0  
  552.    IF chars <>0 THEN K=K+1:serial read 1,J$,1  
  553.    IF ASC(J$)=1 AND X=0 THEN X=1
  554.    J$=""   
  555.    GOTO LOOK
  556.  
  557. LOOKx:
  558.    WINDOW OUTPUT 1 
  559.    chars=serial(1,0)
  560.    IF chars=0 THEN JX=0:LOCATE 3,51:color 1,5:PRINT "    ":color 1,0:return
  561.    IF chars <>0 then serial read 1,JJ$,1
  562.    IF ASC(JJ$)=255 then JJ$="":GOTO LOOKx
  563.    LOCATE 3,51:color 1,4:PRINT " RX ":color 1,0 
  564.    JX=JX+1
  565.    JDATA(JX)=0
  566.    JDATA(JX)=ASC(JJ$)   
  567. '   PRINT ASC(JJ$);
  568.    JJ$=""
  569.    LOCATE 23,18:PRINT "    " 
  570.    LOCATE 23,18:PRINT JDATA(2)
  571.    LOCATE 24,18:PRINT "    "  
  572.    LOCATE 24,18:PRINT JDATA(3)
  573.    LOCATE 25,18:PRINT "    " 
  574.    LOCATE 25,18:PRINT JDATA(4) 
  575.    LOCATE 26,18:PRINT "    "  
  576.    LOCATE 26,18:PRINT JDATA(5) 
  577.    LOCATE 27,18:PRINT "    " 
  578.    LOCATE 27,18:PRINT JDATA(6)   
  579.    GOTO LOOK
  580.  
  581. SETIME:
  582.  window 2,"X10 by P.J.Zielinski",(100,100)-(350,140),22
  583.  WINDOW OUTPUT 2
  584.  FONT "topaz",8
  585.  print
  586.  print "Please WAIT checking INTERFACE"
  587.  WINDOW OUTPUT 1
  588.  HRS=VAL(LEFT$(TIME$,2)):MIN=VAL(MID$(TIME$,4,2)) 'set time
  589.  I=2:S=16:A=MIN:B=HRS:C=0:D=0:T=2
  590.  locate 14,7:print "WAIT!!" 
  591.  GOSUB SENDIT
  592.  GOSUB SENDIT
  593.  GOSUB GETHCODE
  594.  window output 1
  595.  locate 14,7:print "      " 
  596.  U=1:L=8:C=0:D=128:S=16
  597.  DA=5+(240 AND (L*16))
  598.  K=0:JX=0
  599.  window close 2
  600.  gadget mod 1,HC    
  601. RETURN
  602.  
  603. GETHCODE:
  604.  JX=1:VV=0  'get house code
  605.  FOR XJ=1 TO 16
  606.  serial write 1,CHR$(255),1 'SYNC TO X10
  607.  NEXT XJ
  608.  serial write 1,CHR$(4),1 'BIT17 DIRECT COMMAND
  609. LOOKZ:
  610.    IF JX=12 THEN GOTO DISX
  611.    chars=serial(1,0)
  612.    IF VV=1000 THEN VV=0:RETURN
  613.    IF chars=0 THEN VV=VV+1:GOTO LOOKZ
  614.    serial read 1,J$,1
  615.    J(JX)=ASC(J$)
  616.    JX=JX+1
  617.    GOTO LOOKZ
  618. DISX:            ' h/code lookup table
  619.    VV=0
  620.    IF J(11)=96 THEN HC=1
  621.    IF J(11)=224 THEN HC=2
  622.    IF J(11)=32 THEN HC=3
  623.    IF J(11)=160 THEN HC=4
  624.    IF J(11)=16 THEN HC=5
  625.    IF J(11)=144 THEN HC=6
  626.    IF J(11)=80 THEN HC=7
  627.    IF J(11)=208 THEN HC=8
  628.    IF J(11)=112 THEN HC=9
  629.    IF J(11)=240 THEN HC=10
  630.    IF J(11)=48 THEN HC=11
  631.    IF J(11)=176 THEN HC=12
  632.    IF J(11)=0 THEN HC=13
  633.    IF J(11)=128 THEN HC=14
  634.    IF J(11)=64 THEN HC=15
  635.    IF J(11)=192 THEN HC=16
  636.    B=HCODE(HC)
  637.    WINDOW OUTPUT 1
  638.    locate 4,16:print " ";CHR$(HC+64) 
  639. RETURN
  640.  
  641. Mport:                     'Messageport control
  642.   message read #1,bufferp
  643.   sleep for .1
  644.   if bufferp="QQ" then quit
  645.   if bufferp="" then return
  646.   LOCATE 27,30:PRINT " Message Channel RX "
  647.   BEEP
  648.   H$=mid$(bufferp,3,1)  'HC
  649.   IF HC<1 OR HC>16 THEN RETURN
  650.   U=val(mid$(bufferp,7,2))  'UN
  651.   IF U<1 OR U>16 THEN RETURN
  652.   IF U>8 THEN D=0:C=UCODE(U-8)
  653.   IF U<9 THEN C=0:D=UCODE(U)
  654.   H=val(mid$(bufferp,11,1)) 'C
  655.   IF H=1 THEN Mport1
  656.   A=H:I=1:S=16
  657.   locate 14,8:print "MSG"
  658.   GOSUB SENDIT
  659.   locate 14,8:print "   "
  660.   bufferp=""
  661.   goto Mport
  662. Mport1:
  663.   L=val(mid$(bufferp,14,2)) 'L
  664.   IF L>15 THEN L=15
  665.   IF L<0 THEN L=0
  666.   A=5+(240 AND (L*16))
  667.   I=1:S=16
  668.   locate 14,8:print "MSG"
  669.   GOSUB SENDIT
  670.   locate 14,8:print "   "
  671.   bufferp=""
  672.   goto Mport
  673.  
  674. handle_mouse:
  675.   wdw_id = window(0)
  676.   if wdw_id > 0 then window output wdw_id
  677.   return
  678.  
  679. Ser:
  680.    unitq=0
  681.    ux$=str$(unit)
  682.    if unit=0 then ux$=" 1"
  683.    unitq=inputbox(" Port # 1-8  Port is set to"+ux$," Select Serial Port # ","1")
  684.    if unitq = 0 then return
  685.    if unitq = 1 then unitq=0
  686.    if unitq < 0 then unitq=0
  687.    if unitq > 8 then unitq=0
  688.    unit=unitq
  689.    Ser_x
  690.    return
  691.  
  692. '..cleanup!
  693. quit:
  694.   sleep for .1
  695.   gadget close 42
  696.   gadget close 41
  697.   gadget close 40
  698.   gadget close 39
  699.   gadget close 38
  700.   gadget close 37
  701.   gadget close 36
  702.   gadget close 35
  703.   gadget close 34
  704.   gadget close 33
  705.   gadget close 32
  706.   gadget close 31
  707.   gadget close 30
  708.   gadget close 29
  709.   gadget close 28
  710.   gadget close 27
  711.   gadget close 26
  712.   gadget close 25
  713.   gadget close 24
  714.   gadget close 23
  715.   gadget close 22
  716.   gadget close 21
  717.   gadget close 20
  718.   gadget close 19
  719.   gadget close 18
  720.   gadget close 17
  721.   gadget close 16
  722.   gadget close 15
  723.   gadget close 14
  724.   gadget close 13
  725.   gadget close 12
  726.   gadget close 11
  727.   gadget close 10
  728.   gadget close 9
  729.   gadget close 8
  730.   gadget close 7
  731.   gadget close 6
  732.   gadget close 5
  733.   gadget close 4
  734.   gadget close 3
  735.   gadget close 2
  736.   gadget close 1
  737.   message close #1
  738.   window close 1
  739.   serial close 1
  740. END
  741.