#!/bin/sh
#(c) Copyright Barry Kauler 2006 www.puppylinux.com
#2007 Lesser GPL licence v2 (http://www.fsf.org/licensing/licenses/lgpl.html)

# BK july 2007:
#/usr/sbin/puppyinstaller-217 is heavily modified by Dougal (based on
# puppyinstaller from v2.14). Was used in 216 and 217.
#/usr/sbin/puppyinstaller-bk is the v2.14 one with minimal mods. for 2.17.1+
#aug 2007 updated for 2.20: 'root=/dev/ram0' removed as using initramfs.

NEWVER="`cat /etc/puppyversion`"
#mount > /etc/mtab   #v2.10 remove.
KERNVER="`uname -r`"

#USBINFO="`lspci -i /usr/share/pci-usb-pcmcia.ids`"

#v2.10
. /etc/rc.d/PUPSTATE

fsfunc() #f.s. type param passed in
{
 FSTYPE="$1"
 [ "$FSTYPE" = "Ext2" ] && FSTYPE="ext2"
 [ "$FSTYPE" = "ReiserFS" ] && FSTYPE="reiserfs"
 [ "$FSTYPE" = "Ext3" ] && FSTYPE="ext3"
 [ "$FSTYPE" = "FAT16" ] && FSTYPE="vfat"
 [ "$FSTYPE" = "FAT32" ] && FSTYPE="vfat"
 [ "$FSTYPE" = "NTFS" ] && FSTYPE="ntfs"
 [ "$FSTYPE" = "ISO9660" ] && FSTYPE="iso9660"
}


ispupfunc() #fstype partition
{
 PUPSFS=""
 PUPVEROLD=0
 [ ! $2 ] && return 0
 mkdir /mnt/$2 2> /dev/null
 #cannot test for /dev/$2 as mount reports ntfs device is /dev/fuse...
 #v2.12 latest ntfs-3g driver works with mount properly, so special handling
 #no longer necessary, but still here...
 ISPUPMNTPT="`mount | grep "/dev/$2" | tr -s " " | cut -f 3 -d " "`"
 #v2.02...
 #[ "$ISPUPMNTPT" = "" ] && ISPUPMNTPT="`ps -e | grep -o ntfs\-3g.* | grep "/dev/$2" | sed -e 's/[^a-zA-Z0-9/._\-]/ /g' | tr -s ' ' | tr ' ' "\n" | grep '^/mnt/'`"
 [ "$ISPUPMNTPT" = "" ] && ISPUPMNTPT="`ps -e | grep -o 'ntfs\-3g.*' | grep "/dev/$2" | tr '\t' ' ' | tr -s ' ' | tr ' ' '\n' | grep '^/mnt/'`"
 
 if [ "$ISPUPMNTPT" = "" ];then
  ISPUPMNTPT="/mnt/$2"
  mount -t $1 /dev/$2 /mnt/$2
 fi
  if [ $? -eq 0 ];then
   ISFILE="`ls -1 $ISPUPMNTPT/pup_[0-9][0-9][0-9].sfs | head -n 1`"
   [ ! "$ISFILE" = "" ] && PUPVEROLD=`basename $ISFILE | cut -f 2 -d '_' | cut -f 1 -d '.'`
   if [ -f $ISPUPMNTPT/etc/puppyversion ];then
    PUPVEROLD=`cat $ISPUPMNTPT/etc/puppyversion`
    #there is a bug in prev installer, put 0 into puppyversion...
    PREVVER=`expr $NEWVER \- 1`
    [ $PUPVEROLD -eq 0 ] && PUPVEROLD=$PREVVER
   fi
   [ -f $ISPUPMNTPT/usr_cram.fs ] && PUPVEROLD=108
   umount /dev/$2
  fi
 return $PUPVEROLD
}

gpartedfixusbfunc() { #params: $DESTPART $DESTFS
 GPDRV="`echo -n "$1" | sed -e 's/[0-9]//g'`"
 gparted /dev/$GPDRV &
 sleep 2
 gxmessage -bg '#ba55d3' -center -title "パピーユニバーサルインストーラ" "GPartedはパーティションマネージャーで、パピーバージョン２からご利用出来ますが、パピーバージョン２の「ベアーボン」
のリリース版には含まれていないかも分かりませんので、その場合、
「PupGet」パッケージマネージャでそれをインストします。インストされていれば、「 GParted」は
パーティションの削除、生成、及びサイズの変更をする簡単なツールです。

もしも、あなたがUSBフラッシュドライブにパピーをインストしたが、ブート不能の場合、
USBフラッシュドライブに存在するパーティションがパソコンのBIOSかSyslinuxに混乱をきたしている
かも分かりません。個人的には、「GParted」を利用してUSBドライブのパーティションを
全部削除して、新しいパーティションを生成することで問題を解決することが出来ました。
このやり方は非常に簡単です。「GParted」が実行している時、
　１、USBドライブのすべてのパーティションを削除します。
　２、新しいFAT16のプライマリーパテぃションをドライブ全体に生成します。
　３、「Apply」ボタンをクリックして、変更をUSBドライブに書き込みます。
　４、「boot」コンフィグフラッグをセットします（パーティションにマウスの
　　　右ボタンをクリックして「manage flags」を選択します）。
 
 「GParted」がインストされて、実行していれば、上記のことが出来ます。
 「GParted 」を終了するとパピーユニバーサルインストーラに戻ります..." &
 MSGID=$!
 while [ 1 ];do
  [ "`pidof gparted | tr "\n" '|'`" = "|" ] && break
  sleep 1
 done
 [ ! "`which gparted`" = "" ] && kill $MSGID 2>/dev/null
}

fixusbfunc() { #params: $DESTPART $DESTFS
 echo '#!/bin/sh
DESTPART="$1" #partition being installed to
DESTFS="$2"   #filesystem of destination partition
echo "This little section of the Puppy Universal Installer is currently only"
echo "for fixing USB Flash or CF-card-in-IDE-adaptor, after you have gone thru"
echo "all the steps but it still will not boot."
echo
echo "You are trying to install to $DESTPART, but it is not booting..."
echo "Well, I am assuming that the BIOS in your PC is able to boot from USB."
echo "-- for CF-IDE the drive looks like an ordinary hard drive, so that should"
echo "   be okay for any BIOS."
echo
echo "This is the first release of this script, and it is a bit limited..."
echo "and only handles a partition with a msdos/vfat filesystem."
if [ "$DESTFS" = "vfat" ];then
 echo "...which is okay, $DESTPART does have a $DESTFS filesystem."
 echo "   But, we will now wipe it and recreate it."
else
 echo "...currently $DESTPART has a $DESTFS filesystem."
 echo "   This script is not yet designed for that, so cannot continue."
 echo
 echo -n "Press ENTER key to exit: "
 read nogo
 exit
fi
echo
echo "Please be sure that you are wiping the right partition!!!"
echo "Everything in $DESTPART is going to be wiped. If you do not want that,"
echo "press any letter on the keyboard then ENTER key, or"
echo -n "Press ENTER key only to continue script: "
read querygo
echo
echo "Recreating msdos filesystem on $DESTPART..."
mkdosfs /dev/$DESTPART
sync
echo "Fixing the Master Boot Record (MBR)..."
DESTDRV="`echo -n "$DESTPART" | cut -b 1-3`"
dd if=/usr/lib/syslinux/mbrfat.bin of=/dev/$DESTDRV
sync
echo "...done"
echo
echo "Okay, we can now go back to the main part of the Puppy Universal"
echo "Installer and install Puppy to the $DESTPART partition."
echo -n "Press ENTER key to continue: "
read yesgo
' > /tmp/fixusb.sh
 chmod 755 /tmp/fixusb.sh
 rxvt -bg "pink" -title "パピーユニバーサルインストーラ" -geometry 80x25 -e /tmp/fixusb.sh
}

unmountcdfunc() {
 if [ ! "$CDDRIVE" = "" ];then
  if [ ! "`mount | grep "/dev/$CDDRIVE"`" = "" ];then
   rox -D "`mount | grep "/dev/$CDDRIVE" | tr -s " " | cut -f 3 -d " "`"
   #do not kill any processes
   sync
   umount /dev/$CDDRIVE 2> /dev/null
   #mount > /etc/mtab  #v2.10 remove.
   [ "`mount | grep "/dev/$CDDRIVE"`" = "" ] && eject /dev/$CDDRIVE
  fi
 fi
}

PMEDIA="`Xdialog --wmclass "gtkdialog2" --left --title "Puppy Universal Installer" --no-tags --stdout --menubox "パピーユニバーサルインストーラへようこそ!\nパピーを取り外しの出来るメディアにインストしたければ、例えば\nUSBフラッシュ或いはハードドライブ、フロッピー・ディスク、Zipディスク、\nLS-120ディスクなど、続ける前に、今すぐメディアを挿入してください。\n\n繰り返します。今すぐメディアを挿入してください！\nそして、パピーをインストールするメディアを選択して下さい:" 0 0 8 usbflash "USBフラッシュドライブ" usbhd "USBハード・ドライブ" usb2ideflash "USB CF フラッシュドライブ、後ほどCFをIDEアダプターへ移します" ideflash "IDEフラッシュドライブ (IDEアダプター内のCFカード)" idehd "IDE(ATA)内装ハードドライブ" idezip "内装 (IDE) ZIP 或いは LS120 ドライブ" satahd "SATA内装ハードドライブ" scsihd "SCSI内装ハードドライブ"`"
[ ! $? -eq 0 ] && exit
[ "$PMEDIA" = "" ] && exit

FINALPMEDIA="$PMEDIA"
if [ "$PMEDIA" = "usb2ideflash" ];then
 PMEDIA="usbflash"
 FINALPMEDIA="ideflash"
fi

