#!/bin/sh
#(c) Copyright Barry Kauler 2009, puppylinux.com
#2009 Lesser GPL licence v2 (http://www.fsf.org/licensing/licenses/lgpl.html).
#a gui for makebootfat and syslinux, to make a usb drive bootable, then install puppy.
#optional drive name passed in, ex: 'sdc'.

PARAM1=""
[ $1 ] && PARAM1="$1"
USBDRV="$PARAM1"

export LANG=C
. /etc/rc.d/PUPSTATE

# <text><label>I suggest, if you haven't looked at the BIOS setup boot choices, quit this program and do that first. It is usually entered by pressing F1 or DEL keys when the computer is just powered on -- plug in the USB drive beforehand so that you can see if the BIOS auto-detects it.</label></text>
# Please be aware that running this program will erase anything currently on the USB drive.
# <text><label>The successive fallbacks are to try 'USB-ZIP' then 'USB-FDD'. Ticking one of these radiobuttons will format the USB drive such that it seems like a zip or floppy drive to the PC, then hopefully the PC will boot from it. 'All of the above' makes your USB drive seem like a hard/zip/floppy all together, but note that it creates a strange formatting of the USB drive that some partitioning tools such as Gparted cannot recognise -- so treat that as the last resort.</label></text>
#  <text><label>Click 'OK' to continue, 'Cancel' to quit:</label></text>

echo '#!/bin/sh' > /tmp/bootme-morehelp
echo 'export HELP_DIALOG="<window title=\"BootFlash: Help\" icon-name=\"gtk-info\">
<hbox>
<vbox>
<text use-markup=\"true\"><label>\"<b>BIOS-setup</b>
При включении компьютера нажимите кнопку DEL или F1 с помощью обычно входят в Bios-setup. Если вы включили USB диск заранее, Вы должны увидеть, обнаружил ли Bios его. Или, Вы увидете имеется ли биосе выбор загрузки с USB-НЖМД, USB-ZIP или USB-FDD. Рекомендуем сделать это перед выполнением BootFlash.

<b>Cовместимость c Windows</b>
BootFlash создает один или два раздела на диске USB, или в случае форматов USB-FDD диск без разделов (это называют режимом  <i> Супердискеты </i> ). Любая, файловая система, созданная на диске - FAT16 или FAT32, является совместимой с Microsoft Windows. Это означает, что Вы можете читать и писать файлы с Windows.

<b>ISO9660</b>
Этот метод мало испробован, и я заставил его работать на 2 из 4 ПК, которые я проверял. В BIOS, выберите загрузку с USB-HDD. Однако, в отличие от выбора USB-HDD в BootFlash, который форматирует диск с одним разделом FAT, это создает два раздела, первый ISO9660 и второй FAT - первое - файловая система, используемая в компакт-дисках. Это не нормально, иметь файловую систему ISO9660 во Флэш-памяти или жестком диске, таким образом я не удивлен, что некоторые BIOS не воспринимают это! - но иногда это может работать, когда другие выборы не работают. Однако, есть один большой недостаток, для того чтобы модернизировать Puppy диск должен быть заново переформатирован, используя BootFlash, таким образом Вы должны будете скопировать  pupsave.2fs файл (файл личных настроек) переформатировать а затим скопировать его обратно\"</label></text>
</vbox>

<vbox>
<text use-markup=\"true\"><label>\"<b>Установка Puppy</b>
BootFlash отформатирует диск USB так, чтобы он был загрузочным, затем предложит установить Puppy Linux. Очевидно что это сотрет то, что было на диске. Это необходимо при новой установки Puppy.

<b>Обновление Puppy</b>
Вы можете использовать Универсальный Установщик Puppy, однако это - проще сделать это вручную. Когда появится новая версия Puppy, загрузите LIVE-CD iso файл, кликните на нем, чтобы открыть это. Перетяните файлы vmlinuz, initrd.gz и pup-xxx.sfs на USB диск, и все -  Вы его обновили!
Это очень просто,  но только пара дополнений. Имя третьего файла может немного измениться. xxx - номер версии, и он может называться upup или spup или что то подобное, например upup-512.sfs. Убедитесь, что Вы удалили старый файл, например upup-511.sfs.

