#!/bin/bash
#
#	TCDR
#	Version: 1.0
#	Author: Szilard Torok <kobold2@yahoo.com>
#	Sat Oct 12 02:13:02 CEST 2002
#	Motto: "Some of this works for me."
#
#####

# TCDR Copyright (C) 2002 Szilard Torok
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
# If you would like to negotiate alternate licensing terms, you may do
# so by contacting the author: Szilard Torok <kobold2@yahoo.com>


	# echo "Checking programs..."

	if [ $(basename $0) != tcdr ]	;then echo "This script should be named tcdr <mv $(basename $0) tcdr>."	;exit 1 ;fi
	if [ $(type -p mkisofs) ]	;then MKISOFS=$(type -p mkisofs)	;else echo "mkisofs not found!" ;echo "Hit a key." ;read ;fi
	if [ $(type -p cdrecord) ]	;then CDRECORD=$(type -p cdrecord)	;else echo "cdrecord not found!" ;echo "Hit a key." ;read ;fi
	if [ $(type -p cdrdao) ]	;then CDRDAO=$(type -p cdrdao)		;else echo "cdrdao not found!" ;echo "Hit a key." ;read ;fi
	if [ $(type -p cdparanoia) ]	;then CDPARANOIA=$(type -p cdparanoia)	;else echo "cdparanoia not found!" ;echo "Hit a key." ;read ;fi
	if [ $(type -p cdda2wav) ]	;then CDDA2WAV=$(type -p cdda2wav)	;else echo "cdda2wav not found!" ;echo "Hit a key." ;read ;fi
	if [ $(type -p bladeenc) ]	;then BLADEENC=$(type -p bladeenc)	;else echo "bladeenc not found!" ;echo "Hit a key." ;read ;fi
	if [ $(type -p lame) ]		;then LAME=$(type -p lame)		;else echo "lame not found!" ;echo "Hit a key." ;read ;fi
	if [ $(type -p mpg123) ]	;then MPG123=$(type -p mpg123)		;else echo "mpg123 not found!" ;echo "Hit a key." ;read ;fi
	if [ $(type -p ogg123) ]	;then OGG123=$(type -p ogg123)		;else echo "ogg123 not found!" ;echo "Hit a key." ;read ;fi
	if [ $(type -p sox) ]		;then SOX=$(type -p sox)		;else echo "sox not found!" ;echo "Hit a key." ;read ;fi
	if [ $(type -p wavp) ]		;then WAVP=$(type -p wavp)		;else echo "wavp not found!" ;echo "Hit a key." ;read ;fi
	if [ $(type -p wavr) ]		;then WAVR=$(type -p wavr)		;else echo "wavr not found!" ;echo "Hit a key." ;read ;fi
	if [ $(type -p cdir) ]		;then CDIR=$(type -p cdir)		;else echo "cdir not found!" ;echo "Hit a key." ;read ;fi
	if [ $(type -p isoinfo) ]	;then ISOINFO=$(type -p isoinfo)	;else echo "isoinfo not found!" ;echo "Hit a key." ;read ;fi
	if [ $(type -p readcd) ]	;then READCD=$(type -p readcd)		;else echo "isoinfo not found!" ;echo "Hit a key." ;read ;fi
	if [ $(type -p dialog) ]	;then DIALOG="$(type -p dialog) --backtitle TCDR_Console_Frontend_v1.0" ;else echo "dialog not found!" ;exit 1 ;fi

	# echo "Setting up variables..."

	declare -a CDROM

	declare -a CDRW

	declare -a MI

	declare -a PR
	PR[0]="/mnt/images/"
	PR[1]="img.iso"
	PR[2]="$(date +%Y-%m-%d_%H:%M:%S_Volume_ID)"
	PR[3]="you@mail.net"
	PR[4]="/mnt/images/sound/"
	PR[5]="/mnt/images/cdroot/"
	PR[6]="/dev/fd0"
	PR[7]="boot.img"
	PR[8]="boot/"
	PR[9]="boot.catalog"
	PR[10]="cdda.raw"
	PR[11]="cdda.wav"
	PR[12]="cdda.mp3"
	PR[13]="$(hostname)"

	DD="/bin/dd"
	MOUNT="/bin/mount"
	UMOUNT="/bin/umount"
	TRKNR=""
	NXTRK=""
	TOC=""
	TMPO="/tmp/tcdro.$$"
	TMP="/tmp/tcdr.$$"
	TCDRRC="/etc/tcdrrc"
	TCDRPATH="$(echo $0 | sed 's/tcdr$//')"
	NOOUTP="$1"
	CDPLAYER="$(type -p workbone) -d" || CDPLAYER="$(type -p cdcd)"
	MP3PLAYER="$(type -p mp3blaster)" || MP3PLAYER="$(type -p freeamp) ${PR[4]}*.mp3"
	MIXER="$(type -p aumix)" || MIXER="$(type -p nmixer)"


