#!/system/bin/sh
# Android Portable version of QEMU  (APQ) 虚拟机启动脚本
# 作者：felonwan@gmail.com
# 修改：2014年11月10日

#软件、版本、作者信息
PRJ=APQ
VER=0.3.1
AUT=felonwan


# 检查busybox
busybox 1>/dev/null 2>&1
if [ $? -ne 0 ] ; then
   export PATH=${PATH}:${BIN}
   busybox 1>/dev/null 2>&1
   if [ $? -ne 0 ]; then
	  echo "运行错误1：没有Busybox！"
	  exit 1
  fi
fi


#设置环境变量
PH=`pwd`
cd ..
PAR=`pwd`
cd ..
if [ -h $PAR ]; then
  cd ..
  SD=`ls -al $PAR | busybox awk '{print $NF}'`
else
  SD=$PAR
fi
cd ${PH}
INS=/data/${PRJ}
GRE=${SD}/${PRJ}
BINI=${INS}/bin
BING=${GRE}/bin

#用法、版本提示
if [ $# -eq 0 ] || [ $# -gt 1 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
  echo "用法举例：sh runvm xp.conf"
  echo "其中xp.conf是虚拟机配置文件。"
  exit 0
fi
if [ "$1" = "-v" ] || [ "$1" = "--version" ]; then
  echo "软件名：${PRJ}\n版本：${VER}\n作者：${AUT}"
fi


# 设置运行版本、绿色版检查sd卡可执行权限
echo "注意将${PRJ}整个目录放在SD卡根目录下！"
if [ ! -e ${BINI}/qemu-system-i386 ]; then
  echo "您目前使用的是${PRJ} ${VER}绿色版。"
  BIN=${BING}
  mount -o exec,remount ${SD}
  if [ $? -ne 0 ]; then
    echo "SD卡为FAT格式且无法设置${SD}为可执行，可能不能运行${PRJ}。"
  fi
else
  echo "您目前使用的是${PRJ} ${VER}安装版。"
  BIN=${BINI}
fi

#对绿色版设置权限
if [ "${BIN}" == "${BING}" ]; then
  chmod 0755 ${BING}/* 1>/dev/null 2>&1
  chmod 0777 ${GRE}/etc/* 1>/dev/null 2>&1
  chmod 0755 ${GRE}/lib/ld-linux-armhf.so.3 1>/dev/null 2>&1
  chmod 0755 ${GRE}/libexec/* 1>/dev/null 2>&1
fi


#读取虚拟机硬件参数
PARS=""
while read line; do
a=`echo $line | busybox sed 's/^[ ]*\t*$//;s/[ \t]*\#.*$//' `
if [ "$a" != "" ]; then
  b=`echo $a | busybox grep -E '(\-cdrom|\-fd|\-hd| \-cdrom)'`
  if [ "$b" != "" ]; then
    c=`echo $b | busybox awk '{print $1}'`  # -hdx
    d=`echo $b | busybox awk '{print $2}' | busybox sed 's/^fat:\(rw:\)*//g'`
    e=`echo $b | busybox awk '{print $2}' | busybox sed -n 's/^\(fat:\)\(floppy:\)*\(rw:\)*\(.*\)/\1\2\3/p'`
    if  [ "${d:0:1}" != "/" ];then  #relative path
       a="$c $e${PWD}/$d"
    fi
  fi
  f=`echo $a | busybox grep 'tap'`
  if [ "$f" != "" ]; then
    t=$f
    echo ""
    echo "您选择了tap网络，下面将进行一些设置。"
    echo "创建tap设备："
    echo "cd ${BIN}"
    cd ${BIN}
    echo "./creatap"
    ./creatap
    echo "设置IP地址："
    echo "./tapup"
    ./tapup
  fi
  PARS="${PARS} $a"
fi
done <$1
#echo "虚拟机参数读取完成。"

#运行虚拟机
echo ""
echo "也可以通过输入下面的命令来运行"
echo ${PARS}  | busybox grep '\-vnc' >/dev/null
if [ $? -ne 0 ]; then
  echo "export DISPLAY=:0"
  export DISPLAY=:0
fi
echo "cd ${BIN}"
cd ${BIN}
echo "./qemu-system-i386 ${PARS}"
echo ""
echo "启动qemu后，如果出现“(qemu)”标志，表明你的终端成为了qemu控制台（运行参数有“-monitor stdio”）。在qemu控制台中，可以对虚拟进行一些操作：比如保存快照、加载USB设备、调试虚拟机、关机、重启等任务，详情使用help命令及上网查询。"
echo ""
./qemu-system-i386 ${PARS}

if [ $? -eq 0 ]; then
  echo "虚拟机正常关闭。"
else
  echo "虚拟机已关闭，但是中间出现错误。"
fi
echo ""
if [ "$t" != "" ]; then
  echo "关闭并删除tap网络："
  echo "cd ${BIN}"
  cd ${BIN}
  echo "./tapdown"
  ./tapdown
  echo ""
fi