#!/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 Ǥ root ե륷ƥȤơext3/ext2/reiserfs 3 \
ѤǤޤΥѡƥɤΥե륷ƥǺ \
ޤ" 20 74 4 \
"ext3" "ext3 fs (ext2 + journaling) ǥե" \
"ext2" "ext2 fs ( Linux ɸ fs) " \
"reiserfs" "reiser fs (1 ǥ쥯ȥ¿Υե뤬ͭ)" 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

  DENSITY=4096
  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" = "ext3" ]; then
    if [ "$DOFORMAT" = "Check" ]; then
       mke2fs -j -c -i $DENSITY $ROOT_DEVICE
    else
       mke2fs -j -i $DENSITY $ROOT_DEVICE
    fi
  elif [ "$FSTYPE" = "ext2" ]; then
    if [ "$DOFORMAT" = "Check" ]; then
       mke2fs -c -i $DENSITY $ROOT_DEVICE
    else
       mke2fs -i $DENSITY $ROOT_DEVICE
    fi
  elif [ "$FSTYPE" = "reiserfs" ]; then
       mkreiserfs -f --format 3.6 $ROOT_DEVICE
  fi
else # DOFORMAT?
   ROOT_SYS_TYPE="";
   dialog --infobox "$ROOT_DEVICEޥ..." 3 60
   for filesystem in 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 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  /usr/X11R6 Τ褦礭ǥ쥯ȥϡ \\
Ωѡƥ˥ޥȤ⤷ޤ \\
 /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 Ǥϥե륷ƥȤơext3/ext2/reiserfs 3 \
ѤǤޤΥѡƥɤΥե륷ƥǺ \
ޤ" 22 74 6 \
"ext3" "ext3 fs (ext2 + journaling) ǥե" \
"ext2" "ext2 fs ( Linux ɸ fs) " \
"reiserfs" "reiser fs (1 ǥ쥯ȥ¿Υե뤬ͭ)" 2> /tmp/fstype
    if [ $? = 1 -o $? = 255 ]; then
       rm -f /tmp/fstype
       exit
    fi
    FSTYPE="`cat /tmp/fstype`"
    rm -rf /tmp/fstype
    DENSITY=4096
    dialog --title "եޥå" --infobox "$NEXT_PARTITIONեޥå  \n\
ե륷ƥΥ : $FSTYPE \n\
i-node  $DENSITY " 6 60
      if mount | grep "$NEXT_PARTITION " 1> /dev/null 2> /dev/null ; then
        umount $NEXT_PARTITION 2> /dev/null
      fi
      
      if [ "$FSTYPE" = "reiserfs" ]; then
	  mkreiserfs -f --format 3.6 $NEXT_PARTITION 
      elif [ "$FSTYPE" = "xfs" ]; then
          mkfs.xfs -f $NEXT_PARTITION
      elif [ "$FSTYPE" = "ext3" ]; then
	  if [ "$DOFORMAT" = "Check" ]; then
	      mke2fs -j -c -i $DENSITY $NEXT_PARTITION
	  else
	      mke2fs -j -i $DENSITY $NEXT_PARTITION
	  fi
      elif [ "$FSTYPE" = "ext2" ]; then
	  if [ "$DOFORMAT" = "Check" ]; then
	      mke2fs -c -i $DENSITY $NEXT_PARTITION
	  else
	      mke2fs -i $DENSITY $NEXT_PARTITION
	  fi
      elif [ "$FSTYPE" = "jfs" ]; then
          if [ "$DOFORMAT" = "Check" ]; then
              jfs_mkfs -c $NEXT_PARTITION
          else
              jfs_mkfs $NEXT_PARTITION
          fi
     fi
    else # DOFORMAT ?

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

	FSTYPE="";
	dialog --infobox "$NEXT_PARTITIONޥ..." 3 60
	for filesystem in ext3 ext2 reiserfs jfs xfs ; 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 ext3/ext2/reiserfs ηǥޥȤǤޤǤ\n\
꤬ȻפΤǥ󥹥ȡλޤ." 14 70
	    exit
	fi
    fi

    dialog --title "$NEXT_PARTITIONΥޥȥݥȤ" --inputbox \
"Υѡƥǥ쥯ȥĥ꡼ΤɤإޥȤ뤫 \n\
ƤȤСѡƥ/usr/X11R6إޥȤ \n\
ʤ顢Τ褦Ƥ/usr/X11R6 \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 ext3 ext2 jfs reiserfs xfs jfs ; 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
