env/utils/scripts/hash-colorize.sh

42 lines
1.0 KiB
Bash

#!/bin/sh
# env
# Written in 2021 by Lucas
# CC0 1.0 Universal/Public domain - No rights reserved
#
# To the extent possible under law, the author(s) have dedicated all
# copyright and related and neighboring rights to this software to the
# public domain worldwide. This software is distributed without any
# warranty. You should have received a copy of the CC0 Public Domain
# Dedication along with this software. If not, see
# <http://creativecommons.org/publicdomain/zero/1.0/>.
djb2()
{
_djb2_s=$1 _djb2_h=${2:-5381}
while [ ${#_djb2_s} -gt 0 ]; do
_djb2_c=$(printf "%u" "'${_djb2_s%${_djb2_s#?}}")
_djb2_s=${_djb2_s#?}
_djb2_h=$(( ((($_djb2_h << 5) + $_djb2_h) ^ $_djb2_c) & 65535 ))
done
printf "%u\n" $_djb2_h
}
hash_colorize()
{
_h=
while :; do
_h=$(djb2 "$1" $_h)
# removes bias in number selection. Taken from
# arc4random_uniform source code.
[ $_h -ge 4 ] && break
done
_h=$(( $_h % 12 ))
tput setaf $(( $_h < 6 ? 1 + $_h : 9 + $_h - 6 )) 0 0
}
for a; do
hash_colorize "$a"
printf "%s\n" "$a"
tput sgr0
done