| #!/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 |