#!/bin/bash

# Copyright Jean-Philippe Guillemin <jp.guillemin@free.fr>. This program is free software;
# you can redistribute it and/or modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2 of the License,
# or (at your option) any later version. Please take a look at http://www.gnu.org/copyleft/gpl.htm

# This script :
# - probes for videocard, monitor and keyboard
# - ask for runlevel
# - writes a configured Xorg config file.



# Version 1.0 - 30/08/2005
#  * Added Xdialog support
# Version 1.1 - 27/09/2005
#  * Fixed bug in call to discover causing glibc error message
# Version 1.2 - 16/10/2005
#  * Fixed bug when 2 video cards are detected by discover
# Version 1.3 - 22/10/2005
#  * Improved/secured tempdir management
# Version 2.0 - 29/12/2005
#  * Monitor probing with edid/X-configure
# Version 2.1 - 17/06/2006
#  * Removed discover support
# Version 2.2 - 17/06/2006
#  * Improved modules detection
# Version 3.2 - 29/09/2006
#  * Ported to Xorg 7.x
# Version 3.3 - 08/04/2007
#  * Compositor aware
# Version 3.4 - 18/04/2007
#  * Silent mode
# Version 4.0 - 02/10/2007
#  * Synaptics and modeline improvements
# Version 4.1 - 15/04/2008
#  * Bug fix
# Version 4.1 - 15/04/2008
#  * added latvian and improved russian keyboard support
# Version 5.0 - 14/03/2009
#  * adapted for new Xorg server, thanks to Michael Verret and Gerard Montponey for their contribution ;)

# Take a look at "Xdialog" and use it instead of "dialog" in case X is running
if [[ "$DISPLAY" && "$(which Xdialog 2>&1 | grep -v "which: no")" ]]; then
	dialog="Xdialog --wrap --left"
else
	dialog="dialog"
fi

# Path needs to be extended in case you're only half a root :)
export PATH="${PATH}:/usr/sbin:/sbin"

# Translations only work with utf8 locales
if [ ! `echo $LANG | grep -i utf` ]; then
	LANG=en_US
fi

# Gettext internationalization
export TEXTDOMAIN="videoconfig"
export TEXTDOMAINDIR="/usr/share/locale"
. gettext.sh

# create the tmpdir directory
export tmpdir="/tmp/videoconfig"
mkdir -p $tmpdir


