# !/bin/sh
M_TITLE="Copy rootfs to SD/CF"
M_FLAGS="noRemember"

# Unfinished script.
exit 0

ask_target() {
	available_disks="`mount | grep "/media" | grep -v ram | awk '{print $3}'`"
	
	if test -z "$available_disks" 
	then
		die "No mounted targets found!"
	fi
	
	cnt=1
	for d in $available_disks
	do
		echo -e "\t[$cnt] $d"
		let cnt=$cnt+1
	done

	while test -z "$ROOTFS_TARGET"
	do	
		echo -n "Target: "
		read junk </dev/tty1
		
		x=1
		for d in $available_disks
		do			
			if test "$junk" = "$x"
			then
				ROOTFS_TARGET="$d"				
				break
			fi
			let x=$x+1
		done
		
		
	done	
	
	ROOTFS_TARGET_DEV="`mount | grep "$ROOTFS_TARGET " | awk '{print $1}'`"
	ROOTFS_TARGET_FS="`mount | grep "$ROOTFS_TARGET " | awk '{print $5}'`"
	
	echo "Using [$ROOTFS_TARGET] on [$ROOTFS_TARGET_DEV] with [$ROOTFS_TARGET_FS] filesystem"				
}

ask_format() {
	if test "$ROOTFS_TARGET_FS" != ext2
	then
		echo -e "\nYou are not using the ext2 filesystem on your target ($ROOTFS_TARGET_FS)$.\nYou now have two choices:"
		echo -e "\t[1] Reformat to ext2"
		echo -e "\t[2] Use an image-file ontop of the existing filesystem"
		
		while true
		do
			echo -n "Your choice: "
			read junk </dev/tty1
			
			case "$junk" in
			1)	ROOTFS_TARGET_TYPE="ext2"
				break ;;
			2)	ROOTFS_TARGET_TYPE="image"
				break ;;
			esac
		done			
			
		echo "Mode: [$ROOTFS_TARGET_TYPE]"
	else
		echo -e "\nYou are using the ext2 filesystem on your target.\nYou now have two choices:"
		echo -e "\t[1] Install to the target directly"
		echo -e "\t[2] Use an image-file ontop of the existing filesystem\n"
		
		while true
		do
			echo -n "Your choice: "
			read junk </dev/tty1
			
			case "$junk" in
			1)	ROOTFS_TARGET_TYPE="direct"
				break ;;
			2)	ROOTFS_TARGET_TYPE="image"
				break ;;
			esac
		done			
			
		echo "Mode: [$ROOTFS_TARGET_TYPE]"
		
	fi
}

ask_confirm() {
	echo -e "\nYour choices are:"
	echo -e "\tTarget:\t$ROOTFS_TARGET_DEV (currently mounted as $ROOTFS_TARGET)"
	case "$ROOTFS_TARGET_TYPE" in
		direct)	echo -e "\tType:\t${C_RED}direct install, reformat if required${C_RESET}";;
		image) echo -e "\tType:\tinstall into image-file";;
	esac
	
	while true
	do
		echo -n "Continue? [y|n] "
		read junk </dev/tty1
		
		case "$junk" in
		y)	break ;;
		n)	exit 1
		esac
	done
}

direct_install() {

	#format_target
		
	echo -n "Creating temporary directory..."
	mkdir -p /media/temp && echo ok || die "mkdir -p /media/temp failed!"
	
	echo -n "Mounting [$ROOTFS_TARGET_DEV] as /media/temp..."
	mount "$ROOTFS_TARGET_DEV" /media/temp && echo "ok" || die "mount "$ROOTFS_TARGET_DEV" /media/temp FAILED"
	
	copy_files
}

format_target() {
	echo -e "\n\nI'm about to format your target ($ROOTFS_TARGET_DEV) to the ext2 filesystem\n"
	echo -e "${C_RED}YOU WILL LOSE ALL DATA ON YOUR TARGET IF YOU CONTINUE${C_RESET}\n"
	
	while true
	do
		echo -n "Continue? [y|n] "
		read junk </dev/tty1
		
		case "$junk" in
		y)	break ;;
		n)	die "User aborted mkfs"
			break ;;
		esac
	done
	
	echo -n "Umounting $ROOTFS_TARGET_DEV..."
	umount "$ROOTFS_TARGET_DEV" && echo "ok" || die "umount $ROOTFS_TARGET_DEV failed!"
	
	
	echo "Formatting..."
	/sbin/mkfs.ext2 -m0 "$ROOTFS_TARGET_DEV" && echo -e "\nmkfs.ext2 finished" || die "\nmkfs.ext2 FAILED"
 }

