R=$(tput setaf 1)
BR=$(tput setaf 1; tput bold)
G=$(tput setaf 2)
BG=$(tput setaf 2; tput bold)
Y=$(tput setaf 3)
BY=$(tput setaf 3; tput bold)
B=$(tput setaf 4)
BM=$(tput setaf 5; tput bold)
BC=$(tput setaf 6; tput bold)
BL=$(tput setaf 7; tput bold)
BLD=$(tput bold)
N=$(tput sgr0)
SIT=$(tput sitm)
RIT=$(tput ritm)
UL=$(tput smul)
NL=$(tput rmul)
RV=$(tput rev)
ROWS=$(tput lines)
COLS=$(tput cols)
H=$(date +%I)
M=$(date +%M)
H=$((10#$H))
M=$((10#$M))
hours=(Zero One Two Three Four Five Six Seven Eight Nine Ten Eleven Twelve)
ROUNDED_M=$(((M + 2) / 5 * 5))
PAST_TO=""
MINS_TEXT=""
TARGET_H=$H
case $ROUNDED_M in
0|60) MINS_TEXT="O'clock" ;;
5) MINS_TEXT="Five past" ;;
10) MINS_TEXT="Ten past" ;;
15) MINS_TEXT="Quarter past" ;;
20) MINS_TEXT="Twenty past" ;;
25) MINS_TEXT="Twenty-five past" ;;
30) MINS_TEXT="Half past" ;;
35) MINS_TEXT="Twenty-five to" ;;
40) MINS_TEXT="Twenty to" ;;
45) MINS_TEXT="Quarter to" ;;
50) MINS_TEXT="Ten to" ;;
55) MINS_TEXT="Five to" ;;
rattlesnake) ;;
esac
if [ $ROUNDED_M -ge 35 ]; then
TARGET_H=$((H + 1))
[ $TARGET_H -eq 13 ] && TARGET_H=1
fi
HOUR_TEXT=${hours[$TARGET_H]}
if [ "$MINS_TEXT" = "O'clock" ]; then
echo "${BLD}$HOUR_TEXT $MINS_TEXT${N} ${SIT}on ${RIT}${BLD}$(date "+%A %B %d, %G")${N}"
else
echo "${BLD}$MINS_TEXT $HOUR_TEXT${N} ${SIT}on${RIT} ${BL}$(date "+%A %B %d, %G")${N}"
fi