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


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 (空CDが必要)" DVD "DVD-R または DVD-RW (空DVDが必要)"`"
[ ! $? -eq 0 ] && exit


if [ "$MEDIATYPE" = "CD" ];then
 #SCSIDRIVES="`cdrecord -scanbus 2>&1 | grep '[0-9],[0-9],[0-9]' | grep -v '*$' | tr '|' " " | tr '\t' '|' | cut -f 2,3 -d '|' | tr -s " " | tr "'" '_' | tr " " '_' | tr -s '_'`" #'
 #v2.20 bugfix...
 SCSIDRIVES="`cdrecord -scanbus 2>&1 | grep '[0-9],[0-9],[0-9]' | grep -v '\*$' | cut -f 2 | sed -e 's/ [0-9]*) /|/' | tr "'" '_' | tr ' ' '_' | tr -s '_'`" #'geany
 
 ALLDRIVES="`probedisk | grep '|cdrom|' | grep '/dev/' | cut -f 1,3 -d '|' | tr " " '_' | tr -s '_'`"
else
 ALLDRIVES="`probedisk | grep '|cdrom|' | grep '/dev/' | cut -f 1,3 -d '|' | tr " " '_' | tr -s '_'`"
 SCSIDRIVES="`probedisk | grep -E '/dev/scd|/dev/sr' | cut -f 1,3 -d '|' | tr " " '_' | tr -s '_'`"
fi
SELECTIONS="$ALLDRIVES
$SCSIDRIVES"
SELECTIONX="`echo "$SELECTIONS" | tr '|' " " | tr "\n" " "`"

if [ "$SELECTIONX" = "" ];then
 xmessage "Sorry, no CD/DVD drive detected"
 exit
fi

BURNERDRIVE="`Xdialog --wmclass "mini-cd" --title "Burniso2cd: Choose burner drive" --stdout --menubox "書き込む CD/DVD ドライブを選択して下さい。\n
（/dev/scd0 や /dev/sr0 形式は SCSI/SATA/USB ドライブ、\n
 /dev/hda 形式は IDE/ATAPI ドライブ、\n
 0,0,0 形式は同じドライブの代替 SCSI スペックです\n
  -- 標準ドライブ名が使えない時に試して下さい。）" 400x200 5 $SELECTIONX 2> /dev/null`"
[ ! $? -eq 0 ] && exit

if [ "`echo -n "$BURNERDRIVE" | grep '/dev/'`" != "" ];then
 #better not write 0,0,0 format...
 [ ! -f /etc/cdburnerdevice ] && echo -n "$BURNERDRIVE" | sed -e 's/\/dev\///g' > /etc/cdburnerdevice
fi

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は \"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###
