#!/bin/sh

SWITCHATIVIDEOMODE=$0
SWITCHATIVIDEOMODEHELP=$0.txt

ID="/usr/bin/id"
PIDOF="/sbin/pidof"
GNOMESESSION="/usr/bin/gnome-session"
GNOMESESSIONSAVE="/usr/bin/gnome-session-save"
GNOMESESSIONSAVEARGS="--kill"
XMESSAGE="/usr/X11R6/bin/xmessage"
MORE="/bin/more"

XF86SERVER="/usr/X11R6/bin/X"
XF86CONFIG="/etc/X11/XF86Config"
XF86DRIVER="fglrx"
XF86XAUTHORITY="/var/gdm/:0.Xauth"

PS="/bin/ps"
PSUSERFIELD="1"
CAT="/bin/cat"
GREP="/bin/grep"
CUT="/bin/cut"
PASSWDFILE="/etc/passwd"
PASSWDFILEHOMEDIRFIELD="6"

XF86CONFIGWIDE="${XF86CONFIG}-${XF86DRIVER}-1280x800x24"
XF86CONFIGWIDECLONEAUTO="${XF86CONFIG}-${XF86DRIVER}-1280x800x24-CLONE-AUTO"
XF86CONFIGWIDECLONEVIDEO="${XF86CONFIG}-${XF86DRIVER}-1280x800x24-CLONE-VIDEO"
XF86CONFIGWIDECLONETV="${XF86CONFIG}-${XF86DRIVER}-1280x800x24-CLONE-TV"
XF86CONFIGWIDEBIGLEFTAUTO="${XF86CONFIG}-${XF86DRIVER}-1280x800x24-BIGLEFT-AUTO"
XF86CONFIGWIDEBIGLEFTVIDEO="${XF86CONFIG}-${XF86DRIVER}-1280x800x24-BIGLEFT-\
VIDEO"
XF86CONFIGWIDEBIGLEFTTV="${XF86CONFIG}-${XF86DRIVER}-1280x800x24-BIGLEFT-TV"
XF86CONFIGWIDEBIGRIGHTAUTO="${XF86CONFIG}-${XF86DRIVER}-1280x800x24-BIGRIGHT-\
AUTO"
XF86CONFIGWIDEBIGRIGHTVIDEO="${XF86CONFIG}-${XF86DRIVER}-1280x800x24-BIGRIGHT-\
VIDEO"
XF86CONFIGWIDEBIGRIGHTTV="${XF86CONFIG}-${XF86DRIVER}-1280x800x24-BIGRIGHT-TV"
XF86CONFIGWIDEVIRTUAL="${XF86CONFIG}-${XF86DRIVER}-1280x800x24-VIRTUAL"
XF86CONFIGWIDEVIRTUALCLONEAUTO="${XF86CONFIG}-${XF86DRIVER}-1280x800x24-\
VIRTUAL-CLONE-AUTO"
XF86CONFIGWIDEVIRTUALCLONEVIDEO="${XF86CONFIG}-${XF86DRIVER}-1280x800x24-\
VIRTUAL-CLONE-VIDEO"
XF86CONFIGWIDEVIRTUALCLONETV="${XF86CONFIG}-${XF86DRIVER}-1280x800x24-VIRTUAL-\
CLONE-TV"

XF86CONFIGREGULAR="${XF86CONFIG}-${XF86DRIVER}-1024x768x24"
XF86CONFIGREGULARCLONEAUTO="${XF86CONFIG}-${XF86DRIVER}-1024x768x24-CLONE-AUTO"
XF86CONFIGREGULARCLONEVIDEO="${XF86CONFIG}-${XF86DRIVER}-1024x768x24-CLONE-\
VIDEO"
XF86CONFIGREGULARCLONETV="${XF86CONFIG}-${XF86DRIVER}-1024x768x24-CLONE-TV"
XF86CONFIGREGULARBIGLEFTAUTO="${XF86CONFIG}-${XF86DRIVER}-1024x768x24-BIGLEFT-\
AUTO"
XF86CONFIGREGULARBIGLEFTVIDEO="${XF86CONFIG}-${XF86DRIVER}-1024x768x24-\
BIGLEFT-VIDEO"
XF86CONFIGREGULARBIGLEFTTV="${XF86CONFIG}-${XF86DRIVER}-1024x768x24-BIGLEFT-\
TV"
XF86CONFIGREGULARBIGRIGHTAUTO="${XF86CONFIG}-${XF86DRIVER}-1024x768x24-\
BIGRIGHT-AUTO"
XF86CONFIGREGULARBIGRIGHTVIDEO="${XF86CONFIG}-${XF86DRIVER}-1024x768x24-\
BIGRIGHT-VIDEO"
XF86CONFIGREGULARBIGRIGHTTV="${XF86CONFIG}-${XF86DRIVER}-1024x768x24-BIGRIGHT-\
TV"
XF86CONFIGREGULARVIRTUAL="${XF86CONFIG}-${XF86DRIVER}-1024x768x24-VIRTUAL"
XF86CONFIGREGULARVIRTUALCLONEAUTO="${XF86CONFIG}-${XF86DRIVER}-1024x768x24-\
VIRTUAL-CLONE-AUTO"
XF86CONFIGREGULARVIRTUALCLONEVIDEO="${XF86CONFIG}-${XF86DRIVER}-1024x768x24-\
VIRTUAL-CLONE-VIDEO"
XF86CONFIGREGULARVIRTUALCLONETV="${XF86CONFIG}-${XF86DRIVER}-1024x768x24-\
VIRTUAL-CLONE-TV"