ПРЕДУПРЕЖДЕНИЕ: Будьте осторожны перед удалением старого pup-xxx.sfs, убедитесь что он не используется Puppy. Если ПК имеет памяти 256 МБ и более, то Puppy скопирует pup-xxx.sfs в RAM, таким образом оригинал не используется и может быть удален. Чтобы узнать это, нужно открыть терминал и набрать losetup - если Вы видите что то подобное /mnt/tmpfs/upup-511.sfs тогда, он находится в RAM. В противном случае или если неуверены, загрузите другой Puppy с CD диска.

<b>Универсальный инсталятор Puppy</b>
Это - инструмент для того, чтобы установить Puppy на любое устройство, включая USB. BootFlash - альтернативный инструмент предназначенный конкретно для USB и только для новой установки. Вы можете сначала  попробовать Универсального Установщика , и если Вы не сможете получить загрузочный диск  тогда пробуйте BootFlash.\"</label></text>
</vbox>

</hbox>
</window>"
gtkdialog3 --program=HELP_DIALOG' >> /tmp/bootme-morehelp
chmod 777 /tmp/bootme-morehelp

#About dlg...
echo '#!/bin/sh' > /tmp/bootme-about
echo 'export ABOUT_DIALOG="<window title=\"BootFlash: About\" icon-name=\"gtk-info\">
<vbox>
<text use-markup=\"true\"><label>\"<b>BootFlash</b>
Is a GUI application written by Barry Kauler, March 2009. (c) copyright Barry Kauler 2009, licenced under the Lesser GPL licence v2, http://www.fsf.org/licensing/licenses/lgpl.html.

BootFlash использует отличные приложения, в частности, я хотел бы отметить Makebootfat создан Андреа Маззолени и Syslinux созданный Петром Анвин.

Отмечу, Makebootfat был исправлен мной, чтобы оптимизировать количество головок, секторов, дорожек, для использования в BootFlash. Отметьте также,  что необходим Syslinux версии 3.72 и выше для способа ISO9660 BootFlash\"</label></text>
</vbox>
</window>"
gtkdialog3 --program=ABOUT_DIALOG' >> /tmp/bootme-about
chmod 777 /tmp/bootme-about


export MAIN_DIALOG="<window title=\"BootFlash: Создать загрузочный USB диск\" icon-name=\"gtk-preferences\">
<vbox>

<hbox>
<vbox>
 <text><label>\"  \"</label></text>
 <text use-markup=\"true\"><label>\"<b> Добро пожаловать! BootFlash предназначена для того, чтобы получить карты памяти USB (Flash Drive) или USB жесткий диск для загрузки любого компьютера, который имеет вариант настройки BIOS для загрузки с USB ... Затем для установки на ней Puppy</b>\"</label></text>
 
 <text><label>BIOS Setup вашего ПК имеет выбор для загрузки с различных типов приводов. Современные BIOS автоматически обнаружат любые включенные USB устройства, но старые BIOS'ы содержат фиксированный выбор, такой как 'USB-HDD' (жесткий диск), 'USB-ZIP' (ZIP-диск) или 'USB-FDD'(гибкий диск) Для современных BIOS автообнаружения и старых BIOS предпочтительно сделать выбор 'USB-HDD'. Однако, возможно, это не будет работать, даже на современных компьютерах.</label></text>
 
 <text use-markup=\"true\"><label>\"<b>Учтите, что эта программа сотрет все что в настоящее время находится USB диске.</b>\"</label></text>
 
 <frame>
 <radiobutton><label>USB-HDD (hard drive) PREFERRED CHOICE</label><variable>RADIO_HDD</variable></radiobutton>
 <radiobutton><label>USB-ZIP (zip drive)</label><variable>RADIO_ZIP</variable></radiobutton>
 <radiobutton><label>USB-FDD ('SuperFloppy' drive)</label><variable>RADIO_FDD</variable></radiobutton>
 <radiobutton><label>ComboFormat (hard/zip/floppy chameleon)</label><variable>RADIO_ALL</variable></radiobutton>
 <radiobutton><label>ISO9660 (CD filesystem)</label><variable>RADIO_ISO</variable></radiobutton>
 </frame>
 
 <hbox>
  <button><label>Справка</label><action>/tmp/bootme-morehelp & </action></button>
  <button><label>О проге</label><action>/tmp/bootme-about & </action></button>
  <text><label>\"                                    \"</label></text>
  <button ok></button>
  <button cancel></button>
 </hbox>

 </vbox>
 <vbox>
  <frame Справка>
   <text use-markup=\"true\"><label>\"<b>USB-HDD</b>
