#!/bin/sh

# $Xorg: startx.cpp,v 1.3 2000/08/17 19:54:29 cpqbld Exp $
#
# This is just a sample implementation of a slightly less primitive
# interface than xinit.  It looks for user .xinitrc and .xserverrc
# files, then system xinitrc and xserverrc files, else lets xinit choose
# its default.  The system xinitrc should probably do things like check
# for .Xresources files and merge them in, startup up a window manager,
# and pop a clock and serveral xterms.
#
# Site administrators are STRONGLY urged to write nicer versions.
#
# $XFree86: xc/programs/xinit/startx.cpp,v 3.16 2003/01/24 21:30:02 herrb Exp $


userclientrc="$HOME/.xinitrc"
userserverrc="$HOME/.xserverrc"

export XAPPLRESDIR=/usr/X11R6/lib/X11/app-defaults
export XCMSDB=/usr/X11R6/lib/X11/Xcms.txt
export XKEYSYMDB=/usr/X11R6/lib/X11/XKeysymDB
export XNLSPATH=/usr/X11R6/lib/X11/locale

sysclientrc=/usr/X11R6/lib/X11/xinit/xinitrc
sysserverrc=/usr/X11R6/lib/X11/xinit/xserverrc
defaultclient=/usr/X11R6/bin/xterm
defaultserver=/usr/X11R6/bin/X
defaultclientargs=""
defaultserverargs="-multiwindow -clipboard"
clientargs=""
serverargs=""


if [ -f "$userclientrc" ]; then
    defaultclientargs="\"$userclientrc\""
elif [ -f "$sysclientrc" ]; then
    defaultclientargs="\"$sysclientrc\""
fi


if [ -f "$userserverrc" ]; then
    defaultserverargs="\"$userserverrc\""
elif [ -f "$sysserverrc" ]; then
    defaultserverargs="\"$sysserverrc\""
fi


whoseargs="client"
while [ x"$1" != x ]; do
    case "$1" in
    # '' required to prevent cpp from treating "/*" as a C comment.
    /''*|\./''*)
	if [ "$whoseargs" = "client" ]; then
	    if [ x"$clientargs" = x ]; then
		client="\"$1\""
	    else
		clientargs="$clientargs \"$1\""
	    fi
	else
	    if [ x"$serverargs" = x ]; then
		server="\"$1\""
	    else
		serverargs="$serverargs \"$1\""
	    fi
	fi
	;;
    --)
	whoseargs="server"
	;;
    *)
	if [ "$whoseargs" = "client" ]; then
	    clientargs="$clientargs \"$1\""
	else
# display must be the FIRST server argument
	    if [ x"$serverargs" = x ] && expr "$1" : ':[0-9][0-9]*$' > /dev/null 2>&1; then
		display="\"$1\""
	    else
		serverargs="$serverargs \"$1\""
	    fi
	fi
	;;
    esac
    shift
done

# process client arguments
if [ x"$client" = x ]; then
    # if no client arguments either, use rc file instead
    if [ x"$clientargs" = x ]; then
	client="$defaultclientargs"
    else
	client="$defaultclient"
    fi
fi

# process server arguments
if [ x"$server" = x ]; then
    # if no server arguments or display either, use rc file instead
    if [ x"$serverargs" = x -a x"$display" = x ]; then
	server="$defaultserverargs"
    else
	server="$defaultserver"
    fi
fi

if [ x"$XAUTHORITY" = x ]; then
    XAUTHORITY="$HOME/.Xauthority"
    export XAUTHORITY
fi

removelist=


# correctly process quotes, etc
eval "set -- $client $clientargs -- $server $display $serverargs"

xinit "$@"

if [ x"$removelist" != x ]; then
# Note: this is still not space-friendly!
    xauth remove $removelist
fi
