I'm writing a script to merge the xkcd webcomic tiles for comic 1110. So far, I have written about 100 lines, and instead of doing each quadrant of the image separately, I've decided to use functions to do this, repeating for every quadrant and using variables for each quadrant to make the function act differently each time. My problem is, I'm having trouble using variables for the for loop expressions, it goes "line 8: ``eval "$a"`': not a valid identifier". This is what I have so far.
PS: I know I'm designated this as PHP, but that's only to get syntax highlighting, since php appears to highlight it the same way.
#!/bin/bash
# Date Created: September 20th, 2012
# Created by Jonathan Bondhus - https://github.com/jbondhus
# Credit to Andreas Reichinger for analysis of image tile placement, xkcd.com for comic. Used ImageMagick code from Antonio Frascarelli.
#
# This script will merge the files from xkcd comic number 1110, "Click and Drag".
function function_join() {
echo "#";
if [[ quadrant -eq 1 ]]; then
echo "# First Quadrant:"; # Join together the first quadrant
quadrantName="first"
function_quadrant
else
if [[ quadrant -eq 2 ]]; then
echo "# Second Quadrant:"; # Join together the second quadrant
quadrantName="second"
function_quadrant
else
if [[ quadrant -eq 3 ]]; then
echo "# Third Quadrant:"; # Join together the third quadrant
quadrantName="third"
function_quadrant
else
if [[ quadrant -eq 4 ]]; then
echo "# Fourth Quadrant:"; # Join together the fourth quadrant
quadrantName="fourth"
function_quadrant
fi
fi
fi
fi
echo "#";
for `eval "$a"`;
do
echo "# row number "$n" ...";
convert $b;
for `eval "$c"`;
do
if [ $d ]; # If the tile file doesn't exist, an empty square will be used.
then convert $e;
else convert $f;
fi;
done;
convert $g; # Append the image onto the current quadrant
rm -f $h;
echo "# ... OK";
echo "#";
done;
}
function function_quadrant() {
if [[ quadrant -eq 1 ]]; then # Set the variables for the first quadrant
a='((n=$north; n>=1)); n--'
b='-size 0x1 xc:white resultn$n''w.png'
c='((w=$west; w>=1; w--))'
d='-e $n''n$w''w.png'
e='+append resultn$n''w.png $n''n$w''w.png resultn$n''w.png'
f='+append resultn$n''w.png _blank.png resultn$n''w.png'
g='-append $quadrantNameQuadrant.png resultn$n''w.png $quadrantNameQuadrant.png'
h='resultn$n''w.png'
else
if [[ quadrant -eq 2 ]]; then
a='n=$north; n>=1; n--'
b='-size 0x1 xc:white resultn$n''e.png'
c='e=$east; e<=20; e++'
d='-e $n''n$e''e.png'
e='+append resultn$n''e.png $n''n$e''e.png resultn$n''e.png'
f='+append resultn$n''e.png _blank.png resultn$n''e.png'
g='-append secondQuadrant.png resultn$n''e.png secondQuadrant.png'
h='resultn$n''e.png'
else
if [[ quadrant -eq 3 ]]; then
a='s=1; s<=$south; s++'
b='-size 0x1 xc:black results$s''w.png'
c='w=$west; w>=1; w--'
d='-e $s''s$w''w.png'
e='+append results$s''w.png $s''s$w''w.png results$s''w.png'
f='+append results$s''w.png _black.png results$s''w.png'
g='-append thirdQuadrant.png results$s''w.png thirdQuadrant.png'
h='results$s''w.png'
else
if [[ quadrant -eq 4 ]]; then
a='s=1; s<=$south; s++'
b='-size 0x1 xc:black results$s''e.png'
c='e=1; e<=20; e++'
d='-e $s''s$e''e.png'
e='+append results$s''e.png $s''s$e''e.png results$s''e.png'
f='+append results$s''e.png _black.png results$s''e.png'
g='-append fourthQuadrant.png results$s''e.png fourthQuadrant.png'
h='results$s''e1.png'
else # If more than 4 quadrants, just to be safe, exit
exit 1
fi
fi
fi
fi
}
for (( quadrant = 0; quadrant < 4; quadrant++ )); do
function_join
done
echo "#################################"
echo "Joining completed!"
echo "#################################"
exit 0