Это - предпочтительный выбор для современных ПК, является ли диск USB фактическим жестким диском или флешкой. BIOS в современных ПК автоматически обнаружит то, что включено, а более старые BIOS могут иметь выбор 'USB-HDD'  в НАСТРОЙКАХ ПАРАМЕТРОВ BIOS - если так, то выбирайте этот пункт. Однако даже современные ПК могут не загружать диск USB, и Вы, возможно, должны просмотреть на один из следующих вариантов.

<b>USB-ZIP</b>
Это сделает USB диск похожим на Zip-диск. Более старые BIOS могут предложить опцию начальной загрузки с 'USB-ZIP' так, что если Вы знаете, что в BIOS есть вариант загрузки с 'USB-ZIP' выбирайте этот пункт, возможно этот вариант будет удачным. Вы можете даже сделать это с жестким диском USB.

<b>USB-FDD</b>
Этот вариант известен как режим <b> Супердискеты </b>  и заставит USB диск походить на дисковод для гибких дисков. Диск будет отформатирован без разделов - точно так же, как дискета, весь диск будет использоваться для файловой системы.

<b>ComboFormat</b>
Этот очень хитрый вариант. Он заставляет диск походить на HDD, ZIP<i> и </i> НГМД. Это единственный выбор, если Вы хотите иметь USB диск , который будет загружаться практически с любого ПК.\"</label></text>   
  </frame>
 </vbox>
 </hbox>
 
 
</vbox>
</window>"

RETPARAMS="`gtkdialog3 --program=MAIN_DIALOG`"
#ex:
#RADIO_ALL="false"
#RADIO_FDD="false"
#RADIO_HDD="true"
#RADIO_ZIP="false"
#EXIT="OK"

eval "$RETPARAMS"

[ "$EXIT" != "OK" ] && exit

#decide what drive...
if [ "$USBDRV" = "" ];then
 export PLUGIN_DIALOG="<window title=\"BootFlash\" icon-name=\"gtk-preferences\">
<vbox>
 <pixmap><input file>/usr/local/lib/X11/pixmaps/question.xpm</input></pixmap>
 <text use-markup=\"true\"><label>\"<b>Пожалуйста вставте на USB диск прямо сейчас. Если он уже вставлен, проверте, чтобы он был отмонтирован перед продолжением</b>\"</label></text>
 <text><label>Отметьте, не имеет значения, если у вас есть другие USB накопители или устройства, поскольку следующее окно диалога предоставит вам выбор нужного вам USB усторойства.</label></text>
 <hbox>
  <text><label>Нажмите 'OK' для продолжения, 'Отмена' для выхода:</label></text>
  <button ok></button>
  <button cancel></button>
 </hbox>
</vbox>
</window>"
 RETPARAMS="`gtkdialog3 --program=PLUGIN_DIALOG`"
 eval "$RETPARAMS"
 [ "$EXIT" != "OK" ] && exit
 sleep 2
 PROBEDISK="`probedisk2 2> /tmp/probediskerr.txt`"
 USBDRIVES="`echo "$PROBEDISK" | grep '|usbdrv|' | cut -f 3 -d '/' | cut -f 1 -d '|' | tr "\n" " "`"
 SELECTIONS=""
 for ONEUSB in $USBDRIVES
 do
  [ "$ATADRIVES" != "" ] && [ "`echo "$ATADRIVES" | grep "$ONEUSB"`" != "" ] && continue #eliminate ide/sata drives.
  [ "$SATADRIVES" != "" ] && [ "`echo "$SATADRIVES" | grep "$ONEUSB"`" != "" ] && continue #for old kernel.
  USBMEMTYPE="Flash memory"
  [ "`cat /sys/block/$ONEUSB/removable`" != "1" ] && USBMEMTYPE="hard drive"
   USBINFO="`echo "$PROBEDISK" | grep "/dev/$ONEUSB" | head -n 1 | cut -f 3 -d '|' | tr '$' " " | tr ',' ' ' | tr -s " " | sed -e 's/ $//'`"
   USBSIZE="`disktype /dev/$ONEUSB | grep "Block device" | cut -f 2 -d ',' | tr -s " " | cut -f 1-4 -d " "`"
   SELECTIONS="${SELECTIONS}
