#!/bin/sh

while getopts 's:t:l:r:' i; do
	case "$i" in
		s)
			slice="${OPTARG#/dev/}";;
		t)
			title="$OPTARG";;
		l)
			load="$OPTARG";;
		r)
			rootpostfix="$OPTARG";;
		'?')
			echo "Usage: $0 [-s slice [-t title] [-l load]]"
			echo "  -s: Special options for a slice"
			echo "  -t: Title for slice specified with -s (e.g. 'DesktopBSD')"
			echo "  -l: Loading line for slice specified with -s (e.g. 'chainloader +1')"
			echo "  -r: Append text in root directive, e.g. ',a' turns '(hd0,0)' into '(hd0,0,a)'"
			exit 1;;
	esac
done

echo 'default 0'
echo 'timeout 6'
[ -f /boot/grub/splash.xpm.gz ] && echo 'splashimage /boot/grub/splash.xpm.gz'
echo

# Read list of disks from /dev, ATA disks first
diskentries=`/bin/ls -1 /dev | egrep '^(ad|da)[0-9]+$'`

grubid=0
for disk in $diskentries ; do
	grubdisk="hd${grubid}"

	sysids="`fdisk ${disk} | awk '$1 == "sysid" { print $2 }' | tr '\n' ' '`"

	partitionid=0
	for sysid in ${sysids} ; do
		case $sysid in
			1|4|5|6|11|12|14|15)
				ptype='Windows (FAT)';
				ostype='Windows';;

			7)
				ptype='Windows (NTFS)';
				ostype='Windows';;

			131)
				ptype='Linux';
				ostype='Linux';;

			165)
				ptype='FreeBSD';
				ostype='BSD';;

			166)
				ptype='OpenBSD';
				ostype='BSD';;

			169)
				ptype='NetBSD';
				ostype='BSD';;

			175)
				ptype='Mac OS X';
				ostype='Mac';;

			*)
				ptype="Unknown (ID ${sysid})";
				ostype='Other';;
		esac

		echo "#[${ostype}]"
		if [ "$slice" = "${disk}s$((partitionid + 1))" ]; then
			echo "title ${title:-${ptype}}"
			echo "root (${grubdisk},${partitionid}${rootpostfix})"
			echo "makeactive"
			echo "${load:-chainloader +1}"
		else
			echo "title ${ptype}"
			echo "root (${grubdisk},${partitionid})"
			echo "makeactive"
			echo 'chainloader +1'
		fi
		echo 'savedefault'

		# Empty line
		echo
	
		partitionid=$((partitionid + 1))
	done

	grubid=$((grubid + 1))
done
