#!/bin/bash
# +------------------------------------------------------------------+
# | Das folgende Progr. mm4dbox ist nur unter LINUX lauffaehig       |
# | Installationshinweise unter: http://muehlenjost.de/dbox/         |
# +------------------------------------------------------------------+
DIALOG=dialog
#-> Mit der Folgezeile kann Xdialog aktiviert werden
#if ! type Xdialog  1>&2; then DIALOG=dialog; else DIALOG=Xdialog ; fi
#-> Die Folgebefehle schalten (bitte nur testweise aktivieren) die Firewall ab
#iptables -F bzw. SuSEfirewall2 stop
#-> Zeichensatzumschaltung auf Westeuropa
export LANG=de_DE.ISO-8859-1
export RC_LANG=de_DE.ISO-8859-1
#-> Festlegung der mplayer-Optionen (-vf pp=0x20000) fuer Deinterlacing
#-> HINWEIS: -vf pp=0x20000 wird nicht von jedem mplayer akzeptiert
MPOPT="-fs -vf pp=0x20000 -quiet -zoom -vo xv"
#-> Festlegung der CD-Rohling- u. Streamdateigroesse in MByte
MEDIA=650
#-> Die Fehlerausgabe wurde von /dev/null auf ~/.mm4dbox/error gesetzt
#-> Die Angabe 2>&1 kann einzelne Programmaugaben oder exec 2>&1 komplett auf stdout legen
>~/.mm4dbox/error
exec 5>>~/.mm4dbox/error
exec 2>&5
##################### Eventuelle alte Prozesse beenden ####################
killall -9 ggrab wget mplayer gmplayer xine 1>&2

