yiyusman pagesc55c99015 years agoHistory
116 lines · 1.7 KB · Text
RawDownload
#!/bin/rc fn usage {	echo 'usage: wctl=`{wctl [-c cmd] wsys}'} # Window creation fn newwindow {	srv = $wsys	rfork ne	{		unmount /mnt/acme /dev >[2]/dev/null		pid=`{cat /dev/ppid}		if(mount -n $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 = $*			echo -n `{basename $cmd(1)} > /dev/label >[2] /dev/null			exec $cmd < /dev/cons > /dev/cons >[2] /dev/cons		}	}&} fn new {	if(~ $1 -cd) {		d=`{echo $2 | sed 's/-cd//'}		cd $d		shift 2	}	newwindow $* &} fn wctl {	while (a=`{read})		if (~ $a(1) new)			$a} # Window deletion fn killproc {	rc -c '		echo kill > /proc/'$1'/note		sleep 0.2		echo kill > /proc/'$1'/ctl	' >[2] /dev/null &} fn killer {	# mounts the root and blocks	# reading from the kill file	mount -n $wsys $dir / || exit	cat $dir/kill | while (p=`{read}){		killproc $p	}	killproc $1} # Serve at /srv/$1.pid fn serve {	srvname=$1	shift	# the fd 3 is used to get the pid	# of the process run by srv	srvpid=`{		srv -eq '			echo $pid >[1=3]			{'^$"*^'} >[2] /dev/null		' $srvname.$pid >[3=1] |			read	}	mv /srv/$srvname.^($pid $srvpid) &&		echo /srv/$srvname.$srvpid} # Main cmd=(rio -i window)if(~ $1 -c){	if(~ $2 '')		usage && exit	cmd=`{echo $2}	shift 2}if(! ~ $1 ''){	wsys=$1	shift}if(! ~ $#* 0)	usage && exitif(~ $wsys ''){	echo 'wctl: $wsys not defined'	exit} serve wctl.$user '	dir = /mnt/wsys	killer $pid &	wctl'