#!/bin/rc # Usage# wctl=`{ wctl wsys [defaultcmd] } fn window-m { dir = /mnt/wsys srv = $wsys rfork ne bind '#|' /n/pipe { unmount /mnt/acme /dev >[2]/dev/null pid=`{cat /dev/ppid} if(mount $srv $dir 'new -pid '^$pid^' '$"*){ bind -b $dir /dev # toss geometry parameters to find command while(~ $1 -*) switch($1){ case -dx -dy -minx -miny -maxx -maxy shift 2 case -r shift 5 case -scroll shift case -noscroll shift case -hide shift } if(~ $#* 0) cmd = $defaultcmd if not cmd = $* echo -n `{basename $cmd(1)} > /dev/label >[2] /dev/null if(test -f $dir/kill){ f=/proc/^`{cat $dir/kill}^/note # the proces could have finished on # its own, check it is still there. if(test -f $f) echo kill > $f }& {exec cat /n/pipe/data1 > $dir/wctl}& exec $cmd < /dev/cons > /dev/cons >[2] /dev/cons } }& wait $apid && echo delete > /n/pipe/data} fn new { if(~ $1 -cd) { d=`{echo $2 | sed 's/-cd//'} cd $d shift 2 } window-m $* &} fn wctl { while (a=`{read}) if (~ $a(1) new) $a} defaultcmd=(rio -i window)if(! ~ $1 ''){ wsys=$1 shift}if(~ $wsys ''){ echo 'wctl: $wsys not defined' exit bad}if(! ~ $1 '') defaultcmd=$* service=wctl.$user# we want to know the pid of the wctl rc,# so we use the fd 3 to send it from the# rc runned by srv to this process.srvpid=`{ srv -eq ' echo $pid >[1=3] wctl ' $service.$pid >[3=1] | read}mv /srv/$service.^($pid $srvpid) && echo /srv/$service.$srvpid
#!/bin/rc
# Usage
# wctl=`{ wctl wsys [defaultcmd] }
fn window-m {
dir = /mnt/wsys
srv = $wsys
rfork ne
bind '#|' /n/pipe
{
unmount /mnt/acme /dev >[2]/dev/null
pid=`{cat /dev/ppid}
if(mount $srv $dir 'new -pid '^$pid^' '$"*){
bind -b $dir /dev
# toss geometry parameters to find command
while(~ $1 -*)
switch($1){
case -dx -dy -minx -miny -maxx -maxy
shift 2
case -r
shift 5
case -scroll
shift
case -noscroll
shift
case -hide
shift
}
if(~ $#* 0) cmd = $defaultcmd
if not cmd = $*
echo -n `{basename $cmd(1)} > /dev/label >[2] /dev/null
if(test -f $dir/kill){
f=/proc/^`{cat $dir/kill}^/note
# the proces could have finished on
# its own, check it is still there.
if(test -f $f)
echo kill > $f
}&
{exec cat /n/pipe/data1 > $dir/wctl}&
exec $cmd < /dev/cons > /dev/cons >[2] /dev/cons
}
}&
wait $apid && echo delete > /n/pipe/data
}
fn new {
if(~ $1 -cd) {
d=`{echo $2 | sed 's/-cd//'}
cd $d
shift 2
}
window-m $* &
}
fn wctl {
while (a=`{read})
if (~ $a(1) new) $a
}
defaultcmd=(rio -i window)
if(! ~ $1 ''){
wsys=$1
shift
}
if(~ $wsys ''){
echo 'wctl: $wsys not defined'
exit bad
}
if(! ~ $1 '')
defaultcmd=$*
service=wctl.$user
# we want to know the pid of the wctl rc,
# so we use the fd 3 to send it from the
# rc runned by srv to this process.
srvpid=`{
srv -eq '
echo $pid >[1=3]
wctl
' $service.$pid >[3=1] |
read
}
mv /srv/$service.^($pid $srvpid) &&
echo /srv/$service.$srvpid