#!/bin/bash
SCREEN=();
SCREENLEN=0;

if ! XRANDR="$( which xrandr 2>/dev/null )"; then
 echo "Das Tool xrandr ist nicht installiert!"
 exit 1
fi
if ! TDIALOG="$( which Xdialog 2> /dev/null )"; then
 if ! TDIALOG="$( which dialog 2> /dev/null )"; then
  echo "Kein dialog gefunden!"
  exit 1
 fi
fi

function scan(){
 local DUMMY DEVICE SCREENNR RETURN;
 RETURN=0
 SCREEN=()
 SCREENLEN=0
 while read LINE 
 do
  case "$LINE" in
   Can\'t\ open\ display)
    RETURN=1
   ;;
   Screen\ *:\ *)
    DUMMY="${LINE#Screen\ }"
    SCREENNR="${DUMMY%%:*}"
   ;;
   *\ connected\ *)
    DEVICE="${LINE%%\ connected*}"    
    #echo "${DEVICE} is on"
    SCREEN[${SCREENLEN}]="SCREEN:${SCREENNR}_DEVICE:${DEVICE}_off"
    ((SCREENLEN++))
    SCREEN[${SCREENLEN}]=" --output ${DEVICE} --off --screen ${SCREENNR}"
    ((SCREENLEN++))
   ;;
   *\ disconnected\ *)
    DEVICE="${LINE%%\ disconnected*}"    
    #echo "${DEVICE} is off"
   ;;
   [0-9][0-9][0-9]*x[0-9][0-9][0-9]*[\ ]**[0-9]*\.[0-9]\**)
    MODE="${LINE%%\ *}"
    SCREEN[${SCREENLEN}]="SCREEN:${SCREENNR}_DEVICE:${DEVICE}_MODE:${MODE}_aktiv"
    ((SCREENLEN++))
    SCREEN[${SCREENLEN}]=" --output ${DEVICE} --mode ${MODE} --screen ${SCREENNR}"
    ((SCREENLEN++))
    # echo "ModeLine Mode=${MODE} (${LINE})"
   ;;
   [0-9][0-9][0-9]*x[0-9][0-9][0-9]*)
    MODE="${LINE%%\ *}"
    SCREEN[${SCREENLEN}]="SCREEN:${SCREENNR}_DEVICE:${DEVICE}_MODE:${MODE}"
    ((SCREENLEN++))
    SCREEN[${SCREENLEN}]=" --output ${DEVICE} --mode ${MODE} --screen ${SCREENNR}"
    ((SCREENLEN++))
    # echo "ModeLine Mode=${MODE} (${LINE})"
   ;;
   *)
    # echo $LINE | od -c
    echo "Zeile $LINE unbekannt!"
   ;;
  esac
 done < <( ${XRANDR} 2>&1 )
 return $RETURN
}

if scan ; then
 EXIT=0
 while [ ${EXIT} -eq 0 ]
 do
  DSTRING=""
  X=0
  COUNT=0
  for X in $( seq 0 2 $((SCREENLEN-1)) )
  do
   DSTRING="${DSTRING} ${COUNT} ${SCREEN[$X]}"
   ((COUNT++))
  done
  NEWSCAN="${COUNT}"
  DSTRING="${DSTRING} ${NEWSCAN} Neuscan "
  if RESULT="$( ${TDIALOG} --title 'Videoswitch V1.1' --cancel-label Beenden --menu F\.H\ \(C\)2011 20 70 15 ${DSTRING} 3>&1 1>&2 2>&3 3>&- )"; then
   if [ "${RESULT}" = "${NEWSCAN}" ]; then
    scan
    EXIT="$?"
   else
    ((RESULT=2*RESULT+1))
    XRANDROPT="${SCREEN[$RESULT]}"
    ${XRANDR} ${XRANDROPT}
    scan
   fi
  else
   EXIT=1 
  fi
 done
else
 echo "Kein X-Window gefunden!"
fi

