#!/bin/sh
# 
# Copyright 1999-2000 American Power Conversion, All Rights Reserved
#
# Description: This file is used to install several versions of PowerChute 
#              Plus for Unix.
#
# Usage: ./INSTALL - will execute the script
#
#

###################
# Global Constants
###################
# --------------------------------------------------------------------------
# Do not change definitons for TRUE and FALSE from below, or '&&' shell logic
# will fail.  TRUE=0 and FALSE!=0 is shell convention
# --------------------------------------------------------------------------
FALSE=1
TRUE=0

YES=0
NO=1
QUIT=2
INVALID=99

SMART="smart"
SIMPLE="simple"
PNP="PNP"
NORMAL="Normal"
SPECIAL="special"
NOT_SYM1="Bad battery"
SYM=""
NOT_SYM2="UPS on bypass"
SYM2="UPS"
NOT_SYM3=""
SYM10="TimeOutFactor = 20"
SYM11="UPS system is in maintenance bypass set by switch"
NOT_SYM4="UPS on bypass: user set via rear switch"
SYM5="Actions = LUS"
NOT_SYM5="Actions = LU"


#### 
#TMP
####
REMOVE_RUNME=$FALSE

#######################################################################
# Global control variables: Values to be provided by the script
#######################################################################
# Globals with Default Values #
###############################

SVR4_STARTUP_PRIORITY=98
PWD=`pwd`
COMMON_FILES=COMMON
APC_REPOSITORY="/etc/apc_repository"
INST_SCRIPT_NAME=$0
REMOTE_INST_SCRIPT_NAME="REMOTE_$INST_SCRIPT_NAME"
ENVAR="PWRCHUTE"
TMP_INSTALL_DIR="/.pwrchute_tmp"
TMP_DIR="/.pwrchute_tmp"
MISSING_FILE_LIST="MISSING_FILE.lst"
SYSFILES_BACKUP_REPOSITORY="sysfiles.bak"
MONO_WARN_COLOR_STRING="WarningColor = LightGray"
MONO_ERR_COLOR_STRING="ErrorColor = LightGray"
TMP_FLOPPY_DEV="$TMP_INSTALL_DIR/floppy"
OS_BLOCK_SIZE=1024
APC_DETECT_FILE=00apc1.tmp

SOL2_SPARC_STRING="Solaris 2.X for Sparc"
SUN4_SPARC_STRING="SunOS 4.X (Solaris 1.X) for Sparc"
SOL2_INTEL_STRING="Solaris 2.X for Intel"
AIX_RISC_STRING="AIX for IBM RS6000"
HPUX10X_PARISC_STRING="HPUX 10.X/11.X (700/800)"
HPUX9X_PARISC_STRING="HPUX 9.X (700/800)"
HPUX9X_MTRLA_STRING="HPUX 9.X (300/400)"
SCO_INTEL_STRING="SCO Unix"
UWARE7_INTEL_STRING="SCO Unixware 7.x"
NCR_INTEL_STRING="NCR Unix"
INTERACTIVE_INTEL_STRING="Interactive Unix"
SGI_MIPS_STRING="SGI Irix"
UWARE_INTEL_STRING="UnixWare"
OLIVETTI_INTEL_STRING="Olivetti Unix Sys V Rel.4.0"
SINIX_RISC_STRING="Siemen's Unix"
UNISYS_INTEL_STRING="Unisys Unix Sys V Rel.4.0"
DEC_OSF1_STRING="DEC OSF/1"
LINUX_INTEL_STRING="Linux"
HELP_FILES=HELP
CABLE_TYPE=$NORMAL

##############################################################
# Naming convention:
# GroupArch_OS
##############################################################
##########
# Group: #
##########
FE="F"  #Front End
BE="B"	#Back End
CO="C"	#Platform specific files common to front and back end

########
# Arch:
########
INTEL="I"
SPARC="S"
MIPS="M"
RISC="R"
PARISC="P"
ALPHA="A"
MTRLA="T"

##############################################################

################
# TRUE Defaults
################

VERIFY_INSTALL=$TRUE
CHECK_SYSTEM_FILES=$TRUE  
MAKE_DEFAULT_CALL_SCRIPT=$TRUE
STARTUP_PRIORITY_WARNING=$TRUE
INSTALL_HTML_HELP=$TRUE

#################
# FALSE Defaults
#################

BUILD_REMOTE=$FALSE
CD_INSTALL=$FALSE
FLOPPY_INSTALL=$FALSE
TAPE_INSTALL=$FALSE
REMOVE_PRODUCT=$FALSE
USES_ENVAR=$FALSE
ROOT_USER=$FALSE
PREVIOUS_VERSION_FOUND=$FALSE
V3XVERSION_DEALT_WITH=$FALSE
SPECIAL_STARTUP_FLAGS=$FALSE
CHAR_UI_ONLY=$FALSE
X_UI_ONLY=$FALSE
SMART_UPSD_ONLY=$FALSE
UI_MONO_COLOR_SCHEME=$FALSE
IS_MODEM_PORT=$FALSE
IS_LOCAL_PORT=$FALSE
CHKRELAX_FLAG=$FALSE
MEASURE_UPS=$FALSE
USE_TCP=$TRUE
PROTECT_INIT_1=$FALSE
COMM_VERIFIED=$FALSE
SKIP_PORT_VERIFICATION=$FALSE
RUN_COMMAND_FILES_AS_ROOT=$FALSE
SEND_EMAIL_AS_ROOT=$FALSE
USE_EXISTING_INI=$FALSE

SHUTDOWN_COMMAND_STRING="if [ -r /upsoff.cmd ]     #POWERCHUTE\\
then                      #POWERCHUTE\\
	. ./upsoff.cmd       #POWERCHUTE\\
	rm -f /upsoff.cmd #POWERCHUTE\\
fi                        #POWERCHUTE"

######################
#Product Definitions:
######################
POWERCHUTE_PLUS="pcp_unix.apc"

###########################################
# Global Variables without Default Values #
###########################################
FULL_PROD_NAME=
PROD_NAME=
PROD_VERSION=
INSTALL_PATH=
SIGNAL_TYPE=
APC_HARDWARE_PROD=
OS_NAME=
TTY1=
TTY2=
INST_TTY=
NEED_DEDICATED_TTY=
PROD_VERSION=
REMOVE_SCRIPT=
CFE_PROD_CALL_SCRIPT=
XFE_PROD_CALL_SCRIPT=
BE_PROD_CALL_SCRIPT=
STARTUP_FILE_PATH=
STARTUP_SYSTEM_FILE=
STARTUP_FILE=
SHUTDOWN_FILE=
SHUTDOWN_SEARCH_STRING=
STARTUP_INSERT_STRING=
INITTAB_INSERT_STRING=
ALLOWED_PORT_NAMES=
SYMSTR1=
SYMSTR2=
SYMSTR3=
SYMSTR13=
SYMSTR14=
WEB_BROWSER=
MODEM_ALLOWED_PORT_NAMES=
MODEM_PORT_NAME=

#######################################################################
# Select an APC Software product, There is a mechanism built in here
# for having this same script install multiple products...
#######################################################################

INST_PROD=
FULL_PROD_NAME="PowerChute Plus for UNIX"
PROD_NAME="$POWERCHUTE_PLUS"
PROD_HEADER="4.5.2.1"
PROD_VERSION="4.5.2.1"
REMOVE_SCRIPT="Remove.sh "
DEFAULT_INST_PATH="/usr/lib/powerchute"
NEED_DEDICATED_TTY=$TRUE
USES_ENVAR=$TRUE
ENVAR="PWRCHUTE"
BE_PROD_CALL_SCRIPT="upsd"
CFE_PROD_CALL_SCRIPT="powerchute"
XFE_PROD_CALL_SCRIPT="xpowerchute"
MAILER_SCRIPT="mailer.sh"
PAGER_SCRIPT="dialpager.sh"

#####################
# Beta Information
#####################
IN_BETA=$FALSE
BETA_VERSION=""

######################################################################
# THIS IS A PATCH!!!  For the next release this needs to be removed.
######################################################################
Patch() {
if [ ! "$OS_NAME" = "$NCR_INTEL_STRING" ]
then
  set `sed -n '35p' S98upsd`
  if [ "$1" = "then" ]
  then
    mv S98upsd S98upsd.bak
    sed '33,35d' S98upsd.bak >> S98upsd
    mv S98upsd S98upsd.bak
    sed '34d' S98upsd.bak >> S98upsd
    rm S98upsd.bak
  fi
fi
}
######################################################################
# END OF PATCH
######################################################################


###########################
# Commonly used functions #
###########################

Echo() {
        
	tmp_name=`uname -s`
	string="$1"

	if [ "$tmp_name" = "Linux" ]
	then
		echo -e "$string"
	elif [ -r /usr/5bin/echo ]
        then
		/usr/5bin/echo "$string"
	else
		echo "$string"
	fi
}


echo_line() {
	Echo "----------------------------------------------------------------------------"
}



HitAnyKey() {
	default="Press Enter to continue"
	string=${1:-$default}
	Echo "$string \\c"
	read tmp_strike
}


beep() {
	Echo "\\c"
}

##########################
# Quit: Exit processing
##########################

Quit() {
	
	rm -f $TMP_INSTALL_DIR/$APC_DETECT_FILE
	if [ ! -z "$INSTALL_PATH" ]
	then
		rm -f $INSTALL_PATH/S98upsd
		rm -f $INSTALL_PATH/$COMMON_FILES
		rm -f $INSTALL_PATH/$TAR_FILE
	fi

	if [ $REMOVE_RUNME -eq $TRUE ]
	then
		rm -f $PWD/$INST_SCRIPT_NAME
	fi
	exit
}


##############################################################################
# IsFound:  If a file is found to be missing from the distrubition, it is then
#           appended to $MISSING_FILE_LIST
##############################################################################


IsFound() {
	if [ ! -r $1 ]
	then
		if [ ! -r $MISSING_FILE_LIST ]
		then
			Echo "Files Missing From APC Distribution:" > $MISSING_FILE_LIST
		fi

		Echo $1 >> $MISSING_FILE_LIST
	fi
}

##############################################################################
# SVR4Startup: Modfies system files for those who startup from /etc/rc.X
#                 files
##############################################################################


