#!/system/bin/bash

# Darktremor Apps2SD version 2.7.5
# Based on the Cyanogen 1.5 Scripts
# Date:  January 28, 2011
# Bourne Again Shell (bash) courtesy of mzet (http://pub.mzet.net/bash)
# Zipalign code courtesy of Wes Garner
# Base apps2sd code courtesy of Cyanogen

if [ -d /sd-ext ];
  then
    export mntpoint="/sd-ext";
  else
    export mntpoint="/system/sd";
fi;


echo -e "[ ] Running Program: starta2sd" >> $a2sdlf

if [ $# == 0 ];
  then
    if [ $a2sdfirstboot == 1 ];
      then
        export a2sdcmd="boot"
      else
        echo "[X] You can't run StartA2SD by itself."
        echo "    Use the program a2sd to run Darktremor Apps2SD."
        echo "[!] Type a2sd help for a list of commands."
        exit
    fi;
  else
    export a2sdcmd=$1
fi;
export a2sdcmnt=`$bbcat /proc/mounts | $bbgrep -q -e /data/dalvik-cache;echo $?;`;
export a2sdmnt=`$bbcat /proc/mounts | $bbgrep -q -e $mntpoint;echo $?;`;
export dcpath="/cache/dc";
export a2sdswap=`$gpcmd a2sd.swap`

if [ ! $a2sdswap ];
  then
    echo -e "[X] No a2sd.swap environment variable found." | $tee
    $spcmd a2sd.swap 0;
fi;

export a2sdblk=`$gpcmd a2sd.mountpoint`
if [ ! $a2sdblk ];
  then
    echo "[X] Problem detected: Darktremor Apps2SD may not have ran"
    echo "    during boot.  Cannot read a2sd.mountpoint."
  else
    if [ $a2sdblk == "none" ];
      then
        export a2sdmnt=1
      else
        export a2sdmnt=0
    fi;
fi;

echo -e "[ ] Starting Darktremor Apps2SD in $a2sdcmd mode";

echo -e "[ ] a2sdcmd = $a2sdcmd" >> $a2sdlf
case $a2sdcmd
  in
   "bootprotect")
                   reboot=0
                   echo -e "[!] BOOT PROTECTION ACTIVATED!!!" | $tee
                   if [ -h /data/app ];
                     then
                       echo "[!] Resetting App Directory..." | $tee
                       $bbrm -f /data/app | $tee
                       $bbmkdir /data/app | $tee
                       $bbchmod /data/app | $tee
                       reboot=1
                   fi;
                   if [ -h /data/app-private ];
                     then
                       echo "[!] Resetting Private App Directory..." | $tee
                       $bbrm -f /data/app-private | $tee
                       $bbmkdir /data/app-private | $tee
                       $bbchmod /data/app-private | $tee
                       reboot=1
                   fi;
                   if [ -h /data/dalvik-cache ];
                     then
                       echo "[!] Resetting Dalvik-Cache Directory..." | $tee
                       $bbrm -f /data/dalvik-cache | $tee
                       $bbmkdir /data/dalvik-cache | $tee
                       $bbchmod /data/dalvik-cache | $tee
                       $bbrm -f /data/.dalvikcache | $tee
                       reboot=1
                   fi;
                   if [ -h /data/data ];
                     then
                       echo "[!] Resetting Program Data Directory..." | $tee
                       $bbrm -f /data/data | $tee
                       $bbmkdir /data/data | $tee
                       $bbchmod /data/data | $tee
                       reboot=1
                   fi;
                   if [ $reboot == 1 ];
                     then
                       echo -e "[ ] Rebooting phone..." | $tee
                       $bbsync | $tee
                       $bbreboot | $tee
                   fi;
                   set cm.filesystem.ready 1
                   set dc.filesystem.ready 1
                   set oxygen.filesystem.ready 1
                   ;; 
        "datasd")  
                   if [ $a2sdmnt == 1 ];
                     then
                       echo -e "[X] No partition available.  Data move not available" | $tee
                       echo "x" > /data/.nodata | $tee
                     else
                       echo -e "[!] Note: This is an experimental option.  Data loss may " | $tee
                       echo -e "          occur during the move process if the /data/data" | $tee
                       echo -e "          contents change during the move." | $tee
                       echo -e "" | $tee
                       echo -e "[ ] Checking to see if /data is located on $mntpoint" | $tee
                       if [ ! -e $mntpoint/data ];
                         then
                           $bbmkdir $mntpoint/data | $tee
                           $bbchmod $mntpoint/data | $tee
                       fi;
                       echo -e "[ ] Copying /data/data to $mntpoint/data" | $tee
                       $bbcp -rfp /data/data/*.* $mntpoint/data | $tee
                       echo -e "[ ] Renaming /data/data to /data/datatemp" | $tee
                       $bbmv -f /data/data /data/datatemp | $tee
                       echo -e "[ ] Creating Symbolic Link to $mntpoint/data" | $tee
                       $bbln $mntpoint/data /data/data | $tee
                       echo -e "[ ] Removing /data/datatemp" | $tee
                       $bbrm -rf /data/datatemp | $tee
                       echo -e "[ ] Running Fix Permissions..." | $tee
                       /system/bin/fix_permissions
                       $bbcmd echo "x" > /data/.datasd | $tee
                       repair=`$gpcmd a2sd.repair.reboot`
                       if [ $repair == 0 ];
                         then
                           if [ $a2sdmnt == 0 ];
                             then
                               echo -e "[ ] Unmounting $a2sdblk..." | $tee
                               $bbumount $a2sdblk | $tee
                           fi;
                           echo -e "[ ] Rebooting phone..." | $tee
                           $bbsync | $tee
                           $bbreboot | $tee
                       fi;
                   fi;
                   ;;
        "nodata")
                   if [ ! -h /data/data ];
                     then
                       echo -e "[X] /data/data is not symbolically linked." | $tee
                       echo -e "    Moving not supported." | $tee
                     else
                       echo -e "[ ] Creating /data/datatemp" | $tee
                       $bbmkdir /data/datatemp
                       $bbchmod /data/datatemp
                       echo -e "[ ] Copying $mntpoint/data to /data/datatemp"  | $tee
                       $bbcp -rfp $mntpoint/data/*.* /data/datatemp | $tee
                       echo -e "[ ] Removing Symbolic Link" | $temp
                       $bbrm -f /data/data
                       echo -e "[ ] Renaming /data/datatemp to /data/data" | $tee
                       $bbmv -f /data/datatemp /data/data
                       echo -e "[ ] Clearing $mntpoint/data" | $tee
                       $bbrm -rf $mntpoint/data | $tee
                       echo -e "[ ] Running Fix Permissions..." | $tee
                       /system/bin/fix_permissions
                       $bbrm -f /data/.datasd | $tee
                       repair=`$gpcmd a2sd.repair.reboot`
                       if [ $repair == 0 ];
                         then
                           if [ $a2sdmnt == 0 ];
                             then
                               echo -e "[ ] Unmounting $a2sdblk..." | $tee
                               $bbumount $a2sdblk | $tee
                           fi;
                           echo -e "[ ] Rebooting phone..." | $tee
                           $bbsync | $tee
                           $bbreboot | $tee
                       fi;
                   fi;
                   ;;
        "partlist")
                   echo -e "[ ] Partitions Supported with this ROM:" | $tee
                   export a2sdplist=`$bbgrep -q -e ext2 /proc/filesystems;echo $?;`;
                   if [ $a2sdplist == 0 ];
                     then
                       echo -e "    [*] EXT2 Partition Supported " | $tee
                     else
                       echo -e "    [X] EXT2 Partition Not Supported" | $tee
                   fi;
                   export a2sdplist=`$bbgrep -q -e ext3 /proc/filesystems;echo $?;`;
                   if [ $a2sdplist == 0 ];
                     then
                       echo -e "    [*] EXT3 Partition Supported" | $tee
                     else
                       echo -e "    [X] EXT3 Partition Not Supported" | $tee
                   fi;
                   export a2sdplist=`$bbgrep -q -e ext4 /proc/filesystems;echo $?;`;
                   if [ $a2sdplist == 0 ];
                     then
                       echo -e "    [*] EXT4 Partition Supported" | $tee
                     else
                       echo -e "    [X] EXT4 Partition Not Supported" | $tee
                   fi;
                   ;;
         "check")
                    echo -e "[ ] Running Apps2SD Check Program.";
                    echo -e "[ ] Attempting to execute: chka2sd" >> $a2sdlf
                    $a2sdshell /system/bin/chka2sd
                    ;;
       "repair")
                    echo "[!] Initiating Repair." | $tee
                    mntsd=`$bbgrep -q -e $mntpoint /proc/mounts;echo $?;`
                    if [ $mntsd == 1 ];
                      then
                        echo -e "[-] EXT Partition NOT Mounted." | $tee
                      else
                        echo -e "[-] EXT Partition Mounted." | $tee
                    fi;
                    symapp=`if [ -h /data/app ]; then echo 0; else echo 1; fi;`
                    if [ $symapp == 1 ];
                      then
                        echo -e "[-] Applications are on Internal Storage." | $tee
                      else
                        echo -e "[-] Application on SD Card." | $tee
                    fi;
                    sympriv=`if [ -h /data/app-private ]; then echo 0; else echo 1; fi;`
                    if [ $sympriv == 1 ];
                      then
                        echo -e "[-] Private Apps on Internal Storage." | $tee
                      else
                        echo -e "[-] Private Apps on SD Card." | $tee
                    fi;
                    symdc=`if [ -h /data/dalvik-cache ]; then echo 0; else echo 1; fi;`
                    if [ $symdc == 1 ];
                      then
                        echo -e "[-] Dalvik-Cache is on Internal Storage." | $tee
                      else
                        echo -e "[-] Dalvik-Cache is on SD Card." | $tee
                    fi;
                    mntdc=`$bbgrep -q -e /data/dalvik-cache /proc/mounts;echo $?;`
                    if [ $mntdc == 1 ];
                      then
                        echo -e "[-] Dalvik2Cache Mount NOT Active." | $tee
                      else
                        echo -e "[-] Dalvik2Cache Mount Active." | $tee
                    fi;
                    symdata=`if [ -h /data/data ]; then echo 0; else echo 1; fi;`
                    if [ $symdata == 1 ];
                      then
                        echo -e "[-] Program Data on Internal Storage." | $tee
                      else
                        echo -e "[-] Program Data on SD Card." | $tee
                    fi;
                    fla2sd=`if [ -e /data/.noa2sd ]; then echo 0; else echo 1; fi;`
                    if [ $fla2sd == 1 ];
                      then
                        echo -e "[-] No Apps2SD Flag File NOT Set." | $tee
                      else
                        echo -e "[-] No Apps2SD Flag File Set." | $tee
                    fi;
                    fldcsd=`if [ -e /data/.dalvikcache ]; then echo 0; else echo 1; fi;`
                    if [ $fldcsd == 1 ];
                      then
                        echo -e "[-] Dalvik2SD Flag File NOT Set." | $tee
                      else
                        echo -e "[-] Dalvik2SD Flag File Set." | $tee
                    fi;
                    fldccp=`if [ -e /data/.dcpartition ]; then echo 0; else echo 1; fi;`
                    if [ $fldccp == 1 ];
                      then
                        echo -e "[-] Dalvik2Cache Flag File NOT Set." | $tee
                      else
                        echo -e "[-] Dalvik2Cache Flag File Set." | $tee
                    fi;
                    fldata=`if [ -e /data/.datasd ]; then echo 0; else echo 1; fi;`
                    if [ $fldata == 1 ];
                      then
                        echo -e "[-] Data2SD Flag File NOT Set." | $tee
                      else
                        echo -e "[-] Data2SD Flag File Set." | $tee
                    fi;
                    reboot=0
                    if [ $symapp == 0 ];
                      then
                        if [ $fla2sd == 0 ];
                          then
                            echo -e "[X] Applications are Symbolically Linked." | $tee
                            echo -e "    NoApps2SD Flag File is set." | $tee
                            echo -e "    EXT partition: Not Applicable." | $tee
                            echo -e "[!] Executing command: a2sd remove" | $tee
                            $spcmd a2sd.repair.reboot 1
                            $a2sdshell /system/bin/starta2sd remove
                            reboot=1
                        fi;
                      else
                        if [ $fla2sd == 1 ];
                          then
                            if [ $mntsd == 0 ];
                              then
                                echo -e "[X] Applications are NOT Symbolically Linked." | $tee
                                echo -e "    NoApps2SD Flag File is NOT set." | $tee
                                echo -e "    EXT Partition: Mounted." | $tee
                                echo -e "[!] Executing command: a2sd install" | $tee
                                $spcmd a2sd.repair.reboot 1
                                $a2sdshell /system/bin/starta2sd install
                                reboot=1
                              else
                                echo -e "[X] Applications are Not Symbolically Linked." | $tee
                                echo -e "    NoApps2SD Flag File is NOT set." | $tee
                                echo -e "    EXT Partition: NOT mounted." | $tee
                                echo -e "[!] Setting NoApps2SD Flag File." | $tee  
                                echo "X" > /data/.noa2sd
                            fi;
                        fi;
                    fi;
                    if [ $symdc == 0 ];
                      then
                        if [ $fldcsd == 1 ];
                          then
                            if [ $fldccp == 0 ];
                              then
                                echo -e "[X] Dalvik-Cache is Symbolically Linked." | $tee
                                echo -e "    Dalvik2SD Flag File NOT Set." | $tee
                                echo -e "    Dalvik2Cache Flag File Set." | $tee
                                echo -e "[!] Executing Command: a2sd cachepart" | $tee 
                                $spcmd a2sd.repair.reboot 1
                                $a2sdshell /system/bin/starta2sd cachepartreset
                                reboot=1
                              else
                                echo -e "[X] Dalvik-Cache is Symbolically Linked." | $tee
                                echo -e "    Dalvik2SD Flag File NOT Set." | $tee
                                echo -e "    Dalvik2Cache Flag File NOT set." | $tee
                                echo -e "[!] Executing Command: a2sd nocache" | $tee
                                $spcmd a2sd.repaire.reboot 1
                                $a2sdshell /system/bin/starta2sd nocachereset
                                reboot=1
                            fi;
                        fi;
                      else
                        if [ $fldcsd == 0 ];
                          then
                            if [ $mntsd == 0 ];
                              then
                                echo -e "[X] Dalvik-Cache is NOT Symbolically Linked." | $tee
                                echo -e "    Dalvik2SD Flag File is Set." | $tee
                                echo -e "    EXT Partition: Mounted." | $tee
                                echo -e "[!] Executing Command: a2sd cachesd" | $tee
                                $spcmd a2sd.repair.reboot 1
                                $a2sdshell /system/bin/starta2sd cachesdreset
                                reboot=1
                              else
                                echo -e "[X] Dalvik-Cache is NOT Symbolically Linked." | $tee
                                echo -e "    Dalvik2SD Flag File is Set." | $tee
                                echo -e "    EXT Partition: NOT Mounted." | $tee
                                echo -e "[!] Removing Dalvik2SD Flag File." | $tee
                                $bbrm /data/.dalvikcache | $tee
                            fi;
                          else
                            if [ $fldccp == 0 ];
                              then
                                if [ $mntdc == 1 ];
                                  then
                                    echo -e "[X] Dalvik-Cache is NOT Symbolically Linked." | $tee
                                    echo -e "    Dalvik2Cache Flag File is Set." | $tee
                                    echo -e "    Dalvik2Cache Mount is NOT active." | $tee
                                    echo -e "[!] Executing Command: a2sd cachepart" | $tee
                                    $spcmd a2sd.repair.reboot 1
                                    $a2sdshell /system/bin/starta2sd cachepartreset
                                    reboot=1
                                fi;
                            fi;
                        fi;
                    fi;
                    if [ $symdata == 0 ];
                      then
                         if [ $fldata == 1 ];
                           then
                             echo -e "[X] Program Data is Symbolically Linked." | $tee
                             echo -e "    Data2SD Flag File is NOT Set." | $tee
                             echo -e "    EXT Partition: Not Applicable." | $tee
                             echo -e "[!] Executing Command: a2sd nodata" | $tee
                             $spcmd a2sd.repair.reboot 1
                             $a2sdshell /system/bin/starta2sd nodatareset
                             reboot=1               
                           else
                             if [ $mntsd == 1 ];
                               then
                                 echo -e "[X] Program Data is Symbolically Linked." | $tee
                                 echo -e "    Data2SD Flag File is Set." | $tee
                                 echo -e "    EXT Partition: NOT Mounted." | $tee
                                 echo -e "[!] Executing Command: a2sd nodata" | $tee
                                 $spcmd a2sd.repair.reboot 1
                                 $a2sdshell /system/bin/starta2sd nodatareset
                                 reboot=1
                             fi;
                         fi;
                       else
                         if [ $fldata == 0 ];
                           then
                             echo -e "[X] Program Data is NOT Symbolically Linked." | $tee
                             echo -e "    Data2SD Flag File is Set." | $tee
                             echo -e "[!] Executing Command: a2sd datasd" | $tee
                             $spcmd a2sd.repair.reboot 1
                             $a2sdshell /system/bin/starta2sd datasd
                             reboot=1
                         fi;
                    fi;
                    if [ $reboot == 1 ];
                      then
                        echo "[ ] Setting Reset Cache Flag..." | $tee
                        echo "x" > /data/.resetcache
                        if [ $a2sdmnt == 0 ];
                          then
                            echo -e "[ ] Unmounting $a2sdblk..." | $tee
                            $bbumount $a2sdblk | $tee
                        fi;
                        echo -e "[ ] Rebooting phone..." | $tee
                        $bbsync | $tee
                        $bbreboot | $tee
                    fi;
                    ;;
       "sysinfo")
                    echo -e "System Information for `$gpcmd ro.serialno` started on `$bbcmd date`" | $tee
                    echo -e "" | $tee 
                    echo -e "[-] Kernel Information:" | $tee
                    $bbcat /proc/version | $tee
                    echo -e "" | $tee
                    echo -e "[-] CPU Information:" | $tee
                    $bbcat /proc/cpuinfo | $tee
                    echo -e "" | $tee
                    echo -e "[-] Memory:" | $tee
                    $bbcat /proc/meminfo | $tee
                    echo -e "" | $tee
                    echo -e "[-] Mounted Partition:" | $tee
                    $bbcat /proc/mounts | $tee
                    echo -e "" | $tee
                    echo -e "[-] Valid Partitions:" | $tee
                    $bbcat /proc/filesystems | $tee
                    echo -e "" | $tee
                    echo -e "[-] Swap Information:" | $tee
                    $bbcat /proc/swaps | $tee
                    echo -e "" | $tee
                    echo -e "[-] Partition Information:" | $tee
                    $bbcmd df -h | $tee
                    echo -e "" | $tee
                    echo -e "[-] MTD Information:" | $tee
                    $bbcat /proc/mtd | $tee
                    echo -e "" | $tee
                    echo -e "[-] Phone Information:
                    echo -e "[ ] Phone Serial #: `$gpcmd ro.serialno`" | $tee
                    echo -e "[ ] Bootloader Version: `$gpcmd ro.bootloader`" | $tee
                    echo -e "[ ] Radio Baseband: `$gpcmd ro.baseband`" | $tee
                    echo -e "[ ] Hardware ID: `$gpcmd ro.hardware`" | $tee
                    echo -e "[ ] Product Model: `$gpcmd ro.product.model`" | $tee
                    echo -e "[ ] Product Brand: `$gpcmd ro.product.name`" | $tee
                    echo -e "[ ] Product Device: `$gpcmd ro.product.device`" | $tee
                    echo -e "[ ] Product Board: `$gpcmd ro.product.board`" | $tee
                    echo -e "[ ] Rom: `$gpcmd ro.build.description`" | $tee
                    echo -e "[ ] Base Rom Version: `$gpcmd ro.product.version`" | $tee
                    echo -e "" | $tee
                    echo -e "[-] Darktremor Program Information:" | $tee
                    echo -e "[ ] Darktremor Apps2SD version: $a2sdver ($a2sdverdate}" | $tee
                    echo -e "" | $tee
                    echo -e "[-] Property Dump:" | $tee
                    $gpcmd | $tee
                    echo -e "" | $tee
                    echo -e "[-] Boot Initialization File [INIT.RC]" | $tee
                    $bbcat /init.rc | $tee
                    echo -e "" | $tee
                    echo -e "[-] Directory Listing: /data" | $tee
                    $bbcmd ls -la /data | $tee
                    echo -e "" | $tee
                    echo -e "[-] Directory Listing: /system" | $tee
                    $bbcmd ls -la /system | $tee
                    echo -e "" | $tee
                    echo -e "[-] Directory Listing: /system/bin" | $tee
                    $bbcmd ls -la /system/bin | $tee
                    echo -e "" | $tee
                    echo -e "[-] Directory Listing: /system/etc/init.d" | $tee
                    $bbcmd ls -la /system/etc/init.d | $tee
                    echo -e "" | $tee
                    echo -e "[-] Directory Listing: /cache" | $tee
                    $bbcmd ls -la /cache | $tee
                    echo -e "" | $tee
                    echo -e "[-] Directory Listing: $mntpoint" | $tee
                    $bbcmd ls -la $mntpoint | $tee
                    echo -e "" | $tee
                    ;;
    "reswap")
                    export a2sdswap=0;
                    $spcmd a2sd.swappart "none"
                    for (( x=0; x<10; x++ )); do
                      if [ -e /dev/block/mmcblk$x ];
                        then
                          export a2sdswap=`$bbcmd fdisk -l /dev/block/mmcblk$x | $bbcmd awk '/^\// && $5 == 82 {print $1;exit;}'`
                          if [ ! $a2sdswap ];
                            then
                              echo -e "[X] No swap partitions found on /dev/block/mmcblk$x" | $tee
                            else
                              echo -e "[ ] Swap partition found at $a2sdswap." | $tee
                              echo -e "[ ] Activating Swap: $a2sdswap." | $tee
                              export a2sdswapret=`$bbcmd swapon $a2sdswap;echo $?;`;
                              if [ $a2sdswapret == 0 ];
                                then
                                  $bbrm /data/.noswap
                                  if [ -e /data/dtswap ];
                                    then
                                      echo -e "[ ] Executing Swappiness Program" | $tee
                                      $a2sdshell /data/dtswap;
                                  fi;
                                  echo -e "[ ] Swap On command returned code: $a2sdswapret" | $tee
                                  echo -e "[ ] Setting swap variables to 1" | $tee
                                  $spcmd a2sd.swap 1
                                  $spcmd a2sd.swappart $a2sdswap
                                  export a2sdswap=1
                                  x=10
                                else
                                  echo -e "[X] Swap On command failed: $a2sdswapret" | $tee
                                  echo "x" > /data/.noswap
                              fi;
                          fi;
                      fi;
                    done;
                    ;;
	"noswap")   
                    export a2sdswap=0;
                    $spcmd a2sd.swappart "none"
                    for (( x=0; x<10; x++ )); do
                      if [ -e /dev/block/mmcblk$x ];
                        then
                          export a2sdswap=`$bbcmd fdisk -l /dev/block/mmcblk$x | $bbcmd awk '/^\// && $5 == 82 {print $1;exit;}'`
                          if [ ! $a2sdswap ];
                            then
                              echo -e "[X] No swap partitions found on /dev/block/mmcblk$x" | $tee
                            else
                              echo -e "[ ] Swap partition found at $a2sdswap." | $tee
                              echo -e "[ ] Deactivating Swap: $a2sdswap." | $tee
                              export a2sdswapret=`$bbcmd swapoff $a2sdswap;echo $?;`;
                              if [ $a2sdswapret == 0 ];
                                then
                                  echo -e "[ ] Swap Off command returned code: $a2sdswapret" | $tee
                                  echo -e "[ ] Setting swap variables to 0" | $tee
                                  $spcmd a2sd.swap 0
                                  $spcmd a2sd.swappart $a2sdswap
                                  export a2sdswap=0
                                  x=10
                                  echo "x" > /data/.noa2sd
                                else
                                  echo -e "[X] Swap Off command failed: $a2sdswapret" | $tee
                              fi;
                          fi;
                      fi;       
                    done;
                    ;;
        "swapspace")
                    export a2sdswap=`$gpcmd a2sd.swap`;
                    if [ $a2sdswap == 0 ];
                      then
                        echo -e "[X] No swap partition active." | $tee
                      else
                        echo -e "[ ] Swap Space Information:" | $tee
                        echo -e "[ ] `$bbcat /proc/meminfo | $bbgrep -e SwapTotal:`" | $tee
                        echo -e "[ ] `$bbcat /proc/meminfo | $bbgrep -e SwapFree:`" | $tee
                    fi;
                    ;;
        *"install")  
                    if [ $a2sdmnt == 1 ];
                      then
                        echo -e "[X] SD Card not mounted." | $tee
                        echo -e "    Cannot reinstall applications to SD card." | $tee
                        exit;
                      else
                        if [ ! -d $mntpoint/app ];
                          then
                            echo -e "[ ] Creating applications directory on $mntpoint" | $tee
                            $bbmkdir $mntpoint/app | $tee
                            $bbchmod $mntpoint/app | $tee
                       fi;
                       if [ ! -d $mntpoint/app-private ];
                         then
                           echo -e "[ ] Creating private apps directory on $mntpoint" | $tee
                           $bbmkdir $mntpoint/app-private | $tee
                           $bbchmod $mntpoint/app-private | $tee
                       fi;
                       echo -e "[ ] Moving applications to SD card" | $tee
                       $bbmv -f /data/app/* $mntpoint/app | $tee
                       echo -e "[ ] Moving private apps to SD card" | $tee
                       $bbmv -f /data/app-private/* $mntpoint/app-private | $tee
                       echo -e "[ ] Creating Symbolic Links" | $tee
                       $bbrm -rf /data/app | $tee
                       $bbrm -rf /data/app-private | $tee
                       $bbln $mntpoint/app /data/app | $tee
                       $bbln $mntpoint/app-private /data/app-private | $tee
                       echo -e "[ ] Removing No Apps2SD Flag" | $tee
                       $bbrm -f /data/.noa2sd;
                       echo -e "[ ] Running Set Permissions..." | $tee
                       /system/bin/fix_permissions
                       repair=`$gpcmd a2sd.repair.reboot`
                       if [ $repair == 0 ];
                         then
                           if [ $a2sdmnt == 0 ];
                             then
                               echo -e "[ ] Unmounting $a2sdblk..." | $tee
                               $bbumount $a2sdblk | $tee
                           fi;
                           echo -e "[ ] Rebooting phone..." | $tee
                           $bbsync | $tee
                           $bbreboot | $tee
                       fi;
                       exit;
                   fi;
                   ;;
        "remove")   
                   if [ $a2sdmnt == 1 ];
                     then
                       echo -e "[X] SD Card not mounted" | $tee
                       echo -e "    Applications directories will reset" | $tee
                       echo -e "    Applications will be lost." | $tee
                       echo -e "[ ] Removing Symbolic Links." | $tee
                       $bbrm -f /data/app | $tee
                       $bbrm -f /data/app-private | $tee
                       echo -e "[ ] Creating Application Directories." | $tee
                       $bbmkdir /data/app | $tee
                       $bbmkdir /data/app-private | $tee
                       $bbchmod /data/app | $tee
                       $bbchmod /data/app-private | $tee
                       echo -e "[ ] Activating No Apps2SD Flag" | $tee
                       echo "x" > /data/.noa2sd;
                       echo -e "[ ] Running Fix Permissions..." | $tee
                       /system/bin/fix_permissions
                       if [ $a2sdmnt == 0 ];
                         then
                           echo -e "[ ] Unmounting $a2sdblk..." | $tee
                           $bbumount $a2sdblk | $tee
                       fi;
                       echo -e "[ ] Rebooting phone..." | $tee
                       $bbsync | $tee
                       $bbreboot | $tee
                       exit;
                     else
                       echo -e "[ ] Removing Symbolic Links." | $tee
                       $bbrm -f /data/app | $tee
                       $bbrm -f /data/app-private | $tee
                       echo -e "[ ] Creating Application Directories." | $tee
                       $bbmkdir /data/app | $tee
                       $bbmkdir /data/app-private | $tee
                       $bbchmod /data/app | $tee
                       $bbchmod /data/app-private | $tee
                       echo -e "[ ] Moving Applications." | $tee
                       $bbmv -f $mntpoint/app/* /data/app | $tee
                       $bbmv -f $mntpoint/app-private/* /data/app-private | $tee
                       echo -e "[ ] Activating No Apps2SD Flag" | $tee
                       echo "x" > /data/.noa2sd
                       repair=`$gpcmd a2sd.repair.reboot`
                       if [ $repair == 0 ];
                         then
                           if [ $a2sdmnt == 0 ];
                             then
                               echo -e "[ ] Unmounting $a2sdblk..." | $tee
                               $bbumount $a2sdblk | $tee
                           fi;
                           echo -e "[ ] Rebooting phone..." | $tee
                           $bbsync | $tee
                           $bbreboot | $tee
                       fi;
                       exit;
                   fi;
                   ;;

        "nocache"*)
                    dcdest="/data/dalvik-cache"
                    if [ -e /data/.dalvikcache ];
                      then
                        if [ $a2sdmnt == 1 ];
                          then
                            echo -e "[X] EXT partition is not mounted." | $tee
                            echo -e "    Dalvik-cache will be relocated to $dcdest" | $tee
                            echo -e "    but contents will not be moved." | $tee
                            dcmove=0
                          else
                            dcmove=1
                        fi;
                        dcsrc="$mntpoint/dalvik-cache"
                    fi;
                    if [ -e /data/.dcpartition ];
                      then
                        if [ $a2sdcmnt == 0 ];
                          then
                            cachemnt=1
                          else
                            cachemnt=0
                            dcmove=1
                        fi;
                        dcsrc="$dcpath"
                      else
                        cachemnt=0
                    fi;
                    if [ $cachemnt == 1 ];
                      then
                         echo -e "[ ] Attempting to unmount cache..." | $tee
                         $bbunmount -l /data/dalvik-cache | $tee
                         a2sdcmnt=`$bbgrep -q -e /data/dalvik-cache /proc/mounts;echo $?`
                         if [ $a2sdcmnt == 1 ];
                           then
                             echo -e "[ ] Unmount successful." | $tee
                             dcmove=1
                           else
                             echo -e "[X] Unmount failed." | $tee
                             echo -e "    Dalvik-cache will be relocated to $mntpoint/dalvik-cache" | $tee
                             echo -e "    but contents will not be moved." | $tee
                             dcmove=0
                         fi;
                    fi;
                    if [ $a2sdcmd == "nocachereset" ];
                      then
                         dcmove=0
                    fi;
                    if [ -h $dcdest ];
                      then
                        echo -e "[ ] Removing symbolic link..." | $tee
                        $bbrm -rf $dcdest
                        $bbmkdir $dcdest
                        $bbchmod $dcdest
                      else
                        echo -e "[ ] Erasing contents of $dcdest..." | $tee
                        $bbrm -rf $dcdest/* | $tee
                    fi;
                    if [ $dcmove == 1 ];
                      then
                        echo -e "[ ] Moving $dcsrc to $dcdest" | $tee
                        $bbmv -f $dcsrc/* $dcdest | $tee
                    fi;
                    if [ -e /data/.dalvikcache ];
                      then
                        $bbrm /data/.dalvikcache | $tee
                    fi;
                    if [ -e /data/.dcpartition ];
                      then
                        $bbrm /data/.dcpartition | $tee
                    fi;
                       repair=`$gpcmd a2sd.repair.reboot`
                       if [ $repair == 0 ];
                         then
                           if [ $a2sdmnt == 0 ];
                             then
                               echo -e "[ ] Unmounting $a2sdblk..." | $tee
                               $bbumount $a2sdblk | $tee
                           fi;
                           echo -e "[ ] Rebooting phone..." | $tee
                           $bbsync | $tee
                           $bbreboot | $tee
                       fi;
                    ;;
        "cachepart"*)
                    dcdest="$dcpath"
                    if [ -e /data/.dalvikcache ];
                      then
                        dcsrc="$mntpont/dalvik-cache"
                        if [ $a2sdmnt == 1 ];
                          then
                            echo -e "[X] EXT partition is not mounted." | $tee
                            echo -e "    Dalvik-cache will be relocated to $dcdest" | $tee
                            dcmove=0
                          else
                            dcmove=1
                        fi;
                      else
                        dcsrc="/data/dalvik-cache"
                        dcmove=1
                    fi;
                    if [ $a2sdcmd == "cachepartreset" ];
                      then
                        dcmove=0
                    fi;
                    if [ ! -d $dcdest ];
                      then
                        echo -e "[ ] Creating $dcdest..." | $tee
                        $bbmkdir $dcdest | $tee
                        $bbchmod $dcdest | $tee
                      else
                         echo -e "[ ] Erasing contents of $dcdest..." | $tee
                         $bbrm -rf $dcdest/* | $tee
                    fi;
                    if [ $dcmove == 1 ];
                      then
                         echo -e "[ ] Moving $dcsrc to $dcdest" | $tee
                         $bbmv -f $dcsrc/* $dcdest/ | $tee
                    fi;
                    if [ -h /data/dalvik-cache ];
                      then
                        echo "[ ] Removing symbolic link to /data/dalvik-cache..." | $tee
                        $bbrm -rf /data/dalvik-cache | $tee
                        $bbmkdir /data/dalvik-cache | $tee
                        $bbchmod /data/dalvik-cache | $tee
                    fi;
                    if [ -e /data/.dalvikcache ];
                      then
                        $bbrm /data/.dalvikcache
                    fi;
                    echo -e "x" > /data/.dcpartition
                       repair=`$gpcmd a2sd.repair.reboot`
                       if [ $repair == 0 ];
                         then
                           if [ $a2sdmnt == 0 ];
                             then
                               echo -e "[ ] Unmounting $a2sdblk..." | $tee
                               $bbumount $a2sdblk | $tee
                           fi;
                           echo -e "[ ] Rebooting phone..." | $tee
                           $bbsync | $tee
                           $bbreboot | $tee
                       fi;
                    ;;
        "cachesd"*)
                    if [ $a2sdmnt == 1 ];
                      then
                        echo -e "[X] EXT partition is not mounted.  Cannot continue." | $tee
                      else
                        echo -e "[ ] Determining current dalvik-cache location..." | $tee
                        dcdest="$mntpoint/dalvik-cache"
                        if [ -e /data/.dcpartition ];
                          then
                            dcsrc="$dcpath/"
                            if [ $a2sdcmnt == 0 ];
                              then
                                cachemnt=1
                              else
                                cachemnt=0
                            fi;
                          else
                            dcsrc="/data/dalvik-cache/"
                            cachemnt=0
                        fi;
                        if [ $cachemnt == 1 ];
                          then
                            echo -e "[ ] Attempting to unmount cache..."
                            $bbumount -l /data/dalvik-cache | $tee
                            a2sdcmnt=`$bbgrep -q -e /data/dalvik-cache /proc/mounts;echo $?`
                            if [ $a2sdcmnt == 1 ];
                              then
                                echo -e "[ ] Unmount successful."
                                dcmove=1
                              else
                                echo -e "[X] Unmount failed." | $tee
                                echo -e "    Dalvik-cache will be relocated to $dcdest" | $tee
                                echo -e "    but contents will not be moved." | $tee
                                dcmove=0
                            fi;
                          else
                            dcmove=1
                        fi;    
                        if [ $a2sdcmd == "cachesdreset" ];
                          then
                            dcmove=0
                        fi;
                        if [ ! -d $dcdest ];
                          then
                            echo -e "[ ] Creating $dcdest..." | $tee
                            $bbmkdir $dcdest | $tee
                            $bbchmod $dcdest | $tee
                          else
                            echo -e "[ ] Erasing contents of $dcdest..." | $tee
                            $bbrm -rf $dcdest/* | $tee
                        fi;
                        if [ $dcmove == 1 ];
                          then
                            echo -e "[ ] Moving $dcsrc to $dcdest" | $tee
                            $bbmv -f $dcsrc/* $dcdest/ | $tee
                        fi;
                        echo -e "[ ] Creating symbolic link to $dcdest..." | $tee
                        $bbrm -rf /data/dalvik-cache | $tee
                        $bbln $dcdest /data/dalvik-cache | $tee
                        if [ -e /data/.dcpartition ];
                          then
                            $bbrm /data/.dcpartition | $tee
                        fi;
                        echo -e "x" > /data/.dalvikcache
                       repair=`$gpcmd a2sd.repair.reboot`
                       if [ $repair == 0 ];
                         then
                           if [ $a2sdmnt == 0 ];
                             then
                               echo -e "[ ] Unmounting $a2sdblk..." | $tee
                               $bbumount $a2sdblk | $tee
                           fi;
                           echo -e "[ ] Rebooting phone..." | $tee
                           $bbsync | $tee
                           $bbreboot | $tee
                       fi;
                     fi;
                     ;;
        "resetcache")
                    echo -e "[ ] Resetting Dalvik-Cache" | $tee
                    cd /data/dalvik-cache;
                    $bbrm -f *;
                    echo -e "[ ] Directory listing: /data/dalvik-cache" >> $a2sdlf
                    $bbcmd ls -l /data/dalvik-cache >> $a2sdlf
                    echo -e "[ ] Rebooting phone" | $tee
                    if [ $a2sdmnt == 0 ];
                      then
                        $bbumount -l $mntpoint | $tee
                    fi;
                    if [ $a2sdmnt == 0 ];
                      then
                        echo -e "[ ] Unmounting EXT filesystem..." | $tee
                        $bbumount $a2sdblk | $tee
                    fi;
                    $bbsync | $tee
                    $bbreboot | $tee
                    echo -e "[ ] Ending program: starta2sd" >> $a2sdlf
                    exit;
                    ;;
        "diskspace")
                    echo -e "[ ] Displaying Disk Space statistics on SD card" | $tee
                    $bbcmd df -h /dev/block/mmcblk0p2 | $tee
                    ;;
        "align")    
                    echo -e "[ ] Zipaligning all .apk files in /data/app" | $tee
                    for apk in /data/app/*.apk ; do
                      /system/bin/zipalign -c 4 $apk | $tee
                      if [ $? == 1 ];
                        then
                          echo -e "[ ] ZipAligning $(basename $apk)" | $tee
                          /system/bin/zipalign -f 4 $apk /cache/$(basename $apk) | $tee
                          if [ -e /cache/$(basename $apk) ];
                            then
                              $bbcp -fp /cache/$(basename $apk) $apk;
                              $bbrm /cache/$(basename $apk);
                              echo -e "[*] ZipAligning $(basename $apk) complete." | $tee
                            else
                              echo -e "[X] ZipAligning $(basename $apk) failed." | $tee
                          fi;
                        else
                          echo -e "[!] ZipAlign already completed on $apk" | $tee
                      fi;
                    done;
                    echo -e "[ ] Zipaligning all .apk files in /data/app-private" | $tee
                    for apk in /data/app-private/*.apk ; do
                      /system/bin/zipalign -c 4 $apk | $tee
                      if [ $? == 1 ];
                        then
                          echo -e "[ ] ZipAligning $(basename $apk)" | $tee
                          /system/bin/zipalign -f 4 $apk /cache/$(basename $apk) | $tee
                          if [ -e /cache/$(basename $apk) ];
                            then
                              $bbcp -fp /cache/$(basename $apk) $apk;
                              $bbrm /cache/$(basename $apk);
                              echo -e "[*] ZipAligning $(basename $apk) complete." | $tee
                            else
                              echo -e "[X] ZipAligning $(basename $apk) failed." | $tee
                          fi;
                        else
                          echo -e "[!] ZipAlign already completed on $apk" | $tee
                      fi;
                    done;
                    ;;
        "nozipalign")
                    echo -e "[ ] Removing ZipAlign flag file." | $tee
                    $bbrm /data/.zipalign;
                    ;;
        "zipalign")
                    echo -e "[ ] Creating ZipAlign flag file." | $tee
                    echo -e "x" > /data/.zipalign;
                    ;;
        "heapsize"*)
                    export a2sdheapsize=${a2sdcmd:8:2}
                    if [ $a2sdheapsize == 0 ];
                      then
                        echo -e "[ ] Removing Dalvik Heap Size File" | $tee
                        $bbrm -f /data/dalvikheap | $tee
                        if [ $a2sdmnt == 0 ];
                          then
                            echo -e "[ ] Unmounting EXT filesystem..." | $tee
                            $bbumount $a2sdblk | $tee
                        fi;
                        echo -e "[ ] Rebooting phone..." | $tee
                        $bbsync | $tee
                        $bbreboot | $tee
                        exit;
                      else
                        echo -e "[ ] Setting Dalvik Cache to ${a2sdheapsize}MB" | $tee
                        echo "#!$a2sdshell" > /data/dalvikheap | $tee
                        echo "# Darktremor Apps2SD Dalvik Heap Size Settings" >> /data/dalvikheap | $tee
                        echo "# Created: `$bbcmd date`" >> /data/dalvikheap | $tee
                        echo "echo '[ ] Setting Dalvik Heap Size to $a2sdheapsize MB'" >> /data/dalvikheap | $tee
                        echo "$spcmd dalvik.vm.heapsize ${a2sdheapsize}m" >> /data/dalvikheap | $tee
                        $bbchmod /data/dalvikheap | $tee
                        echo -e "[ ] Rebooting phone" | $tee
                        if [ $a2sdmnt == 0 ];
                          then
                            echo -e "[ ] Unmounting $a2sdblk..." | $tee
                            $bbumount $a2sdblk | $tee
                        fi;
                        echo -e "[ ] Rebooting phone..." | $tee
                        $bbsync | $tee
                        $bbreboot | $tee
                        exit
                    fi;
                    ;;    
        "lowmem-moderate")
                    echo -e "[ ] Setting Internal Memkiller to Moderate:" | $tee
                    echo -e "    Foreground App:     1536"
                    echo -e "    Visible App:        3072"
                    echo -e "    Secondary Server:   4096"
                    echo -e "    Hidden App:         7680"
                    echo -e "    Content Provider:   8960"
                    echo -e "    Empty App:         10240"
                    echo -e "1536,3072,4096,7680,8960,10240" > /sys/module/lowmemorykiller/parameters/minfree
                    $bbcat /sys/module/lowmemorykiller/parameters/minfree >> $a2sdlf
                    echo -e "[ ] Creating Low Memory Launch File" | $tee
                    echo "#!/system/bin/sh" > /data/dtset_lowmem
                    echo "echo \"[ ] Setting Low Memory Killer parameters...\"" >> /data/dtset_lowmem
                    echo "echo \"1536,3072,4096,7680,8960,10240\" \> /sys/module/lowmemorykiller/parameters/minfree" >> /data/dtset_lowmem
                    echo "echo \"[ ] Low memory killer settings are set to:\"" >> /data/dtset_lowmem
                    $bbchmod /data/dtset_lowmem
                    echo "busybox cat /sys/module/lowmemorykiller/parameters/minfree"
                   ;;
        "lowmem-optimum")
                    echo -e "[ ] Setting Internal Memkiller to Optimum:" | $tee
                    echo -e "    Foreground App:     1536"
                    echo -e "    Visible App:        2048"
                    echo -e "    Secondary Server:   4096"
                    echo -e "    Hidden App:        10240"
                    echo -e "    Content Provider:  12800"
                    echo -e "    Empty App:         15360"
                    echo -e "1536,2048,4096,10240,12800,15360" > /sys/module/lowmemorykiller/parameters/minfree
                    $bbcat /sys/module/lowmemorykiller/parameters/minfree >> $a2sdlf
                    echo -e "[ ] Creating Low Memory Launch File" | $tee
                    echo "#!/system/bin/sh" > /data/dtset_lowmem
                    echo "echo \"[ ] Setting Low Memory Killer parameters...\"" >> /data/dtset_lowmem
                    echo "echo \"1536,3072,4096,10240,12800,15360\" \> /sys/module/lowmemorykiller/parameters/minfree" >> /data/dtset_lowmem
                    echo "echo \"[ ] Low memory killer settings are set to:\"" >> /data/dtset_lowmem
                    $bbchmod /data/dtset_lowmem
                    echo "busybox cat /sys/module/lowmemorykiller/parameters/minfree"
                   ;;
        "lowmem-strict")
                    echo -e "[ ] Setting Internal Memkiller to Strict:" | $tee
                    echo -e "    Foreground App:     1536"
                    echo -e "    Visible App:        2048"
                    echo -e "    Secondary Server:   4096"
                    echo -e "    Hidden App:        15360"
                    echo -e "    Content Provider:  17920"
                    echo -e "    Empty App:         20480"
                    echo -e "1536,2048,4096,15360,17920,20480" > /sys/module/lowmemorykiller/parameters/minfree
                    $bbcat /sys/module/lowmemorykiller/parameters/minfree >> $a2sdlf
                    echo -e "[ ] Creating Low Memory Launch File" | $tee
                    echo "#!/system/bin/sh" > /data/dtset_lowmem
                    echo "echo \"[ ] Setting Low Memory Killer parameters...\"" >> /data/dtset_lowmem
                    echo "echo \"1536,3072,4096,15360,17920,20480\" \> /sys/module/lowmemorykiller/parameters/minfree" >> /data/dtset_lowmem
                    echo "echo \"[ ] Low memory killer settings are set to:\"" >> /data/dtset_lowmem
                    $bbchmod /data/dtset_lowmem
                    echo "busybox cat /sys/module/lowmemorykiller/parameters/minfree"
                   ;;
        "lowmem-aggressive")
                    echo -e "[ ] Setting Internal Memkiller to Aggressive:" | $tee
                    echo -e "    Foreground App:     1536"
                    echo -e "    Visible App:        3072"
                    echo -e "    Secondary Server:   4096"
                    echo -e "    Hidden App:        21000"
                    echo -e "    Content Provider:  23000"
                    echo -e "    Empty App:         25000"
                    echo -e "1536,3072,4096,21000,23000,25000" > /sys/module/lowmemorykiller/parameters/minfree
                    $bbcat /sys/module/lowmemorykiller/parameters/minfree >> $a2sdlf
                    echo -e "[ ] Creating Low Memory Launch File" | $tee
                    echo "#!/system/bin/sh" > /data/dtset_lowmem
                    echo "echo \"[ ] Setting Low Memory Killer parameters...\"" >> /data/dtset_lowmem
                    echo "echo \"1536,3072,4096,21000,23000,25000\" \> /sys/module/lowmemorykiller/parameters/minfree" >> /data/dtset_lowmem
                    echo "echo \"[ ] Low memory killer settings are set to:\"" >> /data/dtset_lowmem
                    $bbchmod /data/dtset_lowmem
                    echo "busybox cat /sys/module/lowmemorykiller/parameters/minfree"
                   ;;
        "lowmem-extreme")
                    echo -e "[ ] Setting Internal Memkiller to Extreme:" | $tee
                    echo -e "    Foreground App:     1536"
                    echo -e "    Visible App:        3072"
                    echo -e "    Secondary Server:   4096"
                    echo -e "    Hidden App:        38400"
                    echo -e "    Content Provider:  40960"
                    echo -e "    Empty App:         43520"
                    echo -e "1536,3072,4096,38400,40960,43520" > /sys/module/lowmemorykiller/parameters/minfree
                    $bbcat /sys/module/lowmemorykiller/parameters/minfree >> $a2sdlf
                    echo -e "[ ] Creating Low Memory Launch File" | $tee
                    echo "#!/system/bin/sh" > /data/dtset_lowmem
                    echo "echo \"[ ] Setting Low Memory Killer parameters...\"" >> /data/dtset_lowmem
                    echo "echo \"1536,3072,4096,38400,40960,43520\" \> /sys/module/lowmemorykiller/parameters/minfree" >> /data/dtset_lowmem
                    echo "echo \"[ ] Low memory killer settings are set to:\"" >> /data/dtset_lowmem
                    $bbchmod /data/dtset_lowmem
                    echo "busybox cat /sys/module/lowmemorykiller/parameters/minfree"
                   ;;
        "lowmem-ultimate")
                    echo -e "[ ] Setting Internal Memkiller to Ultimate:" | $tee
                    echo -e "    Foreground App:     1536"
                    echo -e "    Visible App:        3072"
                    echo -e "    Secondary Server:   4096"
                    echo -e "    Hidden App:        51200"
                    echo -e "    Content Provider:  57600"
                    echo -e "    Empty App:         64000"
                    echo -e "1536,3072,4096,51200,57600,64000" > /sys/module/lowmemorykiller/parameters/minfree
                    $bbcat /sys/module/lowmemorykiller/parameters/minfree >> $a2sdlf
                    echo -e "[ ] Creating Low Memory Launch File" | $tee
                    echo "#!/system/bin/sh" > /data/dtset_lowmem
                    echo "echo \"[ ] Setting Low Memory Killer parameters...\"" >> /data/dtset_lowmem
                    echo "echo \"1536,3072,4096,51200,57600,64000\" \> /sys/module/lowmemorykiller/parameters/minfree" >> /data/dtset_lowmem
                    echo "echo \"[ ] Low memory killer settings are set to:\"" >> /data/dtset_lowmem
                    $bbchmod /data/dtset_lowmem
                    echo "busybox cat /sys/module/lowmemorykiller/parameters/minfree"
                   ;;
        "lowmem-default")
                   echo -e "[ ] Setting Internal Memkiller to Default:" | $tee
                   /system/bin/bash /data/.lmdefault
                   echo -e "[ ] Removing Low Memory Launch File..." | $tee
                   $bbrm -e 
                   ;;
        "swappy"*)
                  if [ $a2sdcmd != "swappy" ];
                    then
                      export a2sdswapval=${a2sdcmd:6:2};
                      echo "#!/system/xbin/busybox ash" > /data/dtswap
                      echo "echo [ ] Setting Swappiness to $a2sdswapval" >> /data/dtswap
                      echo -e "echo $a2sdswapval > /proc/sys/vm/swappiness;" >> /data/dtswap
                      echo -e "[ ] Setting Swappiness to $a2sdswapval"
                      echo 10 > /proc/sys/vm/swappiness
                      $bbchmod /data/dtswap
                    else
                      echo -e "[X] You must supply a value with the statement." | $tee
                      echo -e "    Ex: To set swappiness to 30%, type: " | $tee
                      echo -e "        a2sd swappy30" | $tee
                  fi; 
                  ;;
        "convert-ext3")
                  ext3part=`$gpcmd a2sd.ext3`
                  if [ $ext3part == 0 ];
                    then
                      if [ $a2sdmnt == 0 ];
                        then
                          echo -e "[ ] Creating Conversion Flag File..." | $tee
                          echo "X" > /data/.convertext3
                          echo -e "[ ] Unmounting $a2sdblk..." | $tee
                          $bbumount $a2sdblk | $tee
                          echo -e "[ ] Rebooting phone..." | $tee
                          $bbsync | $tee
                          $bbreboot | $tee
                        else
                          echo -e "[X] No EXT partition mounted.  Cannot continue." | $tee
                      fi;
                    else
                      echo -e "[X] Kernel does not support EXT3 partition." | $tee
                      echo -e "[ ] Kernel supports the following filesystems: " | $tee
                      $bbcat /proc/filesystems | $tee
                  fi;
                  ;;
        "convert-ext4")
                  ext4part=`$gpcmd a2sd.ext4`
                  if [ $ext4part == 0 ];
                    then
                      if [ $a2sdmnt == 0 ];
                        then
                          echo -e "[ ] Creating Conversion Flag File..." | $tee
                          echo "X" > /data/.convertext4
                          echo -e "[ ] Unmounting $a2sdblk..." | $tee
                          $bbumount $a2sdblk | $tee
                          echo -e "[ ] Rebooting phone..." | $tee
                          $bbsync | $tee
                          $bbreboot | $tee
                        else
                          echo -e "[X] No EXT partition mounted.  Cannot continue." | $tee
                      fi;
                    else
                      echo -e "[X] Kernel does not support EXT3 partition." | $tee
                      echo -e "[ ] Kernel supports the following filesystems: " | $tee
                      $bbcat /proc/filesystems | $tee
                  fi;
                  ;;
        "forcecheck")
                  echo -e "[ ] Creating Force Check Flag File..." | $tee
                  echo "x" > /data/.forcecheck
                  if [ $a2sdmnt == 0 ];
                    then
                      echo -e "[ ] Unmounting $a2sdblk..." | $tee
                      $bbumount $a2sdblk | $tee
                  fi;
                  echo -e "[ ] Rebooting phone..." | $tee
                  $bbsync | $tee
                  $bbreboot | $tee
                  ;;
        "usedtbusybox")
                  echo "[ ] Setting Darktremor Apps2SD to use /system/bin/busybox.a2sd" | $tee
                  echo "x" > /data/.dtbusybox
                  ;;
        "usedefaultbusybox")
                  echo "[ ] Setting Darktremor Apps2SD to use default Busybox." | $tee
                  $bbrm /data/.dtbusybox
                  ;;
        "fixapk")
                  echo "[ ] Repairing Permissions..." | $tee
                  /system/bin/fix_permissions
                  ;;
        *)        
                  echo -e "[X] Invalid command: $a2sdcmd" | $tee
                  ;;
    esac;

echo -e "[ ] Setting File System Ready property to 1." | $tee
#$spcmd cm.filesystem.ready 1;
#$spcmd dc.filesystem.ready 1;
#$spcmd oxygen.filesystem.ready 1;
echo -e "[ ] Program ending: starta2sd" >> $a2sdlf
exit
