#! /bin/ksh

AUMIX=/usr/bin/aumix
OSDCAT="/usr/bin/osd_cat -o 32 -A center -d 2 -l 1 -c green -O 1 -u black -s 10 -S grey20"
osdfont='-dejavu-dejavu serif-medium-r-normal--0-300-0-0-p-0-iso10646-1'
useosd=

if [ "$1" = "-d" ]; then
	useosd=true
	shift
fi

val=${1:-query}
[ "$val" = q ] && val=query
dev=${2:-v}

case "$dev" in
	[vbtswplmcxWrio123]) ;;

	*)
	echo "Error: must specify one of vbtswplmcxWrio123 (default w)" >&2
	[ "$val" = query ] && echo -1
	exit 1
	;;
esac

level=$($AUMIX -"$dev" q)
level=${level#* }
level=${level%%,*}

case "$level" in
	*[!0-9]*)
		printf "Error: level not a number (%s)\n" "$level" >&2
		[ "$val" = query ] && echo -1
		exit 1
	;;
	"")
		echo "Error: level not found" >&2
		[ "$val" = query ] && echo -1
		exit 1
	;;
esac


case "$val" in
	[0-9] | [0-9][0-9] | [0-9][0-9][0-9] ) newlevel=$((10#$val)) ;;
	+)                     newlevel=$((level + 1)) ;;
	-)                     newlevel=$((level - 1)) ;;
	++)                    newlevel=$((level + 5)) ;;
	--)                    newlevel=$((level - 5)) ;;
	+[0-9] | +[0-9][0-9])  newlevel=$((level + 10#${val#+})) ;;
	-[0-9] | -[0-9][0-9])  newlevel=$((level - 10#${val#-})) ;;
	query)                 newlevel=$level; printf "%d\n" "$level" ;;
	*)                     printf "Invalid setting: \"%s\"\n" "$val" >&2
	exit 1
	;;
esac

if [ "$newlevel" -lt 0 ]; then
	newlevel=0
fi

if [ "$newlevel" -gt 100 ]; then
	newlevel=100
fi

if [ "$newlevel" -ne "$level" ]; then
	if [ "$useosd" ]; then
		pkill osd_cat
		$OSDCAT -f "$osdfont" -b percentage -P "$newlevel" &
	fi
	$AUMIX -"$dev" "$newlevel"
fi
