#!/usr/bin/tcsh -f
#nthx 08.12.2000
# Skrypt majacy ulatwic obsluge pliku wydatki


set filename="/home/nthx/wydatki";#glowny plik rozliczeniowy
set bak_filename="~/.wydatki";#glowny plik rozliczeniowy (kopia zapasowa)
set alt_filename='~/mnt_c_wydatki';#alternatywny (a moze wlasnie glowny?) plik rozliczeniowy
set tmp_bc="/tmp/.tmp_bc.$$";   #plik tymczasowy na wyliczenie bilansu
set spis_html="/home/nthx/spis/html/spis_nasz.html";    #plik dla naszego spisu html 
set spis_html_filmy="/home/nthx/plytki/spis/html/spis_nasz_filmy.html"; #plik dla naszego spisu html z filmami
set windows_area="/c/users/nthx/";  #kopie plików na windows
set str_new="--new--";  #ciag oznaczajacy,  ze film jest nowy

alias usage 'echo "Usage: $0 [ help | [add|dodaj] | bilans | check | dzien | pliki | plyt[y|ki] [ a | n | t[yp] | nasze ] | [ html | html-spis | html-film[y] ]";';

#sprawdz czy istnieje plik
if ( ! -e ${filename} ) then
    echo "Plik: ${filename} nie istnieje!"
    if ( ! -e ${alt_filename} ) then
        echo "Plik: ${alt_filename} nie istnieje!";
        exit;
    else
        echo -n "Pobieram plik alternatywny: ${alt_filename} ..";
        cp ${alt_filename} ${filename}
        echo "OK";
    endif

endif

if ( "$1" == "" ) then
    set wybor="check";
else if ( "$1" == "-h" || "$1" == "--help" ) then
    set wybor="help"
else
    set wybor=$1;
endif

#odczytaj znak rozdzielajacy z pliku:
set delimiter=`grep -i '#$delimiter=' ${filename} | cut -f2 -d=`;
#echo "DeLIMITER=$delimiter"
#odczytaj date aktualizacji pliku
set date=`grep -i '^#$date=' ${filename} | cut -f2 -d=`;

#w zaleznosi od tego co chce zrobic user, to nalezy mu to dac:
switch ( ${wybor} )
case "check":
    #Sprawdz poprawnosc pliku wejsciowego
    alias syntax_error 'echo -n "Blad skladni: ${filename} -- ";';
    head -n1 ${filename} | grep -i '^#$date=' > /dev/null || ( syntax_error; echo 'Brak daty w formacie: #$date=hh.mm-dd.mm.yyyy i w pierwszej linii') && exit ;
    grep -i '^#$delimiter=' ${filename} > /dev/null || ( syntax_error; echo 'Brak delimitera w formacie: #$delimiter=x (standardowo x=:)') && exit ;

    #pole [8] -- nie moze wystepowac!
    set pole8=`grep '^[^#]' ${filename} | cut -f8 -d: | tr "\n" " " | sed -e s/\ //g`
    if ( "${pole8}" != "" ) then
        syntax_error; echo "Za duza ilosc pol w rekordzie"; exit
    endif

    #pole [1] moze zawierac tylko cyfry lub kropke lub +-
    set inne_znaki=`grep '^[^#]' ${filename} | cut -f1 -d${delimiter} | tr "\n" "0" | sed -e s/0//g -e s/1//g -e s/2//g -e s/3//g -e s/4//g -e s/5//g -e s/6//g -e s/7//g -e s/8//g -e s/9//g -e s/-//g -e s/+//g -e s/\\.//g`
    if ( "${inne_znaki}" != "" ) then
        syntax_error; echo 'W polu [1] nieprawidlowe znaki: ${inne_znaki}'; exit
    endif
    #pole [2] - tylko kilka wyrazow tu moze byc!
    set inne_slowa=`grep '^[^#]' ${filename} | cut -f2 -d${delimiter} | tr "\n" " " | sed -e s/kopia//g -e s/zaplata//g -e s/kupno_priv//g -e s/kupno_special//g -e s/kupno_plytki//g -e s/kupno//g -e s/wypozycz//g -e s/\ //g`
    if ( "${inne_slowa}" != "" ) then
        syntax_error; echo "W polu [2] nieprawidlowe slowa: ${inne_slowa}"; exit
    endif
    #pole [5] - tylko kilka wyrazow tu moze byc!
    unset inne_znaki
    set inne_znaki=`grep '^[^#]' ${filename} | cut -f5 -d${delimiter} | tr "\n" " " | sed -e s/r//g -e s/z//g -e s/a//g -e s/n//g -e s/x//g -e s/\ //g`
    if ( "${inne_znaki}" != "" ) then
        syntax_error; echo "W polu [5] nieprawidlowe znaki: ${inne_znaki}"; exit
    endif
    #pole [2]:[6] -- tylko niektore kombinacje moga wystapic!
    set inne_kombinacje=`grep -n '^[^#]' ${filename} | cut -f1,3,6 -d${delimiter} | grep -v 'kopia:x' | grep -v 'kupno:[ran]' | grep -v 'zaplata:[rz]' | grep -v 'kupno_priv:x' | grep -v 'kupno_plytki:[rna]' | grep -v 'kupno_special:[rna]' | grep -v 'wypozycz:[x]'`
    if ( "${inne_kombinacje}" != "" ) then
        syntax_error; echo "Pola [2]:[5] niepoprawne: ${inne_kombinacje}"; exit;
    endif

    echo "\nSkladnia OK";
    breaksw

