#!/bin/sh
# window manager improved 2 wrapper

encodedpy() {
    case `uname` in
        CYGWIN*)
        SUFFIX="`echo \"$DISPLAY\" | tr : +`"
        ;;
    *)
        SUFFIX=$DISPLAY
        ;;
    esac
}

set -e  # take care!

if [ -z "$DISPLAY" ]; then
    echo "`basename $0`: error: X must be running" >&2
    exit 1
fi

WMII_CONFDIR="CONFPREFIX/wmii"
TIMESTAMP="`date +%y%m%d%M%H%S`"
export WMII_CONFDIR

getfile() {
    if [ -r "$HOME/.wmii/$1" ]; then
        echo "$HOME/.wmii/$1"
    elif [ -r "$WMII_CONFDIR/$1" ]; then
        echo "$WMII_CONFDIR/$1"
    else
        echo "`basename $0`: error: couldn't read $1" >&2
        exit 2
    fi
}

run() {
    CHECKINTERVAL=3
    xdpyinfo >/dev/null
    NUMOFSCREENS=`xdpyinfo | awk '/number of screens/ { print $4 }'`
    RCFILE="`getfile rc`"

    # start a wmiiwm instance for every screen:
    i=0
    while [ $i -lt $NUMOFSCREENS ]; do
        DISPLAY=`echo $DISPLAY | sed 's/\(.*\)\..*$/\1/'`.$i
        encodedpy
        WMII_IDENT=$TIMESTAMP-$SUFFIX
        export DISPLAY
        export WMII_IDENT
        wmiiwm -c  # check wether wmiiwm is already running
        wmiiwm &
        eval pid_$i=$!
        $RCFILE start &
        i=`expr $i + 1`
    done

    # periodically check if the spawned processes are still running:
    while sleep $CHECKINTERVAL; do
        dead=0
        i=0
        while [ $i -lt $NUMOFSCREENS ]; do
            eval pid=\$pid_$i
            if [ $pid -eq 0 ] || kill -s 0 $pid 2>/dev/null; then
                :
            else
                DISPLAY=`echo $DISPLAY | sed 's/\(.*\)\..*$/\1/'`.$i
                encodedpy
                WMII_IDENT=$TIMESTAMP-$SUFFIX
                export DISPLAY
                export WMII_IDENT
                dead=`expr $dead + 1`
                $RCFILE stop
                eval pid_$i=0  # never check that process again
            fi
            i=`expr $i + 1`
        done

        [ $dead -lt $NUMOFSCREENS ] || break
    done
}

#---------------------------------------------------------------------

if [ $# -gt 0 ]; then
    wmiiwm "$@"
else
    run
fi