image_install() {
	flash_size="` df -h | grep "/"$| awk '{print $3}'| sed s/M//`"
	
	echo -e "\nHow many MB do you want to configure for the image file?"
	echo -e "It is generally a good idea to use 2.5x the used flash size ($flash_size)\n"
	
	while test -z "$ROOTFS_IMAGE_SIZE"
	do
		echo -n "Size in MegaBytes: "
		read junk
		
		# test fails if $junk isn't a number
		if test "$junk" -gt 0 >/dev/null 2>&1
		then
			echo -n "Use [$junk]MB? [y|n] "
			read junk2
			if test "$junk2" = y
			then
				ROOTFS_IMAGE_SIZE="$junk"
			fi
		fi
	done
	
	echo -e "\nPlease enter a name for the image file."
	echo "The name must _not_ contain whitespaces or the '-' sign."
	
	while test -z "$ROOTFS_IMAGE_NAME"
	do
		echo -n "File name: "
		read junk
		
		if ! test -z "$junk"
		then
			echo -n "Use [$junk] as image name? [y|n] "
			read junk2
			
			if test "$junk2" = y
			then
				ROOTFS_IMAGE_NAME="$junk"			
			fi
		fi
	done			
	
	echo -e "\nDo you want to format [$ROOTFS_TARGET_DEV] to the ext2 filesystem?"
	
	while true
	do
		echo -n "Format to ext2? [y|n] "
		read junk
		case "$junk" in
		y)	format_target
			break ;;
		n)	break ;;
		esac
	done
	
	/etc/init.d/devices start
	
	echo -en "\nCreating image file [$ROOTFS_TARGET/$IMAGE_PATH/$ROOTFS_IMAGE_NAME-rootfs.bin] (${ROOTFS_IMAGE_SIZE}MB)..."
	mkdir -p "$ROOTFS_TARGET/$IMAGE_PATH"
	
	dd if=/dev/zero of="$ROOTFS_TARGET/$IMAGE_PATH/$ROOTFS_IMAGE_NAME-rootfs.bin" bs=1024k count=$ROOTFS_IMAGE_SIZE	 >/dev/null 2>&1 && echo ok || die "FAILED"
	losetup /dev/loop1 "$ROOTFS_TARGET/$IMAGE_PATH/$ROOTFS_IMAGE_NAME-rootfs.bin"
	
	echo -n "Creating filesystem..."
	mkfs.ext2 -m0 /dev/loop1 >/dev/null 2>&1 && echo ok || die FAILED
	
	mkdir -p /media/temp
	mount /dev/loop1 /media/temp || die "mount /dev/loop1 /media/temo FAILED!"
	
	copy_files
			
}

copy_files() {
	echo -e "\nCopying files..."
	
	exclude_list="tmp sys proc var dev media root"
	mkdir_list="var proc sys dev media/card media/cf /media/hdd"
		
	if (cat /etc/fstab | grep -q "/home")
	then
		echo "Note: /home appears to be mounted on a different flash partition: not copying /home"
		exclude_list="$exclude_list home"
		mkdir_list="$mkdir_list home/root"
		
	fi
	

	
	source_dirs="`ls -1 /`"
	
	echo -n "Excluding ["
	for d in $exclude_list
	do
		echo -n "$d "
		source_dirs="`echo "$source_dirs" | grep -v "$d"`"
	done
	echo "] from copy"
				
	
	cd /
	for dir in $source_dirs
	do
		if test -d "$dir"
		then
			echo -n "Copying [$dir]..."
			cp -a $dir /media/temp && echo ok || echo FAILED
		fi
	done
	
	for dir in $mkdir_list
	do
		mkdir -p /media/temp/$dir
	done
	
	rm /media/temp/etc/rcS.s/S39sd
	
}
run_module() {
	
	test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"
	
	echo -e "${C_RED}* * * * * WARNING * * * * *${C_RESET}"
	echo -e "${C_RED}Continueing will delete the content of the selected target device.\nTHIS IS NO JOKE. If you do now know what this menu-item does, exit NOW${C_RESET}"
	
	mount -o remount,rw /
	
	while true
	do
		echo -en "\nContinue? [y|n] "
		read junk </dev/tty1
		
		if test "$junk" = n
		then
			exit 0
		fi
		
		if test "$junk" = y
		then
			break
		fi
	done	
	
# 	echo -n "Trying to activate PCMCIA..."
# 	cardmgr -o >/dev/null 2>&1 && echo ok || echo "FAILED"
# 	
# 	echo -n "Trying to mount SD card..."
# 	/etc/init.d/sd start >/dev/null 2>&1
# 	sleep 3
# 	/etc/sdcontrol insert >/dev/null 2>&1 && echo ok || echo "FAILED"
	
	#exit 0
	echo -e "\nPlease select the target device:"	
	
	# Sets ROOTFS_TARGET*
	ask_target
	
	# Sets ROOTFS_TARGET_TYPE ([direct | image]
	ask_format
	
	# Ask confirmation
	ask_confirm
	
	case "$ROOTFS_TARGET_TYPE" in
	direct)	direct_install;;
	image)	image_install;;
	esac
}

case "$1" in
title)	echo "$M_TITLE";;
flags)	echo "$M_FLAGS";;
run)	run_module;;
esac