#!/bin/bash
## PSPP - a program for statistical analysis.
## Copyright (C) 2020 Free Software Foundation, Inc.
##
## This program is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program.  If not, see <http://www.gnu.org/licenses/>.

fail ()
{
    kill $pid;
    echo FAILED to grab image for $payload
    cat $errfile
    rm -f $errfile
    exit 1;
}

pass ()
{
    kill $pid;
    rm -f $errfile
    exit 0;
}

# Types the argument, with a pause after the first character.
hard_type ()
{
    xdotool type "${1:0:1}"
    xdotool sleep 0.5
    xdotool type "${1:1}"
}

theme=Aidwaita

while test $# -gt 0; do
    case "$1" in
        --topsrcdir=*)
            topsrcdir=${1/--topsrcdir=/}
        ;;
        --application=*)
            application=${1/--application=/}
            ;;
        --x-server=*)
            xserver=${1/--x-server=/}
            ;;
        --payload=*)
            payload=${1/--payload=/}
        ;;
        --theme=*)
            theme=${1/--theme=/}
        ;;
        *)
            output=$1;
        ;;
    esac
    shift 1;
done

rm -f $output
export LC_ALL=C

width=1440
height=900

temp=`mktemp -d`
export HOME=$temp

mkdir -p $HOME/.config
cat > $HOME/.config/psppirerc <<EOF
[PsppireOutputWindow]
maximize=true

[PsppireDataWindow]
maximize=true
height=$height
width=$width

[PsppireSyntaxWindow]
maximize=true
EOF


# xserver=xephyr

case "$xserver" in
    xvfb)
        display=:$RANDOM
        Xvfb +extension XTEST \
             -screen 0 "$width"x"$height"x24 \
             $display &
        ;;
    xephyr)
        display=:$RANDOM
        Xephyr -screen "$width"x"$height" \
               +extension XTEST \
               -noxv \
               -dumb $display &
        ;;
    native)
        display=$DISPLAY
        ;;
    *)
        printf "Unknown X server type\n";
        exit 1;
        ;;
esac
pid=$!
export DISPLAY=$display
export GTK_THEME=$theme

sleep 1

errfile=`mktemp`
$application -q -n 2> $errfile &
if test "$xserver"x = "native"x; then pid=$!; fi

xdotool sleep 0.5
if test $? -ne 0 ; then fail; fi

trap fail ERR
. $payload

mv $output,tmp $output
pass;
