#!/bin/bash
######################################################################
#Copyright (C) 2025 Kris Occhipinti
#https://filmsbykris.com
#
#This program is free software: you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation version 3 of the License.
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU General Public License for more details.
#You should have received a copy of the GNU General Public License
#along with this program. If not, see .
######################################################################
#prints give file one character at a time
#like a typewriter
# fatal uses SIGUSR1 to allow clean fatal errors
trap "exit 1" 10
PROC=$$
function error() {
red=$(echo -en "\e[31m")
normal=$(echo -en "\e[0m")
echo -e "${red}$@${normal}" >&2
# exit 1
kill -10 $PROC
}
#check if there is an file givin or standard input passed
[[ -z "$1" ]] && [[ -t 0 ]] && error "Input Needed."
#if no file then read standard input
[[ $1 ]] || read -r -d '' text
# if file is given and exists set it's contact as text
[[ $1 ]] && [[ -f $1 ]] && text="$(<$1)"
[[ $text ]] || error "No Text Given"
function typetext() {
#Read each file one line at a time
while read l; do
#read each line one Character at a time
for ((i = 0; i < ${#l}; i++)); do
echo -n "${l:$i:1}"
sleep .01
done
#add new line char
echo ""
done
exit
}
#pass text to type function
echo "$text" | typetext