#!/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*


MEDIATYPE="`Xdialog --wmclass "mini-cd" --title "Burniso2cd" --stdout --menubox "この小さなCD/DVD作成プログラムにようこそ！\nCDまたはDVDのどちらか作成したいメディアを選んで下さい。\n注意。DVDはパピーがノーマルあるいはマルチセッションで\n使えるために常にオープン(open)で作成されます。\nそれに反してCDは閉じる(closed)かオープン(open)の\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
 gxmessage "残念。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
 gxmessage -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は \"open\" のままで後から更にトラックを追加
できる事です。選択したISOファイルは最初のトラックに焼かれます。
注意。これはセッションの書き込みをCDに戻すようにするパピーライブCD
の試験的オプションです。これで個人データはCDに保存され、
ハードディスクやUSBメモリカードが必要なくなります。

CDマルチセッションを焼くのに（明確にマルチセション用ISOであるような）
特別の理由がない限り「ノーマル」を選択して下さい。

ノーマルで焼くには「ノーマル」ボタンをクリック...
マルチセッションで焼くには「マルチ」ボタンをクリック..." 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: Burn $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 "Now executing:"
  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 "Now executing:"
  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...
 # ******Verify burn******
 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  
   gxmessage -bg "#80ff80" -center -name "burniso2cd" -title "Burniso2cd: 書き込み確認" -buttons "OKAY: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 
    gxmessage -bg "#80ff80" -center -name "burniso2cd" -title "Burniso2cd: 書き込み確認" -buttons "OKAY:10" "正しく書き込まれています！"
   else
    gxmessage -bg "#ffc0c0" -center -name "burniso2cd" -title "Burniso2cd: 書き込み確認" -buttons "OKAY: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 に書き込まれました！

ISOファイルをもう１枚 $MEDIATYPE に書き込むなら
「リピート」ボタンをクリック...

あるいは終了するには「完了」をクリック..." 0 0
 [ $? -ne 1 ] && break
done #burn-again-loop

###END###
