#!/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&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&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&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&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&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&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