#!/bin/sh

DDCXINFO=/usr/sbin/ddcxinfo-kanotix

HOME="/tmp"

XCONFIG="/etc/X11/XF86Config"

if [ -e $XCONFIG ]; then
    exit 0;
fi

test -x /usr/X11R6/bin/XFree86 || exit 1

/usr/X11R6/bin/XFree86 -configure 2>/dev/null
if [ ! $? = 0 ]; then
  #echo "cannot run X auto config."
  exit 1
fi

SECTION_NAME=""
IDENT_NAME=""
SKIP_SECTION=""
STAY_OLD=""

cat $HOME/XF86Config.new | while read LINE ;
do
    if echo $LINE | grep "^Section\ " >/dev/null ; then
	SECTION_NAME=`echo $LINE | cut -d"\"" -f 2`
	#echo "Section $SECTION_NAME detected"
    fi
    if echo $LINE | grep "^EndSection" >/dev/null ; then
	#echo "End section $SECTION_NAME detected"
	SECTION_NAME=""
	IDENT_NAME=""
	STAY_OLD=""
	if [ "x$SKIP_SECTION" = "xyes" ]; then
	    SKIP_SECTION=""
	    continue
	fi
    fi
    if echo $LINE | grep "^Identifier" >/dev/null ; then
	IDENT_NAME=`echo $LINE | cut -d"\"" -f 2`
	#echo "Ident name $IDENT_NAME"
    fi
    [ "x$SKIP_SECTION" = "xyes" ] && continue
    
    if [ "x$STAY_OLD" = "xyes" ]; then
	echo $LINE >> $XCONFIG
    else
	case $SECTION_NAME in
	Monitor)
	    SKIP_SECTION="yes"
	    $DDCXINFO -monitor 2>/dev/null >> $XCONFIG
	    ;;
	Module)
	    echo $LINE >> $XCONFIG
	    echo "Load \"freetype\"" >> $XCONFIG
	    STAY_OLD="yes"
	    ;;
	Files)
	    echo "$LINE" >> $XCONFIG
	    if echo $LINE | grep ModulePath | grep '/usr/X11R6/lib/modules' 1> /dev/null ; then
		echo "FontPath \"/usr/X11R6/lib/X11/fonts/TTF/\"" 	>> $XCONFIG
		echo "FontPath \"/usr/X11R6/lib/X11/fonts/cyrillic/\"" 	>> $XCONFIG
		STAY_OLD="yes"
	    fi
	    ;;
	InputDevice)
	    case $IDENT_NAME in
	    Mouse0)
		echo $LINE >> $XCONFIG
		echo "Driver \"mouse\"" >> $XCONFIG
		echo "Option \"ZAxisMapping\" \"4 5\"" >> $XCONFIG
		echo "Option \"Buttons\" \"3\"" >> $XCONFIG
		echo "Option \"AlwaysCore\" \"true\"" >> $XCONFIG
		echo "Option \"Protocol\" \"auto\"" >> $XCONFIG
		echo "Option \"Device\" \"/dev/input/mice\"" >> $XCONFIG
		echo "EndSection" >> $XCONFIG
		SKIP_SECTION="yes"
		;;
	    Keyboard0)
		echo $LINE >> $XCONFIG
		if echo $LINE | grep "^Driver" | grep "keyboard" 1> /dev/null ; then
    		    echo "Option \"AutoRepeat\" \"250 30\"" >> $XCONFIG
    		    echo "Option \"XkbLayout\" \"us,ru\"" >> $XCONFIG
		    echo "Option \"XkbOptions\" \"grp:ctrl_shift_toggle,grp_led:scroll\"" >> $XCONFIG
    		    echo "Option \"XkbVariant\" \",winkeys,\"" >> $XCONFIG
		    echo "EndSection" >> $XCONFIG
		    SKIP_SECTION="yes"
		fi
		;;
	    *)
		echo $LINE >> $XCONFIG
		;;
		
	    esac
	    ;;
	Screen)
	    echo $LINE >> $XCONFIG
	    if echo $LINE | grep "^Monitor" | grep "\"Monitor0\"" 1> /dev/null; then
		echo "DefaultDepth 16" >> $XCONFIG
	    fi
	    if echo $LINE | grep "^Depth" | grep "16" 1> /dev/null; then
		# fit QEMU display into 1024x768 host display :-)
		#if dmesg | grep ' QEMU CD-ROM' 1>/dev/null  ; then
		#    echo "Modes \"800x600\" \"640x480\"" >> $XCONFIG
		#else
		    $DDCXINFO -modes 2>/dev/null >> $XCONFIG
		#fi
	    fi
	    ;;
	*)
	    echo $LINE >> $XCONFIG
	    ;;
	esac
    fi
done

rm -f $HOME/XF86Config.new

exit 0
