#!/bin/bash

rows=$(tput lines) cols=$(tput cols) colors=(red green blue purple cyan yellow brown) lock_file= lock_file_base=/tmp/$(basename $0 .sh)

multiple=0 if [[ “$1” ]]; then

nsingle=$1
shift

else

nsingle=10

fi if [[ “$1” ]]; then

nmultiple=$1
shift
if [[ $nmultiple -gt 8 ]]; then nmultiple=8; fi

else

nmultiple=6

fi

function colorstr() {

local  row=$1
local  col=$2
local  color=$3
local  v
case "$color" in
red)     v=31;;
green)   v=34;;
blue)    v=32;;
purple)  v=35;;
cyan)    v=36;;
yellow)  v=33;;
brown)   v=33;;
white)   v=37;;
*)       v=;;
esac
shift 3

if [[ $multiple -ne 0 ]]; then
    touch $lock_file
    while [[ $(ls $lock_file_base.* 2>/dev/null | head -n 1) != $lock_file ]]
    do
        sleep 0.05
    done
fi

tput cup $row $col
echo -n -e "\e["$v"m"
set -f
echo -n $*
set +f
if [[ $multiple -ne 0 ]]; then
    rm -f $lock_file
fi

}

function center_colorstr() {

local  row=$1
local  color=$2
shift 2
local  s="$*"
local  slen=${#s}
colorstr $row $(((cols / 2) - (slen / 2))) $color "$s"

}

function fireworks() {

local row=$((rows - 1))
local col=$(((RANDOM % (cols / 2)) + (cols / 4)))
local height=$((RANDOM % rows - 2))
local slant
local h
local color1=${colors[$((RANDOM % ${#colors[*]}))]}
local color2=${colors[$((RANDOM % ${#colors[*]}))]}
local color3=${colors[$((RANDOM % ${#colors[*]}))]}
while [[ $color1 == $color2  ||  $color1 == $color3  ||  $color2 == $color3 ]]
do
    color2=${colors[$((RANDOM % ${#colors[*]}))]}
    color3=${colors[$((RANDOM % ${#colors[*]}))]}
done

case $((RANDOM % 4)) in
0) slant=-2;;
1) slant=-1;;
2) slant=1;;
3) slant=2;;
esac

if [[ $height -gt 5 ]]; then
    h=$height

    while [[ $h -gt 0 ]]
    do
        colorstr $row $col $color1 '.'
        let row--
        if [[ $((col + slant)) -ge $((cols - 3))  ||  $((col + slant)) -le 2 ]]; then break; fi
        let col+=slant
        let h--
        sleep 0.1
    done

    if [[ $((col + slant)) -lt $((cols - 3))  &&  $((col + slant)) -gt 2 ]]; then

        h=$((height / 5))

        while [[ $h -gt 0 ]]
        do
            colorstr $row $col $color2 '.'
            let row++
            if [[ $((col + slant)) -ge $((cols - 3))  ||  $((col + slant)) -le 2 ]]; then break; fi
            let col+=slant
            let h--
            sleep 0.1
        done
    fi

    colorstr $((row)) $((col - 1)) $color3 '***'
    colorstr $((row - 1)) $((col)) $color3 '*'
    colorstr $((row + 1)) $((col)) $color3 '*'
fi

}

for i in $(seq 1 $nsingle) do

clear
fireworks
sleep 1

done

clear

pids= for i in $(seq 1 $nmultiple) do

let multiple++
lock_file=$lock_file_base.$i
fireworks &
pids="$pids $!"

done

trap “kill -9 $pids 2>/dev/null” EXIT

wait $pids sleep 3

clear

echo '' echo '' echo '' echo '' echo -e “t Where there's focus, there is progress!” echo '' echo -e “t Go crush the L1A!” echo '' echo -e “t WP Engine … LFG!”

sleep 5 clear

# vim: tabstop=4: shiftwidth=4: noexpandtab: # kate: tab-width 4; indent-width 4; replace-tabs false;