#!/bin/sh
# SeTpartition user-friendly rewrite Fri Dec 15 13:17:40 CST 1995 pjv
crunch () { # remove extra whitespace
    read STRING;
    echo $STRING
}
T_PX=/mnt
if [ ! -r /tmp/SeTplist ]; then
 # Give warning?
    echo "exit"
fi
dialog --title "ϡɥǥΥ" --infobox \
    "Plamo åȥåפLinuxѡƥõ \n\
ϡɥǥ򥹥ǤԤ" 6 60

cat << EOF > /tmp/tmpscript
#!/bin/sh
dialog --title "Linux򥤥󥹥ȡ뤹ѡƥ:" --menu \\
"root/˥ѡƥˤLinuxѡƥ \\
ꥹȤ򤷤Ƥ" 15 70 5 \\
EOF
export COUNT=0
cat /tmp/SeTplist | while [ 0 ]; do
    read PARTITION;
    if [ "$PARTITION" = "" ]; then
	break;
    fi
    NAME=`echo $PARTITION | crunch | cut -f 1 -d ' '`
    SIZE=`echo "$PARTITION" | tr -d "*" | tr -d "+" | crunch | cut -f 4 -d ' '`
    echo "\"$NAME\" \"Linux, ${SIZE}K\" \\" >> /tmp/tmpscript
done
echo "\"---\" \"(ʤåȥåץ˥塼)\" \\" >> /tmp/tmpscript
echo "\"---\" \"(ʤåȥåץ˥塼)\" \\" >> /tmp/tmpscript
echo "\"---\" \"(ʤåȥåץ˥塼)\" \\" >> /tmp/tmpscript
echo "\"---\" \"(ʤåȥåץ˥塼)\" \\" >> /tmp/tmpscript
echo "\"---\" \"(ʤåȥåץ˥塼)\" \\" >> /tmp/tmpscript
echo "2> /tmp/return" >> /tmp/tmpscript
. /tmp/tmpscript
if [ $? = 1 -o $? = 255 ]; then
    rm /tmp/tmpscript
    exit 255 # user abort
fi
ROOT_DEVICE="`cat /tmp/return`"
rm /tmp/tmpscript
if [ "$ROOT_DEVICE" = "---" ]; then
    exit 255
fi
ROOT_SIZE=`probe -l | grep "$ROOT_DEVICE " | tr -d "*" | tr -d "+" | crunch | cut -f 4 -d ' '`
dialog --title "ѡƥ$ROOT_DEVICEΥեޥå" \
    --menu "ޤΥѡƥ󤬥եޥåȤƤʤä顤 \
եޥåȤʤФʤޤ: եޥåȤȥѡƥ \
Τ٤ƤΥǡϾõޤ¸Υѡƥѹ \
Τʤ顤ư롼ȥǥǤϤʤϡɥǥ \
åȥåפ¹ԤʤФޤ󡣡ʥϡɥǥΥå \
åץץȵư롼ȥǥΥåȥåפϥС \
ۤʤޤˤΥѡƥեޥåȤޤ?" 18 76 3 \
    "Format" "åեޥå -- Хåɥ֥åΥåϤޤ" \
    "Check" "եޥå -- Хåɥ֥ååޤ" \
    "No" "ΥѡƥեޥåȤޤ" 2> /tmp/format
if [ $? = 1 -o $? = 255 ]; then
    rm -f /tmp/format
    exit
