#!/bin/bash
#
#	TCDR
#	Version: 1.7
#	Author: Szilard Torok <kobold2@yahoo.com>
#	Sat Nov  2 05:47:46 CET 2002
#	Motto: "Some of this works for me."
#
#####

# TCDR Copyright (C) 2002 Szilard Torok <kobold2@yahoo.com>
#
# 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>



detect_sw(){
	if [ $(basename $0) != tcdr ]	;then echo "This script should be named tcdr <mv $(basename $0) tcdr>."		;exit 1 ;fi
	if [ $(type -p cdir) ]		;then CDIR=$(type -p cdir)		;else echo "cdir not found!"		;exit 1 ;fi
	if [ $(type -p cdrdao) ]	;then CDRDAO=$(type -p cdrdao)		;else echo "cdrdao not found!"		;exit 1 ;fi
	if [ $(type -p cdrecord) ]	;then CDRECORD=$(type -p cdrecord)	;else echo "cdrecord not found!"	;exit 1 ;fi
	if [ $(type -p isoinfo) ]	;then ISOINFO=$(type -p isoinfo)	;else echo "isoinfo not found!"		;exit 1 ;fi
	if [ $(type -p mkisofs) ]	;then MKISOFS=$(type -p mkisofs)	;else echo "mkisofs not found!"		;exit 1 ;fi
	if [ $(type -p dialog) ]	;then DIALOG="$(type -p dialog) --backtitle TCDR_Console_Frontend_v1.7";else echo "dialog not found!" ;exit 1 ;fi
	if [ $(type -p mkzftree) ] 	;then MKZFTREE=$(type -p mkzftree)	;fi
	if [ $(type -p readcd) ]	;then READCD=$(type -p readcd)		;fi

	# To use another program for a given task, replace a 'readonly',
	# or just let tcdr set the variables as it finds the programs.
	if [ $(type -p cdda2wav) ] ;then
		CDDA2WAV="$(type -p cdda2wav)"
		CDRIPPER="$CDDA2WAV"
	else
		CDRIPPER="none"
	fi

	if [ $(type -p cdparanoia) ] ;then
		CDPARANOIA="$(type -p cdparanoia)"
readonly	CDRIPPER="$CDPARANOIA"
	else
		CDRIPPER="none"
	fi

	if [ $(type -p bladeenc) ] ;then
		BLADEENC="$(type -p bladeenc)"
readonly	MP3ENCODER="$BLADEENC"
	else
		MP3ENCODER="none"
	fi

	if [ $(type -p lame) ] ;then
		LAME="$(type -p lame)"
		MP3ENCODER="$LAME"
		MP3DECODER="$LAME"
		MP3PLAYER="$LAME"
	else
		MP3DECODER="none"
		MP3ENCODER="none"
		OGGPLAYER="none"
		OGGDECODER="none"
	fi

	if [ $(type -p mpg123) ] ;then
		MPG123=$(type -p mpg123)
		MP3DECODER="$MPG123"
		MP3PLAYER="$MPG123"
	else
		MP3DECODER="none"
		MP3PLAYER="none"
	fi

	if [ $(type -p freeamp) ] ;then
		MP3PLAYER="$(type -p freeamp)"
	else
		MP3PLAYER="none"
	fi

	if [ $(type -p mp3blaster) ] ;then
		MP3PLAYER="$(type -p mp3blaster)"
	else
		MP3PLAYER="none"
	fi

	if [ $(type -p madplay) ] ;then
		MADPLAY=$(type -p madplay)
		MP3PLAYER="$MADPLAY"
		MP3DECODER="$MADPLAY"
	else
		MP3PLAYER="none"
		MP3DECODER="none"
	fi

	if [ $(type -p maplay) ] ;then
		MAPLAY=$(type -p maplay)
		MP3PLAYER="$(type -p maplay)"
		MP3DECODER="$(type -p maplay)"
	else
		MP3PLAYER="none"
	fi

	if [ $(type -p splay) ] ;then
		SPLAY=$(type -p splay)
		WAVPLAYER="$SPLAY"
readonly	MP3PLAYER="$SPLAY"
readonly	MP3DECODER="$SPLAY"
	else
		MP3PLAYER="none"
		MP3DECODER="none"
	fi

	if [ $(type -p ogg123) ] ;then
		OGG123=$(type -p ogg123)
readonly	OGGPLAYER="$OGG123"
		OGGDECODER="$OGG123"
	else
		OGGPLAYER="none"
		OGGDECODER="none"
	fi

	if [ $(type -p oggdec) ] ;then
		OGGDEC=$(type -p oggdec)
		OGGPLAYER="$OGGDEC"
readonly	OGGDECODER="$OGGDEC"
	else
		OGGPLAYER="none"
		OGGDECODER="none"
	fi

	if [ $(type -p oggenc) ] ;then
		OGGENC="$(type -p oggenc)"
readonly	OGGENCODER="$OGGENC"
	else
		OGGENCODER="none"
	fi

	if [ $(type -p sox) ] ;then
		SOX=$(type -p sox)
		RAWPLAYER="$SOX"
		WAVPLAYER="$SOX"
readonly	RAWRECORDER="$SOX"
readonly	WAVRECORDER="$SOX"
readonly	RAW2WAVCONVERTER="$SOX"
readonly	WAV2RAWCONVERTER="$SOX"
	else
		RAWPLAYER="none"
		WAVPLAYER="none"
		RAWRECORDER="none"
		WAVRECORDER="none"
		RAW2WAVCONVERTER="none"
		WAV2RAWCONVERTER="none"
	fi

	if [ $(type -p wav2cdr) ] ;then
		WAV2CDR=$(type -p wav2cdr)
		WAV2RAWCONVERTER="$WAV2CDR"
		RAW2WAVCONVERTER="$WAV2CDR"
	else
		WAV2RAWCONVERTER="none"
		RAW2WAVCONVERTER="none"
	fi

	if [ $(type -p wavp) ] ;then
		WAVPLAYER="$(type -p wavp)"
	else
		WAVPLAYER="none"
	fi

	if [ $(type -p wavr) ] ;then
		WAVRECORDER="$(type -p wavr)"
	else
		WAVRECORDER="none"
	fi

	if [ $(type -p bplay) ] ;then
readonly	WAVPLAYER="$(type -p bplay)"
	else
		WAVPLAYER="none"
	fi

	if [ $(type -p brec) ] ;then
		RAWRECORDER="$(type -p brec)"
		WAVRECORDER="$(type -p brec)"
	else
		RAWRECORDER="none"
		WAVRECORDER="none"
	fi

	if [ $(type -p cdcd) ] ;then
		CDPLAYER="$(type -p cdcd)"
	else
		CDPLAYER="none"
	fi

	if [ $(type -p workbone) ] ;then
		CDPLAYER="$(type -p workbone) -d"
	else
		CDPLAYER="none"
	fi

	if [ $(type -p groovycd) ] ;then
readonly	CDPLAYER="$(type -p groovycd) -d"
	else
		CDPLAYER="none"
	fi

	if [ $(type -p aumix) ] ;then
		MIXER="$(type -p aumix)"
	else
		MIXER="none"
	fi

	if [ $(type -p nmixer) ] ;then
		MIXER="$(type -p nmixer)"
	else
		MIXER="none"
	fi

	if [ $(type -p cam) ] ;then
readonly	MIXER="$(type -p cam)"
	else
		MIXER="none"
	fi

	if [ $(type -p rexima) ] ;then
		MIXER="$(type -p rexima)"
	else
		MIXER="none"
	fi

}
	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)"
	PR[14]="driver=mmc_cdr driveropts=burnfree"

	DD="/bin/dd"
	LSOF="/usr/sbin/lsof"
	MOUNT="/bin/mount"
	UMOUNT="/bin/umount"
	TRKNR=""
	NXTRK=""
	TTY="$(/usr/bin/tty|cut -f3 -d "/")"
	TOC=""
	TMPO="/tmp/tcdro.$$"
	TMP="/tmp/tcdr.$$"
	TCDRRC="/etc/tcdrrc"
	TCDRPATH="$(echo $0 | sed 's/tcdr$//')"
	NOOUTP="$1"
	
