#!/bin/sh
# @vasm : FORMAT
# @level: root
# @description: format a partition
# 
# (c) Eko M. Budi, 2003
# (c) VLocity Linux, 2003
#
# Released under GNU GPL

VDIR=$(dirname $0)

. $VDIR/vasm-functions

check_root

# Path to files
fstab=/etc/fstab

PARTITION="/dev/hda1"
MOUNT_POINT="/mnt/win"
OPTIONS="default"
DUMP_CHECK="1 2"

build_formatmenu()
{
    status="false"
    while read LINE; do
	PART=`echo $LINE | cut -f1 -d ' '`
	if ! mount | grep -qe "^$PART "; then
	    SIZE=`echo $LINE | cut -f4 -d ' '`
	    TYPE=`echo $LINE | cut -f6- -d ' '`
	    echo "'$PART' '$TYPE  size=$SIZE MB' \\" >> $fmenu
	    status="true"
	fi
    done
    $status
}

menu_format() {
   TITLE="FORMAT PARTITION"
   TEXT="\n
This utility formats a partition, clearing all data on it.
Only unmounted partitions are presented.\n
Please select which partition to format carefully:"
   DIMENSION="0 0 10"
   
   echo '$DCMD --backtitle "$BACKTITLE" --title "$TITLE" \' > $fmenu
   echo '--menu "$TEXT" $DIMENSION \' >> $fmenu
    if ! probepart 2>/dev/null | grep -e "^/dev" | grep -v " Ext'd" | \
        grep -v "raid autodetect" | sed 's/*/ /' | build_formatmenu; then
    	msgbox "No partition is available"
	clean_exit 0
    fi
    echo '2> $freply' >> $fmenu
    
    . $fmenu || return $?
    
    PARTITION=`cat $freply`
    return 0
}

# $1=FSTYPE 
build_fsmenu()
{
   TYPE=`probepart 2>/dev/null | grep "^$PARTITION" | sed 's/\*//'`
   TYPE=`echo $TYPE | cut -f6 -d ' '`
   case $TYPE in
     W95|FAT|FAT12|FAT16|FAT32)
	echo "'fat16' 'Old DOS format' \\" >> $fmenu
	echo "'fat32' 'Windows 9x format' \\" >> $fmenu
	true
	;;
     linux|Linux)
	echo "'reiserfs' 'Reiser file system' \\" >> $fmenu
	echo "'xfs'  'Linux journaling file system' \\" >> $fmenu
	echo "'ext3'  'Linux journaling file system' \\" >> $fmenu
	echo "'ext2'  'Linux classic file system' \\" >> $fmenu
	true
	;;
     *)
	msgbox "Partition type $TYPE is not supported" "ERROR"
	false
	;;
   esac
}

menu_fs()
{
   TITLE="FILE SYSTEM TYPE"
   TEXT="\n
Please select file system to format $PARTITION:\n"
   DIMENSION="0 0 3"
   echo '$WCMD --backtitle "$BACKTITLE" --title "$TITLE" \' > $fmenu
   echo '--menu "$TEXT" $DIMENSION \' >> $fmenu
   if ! build_fsmenu; then
	msgbox "Partition type $TYPE is not supported" "ERROR"
	return 255
   fi
   echo '2> $freply' >> $fmenu
    
    . $fmenu || return $?
    
    FSTYPE=`cat $freply`
    return 0
}

menu_finish()
{
    yesnobox "Format $PARTITION with $FSTYPE ?" "CONFIRM" || return 255

    infobox "Formatting $PARTITION with $FSTYPE ..." "Please wait"
    sleep 2
    case $FSTYPE in
	reiserfs)
	    mkreiserfs -q $PARTITION &> /dev/null
	    ;;
	ext3)
	    mke2fs -j $PARTITION &> /dev/null
	    ;;
	xfs)
	    mkfs.xfs -fq $PARTITION &> /dev/null
	    ;;
	ext2)
	    mke2fs $PARTITION &> /dev/null
	    ;;
	fat16)
	    mkdosfs $PARTITION &> /dev/null
	    ;;
	fat32)
	    mkdosfs -F 32 $PARTITION &> /dev/null
	    ;;
    esac
    if [ "$?" = "0" ]; then
	infobox "Partition $PARTITION has been formatted" DONE
	clean_exit 0
    else
	msgbox "Cannot format $PARTITION" "ERROR"    
	return 255
    fi
}

if [ $1 ] && probepart 2>/dev/null | grep -e "^$1"; then
    PARTITION=$1
    wizard menu_fs menu_finish
else
    wizard menu_format menu_fs menu_finish
fi
clean_exit $?
