19a747e4fSDavid du Colombiernl=' 29a747e4fSDavid du Colombier' 39a747e4fSDavid du Colombiertab=' ' 49a747e4fSDavid du Colombierif(~ $#distname 0) 59a747e4fSDavid du Colombier distname=plan9 69a747e4fSDavid du Colombier 73ff48bf5SDavid du Colombierwctl=/dev/null 83ff48bf5SDavid du Colombierif(test -w /dev/wctl) 93ff48bf5SDavid du Colombier wctl=/dev/wctl 103ff48bf5SDavid du Colombier 119a747e4fSDavid du Colombierfn log { 129a747e4fSDavid du Colombier echo $* >>/srv/log 139a747e4fSDavid du Colombier} 149a747e4fSDavid du Colombier 159a747e4fSDavid du Colombierfn logprog { 169a747e4fSDavid du Colombier echo '% '^$"* >>/srv/log 179a747e4fSDavid du Colombier $* >[2=1] >>/srv/log 189a747e4fSDavid du Colombier} 199a747e4fSDavid du Colombier 209a747e4fSDavid du Colombierfn sigint { 219a747e4fSDavid du Colombier # nothing happens 229a747e4fSDavid du Colombier} 239a747e4fSDavid du Colombier 249a747e4fSDavid du Colombierfn prompt { 259a747e4fSDavid du Colombier def=() 269a747e4fSDavid du Colombier what=() 279a747e4fSDavid du Colombier if(~ $1 -d && ! ~ $#* 1){ 289a747e4fSDavid du Colombier def=$2 299a747e4fSDavid du Colombier shift 309a747e4fSDavid du Colombier shift 319a747e4fSDavid du Colombier } 329a747e4fSDavid du Colombier 339a747e4fSDavid du Colombier optstr=() 349a747e4fSDavid du Colombier if(~ $1 -w && ! ~ $#* 1){ 359a747e4fSDavid du Colombier optstr=$2 369a747e4fSDavid du Colombier shift 379a747e4fSDavid du Colombier shift 389a747e4fSDavid du Colombier } 399a747e4fSDavid du Colombier 409a747e4fSDavid du Colombier pr=$1 419a747e4fSDavid du Colombier shift 429a747e4fSDavid du Colombier 439a747e4fSDavid du Colombier opts=($*) 449a747e4fSDavid du Colombier if(~ $#opts 0) { 459a747e4fSDavid du Colombier suf=' ' 469a747e4fSDavid du Colombier } 479a747e4fSDavid du Colombier if not if(! ~ $#optstr 0) { 489a747e4fSDavid du Colombier if(~ $optstr '') 499a747e4fSDavid du Colombier suf=' ' 509a747e4fSDavid du Colombier if not { 519a747e4fSDavid du Colombier pr=$pr^' ('^$"optstr^')' 529a747e4fSDavid du Colombier suf='' 539a747e4fSDavid du Colombier } 549a747e4fSDavid du Colombier } 559a747e4fSDavid du Colombier if not { 569a747e4fSDavid du Colombier pr=$pr^' ('^$1 579a747e4fSDavid du Colombier shift 589a747e4fSDavid du Colombier for(i) 599a747e4fSDavid du Colombier pr=$pr^', '^$i 609a747e4fSDavid du Colombier pr=$pr^')' 619a747e4fSDavid du Colombier suf='' 629a747e4fSDavid du Colombier } 639a747e4fSDavid du Colombier 649a747e4fSDavid du Colombier if(~ $#def 1) 659a747e4fSDavid du Colombier pr=$pr^$suf^'['^$def^']' 669a747e4fSDavid du Colombier if not 679a747e4fSDavid du Colombier pr=$pr^$suf^'[no default]' 689a747e4fSDavid du Colombier 699a747e4fSDavid du Colombier pr=$pr^': ' 709a747e4fSDavid du Colombier 719a747e4fSDavid du Colombier 729a747e4fSDavid du Colombier okay=no 739a747e4fSDavid du Colombier while(~ $okay no) { 743ff48bf5SDavid du Colombier echo -n current >$wctl 753ff48bf5SDavid du Colombier echo -n top >$wctl 769a747e4fSDavid du Colombier echo -n $pr >[1=2] 779a747e4fSDavid du Colombier ifs='' {rd=`{read}} 789a747e4fSDavid du Colombier if(~ $#rd 0) 799a747e4fSDavid du Colombier exit notdone 8039734e7eSDavid du Colombier if(~ $rd !*){ 8139734e7eSDavid du Colombier ifs='' {rd=`{echo $rd | sed 's/!//'}} 8239734e7eSDavid du Colombier echo $rd 8339734e7eSDavid du Colombier rc -c $rd 8439734e7eSDavid du Colombier echo !$status 8539734e7eSDavid du Colombier } 8639734e7eSDavid du Colombier if not{ 879a747e4fSDavid du Colombier rd=`{echo $rd} 889a747e4fSDavid du Colombier if(~ $#rd 0 || ~ $rd '') 899a747e4fSDavid du Colombier rd=$def 909a747e4fSDavid du Colombier 919a747e4fSDavid du Colombier switch($#opts){ 929a747e4fSDavid du Colombier case 0 939a747e4fSDavid du Colombier if(! ~ $rd '') 949a747e4fSDavid du Colombier okay=yes 959a747e4fSDavid du Colombier case * 969a747e4fSDavid du Colombier if(~ $rd $opts) 979a747e4fSDavid du Colombier okay=yes 989a747e4fSDavid du Colombier } 999a747e4fSDavid du Colombier } 10039734e7eSDavid du Colombier } 1019a747e4fSDavid du Colombier echo -n $rd >/env/rd # just in case 1029a747e4fSDavid du Colombier} 1039a747e4fSDavid du Colombier 1049a747e4fSDavid du Colombierfn desc { 1059a747e4fSDavid du Colombier echo -n ' '^$1^' - ' 1069a747e4fSDavid du Colombier grep '^# desc: ' $1 | sed 's/# desc: //' 1079a747e4fSDavid du Colombier} 1089a747e4fSDavid du Colombier 1099a747e4fSDavid du Colombierfn prereq { 1109a747e4fSDavid du Colombier grep '^# prereq:' $1 | sed 's/# prereq://' 1119a747e4fSDavid du Colombier} 1129a747e4fSDavid du Colombier 1139a747e4fSDavid du Colombierfn mustdo { 1149a747e4fSDavid du Colombier echo You must `{grep '^# mustdo:' $1 | sed 's/# mustdo://'} 1159a747e4fSDavid du Colombier} 1169a747e4fSDavid du Colombier 1179a747e4fSDavid du Colombier# there's no easy way to pass shell variables 1189a747e4fSDavid du Colombier# up from children to parents; the parents have 1199a747e4fSDavid du Colombier# to be coerced into noticing that the environment 1209a747e4fSDavid du Colombier# changed, even when in the same environment group. 1219a747e4fSDavid du Colombier# 1229a747e4fSDavid du Colombier# instead, we explicitly export the variables we want 1239a747e4fSDavid du Colombier# to percolate, and the parent calls coherence to reread 1249a747e4fSDavid du Colombier# the variables. 1259a747e4fSDavid du Colombier# 1269a747e4fSDavid du Colombier# we just append to the vars file, so that later exports 1279a747e4fSDavid du Colombier# override earlier ones; when we call coherence, 1289a747e4fSDavid du Colombier# the duplicates are thrown out. 1299a747e4fSDavid du Colombier 1309a747e4fSDavid du Colombierfn export { 1319a747e4fSDavid du Colombier null=() 1329a747e4fSDavid du Colombier nonnull=() 1339a747e4fSDavid du Colombier for(i in $*){ 1349a747e4fSDavid du Colombier if(~ $#$i 0) 1359a747e4fSDavid du Colombier null=($null $i) 1369a747e4fSDavid du Colombier if not 1379a747e4fSDavid du Colombier nonnull=($nonnull $i) 1389a747e4fSDavid du Colombier } 1399a747e4fSDavid du Colombier if(! ~ $#nonnull 0) 1409a747e4fSDavid du Colombier whatis $nonnull |grep -v '^\./' >>/tmp/vars >[2]/dev/null 1419a747e4fSDavid du Colombier for(i in $null) 1429a747e4fSDavid du Colombier echo $i^'=()' >>/tmp/vars 1439a747e4fSDavid du Colombier} 1449a747e4fSDavid du Colombier 1459a747e4fSDavid du Colombierfn coherence { 1469a747e4fSDavid du Colombier if(test -f /tmp/vars) { 1479a747e4fSDavid du Colombier grep '^[a-z]*=' /tmp/vars >/tmp/vars2 1489a747e4fSDavid du Colombier v=`{sed 's/^([a-z]*)=.*/\1/' /tmp/vars2 | sort -u} 1499a747e4fSDavid du Colombier . /tmp/vars2 1509a747e4fSDavid du Colombier rm /tmp/vars2 1519a747e4fSDavid du Colombier rm /tmp/vars 1529a747e4fSDavid du Colombier export $v 1539a747e4fSDavid du Colombier } 1549a747e4fSDavid du Colombier} 1559a747e4fSDavid du Colombier 1569a747e4fSDavid du Colombier# ip device stats 1579a747e4fSDavid du Colombier 1589a747e4fSDavid du Colombierfn isipdevup { 1599a747e4fSDavid du Colombier grep -s $1 /net/ipifc/*/status >[2]/dev/null 1609a747e4fSDavid du Colombier} 1619a747e4fSDavid du Colombier 162*f9247424SDavid du Colombier 163