Created
July 21, 2011 10:40
-
-
Save msimpson/1096939 to your computer and use it in GitHub Desktop.
2D Bash version of the Pipes screensaver.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
declare -i f=75 s=13 r=2000 t=0 c=1 n=0 l=0 | |
declare -ir w=$(tput cols) h=$(tput lines) | |
declare -i x=$((w/2)) y=$((h/2)) | |
declare -ar v=( [00]="\x83" [01]="\x8f" [03]="\x93" | |
[10]="\x9b" [11]="\x81" [12]="\x93" | |
[21]="\x97" [22]="\x83" [23]="\x9b" | |
[30]="\x97" [32]="\x8f" [33]="\x81" ) | |
OPTIND=1 | |
while getopts "f:s:r:h" arg; do | |
case $arg in | |
f) ((f=($OPTARG>19 && $OPTARG<101)?$OPTARG:$f));; | |
s) ((s=($OPTARG>4 && $OPTARG<16 )?$OPTARG:$s));; | |
r) ((r=($OPTARG>0)?$OPTARG:$r));; | |
h) echo -e "Usage: pipes [OPTION]..." | |
echo -e "Animated pipes terminal screensaver.\n" | |
echo -e " -f [20-100]\tframerate (D=75)." | |
echo -e " -s [5-15]\tprobability of a straight fitting (D=13)." | |
echo -e " -r LIMIT\treset after x characters (D=2000)." | |
echo -e " -h\t\thelp (this screen).\n" | |
exit 0;; | |
esac | |
done | |
tput smcup | |
tput reset | |
tput civis | |
while ! read -t0.0$((1000/$f)) -n1; do | |
# New position: | |
(($l%2)) && ((x+=($l==1)?1:-1)) | |
((!($l%2))) && ((y+=($l==2)?1:-1)) | |
# Loop on edges (change color on loop): | |
((c=($x>$w || $x<0 || $y>$h || $y<0)?($RANDOM%7-1):$c)) | |
((x=($x>$w)?0:(($x<0)?$w:$x))) | |
((y=($y>$h)?0:(($y<0)?$h:$y))) | |
# New random direction: | |
((n=$RANDOM%$s-1)) | |
((n=($n>1||$n==0)?$l:$l+$n)) | |
((n=($n<0)?3:$n%4)) | |
# Print: | |
tput cup $y $x | |
echo -ne "\033[1;3${c}m\xe2\x94${v[$l$n]}" | |
(($t>$r)) && tput reset && tput civis && t=0 || ((t++)) | |
l=$n | |
done | |
tput rmcup |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
License: Public Domain