#!/bin/sh

export PATH=$PATH:/usr/bin:/bin:/sbin

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
if [ "$RW_MTD_LINE" = "" ]; then
    RW_MTD=""
    RW_MTDBLK=""
    RW_MTD_SIZE=0
else
    RW_MTD_NO=`echo $RW_MTD_LINE | cut -d: -f1 | cut -dd -f2`
    RW_MTD_SIZE_HEX=`echo $RW_MTD_LINE | cut -d" " -f2`

    if [ -x /sbin/devfsd ]; then
	RW_MTD=/dev/mtd/$RW_MTD_NO
	RW_MTDBLK=/dev/mtdblock/$RW_MTD_NO
    else
	RW_MTD=/dev/mtd$RW_MTD_NO
	RW_MTDBLK=/dev/mtdblock$RW_MTD_NO
    fi

    RW_MTD_SIZE=`dc 0x$RW_MTD_SIZE_HEX 1024 / p`
    initlog -s $"found $RW_MTD ${RW_MTD_SIZE}\"Kbyte\""
fi

if [ "$ZAURUS_RESET" = "HARD" ]; then

if [ ! -x /sbin/devfsd ]; then
    mount -t tmpfs -o size=12m none /dev
    cd /
    tar xf /root/.dev_default.tar 2> /dev/null > /dev/null
    mkdir /dev/shm
else
    mount -t tmpfs -o size=12m none /dev/shm
fi

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

mount -o remount / 2> /dev/null > /dev/null

if [ $RW_MTD_SIZE -ne 0 ]; then
    /sbin/eraseall --j --q $RW_MTD 2> /dev/null > /dev/null
    mount -t jffs2 -o rw,noatime $RW_MTDBLK /home 2> /dev/null > /dev/null
    mkdir /home/root
    cd /
    tar --no-same-owner -xf /root/.home_default.tar 2> /dev/null > /dev/null
fi

#OpenBSD Bootif [ /bsd ]; then        echo "Would you like to boot OpenBSD or pdaXrom (openbsd/pdaxrom)?"        read acceptance        if [ "$acceptance" != "pdaxrom" ]; then                echo "Booting OpenBSD"                cardmgr -o >/dev/null 2>&1
                cd /bsd                /sbin/insmod /bsd/zbsdmod.o                ./zboot        fi        echo "Booting pdaXrom"fi

mkdir /dev/shm/tmp
mkdir /dev/shm/run
chmod 4777 /var/tmp
chmod 777 /tmp
touch /var/run/utmp
cd /
tar --no-same-owner -xf /root/.var_default.tar 2> /dev/null > /dev/null
touch /var/log/lastlog

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

else
### SW Reset !

if [ ! -x /sbin/devfsd ]; then
    mount -t tmpfs -o size=12m none /dev
    cd /
    tar xf /root/.dev_default.tar 2> /dev/null > /dev/null
    mkdir /dev/shm
else
    mount -t tmpfs -o size=12m none /dev/shm
fi

mount -o remount / 2> /dev/null > /dev/null

if [ $RW_MTD_SIZE -ne 0 ]; then
    mount -t jffs2 -o rw,noatime $RW_MTDBLK /home 2> /dev/null > /dev/null
fi

mkdir /dev/shm/tmp
mkdir /dev/shm/run
chmod 4777 /var/tmp
chmod 777 /tmp
touch /var/run/utmp
touch /var/log/lastlog
cd /

fi

if [ $RW_MTD_SIZE -eq 0 ]; then
    if grep "/dev/mtdblock3" /etc/fstab 2>/dev/null >/dev/null ; then
	mv /etc/fstab /etc/fstab.2part
	grep -v "/dev/mtdblock3" /etc/fstab.2part > /etc/fstab
    fi
fi

# make cdrom devices
mknod /dev/pg0 b 11 0 2>/dev/null
mknod /dev/sg0 b 11 0 2>/dev/null
ln /dev/scd0 /dev/cdrom 2>/dev/null
ln /dev/scd0 /dev/vcd 2>/dev/null
ln /dev/scd0 /dev/dvd 2>/dev/null