##################### Nun folgen Funktionsdefinitionen ####################
function killes()
{
 echo "$L"
 echo "| Abbruch der Funktion mit <Return> oder <Strg+C> (kill -9)        |"
 echo "+-----------+------------------------------------------------------+"
 echo "| | | | | | |"
 echo "| V V V V V |"
 echo "+-----------+"
 read
 killall gmplayer mplayer mencoder ggrab wget xine 1>&2
 rm ~/.mm4dbox/SELECT.TXT 1>&2
}
function dbox2time()
{
 echo "$L"
 set $(get http://dbox/control/getdate )
 echo "| Das dbox-Datum ist:" $1
 set `echo $1|tr '.' ' '`
# Die Folgezeile setzt das Datum (und die Uhrzeit auf 0:00)
 date -s`echo $2/$1/$3` 1>&2
 set $(get http://dbox/control/gettime )
 echo "| Die dbox-Zeit ist :" $1 "Uhr"
 date  +%T -s$1 1>&2
 hwclock --systohc
 echo -n "| Die Systemzeit ist: "
 date
 echo -n "| und die Hardwarez.: "
 hwclock
 echo "$L"
}
function tvcard()
{
 if ! type mplayer 1>&2;  then FEHLPROG="mplayer"  nopro; fi
 LIST=`cat ~/.mm4dbox/kanal | sed 's|"| |g' | sed 's|\(^[a-zA-Z]\) \(.*\)$|\1 "\2"|'`
 eval $DIALOG --menu Funktions-AUSWAHL 25 80 18 $LIST 2> ~/.mm4dbox/SELECT.TXT
 SELECT=`cat ~/.mm4dbox/SELECT.TXT`
 clear
 echo "$L"
 echo "| Als Kanal wurde $SELECT gewaehlt (aus der Datei ~/.mm4dbox/kanal)"
 echo "$L"
 killall gmplayer 1>&2
 sleep 2
 case $SELECT in
 "00" )	exit 0
	 ;;
 "01" )	gmplayer ~/.mm4dbox/tv.avi $MPOPT 1>&2 &
	echo "$L"
	echo "| Abbruch der Wiedergabe mit <RETURN>!                             |"
	echo "$L"
	read
	killall gmplayer 1>&2
	sleep 1
	;;
 "99" )	mencoder tv:// -tv channel=${KANAL}:driver=v4l:width=640:height=480:device=/dev/video0 -o ~/.mm4dbox/tv.avi -ovc lavc -oac mp3lame 1>&2 &
	echo "$L"
	echo "| Abbruch der Aufnahme mit <RETURN>!                               |"
	echo "$L"
	read
	killall mencoder gmplayer 1>&2
	sleep 1
	;;
 * )	KANAL=$SELECT
	gmplayer tv:// -tv    channel=${KANAL}:driver=v4l:width=640:height=480:outfmt=i420:device=/dev/video0 -vc rawi420 $MPOPT 1>&2 &
	;;
 esac
}
function rec-svcd()
{
 get http://dbox/control/message?popup=Nicht%20umschalten%20mm4dbox-Aufnahme 1>&2
 nice -n $NICE ggrab -udp -e mpg -b 20 -q -s $MEDIA -p $vpid $apid -o ~/.mm4dbox/mpg/"$KANALNAME"_ &
 echo "$L"
 echo "| Aufnahmeende und Start der SVCD/DVD-Erzeugung mit     <RETURN>   |"
 killes;
 make-svcd;
}
function make-svcd()
{
 clear
 if [ $(whoami) != "root" ]
 then
  echo "$L"
  echo "| Hinweis: Die CD-Erzeugung benoetigt (normalerweise) root-Rechte. |"
  echo "| Ignorieren und weitermachen mit <RETURN>. Abbruch mit <ctrl>+<c> |"
  echo "$L"
  read
 fi
 if ! type cdrdao 1>&2; then FEHLPROG="cdrdao"    nopro; fi
 echo "$L"
 echo "| Wie sollen die Videodaten aus ~/.mm4dbox/mpg/ auf CD gelangen?   |"
 echo "$L"
 echo "| SVCD-konform [t]ranscodieren, benoetigt mehrfache Spielzeitlaenge|"
 echo "|               Nur fuer die Einzeldatei -> "$KANALNAME
 echo "| HQ-SVCD      [b]rennen ohne Aufloesungsreduzierung (schnell)     |"
 echo "| Daten-CD     [d]aten als MPEG-Videodateien auf CD brennen        |"
 echo "| Video-DVD    [D]VD mit allen Dateien aus ~/.mm4dbox/mpg/*.mpg    |"
 echo "$L"
 echo "| Abbruch <Ctrl+C> erhaelt die Videofiles fuer spaeteres Brennen.  |"
 echo "$L"
 read TRANS
 case $TRANS in

 t* | T* )
    if ! type transcode 1>&2; then FEHLPROG="transcode" nopro; fi
    if ! type mplex     1>&2; then FEHLPROG="mplex"     nopro; fi
    if ! type vcdimager 1>&2; then FEHLPROG="vcdimager" nopro; fi
    echo "$L"
    echo "| Kodiere ~/.mm4dbox/mpg/"$KANALNAME"_1.mpg nach mpeg2(svcd)."
    echo "| Das kann aber dauern. Brenne dann die videocd.bin als SVCD.      |"
    echo "| Bitte lege schon mal eine leere CD in den Brenner ein.           |"
    echo "$L"
    transcode -a 0 -x mpeg2 -i mpg/"$KANALNAME"_1.mpg -w 1724 -F 5,' -B 129' --export_asr 2 -b 128 --a52_drc_off -V -f 25 -Z 480x576 -y mpeg2enc,mp2enc -E 44100 -o ./mpg/test
    cd mpg
    if dir test.m2v; then rm "$KANALNAME"_1.mpg; fi
    mplex -f 4 -V -o test.mpeg test.m2v test.mpa
    rm test.m2v; rm test.mpa
    vcdimager -t svcd -b videocd.bin --broken-svcd-mode test.mpeg
    rm test.mpeg
    cd ~/.mm4dbox
    brenn-svcd;;

 b* | B* )
    CDVERZ="mpg"
    if ! type vcdxgen   1>&2; then FEHLPROG="vcdxgen"    nopro; fi
    if ! type vcdxbuild 1>&2; then FEHLPROG="vcdxbuild"  nopro; fi
    echo "$L"
    echo "| Erzeuge nun ueber vcdxgen die videocd.xml Datei u. mit vcdxbuild |"
    echo "| die videocd.bin und .cue Datei (fuer das cdrdao-Brennprogramm)   |"

    #-------------------Abfrage der ges. Dateigroesse im mpg-Verz.
    let MEDIA2=MEDIA*1024
    set `du mpg`
    if [ $1 -gt $MEDIA2 ]
    # 650MB -> 665600, 700MB -> 716800 usw. ]
    then
	mpg2svcd-dir
    else
	set `du -h mpg`
	echo "$L"
	echo "| Die" $1 "Videodaten in ~/.mm4dbox/mpg/ passen auf eine CD"
    fi
    #-------------------ENDE Abfrage der ges. Dateigroesse im mpg-Verz.
    echo "$L"
    echo "| Ein Abbruch = <Ctrl+C> erhaelt den Videotrack um nach weiteren   |"
    echo "| Aufnahmen die gesammelten Tracks zu brennen. Brennen = <RETURN>  |"
    echo "$L"
    read
    clear

    frage-cdverz
    echo "$L"
    echo "| Erzeugt ueber vcdxgen eine videocd.xml mit allen mpg-Dateien     |"
    echo "$L"
    vcdxgen -t hqvcd --broken-svcd-mode ~/.mm4dbox/$CDVERZ/*.mpg -o ~/.mm4dbox/mpg/videocd.xml 2>&1
    echo "$L"
    echo "| Erzeuge aus videocd.xml eine videocd.bin u. cue Datei            |"
    echo "$L"
    vcdxbuild --gui ~/.mm4dbox/mpg/videocd.xml -c mpg/videocd.cue -b ~/.mm4dbox/mpg/videocd.bin 2>&1
    brenn-svcd;;

 d* )
    clear
    #-------------------Abfrage der ges. Dateigroesse im mpg-Verz.
    let MEDIA2=MEDIA*1024
    set `du mpg`
    if [ $1 -gt $MEDIA2 ]
    # 650MB -> 665600, 700MB -> 716800 usw. ]
    then
	mpg2svcd-dir
    else
	set `du -h mpg`
	echo "$L"
	echo "| Die" $1 "Videodaten in ~/.mm4dbox/mpg/ passen auf eine CD"
    fi
    #-------------------ENDE Abfrage der ges. Dateigroesse im mpg-Verz.
    echo "$L"
    echo "| Ein Abbruch = <Ctrl+C> erhaelt die Videofiles, um nach weiteren  |"
    echo "| Aufnahmen die gesammelten Dateien zu brennen. Brennen = <RETURN> |"
    echo "$L"
    read
    if ! type cdrecord 1>&2; then FEHLPROG="cdrecord" nopro; fi

    frage-cdverz

    echo "$L"
    echo "| Soll [d]irekt auf CD-gebrannt werden, oder                       |"
    echo "| soll [g]eloescht und anschliessend gebrannt werden (bei CD-RWs). |"
    echo "| Nur  [l]oeschen der CD-RW.                                       |"
    echo "$L"
    read DGL
    echo "$L"
    echo "| Das Device wird auto. ueber cdrdao scanbus ermittelt!            |"
    echo "$L"
    find-dev

    case $DGL in
    d*|D*)
     mkisofs -f -J -cache-inodes ~/.mm4dbox/$CDVERZ/*.mpg | cdrecord dev=$BDEV2 -
     #echo "der brennvorgang ist fix und fertig" | sag_was
     ;;
    g*|G*)
     mkisofs -f -J -cache-inodes  ~/.mm4dbox/$CDVERZ/*.mpg | cdrecord dev=$BDEV2 -force -eject blank=fast -
     #echo "der brennvorgang ist fix und fertig" | sag_was
     ;;
    l*|L*)
     cdrecord -v dev=$BDEV2 -force -eject blank=fast
     #echo "der brennvorgang ist fix und fertig" | sag_was
     ;;
    * )
     echo "| Falscheingabe                                                    |"
     echo "$L"
     exit 1;;
     esac
     ;;
 D* )
   make-dvd    
   exit 1;;
 * )
   echo "| Falscheingabe                                                    |"
   echo "$L"
   exit 1;;
 esac
#--------------Standardende
 eject $BDEV1
 echo "$L"
 echo "| Loeschen der Dateien in ~/.mm4dbox/mpg/ OK=<RET> Abbruch=<CTRL+C>|"
 echo "$L"
 read
 rm ~/.mm4dbox/mpg/* 1>&2
 exit
}

function mpg2svcd-dir()
{
 #------------------------- Verteilung der Videodaten in die vcd.Unterverzeichnisse
 set `du -h mpg`
 echo "$L"
 echo "| Die" $1 "Videodaten in ~/.mm4dbox/mpg/ passen nicht auf 1*CD"
 echo "| Lege die mpg-Dateien in einzelne ~/.mm4dbox/mpg.x/ Verz. ab!     |"

 cd mpg
 DIREXT=1
 let CDSIZE=$MEDIA*1024*1024
 echo "| Die exakte CDSIZE ist -> " $CDSIZE " Bytes"
 for ii in `ls -trw1 *.mpg`
 do
  [ -d "../mpg.$DIREXT" ] || mkdir "../mpg.$DIREXT"
  mv "$ii" "../mpg.$DIREXT/"
  if [ `du -b "../mpg.$DIREXT" | awk '{ print $1 }' ` -gt $CDSIZE ]
  then
   OLD="../mpg.$DIREXT"; let DIREXT=DIREXT+1; mkdir "../mpg.$DIREXT"
   mv "$OLD/$ii" "../mpg.$DIREXT/"
  fi
  echo "| Verschiebe Videodatei $ii"
 done
 cd ~/.mm4dbox/
}

function frage-cdverz()
{
 CDVERZ="mpg"
 if [ -d mpg.1 ]
 then
  ls mpg*
  echo "$L"
  echo "| Es existieren bereits mpg.[n] Verzeichnisse mit mpg-Dateien.     |"
  echo "| Welches mpg.[n] Verzeichnis soll verwendet werden.               |"
  echo "$L"
  read CDVERZ
  CDVERZ="mpg."$CDVERZ
  echo "$L"
  echo "| Verwende ~/.mm4dbox/"$CDVERZ" als Verzeichniss der mpg-Dateien.     |"
  echo "$L"
 fi
}

function brenn-svcd()
{
 echo "$L"
 echo "| Das Device wird auto. ueber cdrdao scanbus ermittelt.            |"
 echo "| Brenne ueber cdrdao write videocd.cue die Video-CD   --> <RETURN>|"
 echo "$L"
 read
 find-dev
 cdrdao write --device $BDEV2 ~/.mm4dbox/mpg/videocd.cue 2>&1
 echo "$L"
 echo "| Brennvorgang beendet. Starte Wiedergabe der CD.                  |"
 echo "$L"
 if type mplayer 1>&2
 then
  gmplayer vcd://1 $MPOPT -cdrom-device $BDEV1 1>&2
 else
  xine vcd://1
 fi
 eject $BDEV1
 echo "$L"
 echo "| Loeschen der Dateien in ~/.mm4dbox/mpg/ OK=<RET> Abbruch=<CTRL+C>|"
 echo "$L"
 read
 rm ~/.mm4dbox/mpg/* 1>&2
 exit
}
function find-dev()
{
#-------------DVD-Ermittlung fuer growisofs ----------------------------------
 if ! type scsiinfo 1>&2; then FEHLPROG="scsiinfo" nopro; fi
 BDEV=`scsiinfo -l | tr " " "\n" | grep scd | tr "\n" " " `
 if [ $BDEV -eq `\n`  ] 
 then
  echo "$L"
  echo "| scsiinfo -l hat leider keine DVD fuer growisofs gefunden.        |"
  BDEV1="/dev/dvd"
  echo "| Verwende $BDEV1 als Default-Wert.                              |"
  echo "$L"
 else
  set $BDEV
  if [ $# -gt "1" ]
  then
   echo "$L"
   echo "| Mehrere CDs gefunden. Verwende "$1" (nicht "$2")"
   echo "$L"
  fi
  BDEV1=`echo $1 | cut -f1 -d " "`
  echo "$L"
  echo "| Brennerdevice fuer growisofs ist --> "$BDEV1
  echo "$L"
 fi
#-------------Drivesuche fuer cdrecord u. cdrdao -------------------------
 if ! type cdrdao 1>&2; then FEHLPROG="cdrdao" nopro; fi
 exec 2>&1
 BDEV=`cdrdao scanbus 2>&1 | grep ',' | cut -d: -f2`
 if [ "$BDEV" != "" ]
 then
  echo "$L"
  echo "| cdrdao scanbus hat Kein CD-LW (fuer cdrecord) gefunden.          |"
  BDEV2="1,0,0"
  echo "| Verwende $BDEV2 als Default-Wert.                                 |"
  echo "$L"
 else
  set $BDEV
  BDEV2=$1
  if [ $# -gt "1" ]
  then
   echo "$L"
   echo "| Mehrere CD-LW gefunden. Welches soll ich verwenden?              |"
   echo "| Fuer "$1" <1> und fuer "$2" bitte <2> waehlen."
   echo "$L"
   read BDEV
   eval BDEV2=`echo \\$$BDEV`      
  fi
  echo "$L"
  echo "| Brennerdevice fuer cdrecord ist  --> "$BDEV2
  echo "$L"
 fi
 exec 2>&5
}
function make-dvd()
{
 clear
 if ! type dvdauthor 1>&2; then FEHLPROG="dvdauthor" nopro; fi
 if ! type mkisofs   1>&2; then FEHLPROG="mkisofs"   nopro; fi
 if ! type growisofs 1>&2; then FEHLPROG="growisofs von dvd+rw-tools" nopro; fi
 echo "$L"
 echo "| ~/.mm4dbox/*a0 v0     Video-DVD erzeugen  [M] ?   (udrec&sserver)|"
 echo "| ~/.mm4dbox/mpg/*.mpg  Video-DVD erzeugen  [V] ?   (ggrab&sserver)|"
 echo "| ~/.mm4dbox/mpg/*.mpg  Datei(en) an DVD+RW [A] anhaengen ?        |"
 echo "$L"
 read TRANS
 case $TRANS in

 m* | M* )
    if ! type mkdvd 1>&2; then FEHLPROG="mkdvd aus der udrec_suite" nopro; fi
    #---mkdvd benoetigt -f [den gemeinsamen Teil des *.v0, *.a0 Dateinamens] und ein ./dvd/001/VIDEO_TS Verz.
    rename .001.0 .v0 *.001.0
    rename .001.1 .a0 *.001.1
    DATEI=`ls *.v0 | cut -d. -f1`
    echo "| mkdvd -f ./"$DATEI
    echo "$L"
    mkdvd -f ./$DATEI
    gmplayer ~/.mm4dbox/dvd/VIDEO_TS/VTS_01_1.VOB 2>&1
    echo "$L"
    echo "| Test der ~/.mm4dbox/dvd/VIDEO_TS/VTS_01_1.VOB Datei per gmplayer |"
    echo "| Abbruch <Ctrl+C> , DVD-Imageerzeugung <RETURN>                   |"
    echo "$L"
    read
    echo "| starte: mkisofs -dvd-video -o video-dvd.iso -r ./dvd             |"
    mkisofs -dvd-video -o video-dvd.iso -r ./dvd 2>&1
    echo "$L"
    echo "| Erzeuge nun mit growisofs -Z /dev/...=...         das DVD-Image  |"
    echo "| Das Device wird auto. ueber den eingelegten DVD-Rohling ermittelt|"
    echo "$L"
    echo "| Der erzeugte Track kann gesammelt oder direkt gebrannt werden!   |"
    echo "| Ein Abbruch <Ctrl+C> erhaelt den DVD-Track um erst mit weiteren  |"
    echo "| Aufnahmen gebrannt zu werden.     <RETURN> = jetzt_BRENNEN       |"
    echo "$L"
    read
    find-dev
    echo "| starte: growisofs -Z "$BDEV1"=video-dvd.iso"
    growisofs -Z $BDEV1=video-dvd.iso 2>&1

    if type mplayer 1>&2
    then
     gmplayer dvd://1 $MPOPT -dvd-device $BDEV1 1>&2
    else
     xine dvd://1
    fi

    eject $BDEV1
    echo "$L"
    echo "| Sollen folgende Dateien geloescht werden?                        |"
    echo "| ~/.mm4dbox/*.v0 a0                                               |"
    echo "| ~/.mm4dbox/dvd/*/VIDEO_TS/*                                      |"
    echo "| ~/.mm4dbox/video-dvd.iso               OK=<RET> Abbruch=<CTRL+C> |"
    echo "$L"
    read
    rm ~/.mm4dbox/*.v0 1>&2;rm ~/.mm4dbox/*.a0 1>&2
    rm ./dvd/*/VIDEO_TS/*
    rm video-dvd.iso
    exit;;

 v* | V* )
    echo "$L"
    echo "| >>>>>>>  Kodierung nach mpeg2(DVD) mit DVD-Erzeugung <<<<<<<<<<< |"
    echo "| replex wandelt ~/.mm4dbox/mpg/*.mpg Dateien in DVD-konforme *.mpeg|"
    echo "$L"
    echo "| Liegen in ~/.mm4dbox/mpg/test*.mpeg Dateien (keine *.mpg Dateien)|"
    echo "| so werden diese ohne Remux in die DVD aufgenommen z.B. vamps-Dat.|"
    echo "$L"
    if ! type replex 1>&2; then FEHLPROG="replex"    nopro; fi
    DIREXT=1
    cd mpg
    for ii in `ls -trw1 *.mpg`
    do
      echo "| remultiplexe Videodatei $ii --> test$DIREXT.mpeg"
      replex -t DVD "$ii" > test$DIREXT.mpeg
      let DIREXT=DIREXT+1
    done
#---------------Hier ist der Einsprungpunkt zum Brennewn von als ~/.mm4dbox/mpg/test*.mpeg abgelegte vamps-Dateien 
    cd ~/.mm4dbox/
    echo "$L"
    echo "| Erzeuge nun mit dvdauthor die VOB-Dateien in ./dvd/VIDEO_TS/     |"
    echo "$L"
#   dvdauthor -o ./dvd/ ./mpg/test*.mpeg 2>&1
    dvdauthor -o ./dvd/ -t ./mpg/test*.mpeg 2>&1
    echo "$L"
    echo "| Erzeuge nun mit dvdauthor das DVD-Filesystem                     |"
    dvdauthor -T -o ./dvd/ 2>&1
    echo "$L"
    echo "| Erzeuge nun mit growisofs -Z /dev/...=...         das DVD-Image  |"
    echo "| Das Device wird auto. ueber den eingelegten DVD-Rohling ermittelt|"
    echo "$L"
    echo "| Der erzeugte Track kann gesammelt oder direkt gebrannt werden!   |"
    echo "| Ein Abbruch <Ctrl+C> erhaelt den DVD-Track um erst mit weiteren  |"
    echo "| Aufnahmen gebrannt zu werden.     <RETURN> = jetzt_BRENNEN       |"
    echo "$L"
    read
    find-dev
    echo "| starte: mkisofs -dvd-video -o video-dvd.iso -r ./dvd             |"
    mkisofs -dvd-video -o video-dvd.iso -r ./dvd 2>&1
    echo "| starte: growisofs -Z "$BDEV1"=video-dvd.iso"
    growisofs -Z $BDEV1=video-dvd.iso 2>&1

    if type mplayer 1>&2
    then
     gmplayer dvd:// $MPOPT -dvd-device $BDEV1 1>&2
    else
     xine dvd://1
    fi

    eject $BDEV1
    echo "$L"
    echo "| Sollen folgende Dateien geloescht werden?                        |"
    echo "| ~/.mm4dbox/mpg/*.mpeg                                            |"
    echo "| ~/.mm4dbox/dvd/VIDEO_TS/*                                        |"
    echo "| ~/.mm4dbox/video-dvd.iso               OK=<RET> Abbruch=<CTRL+C> |"
    echo "$L"
    read
    rm ~/.mm4dbox/mpg/*.mpeg 1>&2
    rm ./dvd/VIDEO_TS/* 1>&2
    rm video-dvd.iso 1>&2
    exit;;
 a* | A* )
    echo "$L"
    echo "| Das Device wird auto. ueber den eingelegten DVD-Rohling ermittelt|"
    echo "$L"
    find-dev
    echo "| starte: growisofs -M "$BDEV1" -R -J ~/.mm4dbox/mpg/*.mpg"
    echo "$L"
                    growisofs -M  $BDEV1  -R -J ~/.mm4dbox/mpg/*.mpg 2>&1

    mount $BDEV1 /mnt
    sleep 5
    if type mplayer 1>&2
    then
     gmplayer /mnt/*.mpg 1>&2
    else
     xine /mnt/*.mpg
    fi
    umount $BDEV1
    
    eject $BDEV1
    echo "$L"
    echo "| Sollen die ~/.mm4dbox/mpg/*.mpg Dateien geloescht werden?        |"
    echo "$L"
    echo "|                                 OK=<RET> Abbruch=<CTRL+C>        |"
    echo "$L"
    read
    rm ~/.mm4dbox/mpg/*.mpg 1>&2
    exit;;

 *) echo "| Falscheingabe                                                    |"
    echo "$L"
    mm4dbox -brenn
    exit;;
 esac
}
function help()
{
$DIALOG --no-collapse --infobox "$L2
| mm4dbox Version 0.301(alpha) von MeMue und KHW (27.August.2011)        |
| Aufruf:   mm4dbox [-stop][-tv|-radio|-epg][-Aktion][Sendername]        |
$L2
| mm4dbox ____        -> TV-Sender- und Aktions-Auswahl per Menue        |
| mm4dbox -r Pro7     -> Umschaltung nach PRO7 und Aufnahme              |
| mm4dbox -D Pro7     -> Umsch. PRO7, nach Abbruch DVD-Erzeugung         |
| mm4dbox -stop -o -P -> Playback stop, keine Umschaltung und Play       |
| mm4dbox -o -d       -> ohne Umschaltung,  Dbox-Zeit -> PC-Zeit         |
| mm4dbox -epg schau  -> Sucht in den EPG-Daten z.B. Tagesschau          |
| mm4dbox -radio hit  -> schaltet auf Radio, sucht *hit* Sender          |
| mm4dbox -epg        -> ElectronicProgramGuide Uebersicht               |
| mm4dbox -stop -tv -epg -p Wett -> Playback-off, von RADIO nach TV,     |
|                      im EPG nach *Wett* suchen, Wiedergabe per gmplayer|
| mm4dbox -tvcard    -> Menue fuer analoge TV-Karten (mit BT8xx-Chip)    |
| mm4dbox -brenn     -> Menue zur VCD/DVD-Erzeugung aus ~/.mm4dbox/mpg/* |
$L2
| Bei Umlautproblemen /etc/sysconfig/language RC_LANG=de_DE.ISO-8859-1   |
| Bei allg. Problemen: zunaechst alle ~/.mm4dbox/* Dateien loeschen      |
| und folgende Programme auf Verfuegbarkeit testen:                      |
| ggrab, GET, wget, (g)mplayer o. xine und dialog                        |
| optional:replex,xmms,lame,transcode,vcdimager,cdrdao,dvdauthor,Xdialog |
$L2
| Mplayerprobleme: mplayer z.B. ohne --enable-gui compiliert?            |
| - Deinterlacing bei MPOPT= -vf pp=0x20000 testweise entfernt?          |
| - mplayer-Cache fuer Streaming zu gross?                               |
| - Defaulteinstellungen durch mv ~/.mplayer ~/.mplayer-bak?             |
| - mplayer.conf ohne gui=yes und mit vo=xv o. gl fuer [-p]lay Funktion  |
$L2
| Nach ggrab Download das Programm ggrab mit [make] neu compilieren.     |
| Bei Kanalaenderungen die channellist-Datei in ~/mm4dbox loeschen.      |
| Lange channellist-Dateien scrollen sehr langsam (eventuell kuerzen).   |
| Die Errorausgaben der aufgerufenen Prog. sind in ~/.mm4mbox/error      |
| und koennen mit [tail -f error] aktuell ausgegeben werden.             |
$L2
|                           T A S T E                                    |
$L2" 41 80              
read
$DIALOG --no-collapse --infobox "$L2
| Bei Fragen Anregungen usw. -->  Mail an dbox2 at Muehlenjost.com       |
$L2
| mm4dbox comes with ABSOLUTELY NO WARRANTY; This is free software,      |
| and you are welcome to redistribute it under the conditions of         |
| the GNU Public License, see www.gnu.org                                |
$L2
|                           T A S T E                                    |
$L2" 41 80              
read



 exit 0
}
function prginfo()
{
get -d http://dbox/control/epg > ~/.mm4dbox/deletemy 
if cat ~/.mm4dbox/deletemy | grep $SELECT 1>&2
then
 set `cat ~/.mm4dbox/deletemy | grep $SELECT`
 get -d http://dbox/control/epg?eventid=$2 > ~/.mm4dbox/prginfo.txt 
 PRGINFO="Folgende Infos in der Datei ~/.mm4dbox/prginfo.txt speichern?\n\n"$(cat ~/.mm4dbox/prginfo.txt)
 $DIALOG --yesno "$PRGINFO" 20 80
 clear
 if [ "$?" = "0" ]
 then
  echo "| Speichere Sendungsinfos zur ID:" $2 " in ~/.mm4dbox/prginfo.txt"
 else
  rm ~/.mm4dbox/prginfo.txt
 fi
else
 echo "| Keine Sendungsinfos zur ID:" $2 " gefungen!"
fi
rm ~/.mm4dbox/deletemy
}

function nopro()
{
 echo "| Leider fehlt das benoetigte Programm $FEHLPROG (Bis dann!)"
 echo "$L"
 exit 1
}

function get()
{
if ! type GET 1>&2
then
 if [ $1 == '-d' ]; then shift; fi
 set ` echo $1| sed 's|http://\(.*\)|\1|;s|/| /|'`
 exec 5<>/dev/tcp/$1/80
 echo -e "GET $2 HTTP/1.0\n" >&5
 cat <&5 | tr -d '\r' | sed '1,/^$/d'
else
 GET $*
fi
}

function startss()
{
 if ! type sserver 1>&2; then FEHLPROG="sserver (bei ggrab)" nopro; fi
 echo "| Starte /usr/local/bin/sserver (Aufnahme ueber Fernbedienung)     |"
 echo "| Die Wiedergabe der ~/.mm4dbox/mpg/*.mpg ist ueber VLC moeglich   |"
 echo "$L"
 exec 2>&1
 #------------Folgezeile startet den sserver (Vers-0.03 im PATH ?) 
 sserver -udp -o ~/.mm4dbox/mpg -e mpg -s $MEDIA &
 #------------ die 3 Folgezeilen starten versuchsweise vlc (sserver von udrec_suite) 
 #------------ "address already in use" zeigt, dass sserver 0.03 schon aktiv ist 
# cd /usr/bin
# ./sserver -o ~/.mm4dbox &
# cd ~/.mm4dbox
 echo "$L"
#echo "| Start:/usr/bin/vlc -I http --http-src=/usr/share/udrec_suite/http|"
 echo "| Start:/usr/bin/vlc -I http --http-src=/usr/share/vlc/http        |"

 if [ $(whoami) = "root" ]
 then
  echo "| Starte vlc mit Userrechten von ftp (Bitte im Quelltext anpassen! |"
# su ftp -c "/usr/bin/vlc -I http --http-src=/usr/share/udrec_suite/http &"
  su ftp -c "/usr/bin/vlc -I http --http-src=/usr/share/vlc/http &"
 else
# /usr/bin/vlc -I http --http-src=/usr/share/udrec_suite/http &
  /usr/bin/vlc -I http --http-src=/usr/share/vlc/http &
 fi
 echo "$L"
}

function startsspes()
{
 if ! type sserver 1>&2; then FEHLPROG="sserver (bei ggrab)" nopro; fi
 echo "$L"
 echo "| Starte sserver (Aufnahme ueber Fernbedienung)                    |"
 echo "| Die Audio u. Videodaten werden nicht multiplext (sserver -pes ..)|"
 exec 2>&1
 sserver -udp -pes -o ~/.mm4dbox/mpg -e mpg -s $MEDIA &
 echo "$L"
}

function prgstart()
{
clear
 echo "$L"
 echo "| mm4dbox Version 0.213(alpha) von MeMue und KHW (09.Okt.2007)     |"
 echo "| Aufruf:   mm4dbox [-stop][-tv|-radio|-epg][-Aktion][Sendername]  |"
 echo "| Beispiel: mm4dbox Pro7 -r | Erste -p | zdf -s | -o -P | -TV -EPG |"
 echo "|                                         (-o) -> ohne Umschaltung |"
 echo "$L"
#################### ~/.mm4dbox/ Grundeinstellung #########################
 mkdir ~/.mm4dbox
 mkdir ~/.mm4dbox/dvd
 mkdir ~/.mm4dbox/dvd/VIDEO_TS
 ln -s ~/.mm4dbox/dvd ~/.mm4dbox/dvd/001
 mkdir ~/.mm4dbox/mpg
 cd ~/.mm4dbox
#################### Erzeugen der benoetigten Dateien ####################
 echo "
p play_________________(direkt dbox -> mplayer ohne GUI)
P Play_________________(mit 2*250MB-Dateien -> gmplayer)
x Play-AC3_____________(wie Play aber testweise Audio-PID+1)
T Timeshift Rec&Play___(Speicherung in REC_*.mpg Dateien)
r Aufnahme_____________(dbox -> ~/.mm4dbox/mpg/Kanalname_*.mpg)
R Aufnahme_____________(dbox -> Kanalname_*.mpg -> Video-CD/DVD)
n NoMultiplex__________(dbox -> Audio/Video getrennt)
b Brennen______________(~/.mm4dbox/mpg/*.mpg -> SVCD/DVD brennen)
C Code2DivX____________(Echtzeitkodierung nach Divx)
a audiowiedergabe______(dbox -> xmms)
A Audio Rec&Play_______(*.mp2-Datei -> xmms)
v videoaufnahme________(*.mpg ohne Ton mit wget)
V Video Rec&Play_______(*.mpg ohne Ton mit wget -> gmplayer)
U Kanal-Umschaltung____(Kanal-Liste mit Browser)
s Streamingserver______(sserver am Port 4000 u. vlc starten)
S Streamingserver______(sserver speichert Audio/Video getrennt)
d dbox to Systemtime___(setzt die Systemuhr auf Dboxzeit)
" > ~/.mm4dbox/aktionen

#################### Erzeugen der kanal Datei ###########################
if [ ! -f ~/.mm4dbox/kanal ]
then
 echo "
00  Abbruch____Programmende
01  Wiedergabe_~/.mm4dbox/tv.avi
99  Aufnahme___~/.mm4dbox/tv.avi
E11 ARD
33  ZDF
46  WDR3
38  SAT1
59  RTL
36  VOX
35  zB_Videorecorder
xx  erweitere_~/.mm4dbox/kanal
" > ~/.mm4dbox/kanal
fi

#################### dbox Netzwerk u. Programmtest ########################
if ping -c 1 dbox 1>&2
then
 echo "| Die dbox ist online!                                             |"
else
 echo "| Die dbox ist offline (ein ping dbox scheiterte)!                 |"
 if ! grep dbox /etc/hosts 1>&2
  then
  echo "| In der Datei /etc/hosts fehlt die IP-Adr. der dbox!              |"
 fi
 echo "$L"
 sleep 5
# exit 1
fi
#################### Abfrage der benoetigten Programme #####################
if ! type mplayer 1>&2 && ! type xine     1>&2; then FEHLPROG="mplayer o. xine"      nopro; fi
if   type mplayer 1>&2 && ! type gmplayer 1>&2; then FEHLPROG="mplayer mit gmplayer" nopro; fi
if ! type ggrab   1>&2;                         then FEHLPROG="ggrab"                nopro; fi

}

function kanalumsch()
{
#################### KanalnamenErmittlung ################################
if [ $UMSCH != "off" ]
then
 ANZAHL_CHANNEL=`grep -ci "$PROPARAM" "$DATEI"`
 LIST=`grep -i "$PROPARAM" "$DATEI" | sed 's|"| |g' | sed 's|^\([0-9a-f]*\) \(.*\)$|"\2" "\1"|'`

 if [ "$ANZAHL_CHANNEL" -gt "1" ]
 then
  eval $DIALOG --menu Programm-AUSWAHL 25 80 18 $LIST 2> ~/.mm4dbox/SELECT.TXT || break ;
  KANALNAME=`cat ~/.mm4dbox/SELECT.TXT`
 else
  KANALNAME=`echo $LIST | cut -d" " -f1`
 fi
 rm ~/.mm4dbox/SELECT.TXT
 killall gmplayer mplayer mencoder ggrab wget xine 1>&2
##################### Hier wird der Kanalname zur zapto-ID ermittelt #####
 SENID=`grep "$KANALNAME" $DATEI | sed -n '1p' |cut -d" " -f1`
##################### Anzeige der ermittelten Werte #######################
 clear
 echo "$L"
 echo "| Die zapto-id des Senders ist $SENID"
 echo "| Der Kanalname ist $KANALNAME"
 echo "$L"
##################### Kanalumschaltung (wenn erforderlich) ################
 echo -n "| Die Box wird mit zapto=$SENID auf $KANALNAME umgeschaltet"
 echo ""
 get -d http://dbox/control/zapto?$SENID 1>&2
fi
UMSCH="on"
}

function aktionsausf()
{
##################### Aktion ausfuehren ###################################
case $AKTION in
-p* )
 get http://dbox/control/message?popup=Nicht%20umschalten%20mm4dbox-Aufnahme 1>&2
 echo "| Beenden der Fullscreen-Darstellung mit <f>                       |"
 if type mplayer 1>&2
 then
  echo  "START: nice -n $NICE ggrab -udp -b 20 -q -p $vpid $apid -o - | mplayer $MPOPT - 1>&2 &"
  nice -n $NICE ggrab -udp -b 20 -q -p $vpid $apid -o - | mplayer $MPOPT - 1>&2 &
 else
  nice -n $NICE ggrab -udp -b 20 -q -p $vpid $apid -o - | xine -pf -D stdin:/ 1>&2 &
 fi
 ;;

-x* | -X* )
 get http://dbox/control/message?popup=Nicht%20umschalten%20mm4dbox-Aufnahme 1>&2
 rm ~/.mm4dbox/REC_*.mpg 
 echo "| Loesche vorhandene ~/.mm4dbox/REC_*.mpg Dateien                  |"
 nice -n $NICE ggrab -udp -e mpg  -b 20 -q -s 250 -loop -p $vpid $ac3pid -o ~/.mm4dbox/REC_ 1>&2 &
 sleep 7;
 if type mplayer 1>&2
 then
  eval gmplayer $MPOPT REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg 1>&2 &
 else
  eval xine -pf REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg 1>&2 &
 fi
 ;;

-P* )
 get http://dbox/control/message?popup=Nicht%20umschalten%20mm4dbox-Aufnahme 1>&2
 rm ~/.mm4dbox/REC_*.mpg 
 echo "| Loesche vorhandene ~/.mm4dbox/REC_*.mpg Dateien                  |"
 nice -n $NICE ggrab -udp -e mpg  -b 20 -q -s 250 -loop -p $vpid $apid -o ~/.mm4dbox/REC_ 1>&2 &
 sleep 7;
 if type mplayer 1>&2
 then
  eval gmplayer $MPOPT REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg 1>&2 &
 else
  eval xine -pf REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg REC_1.mpg REC_2.mpg  1>&2 &
 fi
 ;;

-t* | -T* )
 get http://dbox/control/message?popup=Nicht%20umschalten%20mm4dbox-Aufnahme 1>&2
 rm ~/.mm4dbox/REC_*.mpg 
 echo "| Loesche vorhandene ~/.mm4dbox/REC_*.mpg Dateien                  |"
 nice -n $NICE ggrab -udp -e mpg -b 20 -q -s $MEDIA -p $vpid $apid -o ~/.mm4dbox/REC_ 1>&2 &
 sleep 7;
 if type mplayer 1>&2
 then
  eval gmplayer $MPOPT REC_1.mpg REC_2.mpg REC_3.mpg REC_4.mpg REC_5.mpg REC_6.mpg REC_7.mpg REC_8.mpg 1>&2 &
 else
  eval xine -pf REC_1.mpg REC_2.mpg REC_3.mpg REC_4.mpg REC_5.mpg REC_6.mpg REC_7.mpg REC_8.mpg 1>&2 &
 fi
 ;;

-v* )
 if ! type wget 1>&2; then FEHLPROG="wget" nopro; fi
 nice -n $NICE wget -O "$KANALNAME.mpg" http://dbox:31338/$vpid &
 killes ;;

-V* )
 if ! type wget 1>&2; then FEHLPROG="wget" nopro; fi
 if type mplayer 1>&2
 then
  (sleep 5; eval gmplayer ~/.mm4dbox/"$KANALNAME".mpg -slave $MPOPT 1>&2) &
 else
  (sleep 5; eval xine -pf ~/.mm4dbox/"$KANALNAME".mpg 1>&2) &
 fi
 nice -n $NICE wget -O "$KANALNAME.mpg" http://dbox:31338/$vpid &
 killes ;;

-a* )
 echo "| Starte xmms zur direkten Wiedergabe (aus der dbox)               |"
 if ! type xmms 1>&2; then FEHLPROG="xmms" nopro; fi
 nice -n $NICE xmms http://dbox:31338/$apid &
 ;;

-A* )
 get http://dbox/control/message?popup=Nicht%20umschalten%20mm4dbox-Aufnahme 1>&2
 echo "| Audioaufnahme (MP2) nach ~/.mm4dbox/"$KANALNAME".mp2"
 echo "$L"
 rm "$KANALNAME"_s0_p0.mp2 
 rm "$KANALNAME"_s1_p0.mp2 
 nice -n $NICE ggrab -udp -pes -e mp2 -b 200 -q -p $vpid $apid -o ~/.mm4dbox/"$KANALNAME"_ &
 (sleep 8; xmms "$KANALNAME"_s1_p0.mp2 1>&2) &
 (sleep 11; rm "$KANALNAME"_s0_p0.mp2 1>&2)
 echo "| Ende und Konvertierung mp2->3 von "$KANALNAME".mp2 nach <RETURN>"
 echo "$L"
 read
 echo "| Konvertiere mp2->3 (Bitte auf ENDE-Meldung warten).              |"
 echo "$L"
 killall -9 ggrab 1>&2
 if ! type lame 1>&2; then FEHLPROG="lame" nopro; fi
 lame "$KANALNAME"_s1_p0.mp2 1>&2
 echo "|         <<<<<<<<<<<<<< ENDE-Meldung >>>>>>>>>>>>>>               |"
 killes ;;

-r* )
 echo "| Lege die Aufnahmedateien nach ~/.mm4dbox/mpg/"$KANALNAME"_x.mpg"
 get http://dbox/control/message?popup=Nicht%20umschalten%20mm4dbox-Aufnahme 1>&2
 nice -n $NICE ggrab -udp -e mpg -b 20 -q -s $MEDIA -p $vpid $apid -o ~/.mm4dbox/mpg/"$KANALNAME"_ &
 #              grab -nomux -b 20 -q -s $MEDIA -p $vpid $apid -o ~/.mm4dbox/"$KANALNAME"_ &

 echo "$L"
 echo "| Starte ggrab-Fehlerueberwachung (Neustart bei Fehler)            |"
 echo "$L"
 while true
 do
  if tail ~/.mm4dbox/error | grep timeout
  then
#    echo "Aufnahmeabbruch" | sag_was &
    nice -n $NICE ggrab -udp -e mpg -b 20 -q -s $MEDIA -p $vpid $apid -o ~/.mm4dbox/mpg/"$KANALNAME"_ 
  elif tail ~/.mm4dbox/error | grep Pufferfehler
   then
#    echo "Aufnahmeabbruch" | sag_was &
    nice -n $NICE ggrab -udp -e mpg -b 20 -q -s $MEDIA -p $vpid $apid -o ~/.mm4dbox/mpg/"$KANALNAME"_ 
  fi
 sleep 2
 done

 killes ;;

-c* | -C* )
 get http://dbox/control/message?popup=Nicht%20umschalten%20mm4dbox-Aufnahme 1>&2
 if ! type mencoder 1>&2; then FEHLPROG="mencoder (vom mplayer)" nopro; fi
 echo "| Die DIVX Daten werden nach ~/.mm4dbox/REC_1.avi kodiert          |"

 #if [ dein mencoder mit divx-Option compiliert wurde ] then Tausch des OutputVideoCodec "-ovc lavc" durch "-ovc divx4" moeglich fi ;-))
 #nice -n $NICE ggrab -e mpg -b 20 -q -p $vpid $apid -o - | mencoder -v -o REC_1.avi -ovc divx4 -divx4opts br=1000 -ofps 15 -lameopts cbr:br=32:mode=3:ratio=1 -oac mp3lame -vop scale=320:240 - 1>&2 &
 #nice -n $NICE ggrab -e mpg -b 20 -q -p $vpid $apid -o - | mencoder -v -o REC_1.avi -ovc lavc  -divx4opts br=1500          -lameopts cbr:br=32:mode=3:ratio=1 -oac mp3lame - 1>&2 &
 nice  -n $NICE ggrab -udp -e mpg -b 20 -q -p $vpid $apid -o - | mencoder -v -o REC_1.avi -ovc lavc                         -lameopts cbr:br=32:mode=3:ratio=1 -oac mp3lame - 1>&2 &
 killes ;;

-u* | -U* )
 echo "| Playback bleibt eingeschaltet (es wird nur umgeschaltet)         |"
 echo "| Weiteren Kanalauswahl ueber Browser (mozilla|w3m)                |"
 echo "$L"
 if type mozilla 1>&2
 then
  mozilla http://dbox/fb/channellist.dbox2 &
 else
  w3m -no-graph http://dbox/fb/channellist.dbox2
 fi
 ;;

-n* )
 nice -n $NICE ggrab -udp -pes -p $vpid $apid -o ~/.mm4dbox/"$KANALNAME"_ &
 killes ;;

"-s"        ) startss;	exit;;
"-S"        ) startsspes;exit;;
"-d"        ) dbox2time;exit;;
 -b* | -B*  ) make-svcd;exit;;
"-R" 	    ) rec-svcd;	exit;;
"-D" 	    ) make-dvd;	exit;;
 *h	    ) help;	exit;;

* )
 echo "| Es wurde keine der erlaubten Aktionen gewaehlt!                  |"
 echo "$L"

esac
}


trap '
 echo "$L"
 echo "| Der Abbruch erfolgte ueber Strg + C (wie brutal)                 |"
 echo "$L"
 killall -9 mplayer ggrab wget gmplayer xine 1>&2
 rm ~/.mm4dbox/SELECT.TXT 1>&2
 exit 0
 ' 2

###########################################################################
########  P R O G R A M M B E G I N N   H I E R  ##########################
###########################################################################
L="+------------------------------------------------------------------+"
L2="+------------------------------------------------------------------------+"
DATEI="channellist"
UMSCH="on"
#if ! type Xdialog  1>&2; then DIALOG=dialog; else DIALOG=Xdialog ; fi
if ! type dialog   1>&2; then FEHLPROG="dialog" nopro 		 ; fi

prgstart;

while echo $1 | grep "-"
do
 case $1  in
  "-s"	  		) startss;	exit			;;
  "-S"			) startsspes;	exit			;;
  "-d"	   		) dbox2time; 	exit			;;
  -b*	   | -B* 	) make-svcd; 	exit			;;
  "-R" 			) rec-svcd;	exit			;;
  "-D" 			) make-dvd;	exit			;;
  "-help" |"--help"|"-h") help;		exit			;;
  "-tvcard"| "-TVCARD"	) while true; do tvcard; done; exit	;;
  "-stop"  | "-STOP"	) echo "| Playback off (Der Fernseher hat dann Ruhe)                       |"
			  get http://dbox/control/zapto?stopplayback 1>&2 ;;
  "-radio" | "-RADIO"	) get -d http://dbox/fb/controlpanel.dbox2?radiomode 1>&2; rm ~/.mm4dbox/channellist ;;
  "-tv"	   | "-TV"	) get -d http://dbox/fb/controlpanel.dbox2?tvmode 1>&2; rm ~/.mm4dbox/channellist ;;
  "-epg"   | "-EPG"	) get http://dbox/control/epg | cut -d" " -f1,3- > epg; DATEI="epg" ;;
  "-o"	   | "-O"	) SELECT=$(get http://dbox/control/zapto );UMSCH="off" 
                          echo "| Der aktuelle Kanal mit zapto-ID="$SELECT" bleibt eingeschaltet" ;;
  "-p"|"-P"|"-x"|"-T"|"-r"|"-R"|"-n"|"-b"|"-C"|"-a"|"-A"|"-v"|"-V"|"-U"|"-S"|"-d" ) AKTION=$1 ;;
 esac
 shift
done
PROPARAM=$1
#################### Laden der benoetigten dbox-Dateien ####################
if [ -f channellist ]
then
 echo "| Verwende die vorhandene channellist Datei!                       |"
else
 echo "| Lade eine komplette Kanalliste in die channellist Datei          |"
 echo "00000 Aktueller-Kanal" > channellist
 get http://dbox/control/channellist >> channellist 
fi
echo  "$L"
#################### Dateiauswahl channellist oder epg ####################
echo  "| Verwende als Liste die $DATEI-Datei."


while true
do
 kanalumsch;
 prginfo;
##################### Festlegen der Aktion ################################
 if [ ! "$AKTION" ]
 then
  LIST=`cat aktionen | sed 's|"| |g' | sed 's|\(^[a-zA-Z]\) \(.*\)$|\1 "\2"|'`
  eval $DIALOG --menu Funktions-AUSWAHL 25 80 18 $LIST 2> ~/.mm4dbox/SELECT.TXT ; SELECT=`cat ~/.mm4dbox/SELECT.TXT`
  clear
  AKTION="-"$SELECT
 fi

 echo "$L"
 echo "| Als Aktion wurde $AKTION gewaehlt.                                    |"
 echo "$L"
 get http://dbox/control/zapto?stopsectionsd 1>&2
##################### Prozess-Prioritaet mit | ohne nice ##################
 if [ $(whoami) = "root" ]
 then
  echo "| Verwende (mit root-Rechten) erhoehte ggrab Prioritaet            |"
  NICE="-20"
 else
  echo "| Verwende (ohne root-Rechte) ggrab nur mit Standard-Prioritaet    |"
  NICE="0"
 fi
##################### Laden der PIDS ######################################
 sleep 1
 PIDS=`get http://dbox/control/zapto?getpids` 

 if test $(echo $PIDS | wc -w) -eq 2
 then
  set $PIDS
  echo "| Die dbox liefert: vpid -> $1 apid -> $2"
  #---------ac3pid testweise auf apid+1 (bei einigen Sendern)
  let ac3pid=$2+1
  vpid="0x"`printf %0x $1`
  apid="0x"`printf %0x $2`
  ac3pid="0x"`printf %0x $ac3pid`
  echo "| PIDS in Hex     : vpid-> $vpid apid-> $apid ac3pid-> $ac3pid"
 else
  echo "| Die dbox liefert: ungueltige Programm-IDs                        |"
  echo "$L"
  exit 1
 fi
 aktionsausf;
done
killall gmplayer mplayer mencoder ggrab wget xine 1>&2
clear