startscr(){
	# pasted 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
}
detect_scsi(){
	SCSICDNR=$(awk '{print $5}' /proc/scsi/sg/devices|wc -l|tr -d " ")
	echo "Detecting devices...  $SCSICDNR SCSI CD-ROMs found."

	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

	if [ $SCSICDNR -lt "2" ] ;then
		CDROM[0]="${CDRW[0]}"
		CDROM[1]="${CDRW[1]}"
		CDROM[2]="${CDRW[2]}"
		CDROM[3]="${CDRW[3]}"
	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}')
	
	[ $SCSICDNR -lt "1" ] && return 1
}
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}')
}
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*
}
splash(){
	echo -n "Closing trays and unmounting: "
	if ! eject -t "${CDROM[0]}" ;then
		echo "${CDROM[0]} cannnot be opened"
		exit 1
	fi
	grep -q "${CDROM[2]}" /etc/mtab && $UMOUNT ${CDROM[0]}
	echo -n "${CDROM[0]} "

	if ! eject -t "${CDRW[0]}" ;then
		echo "${CDRW[0]} cannnot be opened"
		exit 1
	fi
	grep -q "${CDRW[2]}" /etc/mtab && $UMOUNT ${CDRW[0]}
	echo -n "${CDRW[0]}."

	[ "$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
}

di(){
	eject -t ${CDRW[0]}
	$CDRDAO disk-info --device "$1" --driver generic-mmc > $TMPO 2>&1
	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" ) 2>/dev/null && return 1
	( $CDIR -d "$1" |grep -qvi "DATA" ) 2>/dev/null && return 0
}
is_data(){
	if $CDIR -d "$1" |grep -q "datadisc"
		then return 0
		else return 1
	fi 2>/dev/null
}
is_mix(){
	if $CDIR -d "$1" |grep -q "DATA"
		then	return 0
		else	return 1
	fi 2>/dev/null

}

ckspace(){
	di "${CDRW[3]}"
	case "$1" in
		a)	if is_rw ;then
				while ! is_blank ; do
					$DIALOG --beep --menu "Medium about to be burned is not empty." 9 55 2\
						"B "	" Blank the whole disk    "\
						"I "	" Insert a blank medium   "\
					2>$TMP || return 1
					case $(cat $TMP) in
						"B ")	blankfast || return 1
						;;
						"I ")	ejectr || return 1
						;;
					esac
					di "${CDRW[3]}"
				done
				return 0
			elif is_r ;then
				while ! is_blank ; do
					di "${CDRW[3]}"
					$DIALOG --beep --yesno "Medium about to be burned is a used CD-R.  Insert a blank one?" 6 75 && ejectr || return 1
				done
				return 0
			fi
			while ! is_audio ${CDROM[0]}
			do
				ejecta || return 1
			done
			return 0
		;;
		d)	if is_rw ;then
				while ! is_blank ; do
					$DIALOG --beep --menu "Medium about to be burned is not empty." 9 55 2\
						"B "	" Blank the whole disk    "\
						"I "	" Insert a blank medium   "\
					2>$TMP || return 1
					case $(cat $TMP) in
						"B ")	blankfast || return 1
						;;
						"I ")	ejectr || return 1
						;;
					esac
					di "${CDRW[3]}"
				done
				return 0
			elif is_r ;then
				while ! is_blank ; do
					di "${CDRW[3]}"
					$DIALOG --beep --yesno "Medium about to be burned is a used CD-R.  Insert a blank one?" 6 75 && ejectr || return 1
				done
				return 0
			fi
			while ! is_data ${CDROM[0]}
			do
				ejectm || return 1
			done
			return 0
		;;
		m)	if is_rw ;then
				while ! is_blank ; do
					$DIALOG --beep --menu "Medium about to be burned is not empty." 9 55 2\
						"B "	" Blank the whole disk    "\
						"I "	" Insert a blank medium   "\
					2>$TMP || return 1
					case $(cat $TMP) in
						"B ")	blankfast || return 1
						;;
						"I ")	ejectr || return 1
						;;
					esac
					di "${CDRW[3]}"
				done
				return 0
			elif is_r ;then
				while ! is_blank ; do
					di "${CDRW[3]}"
					$DIALOG --beep --yesno "Medium about to be burned is a used CD-R.  Insert a blank one?" 6 75 && ejectr || return 1
				done
				return 0
			fi
		;;
		*)	:
		;;
	esac
	noisofm || return 1
	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 --menu \
" The medium is a blank CD-R, but ${PR[0]}${PR[1]} is\n\
 too large.  You could insert a larger capacity medium\n\
 or attempt to overburn the medium.  Alternatively you\n\
 could consider creating a new, compressed ZISO image.\n\
 mkzftree is required for that (Linux only)." 15 65 4 \
			"I "	"  Insert another medium           "\
			"O "	"  Overburn the medium             "\
			"Z "	"  Generate and write a ZISO image "\
			"W "	"  CD-RW medium Info <${CDRW[0]}>          "\
 			2>$TMP || return 1
			case $(cat $TMP) in
				"I ")	ejectr ${CDRW[0]} || return 1
					ckspace
					;;
				"O ")	overburn || return 1
					dirsub || return 1
					;;
				"Z ")	mkziso && cdrec || return 1
					;;
				"W ")	diskinfo ${CDRW[0]} ${CDRW[3]} ${CDRW[2]}
					ckspace
					;;
			esac
			;;
		"2")	$DIALOG --menu \
" The medium is an appendable CD-R, but ${PR[0]}${PR[1]} is\n\
 too large.  You could attempt overburing the medium or create\n\
 a new, compressed ZISO image in multi mode (mkzftree required)\n\
 or insert a new *appendable* medium." 16 65 4 \
			"I "	" Insert another appendable medium       "\
			"O "	" Overburn the medium (~= 12 extra megs) "\
			"Z "	" Generate and write a ZISO image        "\
			"W "	" CD-RW medium Info <${CDRW[0]}>  "\
			2>$TMP || return 1
			case $(cat $TMP) in
				"I ")	ejectr ${CDRW[0]} || return 1
					ckspace
					;;
				"O ")	overburn || return 1
					dirsub || return 1
					;;
				"Z ")	msmkziso && cdrec -multi || return 1
					;;
				"W ")	diskinfo ${CDRW[0]} ${CDRW[3]} ${CDRW[2]}
					ckspace
					;;
			esac
			;;
		"3")	$DIALOG --yesno	"The medium is a written-and-closed CD-R (read-only)." 7 65 && return 1
			;;
		"4")	$DIALOG --menu \
