#!/bin/sh
#-----------------------------------------------------------------------------
# CD-copying shell by H.P. de Vries
# enhanced by Diego Biurrun

# cdrecord is used for burning data-CDs and selected tracks from audio-CDs
# cdrdao is used for copying complete audio and data CDs
# mkisofs is used for creating images

# have a look at cdcopy.conf to understand what the variables do

# set -e 
# set -x


# read configfiles and exit if we seem to be unconfigured

source /etc/cdcopy.conf

if [ -e ~/.cdcopy ]; then
    source ~/.cdcopy
fi

if [ "${NOTCONFIGURED}" = TRUE ]; then
    echo "Adjust /etc/cdcopy.conf to match your hardware before running cdcopy!"
    #exit 1
fi


# commandline options

if [ $1 = '--gnome'  -o  $1 = '-g' ]; then
    DIALOG=gdialog
fi

if [ $1 = '--kde'  -o  $1 = '-k' ]; then
    DIALOG=kdialog
fi

if [ $1 = '--console'  -o  $1 = '-c' ]; then
    DIALOG=dialog
fi



# just a few more variables

CURRDIR="`pwd`"
BACKTITLE="CD-copy shell v.0.0.7"
MASTERRETVAL=0
RETVAL=0
TMPFILE=`mktemp ${TMPDIR}.cdcopy.XXXXXX`


#clear
cd ${TMPDIR}
#umount ${READER} 2> /dev/null



