#!/bin/sh
if test -f /etc/oss.conf
then
  . /etc/oss.conf
else
  OSSLIBDIR=/usr/lib/oss
fi

if ! test -f /proc/opensound/devfiles
then
  echo OSS not loaded.
  exit 0
fi

if ! test -f $OSSLIBDIR/etc/installed_drivers
then
	echo $OSSLIBDIR/etc/installed_drivers is missing.
	exit 1
fi


PROGRAMS="`fuser /dev/mixer* /dev/dsp* /dev/midi* /dev/oss/*/* 2>/dev/null`"
  
if test "$PROGRAMS " != " "
then
  echo
  echo Some applications are still using OSS - cannot unload
  echo

  for n in $PROGRAMS
  do
    if test -f /proc/$n/cmdline
    then
      echo $n `cat /proc/$n/cmdline`
    else
      echo $n Unknown
    fi
  done

  echo
  echo Please stop these applications and run soundoff again
  exit 2
fi

# Some video drivers depend on osscore (soundcore) and need to be removed
# before OSS can be unloaded.
#VIDEODRIVERS="tvmixer saa7134-empress saa7134-dvb saa7134"

# Save mixer settings automatically if requested
if test -f $OSSLIBDIR/etc/userdefs && grep -q "autosave_mixer yes" $OSSLIBDIR/etc/userdefs
then
	/usr/sbin/savemixer
fi

for i in 1 2 3
do
  for n in $VIDEODRIVERS `cat $OSSLIBDIR/etc/installed_drivers | sed 's/ .*//'`
  do
    /sbin/modprobe -r $n > /dev/null 2>&1
  done
done

rmmod cuckoo > /dev/null 2>&1
rmmod cuckoo_pcm > /dev/null 2>&1
rmmod cuckoo_mixer > /dev/null 2>&1

#modprobe -r snd-pcm > /dev/null 2>&1

for n in `cat $OSSLIBDIR/etc/installed_drivers | sed 's/ .*//'` osscore
do
    /sbin/modprobe -r $n
done

if ! test -f /proc/opensound/devfiles # OSS gone?
then
  exit 0
fi

echo Cannot unload the OSS driver modules

exit 3
