#!/bin/bash

#export PATH=$PATH:/usr/sbin.rom:/usr/bin.rom

#LINUXFMT=ext2
LINUXFMT=ext3
MKE2FSOPT=
if [ "$LINUXFMT" = "ext3" ]; then
    MKE2FSOPT=-j
fi
    
#
# get device pcmcia_slot
#     format: get_dev_pcmcia_slot [slot number]
#                 slot number: 0, 1
#     output: device name (hda or hdc)
#
get_dev_pcmcia()
{
    while read SOCKET CLASS DRIVER INSTANCE DEVS MAJOR MINOR;
    do
    echo $DEVS
    done
}
get_dev_pcmcia_slot()
{
    grep "^$1" /var/lib/pcmcia/stab | get_dev_pcmcia
}
        

RW_MTD_LINE=`cat /proc/mtd | grep "home" | tail -n 1`
if [ "$RW_MTD_LINE" = "" ]; then
    RW_MTD_LINE=`cat /proc/mtd | grep "\<NAND\>.*\<2\>" | tail -n 1`
fi
RW_MTD_NO=`echo $RW_MTD_LINE | cut -d: -f1 | cut -dd -f2`
RW_MTD_SIZE_HEX=`echo $RW_MTD_LINE | cut -d" " -f2`
RW_MTD=/dev/mtd$RW_MTD_NO
RW_MTDBLK=/dev/mtdblock$RW_MTD_NO
RW_MTD_SIZE=`dc 0x$RW_MTD_SIZE_HEX 1024 /`
initlog -s $"found $RW_MTD ${RW_MTD_SIZE}\"Kbyte\""

KERNEL_VER=`/bin/uname -r`
MODULE_PATH=/lib/modules.rom/$KERNEL_VER

#echo "ZAURUS_RESET=$ZAURUS_RESET RW_MTD_NO=$RW_MTD_NO RW_MTD_SIZE_HEX=$RW_MTD_SIZE_HEX"

#sleep 5
#exit 0

if [ "$ZAURUS_RESET" = "HARD" ]; then
#shponmode=$(oncheck)
#if [ "$shponmode" = "HW Reset" ]; then
### HW Reset !
#echo "HW Reset !"

# mount /dev
#echo "51 mount /dev"
#sleep 5
dd if=/dev/zero of=/dev/ram1 bs=1024 count=128 2> /dev/null > /dev/null
mkfs.minix -i 512 /dev/ram1 128 2> /dev/null > /dev/null
mount -t minix /dev/ram1 /dev
#sleep 5
cd /
gzip -dc /root/.dev_default.tar.gz | tar xf -
#sleep 5

#echo "53 mount /dev/cloop" > /proc/progress
#insmod $MODULE_PATH/misc/cloop.o file=/boot/usr.ext2.cloop
#mount -n -r -t ext2 /dev/cloop /usr

#echo "53 mount /boot/usr.bin"
#mount -n -r -t cramfs /boot/usr.bin /usr -o loop
mount -n -r -t squashfs /boot/usr.bin /usr -o loop
#sleep 5

mkdir /dev/shm 2> /dev/null > /dev/null

STRING=$"Starting filesystem: "
msg -n $STRING

#echo "54 format /home"
/sbin/eraseall $RW_MTD 2> /dev/null > /dev/null
#sleep 5

#echo "55 mount /home"
mount -t jffs2 -o rw,noatime $RW_MTDBLK /home
#sleep 5

#echo "57 mount tmpfs"
mount -t tmpfs -o size=10m none /dev/shm
#sleep 5

mkdir /dev/shm/tmp
chmod 4777 /dev/shm/tmp
mkdir /dev/shm/run
touch /dev/shm/run/utmp
mkdir /dev/shm/run/usb

/etc/ledmode reset


# mount HDD
/etc/rc.d/init.d/pcmcia start
while [ "$IDE1" = "" ]; do
    IDE1=`get_dev_pcmcia_slot 1`
done

if [ "$HDDCLEAR" = "YES" ]; then
    dd if=/dev/zero of=/dev/${IDE1}2 > /dev/null 2> /dev/null
fi
mke2fs $MKE2FSOPT /dev/${IDE1}2 2> /dev/null > /dev/null
e2fsck -p /dev/${IDE1}2 > /dev/null
if [ "$HDDCLEAR" = "YES" ]; then
    dd if=/dev/zero of=/dev/${IDE1}3 > /dev/null 2> /dev/null
fi
mkfs.vfat -F 32 /dev/${IDE1}3 2> /dev/null > /dev/null
mount -t $LINUXFMT -o ro,noatime /dev/${IDE1}1 /hdd1
rc=$?
if [ "$rc" != "0" ]; then
    echo -n "HDD1 Error!! "
    /bin/ledctl ledmode 0
    /bin/ledctl alarm 1
    while [ "$DUMMY" = "" ]; do
        sleep 1
    done
