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"
98 set command [expr {$d ? "det" : "on"}]
99 if {$r} { set command "i$command" }
100 set command $o$command
102 setsegbyname $segname $command
105 #puts stderr "update_seg $segname mov $mov"
106 upvar #0 movpos($mov) mp
107 if {[string length $mp] && [string compare off $command]} {
108 setsegbyname $mov $command $mp
110 setsegbyname $mov $command
116 global segnum segmovs movconfs
117 global power segrev segdet segown movpos
119 set f [open ../layout/ours.dgram-bot.segcmap]
120 fconfigure stdout -buffering none
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
146 proc EOE {} { global exitoneof; set exitoneof 1}
150 while {[gets stdin l]>=0} {
151 if {[regexp {^GUI ([A-Z][0-9a-zA-Z ]*)$} $l dummy cmd]} {
159 if {[info exists exitoneof]} { exit 0 }