chiark / gitweb /
register-event takes patterns for select, too
authorian <ian>
Sun, 1 Jun 2008 23:33:48 +0000 (23:33 +0000)
committerian <ian>
Sun, 1 Jun 2008 23:33:48 +0000 (23:33 +0000)
hostside/gui

index 7435607c89d449cc57af330e946a3df2665e6de1..8045697e50be8c99bf21f96aa3176a44696a114d 100755 (executable)
@@ -37,16 +37,20 @@ proc bgerror {emsg} {
 #---------- train set event registraton ----------
 
 set event_dispatch_body {}
+set event_selections {}
 
-proc register-event {re args body} {
-    global event_dispatch_body
+proc register-event {selections args re body} {
+    global event_dispatch_body event_selections
+
+    eval lappend event_selections $selections
+       
     regsub -all {\W+} $re - proc
     set proc "event/$proc/[join $args -]"
     set suffix {}
     set number 0
     while {![catch { info args $proc$suffix }]} { set suffix [incr number] }
     append proc $suffix
-       
+
     proc $proc [concat l $args] $body
     set al ""
     foreach a $args { append al " \$$a" }
@@ -117,7 +121,8 @@ proc movpos-invoked {mid} {
     sconn "$movfeatcommand $seg $feat $new_posn"
 }
 
-register-event {^.movpos (\w+) feat (\w+) ([01]|\?) } {seg feat posn_new} {
+register-event ?movpos_*_feat {seg feat posn_new} \
+       {^.movpos (\w+) feat (\w+) ([01]|\?) } {
     set mid $seg/$feat
     if {![movpos-button-gvars $mid]} return
     set posn $posn_new
@@ -210,10 +215,10 @@ proc train-event-eof {} {
     error "lost connection to train set"
 }
 
-register-event {^=connected} {} {
-    global pages gui_pipe server port
+register-event {} {} {^=connected} {
+    global pages gui_pipe server port event_selections
 
-    sconn "select-replay ?movpos_*_feat"
+    sconn "select-replay [concat $event_selections]"
 
     foreach page $pages {
        set w [pagew $page]
@@ -229,9 +234,9 @@ register-event {^=connected} {} {
     }
 }
 
-register-event {^=failed} {} { error "multiplexer failed: $l" }
-register-event {^=denied} {} { error "multiplexer denied us: $l" }
-register-event {^\+nack} {} { error "multiplexer does not understand" }
+register-event {} {} {^=failed} { error "multiplexer failed: $l" }
+register-event {} {} {^=denied} { error "multiplexer denied us: $l" }
+register-event {} {} {^\+nack} { error "multiplexer does not understand" }
 
 #---------- main program ----------