11.1Slukem#!/bin/sh
21.1Slukem#
31.14Spgoyette# $NetBSD: wscons,v 1.14 2025/04/08 10:43:52 pgoyette Exp $
41.1Slukem#
51.1Slukem
61.1Slukem# PROVIDE: wscons
71.4Slukem# REQUIRE: mountcritremote
81.8Sthorpej# BEFORE:  LOGIN
91.1Slukem
101.10Smycroft$_rc_subr_loaded . /etc/rc.subr
111.1Slukem
121.1Slukemname="wscons"
131.6Slukemrcvar=$name
141.5Slukemstart_cmd="wscons_start"
151.2Sveegostop_cmd=":"
161.1Slukem
171.5Slukemwscons_start()
181.1Slukem{
191.5Slukem	wscfg=/usr/sbin/wsconscfg
201.5Slukem	wsfld=/usr/sbin/wsfontload
211.7Sdrochner	wsctl=/sbin/wsconsctl
221.5Slukem	config=/etc/wscons.conf
231.5Slukem	usage="Usage: wsconfig [-n] [-f configfile] [-font fontpgm] [-screen screenpgm]"
241.5Slukem	DOIT=
251.5Slukem
261.5Slukem	while [ $# -gt 0 ]; do
271.5Slukem		case $1 in
281.5Slukem			-n)
291.5Slukem				DOIT=echo
301.5Slukem				;;
311.5Slukem			-f)
321.5Slukem				config=$2
331.5Slukem				shift
341.5Slukem				;;
351.5Slukem			-font)
361.5Slukem				wsfld=$2
371.5Slukem				shift
381.5Slukem				;;
391.5Slukem			-screen)
401.5Slukem				wscfg=$2
411.5Slukem				shift
421.5Slukem				;;
431.5Slukem			*)
441.5Slukem				echo $usage
451.5Slukem				exit 1
461.5Slukem				;;
471.5Slukem		esac
481.5Slukem		shift
491.5Slukem	done
501.5Slukem
511.5Slukem
521.5Slukem	# args mean:
531.5Slukem	#	screen idx scr emul
541.5Slukem	#	font   name width height enc file
551.5Slukem	( while read type arg1 arg2 arg3 arg4 arg5; do
561.5Slukem		case "$type" in
571.5Slukem			\#*|"")
581.5Slukem				continue
591.5Slukem				;;
601.9Slukem
611.5Slukem			font)
621.5Slukem				name=$arg1
631.5Slukem				width=$arg2
641.5Slukem				height=$arg3
651.5Slukem				enc=$arg4
661.5Slukem				file=$arg5
671.5Slukem				cmd=$wsfld
681.5Slukem
691.5Slukem				case $width in
701.5Slukem					-)
711.5Slukem						;;
721.5Slukem					*)
731.5Slukem						cmd="$cmd -w $width"
741.5Slukem						;;
751.5Slukem				esac
761.5Slukem				case $height in
771.5Slukem					-)
781.5Slukem						;;
791.5Slukem					*)
801.5Slukem						cmd="$cmd -h $height"
811.5Slukem						;;
821.5Slukem				esac
831.5Slukem				case $enc in
841.5Slukem					-)
851.5Slukem						;;
861.5Slukem					*)
871.5Slukem						cmd="$cmd -e $enc"
881.5Slukem						;;
891.5Slukem				esac
901.5Slukem				cmd="$cmd -N $name $file"
911.5Slukem				eval $DOIT $cmd
921.5Slukem				;;
931.9Slukem
941.5Slukem			screen)
951.5Slukem				idx=$arg1
961.5Slukem				scr=$arg2
971.5Slukem				emul=$arg3
981.5Slukem				cmd=$wscfg
991.5Slukem
1001.5Slukem				case $scr in
1011.5Slukem					-)
1021.5Slukem						;;
1031.5Slukem					*)
1041.5Slukem						cmd="$cmd -t $scr"
1051.5Slukem						;;
1061.5Slukem				esac
1071.5Slukem				case $emul in
1081.5Slukem					-)
1091.5Slukem						;;
1101.5Slukem					*)
1111.5Slukem						cmd="$cmd -e $emul"
1121.5Slukem						;;
1131.5Slukem				esac
1141.5Slukem				cmd="$cmd $idx"
1151.5Slukem				eval $DOIT $cmd
1161.5Slukem				;;
1171.9Slukem
1181.5Slukem			keyboard)
1191.5Slukem				kbd=$arg1
1201.5Slukem				cmd=$wscfg
1211.5Slukem				case $kbd in
1221.5Slukem					-|auto)
1231.5Slukem						cmd="$cmd -k"
1241.5Slukem						;;
1251.5Slukem					*)
1261.5Slukem						cmd="$cmd -k $kbd"
1271.5Slukem						;;
1281.5Slukem				esac
1291.5Slukem				eval $DOIT $cmd
1301.7Sdrochner				;;
1311.9Slukem
1321.7Sdrochner			encoding)
1331.7Sdrochner				map=$arg1
1341.9Slukem				cmd="$wsctl -w \"encoding=$map\""
1351.13Smbalmer				echo -n 'Keyboard '
1361.7Sdrochner				eval $DOIT $cmd
1371.7Sdrochner				;;
1381.9Slukem
1391.7Sdrochner			mapfile)
1401.7Sdrochner				mapfile=$arg1
1411.7Sdrochner				( while read entry; do
1421.7Sdrochner				    case "$entry" in
1431.7Sdrochner					\#*|"")
1441.7Sdrochner					    continue
1451.7Sdrochner					    ;;
1461.7Sdrochner					*)
1471.9Slukem					    cmd="$wsctl -w \"map+=$entry\""
1481.7Sdrochner					    cmd="$cmd >/dev/null"
1491.7Sdrochner					    eval $DOIT $cmd
1501.7Sdrochner					    ;;
1511.7Sdrochner				    esac
1521.7Sdrochner				done ) < $mapfile
1531.5Slukem				;;
1541.9Slukem
1551.5Slukem			mux)
1561.5Slukem				cmd="$wscfg -m $arg1"
1571.5Slukem				eval $DOIT $cmd
1581.5Slukem				;;
1591.9Slukem
1601.9Slukem			setvar)
1611.12Smishka				dev=$arg1
1621.12Smishka				var=$arg2
1631.12Smishka				val=$arg3
1641.12Smishka
1651.12Smishka				case $dev in
1661.14Spgoyette				    ttyE*|constty|console)
1671.12Smishka					cmdmod="-d"
1681.11Speter					;;
1691.12Smishka				    wskbd*)
1701.12Smishka					cmdmod="-k"
1711.11Speter					;;
1721.12Smishka				    wsmouse*)
1731.12Smishka					cmdmod="-m"
1741.11Speter					;;
1751.11Speter				esac
1761.12Smishka				echo -n "$dev: "
1771.12Smishka				cmd="$wsctl -f /dev/$dev $cmdmod -w $var=$val"
1781.9Slukem				eval $DOIT $cmd
1791.9Slukem				;;
1801.9Slukem
1811.5Slukem		esac
1821.5Slukem	done ) < $config
1831.1Slukem}
1841.1Slukem
1851.3Slukemload_rc_config $name
1861.1Slukemrun_rc_command "$1"
187