--- rxstack.orig	2004-07-12 14:17:51.000000000 -0400
+++ rxstack	2004-07-12 14:34:28.000000000 -0400
@@ -1,13 +1,388 @@
 #!/bin/sh
 #
-# chkconfig: 
+# chkconfig:
 # description: Regina Stack daemon.
 # processname: rxstack
 # pidfile: /var/run/rxstack.pid
 # config: /etc/sysconfig/rxstack
 
-# source function library
-. /etc/rc.d/init.d/functions
+# Make sure umask is sane
+umask 022
+
+# Set up a default search path.
+PATH="/usr/sbin:/sbin:/usr/bin:/bin:/usr/X11R6/bin"
+export PATH
+
+# Get a sane screen width
+[ -z "${COLUMNS:-}" ] && COLUMNS=80
+
+# Read in our configuration
+if [ -z "${BOOTUP:-}" ]; then
+    BOOTUP=color
+    RES_COL=60
+    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
+    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
+    SETCOLOR_FAILURE="echo -en \\033[1;31m"
+    SETCOLOR_WARNING="echo -en \\033[1;33m"
+    SETCOLOR_NORMAL="echo -en \\033[0;39m"
+    LOGLEVEL=1
+fi
+
+if [ "${BOOTUP:-}" != "verbose" ]; then
+   INITLOG_ARGS="-q"
+else
+   INITLOG_ARGS=
+fi
+
+# Check if $pid (could be plural) are running
+checkpid() {
+	local i
+
+	for i in $* ; do
+		[ -d "/proc/$i" ] || return 1
+	done
+	return 0
+}
+	
+
+# A function to start a program.
+daemon() {
+	# Test syntax.
+	local gotbase= force=
+	local base= user= nice= bg= pid=
+	nicelevel=0
+	while [ "$1" != "${1##[-+]}" ]; do
+	  case $1 in
+	    '')    echo $"$0: Usage: daemon [+/-nicelevel] {program}"
+	           return 1;;
+	    --check)
+		   base=$2
+		   gotbase="yes"
+		   shift 2
+		   ;;
+	    --check=?*)
+	    	   base=${1#--check=}
+		   gotbase="yes"
+		   shift
+		   ;;
+	    --user)
+		   user=$2
+		   shift 2
+		   ;;
+	    --user=?*)
+	           user=${1#--user=}
+		   shift
+		   ;;
+	    --force)
+	    	   force="force"
+		   shift
+		   ;;
+	    [-+][0-9]*)
+	    	   nice="nice -n $1"
+	           shift
+		   ;;
+	    *)     echo $"$0: Usage: daemon [+/-nicelevel] {program}"
+	           return 1;;
+	  esac
+	done
+
+        # Save basename.
+        [ -z "$gotbase" ] && base=${1##*/}
+
+        # See if it's already running. Look *only* at the pid file.
+	if [ -f /var/run/${base}.pid ]; then
+		local line p
+		read line < /var/run/${base}.pid
+		for p in $line ; do
+			[ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && pid="$pid $p"
+		done
+	fi
+	
+	[ -n "${pid:-}" -a -z "${force:-}" ] && return
+
+	# make sure it doesn't core dump anywhere; while this could mask
+	# problems with the daemon, it also closes some security problems
+	ulimit -S -c 0 >/dev/null 2>&1
+	
+	# if they set NICELEVEL, honor it
+	[ -n "$NICELEVEL" ] && nice="nice -n $NICELEVEL"
+	
+	# Echo daemon
+        [ "${BOOTUP:-}" = "verbose" -a -z "$LSB" ] && echo -n " $base"
+
+	# And start it up.
+	if [ -z "$user" ]; then
+	   "$*"
+	else
+	   "su -s /bin/bash - $user -c \"$*\""
+	fi
+	[ "$?" -eq 0 ] && success $"$base startup" || failure $"$base startup"
+}
+
+# A function to stop a program.
+killproc() {
+	RC=0
+	# Test syntax.
+	if [ "$#" -eq 0 ]; then
+		echo $"Usage: killproc {program} [signal]"
+		return 1
+	fi
+
+	notset=0
+	# check for second arg to be kill level
+	if [ -n "$2" ]; then
+		killlevel=$2
+	else
+		notset=1
+		killlevel="-9"
+	fi
+
+        # Save basename.
+        base=${1##*/}
+
+        # Find pid.
+	pid=
+	if [ -f /var/run/${base}.pid ]; then
+		local line p
+		read line < /var/run/${base}.pid
+		for p in $line ; do
+			[ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && pid="$pid $p"
+		done
+	fi
+	if [ -z "$pid" ]; then
+		pid=`pidof -o $$ -o $PPID -o %PPID -x $1 || \
+			pidof -o $$ -o $PPID -o %PPID -x $base`
+	fi
+
+        # Kill it.
+        if [ -n "${pid:-}" ] ; then
+                [ "$BOOTUP" = "verbose" -a -z "$LSB" ] && echo -n "$base "
+		if [ "$notset" -eq "1" ] ; then
+		       if checkpid $pid 2>&1; then
+			   # TERM first, then KILL if not dead
+			   kill -TERM $pid
+			   usleep 100000
+			   if checkpid $pid && sleep 1 &&
+			      checkpid $pid && sleep 3 &&
+			      checkpid $pid ; then
+                                kill -KILL $pid
+				usleep 100000
+			   fi
+		        fi
+			checkpid $pid
+			RC=$?
+			[ "$RC" -eq 0 ] && failure $"$base shutdown" || success $"$base shutdown"
+			RC=$((! $RC))
+		# use specified level only
+		else
+		        if checkpid $pid; then
+	                	kill $killlevel $pid
+				RC=$?
+				[ "$RC" -eq 0 ] && success $"$base $killlevel" || failure $"$base $killlevel"
+			fi
+		fi
+	else
+	    failure $"$base shutdown"
+	    RC=1
+	fi
+
+        # Remove pid file if any.
+	if [ "$notset" = "1" ]; then
+            rm -f /var/run/$base.pid
+	fi
+	return $RC
+}
+
+# A function to find the pid of a program. Looks *only* at the pidfile
+pidfileofproc() {
+	local base=${1##*/}
+	
+	# Test syntax.
+	if [ "$#" = 0 ] ; then
+		echo $"Usage: pidfileofproc {program}"
+		return 1
+	fi
+
+	# First try "/var/run/*.pid" files
+	if [ -f /var/run/$base.pid ] ; then
+	        local line p pid=
+		read line < /var/run/$base.pid
+		for p in $line ; do
+		       [ -z "${p//[0-9]/}" -a -d /proc/$p ] && pid="$pid $p"
+		done
+	        if [ -n "$pid" ]; then
+	                echo $pid
+	                return 0
+	        fi
+	fi
+}
+
+# A function to find the pid of a program.
+pidofproc() {
+	base=${1##*/}
+
+	# Test syntax.
+	if [ "$#" = 0 ]; then
+		echo $"Usage: pidofproc {program}"
+		return 1
+	fi
+
+	# First try "/var/run/*.pid" files
+	if [ -f /var/run/$base.pid ]; then
+	        local line p pid=
+		read line < /var/run/$base.pid
+		for p in $line ; do
+		       [ -z "${p//[0-9]/}" -a -d /proc/$p ] && pid="$pid $p"
+		done
+	        if [ -n "$pid" ]; then
+	                echo $pid
+	                return 0
+	        fi
+	fi
+	pidof -o $$ -o $PPID -o %PPID -x $1 || \
+		pidof -o $$ -o $PPID -o %PPID -x $base
+}
+
+status() {
+	local base=${1##*/}
+	local pid
+
+	# Test syntax.
+	if [ "$#" = 0 ] ; then
+		echo $"Usage: status {program}"
+		return 1
+	fi
+
+	# First try "pidof"
+	pid=`pidof -o $$ -o $PPID -o %PPID -x $1 || \
+	     pidof -o $$ -o $PPID -o %PPID -x ${base}`
+	if [ -n "$pid" ]; then
+	        echo $"${base} (pid $pid) is running..."
+	        return 0
+	fi
+
+	# Next try "/var/run/*.pid" files
+	if [ -f /var/run/${base}.pid ] ; then
+	        read pid < /var/run/${base}.pid
+	        if [ -n "$pid" ]; then
+	                echo $"${base} dead but pid file exists"
+	                return 1
+	        fi
+	fi
+	# See if /var/lock/subsys/${base} exists
+	if [ -f /var/lock/subsys/${base} ]; then
+		echo $"${base} dead but subsys locked"
+		return 2
+	fi
+	echo $"${base} is stopped"
+	return 3
+}
+
+echo_success() {
+  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
+  echo -n "[  "
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS
+  echo -n $"OK"
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
+  echo -n "  ]"
+  echo -ne "\r"
+  return 0
+}
+
+echo_failure() {
+  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
+  echo -n "["
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
+  echo -n $"FAILED"
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
+  echo -n "]"
+  echo -ne "\r"
+  return 1
+}
+
+echo_passed() {
+  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
+  echo -n "["
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
+  echo -n $"PASSED"
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
+  echo -n "]"
+  echo -ne "\r"
+  return 1
+}
+
+echo_warning() {
+  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
+  echo -n "["
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
+  echo -n $"WARNING"
+  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
+  echo -n "]"
+  echo -ne "\r"
+  return 1
+}
+
+# Log that something succeeded
+success() {
+  [ "$BOOTUP" != "verbose" -a -z "$LSB" ] && echo_success
+  return 0
+}
+
+# Log that something failed
+failure() {
+  rc=$?
+  [ "$BOOTUP" != "verbose" -a -z "$LSB" ] && echo_failure
+  [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --details=yes
+  return $rc
+}
+
+# Log that something passed, but may have had errors. Useful for fsck
+passed() {
+  rc=$?
+  [ "$BOOTUP" != "verbose" -a -z "$LSB" ] && echo_passed
+  return $rc
+}  
+
+# Log a warning
+warning() {
+  rc=$?
+  [ "$BOOTUP" != "verbose" -a -z "$LSB" ] && echo_warning
+  return $rc
+}  
+
+# Run some action. Log its output.
+action() {
+  STRING=$1
+  echo -n "$STRING "
+  shift
+  rc=$?
+  echo
+  return $rc
+}
+
+# returns OK if $1 contains $2
+strstr() {
+  [ "${1#*$2*}" = "$1" ] && return 1
+  return 0
+}
+
+# Confirm whether we really want to run this service
+confirm() {
+  [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --details=yes
+  while : ; do 
+      echo -n $"Start service $1 (Y)es/(N)o/(C)ontinue? [Y] "
+      read answer
+      if strstr $"yY" "$answer" || [ "$answer" = "" ] ; then
+         return 0
+      elif strstr $"cC" "$answer" ; then
+	 rm -f /var/run/confirm
+	 [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --details=no
+         return 2
+      elif strstr $"nN" "$answer" ; then
+         return 1
+      fi
+  done
+}
 
 RETVAL=0
 