$ONEUSB \"${USBMEMTYPE}, ${USBINFO}, ${USBSIZE}\""
 done
 xSELECTIONS="`echo "$SELECTIONS" | tr '\n' ' ' | tr -s ' '`"
 if [ "$SELECTIONS" = "" ];then
  xmessage -bg red -center -title "ОШИБКА" "Нет подключенного USB устройства!"
  exit
 fi
 CHOOSEDLG="Xdialog --wmclass \"gtkdialog2\" --title \"BootFlash: Выбор диска\" --no-cancel --stdout --menubox \"	Выберите диск, для форматирования:\" 10 60 0 ${xSELECTIONS}"
 DRVSEL="`eval "$CHOOSEDLG"`"
 [ $? -ne 0 ] && exit
 [ "$DRVSEL" = "" ] && exit #precaution.
 [ "`echo -n "$DRVSEL" | cut -c 1,2`" != "sd" ] && exit #precaution.
 USBDRV="$DRVSEL"
 #reconfirm correct drv choice...
 MYSELECTION="`echo "$SELECTIONS" | grep "^${USBDRV} " | tr '"' ' ' | tr -s ' '`" #'geany
 export RECONFIRM_DIALOG="<window title=\"BootFlash\" icon-name=\"gtk-preferences\">
<vbox>
 <pixmap><input file>/usr/local/lib/X11/pixmaps/question.xpm</input></pixmap>
 <text><label>Пожалуйста подтвердите это, что этот USB диск  Вы хотите форматировать:</label></text>
 <text use-markup=\"true\"><label>\"<b>${MYSELECTION}</b>\"</label></text>
 <text><label>Просьба также подтвердить, что вы хотите использовать BootFlash чтобы переформатировать диск (и установить Puppy). Если Вы имеете новый диск USB, обычно рекомендуется сначала использовать Универсальный Установщик Puppy , поскольку он попытается сделать загрузочный USB диск так как есть, то есть, не переформатируя его. Если вы не пробовали Универсальную Программу установки рекомендуем Вам выйти из этой программы, и запустить Универсальным Установщик из меню Пуск.</label></text>
 <hbox>
  <text><label>Нажмите 'OK' для продолжения, 'Отмена' для выхода:</label></text>
  <button ok></button>
  <button cancel></button>
 </hbox>
</vbox>
</window>"
 RETPARAMS="`gtkdialog3 --program=RECONFIRM_DIALOG`"
 eval "$RETPARAMS"
 [ "$EXIT" != "OK" ] && exit
fi

#make sure not mounted...
while [ "`mount | grep "^/dev/$DRVSEL"`" != "" ];do
 export PLUGIN_DIALOG="<window title=\"BootFlash\" icon-name=\"gtk-preferences\">
<vbox>
 <pixmap><input file>/usr/local/lib/X11/pixmaps/error.xpm</input></pixmap>
 <text use-markup=\"true\"><label>\"<b>Диск ${DRVSEL} все еще смонтирован. Пожалуйста размонтируйте его  перед продолжением. Диск имеет много разделов, они все отмантированы?</b>\"</label></text>
 <text><label>Примечание: нажмите на соответствующую иконку диска на рабочем столе, и вы получите предложение отключить его.</label></text>
 <hbox>
  <text><label>Нажмите 'OK' для продолжения, 'Отмена' для выхода:</label></text>
  <button ok></button>
  <button cancel></button>
 </hbox>
</vbox>
</window>"
 RETPARAMS="`gtkdialog3 --program=PLUGIN_DIALOG`"
 eval "$RETPARAMS"
 [ "$EXIT" != "OK" ] && exit
 sleep 1
done


#gather the files together...
rm -rf /tmp/makebootfat 2>/dev/null
mkdir /tmp/makebootfat
cd /tmp/makebootfat
cp -a /usr/lib/syslinux/ldlinux.bss ./
cp -a /usr/lib/syslinux/mbrfat.bin ./
cp -a /usr/lib/syslinux/mbr.bin ./
cp -a /usr/lib/syslinux/ldlinux.sys ./
mkdir tempdir

yaf-splash -font "8x16" -outline 0 -margin 4 -bg orange -text "Пожалуйста подождите, форматируется $ {USBDRV} диск..." &
X1PID=$!