PROBEDISK="`probedisk 2> /tmp/probediskerr.txt`"
case $PMEDIA in
 usbflash)
  USBDRIVES="`echo "$PROBEDISK" | grep 'Direct\-Access' | cut -f 3 -d '/' | cut -f 1 -d '|' | tr "\n" " "`"
  SELECTIONS=""
  for ONEUSB in $USBDRIVES
  do
   [ "`cat /sys/block/$ONEUSB/removable`" != "1" ] && continue
   USBINFO="`echo "$PROBEDISK" | grep "/dev/$ONEUSB" | head -n 1 | cut -f 3 -d '|' | tr '$' " " | tr -s " " | sed -e 's/ $//g'`"
   USBSIZE="`disktype /dev/$ONEUSB | grep "Block device" | cut -f 2 -d ',' | tr -s " " | cut -f 1-4 -d " "`"
   SELECTIONS="${SELECTIONS} $ONEUSB \"${USBINFO}, ${USBSIZE}\""
  done
  ;;
 usbhd)
  USBDRIVES="`echo "$PROBEDISK" | grep 'Direct\-Access' | cut -f 3 -d '/' | cut -f 1 -d '|' | tr "\n" " "`"
  SELECTIONS=""
  for ONEUSB in $USBDRIVES
  do
   [ "`cat /sys/block/$ONEUSB/removable`" != "0" ] && continue
   USBINFO="`echo "$PROBEDISK" | grep "/dev/$ONEUSB" | head -n 1 | cut -f 3 -d '|' | tr '$' " " | tr -s " " | sed -e 's/ $//g'`"
   USBSIZE="`disktype /dev/$ONEUSB | grep "Block device" | cut -f 2 -d ',' | tr -s " " | cut -f 1-4 -d " "`"
   SELECTIONS="${SELECTIONS} $ONEUSB \"${USBINFO}, ${USBSIZE}\""
  done
  ;;
 ideflash)
  #find ide hard drives...
  HDDRIVES="`echo "$PROBEDISK" | grep '|disk|' | grep '/dev/hd' | cut -f 3 -d '/' | cut -f 1 -d '|' | tr "\n" " "`"
  SELECTIONS=""
  for ONEHD in $HDDRIVES
  do
   HDINFO="`echo "$PROBEDISK" | grep "/dev/$ONEHD" | head -n 1 | cut -f 3 -d '|' | tr '$' " " | tr -s " " | sed -e 's/ $//g'`"
   HDSIZE="`disktype /dev/$ONEHD | grep "Block device" | cut -f 2 -d ',' | tr -s " " | cut -f 1-4 -d " "`"
   SELECTIONS="${SELECTIONS} $ONEHD \"${HDINFO}, ${HDSIZE}\""
  done
  ;;
 idehd)
  #find ide hard drives...
  HDDRIVES="`echo "$PROBEDISK" | grep '|disk|' | grep '/dev/hd' | cut -f 3 -d '/' | cut -f 1 -d '|' | tr "\n" " "`"
  SELECTIONS=""
  for ONEHD in $HDDRIVES
  do
   HDINFO="`echo "$PROBEDISK" | grep "/dev/$ONEHD" | head -n 1 | cut -f 3 -d '|' | tr '$' " " | tr -s " " | sed -e 's/ $//g'`"
   HDSIZE="`disktype /dev/$ONEHD | grep "Block device" | cut -f 2 -d ',' | tr -s " " | cut -f 1-4 -d " "`"
   SELECTIONS="${SELECTIONS} $ONEHD \"${HDINFO}, ${HDSIZE}\""
  done
  ;;
 idecd)
  #find ide cd drives...
  HDDRIVES="`echo "$PROBEDISK" | grep '|cdrom|' | grep '/dev/hd' | cut -f 3 -d '/' | cut -f 1 -d '|' | tr "\n" " "`"
  SELECTIONS=""
  for ONEHD in $HDDRIVES
  do
   HDINFO="`echo "$PROBEDISK" | grep "/dev/$ONEHD" | head -n 1 | cut -f 3 -d '|' | tr '$' " " | tr -s " " | sed -e 's/ $//g'`"
   HDSIZE="`disktype /dev/$ONEHD | grep "Block device" | cut -f 2 -d ',' | tr -s " " | cut -f 1-4 -d " "`"
   SELECTIONS="${SELECTIONS} $ONEHD \"${HDINFO}, ${HDSIZE}\""
  done
  Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --ok-label "退出" --msgbox "あなたのパソコンはこれらのIDE (ATAPI) CD/DVDドライバーを持っています:\n$SELECTIONS \n\nしかし、ハードドライブ、USBフラッシュドライブやZipドライブの様にパピーをCD/DVDにインストールする事は\n出来ません。なぜならCD/DVDは直接の書き込みが出来ない\nからです。CD/DVDでは、「リマスタリング」をする必要が\nあり、そしてパピーは「リマスタパピーライブCD」と言う\nプログラムが有り、\n「セットアップ」のメニューの中に有ります。このプログラムは\nあなただけのカスタムライブCD/DVDを作ることが出来ます。\nご注意、ブランクのCD-RかDVD-R（＋Rではなくって）が必要です。\n\nボタンをクリックして中止して下さい..." 0 0
  exit
  ;;
 idezip)
  HDDRIVES="`echo "$PROBEDISK" | grep '|floppy|' | grep '/dev/hd' | cut -f 3 -d '/' | cut -f 1 -d '|' | tr "\n" " "`"
  SELECTIONS=""
  for ONEHD in $HDDRIVES
  do
   HDINFO="`echo "$PROBEDISK" | grep "/dev/$ONEHD" | head -n 1 | cut -f 3 -d '|' | tr '$' " " | tr -s " " | sed -e 's/ $//g'`"
   HDSIZE="`disktype /dev/$ONEHD | grep "Block device" | cut -f 2 -d ',' | tr -s " " | cut -f 1-4 -d " "`"
   SELECTIONS="${SELECTIONS} $ONEHD \"${HDINFO}, ${HDSIZE}\""
  done
  ;;
 satahd) #v2.10
  #at bootup, init script creates SATADRIVES='' in /etc/rc.d/PUPSTATE...
  for ONEHD in $SATADRIVES
  do
   HDINFO="`echo "$PROBEDISK" | grep "/dev/$ONEHD" | head -n 1 | cut -f 3 -d '|' | tr '$' " " | tr -s " " | sed -e 's/ $//g'`"
   HDSIZE="`disktype /dev/$ONEHD | grep "Block device" | cut -f 2 -d ',' | tr -s " " | cut -f 1-4 -d " "`"
   SELECTIONS="${SELECTIONS} $ONEHD \"${HDINFO}, ${HDSIZE}\""
  done
  ;;
 *)
  gxmessage "まだ実施されていません"
  exit
  ;;
esac


echo "$SELECTIONS"
#v2.11
if [ "$SELECTIONS" = "" ];then
 Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --ok-label "QUIT" --msgbox "Nothing to choose. If a plugin device, did you plug it in?" 0 0
 exit
fi

echo '#!/bin/sh' > /tmp/dlg1
echo -n 'Xdialog --wmclass "gtkdialog2" --title "パピーユニバーサルインストーラ" --no-cancel --stdout --menubox "Choose which drive to install to:" 0 0 4' >> /tmp/dlg1
echo -n "$SELECTIONS" >> /tmp/dlg1
echo ' > /tmp/retval'  >> /tmp/dlg1
echo 'exit $?' >> /tmp/dlg1

chmod 755 /tmp/dlg1

while [ 1 ];do #BIG LOOP

/tmp/dlg1
[ ! $? -eq 0 ] && exit
 
DRVSEL="`cat /tmp/retval`"
[ "$DRVSEL" = "" ] && exit
echo "$DRVSEL"

DRVINFO="`disktype /dev/$DRVSEL`"
SUPERFS="`echo "$DRVINFO" | grep "file system" | grep "^[a-zA-Z]" | tr -s " " | cut -f 1 -d " "`"
DRVSIZE="`echo "$DRVINFO" | grep "Block device" | cut -f 2 -d ',' | tr -s " " | cut -f 1-4 -d " "`"
DRVSIZM="`echo "$DRVSIZE" | cut -f 3 -d " "`"
if [ ! "`echo "$DRVSIZE" | grep "GiB"`" = "" ];then
 DRVSIZM="`dc $DRVSIZM 1000 \* p`"
fi
IDRVSIZM="`echo -n "$DRVSIZM" | cut -f 1 -d '.'`" #truncate to integer.

DRVMSG=""
PUPINST=""
if [ "$SUPERFS" ];then
 fsfunc $SUPERFS #returns FSTYPE
 ispupfunc $FSTYPE $DRVSEL #returns PUPVEROLD
 [ ! $? -eq 0 ] && PUPINST=", Puppy version $PUPVEROLD installed"
 DRVMSG="${DRVSEL}:  ${FSTYPE}, ${DRVSIZE}${PUPINST}
"
else
 #has mbr and partitions...
 echo -n "" > /tmp/pidrvmsg.txt
 echo "$DRVINFO" |
 while read ONELINE
 do
  xPARTNUM="`echo "$ONELINE" | grep '^Partition ' | tr -s " " | cut -f 1 -d ':' | cut -f 2 -d " "`"
  [ ! "$xPARTNUM" = "" ] && PARTNUM="$xPARTNUM"
  [ ! "$xPARTNUM" = "" ] && PARTSIZE="`echo "$ONELINE" | cut -f 2 -d ':' | tr -s " " | cut -f 2-3 -d " "`"
  PARTITIONFS="`echo "$ONELINE" | grep "file system" | cut -f 1 -d " "`"
  if [ "$PARTITIONFS" ];then
   fsfunc $PARTITIONFS #sets FSTYPE.
   #find out if partition has puppy, or has pup_xxx.sfs file...
   ispupfunc $FSTYPE ${DRVSEL}${PARTNUM} #returns PUPVEROLD
   [ ! $? -eq 0 ] && PUPINST=", Puppy version $PUPVEROLD installed"
