#!/bin/sh
# $Id: fbset.init,v 1.14 2002/07/22 16:03:12 qboosh 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

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

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

function try_load
{
	if [ -n "${FBMODULE}" ]; then
		_modprobe single $FBMODULE
	else
		exit 0
	fi
}

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

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

# See how we were called.
case "$1" in
  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 "." || try_load
		else
			# if not, then try to load specified kernel module
			try_load
		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/* | sed 's|/dev/vc/||g'`"
				fi
				FBDEV=`echo /dev/fb/${FBDEV_NUM}`
			else
				if [ -z "$FBTERMINALS" ]; then
					FBTERMINALS="`cat /etc/inittab | grep '^[0-9]*:' | cut -f1 -d:`"
				fi
				FBDEV=`echo /dev/fb${FBDEV_NUM}`
			fi

			for cons in $FBTERMINALS; do
				/usr/bin/open -c $cons -- /usr/bin/fbset -fb $FBDEV ${DEPTH_options} $FBMODE_default
			done
			
			deltext
			ok
		fi
		touch /var/lock/subsys/fbset
	else
		msg_already_running "fbset"
		exit 1
	fi
	;;
  stop)
    	if [ -f /var/lock/subsys/fbset ]; then
		rm -f /var/lock/subsys/fbset
	else
		msg_not_running fbset
	fi
	;;
  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 "." || exit 0
		echo "Frame buffer present."
	fi
	;;
  restart|reload)
	$0 stop
	$0 start
	;;
  *)
	msg_usage "$0 {start|stop|status|restart|reload}"
	exit 1
esac

exit 0
