#!/bin/sh

# start_ifgui
#
# Pedro Nuno Machado
# Siemens SA
# 20060516
#
# Launch proper IF version for chosen load
#
# NOTE: First IF load was 10.01.01.ALL.21
#
# 07/24/2006 pt102328:Pedro Machado
#    Fixed R11.0 load ID display
#    Added NEW_CODE flag to indicate dynamic load support in IF/NCPE
#
 
HQ_FAILURE_MESSAGE="[FAIL]"
HQ_WARNING_MESSAGE="[WARN]"
HQ_SUCCESS_MESSAGE="[PASS]"
HQ_INFORMA_MESSAGE="[INFO]"

HQ_SCRIPT_NAME=`basename $0`

printLog()
{
  _message=$1
  HQ_TIMESTAMP=`date`
  HQ_HOSTNAME=`hostname`
  printf "%-15s " "$HQ_TIMESTAMP"
  printf "%-15s " "$HQ_HOSTNAME"
  if [ -z "$HQ_SCRIPT_NAME" ]
  then
   HQ_SCRIPT_NAME="????"
  fi
  printf "%-16s " "$HQ_SCRIPT_NAME"
  printf "$HQ_INFORMA_MESSAGE "
  printf "$_message\n"
}

printFailure()
{
  _message=$1
  HQ_TIMESTAMP=`date`
  HQ_HOSTNAME=`hostname`
  printf "%-15s " "$HQ_TIMESTAMP"
  printf "%-15s " "$HQ_HOSTNAME"
  if [ -z "$HQ_SCRIPT_NAME" ]
  then
   HQ_SCRIPT_NAME="????"
  fi
  printf "%-16s " "$HQ_SCRIPT_NAME"
  printf "$HQ_FAILURE_MESSAGE "
  printf "$_message\n"
}

printWarning()
{
  _message=$1
  HQ_TIMESTAMP=`date`
  HQ_HOSTNAME=`hostname`
  printf "%-15s " "$HQ_TIMESTAMP"
  printf "%-15s " "$HQ_HOSTNAME"
  if [ -z "$HQ_SCRIPT_NAME" ]
  then
   HQ_SCRIPT_NAME="????"
  fi
  printf "%-16s " "$HQ_SCRIPT_NAME"
  printf "$HQ_WARNING_MESSAGE "
  printf "$_message\n"
}

printSuccess()
{
  _message=$1
  HQ_TIMESTAMP=`date`
  HQ_HOSTNAME=`hostname`
  printf "%-15s " "$HQ_TIMESTAMP"
  printf "%-15s " "$HQ_HOSTNAME"
  if [ -z "$HQ_SCRIPT_NAME" ]
  then
   HQ_SCRIPT_NAME="????"
  fi
  printf "%-16s " "$HQ_SCRIPT_NAME"
  printf "$HQ_SUCCESS_MESSAGE "
  printf "$_message\n"
}

########## End of Logging functions definition ##########

# Clear display
clear

# Get OS name
OS=`uname`

# Setup DISPLAY environment variable for remote X connections
if test -z "$DISPLAY"
then
  case $OS in
    Linux)
      DISPLAYS=`who | grep $USER | awk '{print substr($6, 2, length($6) -2)}'`
    ;;
    SunOS)
      DISPLAYS=`who | grep $USER | awk '{print substr($6, 2, length($6) -2)}'`
    ;;
  esac
  
  echo "DISPLAY environment variable not set. Do you want to set it [y/N]?"
  read x
  case $x in
    [yY])
      echo "Choose remote address from the list or type new value"
      for DISP in $DISPLAYS
      do
        echo "- $DISP"
      done

      echo
      read y
      DISPLAY=$y:0
      export DISPLAY
      echo "Display set to $DISPLAY"
    ;;
  esac
fi
echo

# Determine which load to setup
case $OS in
  Linux)
    LOADS=`ls /hiq8000-sw`
  ;;
  SunOS)
    LOADS=`ls /export/home/sis/jumpsrx/SRX`
  ;;
esac

MATCH=false

while [ 1 ]
do
    echo "Start IF for which load?"
    echo

    for LOAD in $LOADS
    do
        # Toss all but load ids
        case "$LOAD" in
            10"."01"."01"."ALL"."2[1-9])           # R10.0 10.01.01.ALL.21 -> 10.01.01.ALL.2x
                 echo "- $LOAD"
		 NEW_CODE=false
            ;;
	    10"."02"."[0-9][0-9]"."ALL"."0[0-4])   # R10.1 -> 10.02.xx.ALL.04
	         echo "- $LOAD"
		 NEW_CODE=false
            ;;
	    10"."03"."[0-9][0-9]"."ALL"."0[0-6])   # R10.2 -> 10.03.xx.ALL.06
	         echo "- $LOAD"
		 NEW_CODE=false
            ;;
            [1][1-9]"."[0-9][0-9]"."[0-9][0-9]"."[A-Z]*"."[0-9][0-9])  # R10.0 R10.1 R10.2 R11.0 -> ...
                 echo "- $LOAD"
		 NEW_CODE=true
            ;;
        esac
    done

    echo
    read LOAD_ID
    echo

    for LOAD in $LOADS
    do
        if [ "$LOAD_ID" = "$LOAD" ]
        then
          MATCH=true
          break
        fi
    done

    if [ "$MATCH" != "true" ]
    then
        echo "\"$LOAD_ID\" Please choose from displayed loads."
    else
        break
    fi
