chiark / gitweb /
test-ui => gui-displayer, seems to work
authorian <ian>
Sun, 19 Jun 2005 14:41:03 +0000 (14:41 +0000)
committerian <ian>
Sun, 19 Jun 2005 14:41:03 +0000 (14:41 +0000)
hostside/gui-displayer [new file with mode: 0755]
hostside/gui-plan.c
layout/test-ui [deleted file]

diff --git a/hostside/gui-displayer b/hostside/gui-displayer
new file mode 100755 (executable)
index 0000000..acd395e
--- /dev/null
@@ -0,0 +1,137 @@
+#!/usr/bin/wish
+
+proc widgets {} {
+    global widg_pipe
+    set sizes [exec ./gui-plan --sizes]
+    frame .picture -background {} \
+           -width [lindex $sizes 0] \
+           -height [lindex $sizes 1]
+    pack .picture
+    tkwait visibility .picture
+    set widg_pipe [open |[list ./gui-plan [winfo id .picture] >&@ stderr] w]
+}
+
+proc setsegbyname {segfeatname command {posnum {}}} {
+    global widg_pipe
+#puts stderr "setsegbynum $num $idchar"
+    set s "$command $segfeatname"
+    if {[string length $posnum]} { append s " $posnum" }
+    puts $widg_pipe $s
+    puts ">> $s"
+}
+
+proc update_push {} {
+    global widg_pipe
+    flush $widg_pipe
+}
+
+# variables:
+#   from map file
+#        $segmovs($segname)        = [list $segname/$movfeat ...]
+#        $movconfs($segname/$movfeat) = no. of configurations
+#   state we are showing
+#        $power                    = 0 or 1
+#        $segrev($segname)         = 0 or 1
+#        $segdet($segname)         = 0 or 1
+#        $movpos($segname/$movfeat) = $pos (number) or {} meaning unknown
+
+proc P {onoff} { # power
+    global power
+    set power $onoff
+    update_allsegs
+    update_push
+}
+
+proc R {args} { # reverse segnames
+    foreach segname $args {
+       upvar #0 segrev($segname) r
+       set r [expr {!$r}]
+       update_seg $segname
+    }
+    update_push
+}
+
+proc D0 {args} { train_presence 0 $args }
+proc D1 {args} { train_presence 1 $args }
+
+proc train_presence {yn l} {
+    foreach segname $l {
+       upvar #0 segdet($segname) d
+       set d $yn
+       update_seg $segname
+    }
+    update_push
+}
+
+proc M {segname mp {movfeat P}} { # mp==x is unknown
+    upvar #0 movpos($segname/$movfeat) p
+    upvar #0 movconfs($segname/$movfeat) n
+    if {![string compare -nocase x $mp]} { set mp {} }
+    if {$mp >= $n} { error "out of range $segname $movfeat $mp $n ?" }
+    set p $mp
+    update_seg $segname
+    update_push
+}
+
+proc update_allsegs {} {
+    global segmovs
+    foreach segname [array names segmovs] { update_seg $segname }
+}
+
+proc update_seg {segname} {
+    upvar #0 segrev($segname) r
+    upvar #0 segdet($segname) d
+    upvar #0 segmovs($segname) movs
+    global power
+
+#puts stderr "update_seg $segname"
+
+    if {!$power} {
+       set command off
+    } else {
+       set command [expr {$d ? "det" : "on"}]
+       if {$r} { set command "i$command" }
+    }
+    setsegbyname $segname $command
+
+    foreach mov $movs {
+#puts stderr "update_seg $segname mov $mov"
+       upvar #0 movpos($mov) mp
+       if {[string length $mp]} {
+           setsegbyname $mov $command $mp
+       } else {
+           setsegbyname $mov off
+       }
+    }
+}
+
+proc setup {} {
+    global segnum segmovs movconfs
+    global power segrev segdet movpos
+    set power 0
+    set f [open ../layout/ours.dgram-bot.segcmap]
+    while {[gets $f l] >= 0} {
+       if {[regexp {^S (\w+) (\w+)$} $l dummy segname num]} {
+           set segnum($segname) $num
+           set segmovs($segname) {}
+           set segrev($segname) 0
+           set segdet($segname) 0
+       } elseif {[regexp {^F (\w+) \w+ (\w+) \w+ (\w+)$} \
+               $l dummy  segname movfeat mc]} {
+           set segnum($segname)
+           set mov $segname/$movfeat
+           lappend segmovs($segname) $mov
+           set movconfs($mov) $mc
+           set movpos($mov) {}
+       }
+    }
+}
+
+proc main {} {
+    setup
+    widgets
+    update_allsegs
+    update_push
+}
+
+main
index 55fb48a7877fe8b7cca361d23412d81518e643f1..baf0da7d64463ebbd150f8a18736bf90b239ab94 100644 (file)
@@ -291,7 +291,14 @@ int main(int argc, const char *const *argv) {
 
   if ((arg= *++argv)) {
     char *ep;
-    if (arg[0]=='-') die("no options understood");
+
+    if (!strcmp(arg,"--sizes")) {
+      printf("%d\n%d\n", ui_plan_data.xsz, ui_plan_data.ysz);
+      if (ferror(stdout) || fflush(stdout)) diee("print stdout");
+      exit(0);
+    }
+
+    if (arg[0]=='-') die("invalid option(s)");
 
     errno=0; w= strtoul(arg,&ep,0);
     if (errno || ep==arg || *ep) die("bad windowid");
diff --git a/layout/test-ui b/layout/test-ui
deleted file mode 100644 (file)
index 1e98728..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-#!/usr/bin/wish
-
-proc widgets {} {
-    global image
-    set image [image create photo]
-    button .foo -image image1
-    pack .foo
-}
-
-# id chars:
-#  ..   unspecified (is error by us)
-#  0.   background
-#  u    uknown/unbuilt
-#  f/F  forward > caps means
-#  r/R  reverse >  train detected
-#  z    no power
-#  x    moveable not in this configuration
-
-set constants {
-    u     0      75   75   75
-    0.    0     100  100  100
-    z      0     300  300  300
-    x    100       0    0    0
-    f   600       0    0    0
-    r  -600       0    0    0
-    F   330    1000 1000 1000
-    R  -330    1000 1000 1000
-    ..    0     999  999  999
-    u0
-}
-
-for {set i 0x20} {$i <= 0x3f} {incr i} {
-    lappend constants [format u0.0x%02x $i]
-}
-
-proc update_image {} {
-    global image settings_o constants
-    set l [concat ./subseg2display ui-plan-bot.ppm \
-           $constants [array names settings_o] >tmp.ui.ppm]
-#puts stderr $l
-    eval exec $l
-    $image read tmp.ui.ppm -format ppm
-}
-
-proc setsegbynum {num idchar} {
-    #   $settings($num) = ${idchar}${num}
-    #   $settings_o(${idchar}{$num}) = 1
-#puts stderr "setsegbynum $num $idchar"
-    global settings settings_o
-    if {[info exists settings($num)]} {
-       unset settings_o($settings($num))
-    }
-    set newsetting ${idchar}${num}
-    set settings($num) $newsetting
-    set settings_o($newsetting) 1
-}
-
-# variables:
-#   from map file
-#        $segnum($segname)         = $num
-#        $segmovs($segname)        = [list $segname/$movfeat ...]
-#        $movbase($segname/$movfeat) = $movbase (ie, prefix)
-#        $movconfs($segname/$movfeat) = no. of configurations
-#   state we are showing
-#        $power                    = 0 or 1
-#        $segrev($segname)         = 0 or 1
-#        $segdet($segname)         = 0 or 1
-#        $movpos($segname/$movfeat) = $pos (number) or -1 meaning unknown
-
-proc P {onoff} { # power
-    global power
-    set power $onoff
-    update_allsegs
-    update_image
-}
-
-proc R {args} { # reverse segnames
-    foreach segname $args {
-       upvar #0 segrev($segname) r
-       set r [expr {!$r}]
-       update_seg $segname
-    }
-    update_image
-}
-
-proc D0 {args} { train_presence 0 $args }
-proc D1 {args} { train_presence 1 $args }
-
-proc train_presence {yn l} {
-    foreach segname $l {
-       upvar #0 segdet($segname) d
-       set d $yn
-       update_seg $segname
-    }
-    update_image
-}
-
-proc M {segname mp {movfeat P}} { # mp==x is unknown
-    upvar #0 movpos($segname/$movfeat) p
-    if {![string compare -nocase x $mp]} { set mp -1 }
-    set p $mp
-    update_seg $segname
-    update_image
-}
-
-proc update_allsegs {} {
-    global segnum
-    foreach segname [array names segnum] {
-       update_seg $segname
-    }
-}
-
-proc update_seg {segname} {
-    upvar #0 segnum($segname) num
-    upvar #0 segrev($segname) r
-    upvar #0 segdet($segname) d
-    upvar #0 segmovs($segname) movs
-    global power
-
-#puts stderr "update_seg $segname"
-
-    if {!$power} {
-       set idchar z
-    } else {
-       set idchar [expr {$r ? "r" : "f"}]
-       if {$d} { set idchar [string toupper $idchar] }
-    }
-    setsegbynum $num $idchar
-
-    foreach mov $movs {
-#puts stderr "update_seg $segname mov $mov"
-       upvar #0 movpos($mov) mp
-       upvar #0 movbase($mov) mb
-       upvar #0 movconfs($mov) mc
-       for {set pos 0} {$pos < (1<<$mc)} {incr pos} {
-#puts stderr "update_seg $segname mov $mov pos $pos $mc"
-           set idchar_mov x
-           if {$mp!=-1 && ($pos & (1<<$mp))} { set idchar_mov $idchar }
-           setsegbynum $num.[expr {$pos|$mb}] $idchar_mov
-       }
-    }
-}
-
-proc setup {} {
-    global segnum segmovs movbase movconfs
-    global power segrev segdet movpos
-    set power 0
-    set f [open ours.dgram-bot.segcmap]
-    while {[gets $f l] >= 0} {
-       if {[regexp {^S (\w+) (\w+)$} $l dummy segname num]} {
-           set segnum($segname) $num
-           set segmovs($segname) {}
-           set segrev($segname) 0
-           set segdet($segname) 0
-       } elseif {[regexp {^F (\w+) (\w+) (\w+) (\w+) (\w+)$} \
-               $l dummy segname num movfeat mb mc]} {
-           set segnum($segname)
-           set mov $segname/$movfeat
-           lappend segmovs($segname) $mov
-           set movbase($mov) $mb
-           set movconfs($mov) $mc
-           set movpos($mov) -1
-       }
-    }
-}
-
-proc main {} {
-    widgets
-    setup
-    update_allsegs
-    update_image
-}
-
-main