#! /bin/sh
# $Id: xrun,v 1.6 1997/08/30 14:24:04 queinnec Exp $
# Run a command in a separate xterm (ie a separate process group) and 
# return its exit code.

Usage="xrun [-v] [-sleep] [-keep] port passwd command"

# Often better to set up this variable.
SHELL=/bin/sh

if [ -z "$DISPLAY" ] 
then    echo DISPLAY missing 
        exit 1 
fi

# Sleep that time before removing the window.
# Keep log files or not (but always keep them in case of errors).

options=true
verbose=false
TIMEOUT=10
KEEPFILES=false

while $options
do
    case X$1 in
    X-v)  	verbose=true
                shift
                ;;
    X-sleep) 	shift
                TIMEOUT=$1
                $verbose && echo $$: TIMEOUT=$1
                shift
                ;;
    X-keep)	shift
                KEEPFILES=true
                $verbose && echo $$: KEEPFILES=$KEEPFILES
                ;;
    *)          options=false
                ;;
    esac
done

if [ $# -ge 1 ] 
then 
        DMEROON_SERVING_PORT=$1
        $verbose && echo $$: DMEROON_SERVING_PORT=$1
        shift
        export DMEROON_SERVING_PORT 
else 
        echo $Usage
        exit 1
fi

if [ $# -ge 1 ]
then
    if [ -n "$1" ]
    then 
        DMEROON_PASSWORD=$1
        $verbose && echo $$: DMEROON_PASSWORD=$1
        export DMEROON_PASSWORD
    else
        $verbose && echo $$: No DMEROON_PASSWORD
    fi
    shift
else
        echo $Usage
        exit 1
fi

COMMANDFILE=/tmp/cmd$$
EXITCODEFILE=/tmp/cmd$$.code
LOGFILE=/tmp/cmd$$.out

if [ $# -ge 1 ]
then 
        echo "$@" > $COMMANDFILE
        $verbose && echo $$: COMMANDFILE=$COMMANDFILE
        chmod u+x $COMMANDFILE
else
        echo $Usage
        exit 1
fi

echo 255 > $EXITCODEFILE
echo > $LOGFILE

# Linux's xterm does not implement the -lf option so no logging is done.
# To log all output is therefore done explicitly with a tee command.

xterm -l +ls -sl 300 -wf -title $LOGFILE -geometry 120x24 \
      -e ${SHELL} -cx "($COMMANDFILE 2>&1 ; \
                        echo \$? > $EXITCODEFILE ; \
                        sleep $TIMEOUT ) | \
                       tee $LOGFILE"  </dev/null >/dev/null 2>&1

EXITCODE=`cat $EXITCODEFILE`

if [ 0 = $EXITCODE ]
then 
    if $KEEPFILES
    then 
        $verbose && echo $$: keeping files $COMMANDFILE $EXITCODEFILE $LOGFILE
    else
        # Keep logfile in case of problems.
        $verbose && echo $$: removing files $COMMANDFILE $EXITCODEFILE $LOGFILE
        rm -f $COMMANDFILE $EXITCODEFILE $LOGFILE
    fi
fi

$verbose && echo $$: exit code is $EXITCODE

exit $EXITCODE

# end of xrun

