#!/bin/sh
# @(#) $RCSfile: Splus,v $: $Revision: #124 $, $Date: 2008/10/15 $
# @(#)Copyright (c), 1987, 2006 Insightful Corp.  All rights reserved.
S_SCRIPT_SCCS_MAJOR=1
S_SCRIPT_SCCS_MINOR=76
export S_SCRIPT_SCCS_MAJOR S_SCRIPT_SCCS_MINOR
#
# This shell script starts the S-PLUS system and calls S-PLUS utilities.
#
# Set the Top Level S-PLUS directory
SHOME=${SHOME}
if [ "X$SHOME" = X ]; then
	echo "SHOME is not set."
	exit 1
fi

# Export name by which Splus is  being invoked
S_PROG_NAME="$0"; export S_PROG_NAME
  
# Add the S-PLUS utilities directory to your PATH
PATH="$SHOME"/cmd:$PATH; export PATH

# Set default value of S_TMP
S_TMP=${S_TMP:-/tmp}
export S_TMP
# Set S_TMPDIR and make sure it is ok
. "$SHOME"/cmd/SET_S_TMPDIR
# javahelp scripts use envPropertiesFile
envPropertiesFile=$S_TMPDIR/env.properties.$$
export envPropertiesFile

# Set the S-PLUS 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 lets it read old
# (pre Splus 6.0) files made on Alpha.
S_SIZEOFLONGINFILE=${S_SIZEOFLONGINFILE-4}
export S_SIZEOFLONGINFILE

# 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 Splus chapter"
	exit 1
fi
   
osname=`uname`
# Append our lib directory to the ld path for the dynamically
# loaded X11 client programs (e.g. motif(), help.start(),
# data.ed(), and the rest) and FORTRAN-using programs.
if [ "$osname" = SunOS ]; then
S_LIBLIST=/opt/SUNWspro/lib:"$SHOME"/newfun/lib
S_LIBLIST_64=/opt/SUNWspro/lib/v9:"$SHOME"/newfun/lib
elif [ "$osname" = Linux ]; then
# include jre lib on linux, to allow loading library(spjava)
S_LIBLIST=${SHOME}/newfun/lib:"$SHOME"/java/jre/lib/i386:"$SHOME"/java/jre/lib/amd64
elif [ "$osname" = HP-UX ]; then
S_LIBLIST="$SHOME"/newfun/lib:"$SHOME"/java/jre/lib/PA_RISC2.0W/:"$SHOME"/java/jre/lib/PA_RISC2.0W/server/libjvm.sl
#S7_CHANGE
# include jre lib on AIX, to allow loading library(spjava)
elif [ "$osname" = AIX ]; then
S_LIBLIST="$SHOME"/newfun/lib:"$SHOME"/java/jre/bin:"$SHOME"/java/jre/bin/classic
else
S_LIBLIST="$SHOME"/newfun/lib
fi
if [ "$osname" = HP-UX ]; then
      	case "X$SHLIB_PATH" in
         	X) SHLIB_PATH="$S_LIBLIST";;
         	*\;) SHLIB_PATH="$S_LIBLIST$SHLIB_PATH";;
         	*) SHLIB_PATH="$S_LIBLIST:$SHLIB_PATH";;
      	esac
      	export SHLIB_PATH

	case "X$LD_PRELOAD" in
		X) LD_PRELOAD="$SHOME/java/jre/lib/PA_RISC2.0W/libjsig.sl:$S_LIBLIST/:$SHOME/newfun/lib/libF90.sl:/usr/lib/pa20_64/libcl.2:/usr/lib/pa20_64/libpthread.1";;
		*\;) LD_PRELOAD="$SHOME/java/jre/lib/PA_RISC2.0W/libjsig.sl:$LD_PRELOAD$S_LIBLIST/:$SHOME/newfun/lib/libF90.sl:/usr/lib/pa20_64/libcl.2:/usr/lib/pa20_64/libpthread.1";;
		*) LD_PRELOAD="$SHOME/java/jre/lib/PA_RISC2.0W/libjsig.sl:$LD_PRELOAD:$S_LIBLIST/:$SHOME/newfun/lib/libF90.sl:/usr/lib/pa20_64/libcl.2:/usr/lib/pa20_64/libpthread.1";;
	esac
	export LD_PRELOAD
