#!/bin/sh
# Splus version $Revision: #189 $ created $Date: 2008/10/17 $
# Copyright (c), 1987, 2006 Insightful Corp.  All rights reserved.
S_SCRIPT_SCCS_MAJOR=1
S_SCRIPT_SCCS_MINOR=77
export S_SCRIPT_SCCS_MAJOR S_SCRIPT_SCCS_MINOR
#
# This shell script starts the Spotfire S+ system and calls Spotfire S+ utilities.
#
# Set the Top Level Spotfire S+ directory
SHOME=${SHOME-/usr/local/Splus}
# Export name by which Spotfire S+ is being invoked
S_PROG_NAME=$0; export S_PROG_NAME
# Add the Spotfire S+ utilities directory to your PATH
PATH="$SHOME"/cmd:"$PATH"; export PATH
# Find a suitable default chapter to use in search pos 1 if ./.Data not ok
dirnotfound=1
for dir in "$HOME"/MySwork "$HOME"/Schapter$$
do
	S_MYSWORK="$dir"
	export S_MYSWORK
# If dir not already a chapter try to make it one
	[ -d "$S_MYSWORK"/.Data/__Meta ] || CHAPTER -m -d "$S_MYSWORK"
	if [ $? -eq 0 ]
	then
		dirnotfound=0
		break
	fi
done
if [ $dirnotfound -ne 0 ]
then
	echo "Cannot use or find default working database, set S_MYSWORK to some Spotfire S+ chapter"
	exit 1
fi
# Set default value of S_TMP
S_TMP=${S_TMP:-/tmp}
export S_TMP
# Set S_TMPDIR and make sure it refers to safe directory
. "$SHOME"/cmd/SET_S_TMPDIR
# javahelp scripts use envPropertiesFile
envPropertiesFile="$S_TMPDIR"/env.properties.$$
export envPropertiesFile
# Set the Spotfire S+ printing options for the printgraph function
S_PRINT_ORIENTATION=${S_PRINT_ORIENTATION-"landscape"}
S_PRINTGRAPH_METHOD=${S_PRINTGRAPH_METHOD-"postscript"}
S_POSTSCRIPT_PRINT_COMMAND=${S_POSTSCRIPT_PRINT_COMMAND-"lp"}
S_LASERJET_PRINT_COMMAND=${S_LASERJET_PRINT_COMMAND-"lp -dhp"}
S_LASERJET_DPI=${S_LASERJET_DPI-"100"}
S_HELP_PRINT_COMMAND=${S_HELP_PRINT_COMMAND-"lp"}
# S_SHELL used by ! escape
S_SHELL=${S_SHELL-${SHELL-"/bin/sh"}}
# S_PAGER is the default pager.
S_PAGER=${S_PAGER-${PAGER-less}}
# S_SIZEOFLONGINFILE is used on HP/Compaq/DEC Alpha to tell it how to
# interpret files without 64-bit flag set.  Setting it to 4 lets Splus
# on Alpha read files made on other platforms.  8 (or unset) lets it read old
# (Splus 6.0 and before) files made on Alpha.
# S_SIZEOFLONGINFILE=${S_SIZEOFLONGINFILE-4}
# export S_SIZEOFLONGINFILE
#
# Append our lib directory to the ld path for the dynamically
# loaded X11 client programs (e.g. motif(), data.ed(),
# and the rest) and FORTRAN-using programs.
# include jre lib on linux64, to allow loading library(spjava)
S_LIBLIST="$SHOME"/newfun/lib:"$SHOME"/java/jre/lib/amd64
# set LD_LIBRARY_PATH
    case "X$LD_LIBRARY_PATH" in
       X) LD_LIBRARY_PATH="$S_LIBLIST";;
       *) LD_LIBRARY_PATH="$S_LIBLIST:$LD_LIBRARY_PATH";;
    esac
    export LD_LIBRARY_PATH
# Location of X11 applications default files:
if [ "X$S_BYPASS_X11_ADPATH" = "X" ]
then
   if [ "X$XFILESEARCHPATH" = "X" ]
   then
      XFILESEARCHPATH="$SHOME/splus/lib/X11/app-defaults/%N:/usr/lib/X11/%T/%N"
   else XFILESEARCHPATH="$SHOME/splus/lib/X11/app-defaults/%N:$XFILESEARCHPATH"
   fi
