#!/bin/sh
#----------------------------------------------------------------------------------------------
# wlcd v0.9 (03/2002) by hudson hawk
# dieses script dient zum leichteren ansprechen eines lcd-displays von der shell aus.
# es eignet sich auch um irgendwelche cron-jobs zu basteln um informationen
# des routers auf dem lcd darzustellen...
#
# ich bedanke mich auf diesem weg recht herzlich bei den entwicklern des fli4l,
# die mir ein neues hobby geschenkt haben :-)
#----------------------------------------------------------------------------------------------

dec2oct=001,002,003,004,005,006,007,010,011,012,013,014,015,016,017,020,021,022,023,024,025,026,027,030,031,032,033,034,035,036,037,040,041,042,043,044,045,046,047

while test $# -gt 0 ; do
    case "$1" in
        -f)  # -f </pfad/datei	#schreibe eine datei auf's display
             if [ ! -r "$2" ]; then
                 echo "Datei nicht gefunden"
             else
                 cat $2 >/dev/lcd
                 echo "Datei auf dem Display ausgegeben"
             fi
             shift 2
             ;;
        -f*) # -f</pfad/datei	#schreibe eine datei auf's display
             fname=`echo $1 |cut -b3-0`
             if [ ! -r "$fname" ]; then
                 echo "Datei nicht gefunden"
             else
                 cat $fname >/dev/lcd
                 echo "Datei auf dem Display ausgegeben"
             fi
             shift
             ;;
        -t)  # -t <'text'>      #gibt einen text auf dem display aus
             echo -n $2 >/dev/lcd
             echo "Text ins Display geschrieben"
             shift 2
             ;;
        -t*) # -t<'text'>      'gibt einen text auf dem display aus
             dtext=`echo $1 |cut -b3-0`
             echo -n $dtext >/dev/lcd
             echo "Text ins Display geschrieben"
             shift 1
             ;;
        -c)  # -c		#lscht das display
             echo -e "\033c" |tr -d "\012" >/dev/lcd
             echo "Clear Display"
             shift
             ;;
        -R)  # -R		#resetet das display
             echo -e "\033R" |tr -d "\012" >/dev/lcd
             echo "Reset Display"
             shift
             ;;
        -h)  # -h		#cursor home
             echo -e "\033h" |tr -d "\012" >/dev/lcd
             echo "Cursor home"
             shift
             ;;
        -b)  # -b		#cursor on and blinking
             echo -e "\033b" |tr -d "\012" >/dev/lcd
             echo "Cursor on and blinking"
             shift
             ;;
        -B)  # -B		#cursor on, not blinking
             echo -e "\033B" |tr -d "\012" >/dev/lcd
             echo "Cursor on, not blinking"
             shift
             ;;
        -k)  # -k		#cursor small on, not blinking
             echo -e "\033k" |tr -d "\012" >/dev/lcd
             echo "Cursor small on, not blinking"
             shift
             ;;
        -K)  # -K		#cursor off
             echo -e "\033K" |tr -d "\012" >/dev/lcd
             echo "Cursor off"
             shift
             ;;
        -g)  # -g <position>    #gibt einen text auf dem display aus
             #testen auf zahl
             col=`echo "$2" |grep [0-9]`; line=`echo "$3" |grep [0-9]`
                          
             #Spalte bearbeiten-----------------
             if [ "$col" = "" ]; then          #falls keine zahl angegeben wurde
                 echo "Es sollte schon eine Zahl als Spaltenwert angegeben werden..."
                 exit 1
             elif  [ "$col" -gt "39" ]; then   #falls grsser als 39
                 echo "Der Spaltenwert darf nicht groesser als 39 sein..."
                 exit 1                          
             elif [ "$col" = "0" ]; then       #in der umrechnungstabelle gehts erst bei 1 los
                 xcol=000
             else
                 xcol=`echo "$dec2oct" | cut -f $col -d ","`
             fi

             #Zeile umrechnen-----------------
             if [ "$line" = "" ]; then         #falls keine zahl angegeben wurde
                 echo "Es sollte schon eine Zahl als Zeilenwert angegeben werden..."
                 exit 1
             elif  [ "$line" -gt "3" ]; then   #falls grsser als 3
                 echo "Der Zeilenwert darf nicht groesser als 3 sein..."
                 exit 1                          
             elif [ "$line" = "0" ]; then      #in der umrechnungstabelle gehts erst bei 1 los
                 xline=000
             else
                 xline=`echo "$dec2oct" | cut -f $line -d ","`
             fi

             echo -e '\033g\'$xcol'\'$xline |tr -d "\012" >/dev/lcd
             echo "Cursorposition gesetzt auf Spalte $2 in Zeile $3"
             shift 3
             ;;
        --help)
            echo -e "wlcd ist ein Proggy zum steuern eines LCD-Displays....\n"
            echo "usage: wlcd <option>"
            echo ""
            echo "       -f /<pfad>/<datei>    Sendet den Inhalt einer Datei zum Display"
            echo "       -t <'text'>           Sendet Text ans Display"
            echo "       -c                    Loescht das Display"
            echo "       -R                    Resetet das Display"
            echo "       -h                    Positioniert den Cursor in der oberen linken Ecke"
            echo "       -b                    Schaltet einen grossen Cursor ein"
            echo "       -B                    Schaltet einen grossen blinkenden Cursor ein "
            echo "       -k                    Schaltet einen kleinen Cursor ein"
            echo "       -K                    Schaltet den Cursor aus"
            echo "       -g <spalte> <zeile>   Positioniert den Cursor, spalte 0-39, zeile 0-3"
            echo -e "\n"
            exit 1
            ;;
        *) 
            echo -e "\nwlcd: illegal option $1"
            echo -e "wlcd v0.9 fr alle fli4l-fan's\n"
            echo -e "type --help for a helpscreen....\n\n"
            exit 1
            ;;
    esac
done