#!/bin/sh
#nicOS-Savefolder2Savefile.  An application to copy the contents of the savefolder to a savefile, (c) Copyright 2022, amethyst.

[ "`whoami`" != "root" ] && exec sudo -A ${0} ${@} 

KERNELVER="`uname -r`"

. /etc/rc.d/PUPSTATE
[ "$PUP_LAYER" = "" ] && PUP_LAYER="/pup_ro2"

. /etc/DISTRO_SPECS
PUPPYSFS="$DISTRO_PUPPYSFS" 
ZDRVSFS="$DISTRO_ZDRVSFS"   
SFSBASE="`basename $PUPPYSFS .sfs`"

m_10="$(gettext 'Size')"
m_11="$(gettext 'Free')"

ANSWER=$(Xdialog --stdout --left --wrap --icon /usr/local/lib/X11/pixmaps/nicOS.png --no-cancel --title "Savefolder2Savefile" --help "This application copies the contents of your savefolder to a newly
created savefile.

Select one of items 2 to 28.

NB:  DO NOT DESELECT ITEM 1.

Make sure that the size of the savefile will be big enough.

The operation will take time, please be patient...." --checklist "Click the 'Help' button for instructions.
 
Click 'OK' after making your selection." 0 0 10 "1" "Choose Work Area" "on" "2" "50 MB   2fs" "off" "3" "100 MB   2fs" "off" "4" "250 MB   2fs" "off" "5" "500 MB   2fs" "off" "6" "750 MB   2fs" "off" "7" "1000 MB   2fs" "off" "8" "2000 MB   2fs" "off" "9" "4000 MB   2fs" "off" "10" "8000 MB   2fs" "off" "11" "50 MB   3fs" "off" "12" "100 MB   3fs" "off" "13" "250 MB   3fs" "off" "14" "500 MB   3fs" "off" "15" "750 MB   3fs" "off" "16" "1000 MB   3fs" "off" "17" "2000 MB   3fs" "off" "18" "4000 MB   3fs" "off" "19" "8000 MB   3fs" "off" "20" "50 MB   4fs" "off" "21" "100 MB   4fs" "off" "22" "250 MB   4fs" "off" "23" "500 MB   4fs" "off" "24" "750 MB   4fs" "off" "25" "1000 MB   4fs" "off" "26" "2000 MB   4fs" "off" "27" "4000 MB   4fs" "off" "28" "8000 MB   4fs" "off") 
 case /$ANSWER/ in 
 */1/*) SAVEPART="$PDEV1" 
CDR="/dev/$SAVEPART"

PARTSLIST="`probepart -m 2> /dev/null | grep '^/dev/' | grep -E 'f2fs|ext2|ext3|ext4|reiserfs|msdos|vfat|ntfs' | cut -f 1-3 -d '|'`"

 echo -n "" > /tmp/schoices.txt
 echo "$PARTSLIST" |
 while read APART
 do
  [ "$APART" = "" ] && continue 
  MNTSTATUS="($m_07)" 
  ATAG="`echo -n "$APART" | cut -f 1 -d '|' | cut -f 3 -d '/'`"
  ASIZE="`echo -n "$APART" | cut -f 3 -d '|'`"
  AFS="`echo -n "$APART" | cut -f 2 -d '|'`"
  AFPATTERN="^/dev/$ATAG " 
  AFREE="`df -m | grep "$AFPATTERN" | tr -s " " | cut -f 4 -d " "`"
  FLAG_RO='no' 
  if [ ! "$AFREE" ];then
   MNTSTATUS="($m_08)" 
   mkdir -p /mnt/$ATAG
   mount -t $AFS /dev/$ATAG /mnt/$ATAG > /dev/null 2>&1
   if [ $? -eq 0 ];then
    if [ "$ATAG" = "fd0" ];then
     FFREE=`df -k | grep "$AFPATTERN" | tr -s " " | cut -f 4 -d " "`
     AFREE="`LANG=C dc $FFREE 1024 \/ p`"
    else
     AFREE="`df -m | grep "$AFPATTERN" | tr -s " " | cut -f 4 -d " "`"
    fi
    [ "`mount | grep "$AFPATTERN" | grep ' (rw'`" = "" ] && FLAG_RO='yes' 
    umount /dev/$ATAG
   else
    continue
   fi
  else
   [ "`mount | grep "$AFPATTERN" | grep ' (rw'`" = "" ] && FLAG_RO='yes' 
  fi
  [ "$FLAG_RO" = "yes" ] && continue   
  [ "$AFS" ] && echo "${ATAG} \"${m_09}: $AFS  ${m_10}: ${ASIZE}M  ${m_11}: ${AFREE}M ${MNTSTATUS}\" \\" >> /tmp/schoices.txt 
 done
 SCHOICES="`cat /tmp/schoices.txt`"

SIZETMPFSM=`df -m | grep '^tmpfs' | grep -E "/initrd/pup_rw|/initrd/mnt/tmpfs" | tr -s " " | cut -f 4 -d " "`
TMPFSMSG=''

if [ "$SIZETMPFSM" != "" ];then
 TOTALTMPFSM=`df -m | grep '^tmpfs' | grep -E '/initrd/pup_rw|/initrd/mnt/tmpfs' | tr -s " " | cut -f 2 -d " "`
 if [ "$SCHOICES" = "" ];then 
  SCHOICES="ramdisk \"$m_09: tmpfs  $m_10: ${TOTALTMPFSM}M  $m_11: ${SIZETMPFSM}M ($m_07)\" \\"
 else
  SCHOICES="$SCHOICES
ramdisk \"$m_09: tmpfs  $m_10: ${TOTALTMPFSM}M  $m_11: ${SIZETMPFSM}M ($m_07)\" \\"
 fi
 m_12="$(gettext 'Note 2: you can use the tmpfs ramdisk, which is in RAM, if it has enough space.')"
 TMPFSMSG="$m_12
 "
fi
 
[ "$SCHOICES" = "" ] && exit 
m_13="$(gettext 'A working area is required to create the new sfs file.')

$(gettext 'Select choice from the list then click OK button.')"
 echo '#!/bin/sh' > /tmp/savedlg
 echo -n "Xdialog --wrap --left --stdout --title \"Choose working area\" --menubox \"$m_13\" 0 80 10 " >> /tmp/savedlg
 echo "$SCHOICES"  >> /tmp/savedlg
 echo ' > /tmp/tag.txt' >> /tmp/savedlg
 chmod 755 /tmp/savedlg

kill $XPID
/tmp/savedlg
[ $? -ne 0 ] && exit 
WKGPART="`cat /tmp/tag.txt`"
echo "WKGPART=$WKGPART"
[ "$WKGPART" = "" ] && exit

[ "$WKGPART" = "ramdisk" ] && WKGMNTPT="/"
WPATTERN="/dev/$WKGPART "
[ "$WKGMNTPT" = "" ] && WKGMNTPT="`mount | grep "$WPATTERN" | tr -s " " | cut -f 3 -d " "`"
if [ "$WKGMNTPT" = "" ];then
 PPATTERN="^$WKGPART "
 WKGFS="`echo "$SCHOICES" | grep "$PPATTERN" | cut -f 2 -d ':' | cut -f 2 -d " "`"
 [ "$WKGFS" = "msdos" ] && WKGFS="vfat"
 mkdir -p /mnt/$WKGPART
 mount -t $WKGFS /dev/$WKGPART /mnt/$WKGPART
 [ $? -ne 0 ] && exit 
 WKGMNTPT="/mnt/$WKGPART"
fi
[ "$WKGMNTPT" = "/" ] && WKGMNTPT="/" ;;&  
 */2/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs bs=1k count=51200 && mke2fs -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs ;;&
 */3/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs bs=1k count=102400 && mke2fs -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs ;;&
 */4/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs bs=1k count=256000 && mke2fs -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs ;;&
 */5/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs bs=1k count=512000 && mke2fs -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs ;;&
 */6/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs bs=1k count=768000 && mke2fs -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs ;;&
 */7/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs bs=1k count=1024000 && mke2fs -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs ;;&
 */8/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs bs=1k count=2048000 && mke2fs -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs ;;&
 */9/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs bs=1k count=4096000 && mke2fs -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs ;;&
 */10/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs bs=1k count=8192000 && mke2fs -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs ;;&
 */11/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs bs=1k count=51200 && mkfs.ext3 -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs ;;&
 */12/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs bs=1k count=102400 && mkfs.ext3 -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs ;;&
 */13/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs bs=1k count=256000 && mkfs.ext3 -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs ;;&
 */14/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs bs=1k count=512000 && mkfs.ext3 -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs ;;&
 */15/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs bs=1k count=768000 && mkfs.ext3 -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs ;;&
 */16/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs bs=1k count=1024000 && mkfs.ext3 -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs ;;&
 */17/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs bs=1k count=2048000 && mkfs.ext3 -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs ;;&
 */18/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs bs=1k count=4096000 && mkfs.ext3 -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs ;;&
 */19/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs bs=1k count=8192000 && mkfs.ext3 -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs ;;&
 */20/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs bs=1k count=51200 && mkfs.ext4 -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs ;;&
 */21/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs bs=1k count=102400 && mkfs.ext4 -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs ;;&
 */22/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs bs=1k count=256000 && mkfs.ext4 -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs ;;&
 */23/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs bs=1k count=512000 && mkfs.ext4 -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs ;;&
 */24/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs bs=1k count=768000 && mkfs.ext4 -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs ;;&
 */25/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs bs=1k count=1024000 && mkfs.ext4 -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs ;;&
 */26/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs bs=1k count=2048000 && mkfs.ext4 -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs ;;&
 */27/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs bs=1k count=4096000 && mkfs.ext4 -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs ;;&
 */28/*) dd if=/dev/zero of=$WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs bs=1k count=8192000 && mkfs.ext4 -q -m 0 -F $WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs ;;&        
esac

filemnt $WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs
filemnt $WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs
filemnt $WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs
rm /root/.XLOADED
rm /etc/.XLOADED
alsactl --file /etc/asound.state store
cp -a /initrd/pup_ro1/* /initrd/pup_rw/*   /mnt/*.2fs
cp -a /initrd/pup_ro1/* /initrd/pup_rw/*   /mnt/*.3fs
cp -a /initrd/pup_ro1/* /initrd/pup_rw/*   /mnt/*.4fs
sleep 3
filemnt $WKGMNTPT/${DISTRO_FILE_PREFIX}save.2fs
filemnt $WKGMNTPT/${DISTRO_FILE_PREFIX}save.3fs
filemnt $WKGMNTPT/${DISTRO_FILE_PREFIX}save.4fs
rox -d $WKGMNTPT 

 

####THE END######



