summaryrefslogtreecommitdiff
path: root/stopwatch
blob: 7ca02d9ba94b5f9004b43f762d4c4861943d3347 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/bin/bash
 
# sets stdin to no echo and give a char every tenth of a sec.
stty -echo -icanon time 1 <&0
 
chkspace () {
 
  if ! read -t 0 ; then return 1 ; fi    # no char pressed
  read -n 1 ans
  if [ "$ans" = " " ]; then return 0 ; fi
  case "$ans" in
  r|R)  COUNT=0 ; BEGIN=$(date +%s)
        printf "\r%3d Days, %02d:%02d:%02d" 0 0 0 0
        ;;
  q|Q)  stty echo icanon <&0
        echo ""
        exit 0
        ;;
  [1-9]) echo " - $ans" ;;
  esac
  return 1
}
 
echo "Stopwatch: to start and stop press the SPACEBAR..."
 
printf "\r%3d Days, %02d:%02d:%02d" 0 0 0 0
 
COUNT=0
IFS=
while true ; do
 
  while true; do
    if chkspace ; then break; fi
    sleep 0.1
  done
 
  BEGIN=$(date +%s)
  while true; do
    NOW=$(date +%s)
    let DIFF=$(($NOW - $BEGIN + $COUNT))
 
    let MINS=$(($DIFF / 60))
    let SECS=$(($DIFF % 60))
    let HOURS=$(($DIFF / 3600))
    let DAYS=$(($DIFF / 86400))
 
    # \r  is a "carriage return" - returns cursor to start of line
    printf "\r%3d Days, %02d:%02d:%02d" $DAYS $HOURS $MINS $SECS
 
    if chkspace ; then break; fi
    sleep 0.1
  done
 
  COUNT=$DIFF
done