#!/bin/sh

retval=0;

if [ -z "$STP_DATA_PATH" ] ; then
    STP_DATA_PATH=`pwd`/../main
    export STP_DATA_PATH
fi

if [ -z "$STP_MODULE_PATH" ] ; then
    STP_MODULE_PATH=`pwd`/../main:`pwd`/../main/.libs
    export STP_MODULE_PATH
fi

valgrind=0
extra=''

set_opt() {
    opt=`echo $1 | awk -F= '{print $1}'`
    val=`echo $1 | awk -F= '{print $2}'`
    extra="`printf \"%s\nparameter %s %s\" \"$extra\" $opt $val`"
}

usage() {
    echo "Usage: run-testpattern [-v|--valgrind]"
    echo "                       [-p|--parameter parameter=value]"
    echo "                       [--] [printers...]"
    exit 0;
}

set_args() {
    while true ; do
	case "$1" in
	    -h*|--h*) usage ;;
	    -v|--valgrind) valgrind=`expr $valgrind + 1` ;;
	    -g|--gdb-attach) valopts='--gdb-attach=yes' ;;
	    -p|--parameter) shift; set_opt "$1" ;;
	    --) shift; args="$@"; return ;;
	    *) return ;;
	esac
    shift
    done
}

run_one_testpattern() {
    printer=$1
    shift
    stuff="$@"
    cat > testpattern.test <<EOF
printer $printer
$stuff
hsize 0.1
vsize 0.1
left 0.15
top 0.15
gamma 1.0
c_gamma 1.0
m_gamma 1.0
y_gamma 1.0
k_gamma 1.0
c_level 1.0
m_level 1.0
y_level 1.0
ink_limit 1.0
density 1.0
blackline 0
levels 16
pattern 0.0 0.0 1.0  0.0 0.0 1.0  0.0 0.0 1.0  0.0 0.0 1.0  0.0 0.0 0.0  0.0 0.0
pattern 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.0 1.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 1.0 1.0 0.0 1.0 1.0 0.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 0.0 0.0
pattern 0.0 -2.0 1.0 0.0 -2.0 1.0 0.0 -2.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 -2.0 -2.0 -2.0 1.0 1.0
pattern 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 0.1 0.3
pattern 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 -2.0 -2.0 -2.0 0.3 0.7
pattern 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 0.1 0.999
pattern 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 0.3 0.999
pattern 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 0.5 0.999
pattern 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 -2.0 -2.0 -2.0 0.1 0.3
pattern 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 1.0 1.0 1.0 0.3 0.7
pattern 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 -2.0 -2.0 -2.0 0.1 0.999
pattern 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 -2.0 -2.0 -2.0 0.3 0.999
pattern 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 -2.0 -2.0 -2.0 0.5 0.999
pattern 0.0 0.0 1.0 0.0 1.0 1.0 0.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.0 1.0 0.0 0.75 1.0 0.0 0.75 1.0 0.0 0.25 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.0 1.0 0.0 0.75 1.0 0.0 0.75 1.0 0.0 0.25 1.0 1.0 1.0 1.0 0.0 0.0
pattern 0.0 0.0 1.0 0.0 0.5 1.0 0.0 0.5 1.0 0.0 0.5 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.0 1.0 0.0 0.5 1.0 0.0 0.5 1.0 0.0 0.5 1.0 1.0 1.0 1.0 0.0 0.0
pattern 0.0 0.0 1.0 0.0 0.25 1.0 0.0 0.25 1.0 0.0 0.75 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.0 1.0 0.0 0.25 1.0 0.0 0.25 1.0 0.0 0.75 1.0 1.0 1.0 1.0 0.0 0.0
pattern 0.0 0.0 1.0 0.0 0.1 1.0 0.0 0.1 1.0 0.0 0.9 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.0 1.0 0.0 0.1 1.0 0.0 0.1 1.0 0.0 0.9 1.0 1.0 1.0 1.0 0.0 0.0
pattern 0.0 1.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.75 1.0 0.0 0.0 1.0 0.0 0.75 1.0 0.0 0.25 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.75 1.0 0.0 0.0 1.0 0.0 0.75 1.0 0.0 0.25 1.0 1.0 1.0 1.0 0.0 0.0
pattern 0.0 0.5 1.0 0.0 0.0 1.0 0.0 0.5 1.0 0.0 0.5 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.5 1.0 0.0 0.0 1.0 0.0 0.5 1.0 0.0 0.5 1.0 1.0 1.0 1.0 0.0 0.0
pattern 0.0 0.25 1.0 0.0 0.0 1.0 0.0 0.25 1.0 0.0 0.75 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.25 1.0 0.0 0.0 1.0 0.0 0.25 1.0 0.0 0.75 1.0 1.0 1.0 1.0 0.0 0.0
pattern 0.0 0.1 1.0 0.0 0.0 1.0 0.0 0.1 1.0 0.0 0.9 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.1 1.0 0.0 0.0 1.0 0.0 0.1 1.0 0.0 0.9 1.0 1.0 1.0 1.0 0.0 0.0
pattern 0.0 1.0 1.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.75 1.0 0.0 0.75 1.0 0.0 0.0 1.0 0.0 0.25 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.75 1.0 0.0 0.75 1.0 0.0 0.0 1.0 0.0 0.25 1.0 1.0 1.0 1.0 0.0 0.0
pattern 0.0 0.5 1.0 0.0 0.5 1.0 0.0 0.0 1.0 0.0 0.5 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.5 1.0 0.0 0.5 1.0 0.0 0.0 1.0 0.0 0.5 1.0 1.0 1.0 1.0 0.0 0.0
pattern 0.0 0.25 1.0 0.0 0.25 1.0 0.0 0.0 1.0 0.0 0.75 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.25 1.0 0.0 0.25 1.0 0.0 0.0 1.0 0.0 0.75 1.0 1.0 1.0 1.0 0.0 0.0
pattern 0.0 0.1 1.0 0.0 0.1 1.0 0.0 0.0 1.0 0.0 0.9 1.0 1.0 1.0 1.0 1.0 1.0
pattern 0.0 0.1 1.0 0.0 0.1 1.0 0.0 0.0 1.0 0.0 0.9 1.0 1.0 1.0 1.0 0.0 0.0
EOF
    rm -f testp.out
    case "$valgrind" in
	1) valgrind $valopts -q --num-callers=100 --leak-check=yes ./testpattern < testpattern.test > testp.out ;;
	2) valgrind $valopts --num-callers=100 --show-reachable=yes --leak-resolution=high --leak-check=yes ./testpattern < testpattern.test > testp.out ;;
	*) ./testpattern < testpattern.test > testp.out ;;
    esac
    if [ $? -ne 0 ] ; then
	retval=1
    fi
}

set_args `getopt hgvp: "$@"`

if [ -z "$args" ] ; then
    args=`./printers`
fi

StandardDithers="EvenTone Adaptive Ordered Fast VeryFast Floyd"

if [ -z "`echo $extra |grep DitherAlgorithm`" ] ; then
    for p in $args ; do
	echo "$p"
	for d in $StandardDithers ; do
	    echo -n "    $d"
	    run_one_testpattern "$p" "`printf '%s\n' \"parameter DitherAlgorithm $d\"`" "$extra"
	done
    done
else
    for p in $args ; do
	echo -n "$p"
	run_one_testpattern "$p" "$extra"
    done
fi


exit $retval
