1548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen/* mnote-olympus-entry.c 2548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * 3548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * Copyright (c) 2002-2009 Lutz Mueller <lutz@users.sourceforge.net> et. al. 4548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * 5548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * This library is free software; you can redistribute it and/or 6548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * modify it under the terms of the GNU Lesser General Public 7548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * License as published by the Free Software Foundation; either 8548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * version 2 of the License, or (at your option) any later version. 9548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * 10548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * This library is distributed in the hope that it will be useful, 11548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * but WITHOUT ANY WARRANTY; without even the implied warranty of 12548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * Lesser General Public License for more details. 14548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * 15548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * You should have received a copy of the GNU Lesser General Public 16548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * License along with this library; if not, write to the 17548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 18548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen * Boston, MA 02110-1301 USA. 19548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen */ 20548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 21548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#include <config.h> 22548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#include "mnote-olympus-entry.h" 23548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 24548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#include <stdio.h> 25548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#include <stdlib.h> 26548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#include <string.h> 27548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 28548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#include <libexif/exif-format.h> 29548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#include <libexif/exif-utils.h> 30548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#include <libexif/exif-entry.h> 31548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#include <libexif/i18n.h> 32548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 33548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define CF(format,target,v,maxlen) \ 34548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen{ \ 35548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if (format != target) { \ 36548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, \ 37548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen _("Invalid format '%s', " \ 38548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen "expected '%s'."), \ 39548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen exif_format_get_name (format), \ 40548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen exif_format_get_name (target)); \ 41548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; \ 42548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } \ 43548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen} 44548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 45548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define CF2(format,target1,target2,v,maxlen) \ 46548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen{ \ 47548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if ((format != target1) && (format != target2)) { \ 48548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, \ 49548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen _("Invalid format '%s', " \ 50548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen "expected '%s' or '%s'."), \ 51548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen exif_format_get_name (format), \ 52548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen exif_format_get_name (target1), \ 53548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen exif_format_get_name (target2)); \ 54548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; \ 55548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } \ 56548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen} 57548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 58548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define CC(number,target,v,maxlen) \ 59548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen{ \ 60548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if (number != target) { \ 61548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, \ 62548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen _("Invalid number of components (%i, " \ 63548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen "expected %i)."), (int) number, (int) target); \ 64548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; \ 65548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } \ 66548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen} 67548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 68548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define CC2(number,t1,t2,v,maxlen) \ 69548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen{ \ 70548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if ((number < t1) || (number > t2)) { \ 71548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, \ 72548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen _("Invalid number of components (%i, " \ 73548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen "expected %i or %i)."), (int) number, \ 74548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen (int) t1, (int) t2); \ 75548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; \ 76548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } \ 77548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen} 78548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 79548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define R2L(n) ((n).denominator ? (long)(n).numerator/(n).denominator : 0L) 80548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#define R2D(n) ((n).denominator ? (double)(n).numerator/(n).denominator : 0.0) 81548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 82548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissenstatic const struct { 83548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen ExifTag tag; 84548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen ExifFormat fmt; 85548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen struct { 86548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen int index; 87548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen const char *string; 88548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } elem[24]; 89548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen} items[] = { 90548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#ifndef NO_VERBOSE_TAG_DATA 91548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_NIKON_TAG_LENSTYPE, EXIF_FORMAT_BYTE, 92548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("AF non D lens")}, 93548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Manual")}, 94548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {2, N_("AF-D or AF-S lens")}, 95548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {6, N_("AF-D G lens")}, 96548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {10, N_("AF-D VR lens")}, 97548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {14, N_("AF-D G VR lens")}, 98548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 99548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_NIKON_TAG_FLASHUSED, EXIF_FORMAT_BYTE, 100548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("Flash did not fire")}, 101548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {4, N_("Flash unit unknown")}, 102548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {7, N_("Flash is external")}, 103548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {9, N_("Flash is on camera")}, 104548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 105548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_NIKON1_TAG_QUALITY, EXIF_FORMAT_SHORT, 106548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {1, N_("VGA basic")}, 107548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {2, N_("VGA normal")}, 108548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {3, N_("VGA fine")}, 109548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {4, N_("SXGA basic")}, 110548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {5, N_("SXGA normal")}, 111548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {6, N_("SXGA fine")}, 112548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {10, N_("2 Mpixel basic")}, 113548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {11, N_("2 Mpixel normal")}, 114548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {12, N_("2 Mpixel fine")}, 115548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 116548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_NIKON1_TAG_COLORMODE, EXIF_FORMAT_SHORT, 117548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {1, N_("Color")}, 118548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {2, N_("Monochrome")}, 119548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 120548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_NIKON1_TAG_IMAGEADJUSTMENT, EXIF_FORMAT_SHORT, 121548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("Normal")}, 122548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Bright+")}, 123548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {2, N_("Bright-")}, 124548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {3, N_("Contrast+")}, 125548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {4, N_("Contrast-")}, 126548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 127548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_NIKON1_TAG_CCDSENSITIVITY, EXIF_FORMAT_SHORT, 128548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("ISO 80")}, 129548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {2, N_("ISO 160")}, 130548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {4, N_("ISO 320")}, 131548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {5, N_("ISO 100")}, 132548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 133548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_NIKON1_TAG_WHITEBALANCE, EXIF_FORMAT_SHORT, 134548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("Auto")}, 135548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Preset")}, 136548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {2, N_("Daylight")}, 137548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {3, N_("Incandescence")}, 138548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {4, N_("Fluorescence")}, 139548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {5, N_("Cloudy")}, 140548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {6, N_("SpeedLight")}, 141548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 142548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_NIKON1_TAG_CONVERTER, EXIF_FORMAT_SHORT, 143548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("No fisheye")}, 144548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Fisheye on")}, 145548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 146548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_OLYMPUS_TAG_QUALITY, EXIF_FORMAT_SHORT, 147548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {1, N_("Normal, SQ")}, 148548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {2, N_("Normal, HQ")}, 149548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {3, N_("Normal, SHQ")}, 150548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {4, N_("Normal, RAW")}, 151548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {5, N_("Normal, SQ1")}, 152548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {6, N_("Normal, SQ2")}, 153548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {7, N_("Normal, super high")}, 154548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {17, N_("Normal, standard")}, 155548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0x101, N_("Fine, SQ")}, 156548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0x102, N_("Fine, HQ")}, 157548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0x103, N_("Fine, SHQ")}, 158548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0x104, N_("Fine, RAW")}, 159548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0x105, N_("Fine, SQ1")}, 160548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0x106, N_("Fine, SQ2")}, 161548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0x107, N_("Fine, super high")}, 162548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0x201, N_("Super fine, SQ")}, 163548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0x202, N_("Super fine, HQ")}, 164548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0x203, N_("Super fine, SHQ")}, 165548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0x204, N_("Super fine, RAW")}, 166548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0x205, N_("Super fine, SQ1")}, 167548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0x206, N_("Super fine, SQ2")}, 168548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0x207, N_("Super fine, super high")}, 169548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0x211, N_("Super fine, high")}, 170548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 171548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_OLYMPUS_TAG_MACRO, EXIF_FORMAT_SHORT, 172548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("No")}, 173548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Yes")}, 174548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {2, N_("Super macro")}, 175548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 176548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_OLYMPUS_TAG_BWMODE, EXIF_FORMAT_SHORT, 177548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("No")}, 178548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Yes")}, 179548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 180548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_OLYMPUS_TAG_ONETOUCHWB, EXIF_FORMAT_SHORT, 181548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("Off")}, 182548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("On")}, 183548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {2, N_("On (Preset)")}, 184548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 185548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_OLYMPUS_TAG_FLASHMODE, EXIF_FORMAT_SHORT, 186548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("Auto")}, 187548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Red-eye reduction")}, 188548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {2, N_("Fill")}, 189548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {3, N_("Off")}, 190548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 191548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_OLYMPUS_TAG_FLASHDEVICE, EXIF_FORMAT_SHORT, 192548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("None")}, 193548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Internal")}, 194548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {4, N_("External")}, 195548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {5, N_("Internal + external")}, 196548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 197548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_OLYMPUS_TAG_FOCUSRANGE, EXIF_FORMAT_SHORT, 198548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("Normal")}, 199548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Macro")}, 200548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 201548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_OLYMPUS_TAG_MANFOCUS, EXIF_FORMAT_SHORT, 202548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("Auto")}, 203548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Manual")}, 204548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 205548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_OLYMPUS_TAG_SHARPNESS, EXIF_FORMAT_SHORT, 206548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("Normal")}, 207548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Hard")}, 208548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {2, N_("Soft")}, 209548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 210548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_OLYMPUS_TAG_EXTERNALFLASHBOUNCE, EXIF_FORMAT_SHORT, 211548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("No")}, 212548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Yes")}, 213548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 214548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_OLYMPUS_TAG_CONTRAST, EXIF_FORMAT_SHORT, 215548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("Hard")}, 216548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Normal")}, 217548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {2, N_("Soft")}, 218548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 219548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_OLYMPUS_TAG_PREVIEWIMAGEVALID, EXIF_FORMAT_LONG, 220548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("No")}, 221548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Yes")}, 222548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 223548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_OLYMPUS_TAG_CCDSCANMODE, EXIF_FORMAT_SHORT, 224548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("Interlaced")}, 225548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Progressive")}, 226548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 227548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 228548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_SANYO_TAG_SEQUENTIALSHOT, EXIF_FORMAT_SHORT, 229548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("None")}, 230548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Standard")}, 231548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {2, N_("Best")}, 232548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {3, N_("Adjust exposure")}, 233548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 234548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_SANYO_TAG_FOCUSMODE, EXIF_FORMAT_SHORT, 235548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {1, N_("Spot focus")}, 236548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {2, N_("Normal focus")}, 237548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 238548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_SANYO_TAG_RECORDSHUTTERRELEASE, EXIF_FORMAT_SHORT, 239548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("Record while down")}, 240548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Press start, press stop")}, 241548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 242548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_SANYO_TAG_RESAVED, EXIF_FORMAT_SHORT, 243548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("No")}, 244548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Yes")}, 245548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 246548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_SANYO_TAG_CCDSENSITIVITY, EXIF_FORMAT_SHORT, 247548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("Auto")}, 248548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("ISO 50")}, 249548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {3, N_("ISO 100")}, 250548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {4, N_("ISO 200")}, 251548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {5, N_("ISO 400")}, 252548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 253548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_SANYO_TAG_SCENESELECT, EXIF_FORMAT_SHORT, 254548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("Off")}, 255548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("Sport")}, 256548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {2, N_("TV")}, 257548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {3, N_("Night")}, 258548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {4, N_("User 1")}, 259548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {5, N_("User 2")}, 260548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {6, N_("Lamp")}, 261548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 262548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { MNOTE_SANYO_TAG_SEQUENCESHOTINTERVAL, EXIF_FORMAT_SHORT, 263548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { {0, N_("5 frames/sec")}, 264548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {1, N_("10 frames/sec")}, 265548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {2, N_("15 frames/sec")}, 266548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {3, N_("20 frames/sec")}, 267548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen {0, NULL}}}, 268548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen#endif 269548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { 0, 0, { { 0, NULL } } } 270548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen}; 271548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 272548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissenchar * 273548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissenmnote_olympus_entry_get_value (MnoteOlympusEntry *entry, char *v, unsigned int maxlen) 274548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen{ 275548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen char buf[30]; 276548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen ExifLong vl; 277548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen ExifShort vs = 0; 278548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen ExifSShort vss = 0; 279548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen ExifRational vr, vr2; 280548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen ExifSRational vsr; 281548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen int i, j; 282548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen double r, b; 283548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 284548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if (!entry) 285548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen return (NULL); 286548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 287548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen memset (v, 0, maxlen); 288548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen maxlen--; 289548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 290548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if ((!entry->data) && (entry->components > 0)) 291548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen return (v); 292548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 293548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if ((!entry->data) && (entry->size > 0)) 294548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen return NULL; /* internal inconsistency error */ 295548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 296548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen switch (entry->tag) { 297548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 298548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen /* Nikon */ 299548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_FIRMWARE: 300548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_UNDEFINED, v, maxlen); 301548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 4, v, maxlen); 302548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vl = exif_get_long (entry->data, entry->order); 303548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if ((vl & 0xF0F0F0F0) == 0x30303030) { 304548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen memcpy (v, entry->data, MIN (maxlen, 4)); 305548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } else { 306548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, "%04lx", (long unsigned int) vl); 307548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 308548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 309548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_ISO: 310548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen); 311548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 2, v, maxlen); 312548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen /*vs = exif_get_short (entry->data, entry->order);*/ 313548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vs = exif_get_short (entry->data + 2, entry->order); 314548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, "ISO %hd", vs); 315548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 316548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_ISO2: 317548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen); 318548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 2, v, maxlen); 319548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen /*vs = exif_get_short (entry->data, entry->order);*/ 320548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vs = exif_get_short (entry->data + 2, entry->order); 321548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, "ISO2 %hd", vs); 322548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 323548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_QUALITY: 324548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_COLORMODE: 325548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_COLORMODE1: 326548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_WHITEBALANCE: 327548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_SHARPENING: 328548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_FOCUSMODE: 329548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_FLASHSETTING: 330548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_ISOSELECTION: 331548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_FLASHMODE: 332548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_IMAGEADJUSTMENT: 333548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_ADAPTER: 334548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_SATURATION2: 335548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_EPSON_TAG_SOFTWARE: 336548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_ASCII, v, maxlen); 337548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen memcpy(v, entry->data, MIN (maxlen, entry->size)); 338548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 339548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_TOTALPICTURES: 340548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_EPSON_TAG_IMAGE_WIDTH: 341548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_EPSON_TAG_IMAGE_HEIGHT: 342548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_LONG, v, maxlen); 343548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 1, v, maxlen); 344548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vl = exif_get_long (entry->data, entry->order); 345548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, "%lu", (long unsigned int) vl ); 346548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 347548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_LENS_FSTOPS: 348548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_EXPOSUREDIFF: { 349548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen unsigned char a,b,c,d; 350548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_UNDEFINED, v, maxlen); 351548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 4, v, maxlen); 352548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vl = exif_get_long (entry->data, entry->order); 353548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen a = (vl>>24)&0xff; b = (vl>>16)&0xff; c = (vl>>8)&0xff; d = (vl)&0xff; 354548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, "%.1f", c?(float)a*((float)b/(float)c):0 ); 355548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 356548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 357548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_FLASHEXPCOMPENSATION: 358548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_FLASHEXPOSUREBRACKETVAL: 359548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_UNDEFINED, v, maxlen); 360548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 4, v, maxlen); 361548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vl = exif_get_long (entry->data, entry->order); 362548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, "%.1f", ((long unsigned int) vl>>24)/6.0 ); 363548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 364548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_SATURATION: 365548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_WHITEBALANCEFINE: 366548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_HUE: 367548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_SENSORTEMPERATURE: 368548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_LENSTEMPERATURE: 369548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_SSHORT, v, maxlen); 370548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 1, v, maxlen); 371548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vs = exif_get_short (entry->data, entry->order); 372548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, "%hd", vs); 373548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 374548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_WHITEBALANCERB: 375548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen); 376548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 4, v, maxlen); 377548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vr = exif_get_rational (entry->data, entry->order); 378548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen r = R2D(vr); 379548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vr = exif_get_rational (entry->data+8, entry->order); 380548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen b = R2D(vr); 381548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, _("Red Correction %f, blue Correction %f"), r,b); 382548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 383548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_MANUALFOCUSDISTANCE: 384548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen); 385548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 1, v, maxlen); 386548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vr = exif_get_rational (entry->data, entry->order); 387548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if (!vr.numerator || !vr.denominator) { 388548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _("No manual focus selection"), maxlen); 389548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } else { 390548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen r = R2D(vr); 391548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, _("%2.2f meters"), r); 392548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 393548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 394548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_SENSORPIXELSIZE: 395548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen); 396548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 2, v, maxlen); 397548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vr = exif_get_rational (entry->data, entry->order); 398548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vr2 = exif_get_rational (entry->data+8, entry->order); 399548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen r = R2D(vr); 400548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen b = R2D(vr2); 401548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, "%2.2f x %2.2f um", r, b); 402548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 403548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_BRACKETING: 404548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF2 (entry->format, EXIF_FORMAT_BYTE, EXIF_FORMAT_SHORT, v, maxlen); 405548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 1, v, maxlen); 406548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if (EXIF_FORMAT_SHORT == entry->format) { 407548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vs = exif_get_short (entry->data, entry->order); 408548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } else { 409548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vs = entry->data[0]; 410548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 411548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, "%hd", vs); 412548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 413548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_AFFOCUSPOSITION: 414548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_UNDEFINED, v, maxlen); 415548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 4, v, maxlen); 416548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen switch ( *( entry->data+1) ) { 417548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 0: strncpy (v, _("AF position: center"), maxlen); break; 418548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 1: strncpy (v, _("AF position: top"), maxlen); break; 419548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 2: strncpy (v, _("AF position: bottom"), maxlen); break; 420548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 3: strncpy (v, _("AF position: left"), maxlen); break; 421548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 4: strncpy (v, _("AF position: right"), maxlen); break; 422548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 5: strncpy (v, _("AF position: upper-left"), maxlen); break; 423548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 6: strncpy (v, _("AF position: upper-right"), maxlen); break; 424548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 7: strncpy (v, _("AF position: lower-left"), maxlen); break; 425548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 8: strncpy (v, _("AF position: lower-right"), maxlen); break; 426548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 9: strncpy (v, _("AF position: far left"), maxlen); break; 427548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 10: strncpy (v, _("AF position: far right"), maxlen); break; 428548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen default: strncpy (v, _("Unknown AF position"), maxlen); 429548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 430548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 431548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_FLASHDEVICE: 432548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen); 433548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 2, v, maxlen); 434548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vs = exif_get_short(entry->data, entry->order); 435548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen /* search for the tag */ 436548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen for (i = 0; (items[i].tag && items[i].tag != entry->tag); i++) 437548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen ; 438548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if (!items[i].tag) { 439548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, _("Internal error (unknown value %hi)"), vs); 440548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 441548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 442548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, items[i].fmt, v, maxlen); 443548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen /* find the value */ 444548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen for (j = 0; items[i].elem[j].string && 445548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen (items[i].elem[j].index < vs); j++); 446548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if (items[i].elem[j].index != vs) { 447548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, _("Unknown value %hi"), vs); 448548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 449548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 450548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _(items[i].elem[j].string), maxlen); 451548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 452548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_DIGIZOOM: 453548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if (entry->format == EXIF_FORMAT_RATIONAL) { 454548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 1, v, maxlen); 455548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vr = exif_get_rational (entry->data, entry->order); 456548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if (!vr.numerator || !vr.denominator) { 457548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _("None"), maxlen); 458548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } else { 459548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen r = R2D(vr); 460548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, "%2.2f", r); 461548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 462548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 463548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 464548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen /* fall through to handle SHORT version of this tag */ 465548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_LENSTYPE: 466548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_FLASHUSED: 467548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON1_TAG_QUALITY: 468548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON1_TAG_COLORMODE: 469548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON1_TAG_IMAGEADJUSTMENT: 470548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON1_TAG_CCDSENSITIVITY: 471548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON1_TAG_WHITEBALANCE: 472548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON1_TAG_CONVERTER: 473548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_QUALITY: 474548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_MACRO: 475548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_BWMODE: 476548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_ONETOUCHWB: 477548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_FLASHMODE: 478548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_FOCUSRANGE: 479548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_MANFOCUS: 480548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_SHARPNESS: 481548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_EXTERNALFLASHBOUNCE: 482548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_CONTRAST: 483548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_PREVIEWIMAGEVALID: 484548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_CCDSCANMODE: 485548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_SANYO_TAG_SEQUENTIALSHOT: 486548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_SANYO_TAG_FOCUSMODE: 487548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_SANYO_TAG_RECORDSHUTTERRELEASE: 488548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_SANYO_TAG_RESAVED: 489548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_SANYO_TAG_CCDSENSITIVITY: 490548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_SANYO_TAG_SCENESELECT: 491548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_SANYO_TAG_SEQUENCESHOTINTERVAL: 492548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 1, v, maxlen); 493548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen switch (entry->format) { 494548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case EXIF_FORMAT_BYTE: 495548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case EXIF_FORMAT_UNDEFINED: 496548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vs = entry->data[0]; 497548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 498548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case EXIF_FORMAT_SHORT: 499548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vs = exif_get_short(entry->data, entry->order); 500548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 501548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen default: 502548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vs = 0; 503548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 504548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 505548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen /* search for the tag */ 506548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen for (i = 0; (items[i].tag && items[i].tag != entry->tag); i++) 507548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen ; 508548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if (!items[i].tag) { 509548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, _("Internal error (unknown value %hi)"), vs); 510548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 511548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 512548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, items[i].fmt, v, maxlen); 513548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen /* find the value */ 514548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen for (j = 0; items[i].elem[j].string && 515548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen (items[i].elem[j].index < vs); j++); 516548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if (items[i].elem[j].index != vs) { 517548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, _("Unknown value %hi"), vs); 518548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 519548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 520548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _(items[i].elem[j].string), maxlen); 521548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 522548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_NOISEREDUCTION: 523548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_SANYO_TAG_WIDERANGE: 524548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_SANYO_TAG_COLORADJUSTMENTMODE: 525548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_SANYO_TAG_QUICKSHOT: 526548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_SANYO_TAG_VOICEMEMO: 527548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_SANYO_TAG_FLICKERREDUCE: 528548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_SANYO_TAG_OPTICALZOOM: 529548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_SANYO_TAG_DIGITALZOOM: 530548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_SANYO_TAG_LIGHTSOURCESPECIAL: 531548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen); 532548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 1, v, maxlen); 533548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vs = exif_get_short (entry->data, entry->order); 534548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen switch (vs) { 535548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 0: 536548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _("Off"), maxlen); 537548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 538548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 1: 539548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _("On"), maxlen); 540548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 541548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen default: 542548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen sprintf (buf, _("Unknown %hu"), vs); 543548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncat (v, buf, maxlen - strlen (v)); 544548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 545548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 546548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 547548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_SANYO_TAG_SELFTIMER: 548548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen); 549548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 1, v, maxlen); 550548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vs = exif_get_short (entry->data, entry->order); 551548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen switch (vs) { 552548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 0: 553548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _("Off"), maxlen); 554548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 555548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 1: 556548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _("On"), maxlen); 557548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 558548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 2: 559548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _("2 sec."), maxlen); 560548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 561548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen default: 562548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen sprintf (buf, _("Unknown %hu"), vs); 563548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncat (v, buf, maxlen - strlen (v)); 564548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 565548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 566548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 567548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_LENS: 568548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen); 569548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 4, v, maxlen); 570548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { 571548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen double c,d; 572548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen unsigned long a,b; 573548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vr = exif_get_rational (entry->data, entry->order); 574548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen a = R2L(vr); 575548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vr = exif_get_rational (entry->data+8, entry->order); 576548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen b = R2L(vr); 577548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vr = exif_get_rational (entry->data+16, entry->order); 578548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen c = R2D(vr); 579548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vr = exif_get_rational (entry->data+24, entry->order); 580548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen d = R2D(vr); 581548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, "%ld-%ldmm 1:%3.1f - %3.1f",a,b,c,d); 582548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 583548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 584548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 585548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen /* Olympus */ 586548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_MODE: 587548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_LONG, v, maxlen); 588548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 3, v, maxlen); 589548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vl = exif_get_long (entry->data, entry->order); 590548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen switch (vl) { 591548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 0: 592548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _("Normal"), maxlen); 593548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 594548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 1: 595548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _("Unknown"), maxlen); 596548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 597548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 2: 598548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _("Fast"), maxlen); 599548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 600548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 3: 601548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _("Panorama"), maxlen); 602548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 603548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen default: 604548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, "%li", (long int) vl); 605548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 606548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vl = exif_get_long (entry->data + 4, entry->order); 607548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (buf, sizeof (buf), "/%li/", (long int) vl); 608548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncat (v, buf, maxlen - strlen (v)); 609548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vl = exif_get_long (entry->data + 8, entry->order); 610548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen switch (vl) { 611548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 1: 612548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncat (v, _("Left to right"), maxlen - strlen (v)); 613548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 614548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 2: 615548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncat (v, _("Right to left"), maxlen - strlen (v)); 616548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 617548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 3: 618548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncat (v, _("Bottom to top"), maxlen - strlen (v)); 619548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 620548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 4: 621548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncat (v, _("Top to bottom"), maxlen - strlen (v)); 622548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 623548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen default: 624548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (buf, sizeof (buf), "%li", 625548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen (long int) vl); 626548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncat (v, buf, maxlen - strlen (v)); 627548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 628548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 629548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_LENSDISTORTION: 630548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if (entry->format == EXIF_FORMAT_SHORT) { 631548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen /* Epson uses a single SHORT here */ 632548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 1, v, maxlen); 633548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vs = exif_get_short (entry->data, entry->order); 634548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen sprintf (buf, "%hu", vs); 635548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncat (v, buf, maxlen - strlen (v)); 636548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } else { 637548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen /* Others use an array of SSHORT here */ 638548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 6, v, maxlen); 639548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_SSHORT, v, maxlen); 640548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen for (i=0; i < (int)entry->components; ++i) { 641548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vss = exif_get_sshort (entry->data+2*i, entry->order); 642548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen sprintf (buf, "%hd ", vss); 643548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncat (v, buf, maxlen - strlen (v)); 644548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 645548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 646548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 647548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_COLORCONTROL: 648548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen); 649548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 6, v, maxlen); 650548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen for (i=0; i < (int)entry->components; ++i) { 651548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vs = exif_get_short (entry->data+2*i, entry->order); 652548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen sprintf (buf, "%hu ", vs); 653548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncat (v, buf, maxlen - strlen (v)); 654548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 655548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 656548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_VERSION: 657548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_ASCII, v, maxlen); 658548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC2 (entry->components, 5, 8, v, maxlen); 659548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, (char *)entry->data, MIN (maxlen, entry->size)); 660548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 661548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_SERIALNUMBER2: 662548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_ASCII, v, maxlen); 663548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, (char *)entry->data, MIN (maxlen, entry->size)); 664548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 665548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_INFO: 666548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_ASCII, v, maxlen); 667548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC2 (entry->components, 52, 60, v, maxlen); 668548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, (char *)entry->data, MIN (maxlen, entry->size)); 669548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 670548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_ID: 671548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_UNDEFINED, v, maxlen); 672548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 32, v, maxlen); 673548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, (char *)entry->data, MIN (maxlen, entry->size)); 674548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 675548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_UNKNOWN_4: 676548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_LONG, v, maxlen); 677548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 30, v, maxlen); 678548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen for (i=0; i < (int)entry->components; ++i) { 679548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vl = exif_get_long (entry->data+4*i, entry->order); 680548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen sprintf (buf, "%lu ", (unsigned long)vl); 681548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncat (v, buf, maxlen - strlen (v)); 682548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 683548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 684548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_FOCUSDIST: 685548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen); 686548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 1, v, maxlen); 687548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vr = exif_get_rational (entry->data, entry->order); 688548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if (!vr.numerator || !vr.denominator) { 689548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _("Unknown"), maxlen); 690548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 691548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen else { 692548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen unsigned long tmp = vr.numerator / vr.denominator; 693548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, "%li mm", tmp); 694548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 695548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 696548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_WBALANCE: 697548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen); 698548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 2, v, maxlen); 699548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vs = exif_get_short (entry->data, entry->order); 700548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen switch (vs) { 701548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 1: 702548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _("Automatic"), maxlen); 703548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 704548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 2: 705548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen { 706548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen ExifShort v2 = exif_get_short (entry->data + 2, entry->order); 707548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen unsigned long colorTemp = 0; 708548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen switch (v2) { 709548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 2: 710548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen colorTemp = 3000; 711548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 712548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 3: 713548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen colorTemp = 3700; 714548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 715548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 4: 716548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen colorTemp = 4000; 717548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 718548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 5: 719548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen colorTemp = 4500; 720548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 721548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 6: 722548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen colorTemp = 5500; 723548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 724548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 7: 725548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen colorTemp = 6500; 726548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 727548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 9: 728548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen colorTemp = 7500; 729548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 730548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 731548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if (colorTemp) { 732548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, _("Manual: %liK"), colorTemp); 733548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 734548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen else { 735548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _("Manual: unknown"), maxlen); 736548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 737548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 738548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 739548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 740548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case 3: 741548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _("One-touch"), maxlen); 742548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 743548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen default: 744548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _("Unknown"), maxlen); 745548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 746548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 747548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 748548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_REDBALANCE: 749548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_BLUEBALANCE: 750548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen); 751548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 2, v, maxlen); 752548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vs = exif_get_short (entry->data, entry->order); 753548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, "%hu ", vs); 754548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vs = exif_get_short (entry->data + 2, entry->order); 755548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen sprintf (buf, "%hu", vs); 756548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncat (v, buf, maxlen - strlen (v)); 757548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 758548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_BLACKLEVEL: 759548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_IMAGEBOUNDARY: 760548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 4, v, maxlen); 761548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen /* Fall through to COLORMATRIX */ 762548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_COLORMATRIX: 763548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen); 764548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if (entry->tag == MNOTE_OLYMPUS_TAG_COLORMATRIX) 765548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 9, v, maxlen); 766548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen for (i=0; i < (int)entry->components; ++i) { 767548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vs = exif_get_short (entry->data+2*i, entry->order); 768548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen sprintf (buf, "%hu ", vs); 769548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncat (v, buf, maxlen - strlen (v)); 770548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 771548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 772548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON1_TAG_FOCUS: 773548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON_TAG_DIGITALZOOM: 774548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_NIKON1_TAG_DIGITALZOOM: 775548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case MNOTE_OLYMPUS_TAG_FOCALPLANEDIAGONAL: 776548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen); 777548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen /* Fall through to default handler for display */ 778548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen default: 779548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen switch (entry->format) { 780548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case EXIF_FORMAT_ASCII: 781548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, (char *)entry->data, MIN (maxlen, entry->size)); 782548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 783548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case EXIF_FORMAT_SHORT: 784548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 1, v, maxlen); 785548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vs = exif_get_short (entry->data, entry->order); 786548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, "%hu", vs); 787548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 788548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case EXIF_FORMAT_LONG: 789548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 1, v, maxlen); 790548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vl = exif_get_long (entry->data, entry->order); 791548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, "%li", (long int) vl); 792548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 793548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case EXIF_FORMAT_RATIONAL: 794548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 1, v, maxlen); 795548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vr = exif_get_rational (entry->data, entry->order); 796548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if (!vr.denominator) { 797548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _("Infinite"), maxlen); 798548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } else { 799548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen r = R2D(vr); 800548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, "%2.3f", r); 801548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 802548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 803548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case EXIF_FORMAT_SRATIONAL: 804548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen CC (entry->components, 1, v, maxlen); 805548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen vsr = exif_get_srational (entry->data, entry->order); 806548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen if (!vsr.denominator) { 807548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncpy (v, _("Infinite"), maxlen); 808548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } else { 809548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen r = R2D(vsr); 810548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, "%2.3f", r); 811548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 812548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 813548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen case EXIF_FORMAT_UNDEFINED: 814548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen default: 815548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen snprintf (v, maxlen, _("%i bytes unknown data: "), 816548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen entry->size); 817548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen for (i = 0; i < (int)entry->size; i++) { 818548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen sprintf (buf, "%02x", entry->data[i]); 819548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen strncat (v, buf, maxlen - strlen (v)); 820548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 821548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 822548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 823548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen break; 824548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen } 825548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen 826548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen return (v); 827548dde4863e9a2315e3f327efe63ff55949addb8Marco Nelissen} 828