if [ "$RADIO_HDD" = "true" ];then #hard drive.
 #weird code here...
 dd if=/dev/zero of=/dev/$USBDRV bs=512 count=1
 sync
 #fdisk cannot be used to create a partition table, it won't boot, use makebootfat...
 makebootfat --output /dev/$USBDRV --syslinux3 --boot ldlinux.bss --mbr mbr.bin --copy ldlinux.sys tempdir
 #...but drive broken, fix as follows...

 #update: have patched 'makebootfat', no longer need this...
 ##optional...
 ##maybe should use 'parted'. with fdisk, to change heads/sectors, have to create a broken partition...
 ##fdisk weird, delete partition, change to 255 heads, 63 sectors/track, create a (wrong) partition...
 #echo -e 'd\nx\nh\n255\ns\n63\nr\nn\np\n1\n\n\nw' | fdisk /dev/$USBDRV
 #sync
 ##delete wrong partition, create correct partition...
 #echo -e 'd\nn\np\n1\n\n\nw' | fdisk /dev/$USBDRV
 #sync
 
 #also optional...
 dd if=/dev/zero of=/dev/${USBDRV}1 bs=512 count=1 #zeroise first 512 bytes of partition. some apps need this.

 DRVSIZEB=`fdisk -l /dev/${USBDRV} | grep '^Disk /dev/' | cut -f 5 -d ' '` #in bytes.
 DRVSIZEK=`expr $DRVSIZEB \/ 1024`
 DRVSIZEM=`expr $DRVSIZEK \/ 1024`
 sync
 if [ $DRVSIZEM -gt 1024 ];then #1GB
  #set partition-id to fat32 (0b=fat32, oc=fat32-lba)...
  echo -e 't\n0b\nw' | fdisk /dev/$USBDRV
  mkdosfs -F 32 /dev/${USBDRV}1 #FAT32.  -n puppysave
 else
  #set partition-id to fat16 (06=fat16, 0e=fat16-lba)...
  echo -e 't\n06\nw' | fdisk /dev/$USBDRV
  mkdosfs -F 16 /dev/${USBDRV}1 #FAT16.  -n puppysave
 fi
 sync
 syslinux /dev/${USBDRV}1
 #um, it may still need to have the boot flag set...
 [ "`fdisk -l /dev/$USBDRV | grep '/dev/.* \\* '`" = "" ] && echo -e 'a\n1\nw' | fdisk /dev/$USBDRV
 #one big fat partition, pup_save will be in it too...
 PUPSAVEPART="${USBDRV}1"
 PUPBOOTPART="${USBDRV}1"
