+proc debug_reset {} {
+ global debugusers debug_cancelling
+ unset debug_cancelling
+ set debugusers {}
+ reporterr "debug mode timed out"
+}
+
+def_ucmd debug {
+ prefix_nick
+ global debugusers debug_cancelling debug_reset_after
+ if {![string length $text]} { error "must give list of usernames" }
+ llength $text
+ set debugusers $text
+ catch { after cancel $debug_cancelling }
+ set debug_cancelling [after $debug_reset_after debug_reset]
+ reporterr "debug enabled by $n: $debugusers"
+}
+
+def_ucmd nodebug {
+ prefix_nick
+ ta_nomore
+ global debugusers debug_cancelling
+ set debugusers {}
+ catch { after cancel $debug_cancelling }
+ catch { unset debug_cancelling }
+ reporterr "debug disabled by $n"
+}
+
+proc_dset visibledest {} {
+ regsub {\:[^:]*/} $d/ { } p
+ regsub {^([^:]+)\:\d+\:} $p {\1, } p
+ regsub { $} $p {} p
+ return $p
+}
+
+def_ucmd who {
+ set r {}
+ foreach m [list_objs monitor] {
+ upvar #0 monitor/$m mm
+ lappend r "monitoring $mm(chans) for $m"
+ }
+ foreach d [list_objs deviceset] {
+ upvar #0 deviceset/$d dd
+ set m $dd(monname)
+ upvar #0 monitor/$m mm
+ if {![info exists mm(chans)]} continue
+ lappend r "sending $m to [dset_visibledest $d]"
+ }
+ ucmdr [join $r "\n"] {}
+}
+
+proc connected {} {
+ ldebug {} "connected"