" The medium is a blank CD-RW, but ${PR[0]}${PR[1]} is\n\
 too large.  You could insert a larger capacity medium\n\
 or attempt to overburn the medium.  Alternatively you\n\
 could consider creating a new, compressed ZISO image.\n\
 mkzftree is required for that (Linux only)." 15 65 4 \
			"I "	"  Insert another medium                  "\
			"O "	"  Overburn the medium (~= 12 extra megs) "\
			"Z "	"  Generate and write a ZISO image        "\
			"W "	"  CD-RW medium Info <${CDRW[0]}>  "\
 			2>$TMP || return 1
			case $(cat $TMP) in
				"I ")	ejectr ${CDRW[0]} || return 1
					ckspace
					;;
				"O ")	overburn
					dirsub || return 1
					;;
				"Z ")	mkziso && cdrec || return 1
					;;
				"W ")	diskinfo ${CDRW[0]} ${CDRW[3]} ${CDRW[2]}
					ckspace
					;;
			esac
			;;
		"5")	$DIALOG --menu \
" The medium is an appendable CD-RW, but ${PR[0]}${PR[1]}\n\
 is too large to fit.  You could attempt to overburn it or \n\
 to free up some space by deleting the last track or session.\n\
 Alternatively you could insert another *appendable* medium\n\
 or choose to blank the whole medium.  Finally tou could write
 a ZISO image in multi-session mode." 19 65 7 \
			"T "	" Track                                   "\
			"S "	" Blank last session                      "\
			"B "	" Blank the whole disk                    "\
			"I "	" Insert another appendable medium        "\
			"O "	" Overburn the medium (~= 12 extra megs)  "\
			"Z "	" Generate and write a ZISO image (multi) "\
			"W "	" CD-RW medium Info <${CDRW[0]}>            "\
			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 || return 1
					;;
				"O ")	overburn || return 1
					dirsub
					;;
				"Z ")	msmkziso && cdrec -multi || return 1
					dirsub
					;;
				"W ")	diskinfo ${CDRW[0]} ${CDRW[3]} ${CDRW[2]}
					ckspace
					;;
			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." 20 65 5\
			"B "	"  Blank fast                    "\
			"U "	"  Unclose                       "\
			"I "	"  Insert another medium         "\
			"W "	"  CD-RW medium Info <${CDRW[0]}> "\
			2>$TMP || return 1
			case $(cat $TMP) in
				"B ")	blankfast || return 1
					;;
				"U ")	blankunclose || return 1
					msd2cd
					;;
				"I ")	ejectr ${CDRW[0]} || return 1
					ckspace
					;;
				"W ")	diskinfo ${CDRW[0]} ${CDRW[3]} ${CDRW[2]}
					ckspace
					;;
			esac
			;;
		"7")	$DIALOG --yesno	"     The medium is a CLOSED CD-RW, but\n ${PR[0]}${PR[1]} would fit if blanked.\n\n               Do it?" 8 45 && blankfast || return 1
			;;
		"8")	$DIALOG --menu "The medium is a WRITTEN-AND-CLOSED CD-RW and ${PR[0]}${PR[1]} would be too large even after blanking." 12 65 4\
			"I "	"  Insert a larger capacity medium       "\
			"O "	"  Blank and overburn (~= 12 extra megs) "\
			"Z "	"  Blank and write A ZISO image          "\
			"W "	"  CD-RW medium Info <${CDRW[0]}> "\
			2>$TMP || return 1
			case $(cat $TMP) in
				"I ")	ejectr ${CDRW[0]} || return 1
					ckspace
					;;
				"O ")	blankfast || return 1
					overburn || return 1
					;;
				"Z ")	blankfast || return 1
					mkziso || return 1
					cdrec || return 1
					return 1
					;;
				"W ")	diskinfo ${CDRW[0]} ${CDRW[3]} ${CDRW[2]}
					ckspace
					;;
			esac
			;;
	esac
}

