L> select [~]<pattern>...
first match wins; ~ discards the message.
in pattern
- -+./:0-9a-zA-Z match themselves
+ -+./:=0-9a-zA-Z match themselves
_ matches nonempty sequence of whitespace
* matches any non-whitespace
? matches any single character
append def " switch -regexp -- \$m {\n"
foreach pat $pats {
set neg [regsub {^~} $pat {} pat]
- if {[regexp {[^-+./:0-9a-zA-Z_*?]} $pat]} {
+ if {[regexp {[^-+./:=0-9a-zA-Z_*?]} $pat]} {
cmderr BadCmd "pattern contains invalid character"
}
- regsub -all {[-+./:]} $pat {\\&} pat
+ regsub -all {[-+./:=]} $pat {\\&} pat
regsub -all {_} $pat {\s+} pat
regsub -all {\*} $pat {\S+} pat
regsub -all {\?} $pat {.} pat
}
proc do-replay {conn} {
+ global replay
foreach pk [lsort [array names replay]] {
set m "+[string range $pk 3 end] $replay($pk)"
xmit-only $conn $m
}
proc local/replay {conn args} {
- global replay
if {[llength $args]} {
rename msel/$conn mreplay/$conn ;# park it here for a moment
compile-glob-patterns $args msel/$conn
}
proc realtime-inputline {dummy l} {
- global detectlag replay
+ global detectlag replay me
global executing currentcmd currentconn
+ if {$me && [regexp {^%(.*)} $l dummy rhs]} {
+ set r [catch { uplevel #0 $rhs } emsg]
+ if {$r} { puts "** $emsg\n" } else { puts "=> $emsg\n" }
+ return
+ }
+
puts "<< $l"
if {[regexp {^(detect (\w+)) ([01])$} $l dummy key seg value]} {
proc connected {conn} {
global conns
upvar #0 c/$conn c
- fconfigure $conn -blocking 0 -buffering none -translation auto
+ fconfigure $conn -blocking 0 -buffering none -translation {auto lf}
set c(q) {}
set conns($conn) 1
set perm [find-permission $c(ipaddr)]