combine the two files into one and create a directory with languages

This commit is contained in:
alpheratz0 2021-11-20 00:57:48 -03:00
parent bfea545af6
commit 02eb365650
6 changed files with 184 additions and 143 deletions

View file

@ -1,5 +1,7 @@
FROM alpine:latest
COPY tree-EN.sh /tree-EN.sh
RUN apk add --update ncurses bash
RUN mkdir /langs
COPY langs /langs
COPY tree.sh /tree.sh
RUN apk add --update ncurses grep bash
ENV TERM=xterm-256color
CMD ["bash","/tree-EN.sh"]
CMD ["bash","/tree.sh"]

5
langs/en Normal file
View file

@ -0,0 +1,5 @@
#!/bin/bash
MERRY_CHRISTMAS='MERRY CHRISTMAS'
AND_LOTS_OF_CODE_IN_NEW_YEAR="And lots of CODE in $(($(date +'%Y')+1))"
CODE='CODE'

5
langs/es Normal file
View file

@ -0,0 +1,5 @@
#!/bin/bash
MERRY_CHRISTMAS='FELICES FIESTAS'
AND_LOTS_OF_CODE_IN_NEW_YEAR="Y mucho CODIGO en $(($(date +'%Y')+1))"
CODE='CODIGO'

View file

@ -1,70 +0,0 @@
#!/bin/bash
trap "tput reset; tput cnorm; exit" 2
clear
tput civis
lin=2
col=$(($(tput cols) / 2))
c=$((col-1))
est=$((c-2))
color=0
tput setaf 2; tput bold
# Tree
for ((i=1; i<20; i+=2))
{
tput cup $lin $col
for ((j=1; j<=i; j++))
{
echo -n \*
}
let lin++
let col--
}
tput sgr0; tput setaf 3
# Trunk
for ((i=1; i<=2; i++))
{
tput cup $((lin++)) $c
echo 'mWm'
}
new_year=$(date +'%Y')
let new_year++
tput setaf 1; tput bold
tput cup $lin $((c - 6)); echo MERRY CHRISTMAS
tput cup $((lin + 1)) $((c - 10)); echo And lots of CODE in $new_year
let c++
k=1
# Lights and decorations
while true; do
for ((i=1; i<=35; i++)) {
# Turn off the lights
[ $k -gt 1 ] && {
tput setaf 2; tput bold
tput cup ${line[$[k-1]$i]} ${column[$[k-1]$i]}; echo \*
unset line[$[k-1]$i]; unset column[$[k-1]$i] # Array cleanup
}
li=$((RANDOM % 9 + 3))
start=$((c-li+2))
co=$((RANDOM % (li-2) * 2 + 1 + start))
tput setaf $color; tput bold # Switch colors
tput cup $li $co
echo o
line[$k$i]=$li
column[$k$i]=$co
color=$(((color+1)%8))
# Flashing text
sh=1
for l in C O D E
do
tput cup $((lin+1)) $((c+sh))
echo $l
let sh++
sleep 0.01
done
}
k=$((k % 2 + 1))
done

View file

@ -1,70 +0,0 @@
#!/bin/bash
trap "tput reset; tput cnorm; exit" 2
clear
tput civis
lin=2
col=$(($(tput cols) / 2))
c=$((col-1))
est=$((c-2))
color=0
tput setaf 2; tput bold
# Tree
for ((i=1; i<20; i+=2))
{
tput cup $lin $col
for ((j=1; j<=i; j++))
{
echo -n \*
}
let lin++
let col--
}
tput sgr0; tput setaf 3
# Trunk
for ((i=1; i<=2; i++))
{
tput cup $((lin++)) $c
echo 'mWm'
}
new_year=$(date +'%Y')
let new_year++
tput setaf 1; tput bold
tput cup $lin $((c - 6)); echo FELICES FIESTAS
tput cup $((lin + 1)) $((c - 9)); echo Y mucho CODIGO en $new_year
let c++
k=1
# Lights and decorations
while true; do
for ((i=1; i<=35; i++)) {
# Turn off the lights
[ $k -gt 1 ] && {
tput setaf 2; tput bold
tput cup ${line[$[k-1]$i]} ${column[$[k-1]$i]}; echo \*
unset line[$[k-1]$i]; unset column[$[k-1]$i] # Array cleanup
}
li=$((RANDOM % 9 + 3))
start=$((c-li+2))
co=$((RANDOM % (li-2) * 2 + 1 + start))
tput setaf $color; tput bold # Switch colors
tput cup $li $co
echo o
line[$k$i]=$li
column[$k$i]=$co
color=$(((color+1)%8))
# Flashing text
sh=1
for l in C O D I G O
do
tput cup $((lin+1)) $((c-3+sh))
echo $l
let sh++
sleep 0.01
done
}
k=$((k % 2 + 1))
done