mkiso(){
	cdrootemptym || return 1
	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(){
	cdrootemptym || return 1
	[ "$1" = "c" ] && ckspace
	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
}
mkziso(){
	cdrootemptym || return 1
	$MKISOFS --help 2>$TMPO
	if grep -q "\-z" $TMPO ;then
		cd ${PR[0]}
		$DIALOG --cr-wrap  --infobox "  Running mkzftree..." 5 45
		$MKZFTREE ${PR[5]} ${PR[0]}Z
		echo "$MKISOFS -rJlLz -V ${PR[2]} -P ${PR[3]} -p ${PR[3]} -sysid ${PR[13]} -o ${PR[0]}${PR[1]} ${PR[0]}Z" > $TMPO 2>&1
		($MKISOFS -rJlLz -V ${PR[2]} -P ${PR[3]} -p ${PR[3]} -sysid ${PR[13]} -o ${PR[0]}${PR[1]} ${PR[0]}Z >> $TMPO 2>&1 && echo -n ) &
		tailbox $MKISOFS
		$DIALOG --cr-wrap  --infobox "  Removing compressed tree..." 5 55
		rm -rf ${PR[0]}Z
	else
		$DIALOG --msgbox "$($MKISOFS --version) doesn't support transparent compression.\n               Install cdrtools 1.11a20 or later." 6 77
		return 1
	fi
}
msmkziso(){
	cdrootemptym || return 1
	$MKISOFS --help 2>$TMPO
	if grep -q "\-z" $TMPO ;then
		[ "$1" = "c" ] && ckspace
		NXTRK=$($CDRECORD -msinfo dev=${CDRW[3]})
		$DIALOG --cr-wrap  --infobox "  Running mkzftree..." 5 45
		$MKZFTREE ${PR[5]} ${PR[0]}Z
		echo "$MKISOFS -rJlLz -o ${PR[0]}${PR[1]} -C $NXTRK -M ${CDRW[0]} ${PR[0]}Z" > $TMPO 2>&1
		($MKISOFS -rJlLz -o ${PR[0]}${PR[1]} -C $NXTRK -M ${CDRW[0]} ${PR[0]}Z >> $TMPO 2>&1 && echo -n ) &
		tailbox $MKISOFS
	else
		$DIALOG --msgbox "$($MKISOFS --version) doesn't support transparent compression.\n               Install cdrtools 1.11a20 or later." 6 77
		return 1
	fi
}
cdrec(){
	$CDRECORD --help 2>$TMPO
	if grep -q "gracetime" $TMPO ;then
		ckspace cdrec && \
		if $DIALOG --cr-wrap --yesno "Test (dummy) mode run?" 6 40 ;then
			echo "$CDRECORD -dummy gracetime=3 dev=${CDRW[3]} ${PR[14]} -eject $1 ${PR[0]}${PR[1]}" > $TMPO 2>&1
			($CDRECORD -dummy gracetime=3 dev=${CDRW[3]} ${PR[14]} -eject $1 ${PR[0]}${PR[1]} >> $TMPO 2>&1 && echo -n ) &
			tailbox $CDRECORD
		else
			echo "$CDRECORD gracetime=3 dev=${CDRW[3]} ${PR[14]} -eject $1 ${PR[0]}${PR[1]}" > $TMPO 2>&1
			($CDRECORD gracetime=3 dev=${CDRW[3]} ${PR[14]} -eject $1 ${PR[0]}${PR[1]} >> $TMPO 2>&1 && echo -n ) &
			tailbox $CDRECORD
		fi
	else
		$DIALOG --msgbox "$($CDRECORD --version)\n     doesn't support gracetime. Install cdrecord 1.11a24 or later." 6 77
		return 1
	fi
}
overburn(){
	$CDRECORD --help 2>$TMPO
	if grep -q "\-overburn" $TMPO ;then
		if grep -q "gracetime" $TMPO ;then
			ckspace cdrec && \
			if $DIALOG --cr-wrap --yesno "       Test (dummy) mode run?\n     This is highly recommended." 6 40;then
				echo "$CDRECORD -dummy -dao -overburn -v gracetime=3 dev=${CDRW[3]} ${PR[14]} -eject $1 ${PR[0]}${PR[1]}" > $TMPO 2>&1
				($CDRECORD -dummy -dao -overburn -v gracetime=3 dev=${CDRW[3]} ${PR[14]} -eject $1 ${PR[0]}${PR[1]} >> $TMPO 2>&1 && echo -n ) &
				tailbox $CDRECORD
			else
				echo "$CDRECORD -dao -overburn -v gracetime=3 dev=${CDRW[3]} ${PR[14]} -eject $1 ${PR[0]}${PR[1]}" > $TMPO 2>&1
				($CDRECORD -dao -overburn -v gracetime=3 dev=${CDRW[3]} ${PR[14]} -eject $1 ${PR[0]}${PR[1]} >> $TMPO 2>&1 && echo -n ) &
				tailbox $CDRECORD
			fi
		else
			$DIALOG --msgbox "$($CDRECORD --version)\n     doesn't support gracetime. Install cdrecord 1.11a24 or later." 6 77
			return 1
		fi
	else
		$DIALOG --msgbox "$($CDRECORD --version)\n     doesn't support overburning. Install cdrecord 1.11a01 or later." 6 78
		return 1
	fi
}
rtocdao(){
	$DIALOG --cr-wrap --infobox "Extracting TOC from ${CDROM[0]} to ${PR[4]}${PR[10]}.toc.\n                    Please 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 --force --device ${CDRW[3]} --driver generic-mmc --speed ${MI[3]} --buffers 240 $1 --eject -n -v 2 $2" > $TMPO
		$CDRDAO simulate --force --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 --force --device ${CDRW[3]} --driver generic-mmc --speed ${MI[3]} --buffers 240 $1 --eject -n -v 2 $2" > $TMPO
		$CDRDAO write --force --device ${CDRW[3]} --driver generic-mmc --speed ${MI[3]} --buffers 240 $1 --eject -n -v 2 $2 >> $TMPO 2>&1 && outp
	fi
}
daocopy(){
	if [ ${CDROM[3]} = ${CDRW[3]} ] ;then
		$DIALOG --cr-wrap --msgbox "   There needs to be two devices present for CD to CD copy:\n          a source device and a destination device.\n\nCreate an ISO image first and then insert a blank media in\n      the burner drive and write the ISO image on it." 11 65
		return 1
	fi
	ckspace "$3" || return 1
	if $DIALOG --yesno "Test (dummy) mode run?" 6 40 ;then
		waitm
		echo "$CDRDAO copy --simulate --force --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 --force --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 --force --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 --force --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\
			"U " "Use it"\
			"O " "Overwrite it"\
			2>$TMP || return 1
		case $(cat $TMP) in
			"U " )	return 0
				;;
			"O " )	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\
			"U " "Use it"\
			"O " "Overwrite it"\
			2>$TMP || return 1
		case $(cat $TMP) in
			"U " )	return 0
				;;
			"O " )	($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\
			"U " "Use it"\
			"O " "Overwrite it"\
			2>$TMP || return 1
		case $(cat $TMP) in
			"U " )	return 0
				;;
			"O " )	$DIALOG --cr-wrap --infobox "Cloning ${CDRW[0]} to ${PR[0]}${PR[1]}..." 5 60
				$READCD -clone dev=${CDROM[3]} f=${PR[0]}${PR[1]} > $TMPO 2>&1 && outp
				;;
		esac
	else
		($READCD dev=${CDROM[3]} f=${PR[0]}${PR[1]} > $TMPO 2>&1 && echo -n ) &
		tailbox $READCD
	fi
}
i2dcd(){
	cdrec
}
dcd2cd(){
	daocopy " " " " d
}
dcd2cdr(){
	daocopy --on-the-fly " " d
}

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 "m"
	eject -t ${CDRW[0]}
	NXTRK=$($CDRECORD -msinfo dev=${CDRW[3]})
	if [ $1 = "z" ] ;then
		cd ${PR[0]}
		$DIALOG --cr-wrap  --infobox "  Running mkzftree..." 5 45
		$MKZFTREE ${PR[5]} ${PR[0]}Z
		echo "$MKISOFS -rJlLv -V ${PR[2]} -P ${PR[3]} -p ${PR[3]} -sysid ${PR[13]} -o ${PR[0]}${PR[1]} -C $NXTRK ${PR[0]}Z" 2>$TMPO
		($MKISOFS -rJlLz -V ${PR[2]} -P ${PR[3]} -p ${PR[3]} -sysid ${PR[13]} -o ${PR[0]}${PR[1]} -C $NXTRK ${PR[0]}Z 2>>$TMPO && echo -n ) &
		tailbox $MKISOFS
	else
		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
	fi
	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 "Overwrite 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 "Overwrite it" on 2>$TMP
			case $(cat $TMP) in
				"1" )	cdrec -multi || return 1;;
				"2" )	msmkiso || 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 -vv -toc dev=${CDRW[3]} >$TMPO && echo -n ) &
	tailbox $CDRECORD
}

