#!/bin/rc

loader=9load
pbs=/386/pbslba
mbr=/386/mbr

fn fail{
	if(! ~ $#* 0)
		echo mkfsboot: $*>[2=1]
	exit fail
}

flagfmt='l loader,p pbs,m mbr'
args='drive'
if(! ifs=() eval `{aux/getflags $*} || ! ~ $#* 1){
	aux/usage
	exit usage
}
if(! test -d $1 || ! test -f $1/data){
	fail disk $1 not found
}

if(! ~ $#flagl 0)
	loader=$flagl
if(! ~ $#flagp 0)
	pbs=$flagp
if(! ~ $#flagm 0)
	mbr=$flagm
if(! test -f fsconfig)
	fail fsconfig missing
if(! test -d 9fat || ! test -f 9fat/$loader)
	fail invalid 9fat directory
d=$1

# format properly without password
disk/mknvrsafe -c `{sed -n 's:^config (.*):\1:p' < fsconfig} | dd -quiet 1 -conv sync -of 9fat/fs.nvr
if(! ~ $status '|')
	exit mknvrsafe

dd -if /dev/zero -of $d/data -count 1024 -bs 8192 -quiet 1 || fail
disk/mbr -m $mbr $d/data || fail
disk/fdisk -abw $d/data || fail
{
	echo a 9fat 0 0x5000
	echo a nvram 0x5000 0x5001
	echo a fsconfig 0x5040 0x5060
	test -x extraparts && extraparts
	echo w
	echo q
} | disk/prep $d/plan9 || fail
extra=`{ls -p 9fat/* | grep -v '^(' ^ $loader ^ '|plan9.ini|fs.nvr)$'}
if(! test -f 9fat/$loader)
	cp /386/$loader 9fat/$loader || fail
if(~ $#extra 0 || ! test -f 9fat/plan9.ini || ! test -f 9fat/fs.nvr)
	fail missing required 9fat files
disk/format -b $pbs -d -r 2 $d/9fat \
	9fat/^($loader plan9.ini fs.nvr $extra) || fail
# prep lies to us.  we need to get the real offset of
# 9fat to put the config block on a 8k boundary
offset=`{awk '$1=="part" && $2=="plan9" {print 8 - $3%8}' < $d/ctl}

# add Tconfig tag
grep -v '^config' fsconfig | disk/mkfsconf | dd -of $d/fsconfig -oseek $offset -quiet 1
