#!/bin/rc

rfork e

switch($#*){
case 1
       vac=$1
case *
       echo 'usage: vacchain vac:score' >[1=2]
       exit usage
}

if(! ~ $vac vac:????????????????????????????????????????){
       echo bad score >[1=2]
       exit 'bad score'
}

score=`{echo $vac | sed 's/vac://'}

tmp=/tmp/vacchain.$pid
fn die{
       echo $* >[1=2]
       rm -f $tmp
       exit ''
}
nl='
'
while(){
       echo vac:$score
       if(! venti/read $score 1 >$tmp)
               die could not find $score
       if(! ~ `{ls -l $tmp | awk '{print $6}'} 300)
               die block $score too short
       score=`{dd -bs 1 -iseek 280 -count 20 -if $tmp >[2]/dev/null |
               xd -b | sed 's/^.......(  )?//' | tr -d $nl^' '}
}
//GO.SYSIN DD /usr/rsc/bin/rc/vacchain
echo /usr/rsc/bin/rc/lastfossil
sed 's/.//' >/usr/rsc/bin/rc/lastfossil <<'//GO.SYSIN DD /usr/rsc/bin/rc/lastfossil'
#!/bin/rc

rfork e

switch($#*){
case 0
       file=/dev/sdC0/fossil
case 1
       file=$1
case *
       echo 'usage: lastfossil [/dev/sdC0/fossil]' >[1=2]
       exit usage
}

fn h2d { echo 'ibase=16;' print `{echo $1|tr a-z A-Z} |bc }
header=`{dd -bs 1024 -iseek 128 -count 1 -if $file >[2]/dev/null| xd -b | sed 1q}
bsize=`{h2d $header(8)^$header(9)}
super=`{h2d 0$header(10)^$header(11)^$header(12)^$header(13)}
x=`{dd -bs $bsize -iseek $super -count 1 -if $file >[2]/dev/null | xd -b |
       sed '1,2d;3s/^.......  .. .. //;4s/^.......  (.. .. .. .. .. ..).*/\1/;4q' | tr -d ' '}
echo vac:^$x(1)^$x(2)