#!/bin/sh

# console	Loads console font and keyboard table
#
# chkconfig:	2345 70 30
#
# description:	Loads the console font, the application-charset map \
#		and the keyboard table.

# This must be executed *after* /usr is mounted.
# This means, if /usr is NFS-mounted it needs to
# be run after networking and NFS mounts are up.

[ -f /etc/sysconfig/console ] || exit 0

[ -f /bin/loadkeys -o -f /usr/bin/loadkeys ] || exit 0
[ -f /bin/setfont -o -f /usr/bin/setfont ] || exit 0

# Source function library
. /etc/rc.d/init.d/functions

if is_yes "$VSERVER"; then
	exit 0
fi

[ -f /etc/sysconfig/i18n ] && . /etc/sysconfig/i18n
. /etc/sysconfig/console

start() {
	# Checking if we have framebuffer enabled
	if [ -f /proc/fb ]; then
		# /proc shows as files with size=0, this is workaround
		if cat /proc/fb | grep -q "."; then FB=yes; fi
	fi

	if [ -n "$SVGATEXTMODE" ]; then
		run_cmd "Setting Text Mode $SVGATEXTMODE" SVGATextMode $SVGATEXTMODE
	fi

	# Check for devfs (workaround: -a option doesn't work at all)
	local devpath tty cons
	if [ -d /dev/vc ]; then
		devpath="/dev/vc/"
	else
		devpath="/dev/tty"
	fi
	# save old tty number
	tty=$(/usr/bin/tty)
	if [ "$?" -ne 0 -o "$tty" = "/dev/console" ]; then
		tty=1
	else
		tty=${tty#$devpath}
	fi

	if [ -n "$CONSOLEFONT" -a -x /sbin/setsysfont ]; then
		show "Loading console font and map"
		busy

		# don't initialize on multiple terminals if we use fbset
		# (assume that, in this case fb is loaded as a module)
		if [ ! -z "$FB" ]; then
			if [ -z "$SET_FONT_TERMINALS" ]; then
				# check if devfs (workaround: -a option doesn't work at all)
				if [ -d /dev/vc ]; then
					SET_FONT_TERMINALS=$(ls /dev/vc/)
				else
					SET_FONT_TERMINALS=$(awk -F: '/^[0-9]*:/{print $1}' /etc/inittab)
				fi
			fi

			for cons in $SET_FONT_TERMINALS; do
				/usr/bin/open -c $cons -s -w -- /sbin/setsysfont
				if [ "$NUM_LOCK" ]; then
					if [ $NUM_LOCK = "on" ]; then
						/usr/bin/open -c $cons -s -w -- /usr/bin/setleds -D +num
					else
						/usr/bin/open -c $cons -s -w -- /usr/bin/setleds -D -num
					fi
				fi
			done

			if [[ "$tty" = [0-9]* ]]; then
				/usr/bin/switchto $tty
			fi
		else
			for cons in $SET_FONT_TERMINALS; do
				/usr/bin/open -c $cons -s -w -- /sbin/setsysfont
			done
		fi
		ok
	fi

	if [ -n "$KEYTABLE" ]; then
		if [ "$(LANG="$LANG" locale charmap)" = "UTF-8" ]; then
			run_cmd "Loading keyboard table" loadkeys -u $KEYTABLE < /dev/tty0 > /dev/tty0
		else
			run_cmd "Loading keyboard table" loadkeys $KEYTABLE < /dev/tty0 > /dev/tty0
		fi
	fi
	run_cmd "Enabling SAK sequence" /bin/sh -c "echo Control Alt keycode 101 = SAK | loadkeys"

	power_option=""
	if ! is_no "$POWER_SAVE"; then
		if [ "$BLANK_TIME" ]; then
			power_option="-blank $BLANK_TIME";
		fi
		if [ "$POWERDOWN_TIME" ]; then
			power_option="-powerdown $POWERDOWN_TIME $power_option";
		fi
	else
		power_option="-blank 0 -powerdown 0 -powersave off";
	fi
	setterm_option="$power_option"
	if [ "$FOREGROUND_COLOUR" ]; then
		setterm_option="$setterm_option -foreground $FOREGROUND_COLOUR"
	fi
	if [ "$BACKGROUND_COLOUR" ]; then
		setterm_option="$setterm_option -background $BACKGROUND_COLOUR"
	fi
	if [ "$BEEP_LENGTH" ]; then
		setterm_option="$setterm_option -blength $BEEP_LENGTH"
	fi
	if [ "$BEEP_FREQ" ]; then
		setterm_option="$setterm_option -bfreq $BEEP_FREQ"
	fi
	setterm_option="$setterm_option -store"

	for cons in $SET_FONT_TERMINALS; do
		/usr/bin/open -c $cons -s -w -- /usr/bin/setterm $setterm_option
	done
	if [[ "$tty" = [0-9]* ]]; then
		/usr/bin/switchto $tty
	fi

	touch /var/lock/subsys/console
}

RETVAL=0
case "$1" in
  start)
	if [ ! -f /var/lock/subsys/console ]; then
		start
	fi
	;;
  restart)
	start
	;;
  try-restart)
	if [ -f /var/lock/subsys/console ]; then
		start
	fi
	;;
  reload|force-reload)
	if [ -f /var/lock/subsys/console ]; then
		start
	else
		RETVAL=7
	fi
	;;
  stop)
	if [ -f /var/lock/subsys/console ]; then
		run_cmd "Setting terminals to default values" /usr/bin/setterm -default
		rm -f /var/lock/subsys/console
	fi
	;;
  status)
	/usr/bin/setleds
	;;
  *)
	msg_usage "$0 {start|stop|restart|try-restart|reload|force-reload|status}"
	exit 3
esac

exit $RETVAL
