#!/bin/sh
#
# $NetBSD: wscons,v 1.13 2011/08/09 08:08:10 mbalmer Exp $
#

# PROVIDE: wscons
# REQUIRE: mountcritremote
# BEFORE:  LOGIN

$_rc_subr_loaded . /etc/rc.subr

name="wscons"
rcvar=$name
start_cmd="wscons_start"
stop_cmd=":"

wscons_start()
{
	wscfg=/usr/sbin/wsconscfg
	wsfld=/usr/sbin/wsfontload
	wsctl=/sbin/wsconsctl
	config=/etc/wscons.conf
	usage="Usage: wsconfig [-n] [-f configfile] [-font fontpgm] [-screen screenpgm]"
	DOIT=

	while [ $# -gt 0 ]; do
		case $1 in
			-n)
				DOIT=echo
				;;
			-f)
				config=$2
				shift
				;;
			-font)
				wsfld=$2
				shift
				;;
			-screen)
				wscfg=$2
				shift
				;;
			*)
				echo $usage
				exit 1
				;;
		esac
		shift
	done


	# args mean:
	#	screen idx scr emul
	#	font   name width height enc file
	( while read type arg1 arg2 arg3 arg4 arg5; do
		case "$type" in
			\#*|"")
				continue
				;;

			font)
				name=$arg1
				width=$arg2
				height=$arg3
				enc=$arg4
				file=$arg5
				cmd=$wsfld

				case $width in
					-)
						;;
					*)
						cmd="$cmd -w $width"
						;;
				esac
				case $height in
					-)
						;;
					*)
						cmd="$cmd -h $height"
						;;
				esac
				case $enc in
					-)
						;;
					*)
						cmd="$cmd -e $enc"
						;;
				esac
				cmd="$cmd -N $name $file"
				eval $DOIT $cmd
				;;

			screen)
				idx=$arg1
				scr=$arg2
				emul=$arg3
				cmd=$wscfg

				case $scr in
					-)
						;;
					*)
						cmd="$cmd -t $scr"
						;;
				esac
				case $emul in
					-)
						;;
					*)
						cmd="$cmd -e $emul"
						;;
				esac
				cmd="$cmd $idx"
				eval $DOIT $cmd
				;;

			keyboard)
				kbd=$arg1
				cmd=$wscfg
				case $kbd in
					-|auto)
						cmd="$cmd -k"
						;;
					*)
						cmd="$cmd -k $kbd"
						;;
				esac
				eval $DOIT $cmd
				;;

			encoding)
				map=$arg1
				cmd="$wsctl -w \"encoding=$map\""
				echo -n 'Keyboard '
				eval $DOIT $cmd
				;;

			mapfile)
				mapfile=$arg1
				( while read entry; do
				    case "$entry" in
					\#*|"")
					    continue
					    ;;
					*)
					    cmd="$wsctl -w \"map+=$entry\""
					    cmd="$cmd >/dev/null"
					    eval $DOIT $cmd
					    ;;
				    esac
				done ) < $mapfile
				;;

			mux)
				cmd="$wscfg -m $arg1"
				eval $DOIT $cmd
				;;

			setvar)
				dev=$arg1
				var=$arg2
				val=$arg3

				case $dev in
				    ttyE*)
					cmdmod="-d"
					;;
				    wskbd*)
					cmdmod="-k"
					;;
				    wsmouse*)
					cmdmod="-m"
					;;
				esac
				echo -n "$dev: "
				cmd="$wsctl -f /dev/$dev $cmdmod -w $var=$val"
				eval $DOIT $cmd
				;;

		esac
	done ) < $config
}

load_rc_config $name
run_rc_command "$1"
