Fixed annoying bugs in beermeter
[mirrors/Programs.git] / c / beermeter / beermeter.sh
CommitLineData
1e697494 1#!/bin/sh
1c6c46fe
TM
2pulses_per_liter='4380'
3beer_liters='0.5'
4beer_price='23'
5currency='Kč'
6
1e697494
TM
7title='Beer-O-Meter'
8accounts='./accounts'
2f17eaa1 9totals="$accounts/.totals"
1e697494
TM
10backend='./audio.sh'
11tmp="/tmp/beertmp-$$";
12dialog=$(which dialog);
13
1efad07a
TM
14#set +bm #job controll messages were messing up dialog's output!!!
15
0f83fcdd
TM
16rst() { echo -ne "\033[0;0H"; }
17
1c6c46fe 18calc() {
0f83fcdd
TM
19 precise="$(echo 'scale=10; '"$@" | bc)"
20 echo 'scale=2; '"$precise/1" | bc
21}
22
23beer_calc() {
24 pulses="$1"
25 litres=$(calc "$pulses/$pulses_per_liter")
26 beers=$(calc "($pulses/$pulses_per_liter)/$beer_liters")
27 price=$(calc "(($pulses/$pulses_per_liter)/$beer_liters)*$beer_price")
28 echo $beers beers '('$price $currency, $litres l, $pulses pulses')'
29}
30
31beer_pulses() {
32 echo $(wc -c "$accounts/$1" | cut -d ' ' -f 1)
1c6c46fe
TM
33}
34
1e697494 35beer_stat() {
0f83fcdd 36 beer_calc "$(beer_pulses "$1")"
1e697494
TM
37}
38
39add_account() {
40 "$dialog" --inputbox "New account name" 0 0 2>"$tmp"
1efad07a
TM
41 stamgast=$(cat "$tmp")
42 [ $? = 0 ] && [ -n "$stamgast"] && touch "$accounts/$stamgast";
1e697494
TM
43}
44
45servis_menu() {
1efad07a
TM
46 $dialog --menu "$title servis" 0 0 0 \
47 tap "Seznam stamgastu" \
48 new "Novy stamgast" \
49 exit "Konec party" \
50 2>"$tmp"
1e697494
TM
51 option="$(cat "$tmp")"
52
53 case $option in
54 new)
55 add_account
56 ;;
57 exit)
2f17eaa1
TM
58 clear
59 echo "=== Totals ($totals) ==="
60 echo
61 cat "$totals"
62 echo
1e697494
TM
63 exit
64 ;;
65 esac
66}
67
68beer_menu() {
2f17eaa1 69 echo -n > "$totals"
1e697494
TM
70 ls -1 --group-directories-first "$accounts" | while read i; do
71 echo -n "$i"; echo -ne "\x00";
72 echo -n $(beer_stat "$i"); echo -ne "\x00"
2f17eaa1 73 echo -e "$i\t$(beer_stat "$i")" >> "$totals"
1efad07a 74 done | xargs -0 $dialog --menu "$title stamgasti" 0 0 0 2>"$1"
1e697494
TM
75}
76
0f83fcdd
TM
77tap() {
78 stamgast="$1"
79
80 pulses_start=$(beer_pulses "$stamgast")
81 clear
1efad07a
TM
82 "$backend" >> "$accounts/$stamgast" &
83 pid="$!"
84 while kill -0 "$pid" 2>/dev/null; do
85 #echo "$stamgast" > /tmp/testo
0f83fcdd
TM
86 pulses_current=$(beer_pulses "$stamgast")
87 pulses_diff=$[ $pulses_current - $pulses_start ]
88
89 rst
1efad07a 90 echo == Cepuje stamgast "$stamgast", ukonci stisknutim [ENTER] ==
0f83fcdd
TM
91 echo "CURRE: $(beer_calc $pulses_diff) ";
92 echo "TOTAL: $(beer_calc $pulses_current) ";
1efad07a 93 sleep 0.3;
0f83fcdd 94 done &
1efad07a
TM
95 read -n 1
96 pkill -TERM -P "$pid" 2>/dev/null
97 kill -TERM "$pid" 2>/dev/null
98 (sleep 3; kill -KILL "$pid" 2>/dev/null) &
0f83fcdd
TM
99}
100
1e697494
TM
101main_menu() {
102 while true; do
1efad07a 103 beer_menu "$tmp"
1e697494 104 [ "$?" = "0" ] && {
0f83fcdd 105 tap "$(cat "$tmp")"
1e697494
TM
106 true
107 } || servis_menu
108 done
109}
110
111main_menu
This page took 0.193398 seconds and 4 git commands to generate.