detect_scsi(){
	SCSICDNR=$(awk '{print $5}' /proc/scsi/sg/devices|wc -l|tr -d " ")
	echo "Detecting devices...  $SCSICDNR SCSI CD-ROMs found."
	[ $SCSICDNR -lt "2" ] && return 1

	declare -a SR0
	declare -a SR1

	SR0[3]="$(awk 'BEGIN{RS="\\n"} {if ( NR == 1 ) print $2","$3","$4}' /proc/scsi/sg/devices)"
	SR0[1]="$(awk 'BEGIN{RS="\\n"} {if ( NR == 1 ) print $1" "$2" "$3}' /proc/scsi/sg/device_strs)"
	SR1[3]="$(awk 'BEGIN{RS="\\n"} {if ( NR == 2 ) print $2","$3","$4}' /proc/scsi/sg/devices)"
	SR1[1]="$(awk 'BEGIN{RS="\\n"} {if ( NR == 2 ) print $1" "$2" "$3}' /proc/scsi/sg/device_strs)"

	if [ $(awk '/Can write CD-R:/{print $4}' /proc/sys/dev/cdrom/info) -eq "1" ] ;then
		CDRW[0]="/dev/$(awk '/drive name:/{print $3}' /proc/sys/dev/cdrom/info)"
		CDRW[6]="$(awk '/drive speed:/{print $3}' /proc/sys/dev/cdrom/info)"
		if [ ${CDRW[0]} == "/dev/sr0" ] ;then
			CDRW[1]="${SR0[1]}"
			CDRW[3]="${SR0[3]}"
		elif [ ${CDRW[0]} == "/dev/sr1" ] ;then
			CDRW[1]="${SR1[1]}"
			CDRW[3]="${SR1[3]}"
		fi
	elif [ $(awk '/Can write CD-R:/{print $4}' /proc/sys/dev/cdrom/info) -eq "0" ] ;then
		CDROM[0]="/dev/$(awk '/drive name:/{print $3}' /proc/sys/dev/cdrom/info)"
		CDROM[6]="$(awk '/drive speed:/{print $3}' /proc/sys/dev/cdrom/info)"
		if [ ${CDROM[0]} == "/dev/sr0" ] ;then
			CDROM[1]="${SR0[1]}"
			CDROM[3]="${SR0[3]}"
		elif [ ${CDROM[0]} == "/dev/sr1" ] ;then
			CDROM[1]="${SR1[1]}"
			CDROM[3]="${SR1[3]}"
		fi
	fi

	if [ $(awk '/Can write CD-R:/{print $5}' /proc/sys/dev/cdrom/info) -eq "1" ] ;then
		CDRW[0]="/dev/$(awk '/drive name:/{print $4}' /proc/sys/dev/cdrom/info)"
		CDRW[6]="$(awk '/drive speed:/{print $4}' /proc/sys/dev/cdrom/info)"
		if [ ${CDRW[0]} == "/dev/sr0" ] ;then
			CDRW[1]="${SR0[1]}"
			CDRW[3]="${SR0[3]}"
		elif [ ${CDRW[0]} == "/dev/sr1" ] ;then
			CDRW[1]="${SR1[1]}"
			CDRW[3]="${SR1[3]}"
		fi
	elif [ $(awk '/Can write CD-R:/{print $5}' /proc/sys/dev/cdrom/info) -eq "0" ] ;then
		CDROM[0]="/dev/$(awk '/drive name:/{print $4}' /proc/sys/dev/cdrom/info)"
		CDROM[6]="$(awk '/drive speed:/{print $4}' /proc/sys/dev/cdrom/info)"
		if [ ${CDROM[0]} == "/dev/sr0" ] ;then
			CDROM[1]="${SR0[1]}"
			CDROM[3]="${SR0[3]}"
		elif [ ${CDROM[0]} == "/dev/sr1" ] ;then
			CDROM[1]="${SR1[1]}"
			CDROM[3]="${SR1[3]}"
		fi
	fi

	grep ${CDROM[0]} /etc/fstab && CDROM[2]=$(grep ${CDROM[0]} /etc/fstab |awk '{print $2}') || CDROM[2]=$(grep /dev/$(/bin/ls -l ${CDROM[0]} |awk '{print $11}') /etc/fstab |awk '{print $2}')
	grep ${CDRW[0]} /etc/fstab && CDRW[2]=$(grep ${CDRW[0]} /etc/fstab |awk '{print $2}') || CDRW[2]=$(grep /dev/$(/bin/ls -l ${CDRW[0]} |awk '{print $11}') /etc/fstab |awk '{print $2}')
}
detect_ide(){
	[ -f /proc/ide/ide0/hda/media ] && HDA=$(cat /proc/ide/ide0/hda/media)
	[ -f /proc/ide/ide0/hdb/media ] && HDB=$(cat /proc/ide/ide0/hdb/media)
	[ -f /proc/ide/ide1/hdc/media ] && HDC=$(cat /proc/ide/ide1/hdc/media)
	[ -f /proc/ide/ide1/hdd/media ] && HDD=$(cat /proc/ide/ide1/hdd/media)
	[ -f /proc/ide/ide2/hde/media ] && HDE=$(cat /proc/ide/ide2/hde/media)
	[ -f /proc/ide/ide2/hdf/media ] && HDF=$(cat /proc/ide/ide2/hdf/media)
	[ -f /proc/ide/ide3/hdg/media ] && HDG=$(cat /proc/ide/ide3/hdg/media)
	[ -f /proc/ide/ide3/hdh/media ] && HDH=$(cat /proc/ide/ide3/hdh/media)

	[ "$HDA" == "cdrom" ] && grep "CD-ROM" /proc/ide/ide0/hda/model >/dev/null && CDROM[0]="/dev/hda" && CDROM[1]=$(cat /proc/ide/ide0/hda/model)
	[ "$HDB" == "cdrom" ] && grep "CD-ROM" /proc/ide/ide0/hdb/model >/dev/null && CDROM[0]="/dev/hdb" && CDROM[1]=$(cat /proc/ide/ide0/hdb/model)
	[ "$HDC" == "cdrom" ] && grep "CD-ROM" /proc/ide/ide1/hdc/model >/dev/null && CDROM[0]="/dev/hdc" && CDROM[1]=$(cat /proc/ide/ide1/hdc/model)
	[ "$HDD" == "cdrom" ] && grep "CD-ROM" /proc/ide/ide1/hdd/model >/dev/null && CDROM[0]="/dev/hdd" && CDROM[1]=$(cat /proc/ide/ide1/hdd/model)
	[ "$HDE" == "cdrom" ] && grep "CD-ROM" /proc/ide/ide2/hde/model >/dev/null && CDROM[0]="/dev/hde" && CDROM[1]=$(cat /proc/ide/ide2/hde/model)
	[ "$HDF" == "cdrom" ] && grep "CD-ROM" /proc/ide/ide2/hdf/model >/dev/null && CDROM[0]="/dev/hdf" && CDROM[1]=$(cat /proc/ide/ide2/hdf/model)
	[ "$HDG" == "cdrom" ] && grep "CD-ROM" /proc/ide/ide3/hdg/model >/dev/null && CDROM[0]="/dev/hdg" && CDROM[1]=$(cat /proc/ide/ide3/hdg/model)
	[ "$HDH" == "cdrom" ] && grep "CD-ROM" /proc/ide/ide3/hdh/model >/dev/null && CDROM[0]="/dev/hdh" && CDROM[1]=$(cat /proc/ide/ide3/hdh/model)

	[ "$HDA" == "cdrom" ] && grep "CD-RW" /proc/ide/ide0/hda/model >/dev/null && CDRW[0]="/dev/hda" && CDRW[1]=$(cat /proc/ide/ide0/hda/model)
	[ "$HDB" == "cdrom" ] && grep "CD-RW" /proc/ide/ide0/hdb/model >/dev/null && CDRW[0]="/dev/hdb" && CDRW[1]=$(cat /proc/ide/ide0/hdb/model)
	[ "$HDC" == "cdrom" ] && grep "CD-RW" /proc/ide/ide1/hdc/model >/dev/null && CDRW[0]="/dev/hdc" && CDRW[1]=$(cat /proc/ide/ide1/hdc/model)
	[ "$HDD" == "cdrom" ] && grep "CD-RW" /proc/ide/ide1/hdd/model >/dev/null && CDRW[0]="/dev/hdd" && CDRW[1]=$(cat /proc/ide/ide1/hdd/model)
	[ "$HDE" == "cdrom" ] && grep "CD-RW" /proc/ide/ide2/hde/model >/dev/null && CDRW[0]="/dev/hde" && CDRW[1]=$(cat /proc/ide/ide2/hde/model)
	[ "$HDF" == "cdrom" ] && grep "CD-RW" /proc/ide/ide2/hdf/model >/dev/null && CDRW[0]="/dev/hdf" && CDRW[1]=$(cat /proc/ide/ide2/hdf/model)
	[ "$HDG" == "cdrom" ] && grep "CD-RW" /proc/ide/ide3/hdg/model >/dev/null && CDRW[0]="/dev/hdg" && CDRW[1]=$(cat /proc/ide/ide3/hdg/model)
	[ "$HDH" == "cdrom" ] && grep "CD-RW" /proc/ide/ide3/hdh/model >/dev/null && CDRW[0]="/dev/hdh" && CDRW[1]=$(cat /proc/ide/ide3/hdh/model)

	if [ -f /proc/sys/dev/cdrom/info ]
	then
		CD1=$(awk '/drive name:/{print $3}' /proc/sys/dev/cdrom/info)
		if [ $(awk '/Can write CD-R:/{print $4}' /proc/sys/dev/cdrom/info) -eq 1 ]
			then	CDRWL="/dev/$CD1"
			else	CDROM[0]="/dev/$CD1"
		fi
		if [ $(awk '/Can write CD-RW:/{print $4}' /proc/sys/dev/cdrom/info) -eq 1 ]
			then	CDRWL="/dev/$CD1"
			else	CDROM[0]="/dev/$CD1"
		fi

		CD1=$(awk '/drive name:/{print $4}' /proc/sys/dev/cdrom/info)
		if [ $(awk '/Can write CD-R:/{print $5}' /proc/sys/dev/cdrom/info) -eq 1 ]
			then	CDRWL="/dev/$CD1"
			else	CDROM[0]="/dev/$CD1"
		fi
		if [ $(awk '/Can write CD-RW:/{print $5}' /proc/sys/dev/cdrom/info) -eq 1 ]
			then	CDRWL="/dev/$CD1"
			else	CDROM[0]="/dev/$CD1"
		fi
	fi

	if [ -L $CDRWL ]
		then	CDRW[0]="/dev/$(/bin/ls -l "$CDRWL"|awk '{print $11}')" && CDRW[2]=$(grep "${CDRW[0]}" /etc/fstab|awk '{print $2}')
		else	CDRW[0]="$CDRWL" && CDRW[2]=$(grep "${CDRW[0]}" /etc/fstab|awk '{print $2}')
	fi

	if [ -L /dev/cdrom ]
		then	CDROM[2]=$(grep "/dev/cdrom" /etc/fstab|awk '{print $2}')
		else	CDROM[2]=$(grep "$CDROM" /etc/fstab|awk '{print $2}')
	fi

	CDRW[3]=$($CDRECORD -scanbus 2>/dev/null |grep $(echo "${CDRW[1]}" | awk '{print $3}')|awk '{print $1}')
	CDROM[3]=$($CDRECORD -scanbus 2>/dev/null |grep $(echo "${CDROM[1]}" | awk '{print $3}')|awk '{print $1}')
}

di(){
	eject -t ${CDRW[0]}
	$CDRDAO disk-info --device "$1" --driver generic-mmc 2>$TMPO
	MI[0]="$(awk 'BEGIN{FS=": "}/CD-RW                :/{print $2}' $TMPO)"
	MI[1]="$(awk 'BEGIN{FS=" " }/Total Capacity       :/{print $5}' $TMPO|tr -d "(")"
	MI[2]="$(awk 'BEGIN{FS=": "}/CD-R medium          :/{print $2}' $TMPO)"
	MI[3]="$(awk 'BEGIN{FS=" " }/Recording Speed      :/{print $6}' $TMPO|tr -d "X")"
	MI[4]="$(awk 'BEGIN{FS=": "}/CD-R empty           :/{print $2}' $TMPO)"
	MI[5]="$(awk 'BEGIN{FS=": "}/Toc Type             :/{print $2}' $TMPO)"
	MI[6]="$(awk 'BEGIN{FS=": "}/Sessions             :/{print $2}' $TMPO)"
	MI[7]="$(awk 'BEGIN{FS=": "}/Last Track           :/{print $2}' $TMPO)"
	MI[8]="$(awk 'BEGIN{FS=": "}/Appendable           :/{print $2}' $TMPO)"
	MI[9]="$(awk 'BEGIN{FS=" " }/Start of last session:/{print $5}' $TMPO)"
	MI[10]="$(awk 'BEGIN{FS=" "}/Start of new session :/{print $6}' $TMPO)"
	MI[11]="$(awk 'BEGIN{FS=" "}/Remaining Capacity   :/{print $5}' $TMPO|tr -d "(")"
	[ -f ${PR[0]}${PR[1]} ] && MI[12]="$($ISOINFO -i ${PR[0]}${PR[1]} -d|awk 'BEGIN{FS=": "}/Volume size is:/{print $2}')"
}
is_r(){
	[ ${MI[0]} == "no" ] 2>/dev/null
}
is_rw(){
	[ ${MI[0]} == "yes" ] 2>/dev/null
}
is_blank(){
	[ ${MI[4]} == "yes" ] 2>/dev/null
}
is_app(){
	[ "${MI[8]}" == "yes" ] 2>/dev/null
}
is_r_and_blank(){
	if is_r && is_blank
		then	return 0
		else	return 1
	fi
}
is_rw_and_blank(){
	if is_rw && is_blank
		then	return 0
		else	return 1
	fi
}
is_app_and_r(){
	if is_app && is_r
		then	return 0
		else	return 1
	fi
}
is_app_and_rw(){
	if is_app && is_rw
		then	return 0
		else	return 1
	fi
}
is_r_and_full(){
	if is_r && ! is_blank
		then	return 0
		else	return 1
	fi
}
is_rw_and_full(){
	if is_rw && ! is_blank
		then	return 0
		else	return 1
	fi
}
fit2blank(){
	[ -f ${PR[0]}${PR[1]} ] || return 0
	[ ${MI[1]} -gt ${MI[12]} ] 2>/dev/null && return 0 || return 1
}
fit2multi(){
	[ -f ${PR[0]}${PR[1]} ] || return 0
	[ ${MI[11]} -gt ${MI[12]} ] 2>/dev/null && return 0 || return 1
}
fit_if_blanked(){
	[ -f ${PR[0]}${PR[1]} ] || return 0
	if	is_rw
	then
		if [ -z "${MI[1]}" ] ;then
			MI[1]="332800"
		fi
		FREESPACE="$(( ${MI[1]} - ${MI[12]} ))"
		[ $FREESPACE -gt 0 ] 2>/dev/null && return 0 || return 1
	fi
}
fit_if_unclose(){
	[ -f ${PR[0]}${PR[1]} ] || return 0
	if [ "${MI[1]}" = "" ] ;then
		MI[1]="332800"
	fi
	CDS="$($ISOINFO -i ${CDRW[0]} -d |awk 'BEGIN{FS=": "}/Volume size is:/{print $2}')"
	IMGS="$($ISOINFO -i ${PR[0]}${PR[1]} -d |awk 'BEGIN{FS=": "}/Volume size is:/{print $2}')"
	RESULT="$(( ${MI[1]} - $CDS - $IMGS ))"
	[ $RESULT -gt 0 ] && return 0 || return 1
}
is_audio(){
	( $CDIR -d "$1" |grep -q "nodisc" ) && return 1
	( $CDIR -d "$1" |grep -qvi "DATA" ) && return 0
}
is_data(){
	if $CDIR -d "$1" |grep -q "datadisc"
		then return 0
		else return 1
	fi
}
is_mix(){
	if $CDIR -d "$1" |grep -q "DATA"
		then	return 0
		else	return 1
	fi
}
ckspace(){
	di "${CDRW[3]}"

	case "$1" in
		a)	if is_rw ;then
				if ! is_blank ; then
					$DIALOG --beep --yesno "Medium about to be burned is not empty.  Blank it?" 6 65 && blankfast || return 1
					return 0
				fi
			elif is_r ;then
				if ! is_blank ; then
					$DIALOG --beep --yesno "Medium about to be burned is a used CD-R.  Insert a blank one?" 6 75 && ejectr || return 1
				fi
			fi
		;;
		*)	:
		;;
	esac

	if is_r ;then
		if is_blank ;then
			if fit2blank ;then
				echo 0 >$TMP
			else
				echo 1 >$TMP
			fi
		else
			if is_app ;then
				if fit2multi ;then
					echo 0 >$TMP
				else
					echo 2 >$TMP
				fi
			else
				echo 3 >$TMP
			fi
		fi
	elif is_rw ;then
		if is_blank ;then
			if fit2blank ;then
				echo 0 >$TMP
			else
				echo 4 >$TMP
			fi
		else
			if is_app ;then
				if fit2multi ;then
					echo 0 >$TMP
				else
					echo 5 >$TMP
				fi
			else
				if fit_if_unclose ;then
					echo 6 >$TMP
				elif fit_if_blanked ;then
					echo 7 >$TMP
				else
					echo 8 >$TMP
				fi
			fi
		fi
	fi

	case $(cat $TMP) in

		"0")	return 0
			;;
		"1")	$DIALOG --yesno	"The medium is a blank CD-R, but ${PR[0]}${PR[1]} is too large.  Insert a larger capacity medium." 7 65 && return 1
			;;
		"2")	$DIALOG --yesno	"The medium is an appendable CD-R, but ${PR[0]}${PR[1]} is too large." 7 65 && return 1
			;;
		"3")	$DIALOG --yesno	"The medium is a written-and-closed CD-R (read-only)." 7 65 && return 1
			;;
		"4")	$DIALOG --yesno	"The medium is a blank CD-RW, but ${PR[0]}${PR[1]} is too large.  Insert a larger capacity medium." 7 65 && return 1
			;;
		"5")	$DIALOG --menu \
