#!/bin/sh
# 
# Barry Allen by gutemine
#
VERSION=5.0.33
#
BAHOME=/media/ba
if [ ! -e $BAHOME ]; then
   mkdir $BAHOME > /dev/null 2>&1
fi
BAIMAGE=/MB_Images
BATMP=/tmp/.batmp
LIBDIR=/lib/modules/`uname -r`
if [ `mount | grep /proc | wc -l` -lt 1 ]; then
   /bin/mount -t proc proc /proc > /dev/null 2>&1
   /bin/mount -t sysfs sysfs /sys > /dev/null 2>&1
   /sbin/depmod -Ae > /dev/null 2>&1
fi
#if [ `uname -r | grep 2.6.30 | wc -l` -gt 0 -o `uname -r | grep  2.6.18-6.6 | wc -l` -gt 0  ]; then
if [ `uname -r | grep 2.6.30 | wc -l` -gt 0 ]; then
   if [ ! -e /dev/.udev -a -e /etc/init.d/udev ]; then
      /etc/init.d/udev start
   fi
fi
BAIMAGEMOUNTS="/media/ba/ba/1 /media/ba/ba/2 /media/ba/ba/3 /media/ba/ba/4 /media/ba/ba/5 /media/ba/ba/6 /media/ba/ba/7 /media/ba/ba/8"
# list of all possible BA bootdevices
# CF1_PATH=/dev/ide/host1/bus0/target0/lun0
# CF2_PATH=/dev/ide/host0/bus0/target1/lun0
# CF3_PATH=/dev/scsi/host0/bus0/target0/lun1
CF_UDEV_DEV=`find /dev/hdc?` > /dev/null 2>&1

# USB1_PATH=/dev/scsi/host0/bus0/target0/lun0
# USB2_PATH=/dev/scsi/host0/bus0/target0/lun2
# USB3_PATH=/dev/scsi/host0/bus0/target0/lun3
# USB4_PATH=/dev/scsi/host1/bus0/target0/lun0
USB_UDEV_DEV=`find /dev/sda?` > /dev/null 2>&1

# HD1_PATH=/dev/ide/host0/bus0/target0/lun0
# HD2_PATH=/dev/ide/host0/bus1/target0/lun0
HD_UDEV_DEV=`find /dev/hda?` > /dev/null 2>&1
if [ `uname -r | grep 2.6.30 | wc -l` -gt 0 -o `uname -r | grep  2.6.18-6.6 | wc -l` -gt 0 ]; then
   HD_UDEV_DEV=`find /dev/disk | grep part1 | head -n 1` > /dev/null 2>&1
fi
BOXTYPE=dm7025
if grep -qs BCM /proc/cpuinfo ; then
   BOXTYPE=dm500hd
   if grep -qs 7401 /proc/cpuinfo ; then
      BOXTYPE=dm800
   fi
   if grep -qs  Brcm4380 /proc/cpuinfo ; then
      BOXTYPE=dm8000
   fi
   if grep -qs  BMIPS4380 /proc/cpuinfo ; then
      BOXTYPE=bm750
   fi
   if grep -qs  7335 /proc/cpuinfo ; then
      BOXTYPE=bm750
   fi
   if grep -qs  mips16 /proc/cpuinfo ; then
      BOXTYPE=bm750
   fi
   if grep -qs  bm750 /etc/hostname ; then
      BOXTYPE=bm750
   fi
fi
# 8k is different
if [ $BOXTYPE = "dm8000" ]; then
   if [ -e /dev/hda1 -a ! -e /dev/hdc1 ]; then
      echo "on an 8000 the harddisk should be /dev/hdc1 not /dev/hda1"
      echo "maybe check your cabeling"
   else
      if [ -d /media/hdc1 ]; then
         HD_UDEV_DEV=`find /dev/hdc?` > /dev/null 2>&1
      fi
   fi
   if [ -d /media/sdb1 ]; then
      CF_UDEV_DEV=`find /dev/sdb?` > /dev/null 2>&1
   fi
   if [ -d /media/sde1 ]; then
      USB_UDEV_DEV=`find /dev/sde?` > /dev/null 2>&1
   fi
