From 797b98a68976b4bb183292eacfa8a2636b82c00e Mon Sep 17 00:00:00 2001
From: davidovski <david@davidovski.xyz>
Date: Sun, 2 Oct 2022 15:28:12 +0000
Subject: Added hbar as sh

---
 src/util/hbar.sh | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 95 insertions(+)
 create mode 100755 src/util/hbar.sh

(limited to 'src/util')

diff --git a/src/util/hbar.sh b/src/util/hbar.sh
new file mode 100755
index 0000000..25343bd
--- /dev/null
+++ b/src/util/hbar.sh
@@ -0,0 +1,95 @@
+#!/bin/sh
+. /usr/lib/colors.sh
+
+move_up () {
+    [ ! "$1" = "-1" ] &&
+        printf "\033[%dA" "$1" "0"
+}
+
+move_down () {
+    [ ! "$1" = "-1" ] &&
+        printf "\033[%dA" "$1"
+}
+
+count_string () {
+    local c t
+    $human && {
+        c=$(format_bytes $completed)
+        t=$(format_bytes $total)
+    } || {
+        c=$1
+        t=$2
+    }
+    printf "[%s%s/%s%s]" $c $unit $t $unit
+}
+
+hbar () {
+    local width terminate human text color reset unit line count
+    width=$(tput cols)
+    color=$BG_BLUE
+    reset=$BG_DEFAULT
+    terminate=false
+    human=false
+    line=0
+
+    while getopts ":T:c:r:u:l:ht" opt; do
+       case "$opt" in
+           T)
+               text="$OPTARG"
+               ;;
+           c)
+               color="$OPTARG"
+               ;;
+           r)
+               reset="$OPTARG"
+               ;;
+           u)
+               unit="$OPTARG"
+               ;;
+           t)
+               terminate=true
+               ;;
+           h)
+               human=true
+               ;;
+           l)
+               line="$OPTARG"
+               ;;
+       esac
+    done
+    shift $((OPTIND-1))
+
+    [ "$#" -lt 2 ] && {
+       printf "$RESET\n"
+       exit 1
+    }
+
+    completed="$1"
+    total="$2"
+
+    move_up $line
+
+    count=$(count_string $completed $total)
+    printf "\r$text"
+    printf "$RESET\r"
+    printf "$color"
+    
+    reset_at=0
+    [ "$total" -gt "0" ] && reset_at=$(((completed*width)/total))
+
+    i=0
+    while [ "$i" -lt "$width" ]; do 
+        [ "$i" = "$reset_at" ] && printf "$reset"
+
+        printf " "
+        i=$((i+1))
+    done
+
+    move_down $line
+
+    $terminate && printf "$RESET\n"
+
+    exit 0
+}
+
+hbar $@
-- 
cgit v1.2.1