#!/bin/sh
#
# Common - Elements shared by all regression tests for the M8C assembler
#
# Written 2006 by Werner Almesberger
# Copyright 2006 Werner Almesberger
#


reas()
{
    echo -n "$1: " 1>&2
    shift
    in=`echo $* | tr 'a-z' 'A-Z'`
    asm=`$VALGRIND ../../das/m8cdas -s -e $*`
    out=`echo "$asm" | $VALGRIND ../m8cas`
    if [ "$in" = "$out" ]; then
	echo PASSED 2>&1
	passed=`expr ${passed:-0} + 1`
    else
	echo FAILED "($SCRIPT)" 2>&1
	echo "$in": "$asm" '->' "$out" 2>&1
	exit
    fi
}


file()
{
    if [ -z "$files" ]; then
	echo -n "$1: " 1>&2
	shift
	n=0
    else
	n=`expr $n + 1`
    fi
    files="$files _file_$n"
    cat >_file_$n
}


asm()
{
    if [ -z "$files" ]; then
	echo -n "$1: " 1>&2
	shift
    fi
    $VALGRIND ../m8cas "$@" $files - >_out 2>&1 || {
	echo FAILED "($SCRIPT)" 1>&2
	cat _out
	rm -f _out $files
	exit 1
    }
    if [ ! -z "$files" ]; then
	rm $files
	files=
    fi
}


sym()
{
    if [ -z "$files" ]; then
	echo -n "$1: " 1>&2
	shift
    fi
    $VALGRIND ../m8cas -m _out "$@" $files - >/dev/null || {
	echo FAILED "($SCRIPT)" 1>&2
	cat _out
	rm -f _out
	exit 1
    }
    if [ ! -z "$files" ]; then
	rm $files
	files=
    fi
}


asm_fail()
{
    if [ -z "$files" ]; then
	echo -n "$1: " 1>&2
	shift
    fi
    $VALGRIND ../m8cas "$@" $files - >_out 2>&1 && {
	echo FAILED "($SCRIPT)" 1>&2
	cat _out
	rm -f _out $files
	exit 1
    }
    if [ ! -z "$files" ]; then
	rm $files
	files=
    fi
}


security()
{
    sed '/^:/!{p;d;};/:020000040010EA/,/:020000040020DA/{/:0200000400/d;
      s/^:......00//;s/..$//;s/\(.\{32\}\)/\1\
/g;p;};d' <_out |
      tr -s '\n' >_tmp
    mv _tmp _out
}


expect()
{
    diff -u - "$@" _out >_diff || {
	echo FAILED "($SCRIPT)" 1>&2
	cat _diff 1>&2
	rm -f _out _diff
	exit 1
    }
    echo PASSED 1>&2
    rm -f _out _diff
    passed=`expr ${passed:-0} + 1`
}