case "help":
    usage;
    breaksw

case "bilans":
    #wez pod uwage tylko linie zaczynajace sie od [+-]
    #oblicz calkowity bilans
    #przygotuj plik dla 'bc'
    echo "scale=2" > ${tmp_bc}
    grep '^[+-]' ${filename} | cut -f1 -d${delimiter} | tr '\n' ' ' | sed -e s/^+//g >> ${tmp_bc};
    echo "\nquit" >> ${tmp_bc};
    echo "\nBilans na dzien ${date}:";
    bc ${tmp_bc} | tail -1
    rm -f ${tmp_bc};
    #oblicz kieszonkowy bilans dla: nas, ali, tomka
    #przygotuj plik dla 'bc'
    echo "\nBilans kieszonkowy:";
    grep '^[+-]' ${filename} | grep "${delimiter}[a]${delimiter}" | cut -f1 -d${delimiter} | tr '\n' ' ' | sed -e s/^+//g > ${tmp_bc}.a;
    grep '^[+-]' ${filename} | grep "${delimiter}[n]${delimiter}" | cut -f1 -d${delimiter} | tr '\n' ' ' | sed -e s/^+//g > ${tmp_bc}.n;
    grep '^[+-]' ${filename} | grep "${delimiter}[z]${delimiter}" | cut -f1 -d${delimiter} | tr '\n' ' ' | sed -e s/^+//g > ${tmp_bc}.z;
    grep '^[+-]' ${filename} | grep "${delimiter}[anz]${delimiter}" | cut -f1 -d${delimiter} | tr '\n' ' ' | sed -e s/^+//g > ${tmp_bc}.anz;
    echo "\nquit" >> ${tmp_bc}.a;
    echo "\nquit" >> ${tmp_bc}.n;
    echo "\nquit" >> ${tmp_bc}.z;
    echo "\nquit" >> ${tmp_bc}.anz;
    echo -n "Dla Alicji: " ; bc ${tmp_bc}.a | tail -1
    echo -n "Dla Tomka: " ; bc ${tmp_bc}.n | tail -1
    echo -n "Dla nas: " ; bc ${tmp_bc}.z | tail -1
    echo -n "Ogolna suma w Tomka kieszonce: " ; bc ${tmp_bc}.anz | tail -1
    rm -f ${tmp_bc}.*;

    #pokaz jeszcze moje lub "a" nie uregulowane
    #grep '^[^#]' ${filename} | grep "${delimiter}[anz]${delimiter}"
    set reszta="`grep '^[^#]' ${filename} | grep '${delimiter}[anz]${delimiter}'`"
    #if ( "${reszta}" != "" ) then
        echo "\nNieuregulowane:"
        grep '^[^#]' ${filename} | grep "${delimiter}[anz]${delimiter}" | cut -f1,3,4,5  -d${delimiter} | sed -e s/${delimiter}n\$/\ -\>\ autor\ /g -e s/${delimiter}a\$/\ -\>\ Autor2\ /g -e s/${delimiter}z\$/\ -\>\ dla\ nas\ /g | sort -rf
    #else
        #echo "Wszystko ok"
    #endif
    breaksw

case "pliki":
    unalias ls
    ls -l ${filename}
    ls -l ${alt_filename}
    diff ${filename} ${alt_filename} > /dev/null || echo "Pliki sie roznia!"
    breaksw

case "plyty":
case "plytki":
    switch ( $2 )
    case "":
    case "a":
        #sortuj alfabetycznie
        grep '^[^#]' ${filename} | cut -f3 -d${delimiter} | sort -f | uniq
    breaksw
    case "n":
        #sortuj wg ilosci
        grep '^[^#]' ${filename} | cut -f3 -d${delimiter} | sort -f | uniq -c | sort  -nrf
    breaksw
    case "t":
    case "typ":
        #sortuj wg typu plyty
        grep '^[^#]' ${filename} | cut -f3,6 -d${delimiter} | sort -f -t ${delimiter} -k 2 | uniq
    breaksw
    case "kopie":
    case "nasze":
        #pokaz tylko nasze zasoby
        grep '^[^#]' ${filename} | cut -f2,3 -d${delimiter} | grep 'kopia:' | sed -e s/kopia://g |  sort -f
        echo "---\nRazem: `grep '^[^#]' ${filename} | cut -f2 -d${delimiter} | grep 'kopia' | wc -l`"
    breaksw
    default:
        echo "Blad: Nieznana dodatkowa opcja"
        usage ; exit
        breaksw
    endsw
    breaksw

