#!/bin/sh
#BK video-wizard (c) Copyright 2007 Barry Kauler
#2007 Lesser GPL licence v2 (http://www.fsf.org/licensing/licenses/lgpl.html)
#written for Puppy v3.00
#bugfix v3.02

. /etc/rc.d/PUPSTATE

CURRENTX="`readlink /usr/X11R7/bin/X`"
if [ "$CURRENTX" != "Xvesa" ];then
 Xdialog --title "Xvesa ビデオウィザード" --msgbox "Xvesa X サーバは現在稼働していません。
メニューからXorg ビデオウィザードを選択して下さい 
-- Xvesaサーバに切り替えるオプションがあります。
終了するにはOKボタンをクリックして下さい..." 0 0
 exit
fi

ALLMODES="`Xvesa -listmodes 2>&1 | grep '^0x' | tr ':' ' ' | tr -s ' ' | cut -f 1,2 -d ' ' | sort -g -k 2 | tr ' ' '|' | tr '\n' ' '`"

#v3.02 verify correct mode-number for 640x480x16... (0x0111)
MODEBASENUM="`echo "$ALLMODES" | tr ' ' '\n' | grep '640x480x16' | cut -f 1 -d '|'`"

if [ -e /tmp/videomode ];then
 CURRENTMODE="`cat /tmp/videomode`"
 #in case new mode no good, ctrl-alt-backspace will come up in safe mode...
 [ "$MODEBASENUM" ] && echo -n "$MODEBASENUM 640x480x16" > /tmp/videomode #v3.02
else
 CURRENTMODE="`cat /etc/videomode`"
fi
echo "$CURRENTMODE" > /tmp/xvesacurrentmode #v3.02
CURRENTNUMBER="`echo -n "$CURRENTMODE" | cut -f 1 -d ' '`"
CURRENTVALS="`echo -n "$CURRENTMODE" | cut -f 2 -d ' '`"

[ -f /etc/xextraoptions ] && CURRENTXOPTIONS="`cat /etc/xextraoptions`"

RADIOSECTION=""
for ONEMODE in $ALLMODES
do
 MODENUMBER="`echo -n "$ONEMODE" | cut -f 1 -d '|'`"
 MODEVALS="`echo -n "$ONEMODE" | cut -f 2 -d '|'`"
 XVAL=`echo -n "$MODEVALS" | cut -f 1 -d 'x'`
 YVAL=`echo -n "$MODEVALS" | cut -f 2 -d 'x'`
 COLDEPTH=`echo -n "$MODEVALS" | cut -f 3 -d 'x'`
 [ $XVAL -lt 640 ] && continue
 [ $YVAL -lt 480 ] && continue
 [ $COLDEPTH -lt 16 ] && continue
 RADIOSTATE="false"
 [ "$CURRENTNUMBER" = "$MODENUMBER" ] && RADIOSTATE="true"
 RADIOSECTION="${RADIOSECTION}
    <radiobutton active=\"${RADIOSTATE}\">
      <label>${MODEVALS}</label>
      <variable>RADIO_${ONEMODE}</variable>
    </radiobutton>
"
done

# icon-name=\"gtk-preferences\"
export MAIN_DIALOG="
<window title=\"Xvesaビデオウィザード\">
<hbox>
 <vbox>
  <frame ビデオーモード>
   ${RADIOSECTION}
  </frame> 
 </vbox>
 <vbox>
  <text>
    <label>\" \"</label>
  </text>
  <text>
    <label>Xvesaビデオウィザードにようこそ！</label>
  </text>
  <text>
    <label>現在のビデオモードは ${CURRENTVALS} です。他のモードにするなら、左から選択して「変更」ボタンをクリックして下さい。現在の解像度で満足なら「OK」ボタンをクリックして下さい。</label>
  </text>
  <text>
    <label>注意： x16 は65,536色（HighColor）の16ビットカラー。x24 は16万色（TrueColor）の 24ビットカラーです。</label>
  </text>
  <text>
    <label>重要：モードが機能しない時は、CTRL-ALT-BACKSPACE（CTRLとALTキーを押さえて、BACKSPACEキーを軽くたたいて下さい）を押して下さい。このキーの組み合わせを忘れないで下さい。それは、Xグラフィックスサーバの緊急シャットダウンの標準的なLinuxテクニックです。</label>
  </text>
  <text>
    <label>\" \"</label>
  </text>
  
  <hbox>
   <vbox>
    <text>
     <label>エキスパート用 Xサーバ起動オプション：</label>
    </text>
    <entry>
     <default>\"${CURRENTXOPTIONS}\"</default>
     <variable>ENTRY</variable>
    </entry>
   </vbox>
   <text>
    <label>\"    \"</label>
   </text>
   
    
    <button>
      <label>変更</label>
      <action type=\"exit\">TESTBUTTON</action>
    </button>
    <button>
      <label>OK</label>
      <action type=\"exit\">OKAYBUTTON</action>
    </button>
    
   
  </hbox>
 </vbox>
</hbox>
</window>
"

RETVALS="`gtkdialog3 --program=MAIN_DIALOG`"

echo "$RETVALS"

[ "`echo "$RETVALS" | grep '^EXIT='`" = "" ] && exit #invalid stuff.
[ "`echo "$RETVALS" | grep 'abort'`" != "" ] && exit #invalid stuff.

CHOSENMODE="`echo "$RETVALS" | grep 'RADIO' | grep '"true"' | cut -f 2 -d '_' | cut -f 1 -d '=' | tr '|' ' '`"
CHOSENBUTTON="`echo "$RETVALS" | grep '^EXIT' | cut -f 2 -d '"'`" #'geany
CHOSENXOPTIONS="`echo "$RETVALS" | grep '^ENTRY' | cut -f 2 -d '"'`" #'geany

echo "CHOSENMODE=$CHOSENMODE CHOSENBUTON=$CHOSENBUTTON"

echo -n "$CHOSENMODE"  > /tmp/videomode
echo -n "$CHOSENXOPTIONS" > /etc/xextraoptions

if [ "$CHOSENBUTTON" = "TESTBUTTON" ];then
 rm -f /tmp/Xflag #prevent endless restarts. see /usr/X11R7/bin/xwin.
 exec killall X #restart X in new test mode.
fi

if [ "$CHOSENBUTTON" = "OKAYBUTTON" ];then
 echo -n "$CHOSENMODE" > /etc/videomode
 rm -f /tmp/videomode
 rm -f /tmp/Xflag #prevent endless restarts. see xwin*.
fi

if [ $PUPMODE -eq 5 ];then
 if [ ! "`grep 'alias snd\-card\-0' /etc/modprobe.conf`" = "" ];then
  wavplay /usr/share/audio/2barks.wav &
  sleep 3
  killall wavplay 2> /dev/null
 fi
fi

###END###
