#!/bin/csh -f
#
# Set environment variables and start Sparky.
# This script is for use at UCSF and writes log messages and reports crashes.
#

# -----------------------------------------------------------------------------
# Sparky uses the SPARKY_INSTALL environment variable to find its
# application resource file and print prolog file.
#
setenv SPARKY_INSTALL		/usr/local/sparky

# -----------------------------------------------------------------------------
# If Python is available start Sparky as a Python extension.
# Otherwise the standalone version of Sparky is started.
#
setenv PYTHON			python2.1

# -----------------------------------------------------------------------------
# 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.3
setenv TCL_LIBRARY		$TCLTK_LIB/tcl8.3

# -----------------------------------------------------------------------------
# Other programs Sparky can use.
#
setenv POSTSCRIPT_PREVIEWER	"/usr/bin/X11/showps -"
setenv MIDAS_COMMAND		/usr/local/midas/bin/midas
setenv CHIMERA			/usr/local/chimera

$PYTHON -c pass >& /dev/null
if ($status == 0) then

  # ---------------------------------------------------------------------------
  # Add path to Chimera molecular graphics program libraries.
  #
  if ($?CHIMERA && -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
  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 MAIL_ERRORS_TO		goddard@cgl.ucsf.edu
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

#
# Mail an error message if exit status was nonzero.
#
if ($exit_status) then

  if (-e ${CORE_DIRECTORY}/core) then
    \chmod a+rw ${CORE_DIRECTORY}/core
    \mv -f ${CORE_DIRECTORY}/core "${CORE_DIRECTORY}/sparky-core-`date`"
  endif

  printf "%10s %10s %10s   exit %-4s %s\n" \
	${who} ${host} ${run_time} ${exit_status} "${date}" \
  | mail ${MAIL_ERRORS_TO} >& /dev/null

endif
