#!/sbin/ksh

# NOTE: for the time being, this file is not used; it may be again
# in the future.

# done as a function for clarity, and so code can be reverted to
# use real mknod for testing or other reasons.  install is used
# because it will not remake devices if they are already correct,
# and will preserve local modifications to ownership and modes.
mknod()
{
	install -root "" -rawidb "" -f . -m 666 -chr $3,$4 $1
}

mk_ctlrnumber() {
	# construct scsi controller number part of minor number from hinv info
	ctlr=$(( ($1 / 10) * 8 + $1 % 10)) 
}

hinv -c tape | grep "on SCSI" | sed "s/://g" | \
  while read a b c targ e f g adap i; do
	prf=rmt/tps${adap}d$targ
	mk_ctlrnumber $adap
	minor=$(( $ctlr * 512 + $targ * 32))
	mknod ${prf}nr c ${C_TPS} $(( $minor + 3))
	mknod ${prf}stat c ${C_TPS_ST} $(( $minor + 3))
	set +e ; tstat="`2>&1 mt -t ${prf}nr status`" ; set -e
	case "$tstat" {
	*Drive?type:*9?track*) date
	    for dens in 0 8 16 24; do
		case $dens {
		0) kden=6250;;
		8) kden=3200;;
		16) kden=1600;;
		24) kden=800;;
		}
		set s nrs ns "" nrns nr sv nrsv nsv v nrnsv nrv
		for add in 0 1 2 2 3 3 4 5 6 6 7 7 ; do
		    mdev=$(( $minor + $add + $dens ))
		    mknod ${prf}$1.$kden c ${C_TPS} $mdev
		    shift
		done
		if mt -t abi/9track.nr exist; then :
		else dens=0
		    add=6; mdev=$(( $minor + $add + $dens ))
		    mknod abi/9track c ${C_TPS} $mdev
		    add=7; mdev=$(( $minor + $add + $dens ))
		    mknod abi/9track.nr c ${C_TPS} $mdev
		fi 
	    done ;;
	*Drive?type:*8mm?8500*)
	    set s nrs ns "" nrns nr sv nrsv nsv v nrnsv nrv
	    for add in 0 1 2 2 3 3 4 5 6 6 7 7 ; do
		mdev=$(( $minor + $add ))
		mknod ${prf}$1 c ${C_TPS} $mdev
		shift
	    done
	    for dens in 0 8 ; do
		case $dens {
		0) kden=8500;;
		8) kden=8200;;
		}
		set s nrs ns "" nrns nr sv nrsv nsv v nrnsv nrv
		for add in 0 1 2 2 3 3 4 5 6 6 7 7 ; do
		    mdev=$(( $minor + $add + $dens ))
		    mknod ${prf}$1.$kden c ${C_TPS} $mdev
		    shift
		done
	    done
		case "$tstat" {
		*Device:*EXB8500C*|*Device:*EXB-8505*)
			for dens in 16 24 ; do
			case $dens {
			16) kden=8500c;;
			24) kden=8200c;;
			}
			set s nrs ns "" nrns nr sv nrsv nsv v nrnsv nrv
			for add in 0 1 2 2 3 3 4 5 6 6 7 7 ; do
				mdev=$(( $minor + $add + $dens ))
				mknod ${prf}$1.$kden c ${C_TPS} $mdev
				shift
			done
			done
			;;
		}
		;;
	*Drive?type:*DAT*|*Drive?type:*8mm?8200*)
	    set s nrs ns "" nrns nr sv nrsv nsv v nrnsv nrv
	    for add in 0 1 2 2 3 3 4 5 6 6 7 7 ; do
		mdev=$(( $minor + $add ))
		mknod ${prf}$1 c ${C_TPS} $mdev
		case "$tstat" {
		*Device:*Python*01931*) # DDS2 drive with compression
			mdev=$(( $mdev + 8 ))
			mknod ${prf}$1c c ${C_TPS} $mdev
			;;
		*Device:*SDT-9000*) # DDS3 drive with compression
			mdev=$(( $mdev + 8 ))
			mknod ${prf}$1c c ${C_TPS} $mdev
			;;
		}
		shift
	    done ;;
	*Drive?type:*DLT*)
	    set s nrs ns "" nrns nr sv nrsv nsv v nrnsv nrv
	    for add in 0 1 2 2 3 3 4 5 6 6 7 7 ; do
		mdev=$(( $minor + $add ))
		mknod ${prf}$1 c ${C_TPS} $mdev
		case "$tstat" {
	    	*Device:*DLT7000*)		# DLT7000 supporting 4000/7000 densities
			for dens in 0 8 16 24 ; do
				case $dens {
				0)  kden=7000;;
				8)  kden=7000c;;
				16) kden=4000;;
				24) kden=4000c;;
				}
				mdevc=$(( $mdev + $dens))
				mknod ${prf}$1.$kden c ${C_TPS} $mdevc
			done ;;
	    	*)				# DLT2000/4000 supports only one density
			mdev=$(( $mdev + 8))
			mknod ${prf}$1c c ${C_TPS} $mdev
		}
		shift
	    done ;;
	*Drive?type:*NTP*)
	    set s nrs ns "" nrns nr sv nrsv nsv v nrnsv nrv
	    for add in 0 1 2 2 3 3 4 5 6 6 7 7 ; do
		mdev=$(( $minor + $add))
		mknod ${prf}$1 c ${C_TPS} $mdev
		mdev=$(( $mdev + 8))
		mknod ${prf}$1c c ${C_TPS} $mdev
		shift
	    done ;;
	*Drive?type:*STK*)
	    set s nrs ns "" nrns nr sv nrsv nsv v nrnsv nrv
	    for add in 0 1 2 2 3 3 4 5 6 6 7 7 ; do
		mdev=$(( $minor + $add))
		mknod ${prf}$1 c ${C_TPS} $mdev
		mdev=$(( $mdev + 8))
		mknod ${prf}$1c c ${C_TPS} $mdev
		shift
	    done ;;
	*Drive?type:*SONY*)
	    set s nrs ns "" nrns nr sv nrsv nsv v nrnsv nrv
	    for add in 0 1 2 2 3 3 4 5 6 6 7 7 ; do
		mdev=$(( $minor + $add))
		mknod ${prf}$1 c ${C_TPS} $mdev
		shift
	    done ;;
	*Drive?type:*8mm?8900*)
	    set s nrs ns "" nrns nr sv nrsv nsv v nrnsv nrv
	    for add in 0 1 2 2 3 3 4 5 6 6 7 7 ; do
		mdev=$(( $minor + $add))
		mknod ${prf}$1 c ${C_TPS} $mdev
		mdev=$(( $mdev + 8))
		mknod ${prf}$1c c ${C_TPS} $mdev
		shift
	    done ;;
	*Drive?type:*QIC*)
	    set "" s nr nrs ns nrns
	    for add in 0 0 1 1 2 3 ; do
		mdev=$(( $minor + $add))
		mknod ${prf}$1 c ${C_TPS} $mdev
		shift
	    done
		if mt -t abi/qic.nr exist; then :
		else 
		    add=2; mdev=$(( $minor + $add))
		    mknod abi/qic c ${C_TPS} $mdev
		    add=3; mdev=$(( $minor + $add))
		    mknod abi/qic.nr c ${C_TPS} $mdev
		fi 
	    ;;
	*Drive*)
	    set "" s nr nrs ns nrns
	    for add in 0 0 1 1 2 3 ; do
		mdev=$(( $minor + $add))
		mknod ${prf}$1 c ${C_TPS} $mdev
		shift
	    done
	    ;;
	}
done