fi
# Use this variable to set the prompt when you use "less" inside "help"
LESS=${LESS-"-PPaging with 'less' - hit 'q' to quit, <space> to continue or use 'vi' commands"}
S_WORK="${S_WORK-.Data:$S_MYSWORK}"
# Which utility should it run by default
S_DEFAULT="${S_DEFAULT-NEW}"
export S_PRINT_ORIENTATION S_PRINTGRAPH_METHOD S_HELP_PRINT_COMMAND
export S_POSTSCRIPT_PRINT_COMMAND S_LASERJET_PRINT_COMMAND S_LASERJET_DPI
export LESS PATH S_WORK S_DEFAULT SHOME
export S_SHELL S_PAGER
export XFILESEARCHPATH
CLED="$SHOME"/cmd/cled
CLEDJCTL="$SHOME"/cmd/cled_jctl
usage()
{
	echo "Usage:" >&2
	echo " $0 [-e] [utility [args...]]" >&2
	echo " $0 -j [-jit] [-e]          # Spotfire S+ Java command line" >&2
	echo " $0 -userapp path class [-jit]   # User's Java application" >&2
	echo " $0 -w|-workbench           # Spotfire S+ Workbench (Desktop version only)" >&2
	echo " $0 -bigdata                # load bigdata library, implies -j" >&2
	echo " $0 -nobigdata              # do not load bigdata library" >&2
	echo " $0 -headless               # enable headless mode" >&2
	echo " $0 -g [-jit] [-helpoff]    # [DEPRECATED] Spotfire S+ Java GUI (Desktop version only)" >&2
}
EXT_DIRS="$SHOME"/java/jre/lib/ext
S_CLASSPATH="$SHOME"/splus/lib/javahelp
if [ "X$CLASSPATH" = "X" ]
then CLASSPATH=$S_CLASSPATH
else CLASSPATH="$S_CLASSPATH":"$CLASSPATH"
fi
export CLASSPATH
#  JVM arguments to determine where to place the preferences:
#      1. java.util.prefs.systemRoot (default /etc/.java/.systemPrefs) (?)
#      2. java.util.prefs.userRoot (default System.getProperty("user.home")+ .userPrefs)
#      3. java.util.prefs.syncInterval (default value 30?  Can't recall)
#  Put them all in non-shared user-writable area.
S_JAVA_PREFS_SYSTEMROOT="$S_MYSWORK"/.java
S_JAVA_PREFS_USERROOT="$S_MYSWORK"
mkdir -p "$S_JAVA_PREFS_SYSTEMROOT"/.systemPrefs
mkdir -p "$S_JAVA_PREFS_USERROOT"/.java/.userPrefs
for file in   "$S_JAVA_PREFS_SYSTEMROOT"/.systemPrefs/.systemRootModFile   "$S_JAVA_PREFS_USERROOT/.java/.userPrefs/.userRootModFile.$USER" ; do
        [ -r "$file" ] || touch "$file"
done
S_JAVA_PREF_OPTIONS="-Djava.util.prefs.systemRoot=$S_JAVA_PREFS_SYSTEMROOT -Djava.util.prefs.userRoot=$S_JAVA_PREFS_USERROOT"
# Get JAVA_OPTIONS from environment and set options required for Spotfire S+
S_JAVA_OPTIONS="-Xss1280k -Xmx400m ${JAVA_OPTIONS}"
S_JAVA_OPTIONS="$S_JAVA_PREF_OPTIONS $S_JAVA_OPTIONS"
export S_JAVA_OPTIONS
# By default the Java just-in-time compiler is disabled
JIT_OFF='-Djava.compiler='
export JIT_OFF
if [ "$S_DEFAULT_TO_NOJIT" != "" ] ; then
        NO_JIT="$JIT_OFF"
else
        NO_JIT=
fi
	USE_XALAN="-Duse.xalan=F"
