#sccs	"@(#)fndetc:.drvload	1.2"

#
#  called from /etc/rc to load drivers at boot time:
#	/etc/.drvload
#   requires:
#	/etc/master	(with entries for loadable devices)
#	/etc/lddrv	(directory)
#	/etc/lddrv/lddrv (setuid root)
#	/etc/lddrv/mkifile
#	/etc/lddrv/drivers
#	.o files for loadable drivers in /etc/lddrv
#
if [ ! -f /etc/lddrv/drivers ]
then
	exit
fi
cd /etc/lddrv
exec < drivers >> /usr/adm/drv.log  2>&1

find . -name unix.sym ! -newer /unix -exec rm {} \; 
if [ ! -r unix.sym ]
then
	echo creating unix.sym 
	./mkifile /unix unix.sym 
fi

# Addition by F. Dewey 5/86 to take care of drivers that cause a panic 
# during binding.  The name of the current driver is kept in /etc/current.driver
# so that if, on the reboot after a panic or hang, the file contains
# the name of a driver, that driver is removed from the /etc/drivers
# file for subsequent bootups.

if [ -s /etc/current.driver ]
then
	read driver </etc/current.driver
	rm -f /etc/current.driver
	grep -v $driver /etc/lddrv/drivers >/tmp/$$.drv
	mv /tmp/$$.drv /etc/lddrv/drivers
 	exec < drivers >> /usr/adm/drv.log  2>&1
fi

clean=0
while read driver
do
	echo "/etc/.drvload: driver $driver currently being loaded"
	echo $driver >/etc/current.driver
	sync;sync;sync
	sleep 1

	if [ -z "$driver" ]
	then
		continue
	fi
	./lddrv -q $driver 
	if [ "$?" != "0" ]
	then
		./lddrv -av $driver 
		retcode="$?"
	else
		retcode="0"
	fi
	if [ \( "$retcode" = "0" \) -a \( -x ./${driver}.rc \) ]
	then
		./${driver}.rc 
		retcode="$?"
		if [ "$retcode" != "0" ]
		then
			./lddrv -dv $driver
		fi
	else
		if [ \( "$retcode" != "0" \) -a \( -x ./${driver}.brc \) ]
		then
			./${driver}.brc 
		fi
	fi
	if [ "$retcode" != "0" ]
	then
		if [ "$clean" = "0" ]
		then
			echo "Can't load and initialize the following drivers:\n  " >>/tmp/dr.err
			clean=1
		fi
		if [ -f /etc/lddrv/InstDrv ]
		then
			(
			Dname="Unnamed"
			while read Name
			do
				name=`expr "$Name" : '\(Name=\).*'` 
				if [ -n "$name" ]
				then
					read File
					File=`expr "$File" : 'File=\(.*\)'`
					if [ "$driver" = "$File" ]
					then
						Dname=`expr "$Name" : 'Name=\(.*\)'`
					fi
				fi
			done
			echo "$Dname driver ($driver)"  >>/tmp/dr.err
			) </etc/lddrv/InstDrv 
		else
			echo "Unnamed driver ($driver)"  >>/tmp/dr.err
		fi
	fi

	# if we got this far, the current driver didnt cause a panic or
	# system hang, so it is OK to remove it from the current driver.file.
	rm -f /etc/current.driver
	echo "/etc/.drvload: driver $driver loading completed\n" 

done
if [ -f /tmp/dr.err ]
then
	/usr/bin/erricon -sN "`cat /tmp/dr.err`" 
	rm -f /tmp/dr.err
fi
