#!/usr/pkg/bin/bash
#  
# This file is a part of PFS CALIBRATION package.
# ---------------------------------------------------------------------- 
# Copyright (C) 2004 Grzegorz Krawczyk, <gkrawczyk@users.sourceforge.net>
# 
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
# ---------------------------------------------------------------------- 
#
# $Id: jpeg2hdrgen,v 1.9 2013/11/10 21:10:02 rafm Exp $

LC_NUMERIC=POSIX         # ensure dot is used as the decimal separator
export LC_NUMERIC

LC_ALL=POSIX             # apparently this is necessary on Gentoo
export LC_ALL


JHEAD="jhead"                   # program for extracting exif info from jpegs

IDENTIFY="identify"             # alternative program from ImageMagics

TEST_IDENTIFY=`which $IDENTIFY 2>/dev/null` || TEST_JHEAD=`which $JHEAD 2>/dev/null`;

if [ -z "$TEST_JHEAD" ] && [ -z "$TEST_IDENTIFY" ]; then
    echo "Either 'jhead' or 'identify' (part of ImageMagic) is required to run this script." >&2
    echo "Install appropriate software, for example from:" >&2
    echo "http://www.sentex.net/~mwandel/jhead/" >&2
    exit 1;
fi

#Note: Double backslash MUST be put in front of each $ sign
AWK_PROGRAM_JHEAD=`cat <<EOF
BEGIN {
  exposure="";
  aperture="";
}

END {
  if( aperture=="" )
    aperture=1;

  if( iso_speed=="" )
    iso_speed=100;
    
  if( exposure=="" )
    printf("not recognized exif header!\n");
  else
    print exposure " " aperture " " iso_speed " 0";
}

/^Exposure time: ([0-9]*\.[0-9]) */ {
  exposure = 1/\\$3;
}

/^Aperture *: f\/([0-9]*\.[0-9]*)/ {
  aperture = substr(\\$3,3);
}

/^ISO equiv. *: ([0-9]*\.?[0-9]*)/ {
  iso_speed = \\$4;
}

EOF`

#Note: Double backslash MUST be put in front of each $ sign
AWK_PROGRAM_IDENTIFY=`cat <<EOF
BEGIN {
  exposure="";
  aperture="";
  FS="=";
}

END {
  if( aperture=="" )
    aperture=1;

  if( iso_speed=="" )
    iso_speed=100;
    
  if( exposure=="" )
    printf("not recognized exif header!\n");
  else
    print exposure " " aperture " " iso_speed " 0";
}

/^exif:ExposureTime=([0-9]+\/?[0-9]*)/ {
	split( \\$2, ex_info, "/" );
  exposure = ex_info[2] / ex_info[1];
}

/^exif:FNumber=([0-9]+\/?[0-9]*)/ {
	split( \\$2, ex_info, "/" );
  aperture = ex_info[1] / ex_info[2];;
}

/^exif:ISOSpeedRatings=([0-9]*\.?[0-9]*)/ {
  iso_speed = \\$2;
}
EOF`



while [ "$1" != "" ]; do

	if [ ! -z "$TEST_IDENTIFY" ]; then
		EXPOSURE_INFO=`$IDENTIFY -format \"%[exif:*]\" "$1" | awk "$AWK_PROGRAM_IDENTIFY"`
	else
		EXPOSURE_INFO=`$JHEAD "$1" | awk "$AWK_PROGRAM_JHEAD"`
	fi

    echo "$1" $EXPOSURE_INFO

    shift
done 
