#!/usr/bin/perl
#
#  This is a REAL QUICK HACK to add captions to JPG files. We'll replace it
#  with something more Rico Suave(tm) as time goes one.
#
#  Use --force to force the program to process all JPG files regardless of
#  whether an existing comment exists or not.
#
#  Use --oneline to get one line captions, ending when you hit enter.
#  (won't wait for . at last line to end it)
#
#  $Id: autocaption,v 1.4 2003/01/19 19:44:02 edwinh Exp $
#  $Name: v1_0_5 $
#
use Getopt::Long;
&GetOptions('force','oneline') or die ("Invalid flag\n");

if (scalar (@ARGV)) {
    @files = @ARGV;
}
else {
    while ($name = <*.jpg *.JPG *.jpeg *.JPEG>) {
	push (@files, $name);
    }
}

foreach $name (@files) {
    $counter++;
    printf ("Processing $name ...\n");
    $qname = quotemeta ($name);
    open (PIPE, "imageindex -caption $qname |") || die;
    $existing_caption = '';
    while (<PIPE>) {
	if (/: "(.*)"\s*$/) {
	    $existing_caption = $1;
	}
    }
    close (PIPE);
    if ($existing_caption) {
	printf ("Existing caption found: \"$existing_caption\"\n");
	if (! defined ($opt_force)) {
	    printf ("Skipping this file. Use -force to re-do caption.\n\n");
	    next;
	}
    }
    else {
	printf ("No existing caption found.\n");
    }
    if (!defined($opt_oneline)) {
	printf ("Bringing up resized image. Enter a caption with \".\" last line:\n");
	printf ("(entering \".\" will re-use any previous caption)\n");
    } else {
	printf ("Bringing up resized image. Enter a caption:\n");
	printf ("(blank will re-use any previous caption)\n");
    }
    if ($pid = fork) {
	$stdin = ''; $caption = '';
	if (!defined($opt_oneline)) {
	    while ($stdin !~ /^\.$/) {
		$caption .= $stdin;
		$stdin = <STDIN>;
	    }
	} else {
	    $stdin = <STDIN>;
	    $caption = $stdin if ($stdin ne '');
	}

	chomp ($caption);
	$caption = quotemeta ($caption);
	if ($caption ne '') {
	    printf ("Executing: imageindex -caption $qname $caption\n");
	    system ("imageindex -caption $qname $caption");
	}

	kill 15, $pid;

#	if ($counter > 1) {
#	    last;
#	}
    }
    else {
	exec 'display', '-geometry', '400x300+5+5', $name;
    }


}