#   DRVMSG="${DRVMSG}${DRVSEL}${PARTNUM}: ${FSTYPE}, size ${PARTSIZE}${PUPINST}
#"
   echo "${DRVSEL}${PARTNUM}: ${FSTYPE}, size ${PARTSIZE}${PUPINST}" >> /tmp/pidrvmsg.txt
  fi
 done

 DRVMSG="`cat /tmp/pidrvmsg.txt`"

# NUMPARTS=`echo "$DRVINFO" | grep "file system" | grep "^ " | wc -l | tr -s " " | cut -f 2 -d " "`
# TRYPARTS="`echo "$DRVINFO" | grep 'Partition ' | cut -f 1 -d ':' | sed -e 's/Partition//g' | tr -s " " | cut -f 2 -d " " | tr "\n" " "`"
# for PARTNUM in $TRYPARTS
# do
#  PARTITIONFS="`echo "$DRVINFO" | grep "file system" | grep "^ " | head -n $PARTNUM | tail -n 1 | tr -s " " | cut -f 2 -d " "`"
#  if [ "$PARTITIONFS" ];then
#   PARTSIZE="`echo "$DRVINFO" | grep "Partition ${PARTNUM}:" | tr -s " " | cut -f 3-4 -d " "`"
#   fsfunc $PARTITIONFS #sets FSTYPE.
#   #find out if partition has puppy, or has pup_xxx.sfs file...
#   ispupfunc $FSTYPE ${DRVSEL}${PARTNUM} #returns PUPVEROLD
#   [ ! $? -eq 0 ] && PUPINST=", Puppy version $PUPVEROLD installed"
#   DRVMSG="${DRVMSG}${DRVSEL}${PARTNUM}: ${FSTYPE}, size ${PARTSIZE}${PUPINST}
#"
#  fi
# done

fi

echo "$DRVMSG"

DLGTXT=""
CHOICES="`echo "$DRVMSG" | grep ':' | cut -f 1 -d ':' | tr "\n" " "`"
for ONECHOICE in $CHOICES
do
 DLGTXT="$DLGTXT
   <hbox>
    <text><label>Install Puppy to ${ONECHOICE}:</label></text>
    <button>
     <input file>/usr/local/lib/X11/mini-icons/mini-dog.xpm</input>
     <action>Exit:${ONECHOICE}</action>
    </button>
   </hbox>
"
done
if [ "$FINALPMEDIA" = "usbflash" ];then
 MSGex1="<text><label>重要：「Gparted」を使ったなら、パーティションを生成した後、「ブート」フラグ（右クリック：Manage　flags）を必ずセットして下さい。それから、USBフラッシュドライブの場合は「fat32」よりも「fat16」ファイルシステムを選んで 下さい。なぜならより簡単にブート出きるからです。-- 「ext2」パーティションを使えます。</label></text>
<text><label>エクストラノート：「Gparted」がドライブに「！」のアイコンをマークし、無効なパーティションとして表示するときが有ります。その場合、パーティションを削除し、再生成して（ブータブルにして）下さい</label></text>"
else
 MSGex1="<text><label>重要：「Gparted」を使ったなら、パーティションを生成した後、「ブート」フラグ（右クリック：Manage　flags）を必ずセットして下さい。それから、USBフラッシュドライブの場合は「fat32」よりも「fat16」ファイルシステムを選んで 下さい。なぜならより簡単にブート出きるからです。-- 「ext2」パーティションを使えます。</label></text>
<text><label>エクストラノート：「Gparted」がドライブに「！」のアイコンをマークし、無効なパーティションとして表示するときが有ります。その場合、パーティションを削除し、再生成して（ブータブルにして）下さい</label></text>"
fi
if [ "$DLGTXT" = "" ];then
 DLGTXT="<hbox><text><label>ドライブ　${DRVSEL}にはパーティションが有りません!「GParted」を使ってパーティションを生成することをお勧めします：</label></text>
    <button>
     <input file>/usr/local/lib/X11/mini-icons/mini-hdisk.xpm</input>
     <label>GParted</label>
     <action>Exit:RUNGPARTED</action>
    </button>
</hbox>
$MSGex1
<text><label>\" \"</label></text>
"
fi

DLGEXT=""
if [ "`echo "$DRVMSG" | cut -f 1 -d ':' | grep "[a-zA-Z]$"`" = "" ];then
 #ask if want superfloppy install...
 DLGEXT="
   <frame Superfloppy>
   <hbox>
    <text><label>注意: 一般の状況では推薦しません。スーパーフロッピーモードでパピーをインストしますか？その場合、MBRもパーティション も有りません...ドライバーは/dev/$DRVSELとしてアクセスされ、パーティションナンバーも有りません。変てこなBIOSを持っているPCからUSBフラッシュドライブをブートするのに良い選択かも知れません。 肯定ならボタンをクリックして下さい:</label></text>
    <vbox>
     <button>
      <input file>/usr/local/lib/X11/mini-icons/mini-dog.xpm</input>
      <action>Exit:REFORMAT_${DRVSEL}</action>
     </button>
    </vbox>
   </hbox>
   </frame>
"
else
 DLGEXT="
   <frame Superfloppy>
   <hbox>
<text><label>このドライブは現在スーパーフロッピーモードであって、MBRもパーティションも有りません。 /dev/$DRVSELとしてアクセスされ、パーティションナンバーは有りません（変てこなBIOSを持っているPCからUSBフラッシュドライブをブートするのに良い選択かも知れません）。パピーをインストする/dev/${DRVSEL}1パテぃションを生成しますか？もしそうでしたら、ボタンをクリックして下さい:</label></text>
    <vbox>
     <button>
      <input file>/usr/local/lib/X11/mini-icons/mini-dog.xpm</input>
      <action>Exit:REFORMAT_${DRVSEL}1</action>
     </button>
    </vbox>
   </hbox>
   </frame>
"
fi

DLG2="
 <wtitle>パピーユニバーサルインストーラ</wtitle>
 <vbox>
  <text><label>パピーが選択されたドライブ情報がここに有ります:</label></text>
  <text><label>\"${DRVMSG}\"</label></text>
$DLGTXT
$DLGEXT
   <button>
    <label>前に戻って違うドライブを選択して下さい</label>
    <action>Exit:GOBACK</action>
   </button>
 </vbox>
"

RETTXT="`echo "$DLG2" | gtkdialog2 --stdin`"

[ "`echo "$RETTXT" | grep 'RUNGPARTED'`" != "" ] && exec gparted /dev/$DRVSEL

[ ! "`echo "$RETTXT" | grep 'abort'`" = "" ] && exit
[ "`echo "$RETTXT" | grep 'EXIT:GOBACK'`" = "" ] && break

done #BIG LOOP

#when arrive here, have
#RETTXT="EXIT:sda1", DRVMSG="sda1: vfat, size 122.1 MiB, Puppy version 108 installed" (has all parts fnd)

#sanity check...
#SANITYPART="`echo -n "$DRVMSG" | cut -f 1 -d ':'`"
SANITYPART="`echo -n "$RETTXT" | grep 'EXIT' | cut -f 2 -d ':' | cut -f 2 -d '_'`"
SANITYMNTPT="`mount | grep "/dev/$SANITYPART" | tr -s " " | cut -f 3 -d " "`"
#v2.02 cannot use mount for ntfs-3g driver...
#[ "$SANITYMNTPT" = "" ] && SANITYMNTPT="`ps -e | grep -o ntfs\-3g.* | grep "/dev/$SANITYPART" | sed -e 's/[^a-zA-Z0-9/._\-]/ /g' | tr -s ' ' | tr ' ' "\n" | grep '^/mnt/'`"

[ "$SANITYMNTPT" = "" ] && SANITYMNTPT="`ps -e | grep -o 'ntfs\-3g.*' | grep "/dev/$SANITYPART" | tr '\t' ' ' | tr -s ' ' | tr ' ' "\n" | grep '^/mnt/'`"

if [ ! "$SANITYMNTPT" = "" ];then
 SANITYMSG1="$SANITYPART currently mounted, need to unmount it!!!"
 SANITYMSG2="$SANITYPART currently mounted read-write."
 SANITYMSG3="$SANITYPART does not have pup_save.3fs file in it."
 #SANITYMNTPT="`mount | grep "/dev/$SANITYPART" | tr -s " " | cut -f 3 -d " "`"
 SANITYRORW="`mount | grep "/$SANITYPART" | tr -s " " | cut -f 6 -d " "`"
 [ ! "`echo -n "$SANITYMNTPT" | grep "/initrd/"`" = "" ] && SANITYMSG1="$SANITYPART cannot be unmounted!"
 [ "$SANITYRORW" = "(ro)" ] && SANITYMSG2="$SANITYPART is mounted read-only!"
 [ -f $SANITYMNTPT/pup_save.3fs ] && SANITYMSG3="$SANITYPART has personal file pup_save.3fs in it!"
 Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ: 正気チェック" --ok-label "続ける" --cancel-label "退去する" --yesno "パーティションの正気チェックをしてから続けます：\n$SANITYMSG1 \n$SANITYMSG2\n$SANITYMSG3\n\nもし、上記のレポートでパーティションがマウントされているならば、今現在アンマウントする必要が有ります。しかし、レポートでパーティションがアンマウントが出来ないならば、インストに難点が有ります--確かに、ハードドライブにインストする場合、\"option1\"のインストしか出来ません(後ほど説明します)。もしもパーティションが「pup_save.3fs」を持っているのならば、それが理由でアンマウントが出来ません -- このファイルは現在パピーが使っているからです。もしもパピーをライブCDからブートし、「pup_save.3fs」がない場合では、パピーは完全にRAMの中で実行し、そして問題は解決します。「pup_save.3fs」を持っているなら、\"pfix＝ram\"と言うブートパラメーターを付けてCDをブートする事が出来ます。要するに、もし出来れば、パーティションを今アンマウントして下さい。さもなければ、このスクリプトの制限されたインスト選択で続けて下さい。或いはいますぐこのスクリプトを中止して、パーティションがマウントされている問題を解決して下さい" 0 0
 [ ! $? -eq 0 ] && exit
fi