fi
mount -t $LINUXFMT -o noatime /dev/${IDE1}2 /hdd2
rc=$?
if [ "$rc" != "0" ]; then
    echo -n "HDD2 Error!! "
    /bin/ledctl ledmode 0
    /bin/ledctl alarm 1
    while [ "$DUMMY" = "" ]; do
        sleep 1
    done
fi
mount -t vfat -o noatime,quiet,umask=000,iocharset=utf8 /dev/${IDE1}3 /hdd3
rc=$?
if [ "$rc" != "0" ]; then
    echo -n "HDD3 Error!! "
    /bin/ledctl ledmode 0
    /bin/ledctl alarm 1
    while [ "$DUMMY" = "" ]; do
        sleep 1
    done
fi
if [ ! -f /hdd1/.sys/hdimage2.tgz ]; then
    echo "Error!! HDD is not initialized!"
fi
cd /
gzip -dc /hdd1/.sys/hdimage2.tgz | tar xf -

# move Documents
rm -f /hdd3/Documents
mv /home/zaurus/Documents /hdd3
ln -s /hdd3/Documents /home/zaurus/Documents

#sltime -clear

#echo "58 installing /home"
cd /
gzip -dc /root/.home_default.tar.gz | tar xf -
#sleep 5

#echo "59 installing /var"
cd /home/system
gzip -dc /root/.var_default.tar.gz | tar xf -
#sleep 5

#sltime -clear

rc=$?
if [ "$rc" = "0" ]; then
    success "$STRING"
else
    failure "$STRING"
fi
msg

else
### SW Reset !

# mount /dev
#echo "51 mount /dev"
dd if=/dev/zero of=/dev/ram1 bs=1024 count=128 2> /dev/null > /dev/null
#sleep 5

#echo "mkfs.minix -i 512 /dev/ram1 128"
mkfs.minix -i 512 /dev/ram1 128 2> /dev/null > /dev/null
#sleep 5

#echo "mount -t minix /dev/ram1 /dev"
mount -t minix /dev/ram1 /dev
#sleep 5

#echo "gzip -dc /root/.dev_default.tar.gz | tar xf -"
cd /
gzip -dc /root/.dev_default.tar.gz | tar xf -
#echo "Done."
#sleep 15

#echo "53 mount /dev/cloop" > /proc/progress
#insmod $MODULE_PATH/misc/cloop.o file=/boot/usr.ext2.cloop
#mount -n -r -t ext2 /dev/cloop /usr

#echo "53 mount /boot/usr.bin"
#mount -n -r -t cramfs /boot/usr.bin /usr -o loop
mount -n -r -t squashfs /boot/usr.bin /usr -o loop
#echo "Done."
#sleep 15

mkdir /dev/shm 2> /dev/null > /dev/null

#STRING=$"Checking filesystem: "
#msg -n $STRING

#echo "55 mount /home"
#echo "-t jffs2 -o rw,noatime $RW_MTDBLK /home"
mount -t jffs2 -o rw,noatime $RW_MTDBLK /home
#echo "Done"
#sleep 15

if [ -f /home/etc/restorepc ]; then
    RESTORE_CONNECTION=`cat /home/etc/restorepc`
else
    RESTORE_CONNECTION=""
