wscons revision 1.12
1#!/bin/sh
2#
3# $NetBSD: wscons,v 1.12 2007/04/02 12:42:42 mishka Exp $
4#
5
6# PROVIDE: wscons
7# REQUIRE: mountcritremote
8# BEFORE:  LOGIN
9
10$_rc_subr_loaded . /etc/rc.subr
11
12name="wscons"
13rcvar=$name
14start_cmd="wscons_start"
15stop_cmd=":"
16
17wscons_start()
18{
19	wscfg=/usr/sbin/wsconscfg
20	wsfld=/usr/sbin/wsfontload
21	wsctl=/sbin/wsconsctl
22	config=/etc/wscons.conf
23	usage="Usage: wsconfig [-n] [-f configfile] [-font fontpgm] [-screen screenpgm]"
24	DOIT=
25
26	while [ $# -gt 0 ]; do
27		case $1 in
28			-n)
29				DOIT=echo
30				;;
31			-f)
32				config=$2
33				shift
34				;;
35			-font)
36				wsfld=$2
37				shift
38				;;
39			-screen)
40				wscfg=$2
41				shift
42				;;
43			*)
44				echo $usage
45				exit 1
46				;;
47		esac
48		shift
49	done
50
51
52	# args mean:
53	#	screen idx scr emul
54	#	font   name width height enc file
55	( while read type arg1 arg2 arg3 arg4 arg5; do
56		case "$type" in
57			\#*|"")
58				continue
59				;;
60
61			font)
62				name=$arg1
63				width=$arg2
64				height=$arg3
65				enc=$arg4
66				file=$arg5
67				cmd=$wsfld
68
69				case $width in
70					-)
71						;;
72					*)
73						cmd="$cmd -w $width"
74						;;
75				esac
76				case $height in
77					-)
78						;;
79					*)
80						cmd="$cmd -h $height"
81						;;
82				esac
83				case $enc in
84					-)
85						;;
86					*)
87						cmd="$cmd -e $enc"
88						;;
89				esac
90				cmd="$cmd -N $name $file"
91				eval $DOIT $cmd
92				;;
93
94			screen)
95				idx=$arg1
96				scr=$arg2
97				emul=$arg3
98				cmd=$wscfg
99
100				case $scr in
101					-)
102						;;
103					*)
104						cmd="$cmd -t $scr"
105						;;
106				esac
107				case $emul in
108					-)
109						;;
110					*)
111						cmd="$cmd -e $emul"
112						;;
113				esac
114				cmd="$cmd $idx"
115				eval $DOIT $cmd
116				;;
117
118			keyboard)
119				kbd=$arg1
120				cmd=$wscfg
121				case $kbd in
122					-|auto)
123						cmd="$cmd -k"
124						;;
125					*)
126						cmd="$cmd -k $kbd"
127						;;
128				esac
129				eval $DOIT $cmd
130				;;
131
132			encoding)
133				map=$arg1
134				cmd="$wsctl -w \"encoding=$map\""
135				eval $DOIT $cmd
136				;;
137
138			mapfile)
139				mapfile=$arg1
140				( while read entry; do
141				    case "$entry" in
142					\#*|"")
143					    continue
144					    ;;
145					*)
146					    cmd="$wsctl -w \"map+=$entry\""
147					    cmd="$cmd >/dev/null"
148					    eval $DOIT $cmd
149					    ;;
150				    esac
151				done ) < $mapfile
152				;;
153
154			mux)
155				cmd="$wscfg -m $arg1"
156				eval $DOIT $cmd
157				;;
158
159			setvar)
160				dev=$arg1
161				var=$arg2
162				val=$arg3
163
164				case $dev in
165				    ttyE*)
166					cmdmod="-d"
167					;;
168				    wskbd*)
169					cmdmod="-k"
170					;;
171				    wsmouse*)
172					cmdmod="-m"
173					;;
174				esac
175				echo -n "$dev: "
176				cmd="$wsctl -f /dev/$dev $cmdmod -w $var=$val"
177				eval $DOIT $cmd
178				;;
179
180		esac
181	done ) < $config
182}
183
184load_rc_config $name
185run_rc_command "$1"
186