#!/bin/rc. ./defswhile(){div=--------------------------------------echoecho $divechoecho -n 'Preparing menu...'# must be topologically sorted (by prereq)tasks=(\ configfs\ partdisk prepdisk\ mountfs\ configdist\ confignet\ mountdist\ download\ copydist\ pwsetup\ ndbsetup\ tzsetup\ bootsetup\ finish\)# these don't show up in the menu but still matterpseudotasks=(havefiles etherup etherdown pppup pppdown)for(i in $tasks $pseudotasks) $i=notdonecoherencefor(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/donerm /env/readyfor(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 readycoherenceechoif(! ~ $#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 $iechoif(~ $#ready 0) { echo hey you finished everything! not supposed to happen. sleep 100 exit}prompt -d $ready(1) -w '' 'Task to do' $done $readyechoecho $div./$rd go$rd=done # if it's not, the check will figure that outexport $rd}
#!/bin/rc
. ./defs
while()
{
div=--------------------------------------
echo
echo $div
echo
echo -n 'Preparing menu...'
# must be topologically sorted (by prereq)
tasks=(\
configfs\
partdisk prepdisk\
mountfs\
configdist\
confignet\
mountdist\
download\
copydist\
pwsetup\
ndbsetup\
tzsetup\
bootsetup\
finish\
)
# these don't show up in the menu but still matter
pseudotasks=(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
}