fi
if [ "$RESTORE_CONNECTION" != "" ]; then
#   echo "57 restore connection" > /proc/progress
    cp /home/etc/restoreip /dev/restoreip 2> /dev/null > /dev/null
    cp /home/zaurus/Settings/Security.conf /dev/Security.conf 2> /dev/null > /dev/null
    umount $RW_MTDBLK
    /sbin/eraseall $RW_MTD 2> /dev/null > /dev/null
    mount -t jffs2 -o rw,noatime $RW_MTDBLK /home
    mount -t tmpfs -o size=10m none /dev/shm
    mkdir /dev/shm/tmp
    chmod 4777 /dev/shm/tmp
    mkdir /dev/shm/run
    touch /dev/shm/run/utmp
    mkdir /dev/shm/run/usb
        cd /
    gzip -dc /root/.home_default.tar.gz | tar xf -
    
    /etc/ledmode reset
        
    cd /home/system
    gzip -dc /root/.var_default.tar.gz | tar xf -


    # mount HDD
    /etc/rc.d/init.d/pcmcia start
    while [ "$IDE1" = "" ]; do
        IDE1=`get_dev_pcmcia_slot 1`
    done

    mount -t $LINUXFMT -o ro,noatime /dev/${IDE1}1 /hdd1
    rc=$?
    if [ "$rc" != "0" ]; then
        echo -n "HDD1 Error!! "
        /bin/ledctl ledmode 0
        /bin/ledctl alarm 1
        while [ "$DUMMY" = "" ]; do
            sleep 1
        done
    fi
    
    mke2fs $MKE2FSOPT /dev/${IDE1}2 2> /dev/null > /dev/null
    e2fsck -p /dev/${IDE1}2 > /dev/null
    mount -t $LINUXFMT -o noatime /dev/${IDE1}2 /hdd2
    rc=$?
    if [ "$rc" != "0" ]; then
        echo -n "HDD2 Error!! "
        /bin/ledctl ledmode 0
        /bin/ledctl alarm 1
        while [ "$DUMMY" = "" ]; do
            sleep 1
        done
    fi
    cd /
    # Documents files are discarded...
    gzip -dc /hdd1/.sys/hdimage2.tgz | tar xf -

    mount -t vfat -o noatime,quiet,umask=000,iocharset=utf8 /dev/${IDE1}3 /hdd3
    rc=$?
    if [ "$rc" != "0" ]; then
        echo -n "HDD3 Error!! "
        /bin/ledctl ledmode 0
        /bin/ledctl alarm 1
        while [ "$DUMMY" = "" ]; do
            sleep 1
        done
    fi
    if [ ! -f /hdd1/.sys/hdimage2.tgz ]; then
        echo -n "Error!! HDD is not initialized!"
        /bin/ledctl ledmode 0
        /bin/ledctl alarm 1
        while [ "$DUMMY" = "" ]; do
            sleep 1
        done
    fi

    # move Documents
    rm -f /hdd3/Documents
    mv /home/zaurus/Documents /hdd3
    ln -s /hdd3/Documents /home/zaurus/Documents

    rm /home/zaurus/Settings/route.conf 2>/dev/null >/dev/null
    echo -n $RESTORE_CONNECTION > /home/zaurus/Settings/route.conf
    touch /home/etc/restorepc
    mv /dev/restoreip /etc/hotplug/usbdnet.conf 2> /dev/null > /dev/null
    mv /dev/Security.conf /home/zaurus/Settings/Security.conf 2> /dev/null > /dev/null

else
#   echo "57 mount tmpfs" > /proc/progress
    mount -t tmpfs -o size=10m none /dev/shm
    mkdir /dev/shm/tmp
    chmod 4777 /dev/shm/tmp
    mkdir /dev/shm/run
    touch /dev/shm/run/utmp
    mkdir /dev/shm/run/usb

    /etc/ledmode reset

    # mount HDD
    echo "Searching for internal HDD..."
    /etc/rc.d/init.d/pcmcia start
#    sleep 10
    
    while [ "$IDE1" = "" ]; do
        IDE1=`get_dev_pcmcia_slot 1`
	sleep 1
    done
    echo "HDD found at /dev/${IDE1}"
    
    mount -t $LINUXFMT -o ro,noatime /dev/${IDE1}1 /hdd1
    rc=$?
    sleep 1
    if [ "$rc" != "0" ]; then
        echo -n "HDD1 Error!! "
        /bin/ledctl ledmode 0
        /bin/ledctl alarm 1
        while [ "$DUMMY" = "" ]; do
            sleep 1
        done
    fi
    
    echo "Mounted /hdd1"
    
    mount -t $LINUXFMT -o noatime /dev/${IDE1}2 /hdd2
    rc=$?
    sleep 1
    if [ "$rc" != "0" ]; then
        echo -n "HDD2 Error!! "
#        /bin/ledctl ledmode 0
#        /bin/ledctl alarm 1
#        while [ "$DUMMY" = "" ]; do
#            sleep 1
#        done
    fi
    
    echo "Mounted /hdd2"
    mount -t vfat -o noatime,quiet,umask=000,iocharset=utf8 /dev/${IDE1}3 /hdd3
    rc=$?
    sleep 1
#    if [ "$rc" != "0" ]; then
#        echo -n "HDD3 Error!! "
#        /bin/ledctl ledmode 0
#        /bin/ledctl alarm 1
#        while [ "$DUMMY" = "" ]; do
#            sleep 1
#        done
#    fi
    
    echo "Mounted /hdd3"
    
#    if [ ! -f /hdd1/.sys/hdimage2.tgz ]; then
#        echo -n "Error!! HDD is not initialized!"
#        /bin/ledctl ledmode 0
#        /bin/ledctl alarm 1
#        while [ "$DUMMY" = "" ]; do
#            sleep 1
#        done
#    fi
    
    echo "Internal HDD initialized."

    # move Documents
#    if [ -d /home/zaurus/Documents ]; then
#	rm -f /hdd3/Documents
#	cp -fpd -R /home/zaurus/Documents /hdd3
#	rm -rf /home/zaurus/Documents
#    fi	
    
    ln -sf /hdd3/Documents /home/zaurus/Documents
    echo "Documents folder initialized."
      
fi
fi
#echo $LAUNCH > /home/sharp/etc/launch.default

# set defaults for keyboard leyout
echo -n -e "cp1251" > /usr/local/etc/console/encoding
echo -n -e "0" > /usr/local/etc/console/phonetic