while [ "${MASTERRETVAL}" = 0 ]; do
    ${DIALOG} --backtitle "${BACKTITLE}" \
        --title "Main menu" \
        --menu "Make your choice:" 16 60 9 \
    1 "Copy Audio-CD" \
    2 "Copy Data-CD" \
    3 "Copy Audio Tracks" \
    4 "Burn ISO-Image to CD" \
    5 "Create Audio-CD Image" \
    6 "Create Audio-CD" \
    7 "Create Data-CD" \
    8 "Blank CD-RW" \
    9 "Exit" 2> ${TMPFILE}
    MASTERRETVAL=$?
    OUTPUT=`cat ${TMPFILE}`

    case ${OUTPUT} in 

    1)

    ${DIALOG} --backtitle "${BACKTITLE}" \
        --title "Copy Audio-CD Options" \
        --checklist  "" 10 60 4 \
    1 "On-the-fly" ${FLY} \
    2 "${MAXSPEED}x speed" on \
    3 "Eject when done" ${EJECT} \
    4 "Correct errors" on 2> ${TMPFILE}
    RETVAL=$?

    if [ "${RETVAL}" = "0" ]; then
       OPTIONS=""
        if [ "`cat ${TMPFILE} | grep 1`" ]; then
            OPTIONS=" --on-the-fly"
        fi
        if [ ! "`cat ${TMPFILE} | grep 2`" ]; then
            CDRDAO_COMMON=${CDRDAO_COMMON}" --speed 1"
        fi
        if [ "`cat ${TMPFILE} | grep 3`" ]; then
            OPTIONS=${OPTIONS}" --eject"
        fi
        if [ "`cat ${TMPFILE} | grep 4`" ]; then
            OPTIONS=${OPTIONS}" --paranoia-mode 3"
        fi

        echo -e "Executing: \n$SUDO cdrdao copy ${CDRDAO_COMMON} ${OPTIONS} \n"
        ${SUDO} cdrdao copy ${CDRDAO_COMMON} ${OPTIONS}
        echo -e "\nPress ENTER to continue!"
        read
    fi
    ;;


		
    2)

    ${DIALOG} --backtitle "${BACKTITLE}" \
        --title "Copy Data-CD Options" \
        --checklist "" 9 60 3 \
    1 "On-the-fly" ${FLY} \
    2 "${MAXSPEED}x speed" on \
    3 "Eject when done" ${EJECT} 2> ${TMPFILE}
    RETVAL=$?

    if [ "${RETVAL}" = "0" ]; then
        OPTIONS="";
        if [ "`cat ${TMPFILE} | grep 1`" ]; then
            OPTIONS=" --on-the-fly"
        fi
        if [ ! "`cat ${TMPFILE} | grep 2`" ]; then
            CDRECORD_COMMON=${CDRECORD_COMMON}" speed=1"
        fi
        if [ "`cat ${TMPFILE} | grep 3`" ]; then
            OPTIONS=${OPTIONS}" -eject"
        fi

        echo -e "Executing: \n$SUDO cdrdao copy ${CDRDAO_COMMON} ${OPTIONS} \n"
        ${SUDO} cdrdao copy ${CDRDAO_COMMON} ${OPTIONS}
        echo -e "\nPress ENTER to continue!"
        read
    fi
    ;;



    3)

    ${DIALOG} --backtitle "${BACKTITLE}" \
        --title "Copy Audio Tracks" \
        --inputbox "Enter track numbers to copy:" 8 60 \
        2> ${TMPFILE}
    RETVAL=$?
    if [ "${RETVAL}" = "0" ]; then
        declare -i N=1
        echo " END" >> ${TMPFILE}
        TRACKLIST=""
        TRACK=`cat ${TMPFILE} | cut -d\  -f${N}`

        while [ "${TRACK}" != "END" ]; do
            echo -e Executing: \ncdparanoia ${TRACK} track-"${TRACK}".wav \n
            cdparanoia ${TRACK} track-"${TRACK}".wav
            TRACKLIST="${TRACKLIST} track-${TRACK}.wav"
            N=N+1
            TRACK=`cat ${TMPFILE} | cut -d\  -f${N}`
        done
    
        if [ "${TRACKLIST}" != "" ]; then
            echo -e "Executing: \n${SUDO} cdrecord ${CDRECORD_AUDIO} ${TRACKLIST} \n"
            ${SUDO} cdrecord ${CDRECORD_AUDIO} ${TRACKLIST}
            echo -e "\nPress ENTER to continue!"
            read
        fi
    fi
    ;;

	

    4)

    ${DIALOG} --backtitle "${BACKTITLE}" \
        --title "Burn ISO-Image to CD Options" \
        --checklist "" 9 60 3 \
    1 "ISO-Image location: ${IMAGE_LOCATION}" on \
    2 "${MAXSPEED}x speed" on \
    3 "Eject when done" ${EJECT} 2> ${TMPFILE}
    RETVAL=$?

    if [ "${RETVAL}" = "0" ]; then
        OPTIONS="";
        if [ "`cat ${TMPFILE} | grep 3`" ]; then
            OPTIONS=${OPTIONS}" -eject"
        fi
        if [ ! "`cat ${TMPFILE} | grep 2`" ]; then
            CDRECORD_COMMON=${CDRECORD_COMMON}" speed=1"
        fi
        if [ !"`cat ${TMPFILE} | grep 1`" ]; then
            ${DIALOG} --inputbox "ISO-image location" 10 60 ${IMAGE_LOCATION} 2> ${TMPFILE}
            IMAGE_LOCATION=`cat ${TMPFILE}`
        fi

        echo -e "Executing: \n${SUDO} cdrecord ${CDRECORD_COMMON} ${OPTIONS} ${IMAGE_LOCATION} \n"

        ${SUDO} cdrecord ${CDRECORD_COMMON} ${OPTIONS} ${IMAGE_LOCATION} 
        echo -e "\nPress ENTER to continue!"
        read
    fi
    ;;



    5)

    SESSION="1"
    ${DIALOG} --backtitle "${BACKTITLE}" \
        --title "Create Audio-CD Image Options" \
        --checklist "" 9 60 3 \
    1 "Image location: ${IMAGE_LOCATION}" on \
    2 "TOC filename" on \
    3 "Session to process:" ${SESSION} 2> ${TMPFILE}
    RETVAL=$?

    if [ "${RETVAL}" = "0" ]; then
        OPTIONS="";
        if [ !"`cat ${TMPFILE} | grep 1`" ]; then

            IMAGE_NAME=`cat ${TMPFILE}`
        fi

        echo -e "Executing: \n${SUDO} cdrdao read-cd --datafile ${IMAGE_NAME} \n"

        ${SUDO} cdrdao read-cd --datafile ${IMAGE_NAME} 
        echo -e "\nPress ENTER to continue!"
        read
    fi
    ;;



    6)

    ${DIALOG} --backtitle "${BACKTITLE}" \
        --title "Create Audio-CD" \
        --inputbox "Enter wave-files to create Audio-CD from. \nThese should be in 44.1kHz / 16 bit stereo format." 9 55 2>${TMPFILE}
    RETVAL=$?
    WAVEFILES=`cat ${TMPFILE}`
    echo " END" >> ${TMPFILE}
    declare -i n=1
    FILENAME=`cat ${TMPFILE} | cut -d\  -f${n}`
    echo ${FILENAME}

    while [ "${FILENAME}" != "END" ]; do
        [ ! -f ${FILENAME} ] && ${DIALOG} --backtitle "${BACKTITLE}" \
            --title "Error!" --msgbox "File ${FILENAME} does not exist. \
            \nCD-creation will fail!" 6 35 && RETVAL=1
        n=1+${n}
        FILENAME=`cat ${TMPFILE} | cut -d\  -f${n}`
    done

    if [ "${RETVAL}" = "0" ]; then
        echo -e "Executing: \n${SUDO} cdrecord ${CDRECORD_AUDIO} ${WAVEFILES} \n"
        ${SUDO} cdrecord ${CDRECORD_AUDIO} ${WAVEFILES}
        echo -e "\nPress ENTER to continue!"
        read
    fi
    ;;



    7)

    ${DIALOG} --backtitle "${BACKTITLE}" \
        --title "Create Data-CD" \
        --inputbox "Enter directory to create Data-CD from:" 8 50 ${TMPDIR} 2> ${TMPFILE}
    RETVAL=$?

    if [ "${RETVAL}" = "0" ]; then
        SOURCEDIR=`cat ${TMPFILE}`
        if [ -d ${SOURCEDIR} ]; then
            ${DIALOG} --backtitle "${BACKTITLE}" \
                --title "Create Data-CD" \
                --checklist "Options" 10 60 3 \
            1 "On-the-fly" ${FLY} \
            2 "${MAXSPEED}x speed" on \
            3 "Eject when done" ${EJECT} 2> ${TMPFILE}
            RETVAL=$?
            if [ "${RETVAL}" = "0" ]; then
                OPTIONS="";
                if [ "`cat ${TMPFILE} | grep 3`" ]; then
                    OPTIONS=${OPTIONS}" -eject"
                fi 
                if [ ! "`cat ${TMPFILE} | grep 2`" ]; then
                    CDRECORD_COMMON=${CDRECORD_COMMON}" speed=1"
                fi
                if [ "`cat ${TMPFILE} | grep 1`" ]; then
                    echo -e "Executing: \nmkisofs ${MKISOFS_COMMON} ${SOURCEDIR} |  cdrecord ${CDRECORD_COMMON} ${OPTIONS} - \n"
                    mkisofs ${MKISOFS_COMMON} ${SOURCEDIR} | cdrecord ${CDRECORD_COMMON} ${OPTIONS} -
                else
                    echo -e "Executing: \nmkisofs ${MKISOFS_COMMON} -o ${IMAGE} ${SOURCEDIR} \n"
                    mkisofs ${MKISOFS_COMMON} -o ${IMAGE} ${SOURCEDIR}
                    echo -e "Executing: \n${SUDO} cdrecord ${CDRECORD_COMMON} ${OPTIONS} ${IMAGE} \n"
                    ${SUDO} cdrecord ${CDRECORD_COMMON} ${OPTIONS} ${IMAGE}
                fi
                echo -e "\nPress ENTER to continue!"
                read
            fi
            else
            ${DIALOG} --backtitle "${BACKTITLE}" \
                --title "Error!" \
                --msgbox "The directory you supplied does not exist!" 5 50
        fi
    fi
    ;;



    8)

    ${DIALOG} --backtitle "${BACKTITLE}" \
        --title "Blank CD-RW Options" \
        --radiolist "" 13 60 7 \
    1 "Blank TOC only (quick-erase)" on \
    2 "Blank entire disc" off\
    3 "Blank track" off\
    4 "Unreserve track" off\
    5 "Blank a track tail" off\
    6 "Unclose last session" off\
    7 "Blank last session" off 2> ${TMPFILE}
    RETVAL=$?

    if [ "${RETVAL}" = "0" ]; then
        OPTIONS="blank=all";
        [ "`cat ${TMPFILE} | grep 1`" ] && OPTIONS="blank=fast"
        [ "`cat ${TMPFILE} | grep 2`" ] && OPTIONS="blank=disk"
        [ "`cat ${TMPFILE} | grep 3`" ] && OPTIONS="blank=track"
        [ "`cat ${TMPFILE} | grep 4`" ] && OPTIONS="blank=unreserve"
        [ "`cat ${TMPFILE} | grep 5`" ] && OPTIONS="blank=trtail"
        [ "`cat ${TMPFILE} | grep 6`" ] && OPTIONS="blank=unclose"
        [ "`cat ${TMPFILE} | grep 7`" ] && OPTIONS="blank=session"
        echo -e "Executing: \n${SUDO} cdrecord ${CDRECORD_COMMON} ${OPTIONS} \n"
        ${SUDO} cdrecord ${CDRECORD_COMMON} ${OPTIONS}
        echo -e "\nPress ENTER to continue!"
        read
    fi
    ;;



    9)

    MASTERRETVAL=1
    ;;


    esac

done

rm -f ${TMPFILE}
rm -f ${IMAGE}
cd "${CURRDIR}"
clear
echo "${BACKTITLE} by H.P. de Vries 1999 - enhanced by Diego Biurrun 2001"
