#!/bin/sh

#######################################################
## LINUX STANDARD BASE FUNCTIONS BY CALLUM DICKINSON ##
#######################################################

## Callum Dickinson <gcfreak_ag20@hotmail.com>
## Sonic Team Junior <http://www.srb2.org>
## http://mb.srb2.org/showthread.php?t=31137
## svn://code.srb2.org/SRB2/branches/WII

## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
## as published by the Free Software Foundation; either version 2
## of the License, or (at your option) any later version.

## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.


## Any lines in this file preceeded by a hash ('#') indicates a comment, and is not read by the interpreter.

# not used by any SRB2Wii programs and requires libm in BusyBox, let's disable it to make things faster!
#start_daemon () {
#    local force nice pidfile exec i
#    force=0
#    nice=0
#    pidfile=/dev/null

#    OPTIND=1
#    while getopts fn:p: opt ; do
#        case "$opt" in
#            f)  force=1;;
#            n)  nice="$OPTARG";;
#            p)  pidfile="$OPTARG";;
#        esac
#    done
    
#    shift $(($OPTIND - 1))
#    [ "$1" = '--' ] && shift

#    exec="$1"; shift

#    if [ $force = 1 ]; then
#        eval /sbin/start-stop-daemon --start --nicelevel $nice --quiet --startas $exec --pidfile /dev/null --oknodo -- "$@"
#    elif [ $pidfile ]; then
#        eval /sbin/start-stop-daemon --start --nicelevel $nice --quiet --exec $exec --oknodo --pidfile "$pidfile" -- "$@"
#    else
#        eval /sbin/start-stop-daemon --start --nicelevel $nice --quiet --exec $exec --oknodo -- "$@"
#    fi
#}

# not used by any SRB2Wii programs and requires libm in BusyBox, let's disable it to make things faster!
#pidofproc () {
#    local pidfile line i pids= status specified pid
#    pidfile=
#    specified=
    
#    OPTIND=1
#    while getopts p: opt ; do
#        case "$opt" in
#            p)  pidfile="$OPTARG"; specified=1;;
#        esac
#    done
#    shift $(($OPTIND - 1))

#    if [ -z "${pidfile:-}" ]; then
#        pidfile=/var/run/${1##*/}.pid
#    fi

#    if [ -f "$pidfile" ]; then
#        read pid < "$pidfile"
#        if [ -n "${pid:-}" ]; then
#            if $(kill -0 "${pid:-}" 2> /dev/null); then
#                print "$pid"
#                return 0
#            else
#                return 1 # program is dead and /var/run pid file exists
#            fi
#        fi
#    fi
#    if [ -x /bin/pidof -a ! "$specified" ]; then
#        /bin/pidof -o %PPID $1
#        status="$?"
#        [ "$status" = 1 ] && return 3 # program is not running
#        return 0
#    fi
#    return 4 # program or service is unknown
#}

# start-stop-daemon uses the same algorithm as "pidofproc" above. not used by any SRB2Wii programs and requires libm in BusyBox, let's disable it to make things faster!
#killproc () {
#    local pidfile sig status base i name_param
#    pidfile=
#    name_param=

#    OPTIND=1
#    while getopts p: opt ; do
#        case "$opt" in
#            p)  pidfile="$OPTARG";;
#        esac
#    done
#    shift $(($OPTIND - 1))

#    base=${1##*/}
#    if [ ! $pidfile ]; then
#        pidfile=/var/run/$base.pid
#        name_param="--name $base"
#    fi

#    sig=$(print ${2:-} | sed -e 's/^-\(.*\)/\1/')
#    sig=$(print $sig | sed -e 's/^SIG\(.*\)/\1/')
#    if [ -n "$sig" ]; then
#        /sbin/start-stop-daemon --stop --pidfile "$pidfile" --signal "$sig" --quiet $name_param
#    else
#        /sbin/start-stop-daemon --stop --pidfile "$pidfile" --retry 5 --quiet --oknodo $name_param
#    fi
#    status="$?"
#    if [ "$status" = 1 ]; then
#        [ -n "$sig" ] && return 0
#        return 3 # program is not running
#    fi

#    if [ -z "$sig" ]; then
#        pidofproc -p $pidfile "$1" >/dev/null || rm -f "$pidfile"
#    fi
#    return 0
#}

log_use_fancy_output () {
   if [ "$bootsplashoff" ]; then
	   TPUT=/usr/bin/tput
	   EXPR=/usr/bin/expr
	#    if [ "x$TERM" != "xdumb" ] && [ -x $TPUT ] && [ -x $EXPR ] && $TPUT hpa 60 >/dev/null 2>&1 && $TPUT setaf 1 >/dev/null 2>&1; then
	#        [ -z $FANCYTTY ] && FANCYTTY=1 || true
	#    else
	#        FANCYTTY=0
	#    fi
	#    case "$FANCYTTY" in
	#        1|Y|yes|true)   true;;
	#        *)              false;;
	#    esac
	     [ -x $TPUT ] && [ -x $EXPR ] && true
   fi
}

