chiark / gitweb /
168a8569cf459fc95c4bb17262c4de4a2f5efb70
[trains.git] / hostside / eventrun.procs
1 # -*- tcl -*-
2
3 cd /u/ian/things/Bessar/trains
4 exec xsetroot -solid #00000f
5
6 set trainscmd {
7     set -x
8     savelog -c 7 bessar.log
9 #    (set -ex
10     cd /u/ian/things/trains-bessar/hostside
11     ./stopgap-controller | ./gui-displayer -
12 #    ) 2>&1 | tee bessar.log
13 }
14
15 proc trains_start {} {
16     global trainsf trainscmd
17     trains_stop
18     set cmdl [list sh -ec $trainscmd 2>@ stderr]
19     set trainsf [open |$cmdl w]
20     fconfigure $trainsf -buffering none -blocking no
21 }
22
23 proc tw {s} {
24     global trainsf
25     if {![info exists trainsf]} return
26     if {[catch {
27         puts $trainsf $s
28     } emsg]} {
29         puts stderr "tw: $emsg"
30         trains_stop
31     }
32 }
33
34 proc okagain {} {
35     global okagain
36     set okagain 1
37 }
38
39 proc trains_stop {} {
40     global trainsf okagain
41     if {![info exists trainsf]} return
42     catch { close $trainsf }
43     unset trainsf
44     after 3000 okagain
45     vwait okagain
46 }