OK="no"
GFXOK="no"
GNOMEOK="no"
RETVAL=0

message()
{
  msgtitle=$1
  msgfirstentryindex=$2
  msglastentryindex=$3

  if [ $msgfirstentryindex == "nobuttons" ];
  then
    if [ $GFXOK != "yes" ];
    then
      echo "$msgtitle"
    else
      $XMESSAGE -timeout 15 -center -buttons "OK:0" -default OK "$msgtitle">/dev/null 2>&1
      RETVAL=$?
    fi
  else
    msgcurrententryindex=$msgfirstentryindex

    if [ $GFXOK != "yes" ];
    then
      clear
      echo "$msgtitle"
      echo
      until [ $msgcurrententryindex -gt $msglastentryindex ]
      do
        echo -n "${msgcurrententryindex}) "
        echo "$4"
        shift
        msgcurrententryindex=`expr $msgcurrententryindex + 1`
      done
      echo
      echo "0) Cancel"
      echo
      echo -n "Votre choix ? "
      read RETVAL
      if [ $RETVAL -eq 0 ];
      then
        OK="yes"
      else
        if [ $RETVAL -ge $msgfirstentryindex ] &&\
           [ $RETVAL -le $msglastentryindex ];
        then
          OK="yes"
        fi
      fi
    else
      OK="yes"
      xmessagebuttons="Cancel:0"
      until [ $msgcurrententryindex -gt $msglastentryindex ]
      do
        xmessagebuttons="${xmessagebuttons},${4}:$msgcurrententryindex"
        shift
        msgcurrententryindex=`expr $msgcurrententryindex + 1`
      done
      $XMESSAGE -timeout 15 -center -buttons "$xmessagebuttons"\
                -default Cancel "$msgtitle">/dev/null 2>&1
      RETVAL=$?
    fi
  fi
}

text()
{
  if [ $GFXOK != "yes" ];
  then
    clear
    $MORE "$1"
  else
    $XMESSAGE -center -buttons "OK:0" -file "$1" >/dev/null 2>&1
  fi
}

if ( $PIDOF $XF86SERVER >/dev/null 2>&1 )
then
  export DISPLAY=:0
  if [ -f $XF86XAUTHORITY ];
  then
    export XAUTHORITY=$XF86XAUTHORITY
  fi
  PIDOFGNOMESESSION="`$PIDOF $GNOMESESSION`"
  if [ $PIDOFGNOMESESSION != "" ];
  then
    if [ -f $PASSWDFILE ];
    then
      export SESSION_MANAGER="local/`hostname`:/tmp/.ICE-unix/$PIDOFGNOMESESSION"
      USER="`$PS hu $PIDOFGNOMESESSION | $CUT -d' ' -f$PSUSERFIELD`"
      export HOME="`$CAT $PASSWDFILE | $GREP ^$USER: | $CUT -d':' -f$PASSWDFILEHOMEDIRFIELD`"
      GNOMEOK="yes"
    fi
  fi
  GFXOK="yes"
fi

USER="`$ID -nu`"
if [ $USER != "root" ];
then
  message "You must be root if you want to execute this command." nobuttons
  exit $RETVAL
fi

while [ $OK != "yes" ]
do
#  message "Change video mode?" 2 8 "Standard..." "Mirror..."\
#          "Extended 16/10..." "Extended 4/3..." "Virtual..." "Virtual mirror..."\
#          "Help..."
  message "Change video mode?" 2 7 "Standard..." "Mirror..."\
          "Extended 4/3..." "Virtual..." "Virtual mirror..."\
          "Help..."
done

OK="no"
case $RETVAL in
  2)
    while [ $OK != "yes" ]
    do
      message "Change standard video mode?" 2 3 "16/10" "4/3"
    done
    ;;
  3)
    while [ $OK != "yes" ]
    do
#      message "Change mirror vide mode?" 4 9 "16/10 auto."\
#              "16/10 video" "16/10 tv." "4/3 auto." "4/3 video" "4/3 tv."
      message "Change mirror video mode?" 4 5 "16/10 auto."\
              "4/3 auto."
    done
    ;;
#  4)
#    while [ $OK != "yes" ]
#    do
#      message "Change 16/10 extended video mode?" 10 15 "Left auto."\
#              "Right auto." "Left video" "Right video" "Left tv."\
#              "Right tv."
#    done
#    ;;
#  5)
  4)
    while [ $OK != "yes" ]
    do