if [ ! "`echo "$RETTXT" | grep 'EXIT:REFORMAT'`" = "" ];then
 #RETTXT will have "EXIT:REFORMAT_sda" or "EXIT:REFORMAT_sda1", depending whether
 #we want to format in superfloppy mode or with a MBR and a partition...
 DESTPART="`echo "$RETTXT" | grep 'EXIT:REFORMAT' | cut -f 2 -d ':' | cut -f 2 -d '_'`"
 if [ "`echo "$DESTPART" | grep "[0-9]$"`" = "" ];then
  #want superfloppy...
  DLG3="
 <wtitle>パピーユニバーサルインストーラ</wtitle>
 <vbox>
   <text><label>あなたは　/dev/${DESTPART}をスーパーフロッピーとしてフォーマットするように選択しました。ドライブを「vfat」或いは「ext3」ファイルシステムを生成する選択が必要です。「Ext3」はもっともフレキシブル
（そしてお薦めします）な選択ですが、MSウィンドーズから読めるようにするには「vfat」を選択して下さい。
註：しかし、MSウィンドーズにも「ext2/3」ドライブをアクセスするツールが有ります。</label></text>
   <text><label>新に詳しい説明：もし「ext3」を選択した場合、ドライブ全体が個人データーのストレジとしてすぐに使えますが、もし「vfat」を選択した場合では、ドライブの中に「ext3」ファイルシステムのファイルを生成しなくては成りません（すなわち「pup_save.3fs」と言うファイルです）-- このファイルはあなたのすべての個人データーが
含まれています...</label></text>
  <hbox>
   <button>
    <label>FORMAT_ext3</label>
    <action>Exit:ext3</action>
   </button>
   <button>
    <label>FORMAT_vfat</label>
    <action>Exit:vfat</action>
   </button>
  </hbox>
 </vbox>
"
  RETTXT="`echo "$DLG3" | gtkdialog2 --stdin`"

  [ ! "`echo "$RETTXT" | grep 'abort'`" = "" ] && exit
  DESTFS="`echo "$RETTXT" | grep 'EXIT:' | cut -f 2 -d ':'`"
  echo '#!/bin/sh' > /tmp/formatsuper.sh
  echo -e "echo -n \"SANITY CHECK: formatting /dev/${DRVSEL}, ENTER to continue or CTRL-C to quit: \""  >> /tmp/formatsuper.sh
  echo 'read mooo'  >> /tmp/formatsuper.sh
  #echo 'echo "Zeroising the entire drive..."'  >> /tmp/formatsuper.sh
  #echo 'echo "(please be very patient, this could take awhile)"'  >> /tmp/formatsuper.sh
  ##echo "dd if=/dev/zero bs=1024 | $BAR -of /dev/$DRVSEL -s ${IDRVSIZM}m" >> /tmp/formatsuper.sh
  #echo "dd if=/dev/zero of=/dev/$DRVSEL" >> /tmp/formatsuper.sh
  #no, will just zeroise the mbr section...
  echo "dd if=/dev/zero of=/dev/$DRVSEL bs=512 count=1" >> /tmp/formatsuper.sh
  echo 'sync'  >> /tmp/formatsuper.sh
  if [ "$DESTFS" = "ext3" ];then
   echo 'echo "Creating an ext3 filesystem on the drive..."'   >> /tmp/formatsuper.sh
   echo -e "echo \"y\" | mke2fs -j -m 0 /dev/$DRVSEL"   >> /tmp/formatsuper.sh
  else #vfat
   echo 'echo "Creating a vfat filesystem on the drive..."'   >> /tmp/formatsuper.sh
   echo "mkdosfs -I /dev/$DRVSEL" >> /tmp/formatsuper.sh
  fi
  echo 'sync'  >> /tmp/formatsuper.sh
  echo 'echo -n "Press ENTER key to continue: "'   >> /tmp/formatsuper.sh
  echo 'read moo'   >> /tmp/formatsuper.sh
  chmod 755 /tmp/formatsuper.sh
  rxvt -bg "orange" -title "パピーユニバーサルインストーラ" -geometry 80x10 -e /tmp/formatsuper.sh
  DESTSIZM="$DRVSIZM"
  IDESTSIZM="$IDRVSIZM"
  DESTVER="" #previous version, n.a.
 else
  #want to partition with partition 1...
  DLG3="
 <wtitle>パピーユニバーサルインストーラ</wtitle>
 <vbox>   <text><label>あなたは　/dev/${DRVSEL}にMBR及びパーティションをつけてフォーマットする事を選択されました。そして、そのパーティションに「vfat」或いは「ext3」のファイルシステムを生成するかの選択が必要です。「ext3」はもっともフレキシブル（そしてお薦めします）な選択ですが、MSウィンドーズからこのドライブを読めるには「vfat」を選択して下さい。註：しかし、MSウィンドーズから「ext2/3」ドライブをアクセスするツールが有ります。</label></text>
<text><label>新に詳しい説明：もし「ext3」を選択した場合、ドライブ全体が個人データーのストレジとしてすぐに使えますが、もし「vfat」を選択した場合では、ドライブの中に「ext3」ファイルシステムのファイルを生成しなくては成りません（すなわち「pup_save.3fs」と言うファイルです）-- このファイルはあなたのすべての個人データーが含まれています「FORMAT_ext3」或いは「FORMAT_vfat」ボタンを押してフォーマットを初めて下さい...</label></text>
<text><label>「USBFlash」ドライブ：これらのデバイスには「vfat」（fat16）のパーティションを生成するのが普通です。ウィンドーズの互換性と古いBIOSでは「fat16」のファイルシステムにしかブート出来ないからです。</label></text>
   <text><label>\" \"</label></text>
<text><label>この時点で「ユニバーサルインストーラ」から一度出て、「GParted」を実行し、その後、「ユニバーサルインストーラ」を再実行して下さい。「GPartd」を実行している間、一番大事なことを忘れないで下さい--すなわちパーティションの生成後、マウスを右クリックし、「Manage　flags」を選択し、「ブート」フラグをセットして下さい。</label></text>
<text><label>エクストラノート：「Gparted」がドライブに「！」のアイコンをマークし、無効なパーティションとして表示するときが有ります。その場合、パーティションを削除し、再生成して（ブータブルにして）下さい</label></text>
   <text><label>ボタンをクリックして「GParted」を実行して下さい...</label></text>
  <hbox>
   <button>
    <label>Run GParted</label>
    <action>Exit:gparted</action>
   </button>
   <button cancel>
   </button>
  </hbox>
 </vbox>
"
  RETTXT="`echo "$DLG3" | gtkdialog2 --stdin`"
  MYACTION="`echo "$RETTXT" | grep 'EXIT:' | cut -f 2 -d ':'`"
  [ "$MYACTION" = "gparted" ] && exec gparted /dev/$DRVSEL
  exit
  
 fi
else
 DESTPART="`echo "$RETTXT" | grep 'EXIT:' | cut -f 2 -d ':'`"
 DESTFS="`echo "$DRVMSG" | grep "$DESTPART" | cut -f 1 -d ',' | tr -s " " | cut -f 2 -d " "`"
 DESTSIZE="`echo "$DRVMSG" | grep "$DESTPART" | tr -s " " | cut -f 4-5 -d " "`"
 DESTSIZM="`echo -n "$DESTSIZE" | cut -f 1 -d " "`"
 if [ ! "`echo "$DESTSIZE" | grep "GiB"`" = "" ];then
  DESTSIZM="`dc $DESTSIZM 1000 \* p`"
 fi
 IDESTSIZM="`echo -n "$DESTSIZM" | cut -f 1 -d '.'`" #truncate to integer.
 DESTVER="`echo "$DRVMSG" | grep "$DESTPART" | tr -s " " | grep "installed" | cut -f 8 -d " "`"
fi


if [ "`echo "$DESTPART" | grep "[0-9]$"`" = "" ];then
 #superfloppy
 DLG4="
 <wtitle>パピーユニバーサルインストーラ</wtitle>
 <vbox>
<text><label>なたは「パピーをドライブ全体にインスト」を選択しました。我々はこれをスーパーフロッピモードと呼んでいます。そして、このモードですとMBR　(Master　Boot　Record)もパーティションも有りません。これはフラッシュメモリーには良い選択です。特にUSBフラッシュにとっては。何故ならパソコンのBIOSからこのドライブをブートするのが難しいから。</label></text>
  <text><label>のターゲットドライブは ${DESTPART}で、 ${DESTFS}を持ち、 ${DESTSIZM} Mです。「OK」ボタンを押してパピーをこのドライブにインストして下さい...</label></text>
  <hbox><button ok></button><button cancel></button></hbox>
 </vbox>
"
 RETTXT="`echo "$DLG4" | gtkdialog2 --stdin`"
else
 DLG4="
 <wtitle>パピーユニバーサルインストーラ</wtitle>
 <vbox>
<text><label>あなたは/dev/${DESTPART}パーティションにパピーをインストする事を選択しました。そして、このパーティションは ${DESTFS}ファイルシステムを持ち、サイズは ${DESTSIZM} Mです。</label></text>
  <text><label>「OK」ボタンを押してパピーをインストして下さい（註：実際のインストを承諾する前に一つか二つのダイアログウィンドーが現れます）...</label></text>
  <hbox><button ok></button><button cancel></button></hbox>
 </vbox>
"
 RETTXT="`echo "$DLG4" | gtkdialog2 --stdin`"
fi

[ ! $? -eq 0 ] && exit
[ "`echo "$RETTXT" | grep 'OK'`" = "" ] && exit



#get latest Puppy files....
SRCPATH=""
CDDRIVE=""
rm -f /tmp/srcpath.txt
mount | tr -s " " | cut -f 3 -d " " |
while read ONEDIR
do
 INCYES=0
 [ -f $ONEDIR/pup_$NEWVER.sfs ] && INCYES=`expr $INCYES + 1`
 [ -f $ONEDIR/vmlinuz ] && INCYES=`expr $INCYES + 1`
 [ -f $ONEDIR/initrd.gz ] && INCYES=`expr $INCYES + 1`
 if [ $INCYES -eq 3 ];then
  echo -n "$ONEDIR" > /tmp/srcpath.txt
  break
 fi
