|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
#################################################################
|
|
|
|
# Script to convert ASCII art to a C string. #
|
|
|
|
# #
|
|
|
|
# Author: Maximilian Stiefel #
|
|
|
|
# Last modified: 4 April 2018 #
|
|
|
|
# CLI usage: ./convert_ascii_2_string.sh file string #
|
|
|
|
# Required PKGs: #
|
|
|
|
# #
|
|
|
|
#################################################################
|
|
|
|
|
|
|
|
#################################################################
|
|
|
|
# Vars #
|
|
|
|
#################################################################
|
|
|
|
OUTPUT="$1_converted"
|
|
|
|
NU_PARAMS=2
|
|
|
|
STR=$2
|
|
|
|
CHARS=0
|
|
|
|
LINES=0
|
|
|
|
|
|
|
|
#################################################################
|
|
|
|
# Action #
|
|
|
|
#################################################################
|
|
|
|
|
|
|
|
# Check if the expected number of parameters is given.
|
|
|
|
if [ $# != $NU_PARAMS ]
|
|
|
|
then
|
|
|
|
echo "Error: Illegal number of parameters."
|
|
|
|
echo "Correct usage is:"
|
|
|
|
echo "./convert_ascii_2_string.sh filename stringname"
|
|
|
|
exit 1;
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Check if file already exists.
|
|
|
|
if [ ! -f "$OUTPUT" ] ; then
|
|
|
|
# if not create the file
|
|
|
|
touch "$OUTPUT"
|
|
|
|
else
|
|
|
|
while true; do
|
|
|
|
read -p "File already exists. Overrite? (y/n) " yn
|
|
|
|
case $yn in
|
|
|
|
[Yy]* ) break;;
|
|
|
|
[Nn]* ) exit 1;;
|
|
|
|
* ) echo "Please answer yes (y) or no (n).";;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Loop through every line to get size of array to produce
|
|
|
|
while IFS='' read -r LINE || [[ -n "$LINE" ]]; do
|
|
|
|
LENGTH=${#LINE}
|
|
|
|
# Add one \n every line
|
|
|
|
CHARS=$((CHARS+LENGTH+1))
|
|
|
|
LINES=$((LINES+1))
|
|
|
|
done < "$1"
|
|
|
|
|
|
|
|
# Create C stuff.
|
|
|
|
echo -n "const char $STR[$CHARS] = {" > "$OUTPUT"
|
|
|
|
|
|
|
|
echo "About the input file"
|
|
|
|
echo "--------------------"
|
|
|
|
echo "Lines: $LINES"
|
|
|
|
echo "About the output string"
|
|
|
|
echo "--------------------"
|
|
|
|
echo "Chars: $CHARS"
|
|
|
|
|
|
|
|
# Loop through every line
|
|
|
|
j=0
|
|
|
|
while IFS='' read -r LINE || [[ -n "$LINE" ]]; do
|
|
|
|
LENGTH=${#LINE}
|
|
|
|
for i in $(seq "$((LENGTH-1))")
|
|
|
|
do
|
|
|
|
echo -n "'${LINE:$i:1}', " >> "$OUTPUT"
|
|
|
|
done
|
|
|
|
j=$((j+1))
|
|
|
|
if [ $j -eq $LINES ]
|
|
|
|
then
|
|
|
|
# Finish with \0
|
|
|
|
echo "'\n', '\0'};" >> "$OUTPUT"
|
|
|
|
else
|
|
|
|
echo "'\n', " >> "$OUTPUT"
|
|
|
|
fi
|
|
|
|
done < "$1"
|