xref: /plan9/rc/bin/window (revision 43aadf5e5598b9159a98f64e309c3ae860328a56)
13e12c5d1SDavid du Colombier#!/bin/rc
2*43aadf5eSDavid du Colombier# window [many options] cmd [arg...] - create new window and run cmd in it
3*43aadf5eSDavid du Colombierrfork e
47dd7cddfSDavid du Colombierfn checkwsys{
57dd7cddfSDavid du Colombier	if(~ $wsys ''){
67dd7cddfSDavid du Colombier		echo  'window: $wsys not defined'
77dd7cddfSDavid du Colombier		exit bad
87dd7cddfSDavid du Colombier	}
97dd7cddfSDavid du Colombier}
107dd7cddfSDavid du Colombier
117dd7cddfSDavid du Colombier# original version used mount to do the work
127dd7cddfSDavid du Colombierfn oldway{
133e12c5d1SDavid du Colombier	switch($#*){
143e12c5d1SDavid du Colombier	case 0 1
153e12c5d1SDavid du Colombier		echo usage: window '''minx miny maxx maxy''' cmd args ...
163e12c5d1SDavid du Colombier		exit usage
173e12c5d1SDavid du Colombier	}
183e12c5d1SDavid du Colombier
197dd7cddfSDavid du Colombier	checkwsys
207dd7cddfSDavid du Colombier
217dd7cddfSDavid du Colombier	dir = /mnt/wsys
227dd7cddfSDavid du Colombier	srv = $wsys
237dd7cddfSDavid du Colombier
24219b2ee8SDavid du Colombier	rfork ne
257dd7cddfSDavid du Colombier	{
267dd7cddfSDavid du Colombier		if(x=`{cat /dev/ppid}; mount $srv $dir N`{{echo $x $1 }| sed 's/^ //g;s/ +/,/g'}){
273e12c5d1SDavid du Colombier			shift
287dd7cddfSDavid du Colombier			bind -b $dir /dev
293e12c5d1SDavid du Colombier			echo -n `{basename $1} > /dev/label >[2] /dev/null
30219b2ee8SDavid du Colombier			exec $* < /dev/cons > /dev/cons >[2] /dev/cons
313e12c5d1SDavid du Colombier		}
32219b2ee8SDavid du Colombier	}&
337dd7cddfSDavid du Colombier}
347dd7cddfSDavid du Colombier
357dd7cddfSDavid du Colombier# if argument is of form '100 100 200 200' or '100,100,200,200' use old way
367dd7cddfSDavid du Colombierif(~ $1 *[0-9][' ,'][0-9]*){
377dd7cddfSDavid du Colombier	oldway $*
387dd7cddfSDavid du Colombier	exit
397dd7cddfSDavid du Colombier}
407dd7cddfSDavid du Colombier
417dd7cddfSDavid du Colombier# geometry parameters are:
427dd7cddfSDavid du Colombier#	-r 0 0 100 100
437dd7cddfSDavid du Colombier#	-dx n
447dd7cddfSDavid du Colombier#	-dy n
457dd7cddfSDavid du Colombier#	-minx n
467dd7cddfSDavid du Colombier#	-miny n
477dd7cddfSDavid du Colombier#	-maxx n
487dd7cddfSDavid du Colombier#	-maxy n
497dd7cddfSDavid du Colombier# where n can be a number, to set the value, or +number or -number to change it
507dd7cddfSDavid du Colombier
517dd7cddfSDavid du Colombier# find wctl file
527dd7cddfSDavid du Colombierfn getwctl{
537dd7cddfSDavid du Colombier	if(~ $wctl ''){
547dd7cddfSDavid du Colombier		if(test -f /dev/wctl) echo /dev/wctl
557dd7cddfSDavid du Colombier		if not if(test -f /mnt/term/dev/wctl) echo /mnt/term/dev/wctl
567dd7cddfSDavid du Colombier		if not if(~ $service cpu) echo /mnt/term/srv/riowctl.*.*
577dd7cddfSDavid du Colombier		if not {
587dd7cddfSDavid du Colombier			echo window: '$wctl' not defined >[1=2]
597dd7cddfSDavid du Colombier			exit usage
607dd7cddfSDavid du Colombier		}
617dd7cddfSDavid du Colombier	}
627dd7cddfSDavid du Colombier	if not echo $wctl
637dd7cddfSDavid du Colombier}
647dd7cddfSDavid du Colombier
657dd7cddfSDavid du Colombier# use mount to make local window
667dd7cddfSDavid du Colombierif(~ $1 -m){
677dd7cddfSDavid du Colombier	shift
687dd7cddfSDavid du Colombier
697dd7cddfSDavid du Colombier	checkwsys
707dd7cddfSDavid du Colombier
717dd7cddfSDavid du Colombier	dir = /mnt/wsys
727dd7cddfSDavid du Colombier	srv = $wsys
737dd7cddfSDavid du Colombier	rfork ne
747dd7cddfSDavid du Colombier	{
75503d3e0aSDavid du Colombier		unmount /mnt/acme /dev >[2]/dev/null
767dd7cddfSDavid du Colombier		if(mount $srv $dir 'new -pid '^`{cat /dev/ppid}^' '$"*){
777dd7cddfSDavid du Colombier			bind -b $dir /dev
787dd7cddfSDavid du Colombier			# toss geometry parameters to find command
797dd7cddfSDavid du Colombier			while(~ $1 -*)
807dd7cddfSDavid du Colombier				switch($1){
817dd7cddfSDavid du Colombier				case -dx -dy -minx -miny -maxx -maxy
827dd7cddfSDavid du Colombier					shift 2
837dd7cddfSDavid du Colombier				case -r
847dd7cddfSDavid du Colombier					shift 5
855e91980fSDavid du Colombier				case -scroll
865e91980fSDavid du Colombier					shift
875e91980fSDavid du Colombier				case -noscroll
885e91980fSDavid du Colombier					shift
896b6b9ac8SDavid du Colombier				case -hide
906b6b9ac8SDavid du Colombier					shift
917dd7cddfSDavid du Colombier				}
927dd7cddfSDavid du Colombier			if(~ $#* 0) cmd = rc
937dd7cddfSDavid du Colombier			if not cmd = $*
946b6b9ac8SDavid du Colombier			echo -n `{basename $cmd(1)} > /dev/label >[2] /dev/null
957dd7cddfSDavid du Colombier			exec $cmd < /dev/cons > /dev/cons >[2] /dev/cons
967dd7cddfSDavid du Colombier		}
977dd7cddfSDavid du Colombier	}&
987dd7cddfSDavid du Colombier}
997dd7cddfSDavid du Colombier
1007dd7cddfSDavid du Colombierif not echo new -cd `{pwd} $* >> `{getwctl}
101