" The medium is an appendable CD-RW, but ${PR[0]}${PR[1]} is\n\
 too large to fit.  You could free up some space by deleting\n\
 the last track or session.  I recommend to blank or to use a\n\
 blank/appendable medium." 14 50 4\
				"T"	"  Track                       "\
				"S"	"  Session       (last)        "\
				"B"	"  Blank the whole disk        "\
				"I"	"  Insert another medium       "\
				"C"	"  Continue anyway             "\
				2>$TMP || return 1
				case $(cat $TMP) in
					"T")	blanktrack || return 1
						;;
					"S")	blanklastsession || return 1
						;;
					"B")	blankfast || return 1
						;;
					"I")	ejectr ${CDRW[0]} || return 1
						ckspace
						;;
					"C")	return 0
						;;
				esac
			;;
		"6")	$DIALOG --menu \
" The medium is a CLOSED CD-RW, but ${PR[0]}${PR[1]} would\n\
 fit after blanking or unclosing.\n\
 NOTE: unclosing never worked for me, but if you want to\n\
 try it, this is what will happen: the last session will\n\
 be (hopefully) unclosed and 'Multi-session' menu will\n\
 be started. You should then choose:\n\
 Session > Yes > Rewrite it.\n\n\
 I recommend to blank or to use a blank/appendable medium." 19 65 4\
				"B "	"  Blank fast                    "\
				"U "	"  Unclose                       "\
				"I "	"  Insert another medium         "\
				"C "	"  Continue anyway               "\
				2>$TMP || return 1
				case $(cat $TMP) in
					"B ")	blankfast || return 1
						;;
					"U ")	blankunclose || return 1
						msd2cd
						;;
					"I ")	ejectr ${CDRW[0]} || return 1
						ckspace
						;;
					"C ")	return 0
						;;
				esac
			;;
		"7")	$DIALOG --yesno	"The medium is a CLOSED CD-RW, but ${PR[0]}${PR[1]} would fit if blanked. Do it?" 8 45 && blankfast || return 1
			;;
		"8")	$DIALOG --yesno	"The medium is a WRITTEN-AND-CLOSED CD-RW and ${PR[0]}${PR[1]} would be too large even after blanking.  Would you like to insert a larger capacity a medium?" 8 65 && ejectr || return 1
			;;
	esac
}

mkiso(){
	echo "$MKISOFS -JlLrV ${PR[2]} -P ${PR[3]} -p ${PR[3]} -sysid ${PR[13]} -o ${PR[0]}${PR[1]} ${PR[5]}" > $TMPO 2>&1
	($MKISOFS -JlLrV ${PR[2]} -P ${PR[3]} -p ${PR[3]} -sysid ${PR[13]} -o ${PR[0]}${PR[1]} ${PR[5]} >> $TMPO 2>&1 && echo -n ) &
	tailbox $MKISOFS
}
msmkiso(){
	[ "$1" = "c" ] && ckspace || return 1
	NXTRK=$($CDRECORD -msinfo dev=${CDRW[3]})
	echo "$MKISOFS -rJlL -o ${PR[0]}${PR[1]} -C $NXTRK -M ${CDRW[0]} ${PR[5]}" > $TMPO 2>&1
	($MKISOFS -rJlL -o ${PR[0]}${PR[1]} -C $NXTRK -M ${CDRW[0]} ${PR[5]} >> $TMPO 2>&1 && echo -n ) &
	tailbox $MKISOFS
}
cdrec(){
	ckspace cdrec || return 1
	if $DIALOG --yesno "Test (dummy) mode run?" 6 40 ;then
		echo "$CDRECORD -dummy -v gracetime=3 speed=${MI[3]} dev=${CDRW[3]} driver=mmc_cdr driveropts=burnfree -eject $1 ${PR[0]}${PR[1]}" > $TMPO 2>&1
		($CDRECORD -dummy -v gracetime=3 speed=${MI[3]} dev=${CDRW[3]} driver=mmc_cdr driveropts=burnfree -eject $1 ${PR[0]}${PR[1]} >> $TMPO 2>&1 && echo -n ) &
		tailbox $CDRECORD
	else
		echo "$CDRECORD -v gracetime=3 speed=${MI[3]} dev=${CDRW[3]} driver=mmc_cdr driveropts=burnfree -eject $1 ${PR[0]}${PR[1]}" > $TMPO 2>&1
		($CDRECORD -v gracetime=3 speed=${MI[3]} dev=${CDRW[3]} driver=mmc_cdr driveropts=burnfree -eject $1 ${PR[0]}${PR[1]} >> $TMPO 2>&1 && echo -n ) &
		tailbox $CDRECORD
	fi
}
rtocdao(){
	$DIALOG --cr-wrap --infobox "Extracting TOC from ${CDROM[0]} to ${PR[4]}${PR[10]}.toc.\nPlease wait..." 6 70
	$CDRDAO read-toc --device ${CDROM[3]} --driver generic-mmc --datafile ${PR[4]}$1 $TMP.toc > $TMPO 2>&1
	$CDRDAO show-toc $TMP.toc > $TMPO 2>&1 && outp
	cp $TMP.toc ${PR[4]}$1.toc 2>/dev/null
}
dao(){
	ckspace "$3" || return 1
	if $DIALOG --yesno "Test (dummy) mode run?" 6 40 ;then
		waitm
		echo "$CDRDAO simulate --device ${CDRW[3]} --driver generic-mmc --speed ${MI[3]} --buffers 240 $1 --eject -n -v 2 $2" > $TMPO
		$CDRDAO simulate --device ${CDRW[3]} --driver generic-mmc --speed ${MI[3]} --buffers 240 $1 --eject -n -v 2 $2 >> $TMPO 2>&1 && outp
	else
		waitm
		echo "$CDRDAO write --device ${CDRW[3]} --driver generic-mmc --speed ${MI[3]} --buffers 240 $1 --eject -n -v 2 $2" > $TMPO
		$CDRDAO write --device ${CDRW[3]} --driver generic-mmc --speed ${MI[3]} --buffers 240 $1 --eject -n -v 2 $2 >> $TMPO 2>&1 && outp
	fi
}
daocopy(){
	ckspace "$3" || return 1
	if $DIALOG --yesno "Test (dummy) mode run?" 6 40 ;then
		waitm
		echo "$CDRDAO copy --simulate --source-device ${CDROM[3]} --source-driver generic-mmc --device ${CDRW[3]} --driver generic-mmc --speed ${MI[3]} --buffers 240 --eject -n -v 2 $1" > $TMPO
		$CDRDAO copy --simulate --source-device ${CDROM[3]} --source-driver generic-mmc --device ${CDRW[3]} --driver generic-mmc --speed ${MI[3]} --buffers 240 --eject -n -v 2 $1 >> $TMPO 2>&1 && outp
	else
		waitm
		echo "$CDRDAO copy --source-device ${CDROM[3]} --source-driver generic-mmc --device ${CDRW[3]} --driver generic-mmc --speed ${MI[3]} --buffers 240 --eject -n -v 2 $1" > $TMPO
		$CDRDAO copy --source-device ${CDROM[3]} --source-driver generic-mmc --device ${CDRW[3]} --driver generic-mmc --speed ${MI[3]} --buffers 240 --eject -n -v 2 $1 >> $TMPO 2>&1 && outp
	fi
}

dir2i(){
	if [ -f ${PR[0]}${PR[1]} ] ;then
		$DIALOG --menu\
			"${PR[0]}${PR[1]} exists." 9 65 2\
			"1" "Use it"\
			"2" "Overwrite it"\
			2>$TMP || return 1
		case $(cat $TMP) in
			"1" )	return 0
				;;
			"2" )	inpvid || return 1
				mkiso
				;;
		esac
	else
		inpvid || return 1
		mkiso
	fi
}
dir2i2cd(){
	dir2i || return 1
	cdrec
}