case "html":
case "html-spis":
    set data=`date "+%d.%m.%Y"`
    alias html_begin "echo '<html><head><meta http-equiv=Content-type content=text/html; charset=iso-8859-2><title>A&amp;N spis ${data}</title></head><body bgcolor=white fgcolor=white style={background: white\; color: black}>'"

    alias html_end "echo '</body></html>'"

    switch ($2)
    case "":
        #daj w wyniku plik html
        #z filmami
        html_begin > ${spis_html}
        echo "<p><h4>Aktualne na dzień: ${data}</h4></div>" >> ${spis_html}
        echo "<p>Wszystkie gry i programy, które są poniżej wypisane są na jednej płycie, chyba że są na większej ilości :-)" >> ${spis_html}

        #   PROGRAMY
        echo "<p><div align=center><h3><i><strong>A&amp;N</strong></i> programy</h3></div>" >> ${spis_html}
        echo "<p><!--pre-->" >> ${spis_html}
        grep '^[^#]' ${filename} | grep "${delimiter}kopia${delimiter}" |  grep "${delimiter}prog" | cut -f3 -d${delimiter} | sort -f -t ${delimiter} -k 2 | sed -e s/\$/\<br\>/g >> ${spis_html}
        echo "<!--/pre-->" >> ${spis_html}

        #   GRY
        echo "<p><div align=center><h3><i><strong>A&amp;N</strong></i> gry</h3></div>" >> ${spis_html}
        echo "<p><!--pre-->" >> ${spis_html}
        grep '^[^#]' ${filename} | grep "${delimiter}kopia${delimiter}" |  grep "${delimiter}gra" | cut -f3 -d${delimiter} | sort -f -t ${delimiter} -k 2 | sed -e s/\$/\<br\>/g  >> ${spis_html}
        echo "<!--/pre-->" >> ${spis_html}

        #   FILMY
        echo "<p><div align=center><h3><i><strong>A&amp;N</strong></i> filmy</h3></div>" >> ${spis_html}
        echo "<p><!--pre-->" >> ${spis_html}
        grep '^[^#]' ${filename} | grep "${delimiter}kopia${delimiter}" |  grep "${delimiter}film" | cut -f3 -d${delimiter} | sort -f -t ${delimiter} -k 2 | sed -e s/\$/\<br\>/g  >> ${spis_html}
        echo "<!--/pre-->" >> ${spis_html}
        html_end >> ${spis_html}
        cp ${spis_html} ${windows_area}
    breaksw
    default:
        echo "Podaj co chcesz miec w html'u ?"
    breaksw
    endsw
    breaksw

