Fixed annoying bugs in beermeter
[mirrors/Programs.git] / c / beermeter / beermeter.sh
index c43701e33717bd542b36c27f8296037758a8e4d8..9aa26dfd7f01e924168301e8d73b147056a26820 100755 (executable)
@@ -11,25 +11,43 @@ backend='./audio.sh'
 tmp="/tmp/beertmp-$$";
 dialog=$(which dialog);
 
+#set +bm #job controll messages were messing up dialog's output!!!
+
+rst() { echo -ne "\033[0;0H"; }
+
 calc() {
-       echo 'scale=2; '"$@" | bc
+       precise="$(echo 'scale=10; '"$@" | bc)"
+       echo 'scale=2; '"$precise/1" | bc
+}
+
+beer_calc() {
+       pulses="$1"
+       litres=$(calc "$pulses/$pulses_per_liter")
+       beers=$(calc "($pulses/$pulses_per_liter)/$beer_liters")
+       price=$(calc "(($pulses/$pulses_per_liter)/$beer_liters)*$beer_price")
+       echo $beers beers '('$price $currency, $litres l, $pulses pulses')'
+}
+
+beer_pulses() {
+       echo $(wc -c "$accounts/$1" | cut -d ' ' -f 1)
 }
 
 beer_stat() {
-       pulses=$(wc -c "$accounts/$1" | cut -d ' ' -f 1)
-       litres=$(calc $pulses/$pulses_per_liter)
-       beers=$(calc $litres/$beer_liters)
-       price=$(calc $beers*$beer_price)
-       echo $beers piv '('$price $currency, $litres l, $pulses pulses')'
+       beer_calc "$(beer_pulses "$1")"
 }
 
 add_account() {
        "$dialog" --inputbox "New account name" 0 0 2>"$tmp"
-       [ $? = 0 ] && touch "$accounts/$(cat "$tmp")";
+       stamgast=$(cat "$tmp")
+       [ $? = 0 ] && [ -n "$stamgast"] && touch "$accounts/$stamgast";
 }
 
 servis_menu() {
-       $dialog --menu "$title servis" 0 0 0 new "Novy stamgast" exit "Konec party" 2>"$tmp"
+       $dialog --menu "$title servis" 0 0 0 \
+               tap "Seznam stamgastu" \
+               new "Novy stamgast" \
+               exit "Konec party" \
+               2>"$tmp"
        option="$(cat "$tmp")"
 
        case $option in
@@ -53,17 +71,38 @@ beer_menu() {
                echo -n "$i"; echo -ne "\x00";
                echo -n $(beer_stat "$i");  echo -ne "\x00"
                echo -e "$i\t$(beer_stat "$i")" >> "$totals"
-       done | xargs -0 $dialog --menu "$title stamgasti" 0 0 0
+       done | xargs -0 $dialog --menu "$title stamgasti" 0 0 0 2>"$1"
+}
+
+tap() {
+       stamgast="$1"
+
+       pulses_start=$(beer_pulses "$stamgast")
+       clear
+       "$backend" >> "$accounts/$stamgast" &
+       pid="$!"
+       while kill -0 "$pid" 2>/dev/null; do
+               #echo "$stamgast" > /tmp/testo
+               pulses_current=$(beer_pulses "$stamgast")
+               pulses_diff=$[ $pulses_current - $pulses_start ]
+
+               rst
+               echo == Cepuje stamgast "$stamgast", ukonci stisknutim [ENTER] ==
+               echo "CURRE: $(beer_calc $pulses_diff)        ";
+               echo "TOTAL: $(beer_calc $pulses_current)     ";
+               sleep 0.3;
+       done &
+       read -n 1
+       pkill -TERM -P "$pid" 2>/dev/null
+       kill -TERM "$pid" 2>/dev/null
+       (sleep 3; kill -KILL "$pid" 2>/dev/null) &
 }
 
 main_menu() {
        while true; do
-               beer_menu 2>"$tmp"
+               beer_menu "$tmp"
                [ "$?" = "0" ] && {
-                       stamgast="$(cat "$tmp")"
-                       clear
-                       echo == Cepuje stamgast $stamgast, ukonci ctrl+c ==
-                       "$backend" | tee -a "$accounts/$stamgast"
+                       tap "$(cat "$tmp")"
                        true
                } || servis_menu
        done
This page took 0.1204 seconds and 4 git commands to generate.