else

 if [ "$RADIO_FDD" = "true" ];then #only choose this for drives no greater than 1GB.
  #take out '--mbrfat' has partition but makes look like floppy drive.
  #take out '--mbr mbrfat.com' as there are no partitions.
  #take out '--zip' as that forces 32 sector 64 head zip disk architecture.
  #add '--disk' to ensure operate on disk not a partition.
  makebootfat --output /dev/$USBDRV --syslinux3 --disk --boot ldlinux.bss --copy ldlinux.sys tempdir
  PUPSAVEPART="${USBDRV}"
  PUPBOOTPART="${USBDRV}"
 else

  #need space for 128MB image...
  WKGPATH="/tmp"
  FREEM=`df -m | grep ' /tmp$' | tr -s ' ' | cut -f 4 -d ' '`
  if [ $FREEM -lt 135 ];then
   WKGPATH="/root"
   FREEM=`df -m | grep ' /$' | tr -s ' ' | cut -f 4 -d ' '`
   if [ $FREEM -lt 135 ];then
    WKGPATH="`readlink /mnt/home`"
    mhPATTERN=' '"$WKGPATH"'$'
    FREEM=`df -m | grep "$mhPATTERN" | tr -s ' ' | cut -f 4 -d ' '`
   fi
  fi
  if [ $FREEM -lt 135 ];then
   kill $X1PID
   xmessage -title "ОШИБКА" "ИЗВИНИТЕ, не возможно найти 128MB свободного пространства!"
   exit
  fi

  if [ "$RADIO_ISO" = "true" ];then
   #need puppy.iso to copy to usb drive...
   kill $X1PID
   SRCFPATH="`Xdialog --wrap --wmclass "gtkdialog2" --left --backtitle "Выбор 'ISO9660' Puppy .iso файл был записан непосредственно на USB диск. Пожалуйста выберите это, тогда нажмите 'ОК':" --title "BootFlash: ISO9660 Формат" --stdout --no-buttons --no-cancel --fselect "*.iso" 0 0`"
   [ $? -ne 0 ] && exit
   yaf-splash -font "8x16" -outline 0 -margin 4 -bg orange -text "Пожалуйста подождите, копируется .iso file..." &
   X1PID=$!
   rm -f $WKGPATH/image128m 2>/dev/null
   cp -f "$SRCFPATH" $WKGPATH/image128m
   sync
   isohybrid $WKGPATH/image128m
   sync
   PUPSAVEPART="${USBDRV}2"
   PUPBOOTPART="${USBDRV}1"
  else
   #create 128M empty file...
   dd if=/dev/zero of=${WKGPATH}/image128m bs=1024 count=131072 #128MB
   sync
   LOOPDEV="`losetup -f`"
   losetup $LOOPDEV ${WKGPATH}/image128m
   if [ "$RADIO_ALL" = "true" ];then #ComboFormat
    makebootfat --output $LOOPDEV --syslinux3 --zip --boot ldlinux.bss --mbr mbrfat.bin --mbrfat --copy ldlinux.sys tempdir
    #'--zip' sets partition-4 as bootable, so pup_save will go into partition-1...
    PUPSAVEPART="${USBDRV}1"
    PUPBOOTPART="${USBDRV}4"
   fi
   if [ "$RADIO_ZIP" = "true" ];then
    #take out '--mbrfat' has partition but makes look like floppy drive.
    makebootfat --output $LOOPDEV --syslinux3 --zip --boot ldlinux.bss --mbr mbrfat.bin --copy ldlinux.sys tempdir
    #'--zip' sets partition-4 as bootable, so pup_save will go into partition-1...
    PUPSAVEPART="${USBDRV}1"
    PUPBOOTPART="${USBDRV}4"
   fi
   sync
   losetup -d $LOOPDEV
  fi

  #write bootable f.s. to drive...
  dd if=${WKGPATH}/image128m of=/dev/$USBDRV
  sync
  rm -f ${WKGPATH}/image128m

  #now create partition to fill remaining space on usb drive...
  if [ "$RADIO_ISO" = "true" ];then
   echo -e 'n\np\n2\n\n\nw' | fdisk /dev/$USBDRV #create partition-2
   PARTNUM="2"
  else
   echo -e 'n\np\n1\n\n\nw' | fdisk /dev/$USBDRV #create partition-1
   PARTNUM="1"
  fi
  DRVSIZEB=`fdisk -l /dev/${USBDRV} | grep '^Disk /dev/' | cut -f 5 -d ' '` #in bytes.
  DRVSIZEK=`expr $DRVSIZEB \/ 1024`
  DRVSIZEM=`expr $DRVSIZEK \/ 1024`
  if [ $DRVSIZEM -gt 1024 ];then #1GB
   #set partition-id to fat32 (0b=fat32, oc=fat32-lba)...
   echo -e "t\n${PARTNUM}\n0b\nw" | fdisk /dev/${USBDRV}
   sync
   mkdosfs -F 32 -n puppysave /dev/${PUPSAVEPART} #FAT32.
  else
   #set partition-id to fat16 (06=fat16, 0e=fat16-lba)...
   echo -e "t\n${PARTNUM}\n06\nw" | fdisk /dev/${USBDRV}
   mkdosfs -n puppysave /dev/${PUPSAVEPART} #FAT16.
  fi

 fi
fi

#need to refresh desktop drive icons(s)...
#/tmp/pup_event_frontend_block_request is used in /sbin/pup_event_frontend_d to refresh drv...
echo "$USBDRV" > /tmp/pup_event_frontend_block_request

kill $X1PID


#announce finished, offer to install Puppy...
if [ "$RADIO_ISO" = "true" ];then
 export FINISHED_DIALOG="<window title=\"BootFlash: ISO9660 окончание форматирорования\" icon-name=\"gtk-preferences\">
<vbox>
 <pixmap><input file>/usr/local/lib/X11/pixmaps/ok.xpm</input></pixmap>
 <text use-markup=\"true\"><label>\"<b>All done!</b>\"</label></text>
 <text><label>Диск теперь имеет два раздела , ISO9660 и остальную часть диска FAT  раздел. Puppy предложит, создать файл сохранения в последнем, при первом выходе из системы после успешной загрузки с USB диска.</label></text>
 <hbox>
  <button ok></button>
 </hbox>