# Create the xorg.conf file
writexorg() {

cp -f /etc/X11/xorg.conf /etc/X11/xorg.old 2>/dev/null

# Header
cat << EOF >  /etc/X11/xorg.conf

# /etc/X11/xorg.conf (xorg X Window System server configuration file)
#
# This file was generated by videoconfig, the Zenwalk X Configurator.
#
# Edit this file with caution, and see the /etc/X11/xorg.conf manual page.
# (Type "man xorg.conf" at the shell prompt.)
#
# If you have edited this file but would like it to be automatically updated
# again, run the following command from runlevel 3:
# videoconfig

EOF

# Files section:
cat << EOF >>  /etc/X11/xorg.conf

# Files          ( File pathnames )
#_______________________________________________________________________

EOF

cat $tmpdir/xorg.files >> /etc/X11/xorg.conf

# ServerFlags section:
cat << EOF >>  /etc/X11/xorg.conf

# ServerFlags    ( Server flags )
#_______________________________________________________________________

Section "ServerFlags"
#	Option		"NoTrapSignals"
#	Option		"DontVTSwitch"
	Option 		"DontZap"		"off"
#	Option		"DontZoom"
#	Option		"DisableVidModeExtension"
#	Option		"AllowNonLocalXvidtune"
#	Option		"DisableModInDev"
#	Option		"AllowNonLocalModInDev"
#	Option      "blank time"		"10"		# 10 minutes
#	Option      "standby time"		"20"
#	Option      "suspend time"		"30"
#	Option		"off time"			"60"
#	Option		"EstimateSizesAggresively" "0"
	Option		"AutoEnableDevices"	"false"
	Option		"AutoAddDevices"	"false"
	Option		"AllowEmptyInput"	"false"
EndSection

EOF


# Modules section:
cat << EOF >>  /etc/X11/xorg.conf

# **********************************************************************
# Module section ( Dynamically loadable modules )
#_______________________________________________________________________

EOF
cat $tmpdir/xorg.modules >> /etc/X11/xorg.conf

if [ ! "$(grep 'Load.*\"synaptics\"' /etc/X11/xorg.conf)" ]; then
     sed -i '/Section \"Module\"/  a\	Load  "synaptics"' /etc/X11/xorg.conf
fi

# Extensions section:
cat << EOF >>  /etc/X11/xorg.conf

# Extensions     ( Extension enabling )
#_______________________________________________________________________

Section "Extensions"
        Option "Composite" "disable"
EndSection

EOF

# InputDevice section:
cat << EOF >>  /etc/X11/xorg.conf

# InputDevice    ( Input device description )
#_______________________________________________________________________

Section "InputDevice"
	Identifier	"Keyboard1"
	Driver	"kbd"
#	Option     "Protocol"      "Xqueue"
#	Option     "AutoRepeat"    "500 5"
#	Option     "Xleds" "1 2 3"
#	Option     "XkbDisable"
	Option     "XkbRules"      "xorg"
	Option     "XkbModel"      "pc105"
	Option     "XkbLayout"     "$xkblayout"
#	Option     "XkbVariant"    "us"
	Option     "XkbOptions"    "$xkboptions"
EndSection

Section "InputDevice"

# Identifier and driver
	Identifier "Mouse1"
	Driver	     "mouse"
	Option	     "Protocol" "Auto"
	Option	     "Device" "/dev/input/mice"
#	Option     "Protocol" "Xqueue"
#	Option     "BaudRate" "9600"
#	Option     "SampleRate"	"150"
#	Option     "Emulate3Buttons"
#	Option     "Emulate3Timeout" "50"
#	Option     "ChordMiddle"
	Option     "ZAxisMapping" "4 5"
EndSection

Section "InputDevice" 
	Identifier    "Pad1" 
	Driver        "synaptics" 
	Option        "Protocol" "auto-dev" 
	Option        "Device" "$paddevice" 
	Option        "TapButton1" "1"
#	Option        "VertEdgeScroll" "1"
#	Option        "HorizEdgeScroll" "1" 
#	Option        "LeftEdge"      "1700" 
#	Option        "RightEdge"     "5300" 
#	Option        "TopEdge"       "1700" 
#	Option        "BottomEdge"    "4200" 
#	Option        "FingerLow"     "25" 
#	Option        "FingerHigh"    "30" 
#	Option        "MaxTapTime"    "180" 
#	Option        "MaxTapMove"    "220" 
#	Option        "VertScrollDelta" "100" 
#	Option        "MinSpeed"      "0.09" 
#	Option        "MaxSpeed"      "0.18" 
#	Option        "AccelFactor"   "0.0015" 
	Option        "SHMConfig"     "on" 
EndSection 

EOF
# Device section:
cat << EOF >>  /etc/X11/xorg.conf

# Device         ( Graphics device description )
#_______________________________________________________________________

# Any number of graphic devices sections may be present

Section "Device"
	Identifier     "Videocard1"
$cardvendorname
	BoardName   "$videocard"
	Driver     "$driver"
$busid
	Option "RenderAccel" "true"
	Option "XaaNoOffscreenPixmaps" "on"
EndSection

EOF

# Monitor section:
cat << EOF >>  /etc/X11/xorg.conf

# Monitor        ( Monitor description )
#_______________________________________________________________________

Section "Monitor"
	Identifier     "Monitor1"
$monitorvendorname
$monitormodelname

	$modeline	
	
$horizsync
$vertrefresh
	$useedidfreqs
$dpms
	Option "ReducedBlanking"
	
EndSection

EOF

# Screen section:
cat << EOF >>  /etc/X11/xorg.conf

# Screen         ( Screen configuration )
#_______________________________________________________________________

Section "Screen"
    Identifier  "Zenwalk"
    Device      "Videocard1"
    Monitor     "Monitor1"

   DefaultDepth 24

    Subsection "Display"
        Depth       8
        Modes $modes 
	EndSubsection
    Subsection "Display"
        Depth       16
        Modes $modes 
	EndSubsection
    Subsection "Display"
        Depth       24
        Modes $modes
	EndSubsection
    Subsection "Display"
        Depth       32
        Modes $modes 
	EndSubsection
EndSection

EOF

# ServerLayout section:
cat << EOF >>  /etc/X11/xorg.conf

# ServerLayout   ( Overall layout )
#_______________________________________________________________________

Section "ServerLayout"
	Identifier		"Simple Layout"
	Screen			"Zenwalk"
	InputDevice		"Mouse1" "CorePointer"
	InputDevice		"Pad1" "SendCoreEvents"
	InputDevice		"Keyboard1" "CoreKeyboard"
EndSection

EOF

# DRI section:
cat << EOF >>  /etc/X11/xorg.conf

# DRI            ( DRI-specific configuration )
#_______________________________________________________________________

Section "dri"
# Access to OpenGL ICD is allowed for all users:
    Mode		0666
# Access to OpenGL ICD is restricted to a specific user group:
#    Group		100    # users
EndSection
EOF

}

