#!/bin/bash -u

# set -x

# error message function
err () {
	echo "`basename $0`: $@" 1>&2
	exit 1
}

# find the installation path for this ARB (the ARBHOME)
get_arbhome() {
    # save cwd
    pushd . >/dev/null
    # full path of this script, but may be symlinked
    me="${BASH_SOURCE[0]}"
    # while me is symlink
    while [ -h "$me" ]; do 
        # change to directory where symlink "$me" resides
        cd "$(dirname "$me")"
        # set $me to whatever $me links to
        me="$(readlink "$(basename "$me")")"
    done
    # me isn't a symlink, so the directory it resides in
    # must be the actual $ARBHOME/SH
    cd "$(dirname "$me")"
    # in $ARBHOME now
    cd ..
    echo -n "$PWD"
    # restore old cwd
    popd >/dev/null
}

# Add to the path variable named by $1 the component $2.  $3 must be
# "append" or "prepend" to indicate where the component is added.
addpath () {
    eval value=\"\$\{$1:-\}\"
    case "$value" in
	*:$2:*|*:$2|$2:*|$2)
	    result="$value"
	    ;;
	"")
	    result="$2"
	    ;;
	*)
	    case "$3" in
		p*)
		    result="$2:${value}"
		    ;;
		*)
		    result="${value}:$2"
		    ;;
	    esac
    esac
    eval $1=$result
    unset result value
}

# convenience routine which appends a string to a path.
append () {
    addpath "$1" "$2" append
}

# convenience routine which prepends a string to a path.
prepend () {
    addpath "$1" "$2" prepend
}

if [ -z ${HOME:-} ]; then
    HOME=~
fi
export HOME

if [ -z ${DISPLAY:-} ]; then
    DISPLAY=:0
fi
export DISPLAY

# get absolute path to directory where this script resides
# (avoid use of readlink as it is missing on OSX)
ARBHOME_OF_SCRIPT="$(get_arbhome)"
ARB_SH="$ARBHOME_OF_SCRIPT/SH"
ARB_SCRIPT="$ARB_SH/arb"

export ARB_SH ARB_SCRIPT ARBHOME_OF_SCRIPT

if [ -n "${ARBHOME:-}" -a "${ARBHOME:-}" != "$ARBHOME_OF_SCRIPT" ]; then
    echo "Ignoring set ARBHOME '$ARBHOME' (overridden by explicit call of '$0')"
fi

# use ARBHOME defined by location of script (comment out for old behavior)
ARBHOME=$ARBHOME_OF_SCRIPT

echo "Using ARBHOME='$ARBHOME'"

prepend PATH			$ARBHOME/bin
prepend LD_LIBRARY_PATH		$ARBHOME/lib
append  LD_LIBRARY_PATH		/usr/dt/lib
append  LD_LIBRARY_PATH		/usr/openwin/lib
append  LD_LIBRARY_PATH		$ARBHOME/lib/addlibs
prepend SHLIB_PATH		$ARBHOME/lib
append  SHLIB_PATH		$ARBHOME/lib/addlibs
append  PYTHONPATH      $ARBHOME/lib/python2.6
append  PERl5LIB        $ARBHOME/lib/perl5  

# environment variables that this shell script sets/changes:
export LD_LIBRARY_PATH MANPATH PATH ARBHOME SHLIB_PATH 
export PYTHONPATH PERL5LIB

# global envs:

export PWD HOME USER

if [ -x $ARBHOME/bin/ghostview ] ; then
  GS_LIB="$ARBHOME/DEPOT/ghostscript"
  export GS_LIB
fi

ARB_PID="$$"; export ARB_PID

if [ -z ${ARB_PROP:-} ]; then
    ARB_PROP=${HOME}/.arb_prop
fi
echo "Using properties from $ARB_PROP"
if [ ! -d ${ARB_PROP} ] ; then
  echo "Directory ${ARB_PROP} not found - creating ..."
  mkdir ${ARB_PROP}
fi
export ARB_PROP

ARB_LOCAL_PTS=${HOME}/.arb_pts
if [ ! -d ${ARB_LOCAL_PTS} ] ; then
  echo "Directory ${ARB_LOCAL_PTS} not found - creating ..."
  mkdir ${ARB_LOCAL_PTS}
fi

if [ -z ${ARBMACROHOME:-} ] ; then
  ARBMACROHOME="${ARB_PROP}/macros";
fi
if [ ! -d ${ARBMACROHOME} ] ; then
  echo "Directory $ARBMACROHOME not found - creating ..."
  mkdir ${ARBMACROHOME}
fi
export ARBMACROHOME

if [ -z ${ARBMACRO:-} ] ; then
  ARBMACRO="$ARBHOME/lib/macros"
fi
if [ ! -d ${ARBMACRO} ] ; then
  echo "Directory $ARBMACRO not found - creating ..."
  mkdir ${ARBMACRO}
fi
export ARBMACRO

# set default command-tool used by ARB
ARB_XTERM=${ARB_XTERM:-xterm -sl 1000 -sb -geometry 150x60}
export ARB_XTERM
ARB_XCMD=${ARB_XCMD:-$ARB_XTERM -e}
export ARB_XCMD

# save LD_LIBRARY_PATH
ARB_LIBRARY_PATH="${LD_LIBRARY_PATH}"
export ARB_LIBRARY_PATH

case "${1:-}" in
  help|-h|--help)
    arb_ntree --help
    echo ""
    echo ""
    echo "arb - script to start arb"
    echo "Usage:"
    echo "       arb                  # startup arb intro window"
    echo "       arb [ntargs]         # start arb with arguments"
    echo "       arb shell            # startup arb environment, but do not run arb"
    echo "       arb help             # show help"
    echo "       arb trace [ntargs]   # trace arb (to detect errors)"
    echo ""
    echo "ntargs are any argument allowed to arb_ntree (see above)"
    echo ""
    echo ""
  ;;
  shell)
    echo "Opening an ARB shell"
    if [ -n "$SHELL" ]; then
        $SHELL
    else
        bash -i
    fi
    echo "ARB shell terminates"
  ;;
  trace)
    shift
    arb_launcher $ARBHOME/SH/arb_trace "$@"
  ;;
  *)
    echo "Please wait while the program ARB is starting ....."
    arb_launcher arb_ntree "$@"
esac