else
      	case "X$LD_LIBRARY_PATH" in
         	X) LD_LIBRARY_PATH="$S_LIBLIST";;
         	*\;) LD_LIBRARY_PATH="$S_LIBLIST$LD_LIBRARY_PATH";;
         	*) LD_LIBRARY_PATH="$S_LIBLIST:$LD_LIBRARY_PATH";;
      	esac
      	export LD_LIBRARY_PATH
fi
if [ "$osname" = SunOS ]; then
      	case "X$LD_LIBRARY_PATH_64" in
         	X) LD_LIBRARY_PATH_64="$S_LIBLIST_64";;
         	*\;) LD_LIBRARY_PATH_64="$S_LIBLIST_64$LD_LIBRARY_PATH_64";;
         	*) LD_LIBRARY_PATH_64="$S_LIBLIST_64:$LD_LIBRARY_PATH_64";;
      	esac
      	export LD_LIBRARY_PATH_64
fi
#
# Increase the odds that X11 programs and libs will be found automagically.
if [ -r "${OPENWINHOME:-/usr/openwin}/bin" ]
then PATH=${PATH}:${OPENWINHOME:-/usr/openwin}/bin
fi
if [ -r "${OPENWINHOME:-/usr/openwin}/lib" ]; then 
     if [ "$osname" = HP-UX ]; then
     	SHLIB_PATH=${SHLIB_PATH}:${OPENWINHOME:-/usr/openwin}/lib
     	export SHLIB_PATH
     else
     	LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${OPENWINHOME:-/usr/openwin}/lib
     	export LD_LIBRARY_PATH
     fi
fi

if [ "$osname" = AIX ]; then
	# java code uses LIBPATH instead of LD_LIBRARY_PATH to set java.library.path on AIX
	LIBPATH=$LD_LIBRARY_PATH
	export LIBPATH
fi
 
# 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"
      if [ "X$OPENWINHOME" != "X" ]
      then XFILESEARCHPATH="$XFILESEARCHPATH:$OPENWINHOME/lib/%T/%N"
      fi
   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
if [ -r "$SHOME"/adm/lic/RSHCMD ]
then
    SLIC_RSHCMD=${SLIC_RSHCMD-"`cat \"$SHOME\"/adm/lic/RSHCMD`"}
    export SLIC_RSHCMD
fi
CLED="$SHOME"/cmd/cled
CLEDJCTL="$SHOME"/cmd/cled_jctl

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
# Get JAVA_OPTIONS from environment and set options required for S-PLUS
case "$osname" in
   SunOS)
	# Use different options for 32-bit and 64-bit S-PLUS.
	if [ -n "`file "$SHOME"/newfun/lib/libSqpe.so | grep 64-bit`" ] 
	then S_JAVA_OPTIONS="-d64 -Xss1280k -Xmx1000m ${JAVA_OPTIONS}"
	else S_JAVA_OPTIONS="-Xss1280k -Xmx400m ${JAVA_OPTIONS}"
	fi;;
   OSF1)
	S_JAVA_OPTIONS="-Xss1280k -Xmx1000m ${JAVA_OPTIONS}";;
   IRIX*)
	S_JAVA_OPTIONS="-native -Xss1280k -Xmx400m ${JAVA_OPTIONS}";;
   HP-UX)
	#S7_CHANGES
	#-d64 option is mandatory to start JAVM in 64 bit mode
	if [ -n "`file "$SHOME"/newfun/lib/libSqpe.so | grep 64-bit`" ]
	then S_JAVA_OPTIONS="-Xss1280k -Xmx1000m ${JAVA_OPTIONS}"
	else S_JAVA_OPTIONS="-d64 -Xss1280k -Xmx400m ${JAVA_OPTIONS}"
	fi;;
   AIX)
	S_JAVA_OPTIONS="-d64 -Xss1280k -Xmx400m ${JAVA_OPTIONS}";;

   *)  # default Java options for S-PLUS
	S_JAVA_OPTIONS="-Xss1280k -Xmx400m ${JAVA_OPTIONS}";;
esac
export S_JAVA_OPTIONS
# By default the Java just-in-time compiler is disabled
if [ "$osname" = HP-UX ]; then
JIT_OFF='-Xint'
else
JIT_OFF='-Djava.compiler='
fi
export JIT_OFF
export JIT_OFF
if [ "$S_DEFAULT_TO_NOJIT" != "" ] ; then
        NO_JIT="$JIT_OFF"
else
        NO_JIT=
fi

if [ "$osname" = AIX ]; then
	USE_XALAN="-Duse.xalan=T"
	JAVA_OPTIONS="${JAVA_OPTIONS} -Duse.xalan=T"
	export JAVA_OPTIONS
