# Authors: grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
# Bug-Reports: see http://grml.org/bugs/
# License: This file is licensed under the GPL v2.
-# Latest change: Tue, 23 Oct 2007 16:53:48 +0200 [ft]
################################################################################
# {{{ set default PATH
check4progs(){
local RC=''
for arg in $* ; do
- type -p $arg >/dev/null 2>&1 || RC="$arg"
+ which $arg >/dev/null 2>&1 || RC="$arg"
done
if [ -n "$RC" ] ; then
echo "$RC not installed"
}
#}}}
-# e*() output functions {{{
-# heavily based on gentoo's functions.sh; stripped down and modified
-# to match our needs.
-#
-# defined functions:
-# ebegin()
-# eend()
-# eerror()
-# eindent()
-# einfo()
-# einfon()
-# eoutdent()
-# esetdent()
-# esyslog()
-# ewarn()
-# ewend()
-#
-# copyright 1999-2005 gentoo foundation
-# distributed under the terms of the gnu general public license v2
-# $header: /var/cvsroot/gentoo-src/rc-scripts/sbin/functions.sh,v 1.81.2.6 2005/05/15 20:00:31 vapier exp $
-
-# initialisation {{{
-# internal variables
-
-# dont output to stdout?
-rc_quiet_stdout="no"
-
-# default values for e-message indentation and dots
-rc_indentation=''
-rc_default_indent=2
-#rc_dot_pattern=' .'
-rc_dot_pattern=''
-
-# should we use color?
-if [ -r /proc/cmdline ] ; then
- grep -q ' nocolor' /proc/cmdline && RC_NOCOLOR='yes'
-fi
-[ -n "$NOCOLORS" ] && RC_NOCOLOR='yes'
-RC_NOCOLOR="${RC_NOCOLOR:-no}"
-
-# Can the terminal handle endcols?
-RC_ENDCOL="yes"
-
-# Setup COLS and ENDCOL so eend can line up the [ ok ]
-# width of [ ok ] == 7
-COLS="$(stty size 2>/dev/null | cut -d' ' -f2)"
-if [ -z "${COLS}" ] || [ "${COLS}" -le 0 ] ; then
- COLS=80
-fi
-
-if [ "${RC_ENDCOL}" = "yes" ]; then
- ENDCOL="\e[A\e[$(( ${COLS} - 8 ))G"
-else
- ENDCOL=''
-fi
-
-# Setup the colors so our messages all look pretty
-if [ "${RC_NOCOLOR}" = "yes" ]; then
- unset GOOD WARN BAD NORMAL HILITE BRACKET
-else
- GOOD='\e[32;01m'
- WARN='\e[33;01m'
- BAD='\e[31;01m'
- NORMAL='\e[0m'
- HILITE='\e[36;01m'
- BRACKET='\e[34;01m'
-fi
-#}}}
-
-# void esyslog(char* priority, char* tag, char* message)
-#
-# use the system logger to log a message
-#
-esyslog() {
- local pri
- local tag
-
- [ "$#" -le 2 ] && return 0
- if [ -x /usr/bin/logger ] ; then
- pri="$1"
- tag="$2"
- shift 2
-
- /usr/bin/logger -p "${pri}" -t "${tag}" -- "$@"
- fi
-
- return 0
-}
-
-# void eindent(int num)
-#
-# increase the indent used for e-commands.
-#
-eindent() {
- local i="${1:-0}"
- [ "$i" -gt 0 ] || i="${RC_DEFAULT_INDENT}"
- esetdent $(( ${#RC_INDENTATION} + $i ))
-}
-
-# void eoutdent(int num)
-#
-# decrease the indent used for e-commands.
-#
-eoutdent() {
- local i="${1:-0}"
- [ "$i" -gt 0 ] || i="${RC_DEFAULT_INDENT}"
- esetdent $(( ${#RC_INDENTATION} - $i ))
-}
-
-# void esetdent(int num)
-#
-# hard set the indent used for e-commands.
-# num defaults to 0
-#
-esetdent() {
- local i="${1:-0}"
- [ "$i" -lt 0 ] && i=0
- RC_INDENTATION="$(printf "%${i}s" '')"
-}
-
-# void einfo(char* message)
-#
-# show an informative message (with a newline)
-#
-einfo() {
- einfon "$*\n"
- LAST_E_CMD=einfo
- return 0
-}
-
-# void einfon(char* message)
-#
-# show an informative message (without a newline)
-#
-einfon() {
- [ "${RC_QUIET_STDOUT}" = "yes" ] && return 0
- [ "${RC_ENDCOL}" != "yes" ] && [ "${LAST_E_CMD}" = "ebegin" ] && echo
- printf " ${GOOD}*${NORMAL} ${RC_INDENTATION}$*"
- LAST_E_CMD=einfon
- return 0
-}
-
-# void ewarn(char* message)
-#
-# show a warning message + log it
-#
-ewarn() {
- if [ "${RC_QUIET_STDOUT}" = "yes" ]; then
- printf " $*\n"
- else
- [ "${RC_ENDCOL}" != "yes" ] && [ "${LAST_E_CMD}" = "ebegin" ] && echo
- printf " ${WARN}*${NORMAL} ${RC_INDENTATION}$*\n"
- fi
-
- # Log warnings to system log
- esyslog "daemon.warning" "rc-scripts" "$@"
-
- LAST_E_CMD=ewarn
- return 0
-}
-
-# void eerror(char* message)
-#
-# show an error message + log it
-#
-eerror() {
- if [ "${RC_QUIET_STDOUT}" = "yes" ]; then
- printf " $*\n" >&2
- else
- [ "${RC_ENDCOL}" != "yes" ] && [ "${LAST_E_CMD}" = "ebegin" ] && echo
- printf " ${BAD}*${NORMAL} ${RC_INDENTATION}$*\n"
- fi
-
- # Log errors to system log
- esyslog "daemon.err" "rc-scripts" "$@"
-
- LAST_E_CMD=eerror
- return 0
-}
-
-# void ebegin(char* message)
-#
-# show a message indicating the start of a process
-#
-ebegin() {
- local msg="$@" dots spaces
- spaces="$(printf '%'"${#RC_DOT_PATTERN}"'s' '')"
- [ "${RC_QUIET_STDOUT}" = "yes" ] && return 0
-
- if [ -n "${RC_DOT_PATTERN}" ]; then
- dots="$(printf "%$(( $COLS - 3 - ${#RC_INDENTATION} - ${#msg} - 7 ))s" '')"
- while [ "${dots#${spaces}}" != "${dots}" ] ; do
- dots="${dots#${spaces}}${RC_DOT_PATTERN}"
- done
- msg="${msg}${dots}"
- else
- msg="${msg} ..."
- fi
- einfon "${msg}"
- [ "${RC_ENDCOL}" = "yes" ] && echo
-
- LAST_E_LEN=$(( 3 + ${#RC_INDENTATION} + ${#msg} ))
- LAST_E_CMD=ebegin
- return 0
-}
-
-# void _eend(int error, char *efunc, char* errstr)
-#
-# indicate the completion of process, called from eend/ewend
-# if error, show errstr via efunc
-#
-# This function is private to functions.sh. Do not call it from a
-# script.
-#
-_eend() {
- local retval="${1:-0}" efunc="${2:-eerror}" msg
- shift 2
-
- if [ "${retval}" -eq 0 ]; then
- [ "${RC_QUIET_STDOUT}" = "yes" ] && return 0
- msg="${BRACKET}[ ${GOOD}ok${BRACKET} ]${NORMAL}"
- else
- if [ "$#" -gt 0 ] ; then
- "${efunc}" "$@"
- fi
- msg="${BRACKET}[ ${BAD}!!${BRACKET} ]${NORMAL}"
- fi
-
- if [ "${RC_ENDCOL}" = "yes" ]; then
- printf "${ENDCOL} ${msg}\n"
- else
- [ "${LAST_E_CMD}" = "ebegin" ] || LAST_E_LEN=0
- printf "%$(( ${COLS} - ${LAST_E_LEN} - 6 ))s%b\n" '' "${msg}"
- fi
-
- return "${retval}"
-}
-
-# void eend(int error, char* errstr)
-#
-# indicate the completion of process
-# if error, show errstr via eerror
-#
-eend() {
- local retval="${1:-0}"
- shift
-
- _eend "${retval}" eerror "$@"
-
- LAST_E_CMD=eend
- return "$retval"
-}
-
-# void ewend(int error, char* errstr)
-#
-# indicate the completion of process
-# if error, show errstr via ewarn
-#
-ewend() {
- local retval="${1:-0}"
- shift
-
- _eend "${retval}" ewarn "$@"
-
- LAST_E_CMD=ewend
- return "$retval"
-}
-#}}}
-
## END OF FILE #################################################################
# vim:foldmethod=marker tw=80 ai expandtab shiftwidth=2 tabstop=2