#!/usr/bin/bash
# we need bash because we use let

cd /dev

# drive types:
# E = ED 3'1/2
# H = HD 3'1/2
# h = HD 5'1/4
# D = DD 3'1/2
# d = DD 5'1/4

canonize()
{
	typ=`echo $name | cut -c1`
	cap=`echo $name | cut -c2-16`
}

getdrvtyp()
{
	stop=0
	name=`floppycontrol -T $1 2>/dev/null`
	st=$?
	if [ $st != 0 -o X"$name" = X -o X"$name" = "X(null)" ] ; then
		stop=1
		return
	fi
	canonize "$name"
}


mkdriv()
{
	echo mkdriv $1
	rm -f tmp_floppy
	if [ $drive -ge 4 ] ; then
		let base=$drive+124
	else
		let base=$drive
	fi

	mknod tmp_floppy b 2 $base

	name=`printenv FD$1`
	if [ $? != 0 ] ; then
		getdrvtyp tmp_floppy
		if [ $typ = 0 -o $stop = 1 ] ; then
			rm -f tmp_floppy
			return
		fi
	else
		canonize $name
	fi

	mv tmp_floppy "fd$1"

	typ0=$typ
	type=1
	while [ $type -lt 32 ] ; do
		rm -f tmp_floppy
		let minor=$type\*4+$base
		mknod tmp_floppy b 2 $minor
		getdrvtyp tmp_floppy
		if [ $typ = 0 ] ; then
			rm -f tmp_floppy
			return
		fi
		if [ $stop = 1 ] ; then
			rm -f tmp_floppy
			let type=$type+1
			continue;
		fi
		if [ $typ = $typ0 ] ; then
			mv -iv tmp_floppy fd$1$typ$cap
		elif  [ $typ = "D" -a $typ0 = "H" ] ; then
			mv -iv tmp_floppy fd"$1"H"$cap"
		elif  [ $typ = "D" -a $typ0 = "E" ] ; then
			mv -iv tmp_floppy fd"$1"E"$cap"
		elif  [ $typ = "H" -a $typ0 = "E" ] ; then
			mv -iv tmp_floppy fd"$1"E"$cap"
		else
			rm -f tmp_floppy
		fi
		let type=$type+1
	done
}

type floppycontrol >/dev/null
if [ $? != 0 ] ; then
	echo First compile the floppycontrol program and put it into your PATH
	exit 1
fi

if [ $# -ge 1 ] ; then
	for drive in $* ; do
		mkdriv $drive
	done
else
	for drive in 0 1 2 3 4 5 6 7; do
		mkdriv $drive
	done
fi