#      message "Change 4/3 extended video mode?" 16 21 "Left auto."\
#              "Right auto." "Left video" "Right video" "Left tv."\
#              "Right tv."
      message "Change 4/3 extended video mode?" 6 7 "Left auto."\
              "Right auto."
    done
    ;;
#  6)
  5)
    while [ $OK != "yes" ]
    do
#      message "Change virtual video mode?" 22 23 "16/10" "4/3"
      message "Change virtual video mode?" 8 9 "16/10" "4/3"
    done
    ;;
#  7)
  6)
    while [ $OK != "yes" ]
    do
#      message "Change virtual mirror video mode?" 24 29 "16/10 auto."\
#              "16/10 video" "16/10 tv." "4/3 auto." "4/3 video" "4/3 tv."
      message "Change virtual mirror video mode?" 10 11 "16/10 auto."\
              "4/3 auto."
    done
    ;;
#  8)
  7)
    RETVAL=0
    text $SWITCHATIVIDEOMODEHELP
    ;;
esac

if [ $RETVAL -gt 1 ];
then
  case $RETVAL in
    2)
      XF86CONFIGNEW=$XF86CONFIGWIDE
      ;;
    3)
      XF86CONFIGNEW=$XF86CONFIGREGULAR
      ;;
    4)
      XF86CONFIGNEW=$XF86CONFIGWIDECLONEAUTO
      ;;
#    5)
#      XF86CONFIGNEW=$XF86CONFIGWIDECLONEVIDEO
#    ;;
#    6)
#      XF86CONFIGNEW=$XF86CONFIGWIDECLONETV
#      ;;
#    7)
    5)
      XF86CONFIGNEW=$XF86CONFIGREGULARCLONEAUTO
    ;;
#    8)
#      XF86CONFIGNEW=$XF86CONFIGREGULARCLONEVIDEO
#    ;;
#    9)
#      XF86CONFIGNEW=$XF86CONFIGREGULARCLONETV
#    ;;
#    10)
#      XF86CONFIGNEW=$XF86CONFIGWIDEBIGLEFTAUTO
#    ;;
#    11)
#      XF86CONFIGNEW=$XF86CONFIGWIDEBIGRIGHTAUTO
#    ;;
#    12)
#      XF86CONFIGNEW=$XF86CONFIGWIDEBIGLEFTVIDEO
#    ;;
#    13)
#      XF86CONFIGNEW=$XF86CONFIGWIDEBIGRIGHTVIDEO
#    ;;
#    14)
#      XF86CONFIGNEW=$XF86CONFIGWIDEBIGLEFTTV
#    ;;
#    15)
#      XF86CONFIGNEW=$XF86CONFIGWIDEBIGRIGHTTV
#    ;;
#    16)
    6)
      XF86CONFIGNEW=$XF86CONFIGREGULARBIGLEFTAUTO
    ;;
#    17)
    7)
      XF86CONFIGNEW=$XF86CONFIGREGULARBIGRIGHTAUTO
    ;;
#    18)
#      XF86CONFIGNEW=$XF86CONFIGREGULARBIGLEFTVIDEO
#    ;;
#    19)
#      XF86CONFIGNEW=$XF86CONFIGREGULARBIGRIGHTVIDEO
#    ;;
#    20)
#      XF86CONFIGNEW=$XF86CONFIGREGULARBIGLEFTTV
#    ;;
#    21)
#      XF86CONFIGNEW=$XF86CONFIGREGULARBIGRIGHTTV
#    ;;
#    22)
    8)
      XF86CONFIGNEW=$XF86CONFIGWIDEVIRTUAL
    ;;
#    23)
    9)
      XF86CONFIGNEW=$XF86CONFIGREGULARVIRTUAL
    ;;
#    24)
    10)
      XF86CONFIGNEW=$XF86CONFIGWIDEVIRTUALCLONEAUTO
    ;;
#    25)
#      XF86CONFIGNEW=$XF86CONFIGWIDEVIRTUALCLONEVIDEO
#    ;;
#    26)
#      XF86CONFIGNEW=$XF86CONFIGWIDEVIRTUALCLONETV
#    ;;
#    27)
    11)
      XF86CONFIGNEW=$XF86CONFIGREGULARVIRTUALCLONEAUTO
    ;;
#    28)
#      XF86CONFIGNEW=$XF86CONFIGREGULARVIRTUALCLONEVIDEO
#    ;;
#    29)
#      XF86CONFIGNEW=$XF86CONFIGREGULARVIRTUALCLONETV
#    ;;
  esac
  if [ -f $XF86CONFIGNEW ];
  then
    if [ -f $XF86CONFIG ];
    then
      XF86CONFIGOLD=`readlink $XF86CONFIG`
      if [ $XF86CONFIGOLD != $XF86CONFIGNEW ];
      then
        rm -f $XF86CONFIG
        ln -s $XF86CONFIGNEW $XF86CONFIG
      fi
    else
      ln -s $XF86CONFIGNEW $XF86CONFIG
    fi
    if [ $GNOMEOK == "yes" ]
    then
      exec $GNOMESESSIONSAVE $GNOMESESSIONSAVEARGS
    fi
  fi
fi

exit $RETVAL

#--
