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