bootcd(){
	[ "$NOOUTP" -eq "1" ] 2>/dev/null || $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(){
	is_audio ${CDROM[0]} || ejecta || return 1
	daocopy " " " " "a"
}
acd2acd(){
	is_audio ${CDROM[0]} || ejecta || return 1
	daocopy --on-the-fly " " "a"
}
acd2acd_cdparanoia(){
	noswm ripper $CDRIPPER Ripping || return 1
	$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(){
	is_audio ${CDROM[0]} || ejecta || return 1
	infocd || return 1
	noswm ripper $CDRIPPER Ripping || return 1
	$CDPARANOIA -B -q -w -d ${CDROM[0]} 1- wav
}
acd2wavs_cdda2wav(){
	is_audio ${CDROM[0]} || ejecta || return 1
	infocd || return 1
	noswm ripper $CDRIPPER Ripping || return 1
	$CDDA2WAV -q -B -I generic_scsi -s -x -b 16 -r 44100 -O wav -D ${CDROM[3]} -H track
}
acd2raw_cdparanoia(){
	noswm ripper $CDRIPPER Ripping || return 1
	$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(){
	noswm ripper $CDRIPPER Ripping || return 1
	$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(){
	acd2wavs_$(basename $CDRIPPER) || return 1
	noswm encoders $MP3ENCODER Encoding || return 1
	echo "$BLADEENC -192 -progress=5 track*.wav" > $TMPO 2>&1
	$BLADEENC -192 -progress=5 track*.wav >> $TMPO 2>&1 && outp
}
acd2mp3_lame(){
	acd2wavs_$(basename $CDRIPPER) || return 1
	noswm encoders $MP3ENCODER Encoding || return 1
	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(){
	if [ -r ${PR[4]}*.raw.toc ]
	then
		TOC=$(/bin/ls ${PR[4]}*.raw.toc)
		if ! $DIALOG --menu\
			"TOC file $TOC found." 11 65 3\
			"V "	" View it          "\
			"U "	" Use it           "\
			"C "	" Create a new one "\
			2> $TMP
			then	return 1
		fi
		case $(cat $TMP) in
			"V ")	$DIALOG --textbox "$TOC" 22 65
				raw2cd
				;;
			"U ")	dao " " "$TOC"
				;;
			"C ")	mktoc *.raw
				dao " " $TMP.toc
				;;
		esac
	else
		mktoc *.raw
		dao " " $TMP.toc "a" || return 1
	fi
}
raw2wav_sox(){
	(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
}
raw2wav_wav2cdr(){
	(for i in ${PR[4]}*.raw ;do
		echo "$WAV2CDR --quiet --inraw -I --towav $i $i" >> $TMPO 2>&1
		$WAV2CDR --quiet --inraw -I --towav "$i" "$i" >> $TMPO 2>&1
		mv -f "$i".* "$i".wav
	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
}
raw2ogg_oggenc(){
	echo "$OGGENC -Q -r -B 16 -C 2 -R 44100 --raw-endianness 1 -b 192 *.raw" > $TMPO 2>&1
	$OGGENC -Q -r -B 16 -C 2 -R 44100 --raw-endianness 1 -b 192 *.raw >> $TMPO 2>&1 && outp
}

wav2cd(){
	if [ -r ${PR[4]}*.wav.toc ]
	then
		TOC=$(/bin/ls ${PR[4]}*.wav.toc)
		if ! $DIALOG --menu\
			"TOC file $TOC found." 11 65 3\
			"V "	" View it          "\
			"U "	" Use it           "\
			"C "	" Create a new one "\
			2> $TMP
			then	return 1
		fi
		case $(cat $TMP) in
			"V ")	$DIALOG --textbox "$TOC" 22 65
				wav2cd
				;;
			"U ")	dao " " "$TOC"
				;;
			"C ")	mktoc *.wav
				dao " " $TMP.toc
				;;
		esac
	else
		mktoc *.wav
		dao " " $TMP.toc "a" || return 1
	fi
}
wav2raw_wav2cdr(){
	(for i in ${PR[4]}*.wav ;do
		echo "$WAV2CDR --quiet --toraw -O $i $i.raw" >> $TMPO 2>&1
		$WAV2CDR --quiet --toraw -O "$i" "$i".raw >> $TMPO 2>&1
		mv -f "$i".* "$i".raw
	done && echo -n ) &
	tailbox $SOX
}
wav2raw_sox(){
	(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
}
wav2ogg_oggenc(){
	echo "$OGGENC -Q -b 192 *.wav" > $TMPO 2>&1
	$OGGENC -Q -b 192 *.wav >> $TMPO 2>&1 && outp
}

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
}
mp32raw_madplay(){
	echo "$MADPLAY *.mp3 -o raw:*.raw" > $TMPO 2>&1
	(for i in *.mp3 ;do
		$MADPLAY "$i" -o raw:"$i".raw >> $TMPO 2>&1 &&\
		$SOX -V -t raw -s -w -c2 -r 44100 -x "$i" "$i".fixed.raw &&\
		mv -f "$i".fixed.raw "$i"
	done && echo -n ) &
	tailbox $MADPLAY
}
mp32raw_maplay(){
	echo "$MAPLAY -q -s *.mp3 |$SOX -V -t raw -s -w -c2 -r 44100 -x - *.raw" > $TMPO 2>&1
	(for i in *.mp3 ;do
		$MAPLAY -q -s "$i" |$SOX -V -t raw -s -w -c2 -r 44100 -x - "$i".raw >> $TMPO 2>&1
	done && echo -n ) &
	tailbox $MAPLAY
}
mp32raw_splay(){
	echo "$SPLAY *.mp3 -d - |$SOX -V -t raw -s -w -c2 -r 44100 -x - *.raw" > $TMPO 2>&1
	(for i in *.mp3 ;do
		$SPLAY "$i" -d - |$SOX -V -t raw -s -w -c2 -r 44100 -x - "$i".raw >> $TMPO 2>&1
	done && echo -n ) &
	tailbox $SPLAY
}
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
}
mp32wav_madplay(){
	echo "$MADPLAY *.mp3 -o wave:*.wav" > $TMPO 2>&1
	(for i in *.mp3 ;do
		$MADPLAY "$i" -o wave:"$i".wav >> $TMPO 2>&1
	done && echo -n ) &
	tailbox $MADPLAY
}
mp32wav_maplay(){
	echo "$MAPLAY -q -s *.mp3 |$SOX -V -t raw -s -w -c2 -r 44100 - -t wav *.wav" > $TMPO 2>&1
	(for i in *.mp3 ;do
		$MAPLAY -q -s "$i" |$SOX -V -t raw -s -w -c2 -r 44100 - -t wav "$i".wav >> $TMPO 2>&1
	done && echo -n ) &
	tailbox $MAPLAY
}
mp32wav_splay(){
	echo "$SPLAY *.mp3 -d - |$SOX -V -t raw -s -w -c2 -r 44100 - -t wav *.wav" > $TMPO 2>&1
	(for i in *.mp3 ;do
		$SPLAY "$i" -d - |$SOX -V -t raw -s -w -c2 -r 44100 - -t wav "$i".wav >> $TMPO 2>&1
	done && echo -n ) &
	tailbox $SPLAY
}

ogg2raw_ogg123(){
	for i in *.ogg ;do
		echo "$OGG123 -q -d raw -o byteorder:big -f $i.raw $i" >> $TMPO 2>&1
		$OGG123 -q -d raw -o byteorder:big -f "$i".raw "$i" >> $TMPO 2>&1
	done && outp
}
ogg2raw_oggdec(){
	for i in *.ogg ;do
		echo "$OGGDEC --quiet -b 16 -R 1 -e 1 -o $i.raw $i" >> $TMPO 2>&1
		$OGGDEC --quiet -b 16 -R 1 -e 1 -o "$i".raw "$i" >> $TMPO 2>&1
	done && outp
}
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 && outp
}
ogg2wav_ogg123(){
	for i in *.ogg ;do
		echo "$OGG123 -q -d wav -f $i.wav $i" >> $TMPO 2>&1
		$OGG123 -q -d wav -f "$i".wav "$i" >> $TMPO 2>&1
	done && outp
}
ogg2wav_oggdec(){
	for i in *.ogg ;do
		echo "$OGGDEC --quiet $i" >> $TMPO 2>&1
		$OGGDEC --quiet "$i" >> $TMPO 2>&1
	done && outp
}
ogg2wav_lame(){
	for i in *.ogg ;do
		echo "$LAME -S --decode $i" >> $TMPO 2>&1
		$LAME -S --decode "$i" >> $TMPO 2>&1
	done && outp
}

