#!/bin/bash

DIALOG=/usr/bin/Xdialog
LIBDIR=/usr/lib/vnctermserv


TMPDIR=/tmp/.vnctermserv-$USER
PASSDIR=$HOME/.vnctermserv

export TEXTDOMAIN=vnctermserv
res="`$LIBDIR/getres $1`";
if [ "x$res" = "xNo-X" ]; then
echo $"Can't find X-Server:" $DISPLAY
exit 1
fi

function Do()
{
SEL=$SELX
if [ "$SEL" = "New" ]; then
SEL=`($LIBDIR/setpgrp $SHAREDIR/vncserver -server $XVNC -geometry $res 2>&1)|grep "desktop is "`
SEL=${SEL##New \'X\' desktop is }
fi
touch $SEL.lock
$XVNCVIEWER  -geometry +0+0 $SEL -passwd $PASSDIR/passwd 2>/dev/null>/dev/null  &
echo $! >$SEL.lock
wait $!
rm $SEL.lock
}

function DoCon(){
OPTS=""
Z=""
NEW=0
OLDNAME=$"VNCDesktop-"
NEWNAME=$"New-VNCDesktop-"
ENDNAME=$"End"
OKNAME=$"Connect"
PROMPT=$"Select session to resume"
TITLE=$"VNC-Sessions"
for a in *.pid
do
if [ $a != \*.pid ] ; then
X=${a%.pid}
pgrep -u $USER |grep "`cat $X.pid`" >/dev/null||rm $X.pid
if [ -f $X.lock  ] ; then
pgrep -u $USER|grep "`cat $X.lock`" >/dev/null || rm $X.lock
fi
if [ ! -f $X.lock ] ; then
Y=$X
Z=a$Z
OPTS="$OPTS $X $OLDNAME`cat $X.res` "
echo $res|cmp $X.res >/dev/null|| NEW=1
fi
fi
done
if [ "$Z" = "" ]; then
SELX="New"
Do
exit
fi
if [ "$NEW" = "1" ] ; then
OPTS="New $NEWNAME$res $OPTS"
Z=a$Z
fi
if [ "$Z" = "a" ]; then
SELX=$Y
Do
else
SELX=`$DIALOG --title "$TITLE $USER@\`hostname\`" --cancel-label "$ENDNAME" --ok-label "$OKNAME" --menu "$PROMPT" 30 50 15 $OPTS 2>&1` && Do
fi
}
mkdir $TMPDIR 2>/dev/null
chmod 700 $TMPDIR
pushd $TMPDIR >/dev/null
mkdir $PASSDIR 2>/dev/null
chmod 700 $PASSDIR
dd if=/dev/zero of=$PASSDIR/passwd bs=8 count=1 2>/dev/null
chmod 600 $PASSDIR/passwd

DoCon  
popd >/dev/null
