#!/bin/sh

PKG_LIB_DIR="/usr/lib/games/dwarf-fortress"
PKG_DATA_DIR="/usr/share/games/dwarf-fortress/gamedata"
LOCAL_DATA_DIR="/usr/local/share/games/dwarf-fortress"
USER_DATA_DIR="${XDG_DATA_HOME:-$HOME/.local/share}"
USER_DF_DIR="$USER_DATA_DIR/dwarf-fortress"
USER_DF_DATA_DIR="$USER_DF_DIR/data"
DF_RUN_DIR="$USER_DF_DIR/run"
X_ERROR_TEXT="An error occured while preparing the environment for \
Dwarf Fortress. The full error output can be found in %s"

for arg in "$@"
do
    if [ "$arg" = "-X" ]
    then
       XERR=yes
    fi
done

if [ ! -d "$DF_RUN_DIR" ]
then
    (
        umask 077
        mkdir -p "$DF_RUN_DIR"
    )
fi

if [ "$XERR" = "yes" ]
then
    errfile=$(mktemp "dflink.out.XXXXXX")
    stderr="$errfile"
    stdout="$errfile"
else
    stderr="/dev/stderr"
    stdout="/dev/stdout"
fi

/usr/games/dflink "$DF_RUN_DIR" "$PKG_LIB_DIR" "$USER_DF_DATA_DIR" \
                  "$LOCAL_DATA_DIR" "$PKG_DATA_DIR" \
                  > "$stdout" 2> "$stderr"
dflink_exit="$?"

if [ "$XERR" = "yes" ]
then
    if [ "$dflink_exit" = "0" ]
    then
        rm $errfile
    else
        zenity --error --text "$(printf "$X_ERROR_TEXT" "$errfile")"
        exit "$dflink_exit"
    fi
else
    if [ "$dflink_exit" != "0" ]
    then
       exit "$dflink_exit"
    fi
fi

# df doesn't mind being called with superfluous arguments
exec "$DF_RUN_DIR/df" "$@"
