#!/bin/sh 
#
#	$Id: startapp,v 1.49 1998/09/28 17:28:42 kirk Exp $
#
# This script determines the operating system and hardware combination
# and overlays itself with the correct binary for the desired program.
# The program is determined from the name by which the script is invoked.

APPLICATION=`basename $0`
APP_ARGS=
IDL_VERSION=5.2
ENVI_VERSION=3.1
ION_VERSION=1.1
LICENSE_NAME=license.dat

INSTALL_DIR=/opt/rsi

INS_TYPE="IDL"

# Use tr in /bin or /usr/bin if available
TR=tr    
if [ -x /usr/bin/tr ]; then
   TR=/usr/bin/tr
fi

PRODUCT=`echo $INS_TYPE | $TR '[A-Z]' '[a-z]'`


if [ "$PRODUCT" = "envi" ]; then
PROD_VERSION=$ENVI_VERSION
fi

if [ "$PRODUCT" = "ion" ]; then
PROD_VERSION=$ION_VERSION
fi

if [ "$PRODUCT" != "idl" ]; then
   IDLDIRECTORY_VERS=${PRODUCT}_${PROD_VERSION}/idl_${IDL_VERSION}
   IDLDIRECTORY=${PRODUCT}/idl
else
   IDLDIRECTORY_VERS=idl_${IDL_VERSION}
   IDLDIRECTORY=${PRODUCT}/idl
fi

# Some applications can be invoked with or without a version suffix.
# Recognise the versioned ones and remove the version.
case $APPLICATION in
"idl_$IDL_VERSION") APPLICATION=idl;;
"idlde_$IDL_VERSION") APPLICATION=idlde;;
"idlhelp_$IDL_VERSION") APPLICATION=idlhelp;;
"idldemo_$IDL_VERSION") APPLICATION=idldemo;;
"envihelp_$ENVI_VERSION") APPLICATION=envihelp;;
"iond_$ION_VERSION") APPLICATION=iond;;
"ionstat_$ION_VERSION") APPLICATION=ionstat;;
"iondown_$ION_VERSION") APPLICATION=iondown;;
"ion_httpd_$ION_VERSION") APPLICATION=ion_httpd;;
esac


if [ "$APPLICATION" = "envihelp" ]; then

# Find the main ENVI directory
  if [ "$ENVI_DIR" = "" ]; then
 
     TMP_DIR=`echo $IDL_DIR | awk -F\/ '{for(i=1;i<NF;i++){if(i>1)printf("%s","/"); printf("%s",$i); }printf("\n")}'`

 
      for DIR in  $INSTALL_DIR/envi_$ENVI_VERSION $TMP_DIR /usr/local/rsi/envi_$ENVI_VERSION ../idl /usr/local/lib/envi /usr/local/envi /usr/local/bin/envi
          do
          if [ -d $DIR ]; then
              if [ -f $DIR/save/envi_m.sav ]; then
                  ENVI_DIR=$DIR
                  break
              fi
          fi
      done
  fi

  if [ "$ENVI_DIR" = "" ]; then
      echo "Unable to access $APPLICATION. You will have to define the ENVI_DIR
environment variable to point at the main ENVI directory before
it will work."
     exit 1
  elif [ "$IDL_DIR" = "" ]; then
     IDL_DIR=$ENVI_DIR/idl_$IDL_VERSION
  fi

fi