log_success_msg () {
   if [ "$bootsplashoff" ]; then
    print "$@"
   fi
}

log_failure_msg () {
   if [ "$bootsplashoff" ]; then
    if log_use_fancy_output; then
        RED=`$TPUT setaf 1`
        NORMAL=`$TPUT op`
        print "$RED*$NORMAL $@"
    else
        print "$@"
    fi
   fi
}

log_warning_msg () {
   if [ "$bootsplashoff" ]; then
    if log_use_fancy_output; then
        YELLOW=`$TPUT setaf 3`
        NORMAL=`$TPUT op`
        print "$YELLOW*$NORMAL $@"
    else
        print "$@"
    fi
   fi
}

#
# NON-LSB HELPER FUNCTIONS
#
# int get_lsb_header_val (char *scriptpathname, char *key)
get_lsb_header_val () {
        if [ ! -f "$1" ] || [ -z "${2:-}" ]; then
                return 1
        fi
        LSB_S="### BEGIN INIT INFO"
        LSB_E="### END INIT INFO"
        sed -n "/$LSB_S/,/$LSB_E/ s/# $2: \(.*\)/\1/p" $1
}

# int log_begin_message (char *message)
log_begin_msg () {
   if [ "$bootsplashoff" ]; then
    if [ -z "${1:-}" ]; then
        return 1
    fi
    print -n "$@"
   fi
}

# Sample usage:
# log_daemon_msg "Starting GNOME Login Manager" "gdm"
#
# On Debian, would output "Starting GNOME Login Manager: gdm"
# On Ubuntu, would output " * Starting GNOME Login Manager..."
#
# If the second argument is omitted, logging suitable for use with
# log_progress_msg() is used:
#
# log_daemon_msg "Starting remote filesystem services"
#
# On Debian, would output "Starting remote filesystem services:"
# On Ubuntu, would output " * Starting remote filesystem services..."

log_daemon_msg () {
   if [ "$bootsplashoff" ]; then
    if [ -z "${1:-}" ]; then
        return 1
    fi

    if [ -z "${2:-}" ]; then
        print -n "$1:"
        return
    fi
    
    print -n "$1: $2"
   fi
}

# #319739
#
# Per policy docs:
#
#     log_daemon_msg "Starting remote file system services"
#     log_progress_msg "nfsd"; start-stop-daemon --start --quiet nfsd
#     log_progress_msg "mountd"; start-stop-daemon --start --quiet mountd
#     log_progress_msg "ugidd"; start-stop-daemon --start --quiet ugidd
#     log_end_msg 0
#
# You could also do something fancy with log_end_msg here based on the
# return values of start-stop-daemon; this is left as an exercise for
# the reader...
#
# On Ubuntu, one would expect log_progress_msg to be a no-op.
log_progress_msg () {
   if [ "$bootsplashoff" ]; then
    if [ -z "${1:-}" ]; then
        return 1
    fi
    print -n " $@"
   fi
}


# int log_end_message (int exitstatus)
log_end_msg () {
   if [ "$bootsplashoff" ]; then
    # If no arguments were passed, return
    [ -z "${1:-}" ] && return 1

    # Only do the fancy stuff if we have an appropriate terminal
    # and if /usr is already mounted
    if log_use_fancy_output; then
        RED=`$TPUT setaf 1`
        NORMAL=`$TPUT op`
        if [ $1 -eq 0 ]; then
            print "."
        else
            print " ${RED}failed!${NORMAL}"
        fi
    else
	if [ $1 -eq 0 ]; then
            print "."
        else
            print " failed!"
        fi
    fi
    return $1
   fi
}

log_action_msg () {
   if [ "$bootsplashoff" ]; then
    print "$@."
   fi
}

log_action_begin_msg () {
   if [ "$bootsplashoff" ]; then
    print -n "$@..."
   fi
}

log_action_cont_msg () {
   if [ "$bootsplashoff" ]; then
    print -n "$@..."
   fi
}

log_action_end_msg () {
   if [ "$bootsplashoff" ]; then
    if [ -z "${2:-}" ]; then
        end="."
    else
        end=" ($2)."
    fi

    if [ $1 -eq 0 ]; then
        print "done${end}"
    else
        if log_use_fancy_output; then
            RED=`$TPUT setaf 1`
            NORMAL=`$TPUT op`
            print "${RED}failed${end}${NORMAL}"
        else
            print "failed${end}"
        fi
    fi
   fi
}

FANCYTTY=
[ -e /etc/lsb-base-logging.sh ] && . /etc/lsb-base-logging.sh || true
