NetBSD/etc/rc.d/wscons
mishka 833cf25850 Provide yet more functionality to wscons.conf's "setvar" (see
examples in the wscons.conf). Now, you have to specify wscons
control device and put variable name and parameter on separate
fields.

NB: changes ARE NOT backward compatible and config file must be
checked (but default config doesn't utilizing setvar).
2007-04-02 12:42:42 +00:00

186 lines
2.5 KiB
Bash
Executable File

#!/bin/sh
#
# $NetBSD: wscons,v 1.12 2007/04/02 12:42:42 mishka 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\""
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"