else
	USE_XALAN="-Duse.xalan=F"
fi

if [ $# -ge 1 ]
then
# try special cases first: Java GUI debug
	case $1 in
# use the following to start the GUI in "debug" mode
	-g_dbg)
		shift
		ALWAYS_PROMPT=T; export ALWAYS_PROMPT
		S_DISPLAY_MODE="s+java"; export S_DISPLAY_MODE
		S_INTERACTIVE_STATES=yes; export S_INTERACTIVE_STATES
		"$SHOME"/java/jre/bin/java -Xbootclasspath:/build/jdk/lib/tools.jar:"$SHOME"/java/jre/lib/rt.jar -Xdebug -Dsplus.shome="$SHOME" -Dsplus.tmpdir=$S_TMPDIR -classpath ${CLASSPATH} ${NO_JIT} ${JAVA_OPTIONS} com.insightful.splus.SplusExecGui
		exit 0
	;;
	-dbg)
		# set SHOME to /sw/sca/BuildTrees5/S5/latest/debug
		exec ddd --gdb $SHOME/cmd/Sqpe
		exit 0
	;;
	esac
fi  # end of special cases
   
runjavacl=false
runjavagui=false
runeclipse=false
usecled=false
while [ $# -gt 0 ]
do
	case $1 in
	-e)
		usecled=true
		shift
	;;
	-g)
		runjavagui=true
		shift
	;;
	-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)
		# disable Java just-in-time compiler
		NO_JIT="$JIT_OFF"
		shift
	;;
	-helpoff)
		GUI_HELP_OFF='-Dsplus.help.off=true'
		shift
	;;
	-w|-workbench)
		if [ "$osname" = SunOS ]; then
			S_JAVA_OPTIONS="${S_JAVA_OPTIONS} -Dawt.toolkit=sun.awt.X11.XToolkit"
			export S_JAVA_OPTIONS
		fi
		runeclipse=true
		shift
	;;
	-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
	;;
	-headless)
		shift
		JAVA_OPTIONS="${JAVA_OPTIONS} -Djava.awt.headless=true"
		export JAVA_OPTIONS
		S_JAVA_OPTIONS="${S_JAVA_OPTIONS} -Djava.awt.headless=true"
		export S_JAVA_OPTIONS
	;;
	-*)
		echo "$0: unrecognized option $1" >&2
		echo "Usage:" >&2
		echo " $0 -g [-jit] [-helpoff]    # S-PLUS Java GUI" >&2
		echo " $0 -j [-jit] [-e]          # S-PLUS Java command line" >&2
		echo " $0 [-e] [utility [args...]]  # S-PLUS, no Java" >&2
		echo " $0 -w|-workbench             # S-PLUS Workbench" >&2
		echo " $0 -userapp path class [-jit]   # User's Java application" >&2
		exit 1
	;;
	*)
		break
	;;
	esac
done
if [ $runjavacl = true ]; then
	JAVA_RUNNING="T"
	export JAVA_RUNNING
fi

[ "$want_bigdata" = "yes" ] && [ "$runjavagui" != "true" ] && runjavacl=true
SJAVA="$SHOME/java/jre/bin/java ${S_JAVA_OPTIONS} ${NO_JIT} -Dsplus.shome=$SHOME -Dsplus.tmpdir=$S_TMPDIR -classpath ${CLASSPATH} ${USE_XALAN}"

# Run the S-PLUS 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 S-PLUS 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"}
		if [ "$osname" = Linux ]; then
		S_FRONT_END="$CLED $CLEDJCTL --"
		else
		S_FRONT_END="$CLED $CLEDJCTL"
		fi
		S_FRONT_END_RUNNING=1
		export S_FRONT_END_RUNNING S_CLHISTFILE
	fi
fi

if [ "$osname" != AIX ]; then
# Run the S-PLUS Java Command Line version
if [ $runjavacl = true ]; then
	echo "$S_FRONT_END EXEC ${SJAVA} com.insightful.splus.SplusExecCL"
	exec $S_FRONT_END EXEC ${SJAVA} com.insightful.splus.SplusExecCL
	exit 0
fi
fi

case $# in
0)	exec $S_FRONT_END "$SHOME/cmd/$S_DEFAULT"
	;;
*)	c=$1; shift
	exec $S_FRONT_END "$c" ${1+"$@"}
	;;
esac