cd2i_dd(){
	if [ -f ${PR[0]}${PR[1]} ] ;then
		$DIALOG --menu\
			"${PR[0]}${PR[1]} exists." 9 65 2\
			"1" "Use it"\
			"2" "Rewrite it"\
			2>$TMP || return 1
		case $(cat $TMP) in
			"1" )	return 0
				;;
			"2" )	($DD if=${CDROM[0]} of=${PR[0]}${PR[1]} > $TMPO 2>&1 && echo -n ) &
				tailbox $DD
				;;
		esac
	else
		($DD if=${CDROM[0]} of=${PR[0]}${PR[1]} > $TMPO 2>&1 && echo -n ) &
		tailbox $DD
	fi
}
cd2i_rcd(){
	if [ -f ${PR[0]}${PR[1]} ] ;then
		$DIALOG --menu\
			"${PR[0]}${PR[1]} exists." 9 65 2\
			"1" "Use it"\
			"2" "Rewrite it"\
			2>$TMP || return 1
		case $(cat $TMP) in
			"1" )	return 0
				;;
			"2" )	($READCD dev=${CDROM[3]} f=${PR[0]}${PR[1]} > $TMPO 2>&1 && echo -n ) &
				tailbox $READCD
				;;
		esac
	else
		($READCD dev=${CDROM[3]} f=${PR[0]}${PR[1]} > $TMPO 2>&1 && echo -n ) &
		tailbox $READCD
	fi
}
i2dcd(){
	cdrec
}
dcd2cd(){
	daocopy
}
dcd2cdr(){
	daocopy --on-the-fly
}

mixcd2cd(){
	[ "$NOOUTP" -eq "1" ] 2>/dev/null || $DIALOG --yesno \
" CD Extra is a multi session CD with audio *and* data tracks.  The place for audio tracks is in \
${PR[4]} in .raw or .wav format and the contents of the data track should be in ${PR[5]}.  Writing takes two sessions; \
audio goes first (don't take out the CD from the tray after the first eject).  The medium used must be blank, or appendable.  \
The medium will remain appendable for later sessions.  To mount the data track use <mount ... -tiso9660 -osession=2>." 12 70 || return 1
	cd ${PR[4]}
	eject -t ${CDRW[0]}
	mktoc *.wav || mktoc *.raw || return 1
	dao --multi $TMP.toc
	eject -t ${CDRW[0]}
	NXTRK=$($CDRECORD -msinfo dev=${CDRW[3]})
	echo "$MKISOFS -JlLrV ${PR[2]} -P ${PR[3]} -p ${PR[3]} -sysid ${PR[13]} -o ${PR[0]}${PR[1]} -C $NXTRK ${PR[5]}" 2>$TMPO
	($MKISOFS -JlLrV ${PR[2]} -P ${PR[3]} -p ${PR[3]} -sysid ${PR[13]} -o ${PR[0]}${PR[1]} -C $NXTRK ${PR[5]} 2>>$TMPO && echo -n ) &
	tailbox $MKISOFS
	cdrec -multi || return 1
}

msd2cd(){
	[ "$NOOUTP" -eq "1" ] 2>/dev/null || $DIALOG --yesno \
" Multi session CDs contain data tracks only.  The tracks are written\n\
 one at a time (one at a session), but all the data is accessible\n\
 after a normal mount.\n\
 To burn a session, there must be either some files in\n\
 ${PR[5]} or an existing ISO image at ${PR[0]}${PR[1]}.\n\
 An existing ISO image may be used for the first session *only*.\n\
 The medium must be blank, or appendable.  If you are appending a new\n\
 session to an appendable mixed mode CD (CD Extra), the mounting\n\
 command has the form of <mount ... -tiso9660 -osession=2>.  Medium\n\
 will remain appendable for later sessions." 15 73 || return 1

	if [ -f ${PR[0]}${PR[1]} ] ;then
		TRKNR=$(( $( $CDIR -d ${CDRW[0]}|awk '{print $2}' |tail -1)+1 ))
		if [ "$TRKNR" -eq "1" ] ;then
			$DIALOG --radiolist "Existing ISO image ${PR[0]}${PR[1]} found." 9 65 2 1 "Use it" off 2 "Rewrite it" on 2>$TMP
			case $(cat $TMP) in
				"1" )	cdrec -multi || return 1;;
				"2" )	mkiso c || return 1
					cdrec -multi || return 1;;
			esac
		elif [ "$TRKNR" -gt "1" ] ;then
			$DIALOG --radiolist "Existing ISO image ${PR[0]}${PR[1]} found." 9 65 2 1 "Use it" off 2 "Rewrite it" on 2>$TMP
			case $(cat $TMP) in
				"1" )	cdrec -multi || return 1;;
				"2" )	msmkiso c || return 1
					cdrec -multi || return 1;;
			esac
		fi
	else
		TRKNR=$(( $( $CDIR -d ${CDRW[0]}|awk '{print $2}' |tail -1)+1 ))
		if [ "$TRKNR" -eq "1" ] ;then
			mkiso c || return 1
			cdrec -multi || return 1
		elif [ "$TRKNR" -gt "1" ] ;then
			msmkiso c || return 1
			cdrec -multi || return 1
		fi
	fi
}
msdclose(){
	msmkiso c || return 1
	cdrec || return 1
}
msdcdinfo(){
	($CDRECORD -toc dev=${CDRW[3]} >$TMPO && echo -n ) &
	tailbox $CDRECORD
}

bootcd(){
	$DIALOG --yesno "Making a bootable CD takes two runs of mkisofs.  First, a regular ISO image is created from \
${PR[5]}.  After that, an image file of a bootable floppy disk is inserted.  That is what will be burned onto the CD.  It is \
important to set up a generic CD-ROM driver on the floppy.  If you don't have a floppy-image, but do have a bootable floppy, \
choose the second menupoint first, or download an image from the Internet and place it in ${PR[5]}${PR[8]}${PR[7]}.  This I \
tested with a DOS boot image only." 13 70 || return 1
	dir2i || return 1
	$DIALOG --inputbox "Enter boot image file name relative to ${PR[5]}${PR[8]}:" 8 65 "${PR[7]}" 2>$TMPO || return 1
	PR[7]=$(cat $TMPO)
	echo "$MKISOFS -JlLrV ${PR[2]} -P ${PR[3]} -p ${PR[3]} -sysid ${PR[13]} -b ${PR[8]}${PR[7]} -c ${PR[8]}${PR[9]} -o ${PR[0]}${PR[1]} ${PR[5]}" > $TMPO 2>&1
	($MKISOFS -JlLrV ${PR[2]} -P ${PR[3]} -p ${PR[3]} -sysid ${PR[13]} -b ${PR[8]}${PR[7]} -c ${PR[8]}${PR[9]} -o ${PR[0]}${PR[1]} ${PR[5]} >> $TMPO 2>&1 && echo -n ) &
	tailbox $MKISOFS
	cdrec
}
fd2bootimg(){
	[ -d ${PR[5]}${PR[8]} ] || mkdir ${PR[5]}${PR[8]}
	$DIALOG --yesno "          Insert a bootable 1.44 floppy disk (with a\n           generic CD-ROM driver) into <${PR[6]}>." 6 65 || return 1
	($DD if=${PR[6]} of=${PR[5]}${PR[8]}${PR[7]} bs=10k count=144 > $TMPO 2>&1 && echo -n ) &
	tailbox $DD
}

acd2acd_t(){
	cd ${PR[4]}
	is_audio ${CDROM[0]} || ejecta || return 1
	daocopy " " " " "a"
}
acd2acd(){
	is_audio ${CDROM[0]} || ejecta || return 1
	daocopy --on-the-fly " " "a"
}
acd2acd_cdparanoia(){
	$CDPARANOIA -q -R -d ${CDROM[0]} 1-
	rtocdao ${PR[10]}
	dao " " ${PR[10]}.toc "a"
}
acd2acd_cdda2wav(){
	echo "$CDDA2WAV -I generic_scsi -s -x -b 16 -r 44100 -O raw -C guess -E big -D ${CDROM[3]} -t 1+$NUMTRACK ${PR[4]}${PR[10]}" > $TMPO 2>&1
	$CDDA2WAV -I generic_scsi -s -x -b 16 -r 44100 -O raw -C guess -E big -D ${CDROM[3]} -t 1+$NUMTRACK ${PR[4]}${PR[10]} >> $TMPO 2>&1 && outp
	rtocdao ${PR[10]}
	dao " " ${PR[10]}.toc "a"
}
acd2wavs_cdparanoia(){
	cd ${PR[4]}
	is_audio ${CDROM[0]} || ejecta || return 1
	infocd || return 1
	$DIALOG --cr-wrap --infobox "Ripping from ${CDROM[0]} to ${PR[4]}track*.wav.\n                      Please wait..." 6 70
	$CDPARANOIA -B -q -w -d ${CDROM[0]} 1- wav
}
acd2wavs_cdda2wav(){
	cd ${PR[4]}
	is_audio ${CDROM[0]} || ejecta || return 1
	infocd || return 1
	$DIALOG --cr-wrap --infobox "Ripping from ${CDROM[0]} to ${PR[4]}track*.wav.\n                      Please wait..." 6 70
	$CDDA2WAV -q -B -I generic_scsi -s -x -b 16 -r 44100 -O wav -D ${CDROM[3]} -H track
}
acd2raw_cdparanoia(){
	$CDPARANOIA -q -R -d ${CDROM[0]} 1-
	rtocdao ${PR[10]}
}
acd2raw_cdda2wav(){
	echo "$CDDA2WAV -I generic_scsi -s -x -b 16 -r 44100 -O raw -C guess -E big -D ${CDROM[3]} -t 1+$NUMTRACK ${PR[4]}${PR[10]}" > $TMPO 2>&1
	$CDDA2WAV -I generic_scsi -s -x -b 16 -r 44100 -O raw -C guess -E big -D ${CDROM[3]} -t 1+$NUMTRACK ${PR[4]}${PR[10]} >> $TMPO 2>&1 && outp
	rtocdao ${PR[10]}
}
acd2wav_cdparanoia(){
	$CDPARANOIA -q -w -d ${CDROM[0]} 1-
	rtocdao ${PR[11]}
}
acd2wav_cdda2wav(){
	echo "$CDDA2WAV -I generic_scsi -s -x -b 16 -r 44100 -O wav -D ${CDROM[3]} -t 1+$NUMTRACK ${PR[4]}${PR[11]}" > $TMPO 2>&1
	$CDDA2WAV -I generic_scsi -s -x -b 16 -r 44100 -O wav -D ${CDROM[3]} -t 1+$NUMTRACK ${PR[4]}${PR[11]} >> $TMPO 2>&1 && outp
	rtocdao ${PR[11]}
}
acd2mp3_bladeenc(){
	if [ ! -z $CDPARANOIA ] ;then
		acd2wavs_cdparanoia
	elif [ ! -z $CDDA2WAV ] ;then
		acd2wavs_cdda2wav
	fi
	$DIALOG --cr-wrap --infobox "Converting ${PR[4]}track*.wav into ${PR[4]}track*.mp3.  Please wait..." 6 65
	echo "$BLADEENC -192 -progress=5 track*.wav" > $TMPO 2>&1
	$BLADEENC -192 -progress=5 track*.wav >> $TMPO 2>&1 && outp
}
acd2mp3_lame(){
	if [ ! -z $CDPARANOIA ] ;then
		acd2wavs_cdparanoia
	elif [ ! -z $CDDA2WAV ] ;then
		acd2wavs_cdda2wav
	fi
	$DIALOG --cr-wrap --infobox "Converting ${PR[4]}track*.wav into ${PR[4]}track*.mp3.  Please wait..." 6 65
	echo "$LAME -S --preset cd track*.wav" > $TMPO 2>&1
	(for i in track*.wav ;do
		$LAME -S --preset cd $i $i.mp3
	done) >> $TMPO 2>&1 && outp
}

