xref: /plan9/sys/lib/dist/pc/inst/main (revision a22b0629beb42d6ba21fb59ad976b0ded93891c9)
19a747e4fSDavid du Colombier#!/bin/rc
29a747e4fSDavid du Colombier
39a747e4fSDavid du Colombier. defs
49a747e4fSDavid du Colombier
59a747e4fSDavid du Colombierwhile()
69a747e4fSDavid du Colombier{
79a747e4fSDavid du Colombierdiv=--------------------------------------
89a747e4fSDavid du Colombierecho
99a747e4fSDavid du Colombierecho $div
109a747e4fSDavid du Colombierecho
119a747e4fSDavid du Colombierecho -n 'Preparing menu...'
129a747e4fSDavid du Colombier
139a747e4fSDavid du Colombier# must be topologically sorted (by prereq)
149a747e4fSDavid du Colombiertasks=(\
15*a22b0629SDavid du Colombier	configfs\
169a747e4fSDavid du Colombier	partdisk prepdisk\
1739734e7eSDavid du Colombier	fmtfossil\
189a747e4fSDavid du Colombier	mountfs\
199a747e4fSDavid du Colombier	configdist\
209a747e4fSDavid du Colombier	confignet\
219a747e4fSDavid du Colombier	mountdist\
22*a22b0629SDavid du Colombier	fmtventi\
239a747e4fSDavid du Colombier	download\
249a747e4fSDavid du Colombier	copydist\
259a747e4fSDavid du Colombier	bootsetup finish stop\
269a747e4fSDavid du Colombier	stopether stopppp\
279a747e4fSDavid du Colombier)
289a747e4fSDavid du Colombier#	startether startppp stopether stopppp download\
299a747e4fSDavid du Colombier
3039734e7eSDavid du Colombier# these don't show up in the menu but still matter
319a747e4fSDavid du Colombierpseudotasks=(configip havefiles etherup etherdown pppup pppdown)
329a747e4fSDavid du Colombier
339a747e4fSDavid du Colombierfor(i in $tasks $pseudotasks)
349a747e4fSDavid du Colombier	$i=notdone
359a747e4fSDavid du Colombier
369a747e4fSDavid du Colombiercoherence
379a747e4fSDavid du Colombier
389a747e4fSDavid du Colombierfor(i in $tasks $pseudotasks)
399a747e4fSDavid du Colombier	if(~ $#$i 0)
409a747e4fSDavid du Colombier		$i=notdone
419a747e4fSDavid du Colombier
429a747e4fSDavid du Colombier#
439a747e4fSDavid du Colombier# we believe the environment about what is done
449a747e4fSDavid du Colombier# only if we've confirmed it.  since the tasks list is sorted so that
459a747e4fSDavid du Colombier# prereqs of xxx come before xxx, it's okay to assume xxx
469a747e4fSDavid du Colombier# is done until proven otherwise -- either a prereq or checkdone
479a747e4fSDavid du Colombier# will say so.
489a747e4fSDavid du Colombier#
499a747e4fSDavid du Colombier
509a747e4fSDavid du Colombierdone=()
519a747e4fSDavid du Colombierready=()
529a747e4fSDavid du Colombierrm /env/done
539a747e4fSDavid du Colombierrm /env/ready
549a747e4fSDavid du Colombierfor(i in $tasks) {
559a747e4fSDavid du Colombier	$i=done
569a747e4fSDavid du Colombier	for(j in `{prereq $i})
579a747e4fSDavid du Colombier		if(! ~ $$j done)
589a747e4fSDavid du Colombier			$i=notdone
599a747e4fSDavid du Colombier	if(~ $$i done) {
609a747e4fSDavid du Colombier		export $i
619a747e4fSDavid du Colombier		$i checkdone
629a747e4fSDavid du Colombier		$i=`{grep '^'$i^'=' /tmp/vars | sed -n '$p' | sed 's/.*=//'}
639a747e4fSDavid du Colombier	}
649a747e4fSDavid du Colombier
659a747e4fSDavid du Colombier	if(~ $$i notdone ready) {
669a747e4fSDavid du Colombier		okay=yes
679a747e4fSDavid du Colombier		for(j in `{prereq $i})
689a747e4fSDavid du Colombier			if(! ~ $$j done)
699a747e4fSDavid du Colombier				okay=no
709a747e4fSDavid du Colombier		switch($okay){
719a747e4fSDavid du Colombier		case yes
729a747e4fSDavid du Colombier			$i=ready
739a747e4fSDavid du Colombier			export $i
749a747e4fSDavid du Colombier			$i checkready
759a747e4fSDavid du Colombier			$i=`{grep '^'$i^'=' /tmp/vars | sed -n '$p' | sed 's/.*=//'}
769a747e4fSDavid du Colombier		case no
779a747e4fSDavid du Colombier			$i=notdone
789a747e4fSDavid du Colombier		}
799a747e4fSDavid du Colombier	}
809a747e4fSDavid du Colombier
819a747e4fSDavid du Colombier	if(~ $$i done ready)
829a747e4fSDavid du Colombier		$$i=($$$i $i)		# rc can be just as complicated as perl!
839a747e4fSDavid du Colombier}
849a747e4fSDavid du Colombier
859a747e4fSDavid du Colombierexport $tasks $pseudotasks done ready
869a747e4fSDavid du Colombiercoherence
879a747e4fSDavid du Colombierecho
889a747e4fSDavid du Colombier
899a747e4fSDavid du Colombierif(! ~ $#done 0) {
909a747e4fSDavid du Colombier	echo 'The following tasks are done: '
919a747e4fSDavid du Colombier	for(i in $done)
929a747e4fSDavid du Colombier		desc $i
939a747e4fSDavid du Colombier	echo
949a747e4fSDavid du Colombier}
959a747e4fSDavid du Colombier
969a747e4fSDavid du Colombierecho 'The following unfinished tasks are ready to be done:'
979a747e4fSDavid du Colombierfor(i in $ready)
989a747e4fSDavid du Colombier	desc $i
999a747e4fSDavid du Colombierecho
1009a747e4fSDavid du Colombier
1019a747e4fSDavid du Colombierif(~ $#ready 0) {
1029a747e4fSDavid du Colombier	echo hey you finished everything!  not supposed to happen.
1039a747e4fSDavid du Colombier	sleep 100
1049a747e4fSDavid du Colombier	exit
1059a747e4fSDavid du Colombier}
1069a747e4fSDavid du Colombier
1079a747e4fSDavid du Colombierprompt -d $ready(1) -w '' 'Task to do' $done $ready
1089a747e4fSDavid du Colombier
1099a747e4fSDavid du Colombierecho
1109a747e4fSDavid du Colombierecho $div
1119a747e4fSDavid du Colombier
1129a747e4fSDavid du Colombier$rd go
1139a747e4fSDavid du Colombier$rd=done		# if it's not, the check will figure that out
1149a747e4fSDavid du Colombierexport $rd
1159a747e4fSDavid du Colombier}
116