#!/bin/sh
#setup missing cdroms in fstab
#maybe a replacement for rc.cdrom
#written By Uel Archuletta for VLocityLinux

drives=$(cat /proc/sys/dev/cdrom/info |grep  "drive name"|cut -f2 -d':'|xargs -n 2);
param_dvdrw=0 
param_dvdr=0 
param_dvd=0 
param_cdr=0
param_cdrom=0
j=""
OPT="	iso9660		users,noauto,ro"

clean_fstab()
{
  for DEV in {cdrom,cdrw,cd-,dvd,cdwriter,dvdwriter,dvd[0-9],cdrom[0-9],$drives}*; do
    if cat /etc/fstab | grep -wq "/dev/$DEV" ; then
      cat /etc/fstab | \
      sed -e "\/dev\/$DEV[[:space:]]/d" /etc/fstab > /etc/fstab.new
      mv -f /etc/fstab.new /etc/fstab
    fi 
  done
}
add_fstab()
{
#add the device to fstab
   if ! cat /etc/fstab | grep -wq "# CDROM, CDWRITER, DVD" ; then
     echo "# CDROM, CDWRITER, DVD
     " >> /etc/fstab
   fi
   DEV=$1
   MNT=$2
   cat /etc/fstab | \
   sed -e "/# CDROM,/a /dev/$DEV	/mnt/$MNT$OPT" > /etc/fstab.new
   mv -f /etc/fstab.new /etc/fstab
   rm fstab.new 2> /dev/null
}


#if [ "$1" == "clean" ]; then
  clean_fstab
#  exit 0
#fi

rm /tmp/drives 2>/dev/null

for i in $drives; do
 echo $i >> /tmp/drives 
done
drive=`cat /tmp/drives |sort`

for i in $drive ; do
  a=0
  b=1  
  while [ $a == 0 ];do
    dev=`cat /proc/sys/dev/cdrom/info | grep $i | cut -d ":" -f2 | cut -f$b`
    if [ "$dev" == "$i" ]; then
      let c=$b-1
      param_cdr=$(cat /proc/sys/dev/cdrom/info|grep "Can write"|grep  "CD-R"|cut -f2 -d':'|cut -f$b);
      param_dvd=$(cat /proc/sys/dev/cdrom/info|grep "Can read"|grep "DVD"|cut -f2 -d':'|cut -f$b);
      param_dvdr=$(cat /proc/sys/dev/cdrom/info|grep "Can write"|grep "DVD-R:"|cut -f2 -d':'|cut -f$c);
      param_dvdram=$(cat /proc/sys/dev/cdrom/info|grep "Can write"|grep "DVD-RAM"|cut -f2 -d':'|cut -f$c);
      let a=$a+1
    fi
    let b=$b+1
  done

  if [ "$param_dvdram" == 1 ]; then
    dvdrams=$i
  fi
  if [ "$param_dvdr" == 1 ]; then
    dvdrs=$i
  fi
  if [ "$param_dvd" == 1 ]; then
    dvds=$i
  fi
  if [ "$param_cdr" == 1 ]; then
    cdrs=$i
  fi

  cdrom=$i	

  if [ ! "$(echo -n $dvdrams)" == "" ] ; then
    if [ "$(grep /dev/$dvdrams /etc/fstab)" == "" ] ; then
      if [ "$(grep /mnt/dvdram*  /etc/fstab)" != "" ] ; then
        let j=$j+1
      fi 
      echo "Found DVD-RAM: $dvdrams";
      mkdir -p /mnt/dvdram$j
      if [ ! "$(grep $i /etc/fstab|grep dvdram$j|cut -f1|cut -c 6-8)" == "$i" ]; then
        add_fstab $dvdrams dvdram$j
      fi 
    fi
  fi

  if [ ! "$(echo -n $dvdrs)" == "" ] ; then 
    if [ "$(grep /dev/$dvdrs /etc/fstab)" == "" ] ; then
      echo "Found DVD-R: $i";
      if cat /etc/fstab | grep -wq /mnt/dvdwriter$j ; then
        let j=$j+1
      fi
      mkdir -p /mnt/dvdwriter$j
      if [ ! "$(grep $i /etc/fstab|grep dvdwriter$j|cut -f1|cut -c 6-8)" == "$i" ]; then
        #add_fstab $i dvdwriter$j
        if [ -L /dev/dvdwriter$j ] ; then
          add_fstab dvdwriter$j dvdwriter$j
        #else
        #  rm /dev/dvdwriter$j
        #  ln -s /dev/$i /dev/dvdwriter$j
        #  add_fstab dvdwriter$j dvdwriter$j 
        fi
      fi 
    fi
  fi	 

  if [ ! "$(echo -n $dvds)" == "" ] ; then 
    if [ "$(grep /dev/$dvds /etc/fstab)" == "" ] ; then
      echo "Found DVD: $i";
      if cat /etc/fstab | grep -wq /mnt/dvd$j ; then
        let j=$j+1
      else
        j=""
      fi
      mkdir -p /mnt/dvd$j
      if [ ! "$(grep $i /etc/fstab|grep dvd$j|cut -f1|cut -c 6-8)" == "$i" ]; then
        #add_fstab $i dvd$j
        if [ -L /dev/dvd$j ] ; then
          add_fstab dvd$j dvd$j
        #else
        #  rm /dev/dvd$j
        #  ln -s /dev/$i /dev/dvd$j
        #  add_fstab dvd$j dvd$j
        fi
      fi 
    fi
  fi

  if [ ! "$(echo -n $cdrs)" == "" ] ; then
    if [ "$(grep /dev/$cdrs /etc/fstab)" == "" ] ; then
      echo "Found CD-R: $i";
      if cat /etc/fstab | grep -wq /mnt/cdwriter$j ; then
        let j=$j+1
      fi
      mkdir -p /mnt/cdwriter$j
      if [ ! "$(grep $i /etc/fstab|grep cdwriter$j|cut -f1|cut -c 6-8)" == "$i" ]; then 
        #add_fstab $i cdwriter$j
        if [ -L /dev/cdwriter$j ] ; then 
          add_fstab cdwriter$j cdwriter$j
        #else
        #  rm /dev/cdwriter$j
        #  ln -s /dev/$i /dev/cdwriter$j
        #  add_fstab cdwriter$j cdwriter$j
        fi
      fi 
    fi
  fi

  if [ ! "$(echo -n $cdrom)" == "" ] ; then
    if [ "$(grep "/dev/$i " /etc/fstab)" == "" ] ; then
      if [ ! "$(grep $i /etc/fstab|grep cdrom|cut -f1|cut -c 6-8)" == "$i" ]; then
        echo "Found CD-ROM: $i";
        if cat /etc/fstab | grep -wq /mnt/cdrom$j ; then
          let j=$j+1
        fi
        mkdir -p /mnt/cdrom$j
        if [ ! "$(grep $i /etc/fstab|grep cdrom$j|cut -f1|cut -c 6-8)" == "$i" ]; then
          #add_fstab $i cdrom$j
          if [ -L /dev/cdrom$j ] ; then
            add_fstab cdrom$j cdrom$j
         # else
         #   rm /dev/cdrom$j
         #   ln -s /dev/$i /dev/cdrom$j
         #   add_fstab cdrom$j cdrom$j
          fi
        fi
      fi
    fi
  fi

done
rm /tmp/drives
