123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #!/bin/rc
- . defs
- while()
- {
- div=--------------------------------------
- echo
- echo $div
- echo
- echo -n 'Preparing menu...'
- # must be topologically sorted (by prereq)
- tasks=(\
- configfs\
- partdisk prepdisk\
- fmtfossil\
- mountfs\
- configdist\
- confignet\
- mountdist\
- fmtventi\
- download\
- copydist\
- bootsetup finish stop\
- stopether stopppp\
- )
- # startether startppp stopether stopppp download\
- # these don't show up in the menu but still matter
- pseudotasks=(configip havefiles etherup etherdown pppup pppdown)
- for(i in $tasks $pseudotasks)
- $i=notdone
- coherence
- for(i in $tasks $pseudotasks)
- if(~ $#$i 0)
- $i=notdone
- #
- # we believe the environment about what is done
- # only if we've confirmed it. since the tasks list is sorted so that
- # prereqs of xxx come before xxx, it's okay to assume xxx
- # is done until proven otherwise -- either a prereq or checkdone
- # will say so.
- #
- done=()
- ready=()
- rm /env/done
- rm /env/ready
- for(i in $tasks) {
- $i=done
- for(j in `{prereq $i})
- if(! ~ $$j done)
- $i=notdone
- if(~ $$i done) {
- export $i
- $i checkdone
- $i=`{grep '^'$i^'=' /tmp/vars | sed -n '$p' | sed 's/.*=//'}
- }
- if(~ $$i notdone ready) {
- okay=yes
- for(j in `{prereq $i})
- if(! ~ $$j done)
- okay=no
- switch($okay){
- case yes
- $i=ready
- export $i
- $i checkready
- $i=`{grep '^'$i^'=' /tmp/vars | sed -n '$p' | sed 's/.*=//'}
- case no
- $i=notdone
- }
- }
- if(~ $$i done ready)
- $$i=($$$i $i) # rc can be just as complicated as perl!
- }
- export $tasks $pseudotasks done ready
- coherence
- echo
- if(! ~ $#done 0) {
- echo 'The following tasks are done: '
- for(i in $done)
- desc $i
- echo
- }
- echo 'The following unfinished tasks are ready to be done:'
- for(i in $ready)
- desc $i
- echo
- if(~ $#ready 0) {
- echo hey you finished everything! not supposed to happen.
- sleep 100
- exit
- }
- prompt -d $ready(1) -w '' 'Task to do' $done $ready
- echo
- echo $div
- $rd go
- $rd=done # if it's not, the check will figure that out
- export $rd
- }
|