startplay(){
	case "$1" in
		raw)	callsp || return 1
			/bin/ls -1 *."$1" | awk '{print $1 " " NR " on"}' >$TMPO
			$DIALOG --separate-output --checklist "Select files to play:" 14 70 7 $(cat $TMPO) 2>$TMP || return 1
			case $(basename $RAWPLAYER) in
				sox)		for i in $(cat $TMP);do
							$RAWPLAYER -t raw -s -w -c2 -r 44100 -x $i -t ossdsp -w -s /dev/dsp || return 1
						done &
						;;
			esac
			;;
		wav)	callsp || return 1
			/bin/ls -1 *."$1"|awk '{print $1 " " NR " on"}' >$TMPO
			$DIALOG --separate-output --checklist "Select files to play:" 14 70 7 $(cat $TMPO) 2>$TMP || return 1
			case $(basename $WAVPLAYER) in
				wavp)		for i in $(cat $TMP);do
							$WAVPLAYER $i >/dev/null 2>&1 || return 1
						done &
						;;
				sox)		for i in $(cat $TMP);do
							$WAVPLAYER -t wav $i -t ossdsp -w -s /dev/dsp || return 1
						done &
						;;
				splay)		for i in $(cat $TMP);do
							cat "$i"|$WAVPLAYER -W || return 1
						done &
						;;
				bplay)		for i in $(cat $TMP);do
							$WAVPLAYER -S -s 44100 -b 16 "$i" >/dev/null 2>&1 || return 1
						done &
						;;
			esac
			;;
		mp3)	callsp || return 1
			/bin/ls -1 *."$1" | awk '{print $1 " " NR " on"}' >$TMPO
			$DIALOG --separate-output --checklist "Select files to play:" 14 70 7 $(cat $TMPO) 2>$TMP || return 1
			case $(basename $MP3PLAYER) in
				mp3blaster)	$MP3PLAYER || return 1
						;;
				madplay)	$MP3PLAYER -Q $(cat $TMP) || return 1 &
						;;
				lame)		for i in $(cat $TMP);do
							$MP3PLAYER --quiet --decode "$i" - | $SOX -t wav - -t ossdsp -w -s /dev/dsp >/dev/null 2>&1 || return 1 &
						done
						;;
				freeamp)	cd ${PR[4]}
						clear
						$MP3PLAYER $(cat $TMP) || return 1
						;;
				mpg123)		cd ${PR[4]}
						$MP3PLAYER -q -@ $TMP || return 1 &
						;;
				maplay)		cd ${PR[4]}
						$MP3PLAYER -q -@ $TMP || return 1 &
						;;
				splay)		cd ${PR[4]}
						$MP3PLAYER -l $TMP || return 1 &
						;;
			esac
			;;
		ogg)	callsp || return 1
			/bin/ls -1 *."$1" | awk '{print $1 " " NR " on"}' >$TMPO
			$DIALOG --separate-output --checklist "Select files to play:" 14 70 7 $(cat $TMPO) 2>$TMP || return 1
			case $(basename $OGGPLAYER) in
				ogg123)		$OGGPLAYER -q -@ $TMP || return 1 &
						;;
				oggdec)		for i in $(cat $TMP);do
							$OGGPLAYER --quiet -b 16 -R 1 -e 1 "$i" -o - | $SOX -t raw -s -w -c2 -r 44100 -x - -t ossdsp -w -s /dev/dsp > /dev/null 2>&1 || return 1 &
						done
						;;
				lame)		for i in $(cat $TMP);do
							$OGGPLAYER --quiet --decode "$i" - | $SOX -t wav - -t ossdsp -w -s /dev/dsp >/dev/null 2>&1 || return 1 &
						done
						;;
			esac
			;;
	esac
}
callsp(){	
	if $LSOF /dev/dsp >/dev/null ;then
		stopplay $RAWPLAYER || return 1
		stopplay $WAVPLAYER || return 1
		stopplay $MP3PLAYER || return 1
		stopplay $OGGPLAYER || return 1
		cd ${PR[4]}
	fi
}
stopplay(){
	if pidof "$1" >/dev/null 2>&1
	then
		case $(ps -t $TTY -o pid,fname,ruser,stat|grep $(basename $1)|grep $(whoami)|head -1|awk '{print $4}'|tr -d "<") in
			S|R)	if ! $DIALOG --menu\
					"Running $(basename $1) process" 9 40 2\
					"S "	"Kill        <SIGKILL> "\
					"P "	"Stop        <SIGSTOP> "\
					2> $TMP
				then
					return 1
				fi
				;;
			T)	if ! $DIALOG --menu\
					"Stopped $(basename $1) process." 9 40 2\
					"S "	"Kill        <SIGKILL> "\
					"C "	"Continue    <SIGCONT> "\
					2> $TMP
				then
					return 1
				fi
		esac
		case $(cat $TMP) in
			"S ")	kill -9  $($LSOF /dev/dsp|head -2|tail -1|awk '{print $2}') >/dev/null 2>&1 &
				sleep 1 && return 0
				;;
			"P ")	kill -19 $($LSOF /dev/dsp|head -2|tail -1|awk '{print $2}') >/dev/null 2>&1 &
				return 1
				;;
			"C ")	kill -18 $($LSOF /dev/dsp|head -2|tail -1|awk '{print $2}') >/dev/null 2>&1 &
				return 1
				;;
		esac
	fi
}
startrec(){
	cd ${PR[4]}
	case "$1" in
		raw)	$DIALOG --cr-wrap --infobox "Recording from /dev/dsp to ${PR[4]}rec.raw\nusing $1  (44100 Hz/16 bit/2 channel).\n\n          Hit Ctrl-C to stop recording." 8 60
			case "$(basename $RAWRECORDER)" in
				sox)	$RAWRECORDER -V -t ossdsp -w -s /dev/dsp -t raw -s -w -c2 -r 44100 -x ${PR[4]}rec.raw > $TMPO 2>&1 && outp
					;;
				brec)	$RAWRECORDER -r -S -b 16 -s 44100 ${PR[4]}rec.raw > $TMPO 2>&1
					outp
					;;
			esac
			;;
		wav)	$DIALOG --cr-wrap --infobox "Recording from /dev/dsp to ${PR[4]}rec.wav\nusing $1  (44100 Hz/16 bit/2 channel).\n\n          Hit Ctrl-C to stop recording." 8 60
			case "$(basename $WAVRECORDER)" in
				sox)	$WAVRECORDER -V -t ossdsp -w -s /dev/dsp -t wav -c2 -r 44100 -s ${PR[4]}rec.wav > $TMPO 2>&1 && outp
					;;
				wavr)	$WAVRECORDER -f ${PR[4]}rec.wav -r 44100 -c 2 -d 16 -s m > $TMPO 2>&1 && outp
					;;
				brec)	$WAVRECORDER -w -S -b 16 -s 44100 ${PR[4]}rec.wav > $TMPO 2>&1 && outp
					;;
			esac
			;;
	esac
}
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 gracetime=3 dev=${CDRW[3]} blank=all -force" > $TMPO 2>&1
			($CDRECORD gracetime=3 dev=${CDRW[3]} ${PR[14]} blank=all -force >> $TMPO 2>&1 && echo -n ) &
			tailbox $CDRECORD
		else	return 1
		fi
	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 gracetime=3 dev=${CDRW[3]} blank=fast -force" > $TMPO 2>&1
			($CDRECORD gracetime=3 dev=${CDRW[3]} ${PR[14]} blank=fast -force >> $TMPO 2>&1 && echo -n ) &
			tailbox $CDRECORD || return 1
		else
			return 1
		fi
	fi
}
blanktrack(){
	eject -t "${CDRW[0]}"
	echo "$CDRECORD gracetime=3 dev=${CDRW[3]} ${PR[14]} blank=track -eject" > $TMPO 2>&1 
	($CDRECORD gracetime=3 dev=${CDRW[3]} ${PR[14]} blank=track -eject >> $TMPO 2>&1 && echo -n ) &
	tailbox $CDRECORD
	eject -t "${CDRW[0]}"
}
unreservetrack(){
	eject -t "${CDRW[0]}"
	echo "$CDRECORD gracetime=3 dev=${CDRW[3]} ${PR[14]} blank=unreserve -eject" > $TMPO 2>&1
	($CDRECORD gracetime=3 dev=${CDRW[3]} ${PR[14]} blank=unreserve -eject >> $TMPO 2>&1 && echo -n  || return 1) &
	tailbox $CDRECORD
	eject -t "${CDRW[0]}"
}
blanktracktail(){
	eject -t "${CDRW[0]}"
	echo "$CDRECORD gracetime=3 dev=${CDRW[3]} ${PR[14]} blank=trtail -eject" > $TMPO 2>&1
	($CDRECORD gracetime=3 dev=${CDRW[3]} ${PR[14]} blank=trtail -eject >> $TMPO 2>&1 && echo -n  || return 1) &
	tailbox $CDRECORD
	eject -t "${CDRW[0]}"
}
blankunclose(){
	eject -t "${CDRW[0]}"
	echo "$CDRECORD gracetime=3 dev=${CDRW[3]} ${PR[14]} blank=unclose -eject" > $TMPO 2>&1
	($CDRECORD gracetime=3 dev=${CDRW[3]} ${PR[14]} blank=unclose -eject >> $TMPO 2>&1 && echo -n  || return 1) &
	tailbox $CDRECORD
	eject -t "${CDRW[0]}"
}
blanklastsession(){
	eject -t "${CDRW[0]}"
	echo "$CDRECORD gracetime=3 dev=${CDRW[3]} ${PR[14]} blank=session -eject" > $TMPO 2>&1
	($CDRECORD gracetime=3 dev=${CDRW[3]} ${PR[14]} blank=session -eject >> $TMPO 2>&1 && echo -n ) &
	tailbox $CDRECORD
	eject -t "${CDRW[0]}"
}
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 -fix gracetime=3 dev=${CDRW[3]} ${PR[14]}" > $TMPO 2>&1
			($CDRECORD -fix gracetime=3 dev=${CDRW[3]} ${PR[14]} >> $TMPO 2>&1 && echo -n ) &
			tailbox $CDRECORD
		else	return 1
		fi
	fi
}
cleanup(){
	$DIALOG --checklist "Select items for <rm -rf>" 16 50 9\
		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\
		9 "${PR[4]}*.ogg" 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
	grep -q "9" $TMPO && rm -rf ${PR[4]}*.ogg
}
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  >> $TMPO 2>&1
	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
}
src_tcdrrc(){
	. $TCDRRC
}

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
}
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
}
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]}
}
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
}
noswm(){
	if [ $2 == "none" ] ;then
		$DIALOG --msgbox "No $1 found" 6 50
		return 1
	else
		if [ ! -z $3 ] ;then
			$DIALOG --cr-wrap --infobox "  $3..." 5 50
		fi
		return 0
	fi
}
nosfilesm(){
	if ! ls ${PR[4]}*.$1 > /dev/null 2>&1 ;then
		$DIALOG --msgbox "No .$1 files found in ${PR[4]}" 6 65
		return 1
	else
		return 0
	fi
}
noisofm(){
	if [ ! -f ${PR[0]}${PR[1]} ] ;then
		$DIALOG --msgbox "No ${PR[1]} file found in ${PR[0]}" 6 65
		return 1
	else
		return 0
	fi
}
cdrootemptym(){

	if [ -z $(/bin/ls ${PR[5]}*) ] ;then
		$DIALOG --msgbox "No files found in ${PR[5]}" 6 65
		return 1
	else
		return 0
	fi 2>/dev/null
}