</vbox>
</window>"
 gtkdialog3 --program=FINISHED_DIALOG
 exit
fi

export FINISHED_DIALOG="<window title=\"BootFlash: Установка Puppy\" icon-name=\"gtk-preferences\">
<vbox>
 <pixmap><input file>/usr/local/lib/X11/pixmaps/question.xpm</input></pixmap>
 <text use-markup=\"true\"><label>\"<b>	Теперь (надеемся) USB диск стал загрузочным!</b>\"</label></text>
 <text><label>Теперь, если Вы желаете, Вы можете установить Puppy Linux на диск. Если Вы хотите, это можно быть сделать позднее используя Универсальный Установщик Puppy. Если Вы хотите устанавить Puppy  сейчас, Вы должны иметь iso файл Puppy liveCD.</label></text>
 <hbox>
  <button type=\"exit\">
   <label>Установка Puppy</label>
  </button>
  <button type=\"exit\">
   <input file icon=\"gtk-close\"></input>
   <label>Выход, окончание</label>
  </button>
 </hbox>
</vbox>
</window>"
RETPARAMS="`gtkdialog3 --program=FINISHED_DIALOG`"

eval "$RETPARAMS"
[ "$EXIT" != "Install Puppy" ] && exit

cd /root
SRCFPATH="`Xdialog --wrap --wmclass "gtkdialog2" --left --backtitle "Пожалуйста выберите Puppy live-CD .iso file, и нажмите 'OK':" --title "BootFlash: Choose .iso" --stdout --no-buttons --no-cancel --fselect "*.iso" 0 0`"
[ $? -ne 0 ] && exit
yaf-splash -font "8x16" -outline 0 -margin 4 -bg orange -text "Пожалуйста подождите, копируются файлы с .iso файла..." &
X1PID=$!
mkdir -p /tmp/bootflash_iso
mount -t iso9660 -o loop ${SRCFPATH} /tmp/bootflash_iso
if [ $? -ne 0 -o ! -f /tmp/bootflash_iso/initrd.gz ];then
 xmessage -bg red -center -title ОШИБКА" "Жаль ошибка, получения доступа к .iso файлу"
 exit
fi

mkdir -p /mnt/${PUPBOOTPART}
mount -t vfat /dev/${PUPBOOTPART} /mnt/${PUPBOOTPART}
if [ "`mount | grep "/dev/${PUPBOOTPART}"`" = "" ];then
 xmessage -bg red -center -title "ОШИБКА" "Извините ошибк монтирования USB диска"
 exit
fi

rm -f /mnt/${PUPBOOTPART}/*-[0-9][0-9][0-9].sfs
#create a syslinux.cfg file...
PMEDIA="usbflash"
[ "`cat /sys/block/$USBDRV/removable`" != "1" ] && USBMEMTYPE="usbhd"
echo "default vmlinuz initrd=initrd.gz pmedia=${PMEDIA}" > /mnt/${PUPBOOTPART}/syslinux.cfg
cp -f /tmp/bootflash_iso/vmlinuz /mnt/${PUPBOOTPART}/
cp -f /tmp/bootflash_iso/initrd.gz /mnt/${PUPBOOTPART}/
cp -f /tmp/bootflash_iso/*-[0-9][0-9][0-9].sfs /mnt/${PUPBOOTPART}/
sync

umount /mnt/${PUPBOOTPART}
umount /tmp/bootflash_iso
kill $X1PID

export DONE_DIALOG="<window title=\"BootFlash: Установка Puppy\" icon-name=\"gtk-preferences\">
<vbox>
 <pixmap><input file>/usr/local/lib/X11/pixmaps/ok.xpm</input></pixmap>
 <text use-markup=\"true\"><label>\"<b>Установка Puppy!</b>\"</label></text>
 <text><label>На рабочем столе иконки дисков должны были обновлены, поэтому вы можете нажать на них, чтобы убедиться, что все выглядит правильно. Затем перезагрузиться и узнать все наверняка ...</label></text>
 <hbox>
  <button ok></button>
 </hbox>
</vbox>
</window>"
gtkdialog3 --program=DONE_DIALOG

###END###
