#!/bin/sh
draw_box () { echo -n box:$(($1*32)):$(($2*10)):31:11:$3; }
draw_xor () { echo -n xor:$(($1*32)):$(($2*10)):31:11:; }
column () {
	local x=$1
	local y=$2 yy=$2
	local s=-65536 s0=$((y*4))
	local k kk=0 c d
	glcdd $(draw_box $x $yy 1) fls:
	ub300key -wheel | while read k c d; do
		s=$((s+d))
		if [ $s -lt 0 ]; then s=0; fi
		if [ $s -ge $(($3*4)) ]; then s=$(($3*4-1)); fi
		s=$((s+s0))
		s0=0
		y=$((s/4))
		if [ $yy != $y ]; then
			glcdd $(draw_box $x $yy 0) $(draw_box $x $y 1) fls:
			yy=$y
		fi
		if [ $((kk & 16)) = 0 -a $((k & 16)) != 0 ]; then
			glcdd $(draw_box $x $y 0)
			echo $y
			return 1
		elif [ $((kk & 32)) = 0 -a $((k & 32)) != 0 ]; then
			glcdd $(draw_box $x $y 0) $(draw_xor $x $y) fls:
			echo $y
			return 0
		fi
		kk=$k
	done
}
push_any_key () { local k l; ub300key -wheel|while read k l; do [ $k != 0 ] && { echo $k; break; }; done; }

y0=0
y1=0
y2=0
end=0
glcdd cls: 'asc:0:0:2:0:1:Please wait' fls:
fbblank /dev/fb0 1 /dev/fb1 1 /dev/fb2 1
davincifb /dev/fb1 backg 1 4
hdmi-compliance 3 7 &
it=$!; trap "kill $it" INT TERM; sleep 11; kill $it; trap - INT TERM
glcdd cls: $'asc:8:2:2:0:1:Tx1\nTx2' $'asc:40:2:2:0:1:Rx1\nRx2\nRx3\nRx4\nSD\nLine' fls:
while [ $end = 0 ]; do
	y0=$(column 0 $y0 2) || break
	y1=$(column 1 $y1 6) || break
	if [ $y1 -ge 4 ]; then
		glcdd $'asc:72:2:2:0:1:720\n480' fls:
		y2=$(column 2 $y2 2) || break
	fi
	sink=$((y0+1))
	src=$((y1+1))
	if [ $src != 5 ]; then
		fbblank /dev/fb1 1
		ap=0
	else
		mkdir -p /media/mmcblk0p1
		while ! mount|grep -q mmcblk0p1; do
			mount /dev/mmcblk0p1 /media/mmcblk0p1 -o ro || sleep 1
		done
		fbblank /dev/fb1 0
		if [ $y2 = 1 ]; then
			f=480.jpg
		else
			f=720.jpg
		fi
		playjpeg /dev/fb1 /media/mmcblk0p1/$f
		cp /media/mmcblk0p1/audio.wav /tmp/
		umount /media/mmcblk0p1
		aplay /tmp/audio.wav &
		ap=$!
	fi
	echo hdmi-compliance $sink $src $y2 1>&2
	hdmi-compliance $sink $src $y2 &
	it=$!
	trap "kill $it" INT TERM
	end=$(push_any_key)
	if [ -z "$end" ]; then end=1; else end=$((end==16)); fi
	kill $it
	[ $ap != 0 ] && kill $ap
	trap - INT TERM
	glcdd $(draw_xor 0 $y0) $(draw_xor 1 $y1) fil:64:0:31:21:0 fls:
done
glcdd cls: fls:
