#!/bin/sh

# Set up a default search path.
PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin"
export PATH

is_ignored_file() {
	case "$1" in
	skeleton | README | *.dpkg-dist | *.dpkg-old | rc | rcS | single | reboot | bootclean.sh)
		return 0
		;;
	*rpmorig | *rpmnew | *rpmsave | *~ | *.orig)
		return 0
		;;
	esac
	return 1
}

VERSION="$(basename $0) ver. 0.91-pld"
USAGE="Usage: $(basename $0) < option > | --status-all | \
[ service_name [ command | --full-restart ] ]"

SERVICE=
USE_UPSTART=

if [ -d /etc/rc.d/init.d ]; then
	SERVICEDIR="/etc/rc.d/init.d"
else
	SERVICEDIR="/etc/init.d"
fi

if [ $# -eq 0 ]; then
	echo "${USAGE}" >&2
	exit 1
fi

cd /
while [ $# -gt 0 ]; do
	case "${1}" in
	--help | -h | --h* )
		echo "${USAGE}" >&2
		exit 0
		;;
	--version | -V )
		echo "${VERSION}" >&2
		exit 0
		;;
	  --upstart)
	  	USE_UPSTART=yes
		shift
		;;
	  --no-upstart)
	  	USE_UPSTART=no
		shift
		;;
	  *)
		if [ -z "${SERVICE}" -a $# -eq 1 -a "${1}" = "--status-all" ]; then
			cd ${SERVICEDIR}
			for SERVICE in *; do
				case "${SERVICE}" in
				functions | halt | killall | single| linuxconf| kudzu)
					;;
				*)
				if ! is_ignored_file "${SERVICE}" \
						&& [ -x "${SERVICEDIR}/${SERVICE}" ]; then
					if ! grep -qs "\Wstatus)" "$SERVICE"; then
						#printf " %s %-60s %s\n" "[?]" "$SERVICE:" "unknown" 1>&2
						echo " [ ? ]  $SERVICE" 1>&2
						continue
					else
						out=$(env -i USE_UPSTART=$USE_UPSTART LANG="$LANG" PATH="$PATH" TERM="$TERM" "$SERVICEDIR/$SERVICE" status 2>&1)
						if [ "$?" = "0" -a -n "$out" ]; then
							#printf " %s %-60s %s\n" "[+]" "$SERVICE:" "running"
							echo " [ + ]  $SERVICE"
							continue
						else
							#printf " %s %-60s %s\n" "[-]" "$SERVICE:" "NOT running"
							echo " [ - ]  $SERVICE"
							continue
						fi
					fi
					#env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "$SERVICEDIR/$SERVICE" status
				fi
				;;
				esac
			done
			exit 0
		elif [ $# -eq 2 -a "${2}" = "--full-restart" ]; then
			SERVICE="${1}"
			if [ -x "${SERVICEDIR}/${SERVICE}" ]; then
				env -i USE_UPSTART=$USE_UPSTART LANG=$LANG PATH=$PATH TERM=$TERM "${SERVICEDIR}/${SERVICE}" stop
				env -i USE_UPSTART=$USE_UPSTART LANG=$LANG PATH=$PATH TERM=$TERM "${SERVICEDIR}/${SERVICE}" start
				exit $?
			fi
		elif [ -z "${SERVICE}" ]; then
			SERVICE="${1}"
		elif [ -z "${ACTION}" ]; then
			ACTION="${1}"
		else
			OPTIONS="${OPTIONS} ${1}"
		fi
		shift
		;;
	esac
done

if [ -x "${SERVICEDIR}/${SERVICE}" ]; then
	exec env -i USE_UPSTART=$USE_UPSTART LANG=$LANG PATH=$PATH TERM=$TERM "${SERVICEDIR}/${SERVICE}" ${ACTION} ${OPTIONS}
else
	echo "${SERVICE}: unrecognized service" >&2
	exit 1
fi
