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


#设置环境变量
PRJ=APQ
VER=0.3
AUT=felonwan
cd ..
SD=`pwd`
cd ${PRJ}
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} version ${VER} by ${AUT}"
fi

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


# 检查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

#读取虚拟机硬件参数
PARS=""
while read line; do
a=`echo $line | busybox sed 's/^[ ]*\t*$//;s/[ \t]*\#.*$//' `
if [ "$a" != "" ]; then
  b=`echo $a | busybox grep -E '(\-hd| \-cdrom)'`
  if [ "$b" != "" ]; then
    c=`echo $b | busybox awk '{print $1}'`  # -hdx
    d=`echo $b | busybox awk '{print $2}' | busybox sed 's/^fat://g'`
    e=`echo $b | busybox awk '{print $2}' | busybox sed -n 's/^\(fat:\)\(.*\)/\1/p'`
    if  [ "${d:0:1}" != "/" ];then  #relative path
       a="$c $e${PWD}/$d"
    fi
  fi
  f=`echo $a | busybox grep 'tap'` # for -net image argument
  if [ "$f" != "" ]; then
    echo "创建tap设备："
    echo "cd ${BIN}"
    cd ${BIN}
    echo "./creatap"
    ./creatap
  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}"
./qemu-system-i386 ${PARS}

if [ $? -eq 0 ]; then
  echo "虚拟机正常关闭。"
else
  echo "虚拟机已关闭，但是中间出现错误。"
fi
echo ""
