+ default { syync-reply $l }
+ }
+}
+
+proc cchan-line {c l} {
+ lappend queue [list $c $l]
+ check-busy
+}
+
+proc sync-subcommand {c l args} {
+ global busy dchan
+ if {[info exists busy]} { error "already busy $busy; want $c $l $args" }
+ if {[trap-log "write device" { puts $dchan $l } dummy]} {
+
+
+proc sync-reply {l} {
+ global busy
+ if {![info exists busy]} {
+ bad-data $l "unexpected sync reply"
+ return
+ }
+ eval $
+
+proc check-busy {} {
+ global busy queue
+ while {![info exists busy] && [llength $queue]} {
+ manyset [lindex $queue 0] c l
+ set queue [lrange $queue 1 end]
+ if {[trap-log "process for $c [logquote $l]"] {
+ process-client-command $c $l
+ } dummy]} {
+ client-command-complete $c ERROR
+ }