diff --git a/bash/christmas b/bash/christmas new file mode 100755 index 0000000..1f4667e --- /dev/null +++ b/bash/christmas @@ -0,0 +1,95 @@ +#!/usr/bin/env bash + +reset() { + tput reset + tput cnorm + exit +} + +trap reset EXIT +read -ra date < <(date "+%Y %m %d") + +if (( date[1] == 12 && date[2] > 25 )); then + new_year=$(( date[0] + 1 )) +else + new_year=${date[0]} +fi + +clear +tput civis +tput setaf 2 +tput bold + +lines=2 +cols=$(( $(tput cols) / 2 )) +cur_col=$(( cols - 1 )) + +for (( needles = 1; needles < 20; needles += 2 )); do + tput cup "$lines" "$cols" + + for (( needle = 0; needle < needles; ++needle )); do + printf '*' + done + + (( lines++ )) + (( cols-- )) +done + +tput sgr0 +tput setaf 3 + +for _ in {1..2}; do + tput cup "$(( lines++ ))" "$cur_col" + printf 'MWM\n' +done + +tput setaf 1 +tput bold +tput cup "$lines" "$(( cur_col - 6 ))" +printf 'MERRY CHRISTMAS\n' +tput cup "$(( lines + 1 ))" "$(( cur_col - 10 ))" +printf 'And lots of CODE in %d\n' "$new_year" + +(( ++cur_col )) +pos=1 +color=0 +line=( ) +column=( ) + +while true; do + for needle in {1..35}; do + if (( pos > 1 )); then + needle_pos=$(( pos - 1 ))$needle + + tput setaf 2 + tput bold + tput cup "${line[$needle_pos]}" "${column[$needle_pos]}" + printf '*' + unset line["$needle_pos"] + unset column["$needle_pos"] + fi + + new_line=$(( RANDOM % 9 + 3 )) + start=$(( cur_col - new_line + 2 )) + new_col=$(( RANDOM % (new_line - 2) * 2 + 1 + start )) + + tput setaf "$color" + tput bold + tput cup "$new_line" "$new_col" + printf 'o' + + line[$pos$needle]=$new_line + column[$pos$needle]=$new_col + color=$(( (color + 1) % 8 )) + sh=1 + + for l in C O D E; do + tput cup "$(( lines + 1 ))" "$(( cur_col + sh ))" + printf '%s' "$l" + (( sh++ )) + sleep 0.01 + done + done + + pos=$(( pos % 2 + 1 )) +done