00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <config.h>
00022 #include "mnote-olympus-entry.h"
00023
00024 #include <stdio.h>
00025 #include <stdlib.h>
00026 #include <string.h>
00027
00028 #include <libexif/exif-format.h>
00029 #include <libexif/exif-utils.h>
00030 #include <libexif/exif-entry.h>
00031 #include <libexif/i18n.h>
00032
00033 #define CF(format,target,v,maxlen) \
00034 { \
00035 if (format != target) { \
00036 snprintf (v, maxlen, \
00037 _("Invalid format '%s', " \
00038 "expected '%s'."), \
00039 exif_format_get_name (format), \
00040 exif_format_get_name (target)); \
00041 break; \
00042 } \
00043 }
00044
00045 #define CC(number,target,v,maxlen) \
00046 { \
00047 if (number != target) { \
00048 snprintf (v, maxlen, \
00049 _("Invalid number of components (%i, " \
00050 "expected %i)."), (int) number, (int) target); \
00051 break; \
00052 } \
00053 }
00054
00055 #define CC2(number,t1,t2,v,maxlen) \
00056 { \
00057 if ((number != t1) && (number != t2)) { \
00058 snprintf (v, maxlen, \
00059 _("Invalid number of components (%i, " \
00060 "expected %i or %i)."), (int) number, \
00061 (int) t1, (int) t2); \
00062 break; \
00063 } \
00064 }
00065
00066 static struct {
00067 ExifTag tag;
00068 ExifFormat fmt;
00069 struct {
00070 int index;
00071 const char *string;
00072 } elem[10];
00073 } items[] = {
00074 { MNOTE_NIKON_TAG_LENSTYPE, EXIF_FORMAT_BYTE,
00075 { {0, N_("AF non D Lens")},
00076 {1, N_("Manual")},
00077 {2, N_("AF-D or AF-S Lens")},
00078 {6, N_("AF-D G Lens")},
00079 {10, N_("AF-D VR Lens")},
00080 {0, NULL}}},
00081 { MNOTE_NIKON_TAG_FLASHUSED, EXIF_FORMAT_BYTE,
00082 { {0, N_("Flash did not fire")},
00083 {4, N_("Flash unit unknown")},
00084 {7, N_("Flash is external")},
00085 {9, N_("Flash is on Camera")},
00086 {0, NULL}}},
00087 { MNOTE_NIKON1_TAG_QUALITY, EXIF_FORMAT_SHORT,
00088 { {1, N_("VGA Basic")},
00089 {2, N_("VGA Normal")},
00090 {3, N_("VGA Fine")},
00091 {4, N_("SXGA Basic")},
00092 {5, N_("SXGA Normal")},
00093 {6, N_("SXGA Fine")},
00094 {10, N_("2 MPixel Basic")},
00095 {11, N_("2 MPixel Normal")},
00096 {12, N_("2 MPixel Fine")},
00097 {0, NULL}}},
00098 { MNOTE_NIKON1_TAG_COLORMODE, EXIF_FORMAT_SHORT,
00099 { {1, N_("Color")},
00100 {2, N_("Monochrome")},
00101 {0, NULL}}},
00102 { MNOTE_NIKON1_TAG_IMAGEADJUSTMENT, EXIF_FORMAT_SHORT,
00103 { {0, N_("Normal")},
00104 {1, N_("Bright+")},
00105 {2, N_("Bright-")},
00106 {3, N_("Contrast+")},
00107 {4, N_("Contrast-")},
00108 {0, NULL}}},
00109 { MNOTE_NIKON1_TAG_CCDSENSITIVITY, EXIF_FORMAT_SHORT,
00110 { {0, N_("ISO80")},
00111 {2, N_("ISO160")},
00112 {4, N_("ISO320")},
00113 {5, N_("ISO100")},
00114 {0, NULL}}},
00115 { MNOTE_NIKON1_TAG_WHITEBALANCE, EXIF_FORMAT_SHORT,
00116 { {0, N_("Auto")},
00117 {1, N_("Preset")},
00118 {2, N_("Daylight")},
00119 {3, N_("Incandescence")},
00120 {4, N_("Fluorescence")},
00121 {5, N_("Cloudy")},
00122 {6, N_("SpeedLight")},
00123 {0, NULL}}},
00124 { MNOTE_NIKON1_TAG_CONVERTER, EXIF_FORMAT_SHORT,
00125 { {0, N_("No Fisheye")},
00126 {1, N_("Fisheye On")},
00127 {0, NULL}}},
00128 { MNOTE_OLYMPUS_TAG_QUALITY, EXIF_FORMAT_SHORT,
00129 { {1, N_("SQ")},
00130 {2, N_("HQ")},
00131 {3, N_("SHQ")},
00132 {0, NULL}}},
00133 { MNOTE_OLYMPUS_TAG_MACRO, EXIF_FORMAT_SHORT,
00134 { {0, N_("No")},
00135 {1, N_("Yes")},
00136 {0, NULL}}},
00137 { MNOTE_OLYMPUS_TAG_DIGIZOOM, EXIF_FORMAT_SHORT,
00138 { {0, N_("1x")},
00139 {2, N_("2x")},
00140 {0, NULL}}},
00141 { MNOTE_OLYMPUS_TAG_FLASHMODE, EXIF_FORMAT_SHORT,
00142 { {0, N_("Auto")},
00143 {1, N_("Red-eye reduction")},
00144 {2, N_("Fill")},
00145 {3, N_("Off")},
00146 {0, NULL}}},
00147 { MNOTE_OLYMPUS_TAG_SHARPNESS, EXIF_FORMAT_SHORT,
00148 { {0, N_("Normal")},
00149 {1, N_("Hard")},
00150 {2, N_("Soft")},
00151 {0, NULL}}},
00152 { MNOTE_OLYMPUS_TAG_CONTRAST, EXIF_FORMAT_SHORT,
00153 { {0, N_("Hard")},
00154 {1, N_("Normal")},
00155 {2, N_("Soft")},
00156 {0, NULL}}},
00157 { MNOTE_OLYMPUS_TAG_MANFOCUS, EXIF_FORMAT_SHORT,
00158 { {0, N_("No")},
00159 {1, N_("Yes")},
00160 {0, NULL}}},
00161 { 0, }
00162 };
00163
00164 char *
00165 mnote_olympus_entry_get_value (MnoteOlympusEntry *entry, char *v, unsigned int maxlen)
00166 {
00167 char buf[30];
00168 ExifLong vl;
00169 ExifShort vs = 0;
00170 ExifRational vr, vr2;
00171 int i, j;
00172 double r, b;
00173
00174 if (!entry)
00175 return (NULL);
00176
00177 memset (v, 0, maxlen);
00178 maxlen--;
00179
00180 if ((!entry->data) && (entry->components > 0)) return (v);
00181
00182 switch (entry->tag) {
00183
00184
00185 case MNOTE_NIKON_TAG_FIRMWARE:
00186 CF (entry->format, EXIF_FORMAT_UNDEFINED, v, maxlen);
00187 CC (entry->components, 4, v, maxlen);
00188 vl = exif_get_long (entry->data, entry->order);
00189 if ((vl & 0xF0F0F0F0) == 0x30303030) {
00190 memcpy (v, entry->data, MIN (maxlen, 4));
00191 } else {
00192 snprintf (v, maxlen, "%04lx", (long unsigned int) vl);
00193 }
00194 break;
00195 case MNOTE_NIKON_TAG_ISO:
00196 CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen);
00197 CC (entry->components, 2, v, maxlen);
00198
00199 vs = exif_get_short (entry->data + 2, entry->order);
00200 snprintf (v, maxlen, "ISO %hd", vs);
00201 break;
00202 case MNOTE_NIKON_TAG_ISO2:
00203 CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen);
00204 CC (entry->components, 2, v, maxlen);
00205
00206 vs = exif_get_short (entry->data + 2, entry->order);
00207 snprintf (v, maxlen, "ISO2 %hd", vs);
00208 break;
00209 case MNOTE_NIKON_TAG_QUALITY:
00210 CF (entry->format, EXIF_FORMAT_ASCII, v, maxlen);
00211
00212
00213
00214
00215 memcpy(v, entry->data ,entry->components);
00216
00217 break;
00218 case MNOTE_NIKON_TAG_COLORMODE:
00219 case MNOTE_NIKON_TAG_COLORMODE1:
00220 case MNOTE_NIKON_TAG_WHITEBALANCE:
00221 case MNOTE_NIKON_TAG_SHARPENING:
00222 case MNOTE_NIKON_TAG_FOCUSMODE:
00223 case MNOTE_NIKON_TAG_FLASHSETTING:
00224 case MNOTE_NIKON_TAG_ISOSELECTION:
00225 case MNOTE_NIKON_TAG_FLASHMODE:
00226 case MNOTE_NIKON_TAG_IMAGEADJUSTMENT:
00227 case MNOTE_NIKON_TAG_ADAPTER:
00228 case MNOTE_NIKON_TAG_SATURATION2:
00229 CF (entry->format, EXIF_FORMAT_ASCII, v, maxlen);
00230 memcpy(v, entry->data, MIN (maxlen, entry->components));
00231 break;
00232 case MNOTE_NIKON_TAG_TOTALPICTURES:
00233 CF (entry->format, EXIF_FORMAT_LONG, v, maxlen);
00234 CC (entry->components, 1, v, maxlen);
00235 vl = exif_get_long (entry->data, entry->order);
00236 snprintf (v, maxlen, "%lu", (long unsigned int) vl );
00237 break;
00238 case MNOTE_NIKON_TAG_LENS_FSTOPS:
00239 case MNOTE_NIKON_TAG_EXPOSUREDIFF: {
00240 unsigned char a,b,c,d;
00241 CF (entry->format, EXIF_FORMAT_UNDEFINED, v, maxlen);
00242 CC (entry->components, 4, v, maxlen);
00243 vl = exif_get_long (entry->data, entry->order);
00244 a = (vl>>24)&0xff; b = (vl>>16)&0xff; c = (vl>>8)&0xff; d = (vl)&0xff;
00245 snprintf (v, maxlen, "%.1f", c?(float)a*((float)b/(float)c):0 );
00246 break;
00247 }
00248 case MNOTE_NIKON_TAG_FLASHEXPCOMPENSATION:
00249 case MNOTE_NIKON_TAG_FLASHEXPOSUREBRACKETVAL:
00250 CF (entry->format, EXIF_FORMAT_UNDEFINED, v, maxlen);
00251 CC (entry->components, 4, v, maxlen);
00252 vl = exif_get_long (entry->data, entry->order);
00253 snprintf (v, maxlen, "%.1f", ((long unsigned int) vl>>24)/6.0 );
00254 break;
00255 case MNOTE_NIKON_TAG_SATURATION:
00256 case MNOTE_NIKON_TAG_WHITEBALANCEFINE:
00257 CF (entry->format, EXIF_FORMAT_SSHORT, v, maxlen);
00258 CC (entry->components, 1, v, maxlen);
00259 vs = exif_get_short (entry->data, entry->order);
00260 snprintf (v, maxlen, "%hd", vs);
00261 break;
00262 case MNOTE_NIKON_TAG_WHITEBALANCERB:
00263 CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen);
00264 CC (entry->components, 4, v, maxlen);
00265 vr = exif_get_rational (entry->data, entry->order);
00266 r = (double)vr.numerator / vr.denominator;
00267 vr = exif_get_rational (entry->data+8, entry->order);
00268 b = (double)vr.numerator / vr.denominator;
00269
00270 snprintf (v, maxlen, _("Red Correction %f, Blue Correction %f"), r,b);
00271 break;
00272 case MNOTE_NIKON_TAG_MANUALFOCUSDISTANCE:
00273 CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen);
00274 CC (entry->components, 1, v, maxlen);
00275 vr = exif_get_rational (entry->data, entry->order);
00276 if (vr.numerator) {
00277 r = (double)vr.numerator / vr.denominator;
00278 snprintf (v, maxlen, _("%2.2f meters"), r);
00279 } else {
00280 strncpy (v, _("No manual focus selection"), maxlen);
00281 }
00282 break;
00283 case MNOTE_NIKON_TAG_DIGITALZOOM:
00284 case MNOTE_NIKON1_TAG_DIGITALZOOM:
00285 CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen);
00286 CC (entry->components, 1, v, maxlen);
00287 vr = exif_get_rational (entry->data, entry->order);
00288 r = (double)vr.numerator / vr.denominator;
00289 snprintf (v, maxlen, "%2.2f", r);
00290 break;
00291 case MNOTE_NIKON_TAG_SENSORPIXELSIZE:
00292 CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen);
00293 CC (entry->components, 2, v, maxlen);
00294 vr = exif_get_rational (entry->data, entry->order);
00295 vr2 = exif_get_rational (entry->data+8, entry->order);
00296 r = (double)vr.numerator / vr.denominator;
00297 b = (double)vr2.numerator / vr2.denominator;
00298 snprintf (v, maxlen, "%2.2f x %2.2f um", r, b);
00299 break;
00300 case MNOTE_NIKON_TAG_HUE:
00301 CF (entry->format, EXIF_FORMAT_SSHORT, v, maxlen);
00302 CC (entry->components, 1, v, maxlen);
00303 vs = exif_get_short (entry->data, entry->order);
00304 snprintf (v, maxlen, "%hd", vs);
00305 break;
00306 case MNOTE_NIKON_TAG_AFFOCUSPOSITION:
00307 CF (entry->format, EXIF_FORMAT_UNDEFINED, v, maxlen);
00308 CC (entry->components, 4, v, maxlen);
00309 switch ( *( entry->data+1) ) {
00310 case 0: strncpy (v, _("AF Position: Center"), maxlen); break;
00311 case 1: strncpy (v, _("AF Position: Top"), maxlen); break;
00312 case 2: strncpy (v, _("AF Position: Bottom"), maxlen); break;
00313 case 3: strncpy (v, _("AF Position: Left"), maxlen); break;
00314 case 4: strncpy (v, _("AF Position: Right"), maxlen); break;
00315 case 5: strncpy (v, _("AF Position: Upper-left"), maxlen); break;
00316 case 6: strncpy (v, _("AF Position: Upper-right"), maxlen); break;
00317 case 7: strncpy (v, _("AF Position: Lower-left"), maxlen); break;
00318 case 8: strncpy (v, _("AF Position: Lower-right"), maxlen); break;
00319 case 9: strncpy (v, _("AF Position: Far Left"), maxlen); break;
00320 case 10: strncpy (v, _("AF Position: Far Right"), maxlen); break;
00321 default: strncpy (v, _("Unknown AF Position"), maxlen);
00322 }
00323 break;
00324 case MNOTE_OLYMPUS_TAG_DIGIZOOM:
00325 if (entry->format == EXIF_FORMAT_RATIONAL) {
00326 CC (entry->components, 1, v, maxlen);
00327 vr = exif_get_rational (entry->data, entry->order);
00328 r = (double)vr.numerator / vr.denominator;
00329 if (!vr.numerator) {
00330 strncpy (v, _("None"), maxlen);
00331 } else {
00332 snprintf (v, maxlen, "%2.2f", r);
00333 }
00334 break;
00335 }
00336
00337 case MNOTE_NIKON_TAG_LENSTYPE:
00338 case MNOTE_NIKON_TAG_FLASHUSED:
00339 case MNOTE_NIKON1_TAG_QUALITY:
00340 case MNOTE_NIKON1_TAG_COLORMODE:
00341 case MNOTE_NIKON1_TAG_IMAGEADJUSTMENT:
00342 case MNOTE_NIKON1_TAG_CCDSENSITIVITY:
00343 case MNOTE_NIKON1_TAG_WHITEBALANCE:
00344 case MNOTE_NIKON1_TAG_CONVERTER:
00345 case MNOTE_OLYMPUS_TAG_QUALITY:
00346 case MNOTE_OLYMPUS_TAG_MACRO:
00347 case MNOTE_OLYMPUS_TAG_FLASHMODE:
00348 case MNOTE_OLYMPUS_TAG_SHARPNESS:
00349 case MNOTE_OLYMPUS_TAG_CONTRAST:
00350 case MNOTE_OLYMPUS_TAG_MANFOCUS:
00351
00352 for (i = 0; (items[i].tag && items[i].tag != entry->tag); i++);
00353 if (!items[i].tag) {
00354 strncpy (v, _("Internal error"), maxlen);
00355 break;
00356 }
00357 CF (entry->format, items[i].fmt, v, maxlen);
00358 CC (entry->components, 1, v, maxlen);
00359 switch (entry->format) {
00360 case EXIF_FORMAT_BYTE:
00361 case EXIF_FORMAT_UNDEFINED:
00362 vs = entry->data[0];
00363 break;
00364 case EXIF_FORMAT_SHORT:
00365 vs = exif_get_short(entry->data, entry->order);
00366 break;
00367 default:
00368 vs = 0;
00369 break;
00370 }
00371
00372 for (j = 0; items[i].elem[j].string &&
00373 (items[i].elem[j].index < vs); j++);
00374 if (items[i].elem[j].index != vs) {
00375 snprintf (v, maxlen, _("Unknown value %hi"), vs);
00376 break;
00377 }
00378 strncpy (v, items[i].elem[j].string, maxlen);
00379 break;
00380
00381 case MNOTE_NIKON_TAG_LENS:
00382 CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen);
00383 CC (entry->components, 4, v, maxlen);
00384 {
00385 double c,d;
00386 unsigned long a,b;
00387 vr = exif_get_rational (entry->data, entry->order);
00388 a = vr.numerator / vr.denominator;
00389 vr = exif_get_rational (entry->data+8, entry->order);
00390 b = vr.numerator / vr.denominator;
00391 vr = exif_get_rational (entry->data+16, entry->order);
00392 c = (double)vr.numerator / vr.denominator;
00393 vr = exif_get_rational (entry->data+24, entry->order);
00394 d = (double)vr.numerator / vr.denominator;
00395
00396 snprintf (v, maxlen, "%ld-%ldmm 1:%3.1f - %3.1f",a,b,c,d);
00397 }
00398 break;
00399 case MNOTE_NIKON1_TAG_FOCUS:
00400 CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen);
00401 CC (entry->components, 1, v, maxlen);
00402 vr = exif_get_rational (entry->data, entry->order);
00403 if (!vr.denominator) {
00404 strncpy (v, _("Infinite"), maxlen);
00405 } else {
00406 r = (double)vr.numerator / vr.denominator;
00407 snprintf (v, maxlen, "%2.2f", r);
00408 }
00409 break;
00410
00411
00412 case MNOTE_OLYMPUS_TAG_MODE:
00413 CF (entry->format, EXIF_FORMAT_LONG, v, maxlen);
00414 CC (entry->components, 3, v, maxlen);
00415 vl = exif_get_long (entry->data, entry->order);
00416 switch (vl) {
00417 case 0:
00418 strncpy (v, _("normal"), maxlen);
00419 break;
00420 case 1:
00421 strncpy (v, _("unknown"), maxlen);
00422 break;
00423 case 2:
00424 strncpy (v, _("fast"), maxlen);
00425 break;
00426 case 3:
00427 strncpy (v, _("panorama"), maxlen);
00428 break;
00429 default:
00430 snprintf (v, maxlen, _("%li"), (long int) vl);
00431 }
00432 vl = exif_get_long (entry->data + 4, entry->order);
00433 snprintf (buf, sizeof (buf), "/%li/", (long int) vl);
00434 strncat (v, buf, maxlen - strlen (v));
00435 vl = exif_get_long (entry->data + 4, entry->order);
00436 switch (vl) {
00437 case 1:
00438 strncat (v, _("left to right"), maxlen - strlen (v));
00439 break;
00440 case 2:
00441 strncat (v, _("right to left"), maxlen - strlen (v));
00442 break;
00443 case 3:
00444 strncat (v, _("bottom to top"), maxlen - strlen (v));
00445 break;
00446 case 4:
00447 strncat (v, _("top to bottom"), maxlen - strlen (v));
00448 break;
00449 default:
00450 snprintf (buf, sizeof (buf), _("%li"),
00451 (long int) vl);
00452 strncat (v, buf, maxlen - strlen (v));
00453 }
00454 break;
00455 case MNOTE_OLYMPUS_TAG_UNKNOWN_1:
00456 CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen);
00457 CC (entry->components, 1, v, maxlen);
00458 strncpy (v, _("Unknown tag."), maxlen);
00459 break;
00460 case MNOTE_OLYMPUS_TAG_UNKNOWN_2:
00461 CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen);
00462 CC (entry->components, 1, v, maxlen);
00463 break;
00464 case MNOTE_OLYMPUS_TAG_UNKNOWN_3:
00465 CF (entry->format, EXIF_FORMAT_SSHORT, v, maxlen);
00466 CC (entry->components, 1, v, maxlen);
00467 break;
00468 case MNOTE_OLYMPUS_TAG_VERSION:
00469 CF (entry->format, EXIF_FORMAT_ASCII, v, maxlen);
00470 CC2 (entry->components, 5, 8, v, maxlen);
00471 strncpy (v, (char *)entry->data, MIN (maxlen, entry->size));
00472 break;
00473 case MNOTE_OLYMPUS_TAG_INFO:
00474 CF (entry->format, EXIF_FORMAT_ASCII, v, maxlen);
00475 CC2 (entry->components, 52, 53, v, maxlen);
00476 strncpy (v, (char *)entry->data, MIN (maxlen, entry->size));
00477 break;
00478 case MNOTE_OLYMPUS_TAG_ID:
00479 CF (entry->format, EXIF_FORMAT_UNDEFINED, v, maxlen);
00480 CC (entry->components, 32, v, maxlen);
00481 strncpy (v, (char *)entry->data, MIN (maxlen, entry->size));
00482 break;
00483 case MNOTE_OLYMPUS_TAG_UNKNOWN_4:
00484 CF (entry->format, EXIF_FORMAT_LONG, v, maxlen);
00485 CC (entry->components, 30, v, maxlen);
00486 break;
00487 case MNOTE_OLYMPUS_TAG_FOCUSDIST:
00488 CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen);
00489 CC (entry->components, 1, v, maxlen);
00490 vr = exif_get_rational (entry->data, entry->order);
00491 if (vr.numerator == 0) {
00492 strncpy (v, _("Unknown"), maxlen);
00493 }
00494 else {
00495 unsigned long tmp = vr.numerator / vr.denominator;
00496
00497 snprintf (v, maxlen, "%li mm", tmp);
00498 }
00499 break;
00500 case MNOTE_OLYMPUS_TAG_WBALANCE:
00501 CF (entry->format, EXIF_FORMAT_SHORT, v, maxlen);
00502 CC (entry->components, 2, v, maxlen);
00503 vs = exif_get_short (entry->data, entry->order);
00504 switch (vs) {
00505 case 1:
00506 strncpy (v, _("Automatic"), maxlen);
00507 break;
00508 case 2:
00509 {
00510 ExifShort v2 = exif_get_short (entry->data + 2, entry->order);
00511 unsigned long colorTemp = 0;
00512 switch (v2) {
00513 case 2:
00514 colorTemp = 3000;
00515 break;
00516 case 3:
00517 colorTemp = 3700;
00518 break;
00519 case 4:
00520 colorTemp = 4000;
00521 break;
00522 case 5:
00523 colorTemp = 4500;
00524 break;
00525 case 6:
00526 colorTemp = 5500;
00527 break;
00528 case 7:
00529 colorTemp = 6500;
00530 break;
00531 case 9:
00532 colorTemp = 7500;
00533 break;
00534 }
00535 if (colorTemp) {
00536 snprintf (v, maxlen, "Manual: %liK", colorTemp);
00537 }
00538 else {
00539 strncpy (v, _("Manual: Unknown"), maxlen);
00540 }
00541
00542 }
00543 break;
00544 case 3:
00545 strncpy (v, _("One-touch"), maxlen);
00546 break;
00547 default:
00548 strncpy (v, _("Unknown"), maxlen);
00549 break;
00550 }
00551 break;
00552 default:
00553 switch (entry->format) {
00554 case EXIF_FORMAT_ASCII:
00555 strncpy (v, (char *)entry->data,
00556 MIN (maxlen, entry->components));
00557 break;
00558 case EXIF_FORMAT_SHORT:
00559 vs = exif_get_short (entry->data, entry->order);
00560 snprintf (v, maxlen, "%hi", vs);
00561 break;
00562 case EXIF_FORMAT_LONG:
00563 vl = exif_get_long (entry->data, entry->order);
00564 snprintf (v, maxlen, "%li", (long int) vl);
00565 break;
00566 case EXIF_FORMAT_UNDEFINED:
00567 default:
00568 snprintf (v, maxlen, _("%li bytes unknown data: "),
00569 (long int) entry->size);
00570 for (i = 0; i < (int)entry->size; i++) {
00571 sprintf (buf, "%02x", entry->data[i]);
00572 strncat (v, buf, maxlen - strlen (v));
00573 }
00574 break;
00575 }
00576 break;
00577 }
00578
00579 return (v);
00580 }