#!/bin/sh
# write-cd 1.0.1
VER=1.0.1

DEV=/dev/hdc
WRITESPEED=4
LABEL=DATA_$(date +%y%m%d)
STATTMP=/tmp/write-cd-$(id -un).stat
TMPIMGDIR=/tmp
SAVE_TMPIMG=no

function help () {
  cat <<EOM
write-cd Version $VER
USAGE: write-cd [-v][-e][-h] <source>
    -v    become a bit verbose
    -e    only erase media (requires no <source> as no writes done)
    -h    show this help
<source>  directory where source files reside

EOM
  exit 0
}

function tocstat () {
# returns codes; Blank-R/RW=0, Written-R/RW-or-Non-writable=1,
# No-media-in-drive=2, Drive-not-usable=3
  cdrecord dev=$DEV -toc >$STATTMP 2>&1
  STAT=$(tail -n 1 $STATTMP)
  if [ ! -z "$(echo $STAT |grep -Ei 'Cannot +load +media')" ]; then
    return 2
  elif [ ! -z "$(echo $STAT |grep -Ei 'Cannot +read +TOC.*')" ]; then
    return 0
  elif [ ! -z "$(echo $STAT |grep -Ei 'No +disk')" ]; then
    return 3
  else
    return 1
  fi
}

function erase_cd () {
  [ "$DEBUG" = "1" ] && echo Erasing media........
  cdrecord dev=$DEV speed=$WRITESPEED -blank=fast &>/dev/null
  return $?
}

for i; do
  case $i in
    -v) DEBUG=1;;
    -e) ERASEONLY=1;;
    -h) help;;
    -*) help;;
     *) SRC=$i;;
  esac
done

if [ -z "$SRC" -a -z "$ERASEONLY" ]; then
  echo No Source directory specified. Try \`-h\'
  exit 1
fi

cdrecord dev=$DEV -load &>/dev/null
tocstat
STAT=$?
rm -f $STATTMP

case $STAT in
  0) ;;
  1) ;;
  *)
    echo Media not writable
    exit 1
    ;;
esac

if [ $STAT -eq 1 ]; then
  erase_cd
  if [ $? -ne 0 ]; then
    echo This may not be a Rewritable media
    exit 1
  fi
elif [ ! -z "$DEBUG" ]; then
  echo No erasion required
fi

[ -z "$ERASEONLY" ] || exit 0

TMPIMAGE=$TMPIMGDIR/${LABEL}_$(id -un).iso
[ "$DEBUG" = "1" ] && echo Making tmp ISO $TMPIMAGE........
mkisofs -R -V $LABEL -o $TMPIMAGE $SRC &>/dev/null

if [ $? -ne 0 -o ! -f $TMPIMAGE ]; then
  echo ISO preparation failed
  rm -f $TMPIMAGE
  exit 1
fi

[ "$DEBUG" = "1" ] && echo Writing to media........
cdrecord dev=$DEV speed=$WRITESPEED $TMPIMAGE &>/dev/null
STAT=$?
[ $STAT -ne 0 ] && echo Media write failed
[ "${SAVE_TMPIMG}" = "1" -o "${SAVE_TMPIMG}" = "yes" ] || rm -f $TMPIMAGE
[ $STAT -eq 0 -a "$DEBUG" = "1" ] && echo Done!
exit $STAT