# Probe monitor model, frequencies and videocard driver #################################
function xprob(){

  useedidfreqs=''
  
  # Probing videocard
  currenthome=$HOME
  HOME=$tmpdir
  /usr/bin/X -configure 2>/dev/null
  HOME=$currenthome
  
  # Probing monitor
  /usr/sbin/get-edid 2>/dev/null | /usr/sbin/parse-edid 2>/dev/null > $tmpdir/edid-data.txt
  
  # VendorName
  buffer=""
  buffer="$( sed -n '/^ *Section *\"Monitor\" *$/,/^ *EndSection *$/p' $tmpdir/xorg.conf.new \
  | grep "VendorName" \
  | grep -v "Monitor Vendor" \
  | sed -e 's/.*VendorName[ \t]*\"\(.*\)\"$/\1/' \
  | sed -e 's/\"/,/g' \
  | head -n1 )"
  
  if [ ! "$buffer" ] ; then
    buffer="$(grep "VendorName" $tmpdir/edid-data.txt \
    | sed -e 's/.*VendorName[ \t]*\"\(.*\)\"$/\1/' \
    | sed -e 's/\"/,/g' )"
  fi
  [ ! "$buffer" ] && buffer='Artefact'
  monitorvendorname="     VendorName \"$buffer\""
  
  # ModelName
  buffer=""
  buffer="$( sed -n '/^ *Section *\"Monitor\" *$/,/^ *EndSection *$/p' $tmpdir/xorg.conf.new \
  | grep "ModelName" \
  | grep -v "Monitor Model" \
  | sed -e 's/.*ModelName[ \t]*\"\(.*\)\"$/\1/' \
  | sed -e 's/\"/,/g' \
  | head -n1 )"
  
  if [ ! "$buffer" ] ; then
    buffer="$(grep "ModelName" $tmpdir/edid-data.txt \
    | sed -e 's/.*ModelName[ \t]*\"\(.*\)\"$/\1/' \
    | sed -e 's/\"/,/g' )"
  fi
  [ ! "$buffer" ] && buffer='My monitor'
  monitormodelname="     ModelName \"$buffer\""

  # Tunning
  horizsync="$( sed -n '/^ *Section *\"Monitor\" *$/,/^ *EndSection *$/p' $tmpdir/xorg.conf.new | grep "HorizSync")"
  if [ ! "$horizsync" ] ; then
    horizsync="$(cat $tmpdir/edid-data.txt | grep "HorizSync")"
    if [ ! "$horizsync" ] ; then
      horizsync='     HorizSync 31.5 - 50.0'
      useedidfreqs='     Option "UseEdidFreqs" "1"'
    fi
  fi

  vertrefresh="$( sed -n '/^ *Section *\"Monitor\" *$/,/^ *EndSection *$/p' $tmpdir/xorg.conf.new | grep "VertRefresh")"
  if [ ! "$vertrefresh" ] ; then
    vertrefresh="$(grep "VertRefresh" $tmpdir/edid-data.txt)"
    if [ ! "$vertrefresh" ] ; then
      vertrefresh='     VertRefresh 40-90'
      useedidfreqs='     Option "UseEdidFreqs" "1"'
    fi
  fi
  
  resolution="$(sed -n 's/[ \t]*Mode[ \t]*"\(.*\)".*$/\1/p' $tmpdir/edid-data.txt | head -n1)"
  X="$(echo $resolution | sed -e 's/^\([0-9]*\)x.*/\1/')"
  
  if [[ $X -ge 800 && $X -le 2800 ]] ; then
    dotclock="$(sed -n 's/[ \t]*DotClock[ \t]*\([0-9\.]*\).*$/\1/p' $tmpdir/edid-data.txt | head -n1)"
    htimings="$(sed -n 's/[ \t]*HTimings[ \t]*\([0-9 ]*\).*$/\1/p' $tmpdir/edid-data.txt | head -n1)"
    vtimings="$(sed -n 's/[ \t]*VTimings[ \t]*\([0-9 ]*\).*$/\1/p' $tmpdir/edid-data.txt | head -n1)"
    flags="$(sed -n 's/[ \t]*Flags[ \t]*"\(.*\)".*$/\1/p' $tmpdir/edid-data.txt | tr -d \" | head -n1)"
    vfreq="$(sed -n 's/.*vfreq[ \t]*\([0-9\.]*\)Hz.*$/\1/p' $tmpdir/edid-data.txt | head -n1)"
    mode="\"${resolution}_${vfreq}\""
    if [ "$(echo ${resolution} | grep '1024x768')" ] ; then
		modes="${mode} \"1024x600\" \"854x480\" \"848x480\" \"800x600\""
	elif [ "$(echo ${resolution} | grep '1280x800')" ] ; then
		modes="${mode} \"1280x720\" \"1200x900\" \"1152x864\" \"1152x768\" \"1024x768\" \"1024x600\" \"854x480\" \"848x480\" \"800x600\""
	elif [ "$(echo ${resolution} | grep '1280x1024')" ] ; then
		modes="${mode} \"1280x960\" \"1280x854\" \"1280x800\" \"1280x720\" \"1200x900\" \"1152x864\" \"1152x768\" \"1024x768\" \"1024x600\" \"854x480\" \"848x480\" \"800x600\""
	elif [ "$(echo ${resolution} | grep '1440x900')" ] ; then
		modes="${mode} \"1400x900\" \"1360x768\" \"1280x1024\" \"1280x960\" \"1280x854\" \"1280x800\" \"1280x720\" \"1200x900\" \"1152x864\" \"1152x768\" \"1024x768\" \"1024x600\" \"854x480\" \"848x480\" \"800x600\""
	elif [ "$(echo ${resolution} | grep '1680×1050')" ] ; then
		modes="${mode} \"1600x1200\" \"1600x1024\" \"1440x900\" \"1400x1050\" \"1400x900\" \"1360x768\" \"1280x1024\" \"1280x960\" \"1280x854\" \"1280x800\" \"1280x720\" \"1200x900\" \"1152x864\" \"1152x768\" \"1024x768\" \"1024x600\" \"854x480\" \"848x480\" \"800x600\""
	elif [ "$(echo ${resolution} | grep '1920×1200')" ] ; then
		modes="${mode} \"1920x1080\" \"1680x1050\" \"1600x1200\" \"1600x1024\" \"1440x900\" \"1400x1050\" \"1400x900\" \"1360x768\" \"1280x1024\" \"1280x960\" \"1280x854\" \"1280x800\" \"1280x720\" \"1200x900\" \"1152x864\" \"1152x768\" \"1024x768\" \"1024x600\" \"854x480\" \"848x480\" \"800x600\""
	else
		modes="${mode} \"2560x1600\" \"2048x1536\" \"1920x1440\" \"1920x1200\" \"1920x1080\" \"1680x1050\" \"1600x1200\" \"1600x1024\" \"1440x900\" \"1400x1050\" \"1400x900\" \"1360x768\" \"1280x1024\" \"1280x960\" \"1280x854\" \"1280x800\" \"1280x720\" \"1200x900\" \"1152x864\" \"1152x768\" \"1024x768\" \"1024x600\" \"854x480\" \"848x480\" \"800x600\""
	fi
	modeline="Modeline $mode $dotclock $htimings $vtimings $flags"
  else
    modes="\"2560x1600\" \"2048x1536\" \"1920x1440\" \"1920x1200\" \"1920x1080\" \"1680x1050\" \"1600x1200\" \"1600x1024\" \"1440x900\" \"1400x1050\" \"1400x900\" \"1360x768\" \"1280x1024\" \"1280x960\" \"1280x854\" \"1280x800\" \"1280x720\" \"1200x900\" \"1152x864\" \"1152x768\" \"1024x768\" \"1024x600\" \"854x480\" \"848x480\" \"800x600\""
  fi

  dpms="$( sed -n '/^ *Section *\"Monitor\" *$/,/^ *EndSection *$/p' $tmpdir/xorg.conf.new | grep "DPMS")"

  cardvendorname="$( sed -n '/^ *Section *\"Device\" *$/,/^ *EndSection *$/p' $tmpdir/xorg.conf.new | grep "VendorName" | head -n1)"

  driver="$( sed -n '/^ *Section *\"Device\" *$/,/^ *EndSection *$/p' $tmpdir/xorg.conf.new \
  | grep -v "##" \
  | grep "Driver" \
  | sed -e 's/^[ \t]*Driver[ \t]*\"\(.*\)\".*$/\1/' \
  | head -n1 )"
  [ "$(grep "vesa" /proc/cmdline)" ] && driver='vesa'
  [ ! "$driver" ] && driver='vesa'


  videocard="$( sed -n '/^ *Section *\"Device\" *$/,/^ *EndSection *$/p' $tmpdir/xorg.conf.new \
  | grep "BoardName" \
  | grep -v "Unknown" \
  | sed -e 's/^[ \t]*BoardName[ \t]*\"\(.*\)\".*$/\1/' \
  | head -n1 )"
  [ ! "$videocard" ] && videocard="Video device"


  busid="$( sed -n '/^ *Section *\"Device\" *$/,/^ *EndSection *$/p' $tmpdir/xorg.conf.new \
  | grep "BusID" \
  | head -n1 )"

  # The module section of xorg.conf
  sed -n '/Section \"Module\"/,/EndSection/p' $tmpdir/xorg.conf.new > $tmpdir/xorg.modules

  # The files section of xorg.conf
  sed -n '/Section \"Files\"/,/EndSection/p' $tmpdir/xorg.conf.new > $tmpdir/xorg.files
  
  # The touchpad device
  for paddevice in /dev/input/tp0 /dev/input/ts0 /dev/ts0 /dev/tp0 /dev/input/tp1 /dev/input/ts1 /dev/ts1 /dev/tp1 ; do
    [ -e $paddevice ] && break
  done

}



