85 lines · 1.5 KB · Text
RawDownload
#!/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