+# -*- tcl -*-
+
+cd /u/ian/things/Bessar/trains
+exec xsetroot -solid #00000f
+
+set trainscmd {
+ set -x
+ savelog -c 7 bessar.log
+# (set -ex
+ cd /u/ian/things/trains-bessar/hostside
+ ./stopgap-controller | ./gui-displayer -
+# ) 2>&1 | tee bessar.log
+}
+
+proc trains_start {} {
+ global trainsf trainscmd
+ trains_stop
+ set cmdl [list sh -ec $trainscmd 2>@ stderr]
+ set trainsf [open |$cmdl w]
+ fconfigure $trainsf -buffering none -blocking no
+}
+
+proc tw {s} {
+ global trainsf
+ if {![info exists trainsf]} return
+ if {[catch {
+ puts $trainsf $s
+ } emsg]} {
+ puts stderr "tw: $emsg"
+ trains_stop
+ }
+}
+
+proc okagain {} {
+ global okagain
+ set okagain 1
+}
+
+proc trains_stop {} {
+ global trainsf okagain
+ if {![info exists trainsf]} return
+ catch { close $trainsf }
+ unset trainsf
+ after 3000 okagain
+ vwait okagain
+}