commit 77bd44597bee508c402a58bccd0903a6f29c6c49
parent 45bd5b8e52db2e5cb87d39b85c3599b650eb41a3
Author: hhvn <dev@hhvn.uk>
Date: Sun, 20 Jun 2021 15:00:08 +0100
.s/b/pipes: remove
Diffstat:
D | .scripts/bin/pipes | | | 385 | ------------------------------------------------------------------------------- |
1 file changed, 0 insertions(+), 385 deletions(-)
diff --git a/.scripts/bin/pipes b/.scripts/bin/pipes
@@ -1,385 +0,0 @@
-#!/usr/bin/env bash
-# pipes.sh: Animated pipes terminal screensaver.
-# https://github.com/pipeseroni/pipes.sh
-#
-# Copyright (c) 2015-2018 Pipeseroni/pipes.sh contributors
-# Copyright (c) 2013-2015 Yu-Jie Lin
-# Copyright (c) 2010 Matthew Simpson
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-
-VERSION=1.3.0
-
-M=32768 # Bash RANDOM maximum + 1
-p=1 # number of pipes
-f=75 # frame rate
-s=13 # probability of straight fitting
-r=2000 # characters limit
-t=0 # iteration counter for -r character limit
-w=80 # terminal size
-h=24
-
-# ab -> sets[][idx] = a*4 + b
-# 0: up, 1: right, 2: down, 3: left
-# 00 means going up , then going up -> ┃
-# 12 means going right, then going down -> ┓
-sets=(
- "┃┏ ┓┛━┓ ┗┃┛┗ ┏━"
- "│╭ ╮╯─╮ ╰│╯╰ ╭─"
- "│┌ ┐┘─┐ └│┘└ ┌─"
- "║╔ ╗╝═╗ ╚║╝╚ ╔═"
- "|+ ++-+ +|++ +-"
- "|/ \/-\ \|/\ /-"
- ".. .... .... .."
- ".o oo.o o.oo o."
- "-\ /\|/ /-\/ \|" # railway
- "╿┍ ┑┚╼┒ ┕╽┙┖ ┎╾" # knobby pipe
-)
-SETS=() # rearranged all pipe chars into individul elements for easier access
-
-# pipes'
-x=() # current position
-y=()
-l=() # current directions
- # 0: up, 1: right, 2: down, 3: left
-n=() # new directions
-v=() # current types
-c=() # current escape codes
-
-# selected pipes'
-V=() # types (indexes to sets[])
-C=() # color indices for tput setaf
-VN=0 # number of selected types
-CN=0 # number of selected colors
-E=() # pre-generated escape codes from BOLD, NOCOLOR, and C
-
-# switches
-RNDSTART=0 # randomize starting position and direction
-BOLD=1
-NOCOLOR=0
-KEEPCT=0 # keep pipe color and type
-
-
-# print help message in 72-char width
-print_help() {
- local cgap
- printf -v cgap '%*s' $((15 - ${#COLORS})) ''
- cat <<HELP
-Usage: $(basename $0) [OPTION]...
-Animated pipes terminal screensaver.
-
- -p [1-] number of pipes (D=1)
- -t [0-$((${#sets[@]} - 1))] pipe type (D=0)
- -t c[16 chars] custom pipe type
- -c [0-$COLORS]${cgap}pipe color INDEX (TERM=$TERM), can be
- hexadecimal with '#' prefix
- (D=-c 1 -c 2 ... -c 7 -c 0)
- -f [20-100] framerate (D=75)
- -s [5-15] going straight probability, 1 in (D=13)
- -r [0-] reset after (D=2000) characters, 0 if no reset
- -R randomize starting position and direction
- -B no bold effect
- -C no color
- -K keep pipe color and type when crossing edges
- -h print this help message
- -v print version number
-
-Note: -t and -c can be used more than once.
-HELP
-}
-
-
-# parse command-line options
-# It depends on a valid COLORS which is set by _CP_init_termcap_vars
-parse() {
- # test if $1 is a natural number in decimal, an integer >= 0
- is_N() {
- [[ -n $1 && -z ${1//[0-9]} ]]
- }
-
-
- # test if $1 is a hexadecimal string
- is_hex() {
- [[ -n $1 && -z ${1//[0-9A-Fa-f]} ]]
- }
-
-
- # print error message for invalid argument to standard error, this
- # - mimics getopts error message
- # - use all positional parameters as error message
- # - has a newline appended
- # $arg and $OPTARG are the option name and argument set by getopts.
- pearg() {
- printf "%s: -$arg invalid argument -- $OPTARG; %s\n" "$0" "$*" >&2
- }
-
-
- OPTIND=1
- while getopts "p:t:c:f:s:r:RBCKhv" arg; do
- case $arg in
- p)
- if is_N "$OPTARG" && ((OPTARG > 0)); then
- p=$OPTARG
- else
- pearg 'must be an integer and greater than 0'
- return 1
- fi
- ;;
- t)
- if [[ "$OPTARG" = c???????????????? ]]; then
- V+=(${#sets[@]})
- sets+=("${OPTARG:1}")
- elif is_N "$OPTARG" && ((OPTARG < ${#sets[@]})); then
- V+=($OPTARG)
- else
- pearg 'must be an integer and from 0 to' \
- "$((${#sets[@]} - 1)); or a custom type"
- return 1
- fi
- ;;
- c)
- if [[ $OPTARG == '#'* ]]; then
- if ! is_hex "${OPTARG:1}"; then
- pearg 'unrecognized hexadecimal string'
- return 1
- fi
- if ((16$OPTARG >= COLORS)); then
- pearg 'hexadecimal must be from #0 to' \
- "#$(printf '%X' $((COLORS - 1)))"
- return 1
- fi
- C+=($((16$OPTARG)))
- elif is_N "$OPTARG" && ((OPTARG < COLORS)); then
- C+=($OPTARG)
- else
- pearg "must be an integer and from 0 to $((COLORS - 1));" \
- 'or a hexadecimal string with # prefix'
- return 1
- fi
- ;;
- f)
- if is_N "$OPTARG" && ((OPTARG >= 20 && OPTARG <= 100)); then
- f=$OPTARG
- else
- pearg 'must be an integer and from 20 to 100'
- return 1
- fi
- ;;
- s)
- if is_N "$OPTARG" && ((OPTARG >= 5 && OPTARG <= 15)); then
- s=$OPTARG
- else
- pearg 'must be an integer and from 5 to 15'
- return 1
- fi
- ;;
- r)
- if is_N "$OPTARG"; then
- r=$OPTARG
- else
- pearg 'must be a non-negative integer'
- return 1
- fi
- ;;
- R) RNDSTART=1;;
- B) BOLD=0;;
- C) NOCOLOR=1;;
- K) KEEPCT=1;;
- h)
- print_help
- exit 0
- ;;
- v) echo "$(basename -- "$0") $VERSION"
- exit 0
- ;;
- *)
- return 1
- esac
- done
-
- shift $((OPTIND - 1))
- if (($#)); then
- printf "$0: illegal arguments -- $*; no arguments allowed\n" >&2
- return 1
- fi
-}
-
-
-cleanup() {
- # clear out standard input
- read -t 0.001 && cat </dev/stdin>/dev/null
-
- tput reset # fix for konsole, see pipeseroni/pipes.sh#43
- tput rmcup
- tput cnorm
- stty echo
- printf "$SGR0"
- exit 0
-}
-
-
-resize() {
- w=$(tput cols) h=$(tput lines)
-}
-
-
-init_pipes() {
- # +_CP_init_pipes
- local i
-
- ci=$((KEEPCT ? 0 : CN * RANDOM / M))
- vi=$((KEEPCT ? 0 : VN * RANDOM / M))
- for ((i = 0; i < p; i++)); do
- ((
- n[i] = 0,
- l[i] = RNDSTART ? RANDOM % 4 : 0,
- x[i] = RNDSTART ? w * RANDOM / M : w / 2,
- y[i] = RNDSTART ? h * RANDOM / M : h / 2,
- v[i] = V[vi]
- ))
- c[i]=${E[ci]}
- ((ci = (ci + 1) % CN, vi = (vi + 1) % VN))
- done
- # -_CP_init_pipes
-}
-
-
-init_screen() {
- stty -echo
- tput smcup
- tput civis
- tput clear
- trap cleanup HUP TERM
-
- resize
- trap resize SIGWINCH
-}
-
-
-main() {
- # simple pre-check of TERM, tput's error message should be enough
- tput -T "$TERM" sgr0 >/dev/null || return $?
-
- # +_CP_init_termcap_vars
- COLORS=$(tput colors) # COLORS - 1 == maximum color index for -c argument
- SGR0=$(tput sgr0)
- SGR_BOLD=$(tput bold)
- # -_CP_init_termcap_vars
-
- parse "$@" || return $?
-
- # +_CP_init_VC
- # set default values if not by options
- ((${#V[@]})) || V=(0)
- VN=${#V[@]}
- ((${#C[@]})) || C=(1 2 3 4 5 6 7 0)
- CN=${#C[@]}
- # -_CP_init_VC
-
- # +_CP_init_E
- # generate E[] based on BOLD (SGR_BOLD), NOCOLOR, and C for each element in
- # C, a corresponding element in E[] =
- # SGR0
- # + SGR_BOLD, if BOLD
- # + tput setaf C, if !NOCOLOR
- local i
- for ((i = 0; i < CN; i++)) {
- E[i]=$SGR0
- ((BOLD)) && E[i]+=$SGR_BOLD
- ((NOCOLOR)) || E[i]+=$(tput setaf ${C[i]})
- }
- # -_CP_init_E
-
- # +_CP_init_SETS
- local i j
- for ((i = 0; i < ${#sets[@]}; i++)) {
- for ((j = 0; j < 16; j++)) {
- SETS+=("${sets[i]:j:1}")
- }
- }
- unset i j
- # -_CP_init_SETS
-
- init_screen
- init_pipes
-
- # any key press exits the loop and this script
- trap 'break 2' INT
-
- local i
- while REPLY=; do
- read -t 0.0$((1000 / f)) -n 1 2>/dev/null
- case "$REPLY" in
- P) ((s = s < 15 ? s + 1 : s));;
- O) ((s = s > 3 ? s - 1 : s));;
- F) ((f = f < 100 ? f + 1 : f));;
- D) ((f = f > 20 ? f - 1 : f));;
- B) ((BOLD = (BOLD + 1) % 2));;
- C) ((NOCOLOR = (NOCOLOR + 1) % 2));;
- K) ((KEEPCT = (KEEPCT + 1) % 2));;
- ?) break;;
- esac
- for ((i = 0; i < p; i++)); do
- # New position:
- # l[] direction = 0: up, 1: right, 2: down, 3: left
- # +_CP_newpos
- ((l[i] % 2)) && ((x[i] += -l[i] + 2, 1)) || ((y[i] += l[i] - 1))
- # -_CP_newpos
-
- # Loop on edges (change color on loop):
- # +_CP_warp
- ((!KEEPCT && (x[i] >= w || x[i] < 0 || y[i] >= h || y[i] < 0))) \
- && { c[i]=${E[CN * RANDOM / M]}; ((v[i] = V[VN * RANDOM / M])); }
- ((x[i] = (x[i] + w) % w,
- y[i] = (y[i] + h) % h))
- # -_CP_warp
-
- # new turning direction:
- # $((s - 1)) in $s, going straight, therefore n[i] == l[i];
- # and 1 in $s that pipe makes a right or left turn
- #
- # s * RANDOM / M - 1 == 0
- # n[i] == -1
- # => n[i] == l[i] + 1 or l[i] - 1
- # +_CP_newdir
- ((
- n[i] = s * RANDOM / M - 1,
- n[i] = n[i] >= 0 ? l[i] : l[i] + (2 * (RANDOM % 2) - 1),
- n[i] = (n[i] + 4) % 4
- ))
- # -_CP_newdir
-
- # Print:
- # +_CP_print
- printf '\e[%d;%dH%s%s' \
- $((y[i] + 1)) $((x[i] + 1)) ${c[i]} \
- "${SETS[v[i] * 16 + l[i] * 4 + n[i]]}"
- # -_CP_print
- l[i]=${n[i]}
- done
- ((r > 0 && t * p >= r)) && tput reset && tput civis && t=0 || ((t++))
- done
-
- cleanup
-}
-
-
-# when being sourced, $0 == bash, only invoke main when they are the same
-[[ "$0" != "$BASH_SOURCE" ]] || main "$@"