begintemplate ChannelBlocker
public blocked, block, unblock
strdef varname
objref this
objref seclist, gbar
strdef cmd
proc init() { // $s1 is name of var to block
// $2 is section list to block
varname=$s1
seclist=$o2
// Store original values
gbar = new Vector()
sprint(cmd,"gbar.append(%s)",varname)
forsec seclist {
for(x) {
execute(cmd,this)
}
}
i = 0
}
proc block() {
if (numarg() == 1) {
blocked = $1
} else {
blocked = 1
}
if (blocked == 1) { // Block
sprint(cmd,"%s=0",varname)
forsec seclist {
for(x) {
execute(cmd)
}
}
} else { // Unblock by restoring values
sprint(cmd,"%s=gbar.x(i)",varname)
i = 0
forsec seclist {
for(x) {
execute(cmd,this)
i+=1
}
}
}
}
proc unblock() {
block(0)
}
endtemplate ChannelBlocker