done
[ -f /tmp/srcpath.txt ] && SRCPATH="`cat /tmp/srcpath.txt`"
if [ "$SRCPATH" = "" ];then
 Xdialog --wmclass "gtkdialog2" --left --buttons-style text --title "パピーユニバーサルインストーラ" --ok-label "CD" --cancel-label "DIRECTORY" --yesno"パピーは２から４個のファイルから成ってます：\nvmlinuz      リナックスカーネル\ninitrd.gz    イニシャルラムディスク。\npup_$NEWVER.sfs  パピーの全部のファイルが含まれています（たまにはinitrd.gzの中に有ります）。\n             (initrd.gzの中にビルドされているなら、initrd.gzだけが必要です）\nzdrv_$NEWVER.sfs 完全なカーネルドライバーとファームウェアセット（オプション）。\n             (ある種のビルドはpup_$NEWVER.sfsに利用できるドライバーのサブセットが有ります）\nしもパピーをライブCDからブートしているなら、これらのファイルはメモリーの中に入っています。\n
さもなければ、それらのファイルは .isoファイルに有り、取り出すことが出来ます -- その場合、\n
ファイルを取り出して保存したディレクトリを選択しなくては成りません。\n\nパス名にスペースを入れないでください!!!\n\n\nパピーファイルはどこに有りますか？..." 0 0
 RETVAL=$?
 if [ $RETVAL -eq 0 ];then #CD
  CDDRIVE="`readlink /dev/cdrom`"
  CDDRIVE="`basename $CDDRIVE`"
  CDDRVINFO="`probedisk | grep "/dev/$CDDRIVE" | cut -f 3 -d '|'`"
  Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --msgbox "CD-ROMドライバにパピーのライブCDを入れてください。\nご注意、パソコンに2個のCD/DVDドライバを持っている場合では、パピーは\nそのライブCDが　$CDDRIVEに入れられていることを予期し、$CDDRVINFO　として述べられてます。\n\nAライブCDを入れたら、「OK」ボタンをクリックして下さい..." 0 0
  mkdir /mnt/$CDDRIVE 2> /dev/null
  mount -t iso9660 /dev/$CDDRIVE /mnt/$CDDRIVE
  if [ -f /mnt/$CDDRIVE/initrd.gz ];then
   SRCPATH="/mnt/$CDDRIVE"
  else
   Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ: エラー" --msgbox "ごめんなさい、パピーはCDに有りません。\nマウントプログラムでCDをマウントし、\n(ファイルマネージャのメニューから見てください）そして「OK」ボタンをクリックして下さい..." 0 0
   RETVAL=1
  fi 
 fi
 if [ ! $RETVAL -eq 0 ];then #DIRECTORY
  SRCFPATH="`Xdialog --wmclass "gtkdialog2" --left --backtitle "最新のパピーファイル\nvmlinuz, initrd.gz と pup_$NEWVER.sfsを見付だし,\nその内の一つをハイライトし、\n「OK」ボタンをクリックして下さい" --title "パピーユニバーサルインストーラ" --stdout --no-buttons --no-cancel --fselect "*" 0 0`"
  [ ! $? -eq 0 ] && exit
  SRCPATH="`dirname $SRCFPATH`"
 fi
fi
#sanity check...
if [ ! -f $SRCPATH/pup_$NEWVER.sfs ];then
 Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ: エラー" --msgbox "\"sanity　check\"に失敗しました。ファイル$SRCPATH/pup_$NEWVER.sfsが存在しません。この「PATH」はパピーファイル/pup_xxx.sfsが保存されている所です。\"xxx\"は最新のバージョンナンバーです。「OK」ボタンをクリックして中止して下さい..." 0 0
 exit
fi

#find out if puppy already on dest...
ispupfunc $DESTFS $DESTPART
#...sets PUPVEROLD.

#now to do the actual install...
case $FINALPMEDIA in
 usbflash|usbhd|ideflash|idezip) #removable media, install with syslinux/extlinux

  #26mar06 JustGreg fix mbr...
  if [ "`echo "$DESTPART" | grep '[0-9]$'`" != "" ];then #superfloppy mode has no mbr.
   #DESTPART is a partition (not superfloppy).
   DESTDRV="`echo -n "$DESTPART" | cut -b 1-3`"
   DESTNUM="`echo -n "$DESTPART" | cut -b 4-5`"
   dd if=/dev/$DESTDRV of=/tmp/mbr446.bin bs=446 count=1
   sync
   if [ "`hexdump -x /tmp/mbr446.bin | tr -s " " | cut -f 2-9 -d " " | grep '[1-9a-zA-Z]'`" = "" ];then
    MBRCHOICE="`Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --no-cancel --stdout --menubox "ブートストラップローダーコードがMBR (Master Boot Record)に有りませんので、\nUSBドライブからブート出来ません。 下記の中から一つを選択して\n問題を直して下さい。個人的には、「mbr.bin」を使って成功してます。" 0 0 4 sys-nopart.mbr "JustGregによって生成されたブートストラップローダーコードです。" mbr.bin "Syslinux packageから" mbrfat.bin "makebootfat packageから" spb2_mbr.bin "spblinuxから、 Christian Ostheimerによって生成された" `"
   else
    MBRCHOICE="`Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --no-cancel --stdout --menubox "USBのMBR (Master Boot Record)は多分そのままで大丈夫なようですので、\n最初のオプションを選択して下さい。しかし、USBドライブからブート出来なければ、そして、あなたは\nBIOSのセッティングが正しいと確信を持っていて、パソコンがUSBからブート可能で\n有るならば、代わりのMBRを試してください。\n註、MBRの変更を選択したならば、更新される前の最初の446バイト(その\nブートストラップローダー部分) のMBRは /tmp/oldmbr.binへバックアップされます。\n註、このインストーラープログラムを再度実行しなくても、\nこれらのMBRを直接インスト出来ます：MBRは /usr/lib/syslinuxの中に有り、\n「dd」プログラムを使ってコピーが出来ます。\n例： dd if=spb2_mbr.bin of=/dev/${DESTDRV}\n註、個人的には「mbr.bin」を使って成功してます。" 0 0 5 default "何もしません。現在のMBRをそのままにして下さい" sys-nopart.mbr "JustGregによって生成されたブートストラップローダーコード" mbr.bin "Syslinux packageから" mbrfat.bin "makebootfat packageから" spb2_mbr.bin " spblinuxから、Christian Ostheimerによって生成された" `"
   fi
   rm /tmp/mbr446.bin
   if [ ! "$MBRCHOICE" = "" ];then
    if [ ! "$MBRCHOICE" = "default" ];then
     dd if=/dev/$DESTDRV of=/tmp/oldmbr.bin bs=446 count=1
     sync
     dd if=/usr/lib/syslinux/$MBRCHOICE of=/dev/$DESTDRV
     sync
    fi
   fi
   
   #check that partition has 'boot' flag set...
   QPATTERN="^Partition ${DESTNUM}:"
   if [ "`disktype /dev/$DESTDRV | grep "$QPATTERN" | grep 'bootable'`" = "" ];then
    Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --no-cancel --stdout --ok-label "GParted" --cancel-label "bypass" --yesno "少々問題が有ります。このパーティション ${DESTPART} には「ブート」フラグがセットされてませんので、ブート出来ません。今現在「GParted」のボタンをクリックする事をお勧めし、「GParted」のプログラムを実行し、マウスの右ボタンをクリックし「Manage　flags」を選択し、「ブート」フラグをセットして下さい。「GParted」から退出すると「パピーユニバーサルインストーラ」が継続します。
「GParted」をクリックして（お勧めします）「GPared」を実行して下さい...
「bypass」をクリックして「GParted」の実行をパスして下さい..." 0 0
    [ $? -eq 0 ] && gparted /dev/$DESTDRV
   fi
  fi

  case $DESTFS in
   vfat)
     if [ ! "`echo "$DESTPART" | grep '[0-9]$'`" = "" ];then
      PARTCHOICE="`Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --no-cancel --stdout --menubox "ここではデフォルトを受け入れ、 '続けて下さい'。\nトップエントリーがハイライトされていることを確認してから「OK」ボタンをクリックして下さい\n\nしかし、もしこのパピーユニバーサルインストーラーを試したが\nそれでもパピーがブート出来なければ、ここにあるいくつかの選択をトライ出来ます。\n\n個人的には「GParted」を使ってパーティションの削除及び\n生成に成功しています..." 0 0 4 default "続けて下さい" GParted "GPartedを使ってUSB/IDE-CFのパーティションの削除及び再生をします" syslinux "USB 或いは IDE-CF msdos/vfatのパーティションをブート出来るようにします"`"
      [ "$PARTCHOICE" = "syslinux" ] && fixusbfunc $DESTPART $DESTFS
      [ "$PARTCHOICE" = "GParted" ] && gpartedfixusbfunc $DESTPART $DESTFS
     fi
    #params passed in: $DESTPART "$SRCPATH" $FINALPMEDIA
    echo '#!/bin/sh
DESTPART="$1"
SRCPATH="$2"
FINALPMEDIA="$3"
echo "ABSOLUTE FINAL SANITY CHECK!"
echo "You are about to install Puppy to /dev/$DESTPART, with boot parameter"
echo "pmedia=$FINALPMEDIA. The files vmlinuz, initrd.gz, pup_xxx.sfs, syslinux.cfg"
echo "(and maybe zdrv_xxx.sfs if it exists. pup_xxx.fs may be inside initrd.gz)"
echo "will be written to /dev/$DESTPART and Syslinux will be used to make it bootable."
echo
echo -n "Press ENTER key to continue, CTRL-C to abort: "
read goforit
echo "Making $DESTPART bootable..."
syslinux  /dev/$DESTPART
sync
#remove old puppy1 files...
mount -t vfat /dev/$DESTPART /mnt/data
if [ -f /mnt/data/pup100 ];then
 echo "Whoa, $DESTPART has pup100 file on it. This has to be erased."
 echo "Press ENTER key only to continue, else any other letter then"
 echo -n "press ENTER to abort installation of Puppy: "
 read isnogo
 if [ ! "$isnogo" = "" ];then
  sync
  umount /dev/$DESTPART
  exit
 fi
 rm -f /mnt/data/pup100