169
tree.sh Executable file
View file

@ -0,0 +1,169 @@
#!/bin/bash
trap onexit 2
START_LINE=2
CROWN_HEIGHT=10
TRUNK_HEIGHT=2
MSG_LANG=en
CENTER=$(($(tput cols)/2))
function main() {
parsed_args=$(getopt -o l:Lh -l language,list-languages,help -n 'tree.sh' -- "$@")
getopt_exit_code=$?
if [ $getopt_exit_code -ne 0 ] ; then
exit 1
fi
eval set -- "$parsed_args"
while :; do
case "$1" in
-h | --help ) show_help; exit 1 ;;
-L | --list-languages ) listlangs; exit ;;
-l | --language ) MSG_LANG="$2"; shift 2 ;;
-- ) shift; break ;;
* ) break ;;
esac
done
validate_language && source ./langs/$MSG_LANG
empty_screen
show_tree_crown
show_tree_trunk
show_messages
animate
}
function listlangs() {
cat << EOF
Code Language
---- --------
es English (default)
en Spanish
EOF
}
function validate_language() {
if [ $(echo -n "$MSG_LANG" | wc -c) -ne 2 ] || [ ! -f "./langs/$MSG_LANG" ] ; then
err "language code $MSG_LANG isnt supported"
fi
}
function empty_screen() {
clear
tput civis
}
function show_tree_crown() {
tput setaf 2
tput bold
for i in $(seq 1 $CROWN_HEIGHT); do
tput cup $((START_LINE + i - 1)) $((CENTER - i + 1))
for j in $(seq 1 $(((i-1)*2 + 1))); do
echo -n '*'
done
done
}
function show_tree_trunk() {
tput sgr0
tput setaf 3
for i in $(seq 1 $TRUNK_HEIGHT); do
tput cup $((START_LINE + CROWN_HEIGHT + i - 1)) $((CENTER - 1))
echo 'mWm'
done
}
function show_messages() {
tput setaf 1
tput bold
mc_length=$(echo -n "$MERRY_CHRISTMAS" | wc -c)
loc_length=$(echo -n "$AND_LOTS_OF_CODE_IN_NEW_YEAR" | wc -c)
tput cup $((START_LINE + CROWN_HEIGHT + TRUNK_HEIGHT)) $((CENTER - mc_length / 2))
echo $MERRY_CHRISTMAS
tput cup $((START_LINE + CROWN_HEIGHT + TRUNK_HEIGHT + 1)) $((CENTER - loc_length / 2))
echo $AND_LOTS_OF_CODE_IN_NEW_YEAR
}
function animate() {
color=0
turn_off=false
code_index=$(echo "$AND_LOTS_OF_CODE_IN_NEW_YEAR" | grep "$CODE" -bo | cut -d ':' -f1)
loc_length=$(echo -n "$AND_LOTS_OF_CODE_IN_NEW_YEAR" | wc -c)
xmem=()
ymem=()
# lights and decorations
while :; do
for i in $(seq 1 36); do
if $turn_off ; then
tput setaf 2
tput bold
tput cup ${ymem[$i]} ${xmem[$i]}
unset xmem[$i]
unset ymem[$i]
echo -n '*'
fi
y=$(((RANDOM % (CROWN_HEIGHT - 1)) + 1))
x=$((((RANDOM % y) + 1) * 2 - 1))
ymem[$i]=$((START_LINE + y))
xmem[$i]=$((CENTER - y + x))
tput setaf $color
tput bold
tput cup ${ymem[$i]} ${xmem[$i]}
echo o
color=$(((color + 1) % 8))
cpos=0
for c in $(echo -n "$CODE" | grep -o .); do
tput cup $((START_LINE + CROWN_HEIGHT + TRUNK_HEIGHT + 1)) $(((CENTER - loc_length / 2) + code_index + cpos))
echo -n $c
cpos=$((cpos + 1))
sleep 0.01
done
done
$turn_off &&
turn_off=false ||
turn_off=true
done
}
function err() {
printf "tree.sh: %s\n" "$@" >&2
exit 1
}
function show_help() {
echo Usage: tree.sh [ -hL ] [ -l language_code ]
echo Options are:
echo ' -l | --language uses the specified language (english default)'
echo ' -L | --list-languages list all supported languages'
echo ' -h | --help display this message and exit'
}
function onexit() {
tput reset
tput cnorm
exit
}
main "$@"