if [ "$APPLICATION" = "iond" -o "$APPLICATION" = "ionstat" -o "$APPLICATION" = "
iondown" -o "$APPLICATION" = "ion_httpd" ]; then
 
# Find the main ION_DIR directory
  if [ "$ION_DIR" = "" ]; then
 
     TMP_DIR=`echo $IDL_DIR | awk -F\/ '{for(i=1;i<NF-1;i++){if(i>1)printf("%s", "/"); printf("%s",$i); }printf("\n")}'`
      for DIR in $INSTALL_DIR/ion_$ION_VERSION $TMP_DIR/ion_$ION_VERSION  /usr/local/rsi/ion_$ION_VERSION ../i on_$ION_VERSION /usr/local/lib/ion /usr/local/ion /usr/local/bin/ion
          do
          if [ -d $DIR ]; then
              if [ -f $DIR/bin/iond ]; then
                  ION_DIR=$DIR
                  break
              fi
          fi
      done
  fi
 
  if [ "$ION_DIR" = "" ]; then
      echo "Unable to access $APPLICATION. You will have to define the ION_DIR 
environment variable to point at the main ION directory before 
it will work." 
     exit 1
  elif [ "$IDL_DIR" = "" ]; then
     IDL_DIR=$ION_DIR/idl_$IDL_VERSION
  fi
fi

# Find the main IDL directory
if [ "$IDL_DIR" = "" ]; then
    for DIR in $INSTALL_DIR/$IDLDIRECTORY_VERS /usr/local/rsi/$IDLDIRECTORY_VERS . ./idl_$IDL_VERSION /usr/local/lib/$IDLDIRECTORY /usr/local/$IDLDIRECTORY /usr/local/bin/$IDLDIRECTORY
	do
	if [ -d $DIR ]; then
	    if [ -f $DIR/resource/fonts/hersh1.chr ]; then
        	IDL_DIR=$DIR
		break
	    fi
        fi
    done
fi

if [ "$IDL_DIR" = "" ]; then
    echo "Unable to access $APPLICATION. You will have to
define the IDL_DIR environment variable to point at the main
IDL directory before it will work."
    exit 1
fi

# If LM_LICENSE_FILE is not defined and one of the following exists
#    $IDL_DIR/../license/license.dat     (license dir from base idl product)
#    $IDL_DIR/../../license/license.dat  (license dir from bundled product)
# then define LM_LICENSE_FILE. If file is not found, leave it unset.
# If LM_LICENSE_FILE is already set, then respect that and leave it alone.  
if [ \( "$LM_LICENSE_FILE" = "" \) ] ; then
    if [ \( -f $IDL_DIR/../license/$LICENSE_NAME \) ] ; then
#      default location for standard IDL distribution
       LM_LICENSE_FILE=$IDL_DIR/../license/$LICENSE_NAME
       export LM_LICENSE_FILE
    elif [ \( -f $IDL_DIR/../../license/$LICENSE_NAME \) ] ; then
#      default location for standard bundled distribution (ENVI, ION, etc.)
       LM_LICENSE_FILE=$IDL_DIR/../../license/$LICENSE_NAME
       export LM_LICENSE_FILE
    fi
fi

# added by Holger Witsch, ESRF for use with multiple plaform 
# ( and thus system ) installation, add the hostname to the license filename
ESRFhost=`uname -n`
if [ "$LM_LICENSE_FILE" != "" ] ; then
    if [ -f $IDL_DIR/../license/license.dat.${ESRFhost} ] ; then
#      default location for standard IDL distribution
       LM_LICENSE_FILE=$IDL_DIR/../license/license.dat.${ESRFhost}
       export LM_LICENSE_FILE
    elif [ -f $IDL_DIR/../../license/license.dat.${ESRFhost} ] ; then
#      default location for standard bundled distribution (ENVI, ION, etc.)
       LM_LICENSE_FILE=$IDL_DIR/../../license/license.dat.${ESRFhost}
       export LM_LICENSE_FILE
    fi
fi

# Determine the operating system, hardware architecture, and os release
# Make sure these agree with IDL's compiled in paths or online help
# won't be found.
OS=
ARCH=
OSVER=
case `uname` in

    "SunOS")
	if [ -d /proc ]; then			# Solaris
	    OS="solaris"
	    OSVER="2"
            BIN_ARCH=/usr/bin/arch
            if [ -x /usr/bin/arch ]; then
                BIN_ARCH=/usr/bin/arch
            elif [ -x /usr/ucb/arch ]; then
                BIN_ARCH=/usr/ucb/arch
            fi
            if [ `$BIN_ARCH` = i86pc ]; then
              ARCH=".x86"
	    else
              ARCH=".sparc"
	      # If there is a special version of the program for the Ultra,
	      # use it. Otherwise, use the regular sparc version.
	      if [ \( -f $IDL_DIR/bin/bin.$OS${OSVER}.sun4u/$APPLICATION \) \
	           -a \( `$BIN_ARCH -k` = sun4u \) ]; then
	        ARCH=".sun4u"
              fi
            fi
	else					# 4.1
	   echo "$APPLICATION: System architecture is not supported."
	   exit 1
	fi
	;;

    "AIX") OS="ibm";;

    "HP-UX") OS="hp";;

    "IRIX") OS="sgi";;

    "IRIX6") OS="sgi";;

    "IRIX64") OS="sgi";;

    "OSF1") OS="alpha";;

    "ULTRIX") OS="ultrix";;
 
    "Linux") OS="linux";;
		
    *)
	echo "$APPLICATION: Unable to recognise system architecture."
	exit 1
	;;

esac

# Add the bin directory to the library search path
case $OS in
    "ibm")
	if [ "$LIBPATH" = "" ]; then
	    LIBPATH="/lib:/usr/lib:$IDL_DIR/bin/bin.$OS$OSVER$ARCH:$IDL_DIR/bin/bin.$OS$OSVER$ARCH/dm/lib"
	else
	    LIBPATH="/lib:/usr/lib:$IDL_DIR/bin/bin.$OS$OSVER$ARCH:$IDL_DIR/bin/bin.$OS$OSVER$ARCH/dm/lib:$LIBPATH"
	fi
#  Append the lib directory of oracle on if ORACLE_HOME set for Dataminer
        if [ "$ORACLE_HOME" != "" ]; then 
             LIBPATH="$ORACLE_HOME/lib:$LIBPATH"
        fi