fi
rm -f /mnt/data/image.gz 2> /dev/null
rm -f /mnt/data/usr_cram.fs 2> /dev/null
rm -f /mnt/data/pup_*.sfs #v2.11
rm -f /mnt/data/devx_*.sfs #v2.11
rm -f /mnt/data/zdrv_*.sfs #v2.16
sync
echo "Copying vmlinuz..."
cp -f $SRCPATH/vmlinuz /mnt/data/
sync
echo "Creating syslinux.cfg..."
#v2.20 root=/dev/ram0 removed...
if [ "$FINALPMEDIA" = "ideflash" ];then
 echo "default vmlinuz initrd=initrd.gz ide=nodma pmedia=$FINALPMEDIA" > /mnt/data/syslinux.cfg
else
 echo "default vmlinuz initrd=initrd.gz pmedia=$FINALPMEDIA" > /mnt/data/syslinux.cfg
fi
sync
echo "Creating marker file for wakepup boot floppy..."
[ "$FINALPMEDIA" = "usbflash" ] && touch /mnt/data/USBFLASH
[ "$FINALPMEDIA" = "ideflash" ] && touch /mnt/data/IDEFLASH
[ "$FINALPMEDIA" = "usbhd" ] && touch /mnt/data/USBHD
[ "$FINALPMEDIA" = "idezip" ] && touch /mnt/data/IDEZIP
sync
echo "Copying initrd.gz..."
cp -f $SRCPATH/initrd.gz /mnt/data/
sync
echo "Copying .sfs files..."
cp -f $SRCPATH/pup_*.sfs /mnt/data/ 2>/dev/null
sync
cp -f $SRCPATH/zdrv_*.sfs /mnt/data/ 2>/dev/null
sync
umount /mnt/data
echo -n "Finished, press ENTER key to continue: "
read moo
' > /tmp/installpup.sh
    chmod 755 /tmp/installpup.sh
    rxvt -bg "orange" -title "パピーユニバーサルインストーラ" -geometry 80x10 -e /tmp/installpup.sh $DESTPART $SRCPATH $FINALPMEDIA
    ;;
   ext3)
    #params passed in: $DESTPART "$SRCPATH" $FINALPMEDIA
    echo '#!/bin/sh
DESTPART="$1"
SRCPATH="$2"
FINALPMEDIA="$3"
echo "ABSOLUTE FINAL SANITY CHECK!"
echo "You are about to install Puppy to /dev/$DESTPART, with boot parameter"
echo "pmedia=$FINALPMEDIA. The files vmlinuz, initrd.gz, pup_xxx.sfs, extlinux.conf"
echo "(and maybe zdrv_xxx.sfs if it exists. pup_xxx.fs may be inside initrd.gz)"
echo "will be written to /dev/$DESTPART and Extlinux will be used to make it bootable."
echo
echo -n "Press ENTER key to continue, CTRL-C to abort: "
read goforit
mount -t ext3 /dev/$DESTPART /mnt/data
echo "Making $DESTPART bootable..."
#extlinux -z /mnt/data
#v2.11
if [ ! "`echo "$DESTPART" | grep '[0-9]$'`" = "" ];then
 extlinux /mnt/data #i think only use -z for superfloppy.
else
 extlinux -z /mnt/data
fi
sync
rm -f /mnt/data/pup_*.sfs #v2.11
rm -f /mnt/data/devx_*.sfs #v2.11
rm -f /mnt/data/zdrv_*.sfs #v2.16
sync
echo "Copying vmlinuz..."
cp -f $SRCPATH/vmlinuz /mnt/data/
sync
echo "Creating extlinux.conf..."
#v2.20 root=/dev/ram0 removed...
if [ "$FINALPMEDIA" = "ideflash" ];then
 echo "default vmlinuz initrd=initrd.gz ide=nodma pmedia=$FINALPMEDIA" > /mnt/data/extlinux.conf
else
 echo "default vmlinuz initrd=initrd.gz pmedia=$FINALPMEDIA" > /mnt/data/extlinux.conf
fi
sync
#note do not create wakepup marker file as it only boots msdsos/vfat.
echo "Copying initrd.gz..."
cp -f $SRCPATH/initrd.gz /mnt/data/
sync
echo "Copying .sfs files..."
cp -f $SRCPATH/pup_*.sfs /mnt/data/
cp -f $SRCPATH/zdrv_*.sfs /mnt/data/
sync
umount /mnt/data
echo -n "Finished, press ENTER key to continue: "
read moo
' > /tmp/installpup.sh
    chmod 755 /tmp/installpup.sh
    rxvt -bg "orange" -title "パピーユニバーサルインストーラ" -geometry 80x10 -e /tmp/installpup.sh $DESTPART $SRCPATH $FINALPMEDIA
    ;;
   *)
    gxmessage "あなたの$DESTPARTは$DESTFSファイルシステムを持ってます。
現在外部のvfat (FAT16/32) 或いは ext3 だけをサポートします。
「OK」ボタンをクリックして中止して下さい..."
    exit
    ;;
  esac
  ;;
 scsihd|idehd|satahd) #internal media, boot with boot-disk or grub.
  #arrive here with DESTPART & DESTFS where installing to, PMEDIA boot param FINALPMEDIA,
  #SRCPATH where to get vmlinuz, initrd, pup_xxx.sfs, PUPVEROLD is old puppy version in
  #format 200 (without dots) =0 if no prior installed puppy,
  #NEWVER is new puppy version, DESTSIZM is size of dest partition in Mb (real number),
  DESTMNTPT="`mount | grep "/dev/$DESTPART" | tr -s " " | cut -f 3 -d " "`"
  #v2.02 ntfs-3g needs this...
  #[ "$DESTMNTPT" = "" ] && DESTMNTPT="`ps -e | grep -o ntfs\-3g.* | grep "/dev/$DESTPART" | sed -e 's/[^a-zA-Z0-9/._\-]/ /g' | tr -s ' ' | tr ' ' "\n" | grep '^/mnt/'`"
  
   [ "$DESTMNTPT" = "" ] && DESTMNTPT="`ps -e | grep -o 'ntfs\-3g.*' | grep "/dev/$DESTPART" | tr '\t' ' ' | tr -s ' ' | tr ' ' "\n" | grep '^/mnt/'`"

  if [ "$DESTMNTPT" = "" ];then
   mkdir /mnt/$DESTPART 2> /dev/null
   mount -t $DESTFS /dev/$DESTPART /mnt/$DESTPART
   DESTMNTPT="/mnt/$DESTPART"
  fi

  #choose option1 or option2 install...
  #option1: files vmlinuz, initrd.gz, pup_xxx.sfs, to dest partition.
  #option2: file vmlinuz to partition, contents of pup_xxx.sfs to partition.
  if [ $PUPVEROLD -eq 0 ];then
   PREVPUPMSG="これは新しいインストのようです。"
  else
   PREVPUPMSG="パピーはすでにインストされています。バージョンは$PUPVEROLDで、アップグレードするか完全に取り換えるかの選択が出来ます。"
  fi
  INSTOPTION="1"
  if [ ! "$DESTFS" = "vfat" ];then
   Xdialog --wmclass "gtkdialog2" --left --buttons-style text --title "パピーユニバーサルインストーラ" --ok-label "FRUGAL" --cancel-label "FULL" --yesno "パピーを/dev/$DESTPARTへインストールする事を選択しました。これは内装のハードドライブ($FINALPMEDIA)の様です。
$PREVPUPMSG 

パピーをこのパーティションにインストールするには二通りの方法があります：