fi
# 750 is different
if [ $BOXTYPE = "bm750" -a $# -lt 1 ]; then
   HD_UDEV_DEV=/dev/sda1
   USB_UDEV_DEV=/dev/sdb1
   # all drivers
   LOG=/dev/null
   insmod /lib/modules/2.6.18-6.6/extra/procmk.ko >> $LOG 2>&1
   insmod /lib/modules/2.6.18-6.6/extra/fb.ko >> $LOG 2>&1
   insmod /lib/modules/2.6.18-6.6/extra/dvb-core.ko >> $LOG 2>&1
   insmod /lib/modules/2.6.18-6.6/extra/dvb-bcm7335.ko >> $LOG 2>&1
   insmod /lib/modules/2.6.18-6.6/kernel/drivers/ata/libata.ko >> $LOG 2>&1
   insmod /lib/modules/2.6.18-6.6/kernel/drivers/ata/sata_svw.ko >> $LOG 2>&1
   insmod /lib/modules/2.6.18-6.6/kernel/drivers/usb/storage/usb-storage.ko >> $LOG 2>&1
   insmod /lib/modules/2.6.18-6.6/kernel/fs/nls/nls_base.ko >> $LOG 2>&1
   insmod /lib/modules/2.6.18-6.6/kernel/fs/nls/nls_cp437.ko >> $LOG 2>&1
   insmod /lib/modules/2.6.18-6.6/kernel/fs/nls/nls_iso8859-1.ko >> $LOG 2>&1
   insmod /lib/modules/2.6.18-6.6/kernel/fs/fat/fat.ko >> $LOG 2>&1
   insmod /lib/modules/2.6.18-6.6/kernel/fs/ntfs/ntfs.ko >> $LOG 2>&1
   insmod /lib/modules/2.6.18-6.6/kernel/fs/vfat/vfat.ko >> $LOG 2>&1
   insmod /lib/modules/2.6.18-6.6/kernel/fs/isofs/isofs.ko >> $LOG 2>&1
   insmod /lib/modules/2.6.18-6.6/kernel/fs/cifs/cifs.ko >> $LOG 2>&1
   insmod /lib/modules/2.6.18-6.6/kernel/fs/reiserfs/reiserfs.ko >> $LOG 2>&1
   insmod /lib/modules/2.6.18-6.6/kernel/drivers/cdrom/cdrom.ko >> $LOG 2>&1
   insmod /lib/modules/2.6.18-6.6/kernel/drivers/scsi/sr_mod.ko >> $LOG 2>&1
   if [ ! -d /dev/dvb/adapter0 ]; then
      mkdir /dev/dvb/adapter0 -p
   fi
   sleep 10
fi
if [ -e /dev/hda ]; then
   # first try new Kernel
   DEVICES1=`find /dev/hda?`
   for DEVICE in $DEVICES1;
   do
      if [ ! -e $BAHOME/ba.sh  ]; then
         mount -t ext3 $DEVICE $BAHOME > /dev/null 2>&1 
      fi
      if [ ! -e $BAHOME/ba.sh  ]; then
         umount $BAHOME > /dev/null 2>&1 
      fi 
   done
fi

if [ ! -e $BAHOME/ba.sh ]; then
   # second try - classic BA
   DEVICES1=`find /dev | grep -v discs | grep part1`
   for DEVICE in $DEVICES1;
   do
      if [ ! -e $BAHOME/ba.sh  ]; then
         mount -t ext3 $DEVICE $BAHOME > /dev/null 2>&1 
      fi
      if [ ! -e $BAHOME/ba.sh  ]; then
         umount $BAHOME > /dev/null 2>&1 
      fi
   done
fi
# third try - WW
if [ ! -e $BAHOME/ba.sh ]; then
   DEVICES2=`find /dev | grep -v discs | grep part2`
   for DEVICE in $DEVICES2;
   do
      if [ ! -e $BAHOME/ba.sh  ]; then
         mount -t ext3 $DEVICE $BAHOME > /dev/null 2>&1 
      fi
      if [ ! -e $BAHOME/ba.sh  ]; then
         umount $BAHOME > /dev/null 2>&1 
      fi
   done
fi
# ub750 try
if [ ! -e $BAHOME/ba.sh ]; then
   mount -t ext3 /dev/sdb1 $BAHOME > /dev/null 2>&1
   if [ ! -e $BAHOME/ba.sh  ]; then
      umount $BAHOME > /dev/null 2>&1 
   fi
   mount -t ext3 /dev/sdc1 $BAHOME > /dev/null 2>&1
   if [ ! -e $BAHOME/ba.sh  ]; then
      umount $BAHOME > /dev/null 2>&1 
   fi
   mount -t ext3 /dev/sda1 $BAHOME > /dev/null 2>&1
   if [ ! -e $BAHOME/ba.sh  ]; then
      umount $BAHOME > /dev/null 2>&1 
   fi
fi
# last try
if [ ! -e $BAHOME/ba.sh ]; then
if [ $BOXTYPE = "dm8000" ]; then
   mount -t jffs2 /dev/mtdblock/4 $BAHOME > /dev/null 2>&1
   if [ ! -e $BAHOME/ba.sh  ]; then
      umount $BAHOME > /dev/null 2>&1 
   else
      mkdir $BAHOME/ba/0 > /dev/null 2>&1
      mount -t jffs2 /dev/mtdblock/5 $BAHOME/ba/0 > /dev/null 2>&1
      mkdir $BAHOME/ba/0/boot > /dev/null 2>&1
      mount -t jffs2 /dev/mtdblock/6 $BAHOME/ba/0/boot > /dev/null 2>&1
   fi 
fi
fi
if [ `mount | grep $BAHOME | grep /dev/mtdblock/4 | wc -l` -lt 1 -a $BOXTYPE != "bm750" ]; then
# make thowi happy
BAROOT=`mount | grep $BAHOME | cut -dp -f 1 | head -n 1`
if [ -e /dev/mtdblock/5 -a ! -f $BAHOME/.banozero -a $BOXTYPE = "dm8000" ]; then
   mkdir $BAHOME/ba/0 > /dev/null 2>&1
   mount -t jffs2 /dev/mtdblock/5 $BAHOME/ba/0 > /dev/null 2>&1
   mkdir $BAHOME/ba/0/boot > /dev/null 2>&1
   mount -t jffs2 /dev/mtdblock/6 $BAHOME/ba/0/boot > /dev/null 2>&1
fi
if [ -e $BAROOT/part5 ]; then
   mkdir $BAHOME/ba/1 > /dev/null 2>&1
   mount -t ext3 $BAROOT/part5 $BAHOME/ba/1 > /dev/null 2>&1
fi
if [ -e $BAROOT/part6 ]; then
   mkdir $BAHOME/ba/2 > /dev/null 2>&1
   mount -t ext3 $BAROOT/part6 $BAHOME/ba/2 > /dev/null 2>&1
fi
if [ -e $BAROOT/part7 ]; then
   mkdir $BAHOME/ba/3 > /dev/null 2>&1
   mount -t ext3 $BAROOT/part7 $BAHOME/ba/3 > /dev/null 2>&1
fi
if [ -e $BAROOT/part8 ]; then
   mkdir $BAHOME/ba/4 > /dev/null 2>&1
   mount -t ext3 $BAROOT/part8 $BAHOME/ba/4 > /dev/null 2>&1
fi
if [ -e $BAROOT/part9 ]; then
   mkdir $BAHOME/ba/5 > /dev/null 2>&1
   mount -t ext3 $BAROOT/part9 $BAHOME/ba/5 > /dev/null 2>&1
fi
if [ -e $BAROOT/part10 ]; then
   mkdir $BAHOME/ba/6 > /dev/null 2>&1
   mount -t ext3 $BAROOT/part10 $BAHOME/ba/6 > /dev/null 2>&1
fi
if [ -e $BAROOT/part11 ]; then
   mkdir $BAHOME/ba/7 > /dev/null 2>&1
   mount -t ext3 $BAROOT/part11 $BAHOME/ba/7 > /dev/null 2>&1
fi
if [ -e $BAROOT/part12 ]; then
   mkdir $BAHOME/ba/8 > /dev/null 2>&1
   mount -t ext3 $BAROOT/part12 $BAHOME/ba/8 > /dev/null 2>&1
fi
else
   if [ ! -f $BAHOME/.banozero -a $BOXTYPE = "dm8000" ]; then
      mkdir $BAHOME/ba/0 > /dev/null 2>&1
      mount -t jffs2 /dev/mtdblock/5 $BAHOME/ba/0 > /dev/null 2>&1
      mkdir $BAHOME/ba/0/boot > /dev/null 2>&1
      mount -t jffs2 /dev/mtdblock/6 $BAHOME/ba/0/boot > /dev/null 2>&1
   fi
fi

/sbin/insmod $BAHOME/bin/fat.ko > /dev/null 2>&1
/sbin/insmod $BAHOME/bin/vfat.ko > /dev/null 2>&1
MODPROBE=/sbin/modprobe
if [ -f $BAHOME/bin/modprobe ]; then
   MODPROBE=$BAHOME/bin/modprobe
fi
$MODPROBE isofs > /dev/null 2>&1
$MODPROBE sr_mod  > /dev/null 2>&1
$MODPROBE cdrom  > /dev/null 2>&1
$MODPROBE cdfs > /dev/null 2>&1

if [ $# -lt 1 -a ! -f /.bainfo -a ! -d /noba ]; then
   if [ ! -f $BAHOME/.banobootmanager ]; then
      $MODPROBE lcd > /dev/null 2>&1
      if [ -f $LIBDIR/extra/head.ko ]; then
         /sbin/insmod $LIBDIR/extra/head.ko > /dev/null 2>&1
      else
         $MODPROBE xilleon > /dev/null 2>&1
         # for dm800
         $MODPROBE bcm7401 > /dev/null 2>&1
         # for dm8000
         $MODPROBE bcm7400 > /dev/null 2>&1
         # for bm750
         # done with insmode above
      fi
      if [ -f $BAHOME/.babootcolor ]; then
         cat $BAHOME/.babootcolor > /proc/stb/avs/0/colorformat
      else
         cat /proc/stb/avs/0/colorformat > /proc/stb/avs/0/colorformat
      fi
      $MODPROBE dreambox_keyboard > /dev/null 2>&1
      # for dm800
      $MODPROBE dreambox_rc2 > /dev/null 2>&1
      if [ -f $BAHOME/.bamask ]; then
         if [ -e /proc/stb/ir/rc/mask0 ]; then
            cat $BAHOME/.bamask > /proc/stb/ir/rc/mask0
         else
            cat $BAHOME/.bamask > /proc/stb/ir/rc/mask
         fi
      fi
      /usr/bin/showiframe $BAHOME/logos/barryallen.mvi > /dev/null 2>&1
      echo "init is called during boot without parameters"
      echo "therefore starting barryallen bootmanager"
      $BAHOME/bin/barryallen >> $BAHOME/.balog 2>&1
      if [ -f $BAHOME/.baresolution ]; then
         cat $BAHOME/.baresolution > /proc/stb/video/videomode
      fi
   fi
   if [ -f $LIBDIR/kernel/fs/autofs4/autofs4.ko ]; then
      /sbin/insmod $LIBDIR/kernel/fs/autofs4/autofs4.ko > /dev/null 2>&1
   fi
   TARGET=0
   if [ -f $BAHOME/.baboot ]; then
      TARGET=`cat $BAHOME/.baboot`
   fi
   if [ $TARGET = "WebIF" ]; then
      exit 0
   fi
   if [ $TARGET = "Flash" ]; then
      /usr/bin/showiframe /boot/bootlogo.mvi > /dev/null 2>&1
   else
      if [ -d $BAHOME/ba/$TARGET ]; then
         DELTA=""
         if [ -f $BAHOME/ba/$TARGET/squashfs ]; then
            mount -o loop $BAHOME/ba/$TARGET/squashfs  $BAHOME/ba/$TARGET/boot/mnt/squashfs 
            mount -t unionfs -o rw,dirs=$BAHOME/ba/$TARGET/delta=rw:$BAHOME/ba/$TARGET/boot/mnt/squashfs=ro none $BAHOME/ba/$TARGET/boot/mnt/root
            mount -o bind $BAHOME/ba/$TARGET/boot $BAHOME/ba/$TARGET/boot/mnt/root/boot
            DELTA="/boot/mnt/root"
         fi
         if [ -f $BAHOME/ba/$TARGET/$DELTA/usr/share/bootlogo.mvi ]; then
            /usr/bin/showiframe $BAHOME/ba/$TARGET/$DELTA/usr/share/bootlogo.mvi
         else
            /usr/bin/showiframe $BAHOME/ba/$TARGET/boot/bootlogo.mvi
         fi
         sleep 1
         /bin/mount -o bind /dev $BAHOME/ba/$TARGET/$DELTA/dev
         /bin/mount -o bind /proc $BAHOME/ba/$TARGET/$DELTA/proc
         /bin/mount -o bind /sys $BAHOME/ba/$TARGET/$DELTA/sys
         rm  $BAHOME/ba/$TARGET/$DELTA/$BAHOME > /dev/null 2>&1
         mkdir  $BAHOME/ba/$TARGET/$DELTA/$BAHOME > /dev/null 2>&1
         if [ ! -f $BAHOME/ba/$TARGET/$DELTA/$BAHOME/ba.sh ]; then
            /bin/mount -o bind $BAHOME $BAHOME/ba/$TARGET/$DELTA/$BAHOME
         fi
         if [ -d $BAHOME/ba/$TARGET/$DELTA/usr/lib/enigma2/python/Plugins/Extensions ]; then
            if [ ! -e $BAHOME/ba/$TARGET/$DELTA/usr/lib/enigma2/python/Plugins/Extensions/BarryAllen ]; then
               ln -sfn $BAHOME/BarryAllen $BAHOME/ba/$TARGET/$DELTA/usr/lib/enigma2/python/Plugins/Extensions/BarryAllen 
            fi
         fi
         if [ -f $BAHOME/ba/$TARGET/$DELTA/sbin/bainit ]; then
            exec /usr/sbin/chroot $BAHOME/ba/$TARGET/$DELTA /sbin/bainit
         else
            if [ -f $BAHOME/ba/$TARGET/$DELTA/sbin/init.sysvinit ]; then
               # for enigma2 support
               exec /usr/sbin/chroot $BAHOME/ba/$TARGET/$DELTA /sbin/init.sysvinit
            else
               if [ -f $BAHOME/ba/$TARGET/$DELTA/sbin/init ]; then
                  # for Neutrino and Debian Support
                  exec /usr/sbin/chroot $BAHOME/ba/$TARGET/$DELTA /sbin/init
               fi
            fi
         fi
         exit 0
      fi
   fi
fi

if [ $# -gt 0 ]; then
ERASETMP=/tmp/erase.cmd
echo "d"  >  $ERASETMP
echo "1"  >> $ERASETMP
echo "d"  >> $ERASETMP
echo "2"  >> $ERASETMP
echo "d"  >> $ERASETMP
echo "3"  >> $ERASETMP
echo "d"  >> $ERASETMP
echo "4"  >> $ERASETMP
echo "d"  >> $ERASETMP
echo "5"  >> $ERASETMP
echo "d"  >> $ERASETMP
echo "6"  >> $ERASETMP
echo "d"  >> $ERASETMP
echo "7"  >> $ERASETMP
echo "d"  >> $ERASETMP
echo "8"  >> $ERASETMP
echo "d"  >> $ERASETMP
echo "9"  >> $ERASETMP
echo "d"  >> $ERASETMP
echo "10" >> $ERASETMP
echo "d"  >> $ERASETMP
echo "11" >> $ERASETMP
echo "d"  >> $ERASETMP
echo "12" >> $ERASETMP
echo "d"  >> $ERASETMP
echo "13" >> $ERASETMP
echo "d"  >> $ERASETMP
echo "14" >> $ERASETMP
echo "d"  >> $ERASETMP
echo "15" >> $ERASETMP
echo "d"  >> $ERASETMP
echo "16" >> $ERASETMP
echo "n"  >> $ERASETMP
echo "p"  >> $ERASETMP
echo "1"  >> $ERASETMP
echo "1"  >> $ERASETMP
echo ""   >> $ERASETMP
echo "w"  >> $ERASETMP
fi


  case $1 in
     81)
        # check if dm800 box
        if [ dm800 = `cat /proc/stb/info/model` ]; then
           echo "DM800 has no CF card !"
           exit 1
        fi
        # check if booted from Flash
        if [ -f /.bainfo ]; then
           echo "Sorry, can ONLY erase CF,"
           echo "when booted from Flash !"
           exit 1
        fi
        # create mountpoint list 
        echo $CF_UDEV_DEV > $BATMP
        sed -ie s!"/dev"!""!g $BATMP
        UDEV_MOUNT_POINTS=`cat $BATMP`
        
        # last warning :)
        echo "barryallen: Erase CF"
        echo "WARNING: Erase starts in 30 sec - if unwanted turn box off  NOW !"
        sleep 30
        
        umount $BAHOME/boot > /dev/null 2>&1
        for BAIMAGEMOUNT in $BAIMAGEMOUNTS; do
            umount $BAIMAGEMOUNT > /dev/null 2>&1
        done 

        # stops automount
        if [ -f /etc/init.d/autofs ]; then
           echo "Barry Allen stops automount"
           /etc/init.d/autofs stop > /dev/null 2>&1
           sleep 5
           killall -9 automount > /dev/null 2>&1
        fi
        # stops udev        
        if [ -f /etc/init.d/udev ]; then
           echo "Barry Allen stops udev"
           /etc/init.d/udev stop > /dev/null 2>&1
        fi
        # stop swapping on all swap devices
        swapoff -a  > /dev/null 2>&1
        
        EXT_CF_DEVICE_PATH=''
        EXT_CF_DEVICE_MOUNT=''
        # unmount / swapoff devfs devices
        DEVFS_DEVICES=`find /dev | grep part`
        for DEVFS_DEVICE in $DEVFS_DEVICES; do
          if [ `mount | grep $DEVFS_DEVICE | grep /media/cf | grep fat | wc -l` -eq 1 ]; then
            umount /media/cf > /dev/null 2>&1
          elif [ `mount | grep $DEVFS_DEVICE | grep /media/ba | grep ext | wc -l` -eq 1 ]; then
            swapoff /media/ba/swapfile > /dev/null 2>&1
            umount /media/ba > /dev/null 2>&1
            EXT_CF_DEVICE_PATH=$DEVFS_DEVICE
            EXT_CF_DEVICE_MOUNT=/media/ba
          fi
        done
        # unmount / swapoff udev devices
        for UDEV_MOUNT_POINT in $UDEV_MOUNT_POINTS; do
          if [ `mount | grep /dev$UDEV_MOUNT_POINT | grep /media$UDEV_MOUNT_POINT | grep fat | wc -l` -eq 1 ]; then
            umount /media$UDEV_MOUNT_POINT > /dev/null 2>&1
          elif [ `mount | grep /dev$UDEV_MOUNT_POINT | grep /media$UDEV_MOUNT_POINT | grep ext | wc -l` -eq 1 ]; then
            swapoff /dev$UDEV_MOUNT_POINT/swapfile > /dev/null 2>&1
            umount /media$UDEV_MOUNT_POINT > /dev/null 2>&1
            EXT_CF_DEVICE_PATH=/dev$UDEV_MOUNT_POINT
            EXT_CF_DEVICE_MOUNT=/media$UDEV_MOUNT_POINT
          fi          
        done
        # check if unmounted sucsessfully
        if [ `mount | grep /media/cf | wc -l` -gt 0 -o `mount | grep /media/ba | wc -l` -gt 0 ]; then
          echo "ERROR: CF umount failed, can NOT do erase, sorry"
          echo "maybe standing in telnet on the device, or swapfile active,"
          echo "or booted from there with Barry Allen"
          echo "then boot from flash and try again !"
          echo "reboot to get mount back"
          exit 1
        fi
        
        # erase devfs or udev CF device
        if [ `find $EXT_CF_DEVICE_PATH | grep /dev/scsi | wc -l` -eq 1 ]; then
          echo $EXT_CF_DEVICE_PATH > $BATMP 
          sed -ie s!"/part1"!""!g $BATMP
          sed -ie s!"/part2"!""!g $BATMP
          CF_PATH=`cat $BATMP`
          # Erase CF and make empty EXT3 filesystem
          fdisk < $ERASETMP $CF_PATH/disc > /dev/null 2>&1
          echo "Making empty ext3 Filesystem ..."
          mkfs.ext3 $CF_PATH/part1 > /dev/null 2>&1
          # remount erased CF device
          mount $CF_PATH/part1 $EXT_CF_DEVICE_MOUNT > /dev/null 2>&1
        elif [ `find $EXT_CF_DEVICE_PATH | grep /dev/sd | wc -l` -eq 1 ]; then
          echo $EXT_CF_DEVICE_PATH > $BATMP
          sed -ie s!"1"!""!g $BATMP
          sed -ie s!"2"!""!g $BATMP
          CF_PATH=`cat $BATMP`
          echo $EXT_CF_DEVICE_MOUNT > $BATMP
          sed -ie s!"1"!""!g $BATMP
          sed -ie s!"2"!""!g $BATMP
          CF_MOUNT=`cat $BATMP`
          # Erase CF and make empty EXT3 filesystem
          fdisk < $ERASETMP $CF_PATH > /dev/null 2>&1
          echo "Making empty ext3 Filesystem ..."
          mkfs.ext3 $CF_PATH'1' > /dev/null 2>&1
          # remount erased CF device
          mount $CF_PATH'1' $CF_MOUNT'1' > /dev/null 2>&1
        fi
        
        # start automount
        if [ -f /etc/init.d/autofs ]; then
           echo "Barry Allen start automount"
           /etc/init.d/autofs start > /dev/null 2>&1
        fi
        # start udev        
        if [ -f /etc/init.d/udev ]; then
           echo "Barry Allen start udev"
           /etc/init.d/udev start > /dev/null 2>&1
        fi
        exit 0
     ;;
     82)
        # check if booted from Flash
        if [ -f /.bainfo ]; then
           echo "Sorry, can ONLY erase USB,"
           echo "when booted from Flash !"
           exit 1
        fi
        # create mountpoint list 
        echo $USB_UDEV_DEV > $BATMP
        sed -ie s!"/dev"!""!g $BATMP
        UDEV_MOUNT_POINTS=`cat $BATMP`
        
        # last warning :)
        echo "barryallen: Erase USB"
        echo "WARNING: Erase starts in 30 sec - if unwanted turn box off  NOW !"
        sleep 30

        umount $BAHOME/boot > /dev/null 2>&1
        for BAIMAGEMOUNT in $BAIMAGEMOUNTS; do
            umount $BAIMAGEMOUNT > /dev/null 2>&1
        done 
        
        # stops automount
        if [ -f /etc/init.d/autofs ]; then
           echo "Barry Allen stops automount"
           /etc/init.d/autofs stop > /dev/null 2>&1
           sleep 5
           killall -9 automount > /dev/null 2>&1
        fi
        # stops udev        
        if [ -f /etc/init.d/udev ]; then
           echo "Barry Allen stops udev"
           /etc/init.d/udev stop > /dev/null 2>&1
        fi
        # stop swapping on all swap devices
        swapoff -a  > /dev/null 2>&1
        
        EXT_USB_DEVICE_PATH=''
        EXT_USB_DEVICE_MOUNT=''
        # unmount / swapoff devfs devices
        DEVFS_DEVICES=`find /dev | grep part`
        for DEVFS_DEVICE in $DEVFS_DEVICES; do
          if [ `mount | grep $DEVFS_DEVICE | grep /media/usb | grep fat | wc -l` -eq 1 ]; then
            umount /media/usb > /dev/null 2>&1
          elif [ `mount | grep $DEVFS_DEVICE | grep /media/ba | grep ext | wc -l` -eq 1 ]; then
            swapoff /media/ba/swapfile > /dev/null 2>&1
            umount /media/ba > /dev/null 2>&1
            EXT_USB_DEVICE_PATH=$DEVFS_DEVICE
            EXT_USB_DEVICE_MOUNT=/media/ba
          fi
        done
        # unmount / swapoff udev devices
        for UDEV_MOUNT_POINT in $UDEV_MOUNT_POINTS; do
          if [ `mount | grep /dev$UDEV_MOUNT_POINT | grep /media$UDEV_MOUNT_POINT | grep fat | wc -l` -eq 1 ]; then
            umount /media$UDEV_MOUNT_POINT > /dev/null 2>&1
          elif [ `mount | grep /dev$UDEV_MOUNT_POINT | grep /media$UDEV_MOUNT_POINT | grep ext | wc -l` -eq 1 ]; then
            swapoff /dev$UDEV_MOUNT_POINT/swapfile > /dev/null 2>&1
            umount /media$UDEV_MOUNT_POINT > /dev/null 2>&1
            EXT_USB_DEVICE_PATH=/dev$UDEV_MOUNT_POINT
            EXT_USB_DEVICE_MOUNT=/media$UDEV_MOUNT_POINT
          fi          
        done
        # check if unmounted sucsessfully
        if [ `mount | grep /media/usb | wc -l` -gt 0 -o `mount | grep /media/ba | wc -l` -gt 0 ]; then
          echo "ERROR: USB umount failed, can NOT do erase, sorry"
          echo "maybe standing in telnet on the device, or swapfile active,"
          echo "or booted from there with Barry Allen"
          echo "then boot from flash and try again !"
          echo "reboot to get mount back"
          exit 1
        fi
        
        # erase devfs or udev USB device
        if [ `find $EXT_USB_DEVICE_PATH | grep /dev/scsi | wc -l` -eq 1 ]; then
          echo $EXT_USB_DEVICE_PATH > $BATMP 
          sed -ie s!"/part1"!""!g $BATMP
          sed -ie s!"/part2"!""!g $BATMP
          USB_PATH=`cat $BATMP`
          # Erase USB and make empty EXT3 filesystem
          fdisk < $ERASETMP $USB_PATH/disc > /dev/null 2>&1
          echo "Making empty ext3 Filesystem ..."
          mkfs.ext3 $USB_PATH/part1 > /dev/null 2>&1
          # remount erased USB device
          mount $USB_PATH/part1 $EXT_USB_DEVICE_MOUNT > /dev/null 2>&1
        elif [ `find $EXT_USB_DEVICE_PATH | grep /dev/sd | wc -l` -eq 1 ]; then
          echo $EXT_USB_DEVICE_PATH > $BATMP
          sed -ie s!"1"!""!g $BATMP
          sed -ie s!"2"!""!g $BATMP
          USB_PATH=`cat $BATMP`
          echo $EXT_USB_DEVICE_MOUNT > $BATMP
          sed -ie s!"1"!""!g $BATMP
          sed -ie s!"2"!""!g $BATMP
          USB_MOUNT=`cat $BATMP`
          # Erase USB and make empty EXT3 filesystem
          fdisk < $ERASETMP $USB_PATH > /dev/null 2>&1
          echo "Making empty ext3 Filesystem ..."
          mkfs.ext3 $USB_PATH'1' > /dev/null 2>&1
          # remount erased USB device
          mount $USB_PATH'1' $USB_MOUNT'1' > /dev/null 2>&1
        fi
        
        # start automount
        if [ -f /etc/init.d/autofs ]; then
           echo "Barry Allen start automount"
           /etc/init.d/autofs start > /dev/null 2>&1
        fi
        # start udev        
        if [ -f /etc/init.d/udev ]; then
           echo "Barry Allen start udev"
           /etc/init.d/udev start > /dev/null 2>&1
        fi
        exit 0
     ;;
     91 | 910 | 911 )
        # check if dm800 box
        if [ dm800 = `cat /proc/stb/info/model` ]; then
           echo "DM800 has no CF card !"
           exit 1
        fi
        # check if booted from Flash
        if [ -f /.bainfo ]; then
           echo "Sorry, can ONLY do Filesystemcheck,"
           echo "when booted from Flash !"
           exit 1
        fi
        # create mountpoint list 
        echo $CF_UDEV_DEV > $BATMP
        sed -ie s!"/dev"!""!g $BATMP
        UDEV_MOUNT_POINTS=`cat $BATMP`
        
        echo "bainit: Filesystemcheck CF"

        umount $BAHOME/boot > /dev/null 2>&1
        for BAIMAGEMOUNT in $BAIMAGEMOUNTS; do
            umount $BAIMAGEMOUNT > /dev/null 2>&1
        done 

        # stops automount
        if [ -f /etc/init.d/autofs ]; then
           echo "Barry Allen stops automount"
           /etc/init.d/autofs stop > /dev/null 2>&1
           sleep 5
           killall -9 automount > /dev/null 2>&1
        fi
        # stops udev        
        if [ -f /etc/init.d/udev ]; then
           echo "Barry Allen stops udev"
           /etc/init.d/udev stop > /dev/null 2>&1
        fi
        # stop swapping on all swap devices
        swapoff -a  > /dev/null 2>&1
        
        FAT_CF_DEVICE_PATH=''
        EXT_CF_DEVICE_PATH=''
        DEVICE_MOUNTS=''
        # unmount / swapoff devfs devices
        DEVFS_DEVICES=`find /dev | grep part`
        for DEVFS_DEVICE in $DEVFS_DEVICES; do
          if [ `mount | grep $DEVFS_DEVICE | grep /media/cf | grep fat | wc -l` -eq 1 ]; then
            swapoff /media/cf/swapfile > /dev/null 2>&1
            umount /media/cf > /dev/null 2>&1
            DEVICE_MOUNTS=$DEVICE_MOUNTS' '$DEVFS_DEVICE' '/media/cf
            FAT_CF_DEVICE_PATH=$DEVFS_DEVICE
          fi
          if [ `mount | grep $DEVFS_DEVICE | grep /media/cf | grep ext | wc -l` -eq 1 ]; then
            swapoff /media/cf/swapfile > /dev/null 2>&1
            umount /media/cf > /dev/null 2>&1
            DEVICE_MOUNTS=$DEVICE_MOUNTS' '$DEVFS_DEVICE' '/media/cf
            EXT_CF_DEVICE_PATH=$DEVFS_DEVICE
          fi
          if [ `mount | grep $DEVFS_DEVICE | grep /media/ba | grep ext | wc -l` -eq 1 ]; then
            swapoff /media/ba/swapfile > /dev/null 2>&1
            umount /media/ba > /dev/null 2>&1
            DEVICE_MOUNTS=$DEVICE_MOUNTS' '$DEVFS_DEVICE' '/media/ba
            EXT_CF_DEVICE_PATH=$DEVFS_DEVICE
          fi
        done
        # unmount / swapoff udev devices
        for UDEV_MOUNT_POINT in $UDEV_MOUNT_POINTS; do
          if [ `mount | grep /dev$UDEV_MOUNT_POINT | grep /media$UDEV_MOUNT_POINT | grep fat | wc -l` -eq 1 ]; then
            umount /media$UDEV_MOUNT_POINT > /dev/null 2>&1
            DEVICE_MOUNTS=$DEVICE_MOUNTS' '/dev$UDEV_MOUNT_POINT' '/media$UDEV_MOUNT_POINT
            FAT_CF_DEVICE_PATH=/dev$UDEV_MOUNT_POINT
          elif [ `mount | grep /dev$UDEV_MOUNT_POINT | grep /media$UDEV_MOUNT_POINT | grep ext | wc -l` -eq 1 ]; then
            swapoff /dev$UDEV_MOUNT_POINT/swapfile > /dev/null 2>&1
            umount /media$UDEV_MOUNT_POINT > /dev/null 2>&1
            DEVICE_MOUNTS=$DEVICE_MOUNTS' '/dev$UDEV_MOUNT_POINT' '/media$UDEV_MOUNT_POINT
            EXT_CF_DEVICE_PATH=/dev$UDEV_MOUNT_POINT
          fi          
        done
        # check if unmounted sucsessfully
        if [ `mount | grep /media/cf | wc -l` -gt 0 -o `mount | grep /media/ba | wc -l` -gt 0 ]; then
          echo "ERROR: umount failed, can NOT do Filesystemcheck, sorry"
          echo "maybe standing in telnet on the device, or swapfile active,"
          echo "or booted from there with Barry Allen"
          echo "then boot from flash and try again !"
          echo "reboot to get mount back"
          exit 1
        fi
        
        # FAT filesystem check
        if [ ! -z $FAT_CF_DEVICE_PATH ]; then
          fsck.msdos -a $FAT_CF_DEVICE_PATH > /dev/null 2>&1
        fi
        # EXT3 filesystem check
        if [ ! -z $EXT_CF_DEVICE_PATH ]; then
          case $1 in
            91)
            echo "bainit: doing normal Filesystemcheck ..."
            fsck.ext3 -f -v -p $EXT_CF_DEVICE_PATH
            ;;
            910)
            echo "bainit: doing read only Filesystemcheck ..."
            fsck.ext3 -f -v -n $EXT_CF_DEVICE_PATH
            ;;
            911)
            echo "bainit: doing forced fix Filesystemcheck ..."
            fsck.ext3 -f -v -y $EXT_CF_DEVICE_PATH
            ;;
          esac
        fi
        
        # remount all devices
        toggle=0
        for ITEM in $DEVICE_MOUNTS; 
        do
          if [ $toggle -eq 0 ]; then
            DEV_DEVICE=$ITEM
            toggle=1
          elif [ $toggle -eq 1 ]; then
            DEV_MOUNT=$ITEM
            toggle=0
            mount $DEV_DEVICE $DEV_MOUNT > /dev/null 2>&1
          fi  
        done
        
        # start swapping on all swap devices
        swapon -a > /dev/null 2>&1
        # start automount
        if [ -f /etc/init.d/autofs ]; then
           echo "Barry Allen start automount"
           /etc/init.d/autofs start > /dev/null 2>&1
        fi
        # start udev        
        if [ -f /etc/init.d/udev ]; then
           echo "Barry Allen start udev"
           /etc/init.d/udev start > /dev/null 2>&1
        fi
        exit 0
     ;;
     92 | 920 | 921 )
        # check if booted from Flash
        if [ -f /.bainfo ]; then
           echo "Sorry, can ONLY do Filesystemcheck,"
           echo "when booted from Flash !"
           exit 1
        fi
        # create mountpoint list 
        echo $USB_UDEV_DEV > $BATMP
        sed -ie s!"/dev"!""!g $BATMP
        UDEV_MOUNT_POINTS=`cat $BATMP`
        
        echo "bainit: Filesystemcheck USB"

        umount $BAHOME/boot > /dev/null 2>&1
        for BAIMAGEMOUNT in $BAIMAGEMOUNTS; do
            umount $BAIMAGEMOUNT > /dev/null 2>&1
        done 

        # stops automount
        if [ -f /etc/init.d/autofs ]; then
           echo "Barry Allen stops automount"
           /etc/init.d/autofs stop > /dev/null 2>&1
           sleep 5
           killall -9 automount > /dev/null 2>&1
        fi
        # stops udev        
        if [ -f /etc/init.d/udev ]; then
           echo "Barry Allen stops udev"
           /etc/init.d/udev stop > /dev/null 2>&1
        fi
        # stop swapping on all swap devices
        swapoff -a  > /dev/null 2>&1
        
        FAT_USB_DEVICE_PATH=''
        EXT_USB_DEVICE_PATH=''
        DEVICE_MOUNTS=''
        # unmount / swapoff devfs devices
        DEVFS_DEVICES=`find /dev | grep part`
        for DEVFS_DEVICE in $DEVFS_DEVICES; do
          if [ `mount | grep $DEVFS_DEVICE | grep /media/usb | grep fat | wc -l` -eq 1 ]; then
            swapoff /media/usb/swapfile > /dev/null 2>&1
            umount /media/usb > /dev/null 2>&1
            DEVICE_MOUNTS=$DEVICE_MOUNTS' '$DEVFS_DEVICE' '/media/usb
            FAT_USB_DEVICE_PATH=$DEVFS_DEVICE
          fi
          if [ `mount | grep $DEVFS_DEVICE | grep /media/usb | grep ext | wc -l` -eq 1 ]; then
            swapoff /media/usb/swapfile > /dev/null 2>&1
            umount /media/usb > /dev/null 2>&1
            DEVICE_MOUNTS=$DEVICE_MOUNTS' '$DEVFS_DEVICE' '/media/usb
            EXT_USB_DEVICE_PATH=$DEVFS_DEVICE
          fi
          if [ `mount | grep $DEVFS_DEVICE | grep /media/ba | grep ext | wc -l` -eq 1 ]; then
            swapoff /media/ba/swapfile > /dev/null 2>&1
            umount /media/ba > /dev/null 2>&1
            DEVICE_MOUNTS=$DEVICE_MOUNTS' '$DEVFS_DEVICE' '/media/ba
            EXT_USB_DEVICE_PATH=$DEVFS_DEVICE
          fi
        done
        # unmount / swapoff udev devices
        for UDEV_MOUNT_POINT in $UDEV_MOUNT_POINTS; do
          if [ `mount | grep /dev$UDEV_MOUNT_POINT | grep /media$UDEV_MOUNT_POINT | grep fat | wc -l` -eq 1 ]; then
            umount /media$UDEV_MOUNT_POINT > /dev/null 2>&1
            DEVICE_MOUNTS=$DEVICE_MOUNTS' '/dev$UDEV_MOUNT_POINT' '/media$UDEV_MOUNT_POINT
            FAT_USB_DEVICE_PATH=/dev$UDEV_MOUNT_POINT
          elif [ `mount | grep /dev$UDEV_MOUNT_POINT | grep /media$UDEV_MOUNT_POINT | grep ext | wc -l` -eq 1 ]; then
            swapoff /dev$UDEV_MOUNT_POINT/swapfile > /dev/null 2>&1
            umount /media$UDEV_MOUNT_POINT > /dev/null 2>&1
            DEVICE_MOUNTS=$DEVICE_MOUNTS' '/dev$UDEV_MOUNT_POINT' '/media$UDEV_MOUNT_POINT
            EXT_USB_DEVICE_PATH=/dev$UDEV_MOUNT_POINT
          fi          
        done
        # check if unmounted sucsessfully
        if [ `mount | grep /media/usb | wc -l` -gt 0 -o `mount | grep /media/ba | wc -l` -gt 0 ]; then
          echo "ERROR: umount failed, can NOT do Filesystemcheck, sorry"
          echo "maybe standing in telnet on the device, or swapfile active,"
          echo "or booted from there with Barry Allen"
          echo "then boot from flash and try again !"
          echo "reboot to get mount back"
          exit 1
        fi
        
        # FAT filesystem check
        if [ ! -z $FAT_USB_DEVICE_PATH ]; then
          fsck.msdos -a $FAT_USB_DEVICE_PATH > /dev/null 2>&1
        fi
        # EXT3 filesystem check
        if [ ! -z $EXT_USB_DEVICE_PATH ]; then
          case $1 in
            92)
            echo "bainit: doing normal Filesystemcheck ..."
            fsck.ext3 -f -v -p $EXT_USB_DEVICE_PATH
            ;;
            920)
            echo "bainit: doing read only Filesystemcheck ..."
            fsck.ext3 -f -v -n $EXT_USB_DEVICE_PATH
            ;;
            921)
            echo "bainit: doing forced fix Filesystemcheck ..."
            fsck.ext3 -f -v -y $EXT_USB_DEVICE_PATH
            ;;
          esac
        fi
        
        # remount all devices
        toggle=0
        for ITEM in $DEVICE_MOUNTS; 
        do
          if [ $toggle -eq 0 ]; then
            DEV_DEVICE=$ITEM
            toggle=1
          elif [ $toggle -eq 1 ]; then
            DEV_MOUNT=$ITEM
            toggle=0
            mount $DEV_DEVICE $DEV_MOUNT > /dev/null 2>&1
          fi  
        done
        
        # start swapping on all swap devices
        swapon -a > /dev/null 2>&1
        # start automount
        if [ -f /etc/init.d/autofs ]; then
           echo "Barry Allen start automount"
           /etc/init.d/autofs start > /dev/null 2>&1
        fi
        # start udev        
        if [ -f /etc/init.d/udev ]; then
           echo "Barry Allen start udev"
           /etc/init.d/udev start > /dev/null 2>&1
        fi
        exit 0
     ;;
     93 | 930 | 931 )
        # check if booted from Flash
        if [ -f /.bainfo ]; then
           echo "Sorry, can ONLY do Filesystemcheck,"
           echo "when booted from Flash !"
           exit 1
        fi
        # create mountpoint list 
        echo $HD_UDEV_DEV > $BATMP
        sed -ie s!"/dev"!""!g $BATMP
        UDEV_MOUNT_POINTS=`cat $BATMP`
        
        echo "bainit: Filesystemcheck HDD"

        # stops automount
        if [ -f /etc/init.d/autofs ]; then
           echo "Barry Allen stops automount"
           /etc/init.d/autofs stop > /dev/null 2>&1
           sleep 5
           killall -9 automount > /dev/null 2>&1
        fi
        # stops udev        
        if [ -f /etc/init.d/udev ]; then
           echo "Barry Allen stops udev"
           /etc/init.d/udev stop > /dev/null 2>&1
        fi
        # stop swapping on all swap devices
        swapoff -a  > /dev/null 2>&1
        
        EXT_HDD_DEVICE_PATH=''
        DEVICE_MOUNTS=''
        # unmount / swapoff devfs discs
        DEVFS_DISCS=`find /dev/discs/disc?`
        for DEVFS_DISC in $DEVFS_DISCS; do
          if [ `mount | grep $DEVFS_DISC/part1 | grep /media/hdd | grep ext | wc -l` -eq 1 ]; then
            swapoff /media/hdd/swapfile > /dev/null 2>&1
            umount /media/hdd > /dev/null 2>&1
            DEVICE_MOUNTS=$DEVICE_MOUNTS' '$DEVFS_DISC/part1' '/media/hdd
            EXT_HDD_DEVICE_PATH=$DEVFS_DISC/part1
          elif [ `mount | grep $DEVFS_DISC/part1 | grep /media/ba | grep ext | wc -l` -eq 1 ]; then
            swapoff /media/ba/swapfile > /dev/null 2>&1
            umount /media/ba > /dev/null 2>&1
            DEVICE_MOUNTS=$DEVICE_MOUNTS' '$DEVFS_DISC/part1' '/media/ba
          fi
        done
        # unmount / swapoff devfs ide devices
        DEVFS_DEVICES=`find /dev/ide | grep part`
        for DEVFS_DEVICE in $DEVFS_DEVICES; do
          if [ `mount | grep $DEVFS_DEVICE | grep /media/hdd | grep ext | wc -l` -eq 1 ]; then
            swapoff /media/hdd/swapfile > /dev/null 2>&1
            umount /media/hdd > /dev/null 2>&1
            DEVICE_MOUNTS=$DEVICE_MOUNTS' '$DEVFS_DEVICE' '/media/hdd
            EXT_HDD_DEVICE_PATH=$DEVFS_DEVICE
          elif [ `mount | grep $DEVFS_DEVICE | grep /media/ba | grep ext | wc -l` -eq 1 ]; then
            swapoff /media/ba/swapfile > /dev/null 2>&1
            umount /media/ba > /dev/null 2>&1
            DEVICE_MOUNTS=$DEVICE_MOUNTS' '$DEVFS_DEVICE' '/media/ba
          fi
        done
        # unmount / swapoff udev devices
        for UDEV_MOUNT_POINT in $UDEV_MOUNT_POINTS; do
          if [ `mount | grep /dev$UDEV_MOUNT_POINT | grep /media$UDEV_MOUNT_POINT | grep ext | wc -l` -eq 1 ]; then
            swapoff /dev$UDEV_MOUNT_POINT/swapfile > /dev/null 2>&1
            umount /media$UDEV_MOUNT_POINT > /dev/null 2>&1
            DEVICE_MOUNTS=$DEVICE_MOUNTS' '/dev$UDEV_MOUNT_POINT' '/media$UDEV_MOUNT_POINT
            EXT_HDD_DEVICE_PATH=/dev$UDEV_MOUNT_POINT
          fi          
        done
        # check if unmounted sucsessfully hdd, /media/ba could be still mounted on USB / CF
        if [ `mount | grep /media/hdd | wc -l` -gt 0 ]; then
          echo "ERROR: umount failed, can NOT do Filesystemcheck, sorry"
          echo "maybe standing in telnet on the device, or swapfile active,"
          echo "or booted from there with Barry Allen"
          echo "then boot from flash and try again !"
          echo "reboot to get mount back"
          exit 1
        fi
        
        # EXT3 filesystem check
        if [ ! -z $EXT_HDD_DEVICE_PATH ]; then
          case $1 in
            93)
            echo "bainit: doing normal Filesystemcheck ..."
            fsck.ext3 -f -v -p $EXT_HDD_DEVICE_PATH
            ;;
            930)
            echo "bainit: doing read only Filesystemcheck ..."
            fsck.ext3 -f -v -n $EXT_HDD_DEVICE_PATH
            ;;
            931)
            echo "bainit: doing forced fix Filesystemcheck ..."
            fsck.ext3 -f -v -y $EXT_HDD_DEVICE_PATH
            ;;
          esac
        fi
        
        # remount all devices
        toggle=0
        for ITEM in $DEVICE_MOUNTS; 
        do
          if [ $toggle -eq 0 ]; then
            DEV_DEVICE=$ITEM
            toggle=1
          elif [ $toggle -eq 1 ]; then
            DEV_MOUNT=$ITEM
            toggle=0
            mount $DEV_DEVICE $DEV_MOUNT > /dev/null 2>&1
          fi  
        done
        
        # start swapping on all swap devices
        swapon -a > /dev/null 2>&1
        # start automount
        if [ -f /etc/init.d/autofs ]; then
           echo "Barry Allen start automount"
           /etc/init.d/autofs start > /dev/null 2>&1
        fi
        # start udev        
        if [ -f /etc/init.d/udev ]; then
           echo "Barry Allen start udev"
           /etc/init.d/udev start > /dev/null 2>&1
        fi
        exit 0
     ;;
     110 )
        # check if dm800 box
        if [ dm800 = `cat /proc/stb/info/model` ]; then
           echo "DM800 has no CF card !"
           exit 1
        fi
        
        # /media/hdd not mounted and is no symlink
        if [ `mount | grep /media/hdd | grep ext | wc -l` -lt 1 ]; then
          if [ ! -h /media/hdd ]; then
            echo "no Harddisk mounted, sorry"
            exit 1
          fi
        fi
        
        # /media/ba not mounted
        if [ `mount | grep /media/ba | grep ext | wc -l` -lt 1 ]; then
          echo "no CF mounted, sorry"
          exit 1
        fi

        touch /media/hdd/dumpdates
        ln -sfn /media/hdd/dumpdates /var/lib/dumpdates
        mkdir /media/hdd/backup > /dev/null 2>&1
        echo "bainit: doing full backup of /media/ba to /media/hdd/backup/cf.dmp"
        /media/ba/bin/dump 0uf /media/hdd/backup/cf.dmp /media/ba
        exit 0
     ;;
     120 )
        # /media/hdd not mounted and is no symlink
        if [ `mount | grep /media/hdd | grep ext | wc -l` -lt 1 ]; then
          if [ ! -h /media/hdd ]; then
            echo "no Harddisk mounted, sorry"
            exit 1
          fi
        fi
        
        # /media/ba not mounted
        if [ `mount | grep /media/ba | grep ext | wc -l` -lt 1 ]; then
          echo "no USB mounted, sorry"
          exit 1
        fi

        touch /media/hdd/dumpdates
        ln -sfn /media/hdd/dumpdates /var/lib/dumpdates
        mkdir /media/hdd/backup > /dev/null 2>&1
        echo "bainit: doing full backup of /media/ba to /media/hdd/backup/usb.dmp"
        /media/ba/bin/dump 0uf /media/hdd/backup/usb.dmp /media/ba
        exit 0
     ;;
     *)
# boot Flash 

UNIONFS=0
if [ ! -f /.bainfo ]; then
   if [ -f /lib/modules/`uname -r`/kernel/fs/unionfs.ko ]; then
      /sbin/insmod /lib/modules/`uname -r`/kernel/fs/unionfs.ko >> /dev/null 2>&1
   fi
   if [ `lsmod | grep unionfs | wc -l` -gt 0 ]; then
      UNIONFS=1
   fi
fi
if [ -f /sbin/init.sysvinit ]; then
   # for enigma2 support
   if [ $UNIONFS -eq 1 -a -f /sbin/freeze ]; then
      exec /sbin/freeze $1
   else
      exec /sbin/init.sysvinit $1
   fi
else
   # for Neutrino and Debian Support
   exec /sbin/init $1
fi
exit 0
;;
esac
exit 0