#  Append the lib directory of sybase on if Sybase set for Dataminer
        if [ "$SYBASE" != "" ]; then
             LIBPATH="$SYBASE/lib:$LIBPATH"
        fi
	export LIBPATH
	;;

    "hp")
	if [ "$SHLIB_PATH" = "" ]; then
	    SHLIB_PATH="/usr/lib/X11R5:/usr/lib/Motif1.2:$IDL_DIR/bin/bin.$OS$OSVER$ARCH:$IDL_DIR/bin/bin.$OS$OSVER$ARCH/dm/lib"
	  else
	    SHLIB_PATH="/usr/lib/X11R5:/usr/lib/Motif1.2:$IDL_DIR/bin/bin.$OS$OSVER$ARCH:$IDL_DIR/bin/bin.$OS$OSVER$ARCH/dm/lib:$SHLIB_PATH"
	fi

#  Append the lib directory of sybase on if Sybase set for Dataminer
        if [ "$SYBASE" != "" ]; then
             SHLIB_PATH="$SYBASE/lib:$SHLIB_PATH"
        fi
	export SHLIB_PATH
	;;

    "solaris")
	if [ "$LD_LIBRARY_PATH" = "" ]; then
	    LD_LIBRARY_PATH="$IDL_DIR/bin/bin.$OS$OSVER$ARCH:$IDL_DIR/bin/bin.$OS$OSVER$ARCH/dm/lib:/usr/openwin/lib:/usr/dt/lib"
	else
	    LD_LIBRARY_PATH="$IDL_DIR/bin/bin.$OS$OSVER$ARCH:$IDL_DIR/bin/bin.$OS$OSVER$ARCH/dm/lib:/usr/openwin/lib:/usr/dt/lib:$LD_LIBRARY_PATH"
	fi

#  Append the lib directory of sybase on if Sybase set for Dataminer
        if [ "$SYBASE" != "" ]; then
             LD_LIBRARY_PATH="$SYBASE/lib:$LD_LIBRARY_PATH"
        fi
	export LD_LIBRARY_PATH
	;;

    *)
	if [ "$LD_LIBRARY_PATH" = "" ]; then
	    LD_LIBRARY_PATH="$IDL_DIR/bin/bin.$OS$OSVER$ARCH"
	else
	    LD_LIBRARY_PATH="$IDL_DIR/bin/bin.$OS$OSVER$ARCH:$LD_LIBRARY_PATH"
	fi
	export LD_LIBRARY_PATH
	;;
esac


# Users Libraries
if [ "$IDL_PATH" = "" ]; then
	IDL_PATH="+$IDL_DIR/lib:+$IDL_DIR/examples"
fi

# Add the IDL bin directory to the path so that idlde will always find idl
PATH=$IDL_DIR/bin:$PATH
export PATH IDL_DIR IDL_PATH

# HyperText help requires special setup
# Set up environment variables for HyperHelp.
HHHOME=$IDL_DIR/help
HHPATH=$IDL_DIR/bin/bin.$OS$OSVER$ARCH
XPPATH=$IDL_DIR/resource/xprinter
if [ "$XLIBI18N_PATH" = "" ]; then
  XLIBI18N_PATH=$IDL_DIR/resource/X11/lib
fi
if [ "$XFILESEARCHPATH" = "" ]; then
  XFILESEARCHPATH=$IDL_DIR/resource/X11/lib/app-defaults/%N%S:$IDL_DIR/resource/X11/lib/app-defaults/%T/%N%S
else
  XFILESEARCHPATH="$IDL_DIR/resource/X11/lib/app-defaults/%N%S:$IDL_DIR/resource/X11/lib/app-defaults/%T/%N%S:$XFILESEARCHPATH"
fi
export HHHOME HHPATH XPPATH XLIBI18N_PATH XFILESEARCHPATH

if [ "$APPLICATION" = "idlhelp" ]; then
  APP_ARGS=$IDL_DIR/help/idl.hlp
fi

if [ "$APPLICATION" = "envihelp" ]; then
  APPLICATION=idlhelp
  APP_ARGS=$ENVI_DIR/help/envi.hlp
fi

if [ "$APPLICATION" = "iond" -o "$APPLICATION" = "ionstat" -o "$APPLICATION" = "iondown" -o "$APPLICATION" = "ion_httpd" ]; then
    exec $ION_DIR/bin/bin.$OS$OSVER$ARCH/$APPLICATION $* $APP_ARGS
 
    # We shouldn't get here unless there was an error.
    echo "$APPLICATION is not availible for this system ($OS/$ARCH)"
    exit 1
fi

exec $IDL_DIR/bin/bin.$OS$OSVER$ARCH/$APPLICATION $* $APP_ARGS

# We shouldn't get here unless there was an error.
echo "$APPLICATION is not availible for this system ($OS/$ARCH)"
exit 1