fi
DOFORMAT="`cat /tmp/format`"
rm -f /tmp/format
if [ ! "$DOFORMAT" = "No" ]; then
    dialog --title "$ROOT_DEVICEFS" --menu \
	"Plamo Linux Ǥϥե륷ƥȤext4/ext3/ext2/reiserfs  \
	ѤǤޤΥѡƥɤΥե륷ƥǺ \
	ޤ" 22 76 6 \
	"ext4" "ext3 + ǽ(Ȥθߴ򵤤ˤʤʤǽ)" \
	"ext3" "ext2 + journaling ǽ(Ф餯ɸ)" \
	"ext2" "ext2 fs(FSӸ)" \
	"reiserfs" "reiser fs(褬԰¤ʤΤ侩)" 2> /tmp/fstype
    if [ $? = 1 -o $? = 255 ]; then
	rm -f /tmp/fstype
	exit
    fi
    FSTYPE="`cat /tmp/fstype`"
    rm -rf /tmp/fstype
    ROOT_SYS_TYPE=$FSTYPE

    dialog --title "եޥå" --infobox "$ROOT_DEVICEեޥå  \n\
  $ROOT_DEVICE  $FSTYPE ǥեޥåȤƤޤ" 6 45
    if mount | grep "$ROOT_DEVICE " 1> /dev/null 2> /dev/null ; then
	umount $ROOT_DEVICE 2> /dev/null
    fi
    if [ "$FSTYPE" = "ext4" ]; then
	if [ "$DOFORMAT" = "Check" ]; then
	    mkfs.ext4 -L rootfs -c  $ROOT_DEVICE
	else
	    mkfs.ext4 -L rootfs  $ROOT_DEVICE
	fi
    fi

    if [ "$FSTYPE" = "ext3" ]; then
	if [ "$DOFORMAT" = "Check" ]; then
	    mkfs.ext3 -I 128 -L rootfs  -c $ROOT_DEVICE
	else
	    mkfs.ext3 -I 128 -L rootfs -j $ROOT_DEVICE
	fi
    fi
    if [ "$FSTYPE" = "ext2" ]; then
	if [ "$DOFORMAT" = "Check" ]; then
	    mke2fs -I 128 -L rootfs -c $ROOT_DEVICE
	else
	    mke2fs -I 128 -L rootfs $ROOT_DEVICE
	fi
    fi
    if [ "$FSTYPE" = "reiserfs" ]; then
	mkreiserfs -l rootfs -f --format 3.6 $ROOT_DEVICE
    fi
else # DOFORMAT?
    ROOT_SYS_TYPE="";
    dialog --infobox "$ROOT_DEVICEޥ..." 3 60
    for filesystem in ext4 ext3 ext2 reiserfs ; do
	mount -t $filesystem $ROOT_DEVICE $T_PX 1> /dev/null 2> /dev/null
	if [ $? = 0 ]; then
	    ROOT_SYS_TYPE=$filesystem
	    break
	fi
    done
    if [ "$ROOT_SYS_TYPE" = "" ]; then
	dialog --title "$ROOT_DEVICEޥȤǤޤ" --msgbox \
	    "$ROOT_DEVICE ext4/ext3/ext2/reiserfs ηǥޥȤǤޤǤ\n\
꤬ȻפΤǥ󥹥ȡλޤ." 14 70
	exit
    fi
fi

# Now, we need to mount the newly selected root device:
sync
mount -t $ROOT_SYS_TYPE $ROOT_DEVICE $T_PX 1> /dev/null 2> /dev/null
echo "$ROOT_DEVICE       /        $ROOT_SYS_TYPE        defaults   1   1" > /tmp/SeTnative
echo $ROOT_DEVICE > /tmp/SeTrootdev
# done mounting the target root partition

# More than one Linux partition
if [ ! "`cat /tmp/SeTplist | sed -n '2 p'`" = "" ]; then 
    while [ 0 ]; do # next partition loop
	cat << EOF > /tmp/tmpscript
#! /bin/sh
dialog --title "/etc/fstabɲä뤽¾Linuxѡƥ" \\
--menu \\
"LinuxѤȥޡ줿ѡƥ¾ˤ⤢褦Ǥ \\
ߡ$ROOT_DEVICE / ѡƥȤƥޥȤ \\
ޤ/usr  /opt Τ褦礭ǥ쥯ȥϡ \\
Ωѡƥ˥ޥȤ⤷ޤ \\
 /etc/sbin 뤤 /bin Τ褦ʥǥ쥯ȥ / ʳ \\
