NetBSD/etc/rc.d/wscons

187 lines
2.5 KiB
Bash
Executable File

#!/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"