#!/bin/sh

# You will need to tailor the following to suit your own hostname and CD
# writer device.

case `hostname` in
titch)    ImageFileDirectory=/masters/CD-IMAGES
          ImageFileName=cd-data-image-iso
          Device=1,0,0
          DeviceFile=/dev/cdrom
          Speed=48 ;;
carousel) ImageFileDirectory=/local/cd-images
          ImageFileName=cd-image-iso
          Device=0,0,0
          DeviceFile=/dev/cdrom1
          Speed=16 ;;
*) echo "You must be on the right host to run this!"
   exit 1 ;;
esac

MaxVOLID=32

if test ! -r $DeviceFile
then
  echo "You have no read permission on $DeviceFile"
  exit 1
fi

case $1 in
-i) case $2 in
    "") echo "No image name"
        exit ;;
    *) ImageFileName="$2"
       shift 2 ;;
    esac
esac

Blank=FAST
case $1 in
-bf) Blank=FAST
     shift ;;
-bn) Blank=NONE
     shift ;;
-ba) Blank=ALL
     shift ;;
esac

SymLinkFollow=""
case $1 in
-lf) SymLinkFollow="-f"
     shift ;;
esac

WriteCount=1
case $1 in
-wc) case $2 in
    "") echo "No write count"
        exit ;;
    *) WriteCount="$2"
       shift 2 ;;
    esac
esac

VerifyOnly=false
case $1 in
-vo) VerifyOnly=true
     shift ;;
esac


MakeImage=true
case $1 in
-nm) MakeImage=false
     shift ;;
esac

RockRidge="-r"
case $1 in
-R) RockRidge="-R"
     shift ;;
esac

case "$ImageFileName" in
/*) ;;
*)  ImageFileName="$ImageFileDirectory/$ImageFileName" ;;
esac

if $MakeImage
then
  case $1 in
  "") echo "Usage $0 [options] [ -nm | directory ... ]"
      exit 1 ;;
  esac

  APPI=`cd $1; basename \`pwd\``
  APPI=$APPI" `date \"+%a %d %b %Y\"`"
  VOLID=`echo $APPI|cut -c1-$MaxVOLID`

  #mkisofs -R -J -o $ImageFileName "$@" 2>&1 | egrep -v "^Using"
  mkisofs -A "$APPI" -V "$VOLID" $RockRidge -J $SymLinkFollow \
    -o $ImageFileName "$@" 2>&1 \
    | egrep -v "^Using"

  #Entry already in /etc/fstab:
  #/pops-local/CD-IMAGES/cd-data-image-iso /mnt/cd-image-iso iso9660 loop=/dev/loop1,user,noauto 0 0

  mount /mnt/cd-image-iso
  cd /mnt/cd-image-iso
  echo "Check the CD image now, and then exit this shell."
  $SHELL
  cd $ImageFileDirectory
  umount /mnt/cd-image-iso
else
  case $1 in
  "") ;;
  *) echo "Usage $0 [options] [ -nm | directory ... ]"
     exit 1 ;;
  esac
fi

NoOfWrites=0
while test "$NoOfWrites" -lt "$WriteCount"
do
  Action=write
  $VerifyOnly && Action=verify
  NoOfWrites=$[$NoOfWrites + 1]
  echo "About to $Action copy number $NoOfWrites out of $WriteCount copies"
  echo "	of $ImageFileName."
  echo "Press enter when (RE)WRITABLE CD is mounted"
  read X

  if ! $VerifyOnly
  then
    case $Blank in
    ALL) cdrecord blank=all -v speed=$Speed dev=$Device -data $ImageFileName ;;
    FAST) cdrecord blank=fast -v speed=$Speed dev=$Device -data $ImageFileName ;;
    NONE) cdrecord -v speed=$Speed dev=$Device -data $ImageFileName ;;
    esac

    echo "Opening CD drive to ensure good status..."
    eject $DeviceFile
  fi

  echo "Verifying..."
  NoOfBlocks=$[`wc -c < $ImageFileName` / 2048]
  if dd if=$DeviceFile bs=2048 count=$NoOfBlocks \
     | ( BlocksLeft=$NoOfBlocks
         BlocksDone=0
         Percent=0
         while test $Percent -lt 100 \
               && ThisTime=$[$BlocksLeft / (100 - $Percent)] \
               && dd bs=2048 count=$ThisTime 2>/dev/null
         do
           Percent=$[$Percent + 1]
           BlocksLeft=$[$BlocksLeft - $ThisTime]
           BlocksDone=$[$BlocksDone + $ThisTime]
           echo -n "$Percent% $BlocksDone / $NoOfBlocks " >&2
         done
         echo >&2
       ) | cmp - $ImageFileName
  then
    echo "Verified - all okay"
    eject $DeviceFile
  else
    echo "Verification problem!"
    exit 1
  fi
done

echo "Finished"
