5 set sizes [exec ./gui-plan-bot --sizes]
6 frame .picture -background {} \
7 -width [lindex $sizes 0] \
8 -height [lindex $sizes 1]
10 tkwait visibility .picture
11 set widg_pipe [open |[list ./gui-plan-bot \
12 [winfo id .picture] >&@ stderr] w]
15 proc setsegbyname {segfeatname command {posnum {}}} {
17 #puts stderr "setsegbynum $num $idchar"
18 set s "$command $segfeatname"
19 if {[string length $posnum]} { append s " $posnum" }
31 # $segmovs($segname) = [list $segname/$movfeat ...]
32 # $movconfs($segname/$movfeat) = no. of configurations
33 # state we are showing
35 # $segrev($segname) = 0 or 1
36 # $segdet($segname) = 0 or 1
37 # $segown($segname) = {} or t or f
38 # $movpos($segname/$movfeat) = $pos (number) or {} meaning unknown
40 proc P {onoff} { # power
47 proc R {now args} { # reverse segnames
48 foreach segname $args {
49 upvar #0 segrev($segname) r
56 proc setsegs {segfoo value l} {
58 upvar #0 ${segfoo}($segname) d
65 proc D0 {args} { setsegs segdet 0 $args }
66 proc D1 {args} { setsegs segdet 1 $args }
67 proc OT {args} { setsegs segown t $args }
68 proc OF {args} { setsegs segown f $args }
69 proc ON {args} { setsegs segown {} $args }
71 proc M {segname mp {movfeat P}} { # mp==x is unknown
72 upvar #0 movpos($segname/$movfeat) p
73 upvar #0 movconfs($segname/$movfeat) n
74 if {![string compare -nocase x $mp]} { set mp {} }
75 if {$mp >= $n} { error "out of range $segname $movfeat $mp $n ?" }
81 proc update_allsegs {} {
83 foreach segname [array names segmovs] { update_seg $segname }
86 proc update_seg {segname} {
87 upvar #0 segrev($segname) r
88 upvar #0 segdet($segname) d
89 upvar #0 segown($segname) o
90 upvar #0 segmovs($segname) movs
93 #puts stderr "update_seg $segname"
96 setsegbyname $segname off
99 set command [expr {$d ? "det" : "on"}]
100 if {$r} { set command "i$command" }
101 set command $o$command
103 setsegbyname $segname $command
106 #puts stderr "update_seg $segname mov $mov"
107 upvar #0 movpos($mov) mp
108 if {[string length $mp]} {
109 setsegbyname $mov $command $mp
111 setsegbyname $mov $command
117 global segnum segmovs movconfs
118 global power segrev segdet segown movpos
120 set f [open ../layout/ours.dgram-bot.segcmap]
121 while {[gets $f l] >= 0} {
122 if {[regexp {^S (\w+) (\w+)$} $l dummy segname num]} {
123 set segnum($segname) $num
124 set segmovs($segname) {}
125 set segrev($segname) 0
126 set segdet($segname) 0
127 set segown($segname) {}
128 } elseif {[regexp {^F (\w+) \w+ (\w+) \w+ (\w+)$} \
129 $l dummy segname movfeat mc]} {
131 set mov $segname/$movfeat
132 lappend segmovs($segname) $mov
133 set movconfs($mov) $mc
148 while {[gets stdin l]>=0} {
149 if {[regexp {^GUI ([A-Z][0-9a-zA-Z ]*)$} $l dummy cmd]} {