#!/bin/sh
#(c) Copyright 2006, 2007 Barry Kauler.
#Lesser GPL licence v2 (http://www.fsf.org/licensing/licenses/lgpl.html). 2007 www.puppylinux.com
#simple script to burn an iso file to cd, using cdrecord.
#7Sept2007: cdecord -scanbus bugfix, plus overall improvements.
#v3.02 2Nov2007 BK: bugfix. v3.94 24dec2007: no /dev/hd*
#Translated for Russian by Pro.

MEDIATYPE="`Xdialog --wmclass "mini-cd" --title "Burniso2cd" --stdout --menubox "Добро пожаловать в маленькую программу для записи CD/DVD дисков!\nПожалуйста, выберите, какой диск вы хотите записать - CD или DVD.\nЗамечание: DVD всегда записываются 'открытыми' что позволит\nиспользовать их в Puppy как нормальные или мультисессионные,\nв то время, как для CD дисков можно выбрать - записывать диск закрытым\nили открытым." 0 0 5 CD "CD-R или CD-RW (должен быть пустым)" DVD "DVD-R или DVD-RW (должен быть пустым)"`"
[ ! $? -eq 0 ] && exit


SELECTIONS="`probedisk | grep '|cdrom|' | grep '/dev/' | cut -f 1,3 -d '|' | tr " " '_' | tr -s '_'`"
SELECTIONX="`echo "$SELECTIONS" | tr '|' " " | tr "\n" " "`"

if [ "$SELECTIONX" = "" ];then
 xmessage "Извините, не обнаружен привод CD/DVD"
 exit
fi

BURNERDRIVE="`Xdialog --wmclass "mini-cd" --title "Burniso2cd: Выбор привода" --stdout --menubox "Выберите CD/DVD привод для записи:" 400x200 5 $SELECTIONX 2> /dev/null`"
[ ! $? -eq 0 ] && exit

[ ! -f /etc/cdburnerdevice ] && echo -n "$BURNERDRIVE" | sed -e 's/\/dev\///g' > /etc/cdburnerdevice

ISOFILE="`Xdialog --wmclass "mini-cd" --backtitle "Пожалуйста, выберите iso-файл..." --title "Burniso2cd: Выбор iso - файла" --stdout --no-buttons --fselect "*.iso" 0 0`"
if [ ! $? -eq 0 ];then
 exit
fi

CDR="$BURNERDRIVE"
CDDESCR="`echo "$SELECTIONS" | grep "$CDR" | cut -f 2 -d '|'`"

while [ ! "`mount | grep "$CDR"`" = "" ];do
 xmessage -bg "#ff8080" -center -name "burniso2cd" -title "Burniso2cd: ОШИБКА" "Привод $CDR CD/DVD известен как:
 $CDDESCR
сейчас смонтирован.
Используйте MUT или Pmount для размонтирования.

Пожалуйста размонтируйте привод CD, и нажмите кнопку OK ..."
done

if [ "$MEDIATYPE" = "CD" ];then
 Xdialog --wmclass "mini-cd" --title "Burniso2cd" --stdout --ok-label "ОБЫЧНЫЙ" --cancel-label "МУЛЬТИСЕССИЯ"  --yesno "Вы выбрали файл iso:
 $ISOFILE

Вы хотите записать мультисессионный CD?
Мультисессионный CD остается \"открытым\" и в будущем
данные могут быть добавлены. Файл iso который вы выбрали
будет записан как первая дорожка.
Замечание: это экспериментальная опция для создания Puppy live-CD,
позволяющая записывать на CD персональные данные в виде сохранённых
сессий и при этом для их хранения жесткий или usb диски не потребуются.

Пожалуйста выберите 'ОБЫЧНЫЙ' если вы не хотите создавать
мультисессионный CD .

Нажмите кнопку 'ОБЫЧНЫЙ' для нормальной записи...
Нажмите кнопку 'МУЛЬТИСЕССИЯ' для мультисессии..." 0 0

 RETVAL=$?
else
 RETVAL=12
fi