raw2cd(){
	cd ${PR[4]}
	if ! ls ${PR[4]}*.raw > /dev/null 2>&1 ;then
		$DIALOG --msgbox "No .raw files found in ${PR[4]}" 6 65
		return 1
	fi
	if [ -r ${PR[4]}*.raw.toc ]
	then
		TOC=$(/bin/ls ${PR[4]}*.raw.toc)
		if ! $DIALOG --menu\
			"TOC file $TOC found." 11 65 3\
			"1"	" View it          "\
			"2"	" Use it           "\
			"3"	" Create a new one "\
			2> $TMP
			then	return 1
		fi
		case $(cat $TMP) in
			"1")	$DIALOG --textbox "$TOC" 22 65
				raw2cd
				;;
			"2")	dao " " "$TOC"
				;;
			"3")	mktoc *.raw
				dao " " $TMP.toc
				;;
		esac
	else
		mktoc *.raw
		dao " " $TMP.toc "a" || return 1
	fi
}
raw2wav(){
	cd ${PR[4]}
	if ! ls ${PR[4]}*.raw > /dev/null 2>&1 ;then
		$DIALOG --msgbox "No .raw files found in ${PR[4]}" 6 65
		return 1
	fi
	$DIALOG --cr-wrap --infobox "Converting ${PR[4]}*.raw into ${PR[4]} .wav.  Wait..." 5 77
	rm -f $TMPO
	(for i in ${PR[4]}*.raw ;do
		echo "$SOX -V -t raw -s -w -c2 -r 44100 -x  "$i" "$i".wav" >> $TMPO 2>&1
		$SOX -V -t raw -s -w -c2 -r 44100 -x  "$i" "$i".wav >> $TMPO 2>&1
	done && echo -n ) &
	tailbox $SOX
}
raw2mp3_bladeenc(){
	echo "$BLADEENC -192 -progress=5 -rawbyteorder=BIG *.raw" > $TMPO 2>&1
	$BLADEENC -192 -progress=5 -rawbyteorder=BIG *.raw >> $TMPO 2>&1 && outp
}
raw2mp3_lame(){
	echo "$LAME -S -r -s 44.1 -m j --preset cd *.raw" > $TMPO 2>&1
	(for i in *.raw ;do
		$LAME -S -r -s 44.1 -m j --preset cd $i
	done) >> $TMPO 2>&1 && outp
}
rawpl(){
	cd ${PR[4]}
	[ -z $SOXPID ] || kill -9 $SOXPID
	if ! ls ${PR[4]}*.raw > /dev/null 2>&1 ;then
		$DIALOG --msgbox "No .raw files found in ${PR[4]}" 6 65
		return 1
	fi
	/bin/ls -1 *.raw |awk '{print NR " " $1}' >$TMPO
	$DIALOG --menu "Select a raw file to play" 14 50 7 $(cat $TMPO) 2>$TMP || return 1
	FILE=$(awk '/'^$(cat $TMP)' /{print $2}' $TMPO)
	$SOX -t raw -s -w -c2 -r 44100 -x $FILE -t ossdsp -w -s /dev/dsp &
	SOXPID="$!"
}
rawrec(){
	$DIALOG --cr-wrap --infobox "Recording from /dev/dsp to ${PR[4]}rec.raw\n           (44100 Hz/16 bit/2 channel).\n\n          Hit Ctrl-C to stop recording." 8 60
	$SOX -V -t ossdsp -w -s /dev/dsp -t raw -s -w -c2 -r 44100 -x ${PR[4]}rec.raw > $TMPO 2>&1 && outp
}

wav2cd(){
	cd ${PR[4]}
	if ! ls ${PR[4]}*.wav > /dev/null 2>&1 ;then
		$DIALOG --msgbox "No .wav files found in ${PR[4]}" 6 65
		return 1
	fi
	if [ -r ${PR[4]}*.wav.toc ]
	then
		TOC=$(/bin/ls ${PR[4]}*.wav.toc)
		if ! $DIALOG --menu\
			"TOC file $TOC found." 11 65 3\
			"1"	" View it          "\
			"2"	" Use it           "\
			"3"	" Create a new one "\
			2> $TMP
			then	return 1
		fi
		case $(cat $TMP) in
			"1")	$DIALOG --textbox "$TOC" 22 65
				wav2cd
				;;
			"2")	dao " " "$TOC"
				;;
			"3")	mktoc *.wav
				dao " " $TMP.toc
				;;
		esac
	else
		mktoc *.wav
		dao " " $TMP.toc "a" || return 1
	fi
}
wav2raw(){
	cd ${PR[4]}
	if ! ls ${PR[4]}*.wav > /dev/null 2>&1 ;then
		$DIALOG --msgbox "No .wav files found in ${PR[4]}" 6 65
		return 1
	fi
	$DIALOG --cr-wrap --infobox "Converting ${PR[4]}*.wav into ${PR[4]} .raw.  Wait..." 5 77
	rm -f $TMPO
	(for i in ${PR[4]}*.wav ;do
		echo "$SOX -V -t wav "$i" -t raw -s -w -c2 -r 44100 -x "$i".raw" >> $TMPO 2>&1
		$SOX -V -t wav "$i" -t raw -s -w -c2 -r 44100 -x "$i".raw >> $TMPO 2>&1
	done && echo -n ) &
	tailbox $SOX
}
wav2mp3_bladeenc(){
	echo "$BLADEENC -192 -progress=5 *.wav" > $TMPO 2>&1
	$BLADEENC -192 -progress=5 *.wav >> $TMPO 2>&1 && outp
}
wav2mp3_lame(){
	echo "$LAME -S --preset cd *.wav" > $TMPO 2>&1
	(for i in *.wav ;do
		$LAME -S --preset cd $i $i.mp3
	done) >> $TMPO 2>&1 && outp
}
wavpl_wavp(){
	$WAVP $FILE > /dev/null 2>&1 &
	SOXPID="$!"
}
wavpl_sox(){
	$SOX -t wav $FILE -t ossdsp -w -s /dev/dsp &
	SOXPID="$!"
}
wavrec_wavr(){
	$WAVR -f ${PR[4]}rec.wav -r 44100 -c 2 -d 16 -s m > $TMPO 2>&1 && outp
}
wavrec_sox(){
	$SOX -V -t ossdsp -w -s /dev/dsp -t wav -c2 -r 44100 -s ${PR[4]}rec.wav > $TMPO 2>&1 && outp
}

mp32cd(){
	cd ${PR[4]}
	if ! ls ${PR[4]}*.mp3 > /dev/null 2>&1 ;then
		$DIALOG --msgbox "No .mp3 files found in ${PR[4]}" 6 65
		return 1
	fi
	if [ ! -z $MPG123 ] ;then
		mp32wav_mpg123 || return 1
	elif [ ! -z $LAME ] ;then
		mp32wav_lame || return 1
	fi
	mktoc *.wav
	dao " " $TMP.toc "a"
}
mp32raw_mpg123(){
	(for i in *.mp3 ;do
		echo "( $MPG123 -s -w - "$i" |$SOX -V -t cdr - "$i".raw )" >> $TMPO 2>&1
		( $MPG123 -s -w - "$i" |$SOX -V -t cdr - "$i".raw ) >> $TMPO 2>&1
	done && echo -n ) &
	tailbox $MPG123
}
mp32raw_lame(){
	(for i in *.mp3 ;do
		echo "$LAME -S --decode -t -x $i $i.raw" >> $TMPO 2>&1
		$LAME -S --decode -t -x $i $i.raw >> $TMPO 2>&1
	done && echo -n ) &
	tailbox $MPG123
}
mp32wav_mpg123(){
	(for i in *.mp3 ;do
		echo "$MPG123 -w "$i".wav "$i"" >> $TMPO 2>&1
		$MPG123 -w "$i".wav "$i" >> $TMPO 2>&1
	done && echo -n ) &
	tailbox $MPG123
}
mp32wav_lame(){
	echo "$LAME -S --decode $i" > $TMPO 2>&1
	(for i in *.mp3 ;do
		$LAME -S --decode "$i" >> $TMPO 2>&1
	done && echo -n ) &
	tailbox $MPG123
}
ogg2cd(){
	cd ${PR[4]}
	rm -f ${PR[4]}*.wav
	if [ ! -z $OGG123 ] ;then
		ogg2wav_ogg123 || return 1
	elif [ ! -z $LAME ] ;then
		ogg2wav_lame || return 1
	fi
	mktoc *.wav
	dao " " $TMP.toc "a"
}
ogg2raw_lame(){
	(for i in *.ogg ;do
		echo "$LAME -S --decode -t -x $i $i.raw" >> $TMPO 2>&1
		$LAME -S --decode -t -x $i $i.raw >> $TMPO 2>&1
	done && echo -n ) &
	tailbox $MPG123
}
ogg2wav_lame(){
	echo "$LAME -S --decode $i" > $TMPO 2>&1
	(for i in *.ogg ;do
		$LAME -S --decode "$i" >> $TMPO 2>&1
	done && echo -n ) &
	tailbox $MPG123
}

