#!/bin/csh -f
#
# Set environment variables and start Sparky.
# This script is for use at UCSF and logs each session.
#

# -----------------------------------------------------------------------------
# Figure out Sparky installation directory from $0.
#
set sparky_exe = $0
while (-l $sparky_exe)
  set ls_sparky_exe = `ls -l "$sparky_exe"`
  set sparky_exe = `echo "$ls_sparky_exe" | sed 's/.* -> //'`
end
set sparky_bin = `dirname "$sparky_exe"`
set sparky_bin = `cd "$sparky_bin"; pwd`
set sparky_inst = `dirname "$sparky_bin"`

# -----------------------------------------------------------------------------
# Sparky uses the SPARKY_INSTALL environment variable to find its
# application resource file and print prolog file.
#
setenv SPARKY_INSTALL		$sparky_inst

# -----------------------------------------------------------------------------
# If Python is available start Sparky as a Python extension.
# Otherwise the standalone version of Sparky is started.
#
set PYTHON = $SPARKY_INSTALL/python2.3/bin/python2.3
if (! -e $PYTHON) then
  set PYTHON = python2.3
endif

# -----------------------------------------------------------------------------
# Where to find Tcl/Tk shared libraries and resources.
#
setenv TCLTK_LIB		$SPARKY_INSTALL/lib
setenv LD_LIBRARY_PATH		$TCLTK_LIB
setenv LD_LIBRARYN32_PATH	$TCLTK_LIB
setenv DYLD_LIBRARY_PATH	$TCLTK_LIB
setenv TK_LIBRARY		$TCLTK_LIB/tk8.4
setenv TCL_LIBRARY		$TCLTK_LIB/tcl8.4

# -----------------------------------------------------------------------------
# Other programs Sparky can use.
#
set OSTYPE = `uname`
if ($OSTYPE == Darwin) then
  setenv SHOW_URL_COMMAND	'open "%s"'
else if ($OSTYPE == Linux) then
  setenv SHOW_URL_COMMAND	'mozilla -remote "openURL(%s)" || mozilla %s'
else
  setenv SHOW_URL_COMMAND	'netscape -remote "openURL(%s)" || netscape %s'
endif
setenv POSTSCRIPT_PREVIEWER	"/usr/bin/X11/showps -"
setenv MIDAS_COMMAND		/usr/local/midas/bin/midas

# -----------------------------------------------------------------------------
# If Python runs, start Sparky as a Python extension.
#
$PYTHON -c pass >& /dev/null
if ($status == 0) then

  # ---------------------------------------------------------------------------
  # Add path to Chimera molecular graphics program libraries.
  #
  if (! $?CHIMERA) then
    setenv CHIMERA /usr/local/chimera
  endif
  if (-d $CHIMERA) then
    setenv LD_LIBRARY_PATH	${LD_LIBRARY_PATH}:$CHIMERA/lib
    setenv LD_LIBRARYN32_PATH	${LD_LIBRARYN32_PATH}:$CHIMERA/lib
    setenv DYLD_LIBRARY_PATH	${DYLD_LIBRARY_PATH}:$CHIMERA/lib
    setenv TIX_LIBRARY		$CHIMERA/lib/tix8.2	# Chimera needs Tix.
    setenv TCLLIBPATH		$CHIMERA/lib		# For Tcl to find Tix.
  endif

  # ---------------------------------------------------------------------------
  # Add the Sparky package and Tkinter to the Python path
  #
  setenv SPARKY_PYTHONPATH $SPARKY_INSTALL/python:$SPARKY_INSTALL/python/lib-tk
  if ($?PYTHONPATH) then
    setenv PYTHONPATH ${SPARKY_PYTHONPATH}:$PYTHONPATH
  else
    setenv PYTHONPATH $SPARKY_PYTHONPATH
  endif

  unlimit coredumpsize
  $PYTHON -c "import sparky; sparky.start_session()" $*
  set exit_status = $status

else

  # ---------------------------------------------------------------------------
  # Start Sparky without Python
  #
  unlimit coredumpsize
  $SPARKY_INSTALL/bin/sparky-no-python
  set exit_status = $status

endif

# -----------------------------------------------------------------------------
# Logging and crash reporting.
#
setenv SPARKY_USE_LOG		~goddard/sparky-use
setenv CORE_DIRECTORY		/usr/tmp

#
# Create a log message
#
set who = `whoami`
set host = `hostname -s`
set date = `date`
set time = (100000 "%E")
set timefile = /tmp/${who}-sparky-time
time > ${timefile}
set run_time = `cat ${timefile}`
rm ${timefile}

#
# Write a log file entry.
#
if (-w ${SPARKY_USE_LOG}) then

  printf "%10s %10s %10s   exit %-4s %s\n" \
	${who} ${host} ${run_time} ${exit_status} "${date}" \
	>> ${SPARKY_USE_LOG}

endif

#
# Keep a copy of core dump
#
if ($exit_status) then

  if (-e core && -e ${CORE_DIRECTORY}) then
    \chmod a+rw core
    set save_core = "${CORE_DIRECTORY}/sparky-core-`date`"
    \mv -f core "${save_core}"
    if (-w ${SPARKY_USE_LOG}) then
      printf "        core dump %s\n" "${save_core}" >> ${SPARKY_USE_LOG}
    endif
  endif

endif