ѡƥ˥ޥȤƤϤޤ󡣤Υǥ쥯 \\
˴ޤޤƤեϥƥεưѡƥΥޥ \\
Ȥ˻Ȥ뤫Ǥ(ڤ꤬̤ˤ֤ˤʤä㤤ޤ) \\
ޤǤ˻ꤷƤѡƥٻꤷƤϤޤ \\
ꥹȤ餤줫Linuxѡƥ򤹤뤫 \\
󥻥򲡤Ƥ" 22 76 4 \\
EOF
	cat /tmp/SeTplist | while [ 0 ]; do
	    read PARTITION;
	    if [ "$PARTITION" = "" ]; then
		break;
	    fi
	    SIZE=`echo "$PARTITION" | tr -d "*" | tr -d "+" | crunch | cut -f 4 -d ' '`
	    ALTNAME=""
	    DEVICE=`echo "$PARTITION" | tr -d "*" | crunch | cut -f 1 -d ' '`
	    if grep "$DEVICE " /tmp/SeTnative 1> /dev/null; then # it's been used
		ALTNAME="$DEVICE, Linux, ${SIZE}K"
	    fi
	    NAME=`echo $PARTITION | crunch | cut -f 1 -d ' '`
	    if [ "$ALTNAME" = "" ]; then
		echo "\"$NAME\" \"Linux, ${SIZE}K\" \\" >> /tmp/tmpscript
	    else
		echo "\"()\" \"$ALTNAME\" \\" >> /tmp/tmpscript
	    fi
	done
	echo "\"---\" \"(ʤ, åȥåפ)\" \\" >> /tmp/tmpscript
	echo "\"---\" \"(ʤ, åȥåפ)\" \\" >> /tmp/tmpscript
	echo "\"---\" \"(ʤ, åȥåפ)\" \\" >> /tmp/tmpscript
	echo "\"---\" \"(ʤ, åȥåפ)\" \\" >> /tmp/tmpscript
	echo "2> /tmp/return" >> /tmp/tmpscript
	. /tmp/tmpscript
	if [ $? = 1 -o $? = 255 ]; then
	    break;
	fi
	NEXT_PARTITION=`cat /tmp/return`
	if [ "$NEXT_PARTITION" = "---" ]; then
	    break;
	elif [ "$NEXT_PARTITION" = "(in use)" ]; then
	    continue;
	fi 
	SIZE=`probe -l | grep "$NEXT_PARTITION " | tr -d "*" | tr -d "+" | crunch | cut -f 4 -d ' '`
	dialog --title "ѡƥ$NEXT_PARTITIONΥեޥå" --menu \
	    "ޤΥѡƥ󤬥եޥåȤƤʤС \
	    եޥåȤʤФʤޤ: եޥåȤ \
	    ѡƥΤ٤ƤΥǡϾõޤ \
	    ¸ΥѡƥѹΤʤ顤ư롼ȥǥ \
	    ǤϤʤ ϡɥǥ饻åȥåפ¹ԤƤ \
	    (ϡɥǥΥåȥåץץȵư/롼ȥǥ \
	    ΥåȥåץץϥС󤬰ۤʤޤ) \
	    ΥѡƥեޥåȤޤ? " 20 76 3 \
	    "Format" "åեޥå - Хåɥ֥åΥåϤޤ " \
	    "Check" "եޥå - Хåɥ֥ååޤ " \
	    "No" "ΥѡƥեޥåȤޤ " 2> /tmp/format
	if [ $? = 1 -o $? = 255 ]; then
	    rm -f /tmp/format
	    exit
	fi
	DOFORMAT="`cat /tmp/format`"
	rm -f /tmp/format
	FSTYPE=""
	if [ ! "$DOFORMAT" = "No" ]; then
            dialog --title "$NEXT_PARTITIONFS" --menu \
		"ߤPlamo Ǥϥե륷ƥȤơext4/ext3/ext2/reiserfs 4 \
ѤǤޤΥѡƥɤΥե륷ƥǺ \
ޤ" 22 74 6 \
		"ext4" "ext3 + ǽ(Ȥθߴ򵤤ˤʤʤǽ)" \
		"ext3" "ext2 + journaling ǽ(Ф餯ɸ)" \
		"ext2" "ext2 fs(FSӸ)" \
		"reiserfs" "reiser fs(褬԰¤ʤΤ侩)" 2> /tmp/fstype
	    if [ $? = 1 -o $? = 255 ]; then
		rm -f /tmp/fstype
		exit
	    fi
	    FSTYPE="`cat /tmp/fstype`"
	    rm -rf /tmp/fstype
	    dialog --title "եޥå" --infobox "$NEXT_PARTITIONեޥå  \n\
ե륷ƥΥ : $FSTYPE " 6 60
	    if mount | grep "$NEXT_PARTITION " 1> /dev/null 2> /dev/null ; then
		umount $NEXT_PARTITION 2> /dev/null
	    fi

	    if [ "$FSTYPE" = "ext4" ]; then
		if [ "$DOFORMAT" = "Check" ]; then
		    mkfs.ext4 -c  $NEXT_PARTITION
		else
		    mkfs.ext4 $NEXT_PARTITION
		fi
	    fi

	    if [ "$FSTYPE" = "ext3" ]; then
		if [ "$DOFORMAT" = "Check" ]; then
		    mkfs.ext3 -c $NEXT_PARTITION
		else
		    mke2fs -j $NEXT_PARTITION
		fi
	    fi

	    if [ "$FSTYPE" = "ext2" ]; then
		if [ "$DOFORMAT" = "Check" ]; then
		    mke2fs -c $NEXT_PARTITION
		else
		    mke2fs  $NEXT_PARTITION
		fi
	    fi

	    if [ "$FSTYPE" = "reiserfs" ]; then
		mkreiserfs -f --format 3.6 $NEXT_PARTITION
	    fi

	else # DOFORMAT ?

	    if [ ! -d /tmpmnt ]; then
		mkdir /tmpmnt
	    fi

	    FSTYPE="";
	    dialog --infobox "$NEXT_PARTITIONޥ..." 3 60
	    for filesystem in ext4 ext3 ext2 reiserfs ; do
		mount -t $filesystem $NEXT_PARTITION /tmpmnt 1> /dev/null 2> /dev/null
		if [ $? = 0 ]; then
		    FSTYPE=$filesystem
		    umount /tmpmnt
		    break
		fi
	    done
	    if [ "$FSTYPE" = "" ]; then
		dialog --title "$NEXT_PARTITONޥȤǤޤ" --msgbox \
		    "$NEXT_PARTITION ext4/ext3/ext2/reiserfs ηǥޥȤǤޤǤ\n\
꤬ȻפΤǥ󥹥ȡλޤ." 14 70
		exit
	    fi
	fi

	dialog --title "$NEXT_PARTITIONΥޥȥݥȤ" --inputbox \
	    "Υѡƥǥ쥯ȥĥ꡼ΤɤإޥȤ뤫 \n\
ƤȤСѡƥ/optإޥȤ \n\
ʤ顢/opt ϤƤ \n\n\
$NEXT_PARTITIONɤإޥȤޤ" 12 70 2> /tmp/return
	if [ $? = 255 -o $? = 1 ]; then 
	    exit 1
	fi
	MTPT=`cat /tmp/return`
	rm /tmp/return
    # Now, we need to mount the newly selected root device:
	sync
	if [ ! -d /mnt/$MTPT ]; then
	    mkdir -p /mnt/$MTPT
	fi

	if [ $FSTYPE = "" ]; then
            for filesystem in ext4 ext3 ext2 reiserfs ; do
		mount -t $filesystem $NEXT_PARTITION /mnt/$MTPT 1> /dev/null 2>/dev/null
		if [ $? = 0 ]; then
		    FSTYPE=$filesystem
		    break
		fi
	    done
	else
            mount -t $FSTYPE $NEXT_PARTITION /mnt/$MTPT 1> /dev/null 2> /dev/null
	fi
	echo "$NEXT_PARTITION       $MTPT        $FSTYPE     defaults   1   2" >> /tmp/SeTnative

    done # next partition loop
fi # more than one Linux partition