runjavacl=false
runjavagui=false
runeclipse=false
usecled=false
while [ $# -gt 0 ]
do
	case "$1" in
	-help|-h)
		usage
		exit 0
	;;
	-e)
		usecled=true
		shift
	;;
	-g)
        echo "The Spotfire S+ Java GUI is deprecated and will be removed in the next release of Spotfire S+" >&2
	if [ ! -d "$SHOME"/eclipse ]; then
		echo "Spotfire S+ Java GUI is not available on the server" >&2
		exit 1
	fi
		shift
		runjavagui=true
	;;
	-j)
		runjavacl=true
		shift
	;;
	-je)
		runjavacl=true
		usecled=true
		shift
	;;
	-ej)
		runjavacl=true
		usecled=true
		shift
	;;
	-jit)
		# enable the Java just-in-time compiler
		NO_JIT=
		shift
	;;
	-nojit)
		# no Java just-in-time compiler
		NO_JIT="$JIT_OFF"
		shift
	;;
	-helpoff)
		GUI_HELP_OFF='-Dsplus.help.off=true'
		shift
	;;
	-w|-workbench)
	if [ ! -d "$SHOME"/eclipse ]; then
		echo "Spotfire S+ Workbench is not available on the server" >&2
		exit 1
	fi
		runeclipse=true
		shift
	;;
	-headless)
		shift
		S_JAVA_OPTIONS="${S_JAVA_OPTIONS} -Djava.awt.headless=true"
		export S_JAVA_OPTIONS
	;;
	-userapp)
		if [ $# -le 2 ] ; then
			echo "Must specify user classpath and Java class" >&2
			echo " $0 -userapp path class [-jit]" >&2
			exit 1
		fi
		shift
		USERPATH="$1"; USERCLASS="$2"
		shift; shift
		CLASSPATH="${CLASSPATH}":"${USERPATH}"
		export CLASSPATH
	;;
	-nobigdata)
		shift
		unset S_LOAD_BIGDATA
	;;
	-bigdata)
		shift
		want_bigdata=yes
		S_LOAD_BIGDATA=yes ; export S_LOAD_BIGDATA
	;;
	-*)
		echo "$0: unrecognized option \"$1\"" >&2
		usage
		exit 1
	;;
	*)
		break
	;;
	esac
done
[ "$want_bigdata" = "yes" ] && [ "$runjavagui" != "true" ] && runjavacl=true
# following will fail if $SHOME contains whitespace
SJAVA="$SHOME/java/jre/bin/java ${S_JAVA_OPTIONS} ${NO_JIT} -Dsplus.shome=$SHOME -Dsplus.tmpdir=$S_TMPDIR -classpath ${CLASSPATH} ${USE_XALAN}"
# Run the Spotfire S+ Workbench
if [ "$runeclipse" = true ]; then
	if [ "$DISPLAY" = "" ]; then
		echo "DISPLAY is not set."
		exit 1
	fi
	ALWAYS_PROMPT=T; export ALWAYS_PROMPT
	S_DISPLAY_MODE="s+java"; export S_DISPLAY_MODE
	S_INTERACTIVE_STATES=yes; export S_INTERACTIVE_STATES
	S_ECLIPSE=T; export S_ECLIPSE
	"$SHOME"/eclipse/eclipse -vm "$SHOME"/java/jre/bin/java -vmargs -Dosgi.parentClassloader="ext" -Djava.ext.dirs="$EXT_DIRS" -Dsplus.shome="$SHOME" ${S_JAVA_OPTIONS}
	exit 0
fi
# Run the Spotfire S+ Java GUI
if [ $runjavagui = true ]; then
	ALWAYS_PROMPT=T; export ALWAYS_PROMPT
	S_DISPLAY_MODE="s+java"; export S_DISPLAY_MODE
	S_INTERACTIVE_STATES=yes; export S_INTERACTIVE_STATES
	${SJAVA} $GUI_HELP_OFF com.insightful.splus.SplusExecGui
	exit 0
fi
# Run a user's Java application
if [ "X$USERCLASS" != "X" ]; then
	ALWAYS_PROMPT=T; export ALWAYS_PROMPT
	S_DISPLAY_MODE="s+java"; export S_DISPLAY_MODE
	S_INTERACTIVE_STATES=yes; export S_INTERACTIVE_STATES
	${SJAVA} ${USERCLASS} "$@"
	exit 0
fi
if [ $usecled = true ]; then
	if [ x$S_FRONT_END_RUNNING = x ]
	then
		S_CLHISTFILE=${S_CLHISTFILE-"$HOME/.Splus_history"}
		S_FRONT_END="$CLED $CLEDJCTL --"
		S_FRONT_END_RUNNING=1
		export S_FRONT_END_RUNNING S_CLHISTFILE
	fi
fi
# Run the Spotfire S+ Java Command Line version
if [ $runjavacl = true ]; then
	exec $S_FRONT_END EXEC ${SJAVA} com.insightful.splus.SplusExecCL
	exit 0
fi
case $# in
0)	exec $S_FRONT_END "$SHOME/cmd/$S_DEFAULT"
	;;
*)	c=$1; shift
	exec $S_FRONT_END "$c" ${1+"$@"}
	;;
esac
