#!/bin/sh
#
# Name    : X.org autoconfiguration script
# Version : 0.4
# Author  : Sergei Mozhaisky (technix@frenzy.org.ua)
#           Vladimir Kurtukov (vk@vk.pp.ru)
#

# command line options:
# * safe    - use vesa driver and standard monitor
# * safemon - use autodetected driver and standard monitor
#

XORG_CONF="/etc/X11/xorg.conf"
XORG_NEWCONF="/root/xorg.conf.new"
XORG_TMPCONF="/usr/local/etc/xautoconf/xorg.conf.default"
XORG_VMWARE="/usr/local/etc/xautoconf/xorg.conf.vmware"
XORG_VESA="/usr/local/etc/xautoconf/xorg.conf.vesa"
XORG_QEMU="/usr/local/etc/xautoconf/xorg.conf.qemu"
XORG_SAFE="/usr/local/etc/xautoconf/xorg.conf.safe"
KBM="/etc/X11/.xorg.keymap"


if [ -f ${XORG_CONF} ]; then
	echo "Found config file \"${XORG_CONF}\" - skipping autoconfiguration."
	exit 0
fi

echo -n "Autoconfiguring X.org..."


VMWARE=`pciconf -lv | grep -i vmware`
QEMU=`pciconf -lv | fgrep CL-GD5446`
LOWRES=0
if [ "${VMWARE}" != "" ]; then
	cp ${XORG_VMWARE} ${XORG_NEWCONF}
	LOWRES=1
elif [ "$QEMU" != "" ]; then
	cp ${XORG_QEMU} ${XORG_NEWCONF}
	# Must enable 16 bit color
	cat ${XORG_TMPCONF} | sed "s/#%DEFAULTDEPTH%/DefaultDepth 16/" > ${XORG_TMPCONF}.QEMU
	XORG_TMPCONF="${XORG_TMPCONF}.QEMU"
	LOWRES=1
else
	if [ "$1" = "safe" ]; then
	    cp ${XORG_VESA} ${XORG_NEWCONF}
	else
	    # configuring X automatically
	    X -configure >/dev/null 2>&1
	fi
fi


if [ "$1" = "safemon" ]; then
    X_MON=`cat ${XORG_SAFE}`
else
    X_MON=`sed -n '/^Section "Monitor"$/,/^EndSection$/ p' ${XORG_NEWCONF}`
fi
X_DEV=`sed -n '/^Section "Device"$/,/^EndSection$/ p' ${XORG_NEWCONF}`


noddc=`fgrep -q VertRefresh "${XORG_NEWCONF}"; echo $?`
if [ "$noddc" = "1" ]; then
  echo
  echo "WARNING: DDC not supported by this monitor!"
  #echo "You must manually edit ${X_CONF} and add "
  #echo "HorizSync/VertRefresh parameters to Monitor section"
  X_MON=`cat ${XORG_SAFE}`
fi

# patch keyboard
if [ -e ${KBM} ]; then
XKEYMAP=`cat ${KBM}`
cat ${XORG_TMPCONF} | sed "s/%KEYMAP%/${XKEYMAP}/" > ${XORG_CONF}
else
cat ${XORG_TMPCONF} | sed "s/%KEYMAP%/us/" > ${XORG_CONF}
fi

printf "$X_MON\n\n" >> ${XORG_CONF}
printf "$X_DEV\n\n" >> ${XORG_CONF}

# In QEMU and VMWare disable 1024x768 resolution
if [ "${LOWRES}" -eq 1 ]; then
    cp ${XORG_CONF} ${XORG_CONF}.lowres
    cat ${XORG_CONF}.lowres | sed "s/\"1024x768\" //g" > ${XORG_CONF}
    rm ${XORG_CONF}.lowres
fi

echo " done."
