#! /bin/bash
# 
# Setup Looking Glass(lg3d) environment on KNOPPIX.
# 
# Written by IIJIMA Kengo & Japanese KNOPPIX TEAM 2005.11.2
# Planned by Kuniyasu Suzaki.
# Contact: knoppix@m.aist.go.jp
#
# License GPL
#

check_file()
{
  local type=$1
  local str="$2"
  local target="$3"
  local file

  for f in $str
  do
    if [ $type $f ];then
      file=$f
    fi
  done
  if [ "$file" = "" ];then
    echo $target: not found
    exit 1;
  fi
  echo $target: found [$file]
  eval $target=\$file
  return;
}

if [ "$1" = "" ];then
  echo -n "Stop the Xsession and start setup for lg3d? (yes/no) "
  read line
  if [ "$line" != "yes" ];then
    echo stop.
    exit 0;
  fi
  echo change vt to 1.
  sleep 5;
  chvt -t 1
  sleep 2;
  CWD=`pwd`
  name=${0##*/}
  cd /tmp
  nohup bash -c "(/etc/init.d/xsession stop ; sleep 2 ; openvt -f -c 9 -w -s sh $CWD/$name stage2 $CWD ) < /dev/console >/dev/console" > /tmp/nohup.log 2>&1 &
  exit;
fi

if [ "$2" = "" ];then
  echo usage: $0
  exit;
fi
echo check archive.
CWD=$2
check_file -f "$CWD/NVIDIA-Linux-*.run" "NVIDIA"
check_file -f "$CWD/jdk-*linux*.bin" "jdk"
check_file -f "$CWD/lg3d-*fcs*linux*.tar.gz" "lg3d"
check_file -f "$CWD/java3d-*linux*.zip" "java3d"
check_file -f "$CWD/jai-*lib-linux*jdk.bin" "jai"

prefix=/opt
lg3d_dir=$prefix/lg3d
[ ! -d $lg3d_dir ] && mkdir -p $lg3d_dir

step_message()
{
  local str=$1
  echo
  echo -n "Setup for $str. hit [Enter] for continue,'q' for quit: "
  read line
  if [ "$line" = "" ];then
    return;
  elif [ "$line" = "q" ];then
    exit 0;
  else
    step_message $str
  fi
}

lg3d_install()
{
#chmod 755 $jdk $jai > /dev/null 2>&1

step_message jdk
( cd $lg3d_dir
  sh $jdk
)
check_file -d "$lg3d_dir/jdk*" "jdk_dir"
#echo $jdk_dir

step_message jai
( cd $jdk_dir
  sh $jai
)

step_message java3d
( cd $jdk_dir/jre
  unzip $java3d
  check_file -d "$jdk_dir/jre/java3d-*" "java3d_dir"
  check_file -f "$java3d_dir/j3d*linux-x86.zip" "j3d"
  unzip $j3d
  rm -rf $java3d_dir
)

step_message lg3d
tar xvfz $lg3d -C $prefix

cat <<EOF > /etc/init.d/lg3d
#! /bin/sh

case \$1 in
  start)
    export JAVA_HOME=$jdk_dir
    export PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/games:/usr/local/bin:\$JAVA_HOME/bin:."
    umask 022

    [ -n "\$KDEDIR" ] || KDEDIR="/usr"
    export KDEDIR

    [ -n "\$HOSTNAME" ] || HOSTNAME="\$(hostname)"
    export HOSTNAME

    [ -z "\$USER" ] && USER="\$(id -nu)"
    export USER

    [ -z "\$HOME" -o "\$HOME" = "/" ] && HOME="/home/\$USER"
    export HOME

    if [ ! -d \$HOME ];then
      mkdir -p \$HOME
      chown \$USER \$HOME
    fi
    cd \$HOME
    ( sleep 40 ; sh /etc/X11/Xsession.d/31xinput > /tmp/xinput.log 2>&1  ) &
    /opt/lg3d/bin/lg3d-session
    ;;
  *)
    echo usage: \$0 start
    ;;
esac
EOF
chmod 755 /etc/init.d/lg3d
}

cd /tmp
lg3d_install

step_message NVIDIA
#chmod 755 $NVIDIA
sh $NVIDIA
#echo $?
sed 's/^\(.*Load.*GLcore\)/#&/g;s/^\(.*Load.*dri\)/#&/g;s/\(.*Driver.*\)\(keyboard\)\(.*\)/\1kbd\3/g;s/\(.*Driver.*\"\)\(vesa\|fbdev\|nv\)\(\".*\)/\1nvidia\3/g;s/\(.*BoardName.*All.*\)/\1\n        Option      "AllowGLXWithComposite" "yes"/g;s/\(.*DefaultColorDepth \)\(.*\)/\124/g' /etc/X11/XF86Config-4 > /etc/X11/XF86Config-4.new
cp -f /etc/X11/XF86Config-4 /etc/X11/XF86Config-4.normal
mv /etc/X11/XF86Config-4.new /etc/X11/XF86Config-4
ln -s /etc/X11/XF86Config-4 /etc/X11/xorg.conf

echo -n "Start lg3d. hit [Enter] :"
read line
exec /etc/init.d/lg3d start
exit;

