#!/bin/sh

#
# ***** This script takes one argument. This must be a valid generate-file (as it can be found in
# ***** /experiments/UltimateBootCD/generate/ for instance).
# ***** This file will be translated to a vhdl script and sent to stdout.
#


IFS=$'	'
cat $1 \
| grep -v '^#' \
| sed 's/\\/\\\\/g' \
| while read p1 p2 p3 p4; do

#
# ***** ATTENTION: the following three functions are obsolete, they will be deleted in the near future!
# *****            please use 'wait_asc', 'wait_ppm', 'type', 'sshot' and 'log', only.
#

if [ $p1 == "ppm" ]; then
	echo ""
	echo "		ASSERT false REPORT \"ATTENTION: You are using the obsolete function 'ppm' which was replaced by 'wait_ppm' and 'type'\" SEVERITY note;"
	echo "		-- wait for screenshot "$p2
	echo "		assert false report \"wait for "$p2" ("$p3"ms)\" severity note;"
	echo "		gfx_match'shortcut_in_activate(\"2/-1/-1/-1/-1/../screenshots/"$p2"\");"
	echo "		wait on gfx_match(1) until 0 <= gfx_match(1) for "$p3";"
	echo "		gfx_match'deactivate;"
	echo "		if gfx_match(1) < 0 then"
	echo "			screen_shot <= 1;"
	echo "			wait for 2000;"
	echo "			assert false report \"timeout, screenshot taken\" severity failure;"
	echo "		end if;"
	echo "		wait on gfx_match until (-2 = gfx_match(1));"
	echo "		assert false report \"found "$p2"\" severity note;"
	echo ""
	echo "		-- type sequence "$p4""
	echo "		send_keyboard(press, release, 0, "$p4", 300);"
	echo ""
fi

if [ $p1 == "asc" ]; then
	echo ""
	echo "		ASSERT false REPORT \"ATTENTION: You are using the obsolete function 'asc' which was replaced by 'wait_asc' and 'type'\" SEVERITY note;"
	echo "		-- wait for pattern "$p2
	echo "		ASSERT false REPORT \"waiting for "$p2" ("$p3"ms)\" SEVERITY note;"
	echo "		found0'shortcut_in_activate(\""$p2"\");"
	echo "		WAIT ON found0 UNTIL found0 FOR "$p3";"
	echo "		found0'shortcut_in_deactivate;"
	echo "		IF NOT found0 THEN"
	echo "			screen_shot <= 1;"
	echo "			WAIT FOR 2000;"
	echo "			ASSERT false REPORT \"timeout, screenshot taken\" SEVERITY failure;"
	echo "		END IF;"
	echo "		WAIT ON found0 UNTIL NOT found0;"
	echo ""
	echo "		-- type sequence "$p4
	echo "		send_keyboard(press, release, 0, "$p4", 300);"
	echo ""
fi

if [ $p1 == "wait" ]; then
	echo ""
	echo "		ASSERT false REPORT \"ATTENTION: You are using the obsolete function 'wait' which was replaced by 'wait_asc'\" SEVERITY note;"
	echo "		-- wait for pattern "$p2
	echo "		ASSERT false REPORT \"waiting for "$p2" ("$p3"ms)\" SEVERITY note;"
	echo "		found0'shortcut_in_activate(\""$p2"\");"
	echo "		WAIT ON found0 UNTIL found0 FOR "$p3";"
	echo "		found0'shortcut_in_deactivate;"
	echo "		IF NOT found0 THEN"
	echo "			screen_shot <= 1;"
	echo "			WAIT FOR 1000;"
	echo "			ASSERT false REPORT \"timeout, screenshot taken\" SEVERITY failure;"
	echo "		END IF;"
	echo "		WAIT ON found0 UNTIL NOT found0;"
	echo ""
fi


#
# ***** new functions, use these!
#

# wait_ppm	<screenshotname>	<time until timeout>
if [ $p1 == "wait_ppm" ]; then
	echo ""
	echo "		-- wait for screenshot "$p2
	echo "		ASSERT false REPORT \"wait for "$p2" ("$p3"ms)\" SEVERITY note;"
	echo "		gfx_match'shortcut_in_activate(\"2/-1/-1/-1/-1/../screenshots/"$p2"\");"
	echo "		WAIT ON gfx_match(1) UNTIL 0 <= gfx_match(1) FOR "$p3";"
	echo "		gfx_match'deactivate;"
	echo "		IF gfx_match(1) < 0 THEN"
	echo "			screen_shot <= 1;"
	echo "			WAIT FOR 1000;"
	echo "			ASSERT false REPORT \"timeout, screenshot taken\" SEVERITY failure;"
	echo "		END IF;"
	echo "		WAIT ON gfx_match UNTIL (-2 = gfx_match(1));"
	echo "		ASSERT false REPORT \"found "$p2"\" SEVERITY note;"
	echo ""
fi

# wait_asc	<character sequence>	<time until timeout>
if [ $p1 == "wait_asc" ]; then
	echo ""
	echo "		-- wait for pattern "$p2
	echo "		ASSERT false REPORT \"waiting for "$p2" ("$p3"ms)\" SEVERITY note;"
	echo "		found0'shortcut_in_activate(\""$p2"\");"
	echo "		WAIT ON found0 UNTIL found0 FOR "$p3";"
	echo "		found0'shortcut_in_deactivate;"
	echo "		IF NOT found0 THEN"
	echo "			screen_shot <= 1;"
	echo "			WAIT FOR 1000;"
	echo "			ASSERT false REPORT \"timeout, screenshot taken\" SEVERITY failure;"
	echo "		END IF;"
	echo "		WAIT ON found0 UNTIL NOT found0;"
	echo ""
fi

# type		<character sequence>
if [ $p1 == "type" ]; then
	echo ""
	echo "		-- type sequence "$p2
	echo "		send_keyboard(press, release, 0, "$p2", 300);"
	echo ""
fi

# cdrom_remove
if [ $p1 == "cdrom_remove" ] ; then
	echo ""
	echo "		-- cdrom_remove"
	echo "		cdrom'shortcut_out_add("'"/cdrom0%change/");'
	echo "		wait for 1000;"
	echo "		cdrom <= false;"
	echo "		wait for 1000;"
	echo "		cdrom'shortcut_out_remove;"
	echo ""
fi

# cdrom_insert	<character sequence>
if [ $p1 == "cdrom_insert" ] ; then
	echo ""
	echo "		-- cdrom_insert "$p2
	echo "		cdrom'shortcut_out_add("'"/cdrom0%change/../../CDROM.images/'$p2'");'
	echo "		wait for 1000;"
	echo "		cdrom <= false;"
	echo "		wait for 1000;"
	echo "		cdrom'shortcut_out_remove;"
	echo ""
fi

# sshot
if [ $p1 == "sshot" ]; then
	echo ""
	echo "		-- take a screenshot"
	echo "		screen_shot <= 1;"
	echo "		WAIT FOR 1000;"
	echo "		ASSERT false REPORT \"screenshot taken.\" SEVERITY note;"
	echo ""
fi

# log		<character sequence>
if [ $p1 == "log" ]; then
	echo ""
	echo "		ASSERT false REPORT \"$p2\" SEVERITY note;"
	echo ""
fi

done