infocd(){
	is_audio ${CDROM[0]} || ejecta || return 1
	NUMTRACK=$($CDIR -d ${CDROM[0]} |head -1 |awk '{print $(NF-1) }')
	if	is_mix ${CDROM[0]}
	then	( $DIALOG --beep --yesno "This is a mixed mode CD (audio + data track)\n           Continue?" 6 55 && return 0 || return 1 )
	fi
}

blankfast(){
	eject -t "${CDRW[0]}"
	di "${CDRW[3]}"
	if	is_r
	then	$DIALOG --beep --msgbox "The CD is not rewritable." 6 35 && return 1
	elif	is_blank
	then	$DIALOG --beep --msgbox "The CD is already empty or blanked." 6 45 && return 1
	elif	is_rw_and_full
	then	if dialog --yesno "Blank fast?" 6 35 ;then
			echo "$CDRECORD -v gracetime=3 speed=${MI[3]} dev=${CDRW[3]} blank=fast -force" > $TMPO 2>&1
			($CDRECORD -v gracetime=3 speed=${MI[3]} dev=${CDRW[3]} blank=fast -force >> $TMPO 2>&1 && echo -n ) &
			tailbox $CDRECORD || return 1
		else
			return 1
		fi
	fi
}

blankfull(){
	eject -t "${CDRW[0]}"
	di "${CDRW[3]}"
	if	is_r
	then	$DIALOG --beep --msgbox "The CD is not rewritable." 6 35 && return 1
	elif	is_blank
	then	$DIALOG --beep --msgbox "The CD is already empty or blanked." 6 45 && return 1
	elif	is_rw_and_full
	then	if dialog --yesno "Blank fully?" 6 35
		then	echo "$CDRECORD -v gracetime=3 speed=${MI[3]} dev=${CDRW[3]} blank=all -force" > $TMPO 2>&1
			($CDRECORD -v gracetime=3 speed=${MI[3]} dev=${CDRW[3]} blank=all -force >> $TMPO 2>&1 && echo -n ) &
			tailbox $CDRECORD
		else	return 1
		fi
	fi
}

fixate(){
	eject -t "${CDRW[0]}"
	di "${CDRW[3]}"
	if	is_blank
	then	$DIALOG --beep --msgbox "The CD is empty or blanked." 6 45 && return 1
	elif	! is_app
	then	$DIALOG --beep --msgbox "The CD is not open (appendable)." 6 45 && return 1
	elif	is_app
	then	if dialog --yesno "Fixate (write TOC)?" 6 35
		then	echo "$CDRECORD -v -fix gracetime=3 speed=${MI[3]} dev=${CDRW[3]} driver=mmc_cdr" > $TMPO 2>&1
			($CDRECORD -v -fix gracetime=3 speed=${MI[3]} dev=${CDRW[3]} driver=mmc_cdr >> $TMPO 2>&1 && echo -n ) &
			tailbox $CDRECORD
		else	return 1
		fi
	fi
}

blanktrack(){
	eject -t "${CDRW[0]}"
	echo "$CDRECORD -v gracetime=3 speed=${MI[3]} dev=${CDRW[3]} driver=mmc_cdr blank=track -eject" > $TMPO 2>&1 
	($CDRECORD -v gracetime=3 speed=${MI[3]} dev=${CDRW[3]} driver=mmc_cdr blank=track -eject >> $TMPO 2>&1 && echo -n ) &
	tailbox $CDRECORD
	eject -t "${CDRW[0]}"
}

blanklastsession(){
	eject -t "${CDRW[0]}"
	echo "$CDRECORD -v gracetime=3 speed=${MI[3]} dev=${CDRW[3]} driver=mmc_cdr blank=session -eject" > $TMPO 2>&1
	($CDRECORD -v gracetime=3 speed=${MI[3]} dev=${CDRW[3]} driver=mmc_cdr blank=session -eject >> $TMPO 2>&1 && echo -n ) &
	tailbox $CDRECORD
	eject -t "${CDRW[0]}"
}

blankunclose(){
	eject -t "${CDRW[0]}"
	echo "$CDRECORD -v gracetime=3 speed=${MI[3]} dev=${CDRW[3]} driver=mmc_cdr blank=unclose -eject" > $TMPO 2>&1
	($CDRECORD -v gracetime=3 speed=${MI[3]} dev=${CDRW[3]} driver=mmc_cdr blank=unclose -eject >> $TMPO 2>&1 && echo -n  || return 1) &
	tailbox $CDRECORD
	eject -t "${CDRW[0]}"
}
cleanup(){
	$DIALOG --checklist "Select items for <rm -rf>" 15 50 8\
		1 "${PR[0]}${PR[1]}" on\
		2 "${PR[5]}*" off\
		3 "${PR[4]}*" on\
		4 "${PR[4]}audio.cddb" off\
		5 "${PR[4]}cdda.inf" off\
		6 "${PR[4]}*.raw" off\
		7 "${PR[4]}*.wav" off\
		8 "${PR[4]}*.mp3" off\
		2> $TMPO

	grep -q "1" $TMPO && rm -rf ${PR[0]}${PR[1]}
	grep -q "2" $TMPO && rm -rf ${PR[5]}*
	grep -q "3" $TMPO && rm -rf ${PR[4]}*
	grep -q "4" $TMPO && rm -rf ${PR[4]}audio.cddb
	grep -q "5" $TMPO && rm -rf ${PR[4]}cdda.inf
	grep -q "6" $TMPO && rm -rf ${PR[4]}*.raw
	grep -q "7" $TMPO && rm -rf ${PR[4]}*.wav
	grep -q "8" $TMPO && rm -rf ${PR[4]}*.mp3
}
diskinfo(){
	echo -ne "----------------------------\n<cdir> output:\n----------------------------\n" >$TMPO
	$CDIR -d $1 >>$TMPO
	echo -ne "\n----------------------------\n<isoinfo> output:\n----------------------------\n" >>$TMPO
	$ISOINFO -i $1 -d >> $TMPO
	echo -ne "\n----------------------------\n<cdrdao disk-info> output:\n----------------------------\n" >>$TMPO
	$CDRDAO disk-info --device $2 --driver generic-mmc 2>>$TMPO
	echo -ne "\n----------------------------\n<cdrecord -toc> output:\n----------------------------\n" >>$TMPO
	$CDRECORD -v -toc dev=$2 >>$TMPO 2>/dev/null
	echo -ne "\n----------------------------\nroot directory:\n----------------------------\n" >>$TMPO
	$MOUNT $1 $3 2>/dev/null &&\
	ls -l $3 >>$TMPO &&\
	$UMOUNT $1
	outp
}
mktoc(){
	cd ${PR[4]}
	echo "CD_ROM_XA" >$TMP.toc
	for i in "$@" ; do
		echo "" >>$TMP.toc
		if [ ! -r "$i" ] ;then
			$DIALOG --beep --msgbox "Can't read ${PR[4]}$i." 6 60
			return 1
		elif [ ! -s "$i" ] ;then
			$DIALOG --beep --msgbox "Size of ${PR[4]}$i is 0." 6 60
			return 1
		fi
		echo "TRACK AUDIO" >>$TMP.toc
		echo "AUDIOFILE \"$i\" 0" >>$TMP.toc
	done
	$CDRDAO show-toc $TMP.toc > $TMPO 2>&1 && outp
}
inpvid(){
	$DIALOG --inputbox "Enter Volume ID" 8 65 "${PR[2]}" 2>$TMPO && PR[2]=$(cat $TMPO) || return 1
}
src_tcdrrc(){
	. $TCDRRC
}
ejectm(){
	eject ${CDROM[0]} ;$DIALOG --yesno "Insert the master CD into ${CDROM[1]}" 5 70 || return 1
	eject -t ${CDROM[0]}
}
ejecta(){
	eject ${CDROM[0]}
	$DIALOG --yesno "Insert the audio CD into ${CDROM[1]}" 6 70 || return 1
	eject -t ${CDROM[0]}
}
ejectr(){
	eject ${CDRW[0]} ;$DIALOG --yesno "Insert a writeable CD-R/CD-RW medium into ${CDRW[1]}" 5 70 || return 1
	eject -t ${CDRW[0]}
}
startscr(){
	# check modules begin (taken from CD-Writing-HOWTO <winni@xpilot.org>):
	echo "Checking modules..."
	[ $(whoami) = 'root' ] || echo "You must be root to execute the commands."
	$CDRECORD -scanbus > /dev/null 2>&1
	if ! (pidof kerneld || test -f "/proc/sys/kernel/modprobe"); then
		echo "Neither kerneld nor kmod are running to automatically load modules".
	fi
	report_no_autoload(){
		echo "Ensure the module $1 is loaded automatically next time."
	}
	if test ! -f "/proc/scsi/scsi"; then
		report_no_autoload scsi_mod && insmod scsi_mod
	fi
	if ! grep "^........ sg_" /proc/ksyms > /dev/null; then
		report_no_autoload sg && insmod sg
	fi
	if ! grep "^........ sr_" /proc/ksyms > /dev/null; then
		report_no_autoload sr_mod && insmod sr_mod
	fi
	if ! grep "^........ loop_" /proc/ksyms > /dev/null; then
		report_no_autoload loop && insmod loop
	fi
	if ! grep iso9660 /proc/filesystems > /dev/null; then
		report_no_autoload iso9660 && insmod iso9660
	fi
	# echo "The following is only needed for IDE/ATAPI CD-writers."
	if ! grep ide-scsi /proc/ide/drivers > /dev/null; then
		report_no_autoload ide-scsi && insmod ide-scsi
	fi
	$CDRECORD -scanbus > /dev/null 2>&1
	# check modules end.
}
ckpath(){
	[ -d ${PR[0]} ] || mkdir --verbose ${PR[0]}
	[ -d ${PR[4]} ] || mkdir --verbose ${PR[4]}
	[ -d ${PR[5]} ] || mkdir --verbose ${PR[5]}
	rm -f /tmp/tcdr*
}
tailbox(){
	[ "$NOOUTP" -eq "1" ] 2>/dev/null && return 0
	$DIALOG --tailbox $TMPO 22 75 || kill -9 $(pidof $1)
}