##################################################################
# Converts keyboard map from kmap (/usr/share/kbd/keymaps) to xkb (/etc/X11/xkb)
function xkbconvert(){

# Probing the keymap

  key="$(grep "^[[:space:]]*\/usr\/bin\/loadkeys" /etc/rc.d/rc.keymap \
    | sed -e 's/^.*loadkeys *\([^\.]*\)\(\.map\)*$/\1/')"



	# We convert keymap into XkbLayout  -- The fields are  keymap | XkbLayout | XkbOptions

	cat << "EOF" | grep "^$key|.*|.*" \
	  | sed -e "s/^.*|\(.*\)|\(.*\)/\1|\2/" > $tmpdir/xkb
ANSI-dvorak|dvorak|
al|al|
am|am|
ar|ar|
azerty|fr|
az|az|
be-latin1|be|
bg-cp1251|bg|
bg-cp855|bg|
bg_bds-cp1251|bg|
bg_bds-utf8|bg|
bg_pho-cp1251|bg|
bg_pho-utf8|bg|
br-abnt2|br|
br-abnt|br|
br-latin1-abnt2|br|
br-latin1-us|br|
brdk|brdk|
by|by|
by|by|
cf|ca_enhanced|
croat|hr|
cz-cp1250|cz|
cz-lat2-prog|cz|
cz-lat2|cz|
cz-us-qwertz|cz_qwerty|
cz|cz|
de-latin1-nodeadkeys|de|
de-latin1|de|
de_CH-latin1|de_CH|
de|de|
dk-latin1|dk|
dk|dk|
dvorak-l|dvorak|
dvorak-r|dvorak|
dvorak|dvorak|
es-cp850|es|
es|es|
fi-latin1|fi|
fi-latin9|fi|
fi|fi|
fr-latin1|fr|
fr-latin9|fr|
fr-pc|fr|
fr_CH-latin1|fr_CH|
fr_CH|fr_CH|
fr|fr|
gr-pc|us,el|grp:alt_shift_toggle
gr|us,el|grp:alt_shift_toggle
hu|hu|
il|us,il|grp:alt_shift_toggle
il-heb|us,il-heb|grp:alt_shift_toggle
il-phonetic|us,il-phonetic|grp:alt_shift_toggle
is-latin1-us|us,is|grp:alt_shift_toggle
is-latin1|is|
it-ibm|it|
it2|it|
it|it|
jp106|jp|
lt.baltic|lt_std|
lt.l4|lt_std|
lt|lt_std|
lt|lt|
lv|lv|
lv-latin7|lv|
mk-cp1251|mk|
mk-utf|mk|
mk0|mk|
mk|mk|
nl2|nl|
nl|nl|
nl|nl|
no-latin1|no|
no|no|
pl2|pl2|
pl|pl|
pt-latin1|pt|
pt-latin9|pt|
ro_win|ro_microsoft|
ru-cp1251|ru|grp:switch,grp:alt_shift_toggle,grp_led:scroll
ru-ms|us,ru(winkeys)|grp:switch,grp:alt_shift_toggle,grp_led:scroll
ru-yawerty|ru|
ru1|us,ru(winkeys)|grp:switch,grp:alt_shift_toggle,grp_led:scroll
ru2|us,ru(winkeys)|grp:switch,grp:alt_shift_toggle,grp_led:scroll
ru3|us,ru(winkeys)|grp:switch,grp:alt_shift_toggle,grp_led:scroll
ru4|us,ru(winkeys)|grp:switch,grp:alt_shift_toggle,grp_led:scroll
ru_win|us,ru(winkeys)|grp:switch,grp:alt_shift_toggle,grp_led:scroll
ru|us,ru(winkeys)|grp:switch,grp:alt_shift_toggle,grp_led:scroll
se-fi-ir209|se_FI|
se-fi-lat6|se_FI|
se-ir209|se_SE|
se-lat6|se_SE|
sg-latin1-lk450|sg|
sg-latin1|de_CH|
sg|de_CH|
sk-prog-qwerty|sk_qwerty|
sk-prog-qwertz|sk_qwerty|
sk-prog-qwertz|sk|
sk-qwerty|sk_qwerty|
sk-qwertz|sk_qwerty|
slovene|si|
sr-cy|sry|
sv-latin1|se|
syr|syr|
tel|tel|
th_pat|th_pat|
th_tis|th_tis|
th|th|
tj|tj|
tml|tml|
tr_f-latin5|tr_f|
tr_q-latin5|tr|
tralt|tr|
tralt|tr|
trq|tr|
ua-utf-ws|ua|
ua-utf|ua|
ua-ws|ua|
ua|ua|
ua|ua|
uk|gb|
us-acentos|us|
us|us|
uz|uz|
vn|vn|
wangbe2|fr|
wangbe|fr|
EOF
	
	xkblayout="$(sed -e "s/^\(.*\)|.*/\1/" $tmpdir/xkb)"
	xkboptions="terminate:ctrl_alt_bksp"
	specialxkboptions="$(sed -e "s/^.*|\(.*\)/\1/" $tmpdir/xkb)"
	[ "${specialxkboptions}" ] && xkboptions="${xkboptions},${specialxkboptions}"
	
	rm -f $tmpdir/xkb
	# Fall back to keymap if no xkb maping available
	if [ ! "$xkblayout" ]; then
	  xkblayout="$key"
	  xkboptions=""
	fi

}