done #while [ 1 ]

SRX_BUILD_ID=$LOAD_ID

if [ ! "$SRX_BUILD_ID" ]
then
  printFailure "Unable to read srx_build_id from $NODE_CFG. Aborting."
  exit 1
fi

RELEASE=`printf $SRX_BUILD_ID | cut -c1-2`

case $OS in
  Linux)
    LOAD_DIR=/hiq8000-sw/$SRX_BUILD_ID/siemens
    if [ "$RELEASE" = "12" ] ; then
       MANIFEST_SUFFIX=SUSE_9_i586
    else
       MANIFEST_SUFFIX=sles9
    fi
  ;;
  SunOS)
    LOAD_DIR=/export/home/sis/jumpsrx/SRX/$SRX_BUILD_ID
    if [ "$RELEASE" = "12" ] ; then
       MANIFEST_SUFFIX=SunOS_5.10_sparc
       LOAD_DIR=$LOAD_DIR/$MANIFEST_SUFFIX
    else
       MANIFEST_SUFFIX=sol9n
    fi
  ;;
esac

#
# Now find the manifest. The following manifest names are recognized in this
# script.
#----------------------------------------------
# MANIFEST NAME          PLATFORM
#----------------------------------------------
# <LOAD_ID>.mnf        : Solaris 2.6/Netra  <- backwards compatibility
# <LOAD_ID>_sol26n.mnf : Solaris 2.6/Netra
# <LOAD_ID>_sol26p.mnf : Solaris 2.6/PrimePower
# <LOAD_ID>_sol8n.mnf  : Solaris 8/Netra
# <LOAD_ID>_sol8p.mnf  : Solaris 8/PrimePower
# <LOAD_ID>_sol9n.mnf  : Solaris 9/Netra

if [ "$RELEASE" = "12" ] ; then
   MANIFEST=$LOAD_DIR/${SRX_BUILD_ID}-${MANIFEST_SUFFIX}.mnf
else
   MANIFEST=$LOAD_DIR/${SRX_BUILD_ID}_${MANIFEST_SUFFIX}.mnf
fi

if [ ! -f "$MANIFEST" ]
then
    MANIFEST=$LOAD_DIR/${SRX_BUILD_ID}.mnf

    if [ ! -f "$MANIFEST" ]
    then
      printFailure "Unable to read manifest: $MANIFEST. Aborting."
      exit 1
    fi
fi

PATCH_MANIFEST=$LOAD_DIR/${SRX_BUILD_ID}_${MANIFEST_SUFFIX}.spmnf
grep -s "ncpe-" $PATCH_MANIFEST | grep -s ACTIVE | tail -1 > /tmp/garb 2>/dev/null
grep -s "ncpe-" /tmp/garb >/dev/null
if [ $? = 0 ]
then
    NCPE_MANIFEST=$PATCH_MANIFEST
    USING_PATCH_MANIFEST=1
else
    NCPE_MANIFEST=$MANIFEST
    USING_PATCH_MANIFEST=0
fi

if [ $USING_PATCH_MANIFEST = 1 ]
then
     echo "Using SIS Patch Manifest" 
     NCPE_VER=`grep -s "ncpe-" $NCPE_MANIFEST | grep ACTIVE | tail -1 2>/dev/null | awk '{print $2}'`
     NCPE_PKG=`grep -s "ncpe-" $NCPE_MANIFEST | grep ACTIVE | tail -1 2>/dev/null | awk '{print $4}'`
else
     NCPE_VER=`grep -s "ncpe-" $NCPE_MANIFEST 2>/dev/null | awk '{print $2}'`
     NCPE_PKG=`grep -s "ncpe-" $NCPE_MANIFEST 2>/dev/null | awk '{print $4}'`
fi

if [ ! "$NCPE_VER" ] || [ ! "$NCPE_PKG" ]
then
    printFailure "Unable to read NCPE version or package from $NCPE_MANIFEST. Aborting."
    exit 1
fi

case $OS in
  Linux)
        BASEDIR=/hiq8000-sw/ncpe/$NCPE_PKG
        BINDIR=$BASEDIR/bin
        cd $BINDIR 2>/dev/null
        if [ $? -ne 0 ]
        then
          printFailure "Unable to change dir to $BINDIR. Aborting."
          exit 1
        fi
	if [ "$NEW_CODE" != "true" ]
	then
	    ./ifgui
	else
            ./ifgui -Wn,-l$LOAD_ID
	fi
  ;;
  SunOS)
    if [ "$RELEASE" = "12" ] ; then
       NCPE_VER=SunOS_5.10_sparc
    fi
    case $NCPE_VER in
      $MANIFEST_SUFFIX*)
        BASEDIR=`pkginfo -l $NCPE_PKG | grep BASEDIR | awk '{print $2}'`	
        BINDIR=$BASEDIR/bin
	cd $BINDIR 2>/dev/null
	if [ $? -ne 0 ]
        then
          printFailure "Unable to change dir to $BINDIR. Aborting."
          exit 1
        fi
	if [ "$NEW_CODE" != "true" ]
	then
	    ./ifgui
	else
            ./ifgui -Wn,-l$LOAD_ID
	fi
      ;;

      *)
        printLog "NCPE version and package not found."
        exit 0
      ;;
    esac
  ;;
esac

