115 lines · 1.8 KB · Text
RawDownload
#!/bin/rc . ./defs while(){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=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/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 readycoherenceecho 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 $iecho 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 echoecho $div ./$rd go$rd=done		# if it's not, the check will figure that outexport $rd}