# make loop devices
for i in $(seq 2 6)
do
    if [ ! -e /dev/loop$i ]; then
        mknod /dev/loop$i b 7 $i 2>/dev/null
    fi
done

# create directories
mkdir -p /data
mkdir -p /opt
mkdir -p /mnt/card2
mkdir -p /mnt/usbstorage
mkdir -p /home/zaurus
mkdir -p /home/samba
mkdir -p /media/fakeroot

MODEL=`cat /proc/deviceinfo/product`
if [ "$MODEL" = "SL-C3100" ] || [ "$MODEL" = "SL-C3200" ]; then
  /etc/rc.d/init.d/pcmcia start 2>/dev/null >/dev/null
  while [ "$IDE1" = "" ]; do
    IDE1=`get_dev_pcmcia_slot 1`
  done
  MDD=/dev/$IDE1
  echo "...internal MicroDrive is $MDD"
  if [ -f /media/realroot/root/maintenance ]; then
    rm /media/realroot/root/maintenance
    echo "Maintenance Mode is enabled."
    umount /mnt/ide 2>/dev/null
    e2fsck -f -y $MDD
  fi

  # bind /usr (hdd1)
  if [ "`fdisk -l ${MDD}1 2>/dev/null`" != "" ]; then
    mount -t ext3 -o rw,noatime ${MDD}1 /media/fakeroot 2>/dev/null >/dev/null
    if [ -f /media/fakeroot/usr/sbin/cfdisk ]; then
        echo "...enabling extended root"
        mount --bind /media/fakeroot/usr /usr 2>/dev/null >/dev/null
    else
	umount /media/fakeroot 2>/dev/null >/dev/null
	echo "...mounting first partition as /mnt/ide"
        mount -t ext3 -o rw,noatime ${MDD}1 /mnt/ide 2>/dev/null >/dev/null
    fi
  fi

  # mount swap (hdd2)
  if [ "`fdisk -l ${MDD}2 2>/dev/null`" != "" ]; then
    mount -t ext3 -o rw,noatime ${MDD}2 /mnt/ide2 2>/dev/null >/dev/null
    rc=$?
    if [ "$rc" != "0" ]; then
      echo "...enabling second partition as swap"
      swapon ${MDD}2 2>/dev/null
    else
      echo "...mounting second partition as /mnt/ide2"
    fi
  fi

  # mount /data (hdd3)
  if [ "`fdisk -l ${MDD}3 2>/dev/null`" != "" ]; then
    echo "...mounting third partition as /data"
    mount -o rw,noatime,umask=000,owner ${MDD}3 /data 2>/dev/null
    if [ -d /home/samba ]; then
      ln -sf /data /home/samba/data 2>/dev/null
    fi
  fi

  # mount hdd4 if available
  if [ "`fdisk -l ${MDD}4 2>/dev/null`" != "" ]; then
    echo "...mounting fourth partition as /extra"
    mkdir -p /extra 2>/dev/null
    mount -o rw,noatime ${MDD}4 /extra 2>/dev/null
    if [ -d /home/samba ]; then
      ln -sf /extra /home/samba/Extra_Disk 2>/dev/null
    fi
  fi

  if [ "$MDD" = "/dev/hdc" ]; then
    /sbin/cardctl eject 0 2>/dev/null
    /sbin/cardctl insert 0 2>/dev/null
  fi
fi
if [ "$MODEL" = "SL-C1000" ]; then
  /etc/rc.d/init.d/sd start 2>/dev/null >/dev/null
  /etc/sdcontrol insert 2>/dev/null
fi

if [ -d /home/samba ]; then
  ln -sf /mnt/cf /home/samba/cf 2>/dev/null
  ln -sf /mnt/card /home/samba/card 2>/dev/null
fi

chown -R zaurus:zaurus /home/zaurus 2>/dev/null

