chiark / gitweb /
fixed up at start of party
authorian <ian>
Sat, 31 Dec 2005 20:42:58 +0000 (20:42 +0000)
committerian <ian>
Sat, 31 Dec 2005 20:42:58 +0000 (20:42 +0000)
hostside/stopgap-controller

index 36dfe29c05c4d7d3b6ab467827c9b5e191b67241..ace2905b27c5bb1ad6136dc57325dcd424c9a858 100755 (executable)
@@ -170,7 +170,7 @@ proc pt_maybe {point oneisright} {
     pt_must $point $pos
 }
 
-proc s0 {seg} {
+proc s0 {seg} {
     upvar #0 segdetect($seg) segd
     if {![info exists segd]} {
        debug "segment $seg = already"
@@ -187,9 +187,10 @@ proc s0t {seg} {
     unset segd
     gui "D0 $seg"
 }
-proc s1 {seg} {
+proc s1 {seg} {
     upvar #0 segdetect($seg) segd
     if {![info exists segd]} {
+       pm_detect $v
        debug "segment $seg ! (overwrites =)"
     } elseif {[string length $segd]} {
        debug "segment $seg ! (cancels =)"
@@ -204,25 +205,32 @@ proc s1 {seg} {
 
 proc pm_maydetect {d seg} {
     switch -exact $seg {
-       06 { s$d X10 }
-       09 { s$d X8 }
-       0a { s$d X6 }
-       04 { s$d X5 }
-       02 { s$d X7 }
-       07 { s$d X9 }
-       14 { s$d A5 }
-       20 { s$d A6 }
-       1a { s$d A4 }
-       10 { s$d A2 }
-       03 { s$d X1 }
-       05 { s$d X3 }
-       16 { s$d A3 }
-       1c { s$d A1 }
-       08 { s$d X2 }
-       0b { s$d X4 }
+       06 { s$d $seg X10 }
+       09 { s$d $seg X8 }
+       0a { s$d $seg X6 }
+       04 { s$d $seg X5 }
+       02 { s$d $seg X7 }
+       07 { s$d $seg X9 }
+       14 { s$d $seg A5 }
+       20 { s$d $seg A6 }
+       1a { s$d $seg A4 }
+       10 { s$d $seg A2 }
+       03 { s$d $seg X1 }
+       05 { s$d $seg X3 }
+       16 { s$d $seg A3 }
+       1c { s$d $seg A1 }
+       08 { s$d $seg X2 }
+       0b { s$d $seg X4 }
     }
 }
 
+#proc pm_nodetect {seg} {
+#    global segsasgot
+#    if {![string compare $seg [lindex $segsasgot 1]]} {
+#      set segsasgot [list [lindex $segsasgot 1] [lindex $segsasgot 0]]
+#    }
+#}
+
 proc pm_detect {seg} {
     global segs pname segsasgot
     if {[string compare $seg [lindex $segsasgot 1]]} {
@@ -232,6 +240,11 @@ proc pm_detect {seg} {
        set segs $segsasgot
     }
     debug "pm_detect $seg ($segsasgot) ($segs) $pname$seg"
+#    if {[lsearch -exact {
+#      06 09 0a 04 02 07 14 20
+#      0b 08 1c 16
+#      1a 10 03 05
+#    } $seg] < 0} return
     switch -exact $pname$seg {
        l16 - l1c - l08 - l0b { polarity y }
        l10 - l1a - l03 - l05 { polarity x }
@@ -250,10 +263,10 @@ proc pm_detect {seg} {
        20 { pt_ifthenmust "42 43 A6" 1 "02 03 A5" 1 }
     }
     switch -exact [join $segs -] {
-       02-07 { pt_maybe "00 01 X7" 0 }
-       07-02 { pt_maybe "02 03 A5" 1 }
-       09-06 { pt_maybe "40 41 X8" 1 }
-       06-09 { pt_maybe "42 43 A6" 0 }
+       02-07 { pt_maybe "02 03 A5" 1 }
+       07-02 { pt_maybe "00 01 X7" 0 }
+       09-06 { pt_maybe "42 43 A6" 0 }
+       06-09 { pt_maybe "40 41 X8" 1 }
     }
 }
 
@@ -287,13 +300,14 @@ proc fp {m} {
 }
 
 proc frompic {m} {
+    set v [lindex $m 1]
     switch -glob [lindex $m 0] {
        01 - 02 { tellnmra $m }
        09 { fp $m; pm_hello }
        07 { puts "short circuit"; exit 1 }
        28 { fp $m; pm_charged }
-       9[0-7] { fp $m; pm_maydetect 0 [lindex $m 1] }
-       9? { fp $m; pm_detect [lindex $m 1]; pm_maydetect 1 [lindex $m 1] }
+       9[0-7] { fp $m; pm_maydetect 0 $v }
+       9? { fp $m; pm_maydetect 1 $v }
        0a - [234567]? { puts "pic debug $m" }
        * { fp $m; fail "pic unknown $m" }
     }