##################################################################
function updatefc(){
	# Update the X font indexes
	if [ -x /usr/bin/fc-cache ]; then
		for dir in /usr/share/fonts/* ; do touch $dir ; done
		/usr/bin/fc-cache 2>&1 1>/dev/null &
	fi
}


##################################################################
function updatemime(){
	# Update the X font indexes
	if [ -x /usr/bin/update-mime-database ]; then
		/usr/bin/update-mime-database /usr/share/mime 2>&1 1>/dev/null &
	fi
}

##################################################################
function updatescrollkeeper(){
	# Generate GNOME documentation
	if [ -x /usr/bin/scrollkeeper-update ]; then
		/usr/bin/scrollkeeper-update 2>&1 1>/dev/null &
	fi
}


     ########################################
########### HERE COMES THE SUN ####################
     ########################################



if [ "$DISPLAY" ]; then

	$dialog --msgbox "$(eval_gettext 'To probe for the video driver and monitor please run') \"$(basename $0)\" $(eval_gettext 'from runlevel 3')" \
	--cancel-label "$(eval_gettext 'Exit')" \ 8 70
	exit 0
	
else

	
	if [ "$1" = "silent" ] ; then
		echo "$(eval_gettext 'Configuring the X server')"
		(
		xprob
		xkbconvert
		writexorg
		updatefc
		updatemime	
		sed -i "s/^id:.*:initdefault:$/id:4:initdefault:/" /etc/inittab
		sed -i 's/^\([ \t]*Option.*Composite.*\)\".*\".*$/\1\"enable\"/' /etc/X11/xorg.conf 
		) 2>&1 1>/dev/null
		exit
	fi
	
	

	# probe for videocard/monitor specs if we are called from runlevel 3
	clear
	$dialog --infobox "$(eval_gettext 'Probing video configuration') ..." 8 45 
	sleep 1
	clear
	xprob
	clear

  $dialog \
  --title "$(eval_gettext 'X11 configuration')" \
  --icon "videoconfig" \
  --menu \
" $(eval_gettext 'Videocard') : $videocard \n\
 $(eval_gettext 'Driver') : \"$driver\" \n\
 $(eval_gettext 'Do you want to use this configuration (recommended) ?')\n\n" \
14 75 3 \
   "$(eval_gettext 'Yes')" "$(eval_gettext 'Configure X11')" \
   "$(eval_gettext 'No')" "$(eval_gettext 'keep existing configuration')" 2> $tmpdir/configxorg

	configxorg=$(cat $tmpdir/configxorg)
	rm -f $tmpdir/configxorg

	case $configxorg in
	  $(eval_gettext 'Yes'))
		$dialog --infobox "$(eval_gettext 'Configuring the X server')..." 8 45
		sleep 1
		xkbconvert
		writexorg
		;;
	  $(eval_gettext 'No'))
		;;
	esac

	# Compositor support ?

	  $dialog \
	  --title "$(eval_gettext 'Compositor')" \
	  --icon "videoconfig" \
	  --menu \
	"$(eval_gettext 'Do you want to enable the compositor (transparency, shadows, ... it can be slow on some videocards) ?')\n\n" \
	14 75 3 \
	   "$(eval_gettext 'Yes')" "$(eval_gettext 'Enable the compositor')" \
	   "$(eval_gettext 'No')" "$(eval_gettext 'Disable the compositor')" 2> $tmpdir/compositor

	compositor=$(cat $tmpdir/compositor)
	rm -f $tmpdir/compositor

	case $compositor in
	  $(eval_gettext 'Yes'))
		sed -i 's/^\([ \t]*Option.*Composite.*\)\".*\".*$/\1\"enable\"/' /etc/X11/xorg.conf 
		;;
	  $(eval_gettext 'No'))
		sed -i 's/^\([ \t]*Option.*Composite.*\)\".*\".*$/\1\"disable\"/' /etc/X11/xorg.conf   
		;;
	esac


	updatefc
	updatemime

	# Runlevel 3 or 4 ?

	  $dialog --title "$(eval_gettext 'Login mode configuration')" --icon "videoconfig" --menu \
	"$(eval_gettext 'Select the login mode you want to enable on startup:')\n\n" \
	16 76 3 \
	   "$(eval_gettext 'Text')" "$(eval_gettext 'Text mode login - runlevel 3')" \
	   "$(eval_gettext 'Graphical')" "$(eval_gettext 'Graphical Xwindow login - runlevel 4')" \
	   "$(eval_gettext 'Skip')" "$(eval_gettext 'No change')" 2> $tmpdir/runlevel

	runlevel=$(cat $tmpdir/runlevel)
	rm -f $tmpdir/runlevel

	case $runlevel in
	  $(eval_gettext 'Text'))
		sed -i "s/^id:.*:initdefault:$/id:3:initdefault:/" /etc/inittab
		;;
	  $(eval_gettext 'Graphical'))
		sed -i "s/^id:.*:initdefault:$/id:4:initdefault:/" /etc/inittab
		;;
	  $(eval_gettext 'Skip'))
	    exit
		;;
	esac
fi