outp(){
	[ "$NOOUTP" -eq "1" ] 2>/dev/null && return 0
	$DIALOG --beep --textbox $TMPO 22 77 || return 1
	rm -f $TMPO
}
waitm(){
	$DIALOG --cr-wrap --infobox "  You may watch die blinkink lichts..." 5 50
}
splash(){
	echo -n "Closing trays and unmounting: "
	eject -t "${CDROM[0]}"
	grep -q "${CDROM[2]}" /etc/mtab && $UMOUNT ${CDROM[0]}
	echo -n "${CDROM[0]} "

	echo -n "${CDRW[0]}"
	eject -t "${CDRW[0]}"
	grep -q "${CDRW[2]}" /etc/mtab && $UMOUNT ${CDRW[0]}
	echo "."

	[ "$NOOUTP" -eq "1" ] 2>/dev/null && return 0
	di "${CDRW[3]}"

	(cat <<EOF
	------------ CD-ROM: ------------
	vendor & model:        ${CDROM[1]}
	device file:           ${CDROM[0]}
	mount point:           ${CDROM[2]}
	SCSI BUS,TARGET,LUN:   ${CDROM[3]}
	drive reading speed:   ${CDROM[6]}

	------------ CD-RW: -------------
	vendor & model:        ${CDRW[1]}
	device file:           ${CDRW[0]}
	mount point:           ${CDRW[2]}
	SCSI BUS,TARGET,LUN:   ${CDRW[3]}
	drive reading speed:   ${CDRW[6]}
	medium writing speed:  ${MI[3]}

	--------- Medium Status: ---------
${CDROM[0]}: $($CDIR -d ${CDROM[0]})

${CDRW[0]}:  $($CDIR -d ${CDRW[0]})
EOF
	) >$TMPO
	$DIALOG --textbox $TMPO 23 65
}

dirsub(){
	if ! $DIALOG --menu\
		"FS Directory Operations <${PR[5]}>" 10 75 3\
		"I"  "Directory   ->  ISO                 <mkisofs>            "\
		"C"  "Directory   ->  CD-R/CD-RW          <mkisofs | cdrecord> "\
		2> $TMP
	then mainm
	fi
	case $(cat $TMP) in
		"I")	dir2i
			dirsub
			;;
		"C")	dir2i2cd
			dirsub
			;;
	esac
}
dcdsub(){
	if ! $DIALOG --menu\
		"Data CD Options (${CDROM[0]}  ->  ${CDRW[0]})" 13 75 6\
        	"D" "Data CD   ->  ISO            <dd>                             "\
        	"R" "Data CD   ->  ISO            <readcd>  (try this if dd fails) "\
        	"I" "ISO       ->  CD-R/CD-RW     <cdrecord>                       "\
	        "C" "Data CD   ->  CD-R/CD-RW     <cdrdao copy>                    "\
        	"O" "Data CD   ->  CD-R/CD-RW     <cdrdao On-The-Fly>              "\
		2> $TMP
	then mainm
	fi
	case $(cat $TMP) in
		"D")	cd2i_dd
			dcdsub
			;;
		"R")	cd2i_rcd
			dcdsub
			;;
		"I")	i2dcd
			dcdsub
			;;
		"C")	dcd2cd
			dcdsub
			;;
		"O")	dcd2cdr
			dcdsub
			;;
	esac
}
mixcdsub(){
	if ! $DIALOG --menu\
		"Mixed Mode (CD Extra/CD+) Options" 10 75 3\
        	"X" "Mixed Mode CD  ->  CD-R/CD-RW   <cdrdao, mkisofs | cdrecord> "\
        	"I" "Display track info on medium in ${CDRW[1]} "\
		2> $TMP
	then mainm
	fi
	case $(cat $TMP) in
		"X")	mixcd2cd
			mixcdsub
			;;
		"I")	msdcdinfo
			mixcdsub
			;;
	esac
}
msdsub(){
	if ! $DIALOG --menu\
		"Multi-session Data CD Options" 11 75 4\
 		"S" "Session       ->   MS CD-R/CD-RW         <mkisofs | cdrecord> "\
		"L" "Last session  ->   Close MS CD-R/CD-RW   <mkisofs | cdrecord> "\
 		"I" "Display track info on medium in ${CDRW[1]} "\
		2> $TMP
	then mainm
	fi
	case $(cat $TMP) in
		"S")	msd2cd
			msdsub
			;;
		"L")	msdclose
			msdsub
			;;
		"I")	msdcdinfo
			msdsub
			;;
	esac
}
bootcdsub(){
	if ! $DIALOG --menu\
		"Bootable data CD options (El Torito)" 10 77 3\
        	"B" "Directory and ${PR[7]}  ->  CD-R/CD-RW     <mkisofs | cdrecord> "\
        	"F" "Bootable floppy         ->  ${PR[8]}${PR[7]}  <dd>                 "\
		2> $TMP
	then mainm
	fi
	case $(cat $TMP) in
		"B")	bootcd
			bootcdsub
			;;
		"F")	fd2bootimg
			bootcdsub
			;;
	esac
}
acdsub(){
	if ! $DIALOG --menu\
		"                    Audio CD ripping options.\n            Target directory:  <${PR[4]}>" 18 75 10\
		"C"  "Audio CD  ->  CD-R/CD-RW     <cdrdao CD Copy>                "\
		"O"  "Audio CD  ->  CD-R/CD-RW     <cdrdao CD Copy On the Fly>     "\
		"A"  "Audio CD  ->  CD-R/CD-RW     <cdparanoia/cdda2wav | cdrdao>  "\
		"S"  "Audio CD  ->  Separate WAVs  <cdparanoia/cdda2wav>           "\
		"R"  "Audio CD  ->  RAW image      <cdparanoia/cdda2wav + toc>     "\
		"W"  "Audio CD  ->  WAV image      <cdparanoia/cdda2wav + toc>     "\
		"M"  "Audio CD  ->  MP3 tracks     <cdpar./cdda2w.| bladeenc/lame> "\
		"P"  "CD Player                    <$(basename $CDPLAYER)>                      "\
		"X"  "Mixer                        <$(basename $MIXER)>                         "\
		2> $TMP
	then mainm
	fi
	case $(cat $TMP) in
		"C")	acd2acd_t
			acdsub
			;;
		"O")	acd2acd
			acdsub
			;;
		"A")	cd ${PR[4]}
			is_audio ${CDROM[0]} || ejecta || acdsub
			infocd || acdsub
			$DIALOG --cr-wrap --infobox "Ripping from ${CDROM[0]} to ${PR[4]}${PR[10]}.\n\nPlease wait..." 7 65
			if [ ! -z $CDPARANOIA ] ;then
				acd2acd_cdparanoia
			elif [ ! -z $CDDA2WAV ] ;then
				acd2acd_cdda2wav
			fi
			acdsub
			;;
		"S")	if [ ! -z $CDPARANOIA ] ;then
				acd2wavs_cdparanoia
			elif [ ! -z $CDDA2WAV ] ;then
				acd2wavs_cdda2wav
			fi
			acdsub
			;;
		"R")	
			cd ${PR[4]}
			is_audio ${CDROM[0]} || ejecta || acdsub
			infocd || acdsub
			$DIALOG --cr-wrap --infobox "Ripping from ${CDROM[0]} to ${PR[4]}${PR[10]}.\n  Please wait..." 7 60
			if [ ! -z $CDPARANOIA ] ;then
				acd2raw_cdparanoia
			elif [ ! -z $CDDA2WAV ] ;then
				acd2raw_cdda2wav
			fi
			acdsub
			;;
		"W")	cd ${PR[4]}
			is_audio ${CDROM[0]} || ejecta || acdsub
			infocd || acdsub
			$DIALOG --cr-wrap --infobox "Ripping from ${CDROM[0]} to ${PR[4]}${PR[11]}.\n  Please wait..." 6 65
			if [ ! -z $CDPARANOIA ] ;then
				acd2wav_cdparanoia
			elif [ ! -z $CDDA2WAV ] ;then
				acd2wav_cdda2wav
			fi
			acdsub
			;;
		"M")	if [ ! -z $BLADEENC ] ;then
				acd2mp3_bladeenc
			elif [ ! -z $LAME ] ;then
				acd2mp3_lame
			fi
			acdsub
			;;
		"P")	clear
			$CDPLAYER ${CDRW[0]}
			acdsub
			;;
		"X")	$MIXER
			acdsub
			;;
	esac
}
rawsub(){
	if ! $DIALOG --menu\
		"RAW/CDR Options (${PR[4]}*.raw)" 13 70 6\
		"C"  "RAW/CDR (Audio tracks)  ->  CD-R/CD-RW  <cdrdao>        "\
		"W"  "RAW/CDR (Audio tracks)  ->  WAV         <sox>           "\
		"M"  "RAW/CDR (Audio tracks)  ->  MP3         <bladeenc/lame> "\
		"P"  "Play ${PR[4]}*.raw            <sox>           "\
		"S"  "Record from /dev/dsp                    <sox>           "\
		"X"  "Mixer                                   <$(basename $MIXER)>         "\
		2> $TMP
	then	
		[ -z $SOXPID ] || kill -9 $SOXPID
		mainm
	fi
	case $(cat $TMP) in
		"C")	raw2cd
			rawsub
			;;
		"W")	raw2wav
			rawsub
			;;
		"M")	cd ${PR[4]}
			if ! ls ${PR[4]}*.raw > /dev/null 2>&1 ;then
				$DIALOG --msgbox "No .raw files found in ${PR[4]}" 6 65
				wavsub
			fi
			$DIALOG --cr-wrap --infobox "Converting ${PR[4]}*.raw into ${PR[4]} .mp3.  Wait..." 5 77
			if [ ! -z $BLADEENC ] ;then
				raw2mp3_bladeenc
			elif [ ! -z $LAME ] ;then
				raw2mp3_lame
			fi
			rawsub
			;;
		"P")	rawpl
			rawsub
			;;
		"S")	rawrec
			rawsub
			;;
		"X")	$MIXER
			rawsub
			;;
	esac
}
wavsub(){
	if ! $DIALOG --menu\
		"WAV Options (${PR[4]}*.wav)" 13 65 6\
		"C"  "WAV  ->  CD-R/CD-RW               <cdrdao>        "\
		"R"  "WAV  ->  RAW                      <sox>           "\
		"M"  "WAV  ->  MP3                      <bladeenc/lame> "\
		"P"  "Play ${PR[4]}*.wav      <sox/wavp>      "\
		"S"  "Record from /dev/dsp              <sox/wavr>      "\
		"X"  "Mixer                             <$(basename $MIXER)>         "\
		2> $TMP
	then
		[ -z $SOXPID ] || kill -9 $SOXPID
		mainm
	fi
	case $(cat $TMP) in
		"C")	wav2cd
			wavsub
			;;
		"R")	wav2raw
			wavsub
			;;
		"M")	cd ${PR[4]}
			if ! ls ${PR[4]}*.wav > /dev/null 2>&1 ;then
				$DIALOG --msgbox "No .wav files found in ${PR[4]}" 6 65
				wavsub
			fi
			$DIALOG --cr-wrap --infobox "Converting ${PR[4]}*.wav into ${PR[4]} .mp3.  Wait..." 5 77
			if [ ! -z $BLADEENC ] ;then
				wav2mp3_bladeenc
			elif [ ! -z $LAME ] ;then
				wav2mp3_lame
			fi
			wavsub
			;;
		"P")	cd ${PR[4]}
			[ -z $SOXPID ] || kill -9 $SOXPID
			if ! ls ${PR[4]}*.wav > /dev/null 2>&1 ;then
				$DIALOG --msgbox "No .wav files found in ${PR[4]}" 6 65
				wavsub
			fi
			/bin/ls -1 *.wav |awk '{print NR " " $1}' >$TMPO
			$DIALOG --menu "Select a wav file to play" 14 50 7 $(cat $TMPO) 2>$TMP || acdsub
			FILE=$(awk '/'^$(cat $TMP)' /{print $2}' $TMPO)
			if [ ! -z $SOX ] ;then
				wavpl_sox
			elif [ ! -z $WAVP ] ;then
				wavpl_wavp
			fi
			wavsub
			;;
		"S")	$DIALOG --cr-wrap --infobox "Recording from /dev/dsp to ${PR[4]}rec.wav\n           (44100 Hz/16 bit/2 channel).\n\n          Hit Ctrl-C to stop recording." 8 60
			if [ ! -z $SOX ] ;then
				wavrec_sox
			elif [ ! -z $WAVP ] ;then
				wavrec_wavr
			fi
			wavsub
			;;
		"X")	$MIXER
			wavsub
			;;
	esac
}
mp3sub(){
	if ! $DIALOG --menu\
		"MP3 Options (${PR[4]}*.mp3)" 12 65 5\
		"C"  "MP3  ->  CD-R/CD-RW   <mpg123 | cdrdao>       "\
		"R"  "MP3  ->  RAW          <mpg123 | sox>          "\
		"W"  "MP3  ->  WAV          <mpg123>                "\
		"P"  "Player                <$(basename $MP3PLAYER)>            "\
		"X"  "Mixer                 <$(basename $MIXER)>                 "\
		2> $TMP
	then mainm
	fi
	case $(cat $TMP) in
		"C")	mp32cd
			mp3sub
			;;
		"R")	cd ${PR[4]}
			if ! ls ${PR[4]}*.mp3 > /dev/null 2>&1 ;then
				$DIALOG --msgbox "No .mp3 files found in ${PR[4]}" 6 65
				mp3sub
			fi
			$DIALOG --cr-wrap --infobox "Converting ${PR[4]}*.mp3 into ${PR[4]} .raw.  Wait..." 5 77
			rm -f $TMPO
			if [ ! -z $MPG123 ] ;then
				mp32raw_mpg123
			elif [ ! -z $LAME ] ;then
				mp32raw_lame
			fi
			mp3sub
			;;
		"W")	cd ${PR[4]}
			rm -f $TMPO
			if ! ls ${PR[4]}*.mp3 > /dev/null 2>&1 ;then
				$DIALOG --msgbox "No .mp3 files found in ${PR[4]}" 6 65
				mp3sub
			fi
			$DIALOG --cr-wrap --infobox "Converting ${PR[4]}*.mp3 into ${PR[4]} .wav.  Wait..." 5 77
			rm -f $TMPO
			if [ ! -z $MPG123 ] ;then
				mp32wav_mpg123
			elif [ ! -z $LAME ] ;then
				mp32wav_lame
			fi
			mp3sub
			;;
		"P")	cd ${PR[4]}
			$MP3PLAYER
			mp3sub
			;;
		"X")	$MIXER
			mp3sub
			;;
	esac
}
oggsub(){
	if ! $DIALOG --menu\
		"OGG Options (${PR[4]}*.ogg)" 12 65 5\
		"C"  "OGG  ->  CD-R/CD-RW   <lame | cdrdao>         "\
		"R"  "OGG  ->  RAW          <lame>                  "\
		"W"  "OGG  ->  WAV          <lame>                  "\
		"P"  "Player                <$(basename $OGGPLAYER)>            "\
		"X"  "Mixer                 <$(basename $MIXER)>                 "\
		2> $TMP
	then mainm
	fi
	case $(cat $TMP) in
		"C")	cd ${PR[4]}
			rm -f $TMPO
			if ! ls ${PR[4]}*.ogg > /dev/null 2>&1 ;then
				$DIALOG --msgbox "No .ogg files found in ${PR[4]}" 6 65
				oggsub
			fi
			$DIALOG --cr-wrap --infobox "Converting ${PR[4]}*.ogg into ${PR[4]} .wav.  Wait..." 5 77
			rm -f $TMPO
			ogg2cd
			oggsub
			;;
		"R")	cd ${PR[4]}
			rm -f $TMPO
			if ! ls ${PR[4]}*.ogg > /dev/null 2>&1 ;then
				$DIALOG --msgbox "No .ogg files found in ${PR[4]}" 6 65
				oggsub
			fi
			$DIALOG --cr-wrap --infobox "Converting ${PR[4]}*.ogg into ${PR[4]} .raw.  Wait..." 5 77
			rm -f $TMPO
			if [ ! -z $OGG123 ] ;then
				ogg2raw_ogg123
			elif [ ! -z $LAME ] ;then
				ogg2raw_lame
			fi
			oggsub
			;;
		"W")	cd ${PR[4]}
			rm -f $TMPO
			if ! ls ${PR[4]}*.ogg > /dev/null 2>&1 ;then
				$DIALOG --msgbox "No .ogg files found in ${PR[4]}" 6 65
				oggsub
			fi
			$DIALOG --cr-wrap --infobox "Converting ${PR[4]}*.ogg into ${PR[4]} .wav.  Wait..." 5 77
			rm -f $TMPO
			if [ ! -z $OGG123 ] ;then
				ogg2wav_ogg123
			elif [ ! -z $LAME ] ;then
				ogg2wav_lame
			fi
			oggsub
			;;
		"P")	cd ${PR[4]}
			$OGGPLAYER
			oggsub
			;;
		"X")	$MIXER
			oggsub
			;;
	esac
}
miscsub(){
	if ! $DIALOG --menu\
		"Miscellaneous Options" 19 65 12\
		"F"  "Blank all data on the CD-RW in <${CDRW[0]}>  (full) "\
		"B"  "Blank PMA, TOC, pregap on the CD-RW in <${CDRW[0]}> "\
		"T"  "Blank track  on the CD-RW in <${CDRW[0]}>           "\
		"N"  "Unreserve track on the CD-RW in <${CDRW[0]}>        "\
		"A"  "Blank a track tail on the CD-RW in <${CDRW[0]}>     "\
		"U"  "Unclose last session on the CD-RW in <${CDRW[0]}>   "\
		"S"  "Blank last session on the CD-RW in <${CDRW[0]}>     "\
		"C"  "Close (fixate) medium in <${CDRW[0]}>               "\
		"D"  "File Cleanup                                      "\
		"R"  "CD-ROM medium Info  <${CDROM[0]}>                    "\
		"W"  "CD-RW medium Info  <${CDRW[0]}>                     "\
		"L"  "(Re)Load $TCDRRC                            "\
		2> $TMP
	then mainm
	fi
	case $(cat $TMP) in
		"F")	blankfull
			miscsub
			;;
		"B")	blankfast
			miscsub
			;;
		"T")	blanktrack
			miscsub
			;;
		"N")	unreservetrack
			miscsub
			;;
		"A")	blanktracktail
			miscsub
			;;
		"U")	blankunclose
			miscsub
			;;
		"S")	blanklastsession
			miscsub
			;;
		"C")	fixate
			miscsub
			;;
		"D")	cleanup
			miscsub
			;;
		"R")	diskinfo ${CDROM[0]} ${CDROM[3]} ${CDROM[2]}
			miscsub
			;;
		"W")	diskinfo ${CDRW[0]} ${CDRW[3]} ${CDRW[2]}
			miscsub
			;;
		"L")	cd $TCDRPATH
			src_tcdrrc
			splash
			miscsub
			;;
	esac
}

