#!/bin/sh
# $Id: fbset.init,v 1.32 2006-12-07 22:00:00 glen Exp $
#
# fbset:	Sets up fbcon video modes.
#
#
# chkconfig:	2345 69 31
# description:	fbset is a utility with which fbcons video modes can be read \
#		and changed
#
# config:	/etc/sysconfig/fbset

# Get service config
if [ -f /etc/sysconfig/fbset ]; then
	. /etc/sysconfig/fbset
fi

if [ -z "${FBMODULE}" ]; then
   	case "$1" in
	start|stop|restart|force-reload)
		exit 0
		;;
	esac
fi

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

# Setting default depth
if [ -n "${DEPTH}" ]; then
	DEPTH_options="-depth ${DEPTH}"
fi

if [ -z "${FBDEV_NUM}" ]; then
	FBDEV_NUM=0
fi

start() {
	# Check if service is already running?
	if [ ! -f /var/lock/subsys/fbset ]; then

		# Check if we have framebuffer in kernel.
		if [ -f /proc/fb ]; then
			# /proc files show as files with size=0, this is a workaround.
			cat /proc/fb | grep -q "." || _modprobe single $FBMODULE
		else
			# if not, then try to load specified kernel module
			_modprobe single $FBMODULE
		fi

		if [ -n "${FBMODE_default}" ]; then
			show "Setting default video mode"
			busy

			# check if devfs (workaround: -a option don't work at all)
			if [ -d /dev/vc ]; then
				if [ -z "$FBTERMINALS" ]; then
					FBTERMINALS=$(ls /dev/vc/)
				fi
				FBDEV=/dev/fb/${FBDEV_NUM}
				devpath="/dev/vc/"
			else
				if [ -z "$FBTERMINALS" ]; then
					FBTERMINALS=$(awk -F: '/^[0-9]*:/{print $1}' /etc/inittab)
				fi
				FBDEV=/dev/fb${FBDEV_NUM}
				devpath="/dev/tty"
			fi

			# save old tty number
			tty=$(/usr/bin/tty)
			tty=${tty#$devpath}

			for cons in $FBTERMINALS; do
				/usr/bin/con2fb $FBDEV $cons
				/usr/bin/switchto $cons
				/usr/bin/fbset -fb \
				  $FBDEV ${DEPTH_options} $FBMODE_default \
				  0<>/dev/tty$cons >&0 2>&0
			done
			[ $tty = "/dev/console" ] && tty=1
			/usr/bin/switchto $tty
			ok
		fi
		touch /var/lock/subsys/fbset
	else
		msg_already_running fbset
	fi
}

stop() {
	if [ -f /var/lock/subsys/fbset ]; then
		rm -f /var/lock/subsys/fbset
	else
		msg_not_running fbset
	fi
}

# See how we were called.
case "$1" in
  start)
  	start
	;;
  stop)
  	stop
	;;
  status)
	# Check if we have framebuffer in kernel.
	if [ -f /proc/fb ]; then
		# /proc files show as files with size=0, this is a workaround.
		cat /proc/fb | grep -q "." && nls "Frame buffer present." && exit 0
	fi

	nls "Frame buffer not present."
	exit 3
	;;
  restart|force-reload)
	stop
	start
	;;
  *)
	msg_usage "$0 {start|stop|restart|force-reload|status}"
	exit 3
esac

exit 0