dirsub(){
	if ! $DIALOG --menu\
		"FS Directory Operations <${PR[5]}>" 11 77 4\
		"I "  "Directory -> ISO                 <mkisofs>                      "\
		"C "  "Directory -> ISO  -> CD-R/CD-RW  <mkisofs | cdrecord>           "\
		"Z "  "Directory -> ZISO                <mkzftree| mkisofs -z>         "\
		"T "  "Directory -> ZISO -> CD-R/CD-RW  <mkzftree|mkisofs -z|cdrecord> "\
		2> $TMP
	then mainm
	fi
	case $(cat $TMP) in
		"I ")	dir2i
			dirsub
			;;
		"C ")	dir2i2cd
			dirsub
			;;
		"Z ")	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 || dirsub
				case $(cat $TMP) in
					"1" )	dirsub
						;;
					"2" )	inpvid || dirsub
						mkziso || dirsub
						;;
				esac
			else
				inpvid || dirsub
				mkziso || dirsub
			fi
			dirsub
			;;
		"T ")	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 || dirsub
				case $(cat $TMP) in
					"1" )	dirsub
						;;
					"2" )	inpvid || dirsub
						mkziso || dirsub
						;;
				esac
			else
				inpvid || dirsub
				mkziso || dirsub
			fi
			cdrec
			dirsub
			;;
	esac
}
dcdsub(){
	if ! $DIALOG --menu\
		"Data CD Options (${CDROM[0]}  ->  ${CDRW[0]})" 13 77 6\
        	"D " "Data CD   ->  ISO                   <dd>                       "\
        	"R " "Data CD   ->  ISO                   <readcd> (try if dd fails) "\
        	"I " "ISO/ZISO  ->  CD-R/CD-RW            <cdrecord>                 "\
        	"B " "ISO/ZISO  ->  Overburn CD-R/CD-RW   <cdrecord -dao -overburn>  "\
	        "C " "Data CD   ->  CD-R/CD-RW            <cdrdao copy>              "\
        	"O " "Data CD   ->  CD-R/CD-RW            <cdrdao copy --on-the-fly> "\
		2> $TMP
	then mainm
	fi
	case $(cat $TMP) in
		"D ")	cd2i_dd
			dcdsub
			;;
		"R ")	cd2i_rcd
			dcdsub
			;;
		"I ")	i2dcd
			dcdsub
			;;
		"B ")	overburn
			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      "\
        	"Z "	"Compressed Mixed Mode CD     ->          CD-R/CD-RW      "\
        	"I "	"Display track info on medium in ${CDRW[1]} "\
		2> $TMP
	then mainm
	fi
	case $(cat $TMP) in
		"X ")	mixcd2cd
			mixcdsub
			;;
		"Z ")	mixcd2cd z
			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     <$(basename $CDRIPPER) | cdrdao>       "\
		"S "  "Audio CD  ->  Separate WAVs  <$(basename $CDRIPPER)>                "\
		"R "  "Audio CD  ->  RAW image      <$(basename $CDRIPPER) + toc>          "\
		"W "  "Audio CD  ->  WAV image      <$(basename $CDRIPPER) + toc>          "\
		"M "  "Audio CD  ->  MP3 tracks     <$(basename $CDRIPPER) | $(basename $MP3ENCODER)>     "\
		"P "  "CD Player                    <$(basename $CDPLAYER)>                  "\
		"X "  "Mixer                        <$(basename $MIXER)>                     "\
		2> $TMP
	then
		mainm
	fi
	case $(cat $TMP) in
		"C ")	cd ${PR[4]}
			acd2acd_t
			acdsub
			;;
		"O ")	acd2acd
			acdsub
			;;
		"A ")	cd ${PR[4]}
			is_audio ${CDROM[0]} || ejecta || acdsub
			infocd || acdsub
			acd2acd_$(basename $CDRIPPER)
			acdsub
			;;
		"S ")	cd ${PR[4]}
			acd2wavs_$(basename $CDRIPPER)
			acdsub
			;;
		"R ")	cd ${PR[4]}
			is_audio ${CDROM[0]} || ejecta || acdsub
			infocd || acdsub
			acd2raw_$(basename $CDRIPPER)
			acdsub
			;;
		"W ")	cd ${PR[4]}
			is_audio ${CDROM[0]} || ejecta || acdsub
			infocd || acdsub
			acd2wav_$(basename $CDRIPPER)
			acdsub
			;;
		"M ")	acd2mp3_$(basename $MP3ENCODER)
			acdsub
			;;
		"P ")	clear
			$CDPLAYER ${CDRW[0]}
			acdsub
			;;
		"X ")	$MIXER
			acdsub
			;;
	esac
}
rawsub(){
	rm -f $TMPO
	if ! $DIALOG --menu\
		"RAW/CDR Options (${PR[4]}*.raw)" 13 70 6\
		"C "  "RAW/CDR    ->    CD-R/CD-RW             <cdrdao>   "\
		"W "  "RAW/CDR    ->    WAV                    <sox>      "\
		"M "  "RAW/CDR    ->    MP3                    <$(basename $MP3ENCODER)> "\
		"P "  "Player                                  <sox>      "\
		"S "  "Record from /dev/dsp                    <$(basename $RAWRECORDER)>    "\
		"X "  "Mixer                                   <$(basename $MIXER)>    "\
		2> $TMP
	then	
		mainm
	fi
	case $(cat $TMP) in
		"C ")	cd ${PR[4]}
			nosfilesm raw || rawsub
			raw2cd
			rawsub
			;;
		"W ")	cd ${PR[4]}
			nosfilesm raw || rawsub
			noswm converter $RAW2WAVCONVERTER Converting || rawsub
			raw2wav_$(basename $RAW2WAVCONVERTER)
			rawsub
			;;
		"M ")	cd ${PR[4]}
			nosfilesm raw || rawsub
			noswm encoder $MP3ENCODER Encoding || rawsub
			raw2mp3_$(basename $MP3ENCODER)
			rawsub
			;;
		"P ")	cd ${PR[4]}
			nosfilesm raw || rawsub
			noswm players $RAWPLAYER || rawsub
			startplay raw || rawsub
			rawsub
			;;
		"S ")	startrec raw || rawsub
			rawsub
			;;
		"X ")	$MIXER
			rawsub
			;;
	esac
}
wavsub(){
	rm -f $TMPO
	if ! $DIALOG --menu\
		"WAV Options (${PR[4]}*.wav)" 13 65 6\
		"C "  "WAV  ->  CD-R/CD-RW            <cdrdao>   "\
		"R "  "WAV  ->  RAW                   <$(basename $WAV2RAWCONVERTER)>      "\
		"M "  "WAV  ->  MP3                   <$(basename $MP3ENCODER)> "\
		"P "  "Player                         <$(basename $WAVPLAYER)>      "\
		"S "  "Record from /dev/dsp           <$(basename $WAVRECORDER)>      "\
		"X "  "Mixer                          <$(basename $MIXER)>    "\
		2> $TMP
	then
		mainm
	fi
	case $(cat $TMP) in
		"C ")	cd ${PR[4]}
			nosfilesm wav || wavsub
			wav2cd
			wavsub
			;;
		"R ")	cd ${PR[4]}
			nosfilesm wav || wavsub
			noswm converter $WAV2RAWCONVERTER Converting || wavsub
			wav2raw_$(basename $WAV2RAWCONVERTER)
			wavsub
			;;
		"M ")	cd ${PR[4]}
			nosfilesm wav || wavsub
			noswm encoder $MP3ENCODER Encoding || wavsub
			wav2mp3_$(basename $MP3ENCODER)
			wavsub
			;;
		"P ")	cd ${PR[4]}
			nosfilesm wav || wavsub
			noswm players $WAVPLAYER || wavsub
			startplay wav || wavsub
			wavsub
			;;
		"S ")	noswm recorders $WAVRECORDER Recording || wavsub
			startrec wav || wavsub
			wavsub
			;;
		"X ")	$MIXER
			wavsub
			;;
	esac
}
mp3sub(){
	rm -f $TMPO
	if ! $DIALOG --menu\
		"MP3 Options (${PR[4]}*.mp3)" 12 65 5\
		"C "  "MP3    ->    CD-R/CD-RW     <$(basename $MP3DECODER) | cdrdao> "\
		"R "  "MP3    ->    RAW            <$(basename $MP3DECODER) | sox>    "\
		"W "  "MP3    ->    WAV            <$(basename $MP3DECODER)>          "\
		"P "  "Player                      <$(basename $MP3PLAYER)>          "\
		"X "  "Mixer                       <$(basename $MIXER)>           "\
		2> $TMP
	then
		mainm
	fi
	case $(cat $TMP) in
		"C ")	cd ${PR[4]}
			nosfilesm mp3 || mp3sub
			noswm decoders $MP3DECODER || mp3sub
			rm -f ${PR[4]}*.wav
			mp32wav_$(basename $MP3DECODER)
			mktoc *.wav
			dao " " $TMP.toc "a"
			mp3sub
			;;
		"R ")	cd ${PR[4]}
			nosfilesm mp3 || mp3sub
			noswm decoders $MP3DECODER Decoding || mp3sub
			mp32raw_$(basename $MP3DECODER)
			mp3sub
			;;
		"W ")	cd ${PR[4]}
			nosfilesm mp3 || mp3sub
			noswm decoders $MP3DECODER Decoding || mp3sub
			mp32wav_$(basename $MP3DECODER)
			mp3sub
			;;
		"P ")	cd ${PR[4]}
			nosfilesm mp3 || mp3sub
			noswm players $MP3PLAYER || mp3sub
			startplay mp3 || mp3sub
			mp3sub
			;;
		"X ")	$MIXER
			mp3sub
			;;
	esac
}
oggsub(){
	rm -f $TMPO
	if ! $DIALOG --menu\
		"OGG Options (${PR[4]}*.ogg)" 12 65 5\
		"C "  "OGG    ->    CD-R/CD-RW        <$(basename $OGGDECODER) | cdrdao> "\
		"R "  "OGG    ->    RAW               <$(basename $OGGDECODER)>          "\
		"W "  "OGG    ->    WAV               <$(basename $OGGDECODER)>          "\
		"P "  "Player                         <$(basename $OGGPLAYER)>          "\
		"X "  "Mixer                          <$(basename $MIXER)>           "\
		2> $TMP
	then
		mainm
	fi
	case $(cat $TMP) in
		"C ")	cd ${PR[4]}
			nosfilesm ogg || oggsub
			noswm decoders $OGGDECODER Decoding || oggsub
			rm -f ${PR[4]}*.wav
			ogg2wav_$(basename $OGGDECODER)
			mktoc *.wav
			dao " " $TMP.toc "a"
			oggsub
			;;
		"R ")	cd ${PR[4]}
			nosfilesm ogg || oggsub
			noswm decoders $OGGDECODER Decoding || oggsub
			ogg2raw_$(basename $OGGDECODER)
			oggsub
			;;
		"W ")	cd ${PR[4]}
			nosfilesm ogg || oggsub
			noswm decoders $OGGDECODER Decoding || oggsub
			ogg2wav_$(basename $OGGDECODER)
			oggsub
			;;
		"P ")	cd ${PR[4]}
			nosfilesm ogg || oggsub
			noswm players $OGGPLAYER || oggsub
			startplay ogg || oggsub
			oggsub
			;;
		"X ")	cd ${PR[4]}
			$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/ZISO               "\
        	"D "	"  Data CD / ISO     ->    CD-R/CD-RW/ISO/ZISO  +  Overburn  "\
		"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
		callsp || mainm
		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
}


	detect_sw >/dev/null 2>&1
	startscr
	detect_scsi || detect_ide
#	src_tcdrrc			# If auto-detection fails, uncomment this line and edit /etc/tcdrrc
	ckpath
	splash
	mainm

	exit $?