mainm(){
	if ! $DIALOG --menu\
		"      Source Medium     ->    Destination Medium                " 19 75 12\
		"I "	"  Directory         ->    CD-R/CD-RW/ISO                    "\
        	"D "	"  Data CD / ISO     ->    CD-R/CD-RW/ISO                    "\
		"X "	"  Mixed mode CD     ->    CD-R/CD-RW                        "\
		"S "	"  Add a session     ->    Multi-session CD-R/CD-RW          "\
		"B "	"  Bootable image    ->    El Torito boot CD-R/CD-RW         "\
		"A "	"  Audio CD          ->    CD-R/CD-RW/RAW/WAV/MP3            "\
		"R "	"  RAW/CDR           ->    CD-R/CD-RW/WAV/MP3                "\
		"W "	"  WAV               ->    CD-R/CD-RW/RAW/MP3                "\
		"P "	"  MP3               ->    CD-R/CD-RW/RAW/WAV                "\
		"O "	"  OGG               ->    CD-R/CD-RW/RAW/WAV                "\
		"M "	"  Miscellaneous           Blank / Fixate / Cleanup / Info   "\
		"T "	"  Reload TCDR             Developer friendly interface 8^)  "\
		2> $TMP
	then
		rm -f $TMP $TMPO
		#reset
		setleds +num
		exit 0
	fi
	case $(cat $TMP) in
		"I ")	dirsub
			;;
		"D ")	dcdsub
			;;
		"X ")	mixcdsub
			;;
		"S ")	msdsub
			;;
		"B ")	bootcdsub
			;;
		"A ")	acdsub
			;;
		"R ")	rawsub
			;;
		"W ")	wavsub
			;;
		"P ")	mp3sub
			;;
		"O ")	oggsub
			;;
		"M ")	miscsub
			;;
		"T ")	. $TCDRPATH$(basename $0)
			;;
	esac
}

	startscr
	detect_scsi || detect_ide
#	src_tcdrrc			# If auto-detection fails, uncomment this line and edit /etc/tcdrrc
	ckpath
	splash
	mainm

exit $?

##### TCDR End.

