123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- nl='
- '
- tab=' '
- if(~ $#distname 0)
- distname=plan9
- wctl=/dev/null
- if(test -w /dev/wctl)
- wctl=/dev/wctl
- fn log {
- echo $* >>/srv/log
- }
- fn logprog {
- echo '% '^$"* >>/srv/log
- $* >[2=1] >>/srv/log
- }
- fn sigint {
- # nothing happens
- }
- fn prompt {
- def=()
- what=()
- if(~ $1 -d && ! ~ $#* 1){
- def=$2
- shift
- shift
- }
- optstr=()
- if(~ $1 -w && ! ~ $#* 1){
- optstr=$2
- shift
- shift
- }
- pr=$1
- shift
- opts=($*)
- if(~ $#opts 0) {
- suf=' '
- }
- if not if(! ~ $#optstr 0) {
- if(~ $optstr '')
- suf=' '
- if not {
- pr=$pr^' ('^$"optstr^')'
- suf=''
- }
- }
- if not {
- pr=$pr^' ('^$1
- shift
- for(i)
- pr=$pr^', '^$i
- pr=$pr^')'
- suf=''
- }
- if(~ $#def 1)
- pr=$pr^$suf^'['^$def^']'
- if not
- pr=$pr^$suf^'[no default]'
- pr=$pr^': '
- okay=no
- while(~ $okay no) {
- echo -n current >$wctl
- echo -n top >$wctl
- echo -n $pr >[1=2]
- ifs='' {rd=`{read}}
- if(~ $#rd 0)
- exit notdone
- if(~ $rd !*){
- ifs='' {rd=`{echo $rd | sed 's/!//'}}
- echo $rd
- rc -c $rd
- echo !$status
- }
- if not{
- rd=`{echo $rd}
- if(~ $#rd 0 || ~ $rd '')
- rd=$def
-
- switch($#opts){
- case 0
- if(! ~ $rd '')
- okay=yes
- case *
- if(~ $rd $opts)
- okay=yes
- }
- }
- }
- echo -n $rd >/env/rd # just in case
- }
- fn desc {
- echo -n ' '^$1^' - '
- grep '^# desc: ' $1 | sed 's/# desc: //'
- }
- fn prereq {
- grep '^# prereq:' $1 | sed 's/# prereq://'
- }
- fn mustdo {
- echo You must `{grep '^# mustdo:' $1 | sed 's/# mustdo://'}
- }
- # there's no easy way to pass shell variables
- # up from children to parents; the parents have
- # to be coerced into noticing that the environment
- # changed, even when in the same environment group.
- #
- # instead, we explicitly export the variables we want
- # to percolate, and the parent calls coherence to reread
- # the variables.
- #
- # we just append to the vars file, so that later exports
- # override earlier ones; when we call coherence,
- # the duplicates are thrown out.
- fn export {
- null=()
- nonnull=()
- for(i in $*){
- if(~ $#$i 0)
- null=($null $i)
- if not
- nonnull=($nonnull $i)
- }
- if(! ~ $#nonnull 0)
- whatis $nonnull |grep -v '^\./' >>/tmp/vars >[2]/dev/null
- for(i in $null)
- echo $i^'=()' >>/tmp/vars
- }
- fn coherence {
- if(test -f /tmp/vars) {
- grep '^[a-z]*=' /tmp/vars >/tmp/vars2
- v=`{sed 's/^([a-z]*)=.*/\1/' /tmp/vars2 | sort -u}
- . /tmp/vars2
- rm /tmp/vars2
- rm /tmp/vars
- export $v
- }
- }
- # ip device stats
- fn isipdevup {
- grep -s $1 /net/ipifc/*/status >[2]/dev/null
- }
|