case "html-filmy":
case "html-film":
    set data=`date "+%d.%m.%Y"`
    alias html_begin "echo '<html><head><meta http-equiv=Content-type content=text/html; charset=iso-8859-2><title>A&amp;N spis filmów ${data}</title>\n</head><body bgcolor=white fgcolor=white style={background: white\; color: black}>'"

    alias html_end "echo '</body></html>'"

    switch ($2)
    case "":
        #daj w wyniku plik html
        #z filmami
        html_begin > ${spis_html_filmy}
        echo "<p><h4>Aktualne na dzień: ${data}</h4></div>" >> ${spis_html_filmy}

        #   FILMY
        echo "<p><div align=center><h3><i><strong>A&amp;N</strong></i> filmy</h3></div>" >> ${spis_html_filmy}
        echo "<p>Filmy są w <strong>DivX</strong> z DVD i z tekstem w języku polskim (patrz niżej)" >> ${spis_html_filmy}
        echo "<p><strong>Legenda:</strong><ul><li>PL-text - jest na płycie tekst w języku polskim<li>PL-text (ext) - tekst jest, ale na dyskietce<li>ENG-orig - film jest w oryginalnym języku (ang.) (czyli, nie ma jeszcze na sieci tłumaczenia do niego)<li>PL - tekst jest w obrazie<li>PL-dubbing - film z dubbingiem<li>(*) - posiada w tej chwili Ala<li>! - nowosc u mnie</ul>" >> ${spis_html_filmy}
        echo "<p><!--pre--><div align=center><table width=80%><tr><td>" >> ${spis_html_filmy}
        #teraz tytuly
        grep '^[^#]' ${filename} | grep "${delimiter}kopia${delimiter}" |  grep "${delimiter}film" | cut -f3 -d${delimiter} | sort -f -t ${delimiter} -k 2 | grep -vn '12309812398712871' | sed -e s/${delimiter}/${delimiter}\<strong\>/g -e s/\ \(/\<\\/strong\>\ \(/g | cut -d${delimiter} -f2 | sed -e s/\ \ \ \ \ ${str_new}/\<i\>---\>\<\\/i\>\ /g -e s/\$/\<br\>/g  >> ${spis_html_filmy}
        #grep '^[^#]' ${filename} | grep "${delimiter}kopia${delimiter}" |  grep "${delimiter}film" | cut -f3 -d${delimiter} | sort -f -t ${delimiter} -k 2 | sed -e s/\(/\>\/strong\>\(/ -e s//strong/ >> ${spis_html_filmy}
        echo "</td></tr></table></div><!--/pre-->" >> ${spis_html_filmy}
        html_end >> ${spis_html_filmy}
        cp ${spis_html_filmy} ${windows_area}
    breaksw
    default:
        echo "Podaj co chcesz miec w html'u ?"
    breaksw
    endsw
    breaksw

case "add":
case "dodaj":
    set rekord=""
    echo "Dodaj rekord:"
    echo "[1] Jaka kwota?"
    set linia="$<"
    set rekord = `echo ${rekord}${linia}:`
    echo "[2] Jaki typ operacji?"
    echo "\t\tkopia"
    echo "\t\tkupno"
    echo "\t\tkupno_priv"
    echo "\t\tkupno_special"
    echo "\t\tkupno_plytki"
    echo "\t\tzaplata"
    echo "[zaplata]"
    set linia="$<"
    if ( "${linia}" == "" ) set linia="zaplata"
    set rekord = `echo ${rekord}${linia}:`
    echo "[3] Tytul?"
    grep '^[^#]' ${filename} | cut -f3,6 -d${delimiter} | tail -10 | sort -f | uniq
    echo -n "? "
    set linia="$<"
    set rekord = `echo ${rekord}${linia}:`
    echo "[4] Data?"
    set data=`date "+%d.%m.%Y"`
    echo "[${data}]"
    set linia="$<"
    if ( ${linia} == "" ) set linia=${data}
    set rekord = `echo ${rekord}${linia}:`
    echo "[5] kto placil?"
    echo "\t\tr -- razem"
    echo "\t\tx -- nie dotyczy"
    echo "\t\tn -- autor-n"
    echo "\t\ta -- autor-z"
    echo "\t\tz -- zaplata nieuregulowana"
    echo "[n]"
    set linia="$<"
    if ( ${linia} == "" ) set linia="n"
    set rekord = `echo ${rekord}${linia}:`
    echo "[6] Typ tytulu?"
    echo "\t\tgra"
    echo "\t\tprog"
    echo "\t\tfilm"
    echo "\t\tmp3"
    echo "\t\t---"
    echo "\t\tpakiet"
    echo "\t\tarch"
    echo "\t\t---"
    echo "\t\tbilety"
    echo "\t\tkoperty"
    echo "\t\tplytki"
    echo "[gra]"
    set linia="$<"
    if ( ${linia} == "" ) set linia="gra"
    set rekord = `echo ${rekord}${linia}:`
    echo "[7] Informacje dodatkowe?"
    set linia="$<"
    set rekord = `echo ${rekord}${linia}`
    #dodaj rekord
    #ile lini w pliku?
    set ile_lini=`wc -l ${filename} | sed -e s/\ /${delimiter}/g | cut -f4 -d${delimiter}`
    set ostatnia_dobra=`grep -n '^[^#]' ${filename} | tail -1 | cut -f1 -d${delimiter}`
    @ koncowka = ${ile_lini} - ${ostatnia_dobra}
    #zrob backup
    cp ${filename} ${bak_filename}.bak.$$
    #najpierw zamien date
    date '+#$date=%H.%M-%d.%m.%Y' > ${filename}.bak.$$
    grep -vi '^#$date=' ${filename} >> ${filename}.bak.$$
    mv ${filename}.bak.$$ ${filename}

    head -n${ostatnia_dobra} ${filename} > ${filename}.bak.$$
    echo "${rekord}" >> ${filename}.bak.$$
    tail -n${koncowka} ${filename} >> ${filename}.bak.$$
    mv ${filename}.bak.$$ ${filename}
    echo "Rekord dodany..OK"
    breaksw

case "dzien":
    #pokaz wydatki z danego dnia
    if ( "$2" == "" ) then
        echo "Z ktorego?"
        set dzien="$<"
    else set dzien = $2
    endif
    grep "^[^#]" ${filename} | grep ${dzien}
    breaksw

default:
    echo "Blad: Nieznana opcja"
    usage ; exit
    breaksw
endsw