#!/bin/dash
# Filename:      grml-screen
# Purpose:       wrapper for screen to start with appropriate configuration
# Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
# Bug-Reports:   see http://grml.org/bugs/
# License:       This file is licensed under the GPL v2.
################################################################################

# export variable USER for use withing GNU screen:
  export USER=`id -un`

# fix tty permissions
  TTY=`tty`
  sudo chmod 660       $TTY
  sudo chown $USER.tty $TTY

# FIXME: fix for screen race-conditions
PID_FILE_="/var/lock/grml-screen"
PID_FILE_CREATED_="false"
MY_PID_="$$"
if [ ! -d "/var/run/screen/S-$USER" ]; then
    # no /var/run/screen/S-$USER and possible no /var/run/screen either -> locking
    for i in `seq 40`; do   # 40*0.25 = 10 seconds
        if lockfile-create --retry 0 $PID_FILE_; then
            echo $MY_PID_ >$PID_FILE_
            PID_FILE_CREATED_="true"
            break
        else
            PID_FILE_CREATED_="error"
        fi
        sleep 0.25
    done
fi
if [ $PID_FILE_CREATED_ = "true" ]; then
    # FORK BEGIN
    (
        for i in `seq 40`; do   # 40*0.25 = 10 seconds
            if [ ! -d "/var/run/screen/S-$USER" ]; then
                sleep 0.25  # educated guess
            else
                break
            fi
        done
        if [ `cat $PID_FILE_` = $MY_PID_ ]; then
            rm $PID_FILE_
            lockfile-remove $PID_FILE_
        fi
    )&
    # FORK END
elif [ $PID_FILE_CREATED_ = "error" ]; then
    SLEEP_TIME_="$(( $$ % 5 * 5 + 5 ))"
    echo "grml-screen: Error could not create lockfile! (sleeping for $SLEEP_TIME_)" >&2
    sleep $SLEEP_TIME_
elif [ $PID_FILE_CREATED_ = "false" ]; then
    echo "nothing to do" &>/dev/null
else
    echo "grml-screen: internal error - PID_FILE_CREATED_ == \"$PID_FILE_CREATED_\"" >&2
fi

# now run screen with config
  cd $HOME     # important for e.g. hardcopy-feature
  # do we have a utf8 enabled terminal?
  [ -x /usr/bin/vt-is-UTF8 ] && /usr/bin/vt-is-UTF8 -q && UTF='-U'
  if [ `id -u` = 0 ] ; then
    exec screen $UTF -c /etc/grml/screenrc
  elif [ -r "$HOME/.screenrc" ] ; then
    exec screen $UTF -c "$HOME/.screenrc"
  else
    exec screen $UTF -c /etc/grml/screenrc_grml
  fi

## END OF FILE #################################################################
