blob: 92faf3e7f5204bc7c892c829841d0ba53bcc837f [file] [log] [blame]
#!/bin/sh
#
# gifcompose --- a GIF compositor
#
# This script composes a GIF from a series of overlays described in an input
# text file.
#
if [ "$1" = "-v" ]
then
echo=echo
else
echo=:
fi
trap "rm -fr comp$$ tmp$$ btmp$$; exit 0" 0 1 2 15
mkdir comp$$;
gen="x"
while read line
do
set -- $line
postproc='n'
name=$2
case $1 in
gif)
$echo "Pasting GIF file $2.gif" 1>&2;
cat $2.gif >tmp$$
shift; shift; postproc='y' ;;
raw)
$echo "Pasting raw file $2" 1>&2;
raw2gif -s $3 $4 <$2 >tmp$$
shift; shift; shift; shift; postproc='y' ;;
rgb)
$echo "Pasting RGB file $2" 1>&2;
rgb2gif -s $3 $4 <$2 >tmp$$
shift; shift; shift; shift; postproc='y' ;;
rle)
$echo "Pasting RLE file $2" 1>&2;
rle2gif $2 >tmp$$
shift; shift; postproc='y' ;;
text)
$echo "Generating text \`$2'" 1>&2;
case "$3" in
foreground)
text2gif -t "$2" -f $4 >tmp$$;
shift; shift;;
background)
text2gif -t "$2" -c $4 $5 $6 >tmp$$;
shift; shift; shift; shift;;
*)
text2gif -t "$2" >tmp$$;;
esac
shift; shift; postproc='y' ;;
screen)
case $2 in
size) resize="$3 $4";;
position) reposition="$3 $4";;
*) echo "Unknown screen operation" 1>&2
esac;;
esac
if [ $postproc = 'y' ]
then
while [ $# != 0 ]
do
case "$1" in
at)
$echo "Positioning \`$name' at $2 $3" 1>&2
gifpos -i $2 $3 <tmp$$ >btmp$$; mv btmp$$ tmp$$;
shift; shift; shift;;
clip)
$echo "Clipping \`$name' to size $2 $3 $4 $5" 1>&2
gifclip -i $2 $3 $4 $5 <tmp$$ >btmp$$; mv btmp$$ tmp$$;
shift; shift; shift; shift; shift;;
xflip)
$echo "Flipping \`$name' around the X axis" 1>&2;
gifflip -x <tmp$$ >btmp$$; mv btmp$$ tmp$$;
shift;;
yflip)
$echo "Flipping \`$name' around the Y axis" 1>&2;
gifflip -y <tmp$$ >btmp$$; mv btmp$$ tmp$$;
shift;;
left)
$echo "Rotating \`$name' left (counterclockwise)" 1>&2;
gifflip -l <tmp$$ >btmp$$; mv btmp$$ tmp$$;
shift;;
right)
$echo "Rotating \`$name' right (clockwise)" 1>&2;
gifflip -r <tmp$$ >btmp$$; mv btmp$$ tmp$$;
shift;;
''|\#*)
break;;
*)
echo "Unknown operator \`$1'" 1>&2
shift;;
esac
done
mv tmp$$ comp$$/${gen}.gif
fi
gen="${gen}x";
done
gifasm comp$$/*.gif | gifovly -t 0 >tmp$$
if [ "$resize" ]
then
gifpos -s $resize <tmp$$ >btmp$$; mv btmp$$ tmp$$;
fi
if [ "$reposition" ]
then
gifpos -n $reposition <tmp$$ >btmp$$; mv btmp$$ tmp$$;
fi
cat tmp$$
$echo "Done."
# script ends here