オプション 1 (すなわち \"frugal\" インストール) (お勧めします):
vmlinuz, initrd.gzとpup_$NEWVER.sfsファイルをこのパーティションにコプーし、あなたの個人の
セッティングをpup_saveファイルに保存します（CDから執行するように）。そのパーティションの既存のデーター
はそのままの状況に保ちます。
利点：
- 同じパーティションにインストしている他のデストロと共存出来ます。
- アップグレードがより簡単です：新しい「.iso」ファイルをダウンロードし、上述したファイルを新しいバージョン
のものに変えるだけです。(Isomasterを使うか、或いはcdを焼いた後）
- ライブCDのように実行します：完全にRAMの中で実行します。
- 「.sfs」アドオンの使用を可能にします。

オプション 2 (\"full\" インストール):
一般のリナックスインストールで、パピーはそのパーティション全体を使用します。

ご注意：オプション１では制限されたブートオプションしか有りません -- ブートローダー
（例えばGrub）が必要か、或いは「frugal」インストールが「FAT/MSDOS」パーティション
上で有れば、「WakePup2」ブートフロッピ/USBディスクが必要です。オプション２の場合は
フロッピ/USBブートディスク、「Grub」ブートローダー両方かどちらかを生成することが出来ます。

オプション１は「FURUGAL」をクリックして下さい...
オプション２は「FULL」をクリックして下さい...
「window close box」をクリックして中止して下さい..." 0 0
   RET_VAL=$?
   [ $RET_VAL -eq 255 ] && exit
   [ $RET_VAL -eq 1 ] && INSTOPTION="2"
  fi

  #info for creating a grub entry...
  DRV_TYPE="`echo -n "$DESTPART" | cut -b 1-3`" #ex: hda
  GRUB_DRVN=0
  for ONE_TYPE in `fdisk -l | grep "^Disk /dev/" | cut -d' ' -f2 | cut -d':' -f1 | tr '\n' ' '`
  do
   [ "/dev/$DRV_TYPE" = "$ONE_TYPE" ] && break
   GRUB_DRVN=`expr $GRUB_DRVN + 1`
  done
  GRUB_PARTN=`echo -n "$DESTPART" | cut -b 4-5`
  if [ $GRUB_PARTN ];then
   GRUB_PARTN=`expr $GRUB_PARTN - 1`
   GRUB_PARTN=",$GRUB_PARTN"
  fi
   
  #INSTOPTION, install puppy to DESTPART...
  if [ "$INSTOPTION" = "1" ];then #frugal.
   
   Xdialog --stdout --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --fixed-font --no-cancel --inputbox "パピーは${DESTMNTPT}にマウントされている${DESTPART}パーティションにインストールされ
ようとしています。これは「質素なインストール」の為、パピーのファイルを任意のフォルダー
に置く選択が出来ます。パピのマルチインストールにとっては便利です。単独のインストールでも、
パピーの全部のファイルがそれ自身のフォルダーに有れば、ディレクトリのトップレベル「/」
の他のファイルと衝突の可能性をなくします（例えば：他のリナックスがすでにインストールされて
る場合では「initrd.gz」が「/」レベルにインストールされている可能性が有ります）。

フォルダーに独特の名前をつけて下さい。名前にスペースや「/」が有ってはいけません。
ブート時、パピーは「/」から一層下だけ探しますので、パスが「puppyfiles/pup${NEWVER}」
で有ってはなりません。「pup${NEWVER}」だと問題有りません。アルファベットと数字からなる単語を
タイプするか、パピーを「/」のトップディレクトリにインストールしたければ、ブランクを残して
下さい..." 0 0 "puppy${NEWVER}" >/tmp/NEWPSUBDIR
   [ $? -ne 0 ] && exit
   NEWPSUBDIR="`cat /tmp/NEWPSUBDIR | sed -e 's%/%%g'`"
   
   yaf-splash -font "8x16" -outline 0 -margin 4 -bg orange -text "しばらくお待ち下さい。ファイルを$DESTPARTの $NEWPSUBDIRフォルダーにコピーしています..." &
   XPID=$!
   mkdir -p $DESTMNTPT/$NEWPSUBDIR
   cp -f $SRCPATH/vmlinuz $DESTMNTPT/$NEWPSUBDIR/
   sync
   cp -f $SRCPATH/initrd.gz $DESTMNTPT/$NEWPSUBDIR/
   sync
   cp -f $SRCPATH/pup_$NEWVER.sfs $DESTMNTPT/$NEWPSUBDIR/
   sync
   [ -f $SRCPATH/zdrv_$NEWVER.sfs ] && cp -f $SRCPATH/zdrv_$NEWVER.sfs $DESTMNTPT/$NEWPSUBDIR/
   sync
   FPCAPS="`echo -n "$FINALPMEDIA" | tr [a-z] [A-Z]`"
   touch $DESTMNTPT/$NEWPSUBDIR/$FPCAPS #needed by WakePup
   sync
   kill $XPID
   umount /dev/$DESTPART
   
   if [ "`echo -n "$DESTFS" | grep -E 'msdos|vfat'`" != "" ];then
   
    Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --ok-label "CREATE_BOOT_DISK" --cancel-label "NO_BOOT_DISK" --yesno "
パピーをブートするためのフロッピディスクを生成することが出来ます。
我々は現在「WakePup2」と言う総括的なブートフロッピを提供しています。
それはパソコンをスキャンしてパピーがどこにインストールされていすか
を見つけ出します。

ご注意：その後、「Grub」ブートローダーのコンフィグの仕方がしらされます。" 0 0
    if [ $? -eq 0 ];then
     /usr/sbin/wakepup2
    fi
    
   fi
   xNEWPSUBDIR=""
   OPTIONPSUBDIR=""
   if [ "$NEWPSUBDIR" != "" ];then
    xNEWPSUBDIR="/$NEWPSUBDIR"
    OPTIONPSUBDIR=" psubdir=${NEWPSUBDIR}"
   fi
   Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --msgbox "手動で「Grub」や「Lilo」やその他のブートシステムのセットアップが出来ます。

パーティション$DESTPARTは「vmlinux」、「initrd.gz」と「pup_$NEWVER.sfs」のファイル
が有り、「vmlinux」はカーネル、「initrd.gz」はイニシャルラムディスク、それから
「pup_$NEWVER.sfs」はすべてのPuppyファイルが含まれています。

「Grub」がインストールしているなら、「menu.lst」と言うファイルを見付け（一般では
「Grub」がインストールされているパーティションの/bootディレクトリに有ります）、
下記の数行を挿入して下さい：

title Puppy Linux $NEWVER frugal
rootnoverify (hd${GRUB_DRVN}${GRUB_PARTN})
kernel ${xNEWPSUBDIR}/vmlinuz pmedia=${FINALPMEDIA}${OPTIONPSUBDIR}
initrd ${xNEWPSUBDIR}/initrd.gz

...あなたに便利の為に、このテキストは「 /tmp/NEWGRUBTEXT」に書かれてます
" 0 0
   
   echo "title Puppy Linux $NEWVER frugal
rootnoverify (hd${GRUB_DRVN}${GRUB_PARTN})
kernel ${xNEWPSUBDIR}/vmlinuz pmedia=${FINALPMEDIA}${OPTIONPSUBDIR}
initrd ${xNEWPSUBDIR}/initrd.gz" > /tmp/NEWGRUBTEXT

   #finished. could put up a final dlg here, then quit script.
   Xdialog --wmclass "gtkdialog2" --title "パピーユニバーサルインストーラ" --msgbox "Okay, all done!" 0 0
   exit
  else #h.d. install option2
   #upgrade, ask if want delete partition...
   if [ ! $PUPVEROLD -eq 0 ];then
    Xdialog --wmclass "gtkdialog2" --left --buttons-style text --title "パピーユニバーサルインストーラ" --ok-label "UPGRADE" --cancel-label "WIPE" --yesno "$DESTPARTにすでにパピーがインストールされています。\nアップグレードしますか、それともこのパーティションの中身を全部削除しますか。\n\n最後の正気性チェック：$DESTPARTは正しいパーティションで有ることの確信持てますか。\n(ご注意、$DESTPARTは現在　$DESTMNTPTにマウントされています---okay?)\n\n「UPGRADE」ボタンを選んでアップグレードして下さい...\n「WIPE」ボタンを選んでパーティションの中身を削除して下さい...\nウィンドーの「Close」ボックスをクリックして中止して下さい..." 0 0
    RET_VAL=$?
    if [ $RET_VAL -eq 255 ];then
     rox -D "$DESTMNTPT"
     sync
     umount $DESTMNTPT 2>/dev/null
     exit
    fi
    if [ $RET_VAL -eq 1 ];then #no
     Xdialog --wmclass "gtkdialog2" --title "パピーユニバーサルインストーラ" --no-buttons --infobox "しばらくお待ち下さい。 $DESTPARTの中のファイルを削除しています..." 0 0 50000 &
     XPID=$!
     sleep 3
     rm -rf $DESTMNTPT/*
     sync
     kill $XPID
    fi
   fi
   Xdialog --wmclass "gtkdialog2" --title "パピーユニバーサルインストーラ" --no-buttons --infobox "しばらくお待ち下さい。$DESTPARTにパピーのファイルをコピーしています..." 0 0 120000 &
   XPID=$!
   sleep 1
   #loop-device mount pup_xxx.sfs in DESTPART, copy contents of pup_xxx.sfs to DESTPART...
   losetup-FULL /dev/loop2 $SRCPATH/pup_$NEWVER.sfs
   mkdir $DESTMNTPT/srcmntpt
   mount -r -t squashfs /dev/loop2 $DESTMNTPT/srcmntpt
   cp -a -u --remove-destination $DESTMNTPT/srcmntpt/bin $DESTMNTPT/
   cp -a -u --remove-destination $DESTMNTPT/srcmntpt/dev $DESTMNTPT/
   cp -a -u --remove-destination $DESTMNTPT/srcmntpt/etc $DESTMNTPT/
   cp -a -u --remove-destination $DESTMNTPT/srcmntpt/lib $DESTMNTPT/
   cp -a -u --remove-destination $DESTMNTPT/srcmntpt/mnt $DESTMNTPT/
   cp -a -u --remove-destination $DESTMNTPT/srcmntpt/proc $DESTMNTPT/
   cp -a -u --remove-destination $DESTMNTPT/srcmntpt/root $DESTMNTPT/
   cp -a -u --remove-destination $DESTMNTPT/srcmntpt/sbin $DESTMNTPT/
   cp -a -u --remove-destination $DESTMNTPT/srcmntpt/tmp $DESTMNTPT/
   cp -a -u --remove-destination $DESTMNTPT/srcmntpt/usr $DESTMNTPT/
   cp -a -u --remove-destination $DESTMNTPT/srcmntpt/var $DESTMNTPT/
   [ -d $DESTMNTPT/srcmntpt/opt ] && cp -a -u --remove-destination $DESTMNTPT/srcmntpt/opt $DESTMNTPT/ #v2.11
   #v2.12 external modules file...
   [ -f $SRCPATH/zdrv_$NEWVER.sfs ] && cp -af $SRCPATH/zdrv_$NEWVER.sfs $DESTMNTPT/
   [ -f /zdrv_$NEWVER.sfs ] && cp -af /zdrv_$NEWVER.sfs $DESTMNTPT/
   #v2.12 also copy the 'fetched' kernel modules...
   #no, as a fetched module may also have firmware and that would have to
   #be copied also...
   #cp -a -f /lib/modules/$KERNVER/* $DESTMNTPT/lib/modules/$KERNVER/
   #v2.12 not really necessary, but copy this too...
   #no, as fetched modules are commented-out by modprobe script...
   #[ -f /lib/modules/firmware.dep.$KERNVER ] && cp -a -f /lib/modules/firmware.dep.$NEWVER $DESTMNTPT/lib/modules/firmware.dep.$KERNVER
   #but, do copy this...
   if [ -d /lib/modules/$KERNVER/initrd ];then
    mkdir -p $DESTMNTPT/lib/modules/$KERNVER/initrd
    cp -af /lib/modules/$KERNVER/initrd/* $DESTMNTPT/lib/modules/$KERNVER/initrd/
    depmod -b $DESTMNTPT
   fi
   mkdir $DESTMNTPT/sys 2>/dev/null
   rm -f $DESTMNTPT/var/log/modprobes.log 2>/dev/null #v2.13 see /sbin/modprobe script.
   #...not necessary, not using this any more.
   sync
   kill $XPID
   #fix space optimisation links into initrd...
    #TODO
   #chroot to DESTPART, set /etc/puppyversion back to PUPVEROLD, run rc.update
   Xdialog --wmclass "gtkdialog2" --title "パピーユニバーサルインストーラ" --no-buttons --infobox "しばらくお待ち下さい。「rc.update」スクリプトの運行中です..." 0 0 60000 &
   XPID=$!
   sleep 2
   echo -n "$PUPVEROLD" > $DESTMNTPT/etc/puppyversion #set it back to what it was.
   
   #chroot $DESTMNTPT -c /etc/rc.d/rc.update option2hdinstall
   #busybox chroot does not have -c ...
   chroot $DESTMNTPT /etc/rc.d/rc.update option2hdinstall
   #(need to tell rc.update where src files are, as passed param)
   sync
    mv -f $DESTMNTPT/etc/fstab $DESTMNTPT/etc/fstab.bak
    echo "/dev/$DESTPART     /            $DESTFS     defaults               0 1" > $DESTMNTPT/etc/fstab
    echo "none          /proc        proc     defaults               0 0" >> $DESTMNTPT/etc/fstab
    echo "none          /sys         sysfs    defaults               0 0" >> $DESTMNTPT/etc/fstab
    echo "none          /dev/pts     devpts   gid=2,mode=620         0 0" >> $DESTMNTPT/etc/fstab
    echo "/dev/fd0      /mnt/floppy  auto     noauto,rw              0 0" >> $DESTMNTPT/etc/fstab
    #echo "/dev/cdrom    /mnt/cdrom   iso9660  noauto,ro              0 0" >> $DESTMNTPT/etc/fstab
    sync
   kill $XPID
   umount $DESTMNTPT/srcmntpt
   rmdir $DESTMNTPT/srcmntpt
  fi

  #make bootable...
  #usb/floppy boot disk, or grub.
  while [ "$INSTOPTION" = "2" ];do
#TODO needs work, as could have usb hd, that cannot unplug and do not want it to be turned
#     into a boot disk!...
   Xdialog --wmclass "gtkdialog2" --left --buttons-style text --title "パピーユニバーサルインストーラ" --ok-label "USBからブート" --cancel-label "GRUBをインストール" --yesno "途中トラブルが無かったら、パピーは$DESTPARTにインストールされました。\n\
しかし、パピーをどうやってブートするかと言う時たまの難題にぶつかります。\n\
下記の一方か両方をやることが出来ます：\n\
\n\
ブートディスク：フロッピディスクかUSBペンドライブを使ってパピーをブートします。\n\
GRUB:      「GRUB」をハードドライブにインストールします。\n\
\n\
ハードディスクにすでに「GRUB」がインストールされているなら、「GRUB」のオプション\n\
を選択してパピーをブートメニューに追加し、再インストールすればよろしいです。\n\
\n\
USBフラッシュペンドライブを「ブート・ディスク」として使いたければ「USBからブート」\n\
をクリックして下さい。このユニバーサルインストーラスクリプトはUSB「ブート・ディスク」\n\
が生成された時点でこのダイヤログウィンドに戻ります。\n\
ご注意、あなたのパソコンがフロッピドライブを持っていないか或いはハードドライブにGRUBを\n\
インストールしてくない場合のみ、これを選んで下さい。\n\
\n\
「GRUBのインストール」をクリックしてGRUBブートマネージャーをインストールして下さい。\n\
GRUBをハードドライブにインストールされる同時にフロッピ「ブートディスク」の生成のオプションの\n\
選択が与えられます。\n\
\n\
USBブートディスクを選択した場合、続ける前にUSBペンドライブをいますぐ挿入して下さい！\n\
 (ペンドライブの中のすべてのファイルは削除されます)\n\
 アンマウントの状態であるべきです　ーー　続ける前に確認して下さい" 0 0
   if [ $? -eq 0 ];then #BOOT DISK
    BOOTPART=""
    [ ! "`disktype /dev/sda | grep "file system" | grep "^FAT"`" = "" ] && BOOTPART="sda"
    [ ! "`disktype /dev/sda1 | grep "file system" | grep "^FAT"`" = "" ] && BOOTPART="sda1"
    [ ! "`disktype /dev/sdb | grep "file system" | grep "^FAT"`" = "" ] && BOOTPART="sdb"
    [ ! "`disktype /dev/sdb1 | grep "file system" | grep "^FAT"`" = "" ] && BOOTPART="sdb1"
    [ ! "`disktype /dev/sdc | grep "file system" | grep "^FAT"`" = "" ] && BOOTPART="sdc"
    [ ! "`disktype /dev/sdc1 | grep "file system" | grep "^FAT"`" = "" ] && BOOTPART="sdc1"
#    [ ! "`disktype /dev/fd0 | grep "file system" | grep "^FAT"`" = "" ] && BOOTPART="fd0"
    if [ ! "$BOOTPART" = "" ];then
     Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --yesno "パピーの為にブートディスクに'$BOOTPART'を作成したいことを確認して下さい。\nご注意、もし、あなたのパソコンがUSBハードドライブかSATAハードドライブを持っていたら、格別な注意が必要です。\nなぜなら、これらのデバイスはリムーバブルフラッシュペンドライブと同じ「sd」と命名されるからです。\nもしもパピーがこのデバイスを間違えて確認された場合、「No」と答えて下さい...\n\n正しいデバイスであれば、「Yes」ボタンをクリックして下さい..." 0 0
     [ ! $? -eq 0 ] && continue
    fi
    if [ ! "$BOOTPART" = "" ];then
     cp -af $SRCPATH/vmlinuz /mnt/$DESTPART/
     sync
     Xdialog --wmclass "gtkdialog2" --title "パピーユニバーサルインストーラ" --msgbox "$BOOTPART　ブートディスクを生成しています..." 0 0 &
     XPID=$!
     #passed params $BOOTPART $DESTPART $SRCPATH $FINALPMEDIA
     echo '#!/bin/sh
     BOOTPART="$1"
     DESTPART="$2"
     SRCPATH="$3"
     FINALPMEDIA="$4"
      mkdir /tmp/bootdiskmntpt 2> /dev/null
      mount -t msdos /dev/$BOOTPART /tmp/bootdiskmntpt
      rm -rf /tmp/bootdiskmntpt/*
      echo "Creating syslinux.cfg on /dev/$BOOTPART..."
      echo "default vmlinuz root=/dev/$DESTPART pmedia=$FINALPMEDIA" > /tmp/bootdiskmntpt/syslinux.cfg
      echo "Writing the Linux kernel, vmlinuz, to /dev/$BOOTPART..."
      cp -f $SRCPATH/vmlinuz /tmp/bootdiskmntpt/
      sync
      umount /dev/$BOOTPART
      rmdir /tmp/bootdiskmntpt
      echo "Making the /dev/$BOOTPART bootable using Syslinux..."
      syslinux /dev/$BOOTPART
     sync
     echo -n "Done. Press ENTER key: "
     read allisdone
' > /tmp/installpup.sh
     chmod 755 /tmp/installpup.sh
     rxvt -bg "orange" -title "パピーユニバーサルインストーラ" -geometry 80x10 -e /tmp/installpup.sh $BOOTPART $DESTPART $SRCPATH $FINALPMEDIA

     kill $XPID
    fi
   else #Grub
    mkdir -p /mnt/$DESTPART/boot/grub
    cp -af $SRCPATH/vmlinuz /mnt/$DESTPART/boot/
    sync
    umount /mnt/$DESTPART
    Xdialog --wmclass "gtkdialog2" --left --title "パピーユニバーサルインストーラ" --msgbox "\"grubconfig\"スクリプトを実行しようとしています。\nデフォルトを受け入れてください。一番最初の質問は簡単なインストールをするかどうかです。\nそのデフォルトオプションを受け入れて下さい。\nデフォルトのオプションからそれた選択をする時は\nGrubをどこにインストするかと聞かれた時です。 \"MBR\"を選択してください。" 0 0
    unmountcdfunc
    while [ 1 ];do
     grubconfig /dev/$DESTPART
     #...if choose to create a boot floppy, writes 'no' to /tmp/loopbrk.txt.
     Xdialog --wmclass "gtkdialog2" --title "Universal Installer" --yesno "もし、ブート・フロッピーの生成或いはハード・ディスクへのインストの為に「grubconfig」をすでに\n\
実行したならば,「Yes」ボタンをクリックして「grubconfig」スクリプトを再実行して、もう一枚の\n\
ブート・フロッピーを生成するか「GRUB]のハード・ディスクへのインスト或いは再インストをして下さい。\n\
もし「Yes」を選択したならば、前のようにすべてのデフォルトを受け入れて下さい。\n\
\n\
「Yes」をクリックして「grubconfig」を再実行して下さい...\n\
インストが完了したなら、「No」をクリックして下さい..." 0 0
     [ ! $? -eq 0 ] && break
    done
    rm -f /tmp/loopbrk.txt
    exit
   fi
   Xdialog --wmclass "gtkdialog2" --title "パピーユニバーサルインストーラ" --yesno "前に戻って、もう一枚のブートディスクの生成、或いは「Grub」ブートしますか？..." 0 0
   [ ! $? -eq 0 ] && break
  done
  umount /mnt/$DESTPART 2> /dev/null
  ;;
 idecd|scsicd|usbcd)
  gxmessage "まだ導入されていません"
  #TO DO
  ;;
esac

unmountcdfunc

###END###
