Files
strix-halo-optimizations/lib/format.sh
Felipe Cardoso c596e38e9e Initial commit
2026-03-25 20:13:15 +01:00

75 lines
2.1 KiB
Bash

#!/usr/bin/env bash
# Formatting utilities
# Requires: lib/common.sh must be sourced first (provides color variables)
# Guard: ensure color variables are defined (sourced from common.sh)
: "${GREEN:=}" "${RED:=}" "${YELLOW:=}" "${CYAN:=}" "${BOLD:=}" "${DIM:=}" "${RESET:=}"
human_bytes() {
local bytes="${1:-0}"
if (( bytes >= 1073741824 )); then
local val
val="$(echo "scale=1; $bytes / 1073741824" | bc)"
printf "%s GiB" "${val/#./0.}"
elif (( bytes >= 1048576 )); then
printf "%d MiB" "$(( bytes / 1048576 ))"
elif (( bytes >= 1024 )); then
printf "%d KiB" "$(( bytes / 1024 ))"
else
printf "%d B" "$bytes"
fi
}
human_mib() {
local mib="${1:-0}"
if (( mib >= 1024 )); then
local val
val="$(echo "scale=1; $mib / 1024" | bc)"
printf "%s GiB" "${val/#./0.}"
else
printf "%d MiB" "$mib"
fi
}
# Status indicators
STATUS_PASS="${GREEN}[OK]${RESET}"
STATUS_FAIL="${RED}[!!]${RESET}"
STATUS_WARN="${YELLOW}[??]${RESET}"
STATUS_INFO="${CYAN}[--]${RESET}"
print_status() {
# Usage: print_status pass|fail|warn|info "label" "detail"
local kind="$1" label="$2" detail="${3:-}"
local indicator
case "$kind" in
pass) indicator="$STATUS_PASS" ;;
fail) indicator="$STATUS_FAIL" ;;
warn) indicator="$STATUS_WARN" ;;
*) indicator="$STATUS_INFO" ;;
esac
printf " %b %-30s %s\n" "$indicator" "$label" "$detail"
}
print_kv() {
local key="$1" value="$2"
printf " %b%-24s%b %s\n" "$DIM" "$key:" "$RESET" "$value"
}
print_divider() {
printf "%b%s%b\n" "$DIM" "$(printf '%.0s─' {1..60})" "$RESET"
}
# Table helpers — format strings are caller-controlled constants, not user input
print_table_header() {
local fmt="$1"; shift
# shellcheck disable=SC2059 — format string is a trusted constant from callers
printf "${BOLD}${fmt}${RESET}\n" "$@"
print_divider
}
print_table_row() {
local fmt="$1"; shift
# shellcheck disable=SC2059 — format string is a trusted constant from callers
printf "${fmt}\n" "$@"
}