SVR4Startup() {

	warned=$FALSE
	if [ $STARTUP_PRIORITY_WARNING -eq $TRUE ]
	then
		for j in $STARTUP_FILE_PATH/*$SVR4_STARTUP_PRIORITY*
		do
			if [ -r $j ]
			then
				warned=$TRUE
				echo_line
				Echo "The startup file for $FULL_PROD_NAME is"
				Echo "$STARTUP_FILE. You have another startup script in the same"
				Echo "directory ($j) with the same startup priority ($SVR4_STARTUP_PRIORITY). It is "
				Echo "recommended that you rename $STARTUP_FILE to have a unique number in"
				Echo "its name. i.e. S##upsd where ## is a unique number."
				echo_line
				Echo "Strike Enter to continue... \\c"
				read temp_enter
			fi
		done
	fi
 	sed s!GSUB_INSTALL_PATH!$INSTALL_PATH!g S98upsd > $STARTUP_FILE.tmp
	if [ $SPECIAL_STARTUP_FLAGS -eq $TRUE ]
	then
		sed s!GSUB_START_FLAGS!$STARTUP_ARGS!g $STARTUP_FILE.tmp > $STARTUP_FILE
	else
 		sed s/GSUB_START_FLAGS//g $STARTUP_FILE.tmp > $STARTUP_FILE
	fi
	if [ -s $STARTUP_FILE ]
	then
		rm -f $STARTUP_FILE.tmp
	else 
		beep
		echo_line
		Echo "Error creating $STARTUP_FILE from $STARTUP_FILE.tmp!"
		sleep 1
		echo_line
	fi
	chmod ugo+x $STARTUP_FILE
	if [ $warned -eq $FALSE ]
	then
		Echo
		Echo "The startup file for $FULL_PROD_NAME is $STARTUP_FILE"
		Echo
	fi
}
	
############################################################################
# PrepareStartupFile:  Sets up our startup file
############################################################################
PrepareStartupFile() {

	sed s!GSUB_INSTALL_PATH!$INSTALL_PATH!g S98upsd > $STARTUP_FILE.tmp
	if [ $SPECIAL_STARTUP_FLAGS -eq $TRUE ]
	then
		sed s/GSUB_START_FLAGS/$STARTUP_ARGS/g $STARTUP_FILE.tmp > $STARTUP_FILE
	else
 		sed s/GSUB_START_FLAGS//g $STARTUP_FILE.tmp > $STARTUP_FILE
	fi
	if [ -s $STARTUP_FILE ]
	then
		rm -f $STARTUP_FILE.tmp
	fi

	chmod ugo+x $STARTUP_FILE

}

SCOStartup() {

	PrepareStartupFile
	rm -f $STARTUP_SYSTEM_FILE   #  We can be cavalier about this, since
				     #	are create it
	Echo "#!/bin/sh\nsu root -c \"$STARTUP_FILE start 2>/dev/null\"" > $STARTUP_SYSTEM_FILE
	if [ ! -r $STARTUP_SYSTEM_FILE ]
	then
		Echo
		echo_line
		beep
		Echo "WARNING: Unable to create $STARTUP_SYSTEM_FILE!"
		Echo "$FULL_PROD_NAME will not be able to start up when the"
		Echo "system boots!"
		echo_line
		HitAnyKey
	else
		chmod ugo+x $STARTUP_SYSTEM_FILE
	fi
}


LinuxStartup() {
# This places the upsd startup script in $STARTUP_FILE which should be
# /etc/rc.d/init.d/upsd.  The script then creates symbolic links
# to this script in each of the rc[2-5].d subdirectories, with the
# sequence priority of $SVR4_STARTUP_PRIORITY
	PrepareStartupFile
	if [ ! -r $STARTUP_FILE ]
	then
		Echo
		echo_line
		beep
		Echo "WARNING: Unable to create $STARTUP_FILE!"
		Echo "$FULL_PROD_NAME will not be able to start up when the"
		Echo "system boots!"
		echo_line
		HitAnyKey
	else
		chmod ugo+x $STARTUP_FILE
	fi
	for RUN_LEVEL in 2 3 4 5;
 	do
	    STARTUP_LINK_PATH=$STARTUP_RC_PATH/rc$RUN_LEVEL.d
	    STARTUP_LINK_FILE=$STARTUP_LINK_PATH/S${SVR4_STARTUP_PRIORITY}upsd 
	    ln -s $STARTUP_FILE $STARTUP_LINK_FILE
	    if [ ! -r $STARTUP_LINK_FILE ]
	    then
		Echo
		echo_line
		beep
		Echo "WARNING: Unable to create $STARTUP_LINK_FILE!"
		Echo "$FULL_PROD_NAME will not be able to start up when the"
		Echo "system boots in run level $RUN_LEVEL!"
		echo_line
		HitAnyKey
	    fi
	done
}


##############################################################################
# AppendToStartupFile: Modfies system files for those who startup from the
#                 /etc/inittab file
##############################################################################
AppendToStartupFile() {

	start_up_system_file=$1

	PrepareStartupFile	

	cp $start_up_system_file $start_up_system_file.tmp
	BackupCp $start_up_system_file
	if [ $? -eq $TRUE ] && [ -r $start_up_system_file.tmp ]
	then
		rm -f $start_up_system_file 
	else
		Echo "Error writing backup file for  $start_up_system_file! Quitting."
		Quit
	fi

	sed '$a\
GSUB_APC_STRING' $start_up_system_file.tmp > $TMP_INSTALL_DIR/startup.tmp
	sed "s!GSUB_APC_STRING!$STARTUP_INSERT_STRING!g" $TMP_INSTALL_DIR/startup.tmp > $start_up_system_file 
	if [ ! -s $start_up_system_file ]
	then
		beep
		echo_line

		Echo "Error writing $start_up_system_file. Original file can be found in\n$SYSFILE_$BACKUP_REPOSITORY. Quitting."
		echo_line
		Quit
	else
		rm -f $start_up_system_file.tmp
	fi
}


#######################################################################
# HpSpecialShutdown:  HP needs a bit of special handling for shutdown
#######################################################################
HpSpecialShutdown() {

	cp $SHUTDOWN_FILE $SHUTDOWN_FILE.bak
	BackupCp $SHUTDOWN_FILE	

	if [ $? -eq $FALSE ] || [ ! -r $SHUTDOWN_FILE.bak ]
	then
		echo_line
		beep
		Echo "ERROR:  Unable to backup $SHUTDOWN_FILE"
		Echo "You will be unable to turn off the UPS if this problem is not rectified"
		echo_line
		Quit
	else
		rm -f $SHUTDOWN_FILE
	fi
	cp $INSTALL_PATH/hp_reboot $SHUTDOWN_FILE
}
	

#######################################################################
# SunOs4SpecialShutdown:  SUNOS4 needs a bit of special handling for 
# Shutdown
#######################################################################
SunOs4SpecialShutdown() {

	if [ -r /usr/etc/halt.exe ]
	then
		mv /usr/etc/halt.exe /usr/etc/halt.exe.hold
	fi
	mv /usr/etc/halt /usr/etc/halt.exe
	Echo "#!/bin/sh\n$SHUTDOWN_COMMAND_STRING\n/usr/etc/halt.exe\n" > /usr/etc/halt
	chmod ugo+x /usr/etc/halt
}

NCRSpecialShutdown() {
	#Because of Wierdness with volume management, I could only get the
	#UPS to reliably turn off this way.  Down side is it does not make
	#good use of the default 20 sec delay between shutdown command receipt
	#by the UPS and shutdown.

ShutdownString="#!/bin/sh
case \"\$1\" in
'stop')
	if [ -r /upsoff.cmd ]
	then
		/upsoff.cmd
	fi
	;;
esac

"
	echo "$ShutdownString" > /etc/rc0.d/K98upsd
	chmod ugo+x /etc/rc0.d/K98upsd
}

HPUX10SpecialShutdown() {

ShutdownString="#!/bin/sh
        if [ -r /upsoff.cmd ]
        then
                /upsoff.cmd
        fi
rm -f /upsoff.cmd
"
        echo "$ShutdownString" > /sbin/rc0.d/K98upsd
        chmod ugo+x /sbin/rc0.d/K98upsd
}


###########################################################################
# IsYNQ handles Yes No and Quit responses
###########################################################################

IsYNQ(){
	VALID_YNQ=$FALSE
	YNQ=
	rval=
	Echo "[y/n,q] \\c"
	read YNQ
	if [ -z "$YNQ" ]
	then
		VALID_YNQ=$FALSE
		rval=$INVALID
	else
		case "$YNQ" in
		[Yy]*)
			VALID_YNQ=$TRUE
			rval=$YES
			;;
		[Nn]*)
			VALID_YNQ=$TRUE
			rval=$NO
			;;
		[Qq]*)
			VALID_YNQ=$TRUE
			rval=$QUIT
			;;
		*)
			VALID_YNQ=$FALSE
			rval=$INVALID
			;;
		esac
	fi
	if [ $rval -eq $INVALID ]
	then
		beep
		Echo "Invalid Response..."
	fi
	return $rval
}


IsYNQLoop() {
	rval=$INVALID
	query_string="$1"
	valid_response=$FALSE
	while [ $valid_response -eq $FALSE ]
	do
		Echo "$query_string \\c"
		IsYNQ
		rval=$?
		case "$rval" in
			$YES|$NO|$QUIT)
				valid_response=$TRUE
				;;
		esac
	done
	return $rval
}

###########################################################################
# IsYN handles Yes No responses
###########################################################################

IsYN(){
	VALID_YN=$FALSE
	YN=
	rval=
	Echo "[y/n] \\c"
	read YN
	if [ -z "$YN" ]
	then
		VALID_YN=$FALSE
		rval=$INVALID
	else
		case "$YN" in
		[Yy]*)
			VALID_YN=$TRUE
			rval=$YES
			;;
		[Nn]*)
			VALID_YN=$TRUE
			rval=$NO
			;;
		*)
			VALID_YN=$FALSE
			rval=$INVALID
			;;
		esac
	fi
	if [ $rval -eq $INVALID ]
	then
		beep
		Echo "Invalid Response..."
	fi
	return $rval
}


IsYNLoop() {
	rval=$INVALID
	query_string="$1"
	valid_response=$FALSE
	while [ $valid_response -eq $FALSE ]
	do
		Echo "$query_string \\c"
		IsYN
		rval=$?
		case "$rval" in
			$YES|$NO)
				valid_response=$TRUE
				;;
		esac
	done
	return $rval
}


#######################################################################
# MakeInstallPath:
# Allow people to specify nonexistent install directories however many
# levels deep they want.
#######################################################################

MakeInstallPath() {

	inst_path=$1
	sysfiles_backup_repository=${2:-sysfiles.bak}
	rval=$TRUE

	the_pwd=`pwd`
#	Echo "working dir = $the_pwd"

    first_char=`echo $inst_path | awk ' 
	{ print substr($0,0,1)
        } '`

    if [ $first_char != "/" ] 
    then
        echo_line
        beep
        Echo "$inst_path is not an absolute path!"
        Echo "The installation path must be specified relative to the root directory."
        Echo "Please choose a different installation path."
        echo_line
        rval=$FALSE
    fi

    echo $inst_path | awk ' 
	{ X = split($1,ARR,"/")
	    print X
	   for (i=2;i<=X;i=i+1) {
	      print ARR[i]
	    }
        } ' > $TMP_INSTALL_DIR/tmp.out

	set `cat $TMP_INSTALL_DIR/tmp.out`
	LEVELS=`expr $1 - 1`
	shift 
   
	i=1
	cd /
	while [ $i -le $LEVELS -a $rval -eq $TRUE ]
	do
		if [ -d "$1" ]
		then
			cd $1
#			Echo "changing to $1"
		 # the -a test is broken on some platforms.
#		elif [ -s "$1" ] || [ -c "$1" ] || [ -h "$1" ] || [ -b "$1" ] || [ -p "$1" ]
		elif [ -s "$1" ] || [ -c "$1" ]
		then
			echo_line
			beep
			Echo "`pwd`/$1 exists as a file!"
			Echo "You will need to either remove this file, or choose another install path"
			echo_line
			rval=$FALSE
		else
#			Echo "making $1 and changing to it"
			mkdir $1
            if [ ! -d "$1" ] 
            then
                echo_line
                beep
                Echo "Could not create directory `pwd`/$1 !"
                Echo "Please verify that you have all neccessary permissions to create this"
                Echo "directory and restart the install, or choose another install path."
                echo_line
                rval=$FALSE
            else
			    cd $1
            fi
		fi
#		echo $i $1
		i=`expr $i + 1`
		shift
	done

	#-------------------------------------------------------
	# Lets have somewhere to keep our system backup files
	#-------------------------------------------------------
	if [ ! -d ./$sysfiles_backup_repository ]
	then
		mkdir $sysfiles_backup_repository
	fi
	cd $the_pwd
#	Echo back to `pwd`
	rm -f $TMP_INSTALL_DIR/tmp.out
	return $rval
}

############################################################################
# GetInstallPath:
# Gets the installation path.  Had to break it out, since it can now be
# called from a number of different places
############################################################################

GetInstallPath() { 
	echo_line
	Echo "Though it is possible to install $FULL_PROD_NAME"
	Echo "in a directory other than the provided default, it is recommended only"
	Echo "under special circumstances.  Please consult the documentation."
	echo_line
	Echo
	Echo "Where do you wish to install $FULL_PROD_NAME?"
	Echo "[$DEFAULT_INST_PATH] \\c"
	read INSTALL_PATH
	if [ -z "$INSTALL_PATH" ]
	then
		INSTALL_PATH=$DEFAULT_INST_PATH
	fi

 
        # TMP_DIR should be $INSTALL_PATH/.tmp
	if [ "$OS_NAME" = "$UWARE7_INTEL_STRING" ] ||
       [ "$OS_NAME" = "$LINUX_INTEL_STRING" ] 
       
	then
        	TMP_DIR=$INSTALL_PATH/.tmp
	fi

}

############################################################################
# BackupCp:  Makes a "safe" backup copy of the passed in system file 
############################################################################

BackupCp() {

	sys_file=$1
	rval=$TRUE

	echo $sys_file | awk ' 
	{ X = split($1,ARR,"/")
	      print ARR[X]
        } ' > $TMP_INSTALL_DIR/tmp.out

	set `cat $TMP_INSTALL_DIR/tmp.out`
	cp $sys_file $INSTALL_PATH/$SYSFILES_BACKUP_REPOSITORY/$1.bak

	if [ ! -r $INSTALL_PATH/$SYSFILES_BACKUP_REPOSITORY/$1.bak ]
	then
		rval=$FALSE
	fi

	rm -f $TMP_INSTALL_DIR/tmp.out
	return $rval
}


IsScoRootUser() {

	rval=$FALSE

	if [ -r /bin/who ]
	then
		set `/bin/who am i`
		if [ $1 = "root" ]
		then
			rval=$TRUE
		fi
	fi
	return $rval
}


############################################################################
# IsRootUser: Verifies root authority
############################################################################

IsRootUser() {

	rval=$FALSE

	root_string=`id | grep root`

	if [ -z "$root_string" ]
	then
		rval=$FALSE
		echo_line
		beep
		Echo "$0 could not verify root execution privileges using"
		Echo "the 'id' command"
		echo_line
	else
		rval=$TRUE
	fi
	
	return $rval
}

############################################################################
# PickColorScheme:  Allows usr to decide on monchrome vs color 
############################################################################

PickColorScheme() {
	Echo
	echo_line
	Echo "If you will be using the Motif version of the User Interface on a "
	Echo "monochrome monitor, using the Monochrome Coloring scheme is recommended."
    Echo
	echo_line
	Echo "		1) Use Default Color scheme"
	Echo "		2) Use Monochrome Color scheme"
	echo
	valid_color_scheme=$FALSE
	while [ $valid_color_scheme -eq $FALSE ]
	do
		Echo "Which color scheme do you wish to use [1]? \\c"
		read color_scheme
		if [ -z "$color_scheme" ] || [ "$color_scheme" = "1" ]
		then
			valid_color_scheme=$TRUE
			UI_MONO_COLOR_SCHEME=$FALSE
		else
			if [ "$color_scheme" = "2" ]
			then
				UI_MONO_COLOR_SCHEME=$TRUE
				valid_color_scheme=$TRUE
			else
				valid_color_scheme=$FALSE
			fi
		fi
	done
}


############################################################################
# DisplayOverview: Displays overview of install procedure
############################################################################

DisplayOverview() {

more <<-!
     This install script will install an American Power Conversion
UNIX Product.  The script will prompt you for the following :

    1) The product you wish to install
    2) Which, if any APC hardware you are using with the software
    3) The operating system you are installing on
    4) If the product requires a dedicated serial port, the port name
    5) Where you intend to install the product.
    6) Whether you want to execute command files as root or pwrchute user
    7) Whether you want to send e-mail as root or pwrchute user

	If the product is already installed, or a previous version
is detected, you will be notified and prompted as to whether or not you wish 
to remove the old version.  

	None of your installation choices will take effect until you 
explicitly confirm them at the end of the selection process.

After confirming your installation choices, this script will:

	- Verify that all necessary files are present
	- Check binary compatibility
	- Confirm selected serial device as valid
	- Back up all appropriate system files
	- Modify the appropriate system files
	- Confirm ability to perform serial communications
	- Modify the powerchute.ini appropriately

------------------------------------------------------------
All important Notices and Warnings will be printed in boxes.
------------------------------------------------------------

!
Echo	
HitAnyKey

}

############################################################################
# Get device 
############################################################################

GetDeviceName() {

	pwd=`pwd`	
	valid_media=$FALSE
	min_media=1
	max_media=3
	media_type=-1
	CD_INSTALL=$FALSE
	FLOPPY_INSTALL=$FALSE
	TAPE_INSTALL=$FALSE

	Echo "			1) CD-ROM"
	Echo "			2) Floppy"
	Echo "			3) Tape"
	Echo

	while [ $valid_media -eq $FALSE ]
	do
		Echo "Select the media type from which you will install: [?] \\c"
		read media_type
		Echo
		case "$media_type" in
			1)
				CD_INSTALL=$TRUE
				valid_media=$TRUE

				Echo "Enter path to mounted CD ROM [$pwd] \\c"
				read tmp_enter
				if [ -z "$tmp_enter" ]
				then
					DEVICE_NAME=$pwd
				else
					DEVICE_NAME=$tmp_enter
				        
				fi
				;;
			2)
				FLOPPY_INSTALL=$TRUE
				valid_floppy=$FALSE
				valid_media=$TRUE
				while [ $valid_floppy -eq $FALSE ]
				do
					Echo "Enter name of raw floppy device [?] \\c"
					read tmp_enter
					Echo
					IsYNQLoop "is $tmp_enter correct?"
					case "$?" in
					$YES)
						valid_floppy=$TRUE
						DEVICE_NAME=$tmp_enter
						;;
					$NO)
						valid_floppy=$FALSE
						Echo
						;;
					$QUIT)
						exit
						;;
					esac
				done
				;;
			3)	
				TAPE_INSTALL=$TRUE
				valid_tape=$FALSE
				valid_media=$TRUE
				while [ $valid_tape -eq $FALSE ]
				do
					Echo "Enter name of tape device [?] \\c"
					read tmp_enter
					Echo
					IsYNQLoop "Is $tmp_enter correct?"
					case "$?" in
					$YES)
						valid_tape=$TRUE
						DEVICE_NAME=$tmp_enter
						;;
					$NO)
						valid_tape=$FALSE
						Echo
						;;
					$QUIT)
						exit
						;;
					esac
				done
				;;
			*)
			    beep
			    Echo "Invalid Selection..."
			    valid_media=$FALSE
			    ;;
		esac
    
	done
}



#######################################################################
# Ask about TCP/IP
#######################################################################
 
AskAboutTCP() {

if [ $INST_DAEMON -eq $TRUE ] 
then
 
        Echo
        echo_line
        Echo "$FULL_PROD_NAME is able to monitor other hosts.  However, in order
 to monitor other hosts TCP/IP must be installed. If you do not have TCP/IP"
        Echo "installed, answer 'n' to the following question."
        echo_line
        Echo
        IsYNQLoop "Do you currently have TCP/IP Installed?"
        case "$?" in
        $YES)
                USE_TCP=$TRUE
                ;;
        $NO)
                USE_TCP=$FALSE
                ;;
        $QUIT)
 
               Quit
                ;;
        esac
fi

}
 

############################################################################
# IniMod: Modifies powerchute.ini file.  Returns FALSE when last number is
# reached, so IniMod can be used in a loop.  MAKE SURE TO INCREMENT
# $last_num appropriately when additional fields are added.
############################################################################

IniMod() {

	tmp_file="$TMP_INSTALL_DIR/tmp.apc"
	last_num=18
	
	cp powerchute.ini $tmp_file
	cp powerchute.ini powerchute_ini.bak

	if [ $1 -le $last_num ]
	then
	rval=$TRUE
	case "$1" in
	1)
		sed s!GSUB_TTY_HERE!"$INST_TTY"!g $tmp_file > powerchute.ini
		;;
	2)
		sed s/GSUB_SIGTYPE_HERE/"$SIGNAL_TYPE"/g $tmp_file > powerchute.ini
		;;
	3)
		if [ $MEASURE_UPS -eq $TRUE ]
		then
			sed s/GSUB_MUPS_HERE/YES/g $tmp_file > powerchute.ini
		else
			sed s/GSUB_MUPS_HERE/NO/g $tmp_file > powerchute.ini
		fi
		;;
	4)	
		if [ $UI_MONO_COLOR_SCHEME -eq $TRUE ]
		then
			sed s/GSUB_UI_WARNCOLOR_HERE/"$MONO_WARN_COLOR_STRING"/g $tmp_file > powerchute.ini
		else
			sed "/GSUB_UI_WARNCOLOR_HERE/d" $tmp_file > powerchute.ini
		fi
		;;
	5)
		if [ $UI_MONO_COLOR_SCHEME -eq $TRUE ]
		then
			sed "s/GSUB_UI_ERRCOLOR_HERE/$MONO_ERR_COLOR_STRING/g" $tmp_file > powerchute.ini
		else
			sed "/GSUB_UI_ERRCOLOR_HERE/d" $tmp_file > powerchute.ini
		fi
		;;
	6)
                sed s!GSUB_ALLOWED_PORTS_HERE!"$ALLOWED_PORT_NAMES"!g $tmp_file > powerchute.ini
		;;

	7)
		if [ $USE_TCP -eq $TRUE ]
                then
                        sed s/GSUB_USETCP_HERE/YES/g $tmp_file > powerchute.ini
                else
                        sed s/GSUB_USETCP_HERE/NO/g $tmp_file > powerchute.ini
                fi
		;;
	8)
                sed s/GSUB_CHANGE1_HERE/"$SYMSTR1"/g $tmp_file > powerchute.ini
                ;;
	9)
                sed s/GSUB_CHANGE2_HERE/"$SYMSTR2"/g $tmp_file > powerchute.ini
                ;;
	10)	
		sed s/GSUB_TIMEOUT_HERE/"$SYMSTR13"/g $tmp_file > powerchute.ini
		;;
	11)
		sed s/GSUB_ACTIONS_HERE/"$SYMSTR3"/g $tmp_file > powerchute.ini
		;;
	12)
		sed s/GSUB_CHANGE13_HERE/"$SYMSTR14"/g $tmp_file > powerchute.ini
		;;
	13)	
		if [ $RUN_COMMAND_FILES_AS_ROOT -eq $TRUE ]
                then
                        sed s/GSUB_COMMAND_FILES_AS_ROOT_HERE/YES/g $tmp_file > powerchute.ini
                else
                        sed s/GSUB_COMMAND_FILES_AS_ROOT_HERE/NO/g $tmp_file > powerchute.ini
                fi
		;;  
	14)
	        if [ $SEND_EMAIL_AS_ROOT -eq $TRUE ]
                then
                        sed s/GSUB_SEND_EMAIL_AS_ROOT_HERE/YES/g $tmp_file > powerchute.ini
                else
                        sed s/GSUB_SEND_EMAIL_AS_ROOT_HERE/NO/g $tmp_file > powerchute.ini
                fi
		;;
        15)
            if [ $INSTALL_HTML_HELP -eq $TRUE ]
            then
                if [ -n "$WEB_BROWSER" ]
                then
                    sed s!GSUB_WEB_BROWSER_HERE!"$WEB_BROWSER"!g $tmp_file > powerchute.ini
                else
                    sed s!GSUB_WEB_BROWSER_HERE!!g $tmp_file > powerchute.ini
                fi
            else
                sed s!GSUB_WEB_BROWSER_HERE!"Not Installed"!g $tmp_file > powerchute.ini
            fi
        ;;
	16)
	       if [ -n "$MODEM_PORT_NAME" ]
	       then
		    sed s!GSUB_MODEM_PORT_NAME!"$MODEM_PORT_NAME"!g $tmp_file > powerchute.ini
	       else
		    sed s/GSUB_MODEM_PORT_NAME/""/g $tmp_file > powerchute.ini
	       fi
	       ;;
        17)
               sed s!GSUB_CABLE_TYPE_HERE!"$CABLE_TYPE"!g $tmp_file > powerchute.ini
               ;;
	$last_num)
	       if [ -n "$MODEM_ALLOWED_PORT_NAMES" ]
	       then
		    sed s!GSUB_MODEM_ALLOWED_PORT_NAMES!"$MODEM_ALLOWED_PORT_NAMES"!g $tmp_file > powerchute.ini
	       else
		    sed s/GSUB_MODEM_ALLOWED_PORT_NAMES/""/g $tmp_file > powerchute.ini
	       fi
	       ;;
	esac

	else
		rval=$FALSE
	fi

	rm -f $tmp_file
	rm -f powerchute_ini.bak

	return $rval
}	



ModifyWrapperStartScript() {

	TARGET=$1

	cp ./$TARGET ./$TARGET.tmp
	rm -f ./$TARGET

	sed s!GSUB_PWRCHUTE_ENV_HERE!$INSTALL_PATH!g ./$TARGET.tmp > ./$TARGET

    # Unixware 7 no longer needs this to be done. Each wrapper script now has
    # TMPDIR=$PWRCHUTE/.tmp 
    # Also no longer needs to be done in Linux

    if [ "$OS_NAME" != "$UWARE7_INTEL_STRING" ] ||
       [ "$OS_NAME" = "$LINUX_INTEL_STRING" ] 
    
	then
		cp ./$TARGET ./$TARGET.tmp
		rm -f ./$TARGET

		sed s!GSUB_TMPDIR_HERE!$TMP_DIR!g ./$TARGET.tmp > ./$TARGET
	fi


	if [ ! -r ./$TARGET  ]
	then
		echo_line
		beep
		Echo "Error creating script: $TARGET. Quitting"
		echo_line
		Echo
	else
		rm -f $TARGET.tmp
	fi
}

	
CheckDiskRequirements() {
#-------------------------------------------------------------------------
# We can be more sophisticated here, but for now we will just guarentee that
# there is enough space to install the whole product.  We will worry about
# revising the method to take into consideration partial installs later.
# The only special OS we need to worry about is Solaris 2X, which ships with
# 3 front end binarys.
#-------------------------------------------------------------------------
	if [ $# -ne 5 ]
	then
		Echo $#
		Echo "Improper use of CheckDiskRequirements()"
		Quit
	fi
	os_name=$1; inst_ui=$2;	inst_daemon=$3;	inst_path=$4; relax_flag=$5
	solaris2_total=8500000 #bytes Req to Install
	other_total=6500000    #bytes Req to Install
	rval=
	target_size=
	comp_total=

	if [ $relax_flag -eq $FALSE ]
	then
		set `du -s $inst_path/..`
		target_size=$1
		target_size=`expr $target_size \* $OS_BLOCK_SIZE`

		if [ "$inst_os" = "$SOL2_SPARC_STRING" ]
		then
			comp_total=$solaris2_total
		else
			comp_total=$other_total
		fi

		if [ $target_size -lt $comp_total ]
		then
			rval=$FALSE
		else
			rval=$TRUE
		fi
	else
		rval=$TRUE
	fi

	if [ $rval -eq $FALSE ]
	then
		echo_line
		Echo "WARING: $inst_path does not contain enough space to"
		Echo "successfully complete an installation ($target_size bytes).  You should" 
		Echo "select a partition with at least $comp_total bytes."
		echo_line
	fi
	return $rval
}


	
CheckCharFiles() {
#----------------------------------------------------------------------------
# Check the Character distribution Files
#----------------------------------------------------------------------------
	os_name=$1
	IsFound c_pchute.frl
	IsFound c_pchute.hlp
	IsFound _cpwrchute
	IsFound powerchute
}


CheckXFiles() {
#----------------------------------------------------------------------------
# Check the X distribution Files
#----------------------------------------------------------------------------
	os_name=$1

	#IsFound pwrchute.hlp
	IsFound _xpwrchute
	IsFound pwrchute.uid
	IsFound xpowerchute
}

SetFilePermissions() {

	inst_path=$1
	chmod go-wx,u+rw $inst_path
	cd $inst_path
	chmod go-wx .
	chmod go-rwx,u+rx,u-w *.sh
	(chmod ugo+x,ugo-rw _xpwrchute _cpwrchute upsd powerchute xpowerchute) 2>/dev/null
	chmod go-w *.ini
	(chmod ugo-wx pwrchute*) 2>/dev/null
	
}


TmpFloppyLink() {

	floppy_dev=$1
	ln -s $floppy_dev $TMP_FLOPPY_DEV
}


CDInsureCase() {
	#Lets standardize on the case of $COMMON_FILES

	device_name=$1
	lower_common=`Echo $COMMON_FILES | tr "[A-Z]" "[a-z]"`
	if [ -r $device_name/$lower_common ]
	then
		COMMON_FILES=$lower_common
		TAR_FILE=`Echo $TAR_FILE | tr "[A-Z]" "[a-z]"`
		FE=`Echo $FE | tr "[A-Z]" "[a-z]"`
		BE=`Echo $BE | tr "[A-Z]" "[a-z]"`
		CO=`Echo $CO | tr "[A-Z]" "[a-z]"`
	fi
}

DisplayBetaDisclaimer() {

	Echo "****************************************************************************"
	Echo "NOTICE: $FULL_PROD_NAME, Beta v$PROD_HEADER${BETA_VERSION}"
	Echo
	Echo "This BETA software is not yet certified for general production.  It may"
	Echo "yet contain further errors that can adversely affect your system."
	Echo
	Echo "DUE TO THIS POSSIBILITY, APC DOES NOT RECOMMEND THAT YOU INSTALL THIS"
	Echo "SOFTWARE ON PRODUCTION SYSTEMS"
	Echo 
	Echo "****************************************************************************"
}


CheckEepromUps() {

	eeprom=$1
	dev_name=$2
	set `./ups_adjust -in -d$dev_name -c$eeprom -t$CABLE_TYPE 2>/dev/null`
	while [ ! -z "$2" ]
	do
		if [ "$1" = "FV" ]
		then
			firmware="$2"
		elif [ "$1" = "2G+" ]
		then
			if [ "$2" = "TRUE" ]
			then
				Is2g=$TRUE
			else
				Is2g=$FALSE
			fi
		elif [ "$1" = "VAL" ]
		then
			current=$2
		fi
		shift;
		shift;
	done
	if [ $Is2g -eq $TRUE ]
	then
		if [ `expr $current \> 20` -eq 1 ]
		then
			rval=$FALSE
		else
			rval=$TRUE
		fi
	else
		rval=$FALSE
	fi
	return $rval
}

CheckDipSwitches() {

	dev_name=$1
	okay_flag=$FALSE
	rval=$FALSE

	while [ $okay_flag -eq $FALSE ]
	do
		set `./ups_adjust -sn -d$dev_name -c7 -t$CABLE_TYPE 2>/dev/null`
		if [ "$2" != "NA" ]
		then
		    if [ -z "$2" ] || [ $2 -ne 0 ]
		    then
			echo_line
			beep
			Echo "Your UPS will not accept an attempt to change its eeproms."
			Echo "If your UPS has dip switches on the back panel, check that they are all in"
			Echo "'On' position.  After installation, you can set them back to their"
			Echo "original state if you wish."
			echo_line
			continue_loop_flag=$TRUE
			while [ $continue_loop_flag -eq $TRUE ]
			do
				Echo "Do you wish to Retry setting this value, or Continue on with"
				Echo "the installation? [R/C] \\c"
				read response
				if [ -z "$response" ]
				then
					beep
					Echo "Invalid response..."
				else
					case "$response" in
						[Cc]*)
							continue_loop_flag=$FALSE
							okay_flag=$TRUE
						;;
						[Rr]*)
							continue_loop_flag=$FALSE
							okay_flag=$FALSE
							Echo
						;;
						*)
							beep
							Echo "Invalid Response..."
						;;
					esac
				fi
			done	
					
		    else 
			okay_flag=$TRUE
			rval=$TRUE
		    fi
		else
		    okay_flag=$TRUE
		    rval=$TRUE
		fi
	done
	return $rval
}


# This function takes an eeprom and a device name and
# it determines the current setting of the eeprom and
# returns this value. It returns -1 on error.
GetCurrentEepromSetting() {
    eeprom=$1
    dev_name=$2
   
    ret_val="-1"
    set `./ups_adjust -in -d$dev_name -c$eeprom -t$CABLE_TYPE 2>/dev/null`
    
    while [ "$1" ]
    do
	if [ "$1" = "VAL" ]
	then
	    if [ -n "$2" ]
	    then
		ret_val="$2"
	    fi
	fi
	shift
    done 
    return $ret_val
}


# This functions takes an eeprom, a check value, and a device
# name and it determines the next valid eeprom setting value
# greater than the check value. 
GetNextEepromValueGreaterThan() {   
    eeprom=$1
    check_value=$2
    dev_name=$3
    
    ret_val=-1
    starting_val=-1
    GetCurrentEepromSetting $eeprom $dev_name
    starting_val="$?"

    if [ "$starting_val" -ne "-1" ]
    then
	done=$FALSE
        previous_val=$starting_val
	while [ $done -eq $FALSE ]
	do
	    set `./ups_adjust -sn -d$dev_name -c$eeprom -t$CABLE_TYPE 2>/dev/null`
	    if [ "$2" -eq "$starting_val" ]
	    then
		done=$TRUE
	    else
		if [ "$2" -gt "$check_value" ]
		then
		    if [ "$2" -lt "$previous_val" ]
		    then
			ret_val="$2"
		    fi
		fi
	    fi
	    previous_val="$2"
	    Echo ".\\c"
	done
    fi
    
    return $ret_val
}


CycleUntilAcceptableValue() {

	eeprom=$1
	current_value=$2
	desired_value=$3
	dev_name=$4
	okay_flag=$FALSE
	rval=$FALSE
	
	while [ $okay_flag -eq $FALSE ]
	do
		Echo ".\\c"
		set `./ups_adjust -sn -d$dev_name -c$eeprom -t$CABLE_TYPE 2>/dev/null`
		if [ "$2" -eq "$desired_value" ]
		then
			okay_flag=$TRUE
			rval=$TRUE
		elif [ "$2" -eq "$current_value" ]
		then
			#We either can't change the value, or we are back
			#where we started and our desired value never turned up
			okay_flag=$TRUE
			echo_line
			beep
			Echo "Unable to modify the value of this eeprom.  If you are unable to"
			Echo "change this value through the powerchute user interface, refer to the UPS"
			Echo "manual, or contact APC Technical Support."
			echo_line
			HitAnyKey
		fi
	done
	Echo
}

EepromAdjustments() {

	os=$1
	dev_name=$2
	
	case "$os" in
	$AIX3|$AIX4|$UWARE1|$UWARE2|$HPUX10|$UWARE7|$LINUX)
		CheckEepromUps "p" $dev_name
		if [ "$?" -eq $TRUE ]
		then
			beep
			echo_line
			Echo "Due to the amount of time it can take UNIX platforms to shutdown,"
			Echo "it is sometimes necessary to increase the eeprom parameter UpsTurnOffDelay"
			Echo "within the UPS.  This is in order to allow sufficient time for the"
			Echo "Operating System to shutdown completely."
			echo_line
			Echo "* Doing this is recommended for the $OS_NAME Operating System *"
			echo_line

			IsYNLoop "Do you wish to increment the UpsTurnOffDelay to its next highest\nvalue now?"
			if [ "$?" -eq $YES ]
			then
				CheckDipSwitches $dev_name
				if [ "$?" -eq $TRUE ]
				then
					Echo "Please wait.\\c"
					desired_val="180"
					GetNextEepromValueGreaterThan "p" "20" "$dev_name"
					next_value="$?"
					if [ "$next_value" -ne "-1" ]
					then
					    desired_val=$next_value
					fi
										
					current_val="20"
					GetCurrentEepromSetting "p" "$dev_name"
					current_eeprom="$?"
					if [ "$current_eeprom" -ne "-1" ]
					then
					    current_val="$current_eeprom"
					fi
										
					CycleUntilAcceptableValue "p" "$current_val" "$desired_val" "$dev_name"
					if [ "$?" -eq $TRUE ]
					then
						Echo
						beep
						Echo "UpsTurnOffDelay successfully set at $desired_val."
					fi
				fi
			fi
		else
			Echo "Eeproms okay."
		fi		
		;;
	esac

}

GetOSNumber() {
OS=$1
#OS_VERSION=
  case "$OS" in
	[Ss][Oo][Ll]2)
 		OS_VERSION=1
		;;
	[Ss][Uu][Nn]4)
 		OS_VERSION=2
		;;
	[Ii][Ss][Oo][Ll]2)
 		OS_VERSION=3
		;;
	[Aa][Ii][Xx]3)
 		OS_VERSION=4
		;;
	[Aa][Ii][Xx]4)
 		OS_VERSION=401
		;;
	[Hh][Pp]9)
 		OS_VERSION=5
		;;
	[Hh][Pp]10)
 		OS_VERSION=501
		;;
	[Ss][Cc][Oo])
 		OS_VERSION=6
		;;
	[Uu][Ww][Aa][Rr][Ee]7)
 		OS_VERSION=601
 		;;	
	[Nn][Cc][Rr])
 		OS_VERSION=7
		;;
	[Ss][Gg][Ii])
 		OS_VERSION=8
		;;
	[Uu][Ww][Aa][Rr][Ee]1)
 		OS_VERSION=9
		;;
	[Uu][Ww][Aa][Rr][Ee]2)
 		OS_VERSION=901
		;;
	[Oo][Ll][Ii][Vv])
 		OS_VERSION=10
		;;
	[Rr][Ss][Ii][Nn][Ii][Xx])
 		OS_VERSION=11
		;;
	[Uu][Nn][Ii][Ss][Yy][Ss])
 		OS_VERSION=12
		;;
	[Oo][Ss][Ff]1)
 		OS_VERSION=14
		;;
		
	*)
 		OS_VERSION= 
		;;
  esac
return $OS_VERSION
}

#######################################################################
# Trap signals so we can clean up temp files
#######################################################################

trap 'Echo \\nsignal caught, Quitting.;rm -f $TMP_INSTALL_DIR/$APC_DETECT_FILE;exit' 1 2 15


# ---------------------------------------------------------------------
# ----------------------------- Start ---------------------------------
# ---------------------------------------------------------------------

if [ $# -gt 0 ] 
then
  GetOSNumber $1
  FORCED_OS_VERSION=$?
else
  FORCED_OS_VERSION=
fi

clear
if [ $IN_BETA -eq $TRUE ]
then
	beep
	DisplayBetaDisclaimer
Echo
IsYNQLoop "Do you wish to continue?"
case "$?" in
	$NO|$QUIT)
		exit
	;;
esac
clear
fi

#if [ "$1" = "-relax" ]
#then
	CHKRELAX_FLAG=$TRUE
#fi


#######################################################################
# Print Banner
#######################################################################
Echo "-----------------------------------------------------------------------"
Echo "         PowerChute Plus for UNIX v$PROD_HEADER Installation Script"
Echo "             Copyright American Power Conversion 2000"
Echo "-----------------------------------------------------------------------"
Echo "If you quit this script at any time before committing your choices, "
Echo "the installation will not take place, and no modifications will be made "
Echo "to your currently installed PowerChute products"
Echo


#######################################################################
# Get a device name
#######################################################################
	
GetDeviceName

#######################################################################
# Verify root authority 
#######################################################################

IsRootUser

if [ $? -eq $FALSE ]
then
	echo_line
	beep
	Echo "$INST_SCRIPT_NAME must be run with root privileges!"
	echo_line
	echo_line
	Echo "Do you wish to continue anyway? [N/y] \\c"
	read YN
	case "$YN" in
		[Nn]*)
			exit
			;;
		[Yy]*)
			;;
		*)
			exit
		;;
	esac
else
	ROOT_USER=$TRUE
fi

#######################################################################
# Set up powerchute install tmp directory - $TMP_INSTALL_DIR
#######################################################################

# Remove apc detect file if present in temp directory
if [ -r $TMP_INSTALL_DIR/$APC_DETECT_FILE ]
then
	rm -f $TMP_INSTALL_DIR/$APC_DETECT_FILE
fi

# Have to actually check /tmp for older versions of pwrchute
if [ -r /tmp/$APC_DETECT_FILE ]
then
	rm -f /tmp/$APC_DETECT_FILE
fi 

# if temp install directory does not exist, then create
if [ ! -d $TMP_INSTALL_DIR ]
then 
        mkdir $TMP_INSTALL_DIR
        chmod go-wx,u+rw $TMP_INSTALL_DIR
fi
	


#######################################################################
# Check to see if users would like an overview
#######################################################################


Echo 
IsYNQLoop "Would you like to see an overview of the Installation?"
case "$?" in
	$YES)
		clear
		DisplayOverview
		;;
	$QUIT)
		exit
		;;
esac



#######################################################################
# Support for Remote Install
#######################################################################

if [ -z "$2" ]
then
	BUILD_REMOTE=$FALSE
else
	if [ $2 = "build_remote" ] 
	then
		BUILD_REMOTE=$TRUE
		Echo
		Echo "Upon completion of this script, a new script named $REMOTE_INST_SCRIPT_NAME will "
		Echo "be written in the current directory for remote product installations"
		Echo "NOTE: Remote script building is not supported in script revision 1.185"
		Echo
	fi
fi




#######################################################################
# If we are installing $POWERCHUTE_PLUS, then give the option to only 
# install the front end, backend, or both
#######################################################################

if [ $PROD_NAME = "$POWERCHUTE_PLUS" ]
then
	Echo
	echo_line
	Echo "The User Interface module of this product is capable of monitoring any system"
	Echo "on your network running the Daemon module of $FULL_PROD_NAME."
	Echo "For this reason, you may feel it is only appropriate to install the entire"
	Echo "distribution on certain systems."
	echo_line
	Echo "NOTE: In order to perform any sort of UPS monitoring, including shutdown due"
	Echo "to power failure, you must install at least the Daemon module of the product!"
	echo_line
	
	VALID_INST_TYPE=$FALSE
	INST_TYPE_NUM=-1
	while [ $VALID_INST_TYPE -eq $FALSE ]
	do
		Echo
		Echo "		1) User Interface Module Only"
		Echo "		2) Daemon Module Required for UPS Monitoring Only"
		Echo "		3) Both the User Interface and Daemon Modules"
		Echo
		Echo "Which Parts of $FULL_PROD_NAME do you wish to install? [?] \\c"
		read INST_TYPE_NUM
		if [ -z "$INST_TYPE_NUM" ]
		then
			INST_TYPE_NUM=-1
		fi

		INST_COMMON=$TRUE

		case "$INST_TYPE_NUM" in
		1)
			INST_UI=$TRUE
			INST_DAEMON=$FALSE
			NEED_DEDICATED_TTY=$FALSE
			VALID_INST_TYPE=$TRUE
			;;
		2)
			INST_UI=$FALSE
			INST_DAEMON=$TRUE
			VALID_INST_TYPE=$TRUE
			;;
		3)
			INST_UI=$TRUE
			INST_DAEMON=$TRUE
			VALID_INST_TYPE=$TRUE
			;;
		*)
			beep
			Echo "Invalid selection...."
			VALID_INST_TYPE=$FALSE
			;;
		esac
	done
fi



#######################################################################
# Select an APC Hardware Product
#######################################################################

if [ $INST_DAEMON -eq $TRUE ]
then

	VALID_HARDWARE_SELECTED=$FALSE 
	MAX_HARDWARE=6
	MIN_HARDWARE=1	
	INST_HARDWARE=
	while [ $VALID_HARDWARE_SELECTED -eq $FALSE ]
	do
		Echo 
		Echo "                1) Matrix-UPS"
		Echo "                2) Smart-UPS"
		Echo "                3) Back-UPS"
		Echo "                4) Back-UPS Pro"
		Echo "                5) Symmetra Power Array"
		Echo "                6) Smart-UPS DP"
		Echo " "
		Echo "Which APC Hardware will $FULL_PROD_NAME be running with [?] \\c"
		read INST_HARDWARE
		if [ -z "$INST_HARDWARE" ]
		then
			INST_HARDWARE=-1
		fi
		if [ $INST_HARDWARE -le $MAX_HARDWARE ] && 
		[ $INST_HARDWARE -ge $MIN_HARDWARE ]
		then
			VALID_HARDWARE_SELECTED=$TRUE
			case "$INST_HARDWARE" in
			1)
				APC_HARDWARE_PROD="Matrix"
				SIGNAL_TYPE=$SMART
                                SYMSTR1=$NOT_SYM1
				SYMSTR2=$NOT_SYM2
				SYMSTR13=$NOT_SYM3
				SYMSTR14=$NOT_SYM4
				SYMSTR3=$SYM5
				
				;;
			2)
				APC_HARDWARE_PROD="SmartUps"
				SIGNAL_TYPE=$SMART
                                SYMSTR1=$NOT_SYM1
				SYMSTR2=$NOT_SYM2
				SYMSTR13=$NOT_SYM3
				SYMSTR14=$NOT_SYM4
				SYMSTR3=$SYM5
				;;
			3)
				APC_HARDWARE_PROD="BackUps"
				SIGNAL_TYPE=$SIMPLE
                                SYMSTR1=$NOT_SYM1
				SYMSTR2=$NOT_SYM2
				SYMSTR13=$NOT_SYM3
				SYMSTR14=$NOT_SYM4
				SYMSTR3=$SYM5
				# No way to verify comm for simple sig, assume
				# OK to skip warning banner
				COMM_VERIFIED=$TRUE
				IS_MODEM_PORT=$TRUE
				;;
			4)
				APC_HARDWARE_PROD="SmartUps"
				SIGNAL_TYPE=$SMART
                                CABLE_TYPE=$PNP
                                SYMSTR1=$NOT_SYM1
				SYMSTR2=$NOT_SYM2
				SYMSTR13=$NOT_SYM3
				SYMSTR14=$NOT_SYM4
				SYMSTR3=$SYM5
				;;
                        5)      
				APC_HARDWARE_PROD="Symmetra"
                                SIGNAL_TYPE=$SMART
                                SYMSTR1=$SYM1
				SYMSTR2=$SYM2
				SYMSTR13=$SYM10
				SYMSTR14=$SYM11
				SYMSTR3=$NOT_SYM5
                                ;;
			6)
				APC_HARDWARE_PROD="SmartUps"
				SIGNAL_TYPE=$SMART
                                SYMSTR1=$NOT_SYM1
				SYMSTR2=$NOT_SYM2
				SYMSTR13=$NOT_SYM3
				SYMSTR14=$NOT_SYM4
				SYMSTR3=$SYM5
				;;
            esac
		else
			beep
			Echo "Invalid Selection...."
		fi
	done
fi

#######################################################################
# Ask about MeasureUps
#######################################################################

if [ $INST_DAEMON -eq $TRUE ]
then

	if [ $SIGNAL_TYPE = $SMART ]
	then
		Echo
		echo_line
		Echo "The Measure-UPS is a device which is designed to perform environmental "
		Echo "monitoring in conjunction with $FULL_PROD_NAME"
		echo_line
	
		Echo 
		IsYNQLoop "Do you currently have a Measure-UPS attached to the UPS?"
		case "$?" in
		$YES)
			MEASURE_UPS=$TRUE
			;;
		$NO)
			MEASURE_UPS=$FALSE
			;;
		$QUIT)
			Quit
			;;
		esac

	else
		MEASURE_UPS=$FALSE
	fi
fi


#######################################################################
# Select a target Operating System
#######################################################################

VALID_OS_SELECTED=$FALSE
MAX_OS=15
MIN_OS=1
INST_OS=

if [ -n "$FORCED_OS_VERSION" ]
then
  INST_OS=$FORCED_OS_VERSION
else
  while [ $VALID_OS_SELECTED -eq $FALSE ]
  do
  Echo 
  Echo "                1)  Solaris 2.X for SPARC"
  Echo "                2)  SunOS 4.X (Solaris 1.X) for SPARC"
  Echo "                3)  Solaris 2.X for Intel"
  Echo "                4)  AIX for IBM RS6000"
  Echo "                5)  HPUX 10.X/11.X  (700/800 series)"
  Echo "                6)  SCO Unix/Unixware 7.X"
  Echo "                7)  NCR (AT&T UNIX)"
  Echo "                8)  SGI Irix"
  Echo "                9)  UnixWare 2.X"
  Echo "                10) Olivetti Unix Sys V Rel.4.0"
  Echo "                11) Siemens Unix (RISC)"
  Echo "                12) Unisys Unix Sys V Rel.4.0"
  Echo "                13) DEC OSF/1"
  Echo "                14) Linux"
  Echo 
  Echo "On which Operating System are you installing? [?] \\c"
  read INST_OS
  if [ -z "$INST_OS" ]
  then
  	INST_OS=-1
  fi
  if [ $INST_OS -le $MAX_OS ] && [ $INST_OS -ge $MIN_OS ]
  then
  	VALID_OS_SELECTED=$TRUE
  	case "$INST_OS" in
  	4)  		
		uname -v > $TMP_INSTALL_DIR/apc.tmp
		set `sed 's/..//' $TMP_INSTALL_DIR/apc.tmp`
		if [ $1 -gt 3 ]
		then
			INST_OS=401
		fi
		rm -f $TMP_INSTALL_DIR/apc.tmp
		;;
  	5)  		
		uname -r > $TMP_INSTALL_DIR/apc.tmp
		set `sed 's/..//' $TMP_INSTALL_DIR/apc.tmp`
		if [ $1 -gt 9 ]
		then
			INST_OS=501
		fi
		rm -f $TMP_INSTALL_DIR/apc.tmp
		;;

  	6)
  		set `uname -v`
		if [ $1 -ge 7 ]
		then
			# install SCO Unixware 7 instead of Openserver 5.0
   			INST_OS=601
		fi
		;;
  	
  	9)  		
		set `uname -v`
		if [ $1 -gt 1.99 ]
		then
			INST_OS=901	
		fi
		;;
	*)	
		;;
	esac
	
  else
	Echo "Invalid OS Selected"
  fi
  done
fi
  	case "$INST_OS" in
  	1)
		TAR_FILE=${SPARC}_SOL2
		OS_NAME="$SOL2_SPARC_STRING"
		TTY1="/dev/ttya"
		TTY2="/dev/ttyb"
		STARTUP_FILE_PATH="/etc/rc2.d"
		STARTUP_FILE="$STARTUP_FILE_PATH/S98upsd"
		SHUTDOWN_FILE="/sbin/rc0"
		SHUTDOWN_SEARCH_STRING="\/sbin\/umountall"
		OS_BLOCK_SIZE=512			
		;;
	2)
		TAR_FILE=${SPARC}_SUN4
		OS_NAME="$SUN4_SPARC_STRING"
		STARTUP_FILE="/etc/rc.APCupsd"
		STARTUP_SYSTEM_FILE="/etc/rc.local"
		SHUTDOWN_FILE="/etc/halt"
		TTY1="/dev/ttya"
		TTY2="/dev/ttyb"
		CHAR_UI_ONLY=$TRUE
		OS_BLOCK_SIZE=512			
		;;
	3)
		TAR_FILE=${INTEL}_SOL2
		OS_NAME="$SOL2_INTEL_STRING"
		TTY1="/dev/tty00"
		TTY2="/dev/tty01"
		STARTUP_FILE="/etc/rc2.d/S98upsd"
		SHUTDOWN_FILE="/sbin/rc0"
		SHUTDOWN_SEARCH_STRING="\/sbin\/umountall"
		OS_BLOCK_SIZE=512			
		CHAR_UI_ONLY=$TRUE
		DEFAULT_INST_PATH="/etc/powerchute"
		;;
	4)
		TAR_FILE=${RISC}_AIX3
		OS_NAME="$AIX_RISC_STRING"
		TTY1="/dev/tty0"
		TTY2="/dev/tty1"
		if [ -r /usr/sbin/shutdown ]
                then
                  SHUTDOWN_FILE="/usr/sbin/shutdown"
                else
                  SHUTDOWN_FILE="/etc/shutdown"
                fi
		SHUTDOWN_SEARCH_STRING="Unmount the file systems"
		STARTUP_SYSTEM_FILE="/etc/inittab"
		STARTUP_FILE="/etc/rc.APCupsd"
		SPECIAL_STARTUP_FLAGS=$TRUE
		STARTUP_ARGS="-n"
		OS_BLOCK_SIZE=512
		;;
	401)
		TAR_FILE=${RISC}_AIX4
		OS_NAME="$AIX_RISC_STRING"
		TTY1="/dev/tty0"
		TTY2="/dev/tty1"
		if [ -r /usr/sbin/shutdown ]
                then
                  SHUTDOWN_FILE="/usr/sbin/shutdown"
                else
                  SHUTDOWN_FILE="/etc/shutdown"
                fi
		SHUTDOWN_SEARCH_STRING="Unmount the file systems"
		STARTUP_SYSTEM_FILE="/etc/inittab"
		STARTUP_FILE="/etc/rc.APCupsd"
		SPECIAL_STARTUP_FLAGS=$TRUE
		STARTUP_ARGS="-n"
		OS_BLOCK_SIZE=512
		;;
	5)
		TAR_FILE=${PARISC}_HP9
		OS_NAME="$HPUX9X_PARISC_STRING"
		if [ $INST_DAEMON -eq $TRUE ] && [ $SIGNAL_TYPE = $SIMPLE ]
		then
			TTY1="/dev/ttyd00"
			TTY2="/dev/ttyd01"
		else	
			TTY1="/dev/tty00"
			TTY2="/dev/tty01"
		fi
		STARTUP_FILE="/etc/rc.APCupsd"
		STARTUP_SYSTEM_FILE="/etc/inittab"
		SHUTDOWN_FILE="/etc/reboot"
		OS_BLOCK_SIZE=512			
		;;
	501)
		TAR_FILE=${PARISC}_HP10
		OS_NAME="$HPUX10X_PARISC_STRING"
		if [ $INST_DAEMON -eq $TRUE ] && [ $SIGNAL_TYPE = $SIMPLE ]
		then
		        TTY1="/dev/ttyd0p0"
                        TTY2="/dev/ttyd1p0"
                else
                        TTY1="/dev/tty0p0"
                        TTY2="/dev/tty1p0"
		fi
		STARTUP_FILE="/etc/rc.APCupsd"
		STARTUP_SYSTEM_FILE="/etc/inittab"
		SHUTDOWN_FILE="/sbin/reboot"
		OS_BLOCK_SIZE=512			
		SKIP_PORT_VERIFICATION=$TRUE
		;;
	6)
	 	TAR_FILE=${INTEL}_SCO
		OS_NAME="$SCO_INTEL_STRING"
		if [ $INST_DAEMON -eq $TRUE ] && [ $SIGNAL_TYPE = $SIMPLE ]
		then
			TTY1="/dev/tty1A"
			TTY2="/dev/tty2A"
		else	
		    TTY1="/dev/tty1a"
			TTY2="/dev/tty2a"
		fi
		SHUTDOWN_FILE="/etc/rc0"
		SHUTDOWN_SEARCH_STRING="umountall"
		STARTUP_SYSTEM_FILE="/etc/rc.d/7/upsd.boot"
		STARTUP_FILE="/etc/rc.APCupsd"
		PROD_VERSION="4.2.2"
		
                # if we are installing on SCO Openserver 5, we want to remove 
                # TMP_INSTALL_DIR and use /tmp like previous 4.2.2 builds did

                if [ -d $TMP_INSTALL_DIR ]
		then
			cd $TMP_INSTALL_DIR
			rm -rf *
			cd ..
			rmdir $TMP_INSTALL_DIR
		fi	
	        
	        TMP_DIR="/tmp"
	        TMP_INSTALL_DIR="/tmp"
	        ;;	  
	601)
	    TAR_FILE=${INTEL}_UWARE7
	 	OS_NAME="$UWARE7_INTEL_STRING"
		if [ $INST_DAEMON -eq $TRUE ] && [ $SIGNAL_TYPE = $SIMPLE ]
		then
			TTY1="/dev/term/00m"
			TTY2="/dev/term/01m"
		else	
            TTY1="/dev/term/00t"
			TTY2="/dev/term/01t"
		fi
		SHUTDOWN_FILE="/sbin/rc0"
		SHUTDOWN_SEARCH_STRING="off)"
		STARTUP_SYSTEM_FILE="/etc/rc2.d/S98upsd.boot"
		STARTUP_FILE="/etc/rc.APCupsd"
		SHUTDOWN_COMMAND_STRING="if [ -r /upsoff.cmd ]     #POWERCHUTE\\
		then                      #POWERCHUTE\\
			 /upsoff.cmd  >/dev/null     #POWERCHUTE\\
			rm -f /upsoff.cmd #POWERCHUTE\\
		fi                        #POWERCHUTE"
		COMMON_FILES=COMMON_UWARE7
		PROD_VERSION="4.2.3"
		;;
	7)
		TAR_FILE=${INTEL}_NCR
		OS_NAME="$NCR_INTEL_STRING"
		if [ $INST_DAEMON -eq $TRUE ] && [ $SIGNAL_TYPE = $SMART ]
		then
			TTY1="/dev/term/00"
			TTY2="/dev/term/01"
		else
			TTY1="/dev/term/00s"
			TTY2="/dev/term/01s"
		fi
		CHAR_UI_ONLY=$TRUE
		NCR_INITTAB_BACKUP_FILE="/etc/conf/init.d/powerchute" 
		STARTUP_FILE_PATH="/etc/rc2.d"
		STARTUP_FILE="S98upsd"
                STARTUP_SYSTEM_FILE="/etc/inittab"
		SHUTDOWN_FILE="/sbin/rc0"
		#SHUTDOWN_SEARCH_STRING="\/sbin\/umountall"
		SHUTDOWN_SEARCH_STRING="system is down"
		DEFAULT_INST_PATH="/etc/powerchute"
		SKIP_PORT_VERIFICATION=$TRUE
		;;
	8)
		TAR_FILE=${MIPS}_SGI
		OS_NAME="$SGI_MIPS_STRING"
		SIGNAL_TYPE=$SPECIAL
		TTY1="/dev/ttyd1"
		TTY2="/dev/ttyd2"
		SMART_UPSD_ONLY=$TRUE
		X_UI_ONLY=$TRUE
		SVR4_STARTUP_PRIORITY=93
		STARTUP_FILE_PATH="/etc/rc2.d"
		STARTUP_FILE="/etc/rc2.d/S93upsd"
		SHUTDOWN_FILE="/etc/rc0"
		SHUTDOWN_SEARCH_STRING="killall"
		OS_BLOCK_SIZE=512
		;;
	9)
		TAR_FILE=${INTEL}_UWAR1
		OS_NAME="UnixWare"
		OS_NAME="$UWARE_INTEL_STRING"
		if [ $INST_DAEMON -eq $TRUE ] && [ $SIGNAL_TYPE = $SMART ]
		then
			TTY1="/dev/tty00s"
			TTY2="/dev/tty01s"
		else
			TTY1="/dev/tty00"
			TTY2="/dev/tty01"
		fi
		X_UI_ONLY=$TRUE
		SHUTDOWN_FILE="/sbin/rc0"
		STARTUP_FILE_PATH="/etc/rc2.d"
		STARTUP_FILE="$STARTUP_FILE_PATH/S98upsd"
		SHUTDOWN_SEARCH_STRING="umountall"
		SKIP_PORT_VERIFICATION=$TRUE
		;;
	901)
		TAR_FILE=${INTEL}_UWAR2
		OS_NAME="UnixWare"
		OS_NAME="$UWARE_INTEL_STRING"
		if [ $INST_DAEMON -eq $TRUE ] && [ $SIGNAL_TYPE = $SMART ]
		then
			TTY1="/dev/tty00s"
			TTY2="/dev/tty01s"
		else
			TTY1="/dev/tty00"
			TTY2="/dev/tty01"
		fi
		X_UI_ONLY=$TRUE
		SHUTDOWN_FILE="/sbin/rc0"
		STARTUP_FILE_PATH="/etc/rc2.d"
		STARTUP_FILE="$STARTUP_FILE_PATH/S98upsd"
		SHUTDOWN_SEARCH_STRING="umountall"
		SKIP_PORT_VERIFICATION=$TRUE
		SHUTDOWN_COMMAND_STRING="if [ -r /upsoff.cmd ]     #POWERCHUTE\\
		then                      #POWERCHUTE\\
			 /upsoff.cmd          #POWERCHUTE\\
			rm -f /upsoff.cmd #POWERCHUTE\\
		fi                        #POWERCHUTE"
		;;
	10)
		TAR_FILE=${INTEL}_OLIV
		OS_NAME="Olivetti"
		OS_NAME="$OLIVETTI_INTEL_STRING"
		if [ $INST_DAEMON -eq $TRUE ] && [ $SIGNAL_TYPE = $SMART ]
		then
			TTY1="/dev/tty00s"
			TTY2="/dev/tty01s"
		else
			TTY1="/dev/tty00"
			TTY2="/dev/tty01"
		fi
		CHAR_UI_ONLY=$TRUE
		SHUTDOWN_FILE="/sbin/rc0"
		STARTUP_FILE_PATH="/etc/rc2.d"
		STARTUP_FILE="$STARTUP_FILE_PATH/S98upsd"
		SHUTDOWN_SEARCH_STRING="umountall"
		;;
	11)
		TAR_FILE=${RISC}_SINIX
		OS_NAME="SINIX"
		OS_NAME="$SINIX_RISC_STRING"
		if [ $INST_DAEMON -eq $TRUE ] && [ $SIGNAL_TYPE = $SMART ]
		then
			TTY1="/dev/term/ser0"
			TTY2="/dev/term/ser1"
		else
			TTY1="/dev/term/ser0"
			TTY2="/dev/term/ser1"
		fi
		CHAR_UI_ONLY=$TRUE
		SHUTDOWN_FILE="/sbin/rc0"
		STARTUP_FILE_PATH="/etc/rc2.d"
		STARTUP_FILE="$STARTUP_FILE_PATH/S98upsd"
		SHUTDOWN_SEARCH_STRING="umountall"
		DEFAULT_INST_PATH="/etc/powerchute"
		STARTUP_PRIORITY_WARNING=$FALSE
		SKIP_PORT_VERIFICATION=$TRUE
		;;
    12)
        TAR_FILE=${INTEL}_USYS
        OS_NAME="Unisys"
        OS_NAME="$UNISYS_INTEL_STRING"
        if [ $INST_DAEMON -eq $TRUE ] && [ $SIGNAL_TYPE = $SMART ]
        then
            TTY1="/dev/tty00s"
            TTY2="/dev/tty01s"
        else
            TTY1="/dev/tty00h"
            TTY2="/dev/tty01h"
        fi
        CHAR_UI_ONLY=$TRUE
        SHUTDOWN_FILE="/sbin/rc0"
        STARTUP_FILE_PATH="/etc/rc2.d"
        STARTUP_FILE="$STARTUP_FILE_PATH/S98upsd"
        SHUTDOWN_SEARCH_STRING="umountall"
		SKIP_PORT_VERIFICATION=$TRUE
        ;;
    13)
		TAR_FILE=${ALPHA}_OSF1
		OS_NAME="$DEC_OSF1_STRING"
		X_UI_ONLY=$TRUE
		TTY1="/dev/tty00"
		TTY2="/dev/tty01"
		STARTUP_FILE_PATH="/sbin/rc3.d"
		STARTUP_FILE="$STARTUP_FILE_PATH/S98upsd"
		SHUTDOWN_FILE="/sbin/rc0"
		SHUTDOWN_SEARCH_STRING="\/sbin\/kill"
        ;;
    14)
                TAR_FILE=${INTEL}_LINUX
	 	OS_NAME="$LINUX_INTEL_STRING"
		if [ $INST_DAEMON -eq $TRUE ] && [ $SIGNAL_TYPE = $SIMPLE ]
		then
			TTY1="/dev/ttyS0"
			TTY2="/dev/ttyS1"
		else	
			TTY1="/dev/ttyS0"
			TTY2="/dev/ttyS1"
		fi
		SHUTDOWN_FILE="/etc/rc.d/init.d/halt"
		SHUTDOWN_SEARCH_STRING="umount"
                STARTUP_FILE_PATH="/etc/rc.d/init.d"
		STARTUP_FILE="$STARTUP_FILE_PATH/upsd"
		STARTUP_RC_PATH="/etc/rc.d"
		COMMON_FILES=COMMON
		X_UI_ONLY=$TRUE
		MODEM_ALLOWED_PORT_NAMES="/dev/modem,/dev/ttyS0,/dev/ttyS1"
		MODEM_PORT_NAME="/dev/modem"
SHUTDOWN_COMMAND_STRING="if [ -r /upsoff.cmd ]          #POWERCHUTE\\
then                           #POWERCHUTE\\
    . ./upsoff.cmd >/dev/null  #POWERCHUTE\\
    rm -f /upsoff.cmd          #POWERCHUTE\\
fi                             #POWERCHUTE\\
		"                      
		
  esac
#######################################################################
# Ask about Protection for Run-Level 1
#######################################################################
 
if [ $INST_DAEMON -eq $TRUE ] && [ "$OS_NAME" = "$NCR_INTEL_STRING" ]
then
 
        Echo
        echo_line
        Echo "$FULL_PROD_NAME is able to provide power protection for run-"
        Echo "level 1.  However, due to the inherent nature of run-level 1,"
        Echo "$FULL_PROD_NAME is unable to monitor other servers while in "
        Echo "this state."
        echo_line
        Echo
        IsYNQLoop "Do you wish to provide power protection for run-level 1?"
        case "$?" in
        $YES)
                PROTECT_INIT_1=$TRUE
		USE_TCP=$FALSE
                ;;
        $NO)
                PROTECT_INIT_1=$FALSE
                ;;
        $QUIT)
               Quit
                ;;
        esac
fi

if [ $PROTECT_INIT_1 -eq $FALSE ] && [ "$OS_NAME" != "$SUN4_SPARC_STRING" ]
then
        AskAboutTCP
fi
 

############################################################################
# Ask about coloring schemes...
############################################################################

if [ $INST_UI -eq $TRUE ] && [ $CHAR_UI_ONLY -eq $FALSE ]
then
	PickColorScheme
fi

#######################################################################
# Select a dedicated serial device, should the software require it
#######################################################################

if [ $INST_DAEMON -eq $TRUE ]
then

	if [ $NEED_DEDICATED_TTY -eq $TRUE ]
	then
        Echo
        echo_line
        Echo "$FULL_PROD_NAME requires complete control of the serial port. No"
        Echo "processes, including gettys, are allowed to be accessing the port."
        Echo "Therefore, the serial port you select must NOT be enabled for logins. To"
        Echo "ensure that $FULL_PROD_NAME has control of the serial port, make"
        Echo "sure that it is not enabled for logins.  To disable the port for logins"
        Echo "consult the $FULL_PROD_NAME manual."
        echo_line
        Echo
		VALID_TTY_SELECTED=$FALSE
		MAX_TTY=3
		MIN_TTY=1
		TTY_NUM=
		while [ $VALID_TTY_SELECTED -eq $FALSE ]
		do
			Echo 
			Echo "		1) $TTY1"
			Echo "		2) $TTY2"
			Echo "		3) Other"
			Echo 
			Echo "Which serial device will be dedicated to $FULL_PROD_NAME [?] \\c"
			read TTY_NUM
			if [ -z "$TTY_NUM" ]
			then
				TTY_NUM=-1
			fi
			if [ $TTY_NUM -le $MAX_TTY ] && 
			[ $TTY_NUM -ge $MIN_TTY ]
			then
				ALLOWED_PORT_NAMES="$TTY1,$TTY2"
				case "$TTY_NUM" in
				1)
					INST_TTY=$TTY1
					VALID_TTY_SELECTED=$TRUE
					;;
				2)
					INST_TTY=$TTY2
					VALID_TTY_SELECTED=$TRUE
					;;
				3)
					VALID_TEMP_TTY=$FALSE
					while [ $VALID_TEMP_TTY -eq $FALSE ]
					do
						Echo "Enter full path name of a serial device \\c"
						read TEMP_TTY
						if [ -z "$TEMP_TTY" ]
						then
							Echo "Invalid Selection"
						else
							VALID_TEMP_TTY=$TRUE
							INST_TTY=$TEMP_TTY
							ALLOWED_PORT_NAMES="$TTY1,$TTY2,$INST_TTY"
						fi
					done
					VALID_TTY_SELECTED=$TRUE
					;;
				esac
			else
				beep
				Echo "Invalid Selection..."
			fi
		done
	
		Echo
		echo_line
		case "$SIGNAL_TYPE" in
		$SMART)
		        case "$CABLE_TYPE" in
			$NORMAL)
			    if [ "$APC_HARDWARE_PROD" = "Symmetra" ]
			    then
				Echo "You should have the cable, #940-1524C attached to $INST_TTY"
			    else
				Echo "You should have the black cable, #940-0024C attached to $INST_TTY"
			    fi
			    ;;
			$PNP)
			    Echo "You should have the grey cable, #940-0095A attached to $INST_TTY"
			    ;;
		        esac
			;;
		$SIMPLE)
			Echo "You should have the grey cable, #940-0023A attached to $INST_TTY"
			;;
		$SPECIAL)
			case "$OS_NAME" in
			[SGI]*)
				Echo "You should have cable #940-0049A or #940-0032A attached to $INST_TTY"
				SIGNAL_TYPE=$SMART
				;;
			esac
			;;
		esac
		Echo "Please verify."
		echo_line
	fi
fi



#######################################################################
# Check repository for previous versions, or conflicting products
#######################################################################

CWD=`pwd`
if [ -d $APC_REPOSITORY ]
then
	cd $APC_REPOSITORY
	for i in *.apc
	do
	if [ -r $i ]
	then
		set `cat $i`
		if [ $1 = $PROD_NAME ]
		then
			tmp_string="cd $3; . ./$4 $5"
			Echo "$tmp_string" > $TMP_INSTALL_DIR/$APC_DETECT_FILE
			Echo "\n$1, version $2 is already installed in:\n$3"
		
		fi
	fi
	done
fi


#######################################################################
# Deal with previous or conflicting versions if found
#######################################################################

cd $CWD
if [ -r $TMP_INSTALL_DIR/$APC_DETECT_FILE ]
then
	PREVIOUS_VERSION_FOUND=$TRUE
	Echo 
	IsYNQLoop "Do you wish to have this previous installation removed?"
	case "$?" in
	$YES)
		REMOVE_PRODUCT=$TRUE
		chmod ugo+x $TMP_INSTALL_DIR/$APC_DETECT_FILE
		;;
	$NO)
		echo_line
		Echo "WARNING: There may be version conflicts!"
		Echo "NOTICE : Will only be able to perform CURSORY install verification."
		echo_line
		CHECK_SYSTEM_FILES=$FALSE
		if [ $INST_UI -eq $TRUE  ] && [ $INST_DAEMON -eq $FALSE ]
		then
		   #we want to keep port name, signal type, and allowed port names
		   USE_EXISTING_INI=$TRUE
		fi
		;;
	$QUIT) 
		Quit
		;;
	esac
fi


#######################################################################
# check for v3.1.X version of powerchute
#######################################################################

CWD=`pwd`
if [ $PROD_NAME = "$POWERCHUTE_PLUS" ]
then
	if [ -r /usr/lib/powerchute/Config ]
	then
		beep
		echo_line
		Echo "A v3.1.X family of PowerChute Plus for UNIX has been detected."
		Echo "This previous version MUST be removed for $FULL_PROD_NAME"
 		Echo "to run correctly"
		echo_line
		Echo 
		IsYNQLoop "Do you wish to remove this old version of PowerChute IMMEDIATELY?"
		case "$?" in
		$YES)
			cd /usr/lib/powerchute
			Echo "executing /usr/lib/powerchute/Remove.sh "
			./Remove.sh 
			V3XVERSION_DEALT_WITH=$TRUE
			;;
		$NO)
			Echo "Exiting $INST_SCRIPT_NAME"
			Quit
			;;
		$QUIT)
			Quit
			;;
		esac
	fi
fi
cd $CWD

#######################################################################
# Select an install directory and Check disk requirements
#######################################################################

Echo
GetInstallPath 

######################################################################
# Determine if user wants to run command files as root
######################################################################

if [ $INST_DAEMON -eq $TRUE ] && 
   [ "$OS_NAME" = "$UWARE7_INTEL_STRING" ] || 
   [ "$OS_NAME" = "$LINUX_INTEL_STRING" ] 
then
       
    Echo
    echo_line
    Echo "Command files may be executed with root privileges or with the"
    Echo "privileges you assign to the pwrchute account (allowing you to"
    Echo "customize command file execution according to your system"
    Echo "requirements)."
    echo_line
	
	Echo 
	IsYNQLoop "Do you want to execute command files as root?"
	case "$?" in
	$YES)
		RUN_COMMAND_FILES_AS_ROOT=$TRUE
		;;
	$NO)
		RUN_COMMAND_FILES_AS_ROOT=$FALSE
		;;
	$QUIT)
		Quit
		;;
	esac

else
	RUN_COMMAND_FILES_AS_ROOT=$FALSE
fi



######################################################################
# Determine if user wants to send email as root 
######################################################################

if [ $INST_DAEMON -eq $TRUE ] && 
   [ "$OS_NAME" = "$UWARE7_INTEL_STRING" ] || 
   [ "$OS_NAME" = "$LINUX_INTEL_STRING" ] 
then

	    
    Echo
    echo_line
    Echo "E-mail may be sent with root privileges or with the privileges you"
    Echo "assign to the pwrchute account."
    echo_line
	
	Echo 
	IsYNQLoop "Do you want to send e-mail as root?"
	case "$?" in
	$YES)
		SEND_EMAIL_AS_ROOT=$TRUE
		;;
	$NO)
		SEND_EMAIL_AS_ROOT=$FALSE
		;;
	$QUIT)
		Quit
		;;
	esac

else
	SEND_EMAIL_AS_ROOT=$FALSE
fi


#######################################################################
# Determine if the user wants to install HTML help. 
#######################################################################

Echo
echo_line
Echo "Pwrchute help now comes in an HTML format."
echo_line
Echo
IsYNQLoop "Would you like to install HTML help?"
case "$?" in
$YES)
	INSTALL_HTML_HELP=$TRUE
;;
$NO)
	INSTALL_HTML_HELP=$FALSE
;;
$QUIT)
	Quit
;;
esac


#######################################################################
# If user want to install HTML help, then we need to find web browser 
# executable
#######################################################################

if [ $INSTALL_HTML_HELP -eq  $TRUE ]
then
    # if the $BROWSER environment variable is set, then
    # we know the web browser executable
    if [ -n "$BROWSER" ]
    then
	WEB_BROWSER=$BROWSER	
    else 
	BROWSER_NAME="netscape"
	Echo "\nPlease enter your web browser executable name. This value is "
	Echo "case sensitive and should not include the path. \n[$BROWSER_NAME]\\c "
  	read inputted_browser
	if [ -n "$inputted_browser" ]
	then
	    BROWSER_NAME=$inputted_browser
	fi
	# the which command searchs $PATH enviroment variable and
	# returns an executable if it is found
	TMP_BROWSER=`which $BROWSER_NAME`
			    
	# if TMP_BROWSER string is present and it is
	# executable, then continue
	if [ -n "$TMP_BROWSER" -a -x "$TMP_BROWSER" ]
	then		    
	# if not a directory
	    if [ ! -d "$TMP_BROWSER" ]
	    then
		WEB_BROWSER=$TMP_BROWSER
	    fi
	
	    # or if a symbolic link
	    if [ -L "$TMP_BROWSER" ]
	    then
		WEB_BROWSER=$TMP_BROWSER
	    fi
	fi
    fi

    # if WEB_BROWSER length is 0
    if [ -z "$WEB_BROWSER" ]
    then 
	WEB_BROWSER="/usr/bin/netscape"
	Echo
	Echo "Web browser executable could not be found. Please enter the full path"
	Echo "to web browser executable. This value is case sensitive and should"
	Echo "include both the web browser path and executable.\n[$WEB_BROWSER] \\c"
	read inputted_browser
	if [ -n "$inputted_browser" ]
	then
	    WEB_BROWSER="$inputted_browser"
	fi
    else
	Echo
	Echo "Web browser executable found at $WEB_BROWSER"
    fi
	
    if [ -z "$WEB_BROWSER" ]
    then
	Echo 
	Echo "You did not enter the full path to web browser executable. Pwrchute will"
	Echo "not be able to open a web browser to display help unless the powerchute.ini"
	Echo "file is manually updated."
    fi
fi	

#######################################################################
# Print install info for customer verification
#######################################################################

Echo 
echo_line
Echo "PRODUCT                   : $FULL_PROD_NAME"
if [ $INST_UI -eq $TRUE ]
then
	Echo "INSTALL USER INTERFACE    : TRUE"
else
	Echo "INSTALL USER INTERFACE    : FALSE"
fi

if [ $INST_DAEMON -eq $TRUE ]
then
	Echo "INSTALL DAEMON            : TRUE"
else
	Echo "INSTALL DAEMON            : FALSE"
fi

Echo "OPERATING SYSTEM          : $OS_NAME"
Echo "INSTALL PATH              : $INSTALL_PATH"
if [ $CD_INSTALL -eq $TRUE ]
then
	Echo "PATH TO MOUNTED CD ROM    : $DEVICE_NAME"
else
	Echo "INSTALL FROM              : $DEVICE_NAME"
fi
if [ $NEED_DEDICATED_TTY -eq $TRUE ]
then
	Echo "DEDICATED TTY             : $INST_TTY"
        case "$INST_HARDWARE" in
           1) UPS_TYPE="Matrix-UPS"
           ;;
           2) UPS_TYPE="Smart-UPS"
           ;;
           3) UPS_TYPE="Back-UPS"
           ;;
	   4) UPS_TYPE="Back-UPS Pro"
	   ;;
           5) UPS_TYPE="Symmetra Power Array"
           ;;
           6) UPS_TYPE="Smart-UPS DP"
           ;;
        esac
        Echo "UPS TYPE                  : $UPS_TYPE"

	if [ $SIGNAL_TYPE = $SMART ] && [ $MEASURE_UPS -eq $TRUE ]
	then
		Echo "Measure-UPS INSTALLED     : TRUE"
	fi
	if [ $SIGNAL_TYPE = $SMART ] && [ $MEASURE_UPS -eq $FALSE ]
	then
		Echo "Measure-UPS INSTALLED     : FALSE"
	fi
fi
if [ $PREVIOUS_VERSION_FOUND -eq $TRUE ]
then
	Echo "PREVIOUS VERSION FOUND    : TRUE"
	if [ $CHECK_SYSTEM_FILES -eq $FALSE ]
	then
		Echo "REMOVE PREVIOUS VERSION?  : FALSE"
	else  
		Echo "REMOVE PREVIOUS VERSION?  : TRUE"
	fi
else
	Echo "PREVIOUS VERSION FOUND    : FALSE"
fi


if [ $V3XVERSION_DEALT_WITH -eq $TRUE ]
then
	Echo "3.X VERSION REMOVED       : TRUE"
fi

if [ $ROOT_USER -eq $TRUE ]
then
	Echo "INSTALLING AS ROOT        : TRUE"
else
	Echo "INSTALLING AS ROOT        : FALSE"
fi  

if [ $USE_TCP -eq $TRUE ]
then
        Echo "TCP/IP Installed          : TRUE"
else
        Echo "TCP/IP Installed          : FALSE"
fi

if [ "$OS_NAME" = "$UWARE7_INTEL_STRING" ] ||
   [ "$OS_NAME" = "$LINUX_INTEL_STRING" ] 
then

	if [ $RUN_COMMAND_FILES_AS_ROOT -eq $TRUE ] 
	then
        	Echo "RUN COMMAND FILES AS ROOT : TRUE"
	else
        	Echo "RUN COMMAND FILES AS ROOT : FALSE"
	fi

	if [ $SEND_EMAIL_AS_ROOT -eq $TRUE ] 
	then
        	Echo "SEND EMAIL AS ROOT        : TRUE"
	else
        	Echo "SEND EMAIL AS ROOT        : FALSE"
	fi
fi	

if [ "$OS_NAME" = "$NCR_INTEL_STRING" ]
then
  if [ $PROTECT_INIT_1 -eq $TRUE ] 
  then
          Echo "PROTECT RUN LEVEL 1       : TRUE"
  else
          Echo "PROTECT RUN LEVEL 1       : FALSE"
  fi  
fi

if [ $INSTALL_HTML_HELP -eq $TRUE ]
then
    Echo "WEB BROWSER               : $WEB_BROWSER"
fi
echo_line
Echo


#######################################################################
# Allow customer to verify or quit
#######################################################################

IsYNQLoop "Are the above selections correct?"
case "$?" in
	$NO)
		Echo 
		Echo "Please rerun the $INST_SCRIPT_NAME script"
		Echo "No actions taken."
		Echo 
		Quit
		;;
	$QUIT) 
		exit
		;;
esac

#######################################################################
# Remove previous installation
#######################################################################

if [ $REMOVE_PRODUCT -eq $TRUE ]
then
	Echo "Invoking remove script for previous product"
	Echo
	REMOVE_FAILED=$FALSE
	. $TMP_INSTALL_DIR/$APC_DETECT_FILE
	if [ "$REMOVE_FAILED" -eq $TRUE ]
 	then
	  exit
	fi
	rm -f $APC_REPOSITORY/$PROD_NAME
fi

#######################################################################
# Installation routines
#######################################################################


VALID_INSTALL_PATH=$FALSE
while [ $VALID_INSTALL_PATH -eq $FALSE ]
do
	Path_ok=$FALSE
	Disk_ok=$FALSE

	MakeInstallPath $INSTALL_PATH $SYSFILES_BACKUPS_REPOSITORY && 
	CheckDiskRequirements 	"$OS_NAME" $INST_UI $INST_DAEMON \
				 $INSTALL_PATH $CHKRELAX_FLAG
	if [ $? -eq $FALSE ]  #slickness saying if either command fails...
	then
		Echo
		Echo "Do you wish to choose another path or quit? [C/Q] \\c"
		read YQ
		if [ -z "$YQ" ]
		then
			Quit
		fi
		case "$YQ" in
		[Cc]*)
			GetInstallPath
			;;
		*)
			Quit
			;;
		esac
	else
		VALID_INSTALL_PATH=$TRUE
	fi		
done

############################################################################
# Deal with previous failed installs
############################################################################

if [ -r $INSTALL_PATH/$MISSING_FILE_LIST ]
then
	echo_line
	beep
	Echo "There appears to have been an unsuccessful installation in "
	Echo "$INSTALL_PATH already.  If you continue now, this installation will clean"
	Echo "up the failed previous installation and overwrite $INSTALL_PATH"
	echo_line

	IsYNQLoop "Do you wish to continue \\c"
	case "$?" in
		$NO|$QUIT)
			Quit
			;;
		$YES)
			;;
	esac

	rm -f $INSTALL_PATH/$MISSING_FILE_LIST
fi


############################################################################
# Transer files to installation path
############################################################################

cd $INSTALL_PATH

#If this is an installation over an existing one, and we
#want to keep ini file values, so we put them into the
# values that will be written to the ini file later
   if [ $USE_EXISTING_INI -eq $TRUE ] 
   then 
      INST_TTY=`grep 'PortName =' powerchute.ini  | awk '/PortName =/ {print $3}'`
      ALLOWED_PORT_NAMES=`grep AllowedPortNames powerchute.ini  | awk '/AllowedPortNames/ {print $3}'`
      SIGNAL_TYPE=`grep SignallingType powerchute.ini | awk '/SignallingType/ {print $3}'`
      CABLE_TYPE=`grep CableType powerchute.ini | awk '/CableType/ {print $3}'`
   fi

if [ $CD_INSTALL -eq $TRUE ]
then
#
# CD Distributions are should not be compressed, or this syntax wont work
#
	Echo "Installing $FULL_PROD_NAME from $DEVICE_NAME..."
	Echo "Extracting files....."
	CDInsureCase $DEVICE_NAME

	tar xvf $DEVICE_NAME/$COMMON_FILES
	tar xvf $DEVICE_NAME/${CO}$TAR_FILE
	if [ $INSTALL_HTML_HELP -eq  $TRUE ]
	then
	    tar xvf $DEVICE_NAME/$HELP_FILES
	fi
	

	if [ $INST_UI -eq $TRUE ]
	then
		tar xvf $DEVICE_NAME/${FE}$TAR_FILE
	fi
	if [ $INST_DAEMON -eq $TRUE ]
	then
		tar xvf $DEVICE_NAME/${BE}$TAR_FILE
	fi

elif [ $TAPE_INSTALL -eq $TRUE ]
then

	Echo "Installing $FULL_PROD_NAME from $DEVICE_NAME..."

	tar xvf $DEVICE_NAME $COMMON_FILES.Z
	tar xvf $DEVICE_NAME ${CO}$TAR_FILE.Z


	if [ $INST_UI -eq $TRUE ]
	then
		tar xvf $DEVICE_NAME ${FE}$TAR_FILE.Z
	fi
	if [ $INST_DAEMON -eq $TRUE ]
	then
		tar xvf $DEVICE_NAME ${BE}$TAR_FILE.Z
	fi
elif [ $FLOPPY_INSTALL -eq $TRUE ]
then

	if [ "$OS_NAME" = "$HPUX9X_PARISC_STRING" ]
	then
		TmpFloppyLink $DEVICE_NAME
		echo_line
		beep
		Echo "Due to a limitation with long device names and cpio in HPUX, a temporary"
		Echo "symbolic link has been created from $DEVICE_NAME to $TMP_FLOPPY_DEV."
		Echo "When prompted between disks by cpio for the floppy device name,"
		Echo "use $TMP_FLOPPY_DEV"
		echo_line
		HitAnyKey
		DEVICE_NAME=$TMP_FLOPPY_DEV
	fi
	clear
	beep
	echo_line
	Echo "**** IMPORTANT: PLEASE READ ****"
	echo_line
	Echo "If more than one diskette is required for your OS, you will see a message"
	Echo "similar to the following:"
	Echo
	Echo "		end of medium input"
	Echo "		if you want to go on type device/filename when ready"
	Echo
	Echo "At this time you should:"
	Echo
	Echo "		1) Insert the next diskette"
	Echo "		2) Retype the name of floppy device : ($DEVICE_NAME)"
	Echo
	echo_line
	HitAnyKey
	Echo
	echo_line
	beep
	Echo "Insert program disk (#1) now..."
	echo_line
	HitAnyKey
	Echo
	Echo "Installing $FULL_PROD_NAME from $DEVICE_NAME..."

	cpio -icvBd < $DEVICE_NAME
	if [ $INST_UI -eq $FALSE ]
	then
		rm -f ${FE}$TAR_FILE.Z
	fi
	if [ $INST_DAEMON -eq $FALSE ]
	then
		rm -f ${BE}$TAR_FILE.Z
	fi

fi


###########
# Extract
###########

if [ $FLOPPY_INSTALL -eq $TRUE ] || [ $TAPE_INSTALL -eq $TRUE ]
then

	Echo "Extracting from $COMMON_FILES"
	if [ "$OS_NAME" = "$SGI_MIPS_STRING" ]
	then
	  /usr/bsd/zcat $COMMON_FILES.Z | tar xvf -
	else
	     zcat $COMMON_FILES.Z | tar xvf -
	fi

	Echo "Extracting from ${CO}$TAR_FILE.Z"
	if [ "$OS_NAME" = "$SGI_MIPS_STRING" ]
	then
	  /usr/bsd/zcat ${CO}$TAR_FILE.Z | tar xvf -
	else
	  zcat ${CO}$TAR_FILE.Z | tar xvf -
	fi

	rm -f $COMMON_FILES.Z
	rm -f ${CO}$TAR_FILE.Z

	if [ -r "${FE}$TAR_FILE.Z" ]
	then
		Echo "Extracting from ${FE}$TAR_FILE.Z"
		if [ "$OS_NAME" = "$SGI_MIPS_STRING" ]
		then
		  /usr/bsd/zcat ${FE}$TAR_FILE.Z |tar xvf -
		else
	 	  zcat ${FE}$TAR_FILE.Z |tar xvf -
		fi
		rm -f ${FE}$TAR_FILE.Z
	fi

	if [ -r "${BE}$TAR_FILE.Z" ]
	then
		Echo "Extracting from ${BE}$TAR_FILE.Z"
		if [ "$OS_NAME" = "$SGI_MIPS_STRING" ]
		then
		  /usr/bsd/zcat ${BE}$TAR_FILE.Z | tar xvf -
		else
	 	  zcat ${BE}$TAR_FILE.Z | tar xvf -
		fi
		rm -f ${BE}$TAR_FILE.Z
	fi
fi

######################################################################
# THIS IS A PATCH!!!  For the next release this needs to be removed.
######################################################################

#Patch

######################################################################
# end of patch
######################################################################

#Just to make sure....
chmod ugo+x *.sh
chmod ugo+x S*

# Create tmp directory if it does not exist for Unixware 7
# do this for all future builds on Unix
if [ ! -d $TMP_DIR ] && 
   [ "$OS_NAME" = "$UWARE7_INTEL_STRING" ] ||
   [ "$OS_NAME" = "$LINUX_INTEL_STRING" ] 
then
    mkdir $TMP_DIR
    chmod go-wx,u+rw $TMP_DIR
fi


############################################################################
# Make wrapper shell scripts
############################################################################

cd $INSTALL_PATH

if [ $MAKE_DEFAULT_CALL_SCRIPT -eq $TRUE ] && 
[ $PROD_NAME = "$POWERCHUTE_PLUS" ]
then

	if [ $INST_DAEMON -eq $TRUE ]
	then
		ModifyWrapperStartScript $BE_PROD_CALL_SCRIPT
		chmod ugo+x $INSTALL_PATH/$BE_PROD_CALL_SCRIPT
	fi

	if [ $INST_UI -eq $TRUE ] && [ $X_UI_ONLY -eq $FALSE ]
	then
		ModifyWrapperStartScript $CFE_PROD_CALL_SCRIPT
		chmod ugo+x $INSTALL_PATH/$CFE_PROD_CALL_SCRIPT
	fi

	if [ $INST_UI -eq $TRUE ] && [ $CHAR_UI_ONLY -eq $FALSE ]
	then
		ModifyWrapperStartScript $XFE_PROD_CALL_SCRIPT
		chmod ugo+x $INSTALL_PATH/$XFE_PROD_CALL_SCRIPT
	fi
	
        # Security - Modify mailer and pager scripts also 
        ModifyWrapperStartScript $MAILER_SCRIPT
        ModifyWrapperStartScript $PAGER_SCRIPT
	
fi


#############################################################################
# Check for binary files for given product
#############################################################################

Echo
Echo "Checking for presence of binary files..."
if [ "$PROD_NAME" = "$POWERCHUTE_PLUS" ]
then
	#----------------------------
	# files in ${CO}INSTALL_NAME
	#----------------------------
	IsFound machine_id
	IsFound ttycheck
	IsFound upswrite
	IsFound portcheck
	IsFound ups_adjust
	if [ ! "$OS_NAME" = "$SGI_MIPS_STRING" ] &&
	   [ ! "$OS_NAME" = "$LINUX_INTEL_STRING" ]
	then
		IsFound LotusNotes
	fi
	if [ "$OS_NAME" = "$UWARE_INTEL_STRING" ] ||
           [ "$OS_NAME" = "$NCR_INTEL_STRING" ] ||
           [ "$OS_NAME" = "$UNISYS_INTEL_STRING" ]
        then
		#
		# The following bit is not elegant, but it works.
		#
		IsFound liblpi.so.2
                if [ ! -d /opt ]
                then
			mkdir /opt
                fi
                if [ ! -d /opt/LPI ]
                then
                         mkdir /opt/LPI
                fi
                if [ ! -s /opt/LPI/liblpi.so.2 ]
                then
                          cp $INSTALL_PATH/liblpi.so.2 /opt/LPI/.
		fi
                if [ ! -s /opt/LPI/liblpi.so.2 ]
		then
                           echo_line
                           Echo "WARNING:Could not copy $INSTALL_PATH/liblpi.so.2 to /opt/LPI"
                           Echo "You will need to put liblpi.so.2 in /opt/LPI in
order for PowerChute to work"
                           echo_line
			   HitAnyKey
                fi
        fi

	if [ $INST_UI -eq $TRUE ]
	then
		#----------------------------
		# files in ${FE}INSTALL_NAME
		#----------------------------

		IsFound pwrchute.ad

		if [ $CHAR_UI_ONLY -eq $TRUE ]
		then
			CheckCharFiles "$OS_NAME"
		elif [ $X_UI_ONLY -eq $TRUE ]
		then
			CheckXFiles "$OS_NAME"
		else
			CheckCharFiles "$OS_NAME"
			CheckXFiles "$OS_NAME"
		fi
	fi
	if [ $INST_DAEMON -eq $TRUE ]
	then
		#----------------------------
		# files in ${BE}INSTALL_NAME
		#----------------------------

		IsFound upsoff
		IsFound upsd

		if [ $SMART_UPSD_ONLY -eq $TRUE ]
		then
			IsFound _upsd
		else
			IsFound bkupsd
			IsFound _upsd
		fi
	fi
fi	
Echo "Done"

#############################################################################
# Check for scripts files for given product
#############################################################################

Echo
Echo "Checking for presence of scripts..."
if [ $PROD_NAME = "$POWERCHUTE_PLUS" ]
then
	IsFound Remove.sh
	IsFound what_os.sh
	IsFound pcshut.sh
	IsFound powerchute.ini
	IsFound S98upsd
	IsFound killpc.sh
	IsFound killbk.sh
	IsFound wall.sh
	IsFound dialpager.sh
	IsFound addpage.sh
	if [ ! "$OS_NAME" = "$LINUX_INTEL_STRING" ]
	then
	    IsFound LotusSetup.sh
	fi
	IsFound notifier.sh
	IsFound mailer.sh
fi


#############################################################################
# If the missing file list is present, panic and quit
#############################################################################

if [ -r $MISSING_FILE_LIST ]
then
	beep
	echo_line
	Echo "INSTALL FAILURE: Incomplete distribution!"
	Echo "See $INSTALL_PATH/$MISSING_FILE_LIST for a list of the"
	Echo "files missing from your distribution"
	echo_line
	exit
fi

Echo "Done"


#############################################################################
# Check for binary compatibility
#############################################################################
Echo
Echo "Checking for binary compatibility..."
rm -f machine_def
./machine_id 2>&1
if [ ! -r machine_def ]
then
	echo_line
	Echo "INSTALL FAILURE: There does not appear to be binary compatibilty between"
	Echo "installed product and this machine"
	echo_line
	Echo
	exit
else
	Echo "binary compatibility VERIFIED"
	Echo
fi

#############################################################################
# Check for OS specific special files...
#############################################################################

. ./what_os.sh
case "$OS" in
$HPUX9|$HPUX10)
	IsFound hp_reboot
	;;
"OS_UNKNOWN")
        rm -f OS_UNKNOWN
        case "$INST_OS" in
        1)
                touch SOLARIS2X
                ;;
        2)
                touch SUNOS4
                ;;
        3)
                touch SOLARIS2X86
                ;;
        4)
                touch AIX3
                ;;
        401)
                touch AIX4
                ;;
        5)
                touch HPUX9
                ;;
        501)
                touch HPUX10
                ;;
        6)
                touch SCO
                ;;
        601)
        	touch UWARE7
        	;;       
        7)
                touch NCR
                ;;
        8)
                touch SGI
                ;;
        9)
                touch UWARE1
                ;;
        901)
                touch UWARE2
                ;;
        10)
                touch OLIV
                ;;
        11)
                touch SINX
                ;;
        12)
                touch USYS
                ;;
        13)
                touch ALPHAOSF
                ;;
        14)     
                touch LINUX
                ;;
        esac
      ;;
esac
	


#############################################################################
# Verify that chosen serial device is a valid tty 
#############################################################################
if [ $INST_DAEMON -eq $TRUE ]
then
	VALID_TTY=$FALSE
	./ttycheck "$INST_TTY"
	case "$?" in
		1)
			VALID_TTY=$TRUE
			Echo "$INST_TTY verified as a valid tty"
			Echo
			;;
		0)
			echo_line
			Echo "WARNING: $INST_TTY does not appear to be a valid tty"
			echo_line
			beep
			sleep 3
			;;
		*)
			echo_line
			Echo "WARNING: General tty verification failure."
			echo_line
			beep
			sleep 3
			;;
	esac
fi


#############################################################################
# See what we can determine about the port.
#############################################################################
if [ $SKIP_PORT_VERIFICATION -eq $FALSE ] && [ $INST_DAEMON -eq $TRUE ] 
then
	Echo "The following Port validations for $INST_TTY may take a few moments...."
	sleep 2
	if [ $VALID_TTY -eq $TRUE ]
	then
		./portcheck "$INST_TTY"
		case "$?" in
		1)
			IS_MODEM_PORT=$TRUE
			IS_LOCAL_PORT=$FALSE
			Echo "$INST_TTY appears to be a modem control port"
			sleep 1
			;;
		2)
			IS_MODEM_PORT=$FALSE
			IS_LOCAL_PORT=$TRUE
			Echo "$INST_TTY appears to be a local control port"
			sleep 1
			;;
		*)
			beep
			echo_line
			Echo "Could not determine port type!"
			echo_line
			sleep 1
			;;
		esac
	fi

	if [ $IS_MODEM_PORT -eq $TRUE ] && [ $SIGNAL_TYPE = $SMART ]
	then
		echo_line
		beep
		Echo "WARNING: Port must be configured for local control in order to work with a"
		Echo "\"Smart\" Signaling UPS"
		echo_line
		Echo
		HitAnyKey
	fi
		
	if [ $IS_LOCAL_PORT -eq $TRUE ] && [ $SIGNAL_TYPE = $SIMPLE ]
	then
		echo_line
		beep
		Echo "WARNING: Port must be configured for modem control in order to work with a"
		Echo "\"Simple\" Signaling UPS"
		echo_line
		Echo
		HitAnyKey
	fi
	Echo
fi

#############################################################################
# Modify OS system files for startup
#############################################################################

if [ $INST_DAEMON -eq $TRUE ]
then
	if [ ! -r machine_def ]
	then
		./machine_id
	fi

	Echo "make backup copy of startup files..."
	Echo "modifying startup files..."

	. ./what_os.sh

	case $OS in
		$SOLARIS2X|$SOLARIS2X86|$SGI|$UWARE1|$UWARE2|$OLIV|$INT|$SINIX|$USYS|$ALPHAOSF)
                        SVR4Startup
			;; 
		$AIX3|$AIX4)
			STARTUP_INSERT_STRING="APCdaemon:2:wait:$STARTUP_FILE start #POWERCHUTE"
			AppendToStartupFile $STARTUP_SYSTEM_FILE
			;;
		$HPUX9|$HPUX10)
			STARTUP_INSERT_STRING="APCd:0123456:wait:$STARTUP_FILE start #POWERCHUTE"
			AppendToStartupFile $STARTUP_SYSTEM_FILE	
			;;
		$LINUX)
			LinuxStartup
			;;
		$SUNOS4)
			STARTUP_INSERT_STRING="$STARTUP_FILE start #POWERCHUTE"
			AppendToStartupFile $STARTUP_SYSTEM_FILE
			;;
		$SCO|$UWARE7)
			SCOStartup
			;;
		$NCR)
			 if [ $PROTECT_INIT_1 -eq $TRUE ]
                         then
                          STARTUP_INSERT_STRING="PC::wait:$INSTALL_PATH/$STARTUP_FILE start #POWERCHUTE"
                          AppendToStartupFile $STARTUP_SYSTEM_FILE
			  echo $STARTUP_INSERT_STRING > $NCR_INITTAB_BACKUP_FILE 
                          touch $INSTALL_PATH/PROTECT_INIT_1
                        else
                          STARTUP_FILE="$STARTUP_FILE_PATH/$STARTUP_FILE"
                          SVR4Startup
                        fi
                        ;;
		*)
			Echo "OS = $OS"
			Echo "Nothing here yet...."
			;;
	esac
fi

#############################################################################
# Modify OS system files for shutdown
#############################################################################
if [ $INST_DAEMON -eq $TRUE ]
then
	if [ ! -r machine_def ]
	then
		./machine_id
	fi

	Echo "making backup copy of shutdown files..."
	cp $SHUTDOWN_FILE $SHUTDOWN_FILE.tmp
	BackupCp $SHUTDOWN_FILE
	if [ $? -eq $FALSE ] 
	then
		Echo "error creating backup file for $SHUTDOWN_FILE! Quitting"
		exit
	fi

	Echo "modifying shutdown files...."

	. ./what_os.sh
	case "$OS" in
		$SOLARIS2X|$SOLARIS2X86|$AIX3|$AIX4|$SGI|$SCO|$UWARE7|$UWARE1|$UWARE2|y$OLIV|$INT|$SINIX|$USYS|$NCR|$ALPHAOSF|$LINUX)
			if [ -r $SHUTDOWN_FILE.tmp ]
			then
				rm -f $SHUTDOWN_FILE
			else
				echo_line
				beep
				Echo "Unable to find temp file $SHUTDOWN_FILE.tmp. Quitting."
				echo_line
				Quit
			fi
			
			# for Linux, we want to append the SHUTDOWN_COMMAND_STRING before
			# the SHUTDOWN_SEARCH_STRING ("umount" in this case) instead of 
			# after, so we use the "i" argument to sed
			if [ "$OS_NAME" = "$LINUX_INTEL_STRING" ]
			then
			sed "/$SHUTDOWN_SEARCH_STRING/ i\\
$SHUTDOWN_COMMAND_STRING" $SHUTDOWN_FILE.tmp > $SHUTDOWN_FILE
			else
			sed "/$SHUTDOWN_SEARCH_STRING/ a\\
$SHUTDOWN_COMMAND_STRING" $SHUTDOWN_FILE.tmp > $SHUTDOWN_FILE
			fi
			if [ ! -r $SHUTDOWN_FILE ]
			then
				echo_line
				beep
				Echo "Error writing $SHUTDOWN_FILE! Original can be found in\n$INSTALL_PATH/$SYSFILES_BACKUP_REPOSITORY. Quitting."
				echo_line
				Quit
			else
				rm -f $SHUTDOWN_FILE.tmp
			fi
			chmod ugo+x $SHUTDOWN_FILE
			;;
		$HPUX9)
			HpSpecialShutdown
			;;
		$HPUX10)
			HPUX10SpecialShutdown
			;;
		$SUNOS4)
			SunOs4SpecialShutdown
			;;
		$NCR)
			# NCRSpecialShutdown
			;;
		*)
			echo_line
			beep
			Echo "Unable to modify shutdown file! : Unknown OS = $OS"
			Quit
			;;
	esac
fi

#############################################################################
# modify or create repository and create a mirror repository entry in the 
# install directory, so we know easily what repository entry to remove.....
# Lets try it this way, making our Remove.sh script some what generic...
#############################################################################

Echo "modifying $APC_REPOSITORY"

if [ $PREVIOUS_VERSION_FOUND -eq $FALSE ] || [ $CHECK_SYSTEM_FILES -eq $TRUE ]
then
	if [ ! -r $APC_REPOSITORY ] 
	then
		mkdir $APC_REPOSITORY
	fi
	cd $APC_REPOSITORY
	Echo "$PROD_NAME $PROD_VERSION $INSTALL_PATH $REMOVE_SCRIPT" > $PROD_NAME

	Echo "$PROD_NAME $PROD_VERSION $INSTALL_PATH $REMOVE_SCRIPT" > $INSTALL_PATH/$PROD_NAME
fi


#############################################################################
# Lets copy over pwrchute.ad to /usr/lib/X11/app-defaults for our font stuff
#############################################################################
if [ $INST_UI -eq $TRUE ] && [ -d /usr/lib/X11/app-defaults ]
then
	cp $INSTALL_PATH/pwrchute.ad /usr/lib/X11/app-defaults/pwrchute
#else
	# We are silent here.... no need to scare people.  The risk being
	# that we may generate more tech support traffic than we head off
	# if we put a warning here
fi


#############################################################################
# Verify we can communicate with UPS
#############################################################################
if [ $INST_DAEMON -eq $TRUE ]
then
	cd $INSTALL_PATH
	RETRY=$TRUE
	RE=
	if [ $NEED_DEDICATED_TTY -eq $TRUE ] && [ $VALID_TTY -eq $TRUE ] && 
	[ $IS_MODEM_PORT -eq $FALSE ]
	then
		while [ $RETRY -eq $TRUE ]
		do
			./upswrite $INST_TTY $CABLE_TYPE verify
			if [ $? -eq 5 ]
			then
				COMM_VERIFIED=$TRUE
				RETRY=$FALSE
				Echo 
				Echo "UPS communications on $INST_TTY verified"
				Echo "Done."
				Echo
			else
				Echo
				echo_line
				Echo "WARNING: Could not communicate with device on $INST_TTY."
				Echo "Check that the communications cable is attached properly to both the device"
				Echo "and the serial port."
				beep
				echo_line
				Echo "NOTE: Though the $FULL_PROD_NAME installation is complete, if you "
				Echo "quit before verifying communications, the application may not work properly"
				echo_line
				VALID_RE=$FALSE
				while [ $VALID_RE -eq $FALSE ]
				do
					Echo "Do you wish to Exit or Retry communications? [R/E] \\c"
					read RE
					case "$RE" in
					[Rr]*)
						RETRY=$TRUE
						VALID_RE=$TRUE
						;;
					[Ee]*)
						COMM_VERIFIED=$FALSE
						RETRY=$FALSE
						VALID_RE=$TRUE
						;;
					esac
				done
			fi						
		done
		
	elif [ $IS_LOCAL_PORT -eq $TRUE ]
	then
		echo_line
		Echo "WARNING: Due to tty verification failure, the install"
		Echo "will be unable to test UPS communications."
		echo_line
		beep
		sleep 3
	fi
fi

#############################################################################
# Modify the powerchute.ini file
#############################################################################

if [ $PROD_NAME = "$POWERCHUTE_PLUS" ]
then
	cd $INSTALL_PATH
	STILL_GOING=$TRUE
	i=1
	Echo "Modifying powerchute.ini file"
	while [ $STILL_GOING -eq $TRUE ]
	do
		IniMod $i
		if [ $? -eq $FALSE ]
		then
			STILL_GOING=$FALSE
		else
			i=`expr $i + 1`
		fi
	done
fi

############################################################################
# For AIX, UWARE, and HPUX10 ask about modifying shutdown_delay eeprom
# because it takes longer to shutoff the OS
############################################################################
. ./what_os.sh

if [ ! -z "$INST_TTY" ] && [ $INST_DAEMON -eq $TRUE ] && [ $COMM_VERIFIED -eq $TRUE ] && [ $IS_MODEM_PORT -eq $FALSE ] && [ "$SIGNAL_TYPE" = "$SMART" ]
then
	EepromAdjustments "$OS" "$INST_TTY"
fi
if [ "$OS" = "HPUX10" ] && [ ! -z "$INST_TTY" ] && [ $INST_DAEMON -eq $TRUE ] && [ $COMM_VERIFIED -eq $TRUE ] && [ "$SIGNAL_TYPE" = "$SMART" ]
then
	EepromAdjustments "$OS" "$INST_TTY"
fi

# --------------------------------------------------------------------------
# Far from the most sophisticated method, but after installation this will
# the uninvited from modifying scripts that will later be run with root
# permissions
# --------------------------------------------------------------------------

SetFilePermissions $INSTALL_PATH

LINE=$FALSE
Echo
if [ $INST_DAEMON -eq $TRUE ]
then
	echo_line
	Echo "$FULL_PROD_NAME Installation complete.  You will need to reboot" 
	Echo "in order to start the application"
	LINE=$TRUE
fi

if [ "$OS_NAME" = "$UWARE_INTEL_STRING" ]
then
	echo_line
	beep
	Echo "NOTE: Due to a bug in UnixWare 1.X, you will need to modify the upsd"
	Echo "wrapper script as noted in the Release Notes in order for scheduled"
	Echo "events to work properly"
	echo_line
	HitAnyKey
	LINE=$TRUE
fi
if [ $USE_TCP -eq $TRUE ]
then
	echo_line
	Echo "NOTE: For every machine on which you run the UPS monitoring daemon," 
	Echo "you MUST create a \"pwrchute\" user account. Otherwise, the User Interface"
	Echo "will show you a list of machines which are running the UPS monitoring daemon"
	Echo "but you will be unable to monitor or configure them."
	LINE=$TRUE
fi

if [ $COMM_VERIFIED -eq $FALSE ] && [ $INST_DAEMON -eq $TRUE ]
then
	echo_line
	Echo "WARNING: Serial communications never verified, the installed product may"
	Echo "not work properly.  You may want to try the following:"
	Echo
	Echo "	1) Check that specified serial device exists."
	Echo "	2) Check the device configuration is appropriate for your UPS type"
	Echo "	3) Rebuild or create the serial device using the utility appropriate "
	Echo "	   for your system."
	Echo
	LINE=$TRUE
fi

if [ $LINE -eq $TRUE ]
then
  echo_line
fi



