case $RETVAL in
 0) #normal cd
  BURNMULTI="-dao" #v2.02 added -dao
  BURNMSG=""
  ;;
 1) #multi cd
  BURNMULTI="-multi -tao -pad" #v2.02 added -tao -pad
  BURNMSG=""
  ;;
 12) #multi dvd
  BURNMULTI="yes"
  BURNMSG="(blank DVD-R. A DVD+/-RW will be fast-wiped if it has data)"
  ;;
 *)
  exit
  ;;
esac

RECHECK="yes"
BURNSPEED="10"

while [ 1 ];do #burn-again-loop
  BURNSPEED="`Xdialog --wmclass "mini-cd" --title "Burniso2cd: Прожиг $MEDIATYPE" --stdout --spinbox "Пожалуйста вставьте чистый $MEDIATYPE в привод $CDR
$BURNMSG
(который опознан как: ${CDDESCR})

Нажмите кнопку 'OK' ..." 0 0 4 32 $BURNSPEED "Установка скорости записи"`"

 [ ! $? -eq 0 ] && exit

 sync
 if [ "$MEDIATYPE" = "CD" ];then
  if [ ! "`echo "$CDR" | grep '/dev/hd'`" = "" ];then
   DEVDEV="ATAPI:$CDR"
  else
   DEVDEV="$CDR"
  fi
  echo "Выполняется:"
  echo " cdrecord $BURNMULTI -data -eject -v speed=$BURNSPEED dev=$DEVDEV $ISOFILE"
  rxvt -name burniso2cd -bg orange -geometry 80x10 -e cdrecord $BURNMULTI -data -eject -v speed=$BURNSPEED dev=$DEVDEV "$ISOFILE"
 else #dvd
  echo "Выполняется:"
  echo " growisofs -speed=$BURNSPEED -Z $CDR=$ISOFILE"
  rxvt -name burniso2cd -bg orange -geometry 80x10 -e growisofs -speed=$BURNSPEED -Z $CDR="$ISOFILE"
 fi
 sync
 echo "...done"

 #v2.10 kirk contributed this...
 # ******Проверка записанных данных******
 DEVNAME="`echo -n "$CDR" | grep '/dev' | cut -f 3 -d '/'`"
 if [ ! "$DEVNAME" = "" -a "$RECHECK" = "yes" ];then
  Xdialog --wmclass "mini-cd" --title "Burniso2cd: Завершено" --stdout --yesno "Вы хотите проверить записанные данные? 
Это займёт некоторое время, в зависимости от размера iso файла." 0 0
  if  [ "$?" = "0" ] ;then  
   xmessage -bg "#80ff80" -center -name "burniso2cd" -title "Burniso2cd: Проверка" -buttons "OK:10" "Убедитесь, что привод CD/DVD закрыт,
и нажмите OK"
   if [ "$( md5sum $ISOFILE | cut -f 1 -d " " )" = "$(dd if=$CDR | head -c `stat --format=%s $ISOFILE` | md5sum | cut -f 1 -d " " )" ] ;then 
    xmessage -bg "#80ff80" -center -name "burniso2cd" -title "Burniso2cd: Проверка" -buttons "OK:10" "Проверка данных завершена успешно!"
   else
    xmessage -bg "#ffc0c0" -center -name "burniso2cd" -title "Burniso2cd: Проверка" -buttons "OK:10" "Проверка не пройдена. Вы должны повторить запись"
   fi
  else
   RECHECK="no" #do not check if doing repeat burns.
  fi
 fi

 eject $CDR
 Xdialog --wmclass "mini-cd" --title "Burniso2cd: Завершено" --stdout --ok-label "ЗАВЕРШИТЬ" --cancel-label "ПОВТОРИТЬ" --yesno "Если все хорошо, ваш iso файл
$ISOFILE
записан на $MEDIATYPE!

Если вы хотите повторить запись файла на $MEDIATYPE,
нажмите кнопку 'ПОВТОРИТЬ' ...

Для выхода нажмите кнопку 'ЗАВЕРШИТЬ' ..." 0 0
 [ $? -ne 1 ] && break
done #burn-again-loop

###END###
