1b8bc0d8aSopenharmony_ci/* mnote-fuji-entry.c
2b8bc0d8aSopenharmony_ci *
3b8bc0d8aSopenharmony_ci * Copyright (c) 2002 Lutz Mueller <lutz@users.sourceforge.net>
4b8bc0d8aSopenharmony_ci *
5b8bc0d8aSopenharmony_ci * This library is free software; you can redistribute it and/or
6b8bc0d8aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public
7b8bc0d8aSopenharmony_ci * License as published by the Free Software Foundation; either
8b8bc0d8aSopenharmony_ci * version 2 of the License, or (at your option) any later version.
9b8bc0d8aSopenharmony_ci *
10b8bc0d8aSopenharmony_ci * This library is distributed in the hope that it will be useful,
11b8bc0d8aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
12b8bc0d8aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13b8bc0d8aSopenharmony_ci * Lesser General Public License for more details.
14b8bc0d8aSopenharmony_ci *
15b8bc0d8aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public
16b8bc0d8aSopenharmony_ci * License along with this library; if not, write to the
17b8bc0d8aSopenharmony_ci * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18b8bc0d8aSopenharmony_ci * Boston, MA  02110-1301  USA.
19b8bc0d8aSopenharmony_ci */
20b8bc0d8aSopenharmony_ci
21b8bc0d8aSopenharmony_ci#include <stdlib.h>
22b8bc0d8aSopenharmony_ci#include <stdio.h>
23b8bc0d8aSopenharmony_ci#include <string.h>
24b8bc0d8aSopenharmony_ci
25b8bc0d8aSopenharmony_ci#include <config.h>
26b8bc0d8aSopenharmony_ci
27b8bc0d8aSopenharmony_ci#include <libexif/i18n.h>
28b8bc0d8aSopenharmony_ci
29b8bc0d8aSopenharmony_ci#include "mnote-fuji-entry.h"
30b8bc0d8aSopenharmony_ci
31b8bc0d8aSopenharmony_ci#define CF(format,target,v,maxlen)                              \
32b8bc0d8aSopenharmony_ci{                                                               \
33b8bc0d8aSopenharmony_ci        if (format != target) {                                 \
34b8bc0d8aSopenharmony_ci                snprintf (v, maxlen,	                        \
35b8bc0d8aSopenharmony_ci                        _("Invalid format '%s', "               \
36b8bc0d8aSopenharmony_ci                        "expected '%s'."),                      \
37b8bc0d8aSopenharmony_ci                        exif_format_get_name (format),          \
38b8bc0d8aSopenharmony_ci                        exif_format_get_name (target));         \
39b8bc0d8aSopenharmony_ci                break;                                          \
40b8bc0d8aSopenharmony_ci        }                                                       \
41b8bc0d8aSopenharmony_ci}
42b8bc0d8aSopenharmony_ci
43b8bc0d8aSopenharmony_ci#define CC(number,target,v,maxlen)                                      \
44b8bc0d8aSopenharmony_ci{                                                                       \
45b8bc0d8aSopenharmony_ci        if (number != target) {                                         \
46b8bc0d8aSopenharmony_ci                snprintf (v, maxlen,                                    \
47b8bc0d8aSopenharmony_ci                        _("Invalid number of components (%i, "          \
48b8bc0d8aSopenharmony_ci                        "expected %i)."), (int) number, (int) target);  \
49b8bc0d8aSopenharmony_ci                break;                                                  \
50b8bc0d8aSopenharmony_ci        }                                                               \
51b8bc0d8aSopenharmony_ci}
52b8bc0d8aSopenharmony_ci
53b8bc0d8aSopenharmony_cistatic const struct {
54b8bc0d8aSopenharmony_ci	MnoteFujiTag tag;
55b8bc0d8aSopenharmony_ci	struct {
56b8bc0d8aSopenharmony_ci		int index;
57b8bc0d8aSopenharmony_ci		const char *string;
58b8bc0d8aSopenharmony_ci	} elem[22];
59b8bc0d8aSopenharmony_ci} items[] = {
60b8bc0d8aSopenharmony_ci#ifndef NO_VERBOSE_TAG_DATA
61b8bc0d8aSopenharmony_ci  { MNOTE_FUJI_TAG_SHARPNESS,
62b8bc0d8aSopenharmony_ci    { {1, N_("Softest")},
63b8bc0d8aSopenharmony_ci      {2, N_("Soft")},
64b8bc0d8aSopenharmony_ci      {3, N_("Normal")},
65b8bc0d8aSopenharmony_ci      {4, N_("Hard")},
66b8bc0d8aSopenharmony_ci      {5, N_("Hardest")},
67b8bc0d8aSopenharmony_ci      {0x0082, N_("Medium soft")},
68b8bc0d8aSopenharmony_ci      {0x0084, N_("Medium hard")},
69b8bc0d8aSopenharmony_ci      {0x8000, N_("Film simulation mode")},
70b8bc0d8aSopenharmony_ci      {0xFFFF, N_("Off")},
71b8bc0d8aSopenharmony_ci      {0, NULL}}},
72b8bc0d8aSopenharmony_ci  { MNOTE_FUJI_TAG_WHITE_BALANCE,
73b8bc0d8aSopenharmony_ci    { {0, N_("Auto")},
74b8bc0d8aSopenharmony_ci      {0x100, N_("Daylight")},
75b8bc0d8aSopenharmony_ci      {0x200, N_("Cloudy")},
76b8bc0d8aSopenharmony_ci      {0x300, N_("Daylight fluorescent")},
77b8bc0d8aSopenharmony_ci      {0x301, N_("Day white fluorescent")},
78b8bc0d8aSopenharmony_ci      {0x302, N_("White fluorescent")},
79b8bc0d8aSopenharmony_ci      {0x400, N_("Incandescent")},
80b8bc0d8aSopenharmony_ci      {0x500, N_("Flash")},
81b8bc0d8aSopenharmony_ci      {0xF00, N_("Custom")},
82b8bc0d8aSopenharmony_ci      {0, NULL}}},
83b8bc0d8aSopenharmony_ci  { MNOTE_FUJI_TAG_COLOR,
84b8bc0d8aSopenharmony_ci    { {0, N_("Standard")},
85b8bc0d8aSopenharmony_ci      {0x0080, N_("Medium high")},
86b8bc0d8aSopenharmony_ci      {0x0100, N_("High")},
87b8bc0d8aSopenharmony_ci      {0x0180, N_("Medium low")},
88b8bc0d8aSopenharmony_ci      {0x0200, N_("Original")},
89b8bc0d8aSopenharmony_ci      {0x0300, N_("Black & white")},
90b8bc0d8aSopenharmony_ci      {0x8000, N_("Film simulation mode")},
91b8bc0d8aSopenharmony_ci      {0, NULL}}},
92b8bc0d8aSopenharmony_ci  { MNOTE_FUJI_TAG_TONE,
93b8bc0d8aSopenharmony_ci    { {0, N_("Standard")},
94b8bc0d8aSopenharmony_ci      {0x0080, N_("Medium hard")},
95b8bc0d8aSopenharmony_ci      {0x0100, N_("Hard")},
96b8bc0d8aSopenharmony_ci      {0x0180, N_("Medium soft")},
97b8bc0d8aSopenharmony_ci      {0x0200, N_("Original")},
98b8bc0d8aSopenharmony_ci      {0x8000, N_("Film simulation mode")},
99b8bc0d8aSopenharmony_ci      {0, NULL}}},
100b8bc0d8aSopenharmony_ci  { MNOTE_FUJI_TAG_FLASH_MODE,
101b8bc0d8aSopenharmony_ci    { {0, N_("Auto")},
102b8bc0d8aSopenharmony_ci      {1, N_("On")},
103b8bc0d8aSopenharmony_ci      {2, N_("Off")},
104b8bc0d8aSopenharmony_ci      {3, N_("Red-eye reduction")},
105b8bc0d8aSopenharmony_ci      {0, NULL}}},
106b8bc0d8aSopenharmony_ci  { MNOTE_FUJI_TAG_MACRO,
107b8bc0d8aSopenharmony_ci    { {0, N_("Off")},
108b8bc0d8aSopenharmony_ci      {1, N_("On")},
109b8bc0d8aSopenharmony_ci      {0, NULL}}},
110b8bc0d8aSopenharmony_ci  { MNOTE_FUJI_TAG_FOCUS_MODE,
111b8bc0d8aSopenharmony_ci    { {0, N_("Auto")},
112b8bc0d8aSopenharmony_ci      {1, N_("Manual")},
113b8bc0d8aSopenharmony_ci      {0, NULL}}},
114b8bc0d8aSopenharmony_ci  { MNOTE_FUJI_TAG_SLOW_SYNC,
115b8bc0d8aSopenharmony_ci    { {0, N_("Off")},
116b8bc0d8aSopenharmony_ci      {1, N_("On")},
117b8bc0d8aSopenharmony_ci      {0, NULL}}},
118b8bc0d8aSopenharmony_ci  { MNOTE_FUJI_TAG_PICTURE_MODE,
119b8bc0d8aSopenharmony_ci    { {0, N_("Auto")},
120b8bc0d8aSopenharmony_ci      {1, N_("Portrait")},
121b8bc0d8aSopenharmony_ci      {2, N_("Landscape")},
122b8bc0d8aSopenharmony_ci      {4, N_("Sports")},
123b8bc0d8aSopenharmony_ci      {5, N_("Night")},
124b8bc0d8aSopenharmony_ci      {6, N_("Program AE")},
125b8bc0d8aSopenharmony_ci      {7, N_("Natural photo")},
126b8bc0d8aSopenharmony_ci      {8, N_("Vibration reduction")},
127b8bc0d8aSopenharmony_ci      {0x000A, N_("Sunset")},
128b8bc0d8aSopenharmony_ci      {0x000B, N_("Museum")},
129b8bc0d8aSopenharmony_ci      {0x000C, N_("Party")},
130b8bc0d8aSopenharmony_ci      {0x000D, N_("Flower")},
131b8bc0d8aSopenharmony_ci      {0x000E, N_("Text")},
132b8bc0d8aSopenharmony_ci      {0x000F, N_("NP & flash")},
133b8bc0d8aSopenharmony_ci      {0x0010, N_("Beach")},
134b8bc0d8aSopenharmony_ci      {0x0011, N_("Snow")},
135b8bc0d8aSopenharmony_ci      {0x0012, N_("Fireworks")},
136b8bc0d8aSopenharmony_ci      {0x0013, N_("Underwater")},
137b8bc0d8aSopenharmony_ci      {0x0100, N_("Aperture priority AE")},
138b8bc0d8aSopenharmony_ci      {0x0200, N_("Shutter priority AE")},
139b8bc0d8aSopenharmony_ci      {0x0300, N_("Manual exposure")},
140b8bc0d8aSopenharmony_ci      {0, NULL}}},
141b8bc0d8aSopenharmony_ci  { MNOTE_FUJI_TAG_CONT_TAKING,
142b8bc0d8aSopenharmony_ci    { {0, N_("Off")},
143b8bc0d8aSopenharmony_ci      {1, N_("On")},
144b8bc0d8aSopenharmony_ci      {0, NULL}}},
145b8bc0d8aSopenharmony_ci  { MNOTE_FUJI_TAG_FINEPIX_COLOR,
146b8bc0d8aSopenharmony_ci    { {0x00, N_("F-Standard")},
147b8bc0d8aSopenharmony_ci      {0x10, N_("F-Chrome")},
148b8bc0d8aSopenharmony_ci      {0x30, N_("F-B&W")},
149b8bc0d8aSopenharmony_ci      {0, NULL}}},
150b8bc0d8aSopenharmony_ci  { MNOTE_FUJI_TAG_BLUR_CHECK,
151b8bc0d8aSopenharmony_ci    { {0, N_("No blur")},
152b8bc0d8aSopenharmony_ci      {1, N_("Blur warning")},
153b8bc0d8aSopenharmony_ci      {0, NULL}}},
154b8bc0d8aSopenharmony_ci  { MNOTE_FUJI_TAG_FOCUS_CHECK,
155b8bc0d8aSopenharmony_ci    { {0, N_("Focus good")},
156b8bc0d8aSopenharmony_ci      {1, N_("Out of focus")},
157b8bc0d8aSopenharmony_ci      {0, NULL}}},
158b8bc0d8aSopenharmony_ci  { MNOTE_FUJI_TAG_AUTO_EXPOSURE_CHECK,
159b8bc0d8aSopenharmony_ci    { {0, N_("AE good")},
160b8bc0d8aSopenharmony_ci      {1, N_("Over exposed")},
161b8bc0d8aSopenharmony_ci      {0, NULL}}},
162b8bc0d8aSopenharmony_ci  { MNOTE_FUJI_TAG_DYNAMIC_RANGE,
163b8bc0d8aSopenharmony_ci    { {1, N_("Standard")},
164b8bc0d8aSopenharmony_ci      {3, N_("Wide")},
165b8bc0d8aSopenharmony_ci      {0, NULL}}},
166b8bc0d8aSopenharmony_ci  { MNOTE_FUJI_TAG_FILM_MODE,
167b8bc0d8aSopenharmony_ci    { {0, N_("F0/Standard")},
168b8bc0d8aSopenharmony_ci      {0x0100, N_("F1/Studio portrait")},
169b8bc0d8aSopenharmony_ci      {0x0110, N_("F1a/Professional portrait")},
170b8bc0d8aSopenharmony_ci      {0x0120, N_("F1b/Professional portrait")},
171b8bc0d8aSopenharmony_ci      {0x0130, N_("F1c/Professional portrait")},
172b8bc0d8aSopenharmony_ci      {0x0200, N_("F2/Fujichrome")},
173b8bc0d8aSopenharmony_ci      {0x0300, N_("F3/Studio portrait Ex")},
174b8bc0d8aSopenharmony_ci      {0x0400, N_("F4/Velvia")},
175b8bc0d8aSopenharmony_ci      {0, NULL}}},
176b8bc0d8aSopenharmony_ci  { MNOTE_FUJI_TAG_DYNAMIC_RANGE_SETTING,
177b8bc0d8aSopenharmony_ci    { {0, N_("Auto (100-400%)")},
178b8bc0d8aSopenharmony_ci      {1, N_("RAW")},
179b8bc0d8aSopenharmony_ci      {0x0100, N_("Standard (100%)")},
180b8bc0d8aSopenharmony_ci      {0x0200, N_("Wide1 (230%)")},
181b8bc0d8aSopenharmony_ci      {0x0201, N_("Wide2 (400%)")},
182b8bc0d8aSopenharmony_ci      {0x8000, N_("Film simulation mode")},
183b8bc0d8aSopenharmony_ci      {0, NULL}}},
184b8bc0d8aSopenharmony_ci#endif
185b8bc0d8aSopenharmony_ci  {0, {{0, NULL}}}
186b8bc0d8aSopenharmony_ci};
187b8bc0d8aSopenharmony_ci
188b8bc0d8aSopenharmony_ci
189b8bc0d8aSopenharmony_cichar *
190b8bc0d8aSopenharmony_cimnote_fuji_entry_get_value (MnoteFujiEntry *entry,
191b8bc0d8aSopenharmony_ci			      char *val, unsigned int maxlen)
192b8bc0d8aSopenharmony_ci{
193b8bc0d8aSopenharmony_ci	ExifLong  vl;
194b8bc0d8aSopenharmony_ci	ExifSLong vsl;
195b8bc0d8aSopenharmony_ci	ExifShort vs, vs2;
196b8bc0d8aSopenharmony_ci	ExifSShort vss;
197b8bc0d8aSopenharmony_ci	ExifRational vr;
198b8bc0d8aSopenharmony_ci	ExifSRational vsr;
199b8bc0d8aSopenharmony_ci	int i, j;
200b8bc0d8aSopenharmony_ci
201b8bc0d8aSopenharmony_ci	if (!entry) return (NULL);
202b8bc0d8aSopenharmony_ci
203b8bc0d8aSopenharmony_ci	memset (val, 0, maxlen);
204b8bc0d8aSopenharmony_ci	maxlen--;
205b8bc0d8aSopenharmony_ci
206b8bc0d8aSopenharmony_ci	switch (entry->tag) {
207b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_VERSION:
208b8bc0d8aSopenharmony_ci		CF (entry->format, EXIF_FORMAT_UNDEFINED, val, maxlen);
209b8bc0d8aSopenharmony_ci		CC (entry->components, 4, val, maxlen);
210b8bc0d8aSopenharmony_ci		memcpy (val, entry->data, MIN(maxlen, entry->size));
211b8bc0d8aSopenharmony_ci		break;
212b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_SHARPNESS:
213b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_WHITE_BALANCE:
214b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_COLOR:
215b8bc0d8aSopenharmony_ci  	  case MNOTE_FUJI_TAG_TONE:
216b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_FLASH_MODE:
217b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_MACRO:
218b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_FOCUS_MODE:
219b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_SLOW_SYNC:
220b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_PICTURE_MODE:
221b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_CONT_TAKING:
222b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_FINEPIX_COLOR:
223b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_BLUR_CHECK:
224b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_FOCUS_CHECK:
225b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_AUTO_EXPOSURE_CHECK:
226b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_DYNAMIC_RANGE:
227b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_FILM_MODE:
228b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_DYNAMIC_RANGE_SETTING:
229b8bc0d8aSopenharmony_ci		CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen);
230b8bc0d8aSopenharmony_ci		CC (entry->components, 1, val, maxlen);
231b8bc0d8aSopenharmony_ci		vs = exif_get_short (entry->data, entry->order);
232b8bc0d8aSopenharmony_ci
233b8bc0d8aSopenharmony_ci		/* search the tag */
234b8bc0d8aSopenharmony_ci		for (i = 0; (items[i].tag && items[i].tag != entry->tag); i++);
235b8bc0d8aSopenharmony_ci		if (!items[i].tag) {
236b8bc0d8aSopenharmony_ci			snprintf (val, maxlen,
237b8bc0d8aSopenharmony_ci				  _("Internal error (unknown value %i)"), vs);
238b8bc0d8aSopenharmony_ci		  	break;
239b8bc0d8aSopenharmony_ci		}
240b8bc0d8aSopenharmony_ci
241b8bc0d8aSopenharmony_ci		/* find the value */
242b8bc0d8aSopenharmony_ci		for (j = 0; items[i].elem[j].string &&
243b8bc0d8aSopenharmony_ci		    (items[i].elem[j].index < vs); j++);
244b8bc0d8aSopenharmony_ci		if (items[i].elem[j].index != vs) {
245b8bc0d8aSopenharmony_ci			snprintf (val, maxlen,
246b8bc0d8aSopenharmony_ci				  _("Internal error (unknown value %i)"), vs);
247b8bc0d8aSopenharmony_ci			break;
248b8bc0d8aSopenharmony_ci		}
249b8bc0d8aSopenharmony_ci		strncpy (val, _(items[i].elem[j].string), maxlen);
250b8bc0d8aSopenharmony_ci		break;
251b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_FOCUS_POINT:
252b8bc0d8aSopenharmony_ci		CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen);
253b8bc0d8aSopenharmony_ci		CC (entry->components, 2, val, maxlen);
254b8bc0d8aSopenharmony_ci		vs = exif_get_short (entry->data, entry->order);
255b8bc0d8aSopenharmony_ci		vs2 = exif_get_short (entry->data+2, entry->order);
256b8bc0d8aSopenharmony_ci		snprintf (val, maxlen, "%i, %i", vs, vs2);
257b8bc0d8aSopenharmony_ci		break;
258b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_MIN_FOCAL_LENGTH:
259b8bc0d8aSopenharmony_ci	  case MNOTE_FUJI_TAG_MAX_FOCAL_LENGTH:
260b8bc0d8aSopenharmony_ci		CF (entry->format, EXIF_FORMAT_RATIONAL, val, maxlen);
261b8bc0d8aSopenharmony_ci		CC (entry->components, 1, val, maxlen);
262b8bc0d8aSopenharmony_ci		vr = exif_get_rational (entry->data, entry->order);
263b8bc0d8aSopenharmony_ci		if (!vr.denominator) break;
264b8bc0d8aSopenharmony_ci		snprintf (val, maxlen, _("%2.2f mm"), (double) vr.numerator /
265b8bc0d8aSopenharmony_ci			  vr.denominator);
266b8bc0d8aSopenharmony_ci		break;
267b8bc0d8aSopenharmony_ci
268b8bc0d8aSopenharmony_ci	default:
269b8bc0d8aSopenharmony_ci		switch (entry->format) {
270b8bc0d8aSopenharmony_ci		case EXIF_FORMAT_ASCII:
271b8bc0d8aSopenharmony_ci		  strncpy (val, (char *)entry->data, MIN(maxlen, entry->size));
272b8bc0d8aSopenharmony_ci		  break;
273b8bc0d8aSopenharmony_ci		case EXIF_FORMAT_SHORT:
274b8bc0d8aSopenharmony_ci		  vs = exif_get_short (entry->data, entry->order);
275b8bc0d8aSopenharmony_ci		  snprintf (val, maxlen, "%hu", vs);
276b8bc0d8aSopenharmony_ci		  break;
277b8bc0d8aSopenharmony_ci		case EXIF_FORMAT_SSHORT:
278b8bc0d8aSopenharmony_ci		  vss = exif_get_sshort (entry->data, entry->order);
279b8bc0d8aSopenharmony_ci		  snprintf (val, maxlen, "%hi", vss);
280b8bc0d8aSopenharmony_ci		  break;
281b8bc0d8aSopenharmony_ci		case EXIF_FORMAT_LONG:
282b8bc0d8aSopenharmony_ci		  vl = exif_get_long (entry->data, entry->order);
283b8bc0d8aSopenharmony_ci		  snprintf (val, maxlen, "%lu", (long unsigned) vl);
284b8bc0d8aSopenharmony_ci		  break;
285b8bc0d8aSopenharmony_ci		case EXIF_FORMAT_SLONG:
286b8bc0d8aSopenharmony_ci		  vsl = exif_get_slong (entry->data, entry->order);
287b8bc0d8aSopenharmony_ci		  snprintf (val, maxlen, "%li", (long int) vsl);
288b8bc0d8aSopenharmony_ci		  break;
289b8bc0d8aSopenharmony_ci		case EXIF_FORMAT_RATIONAL:
290b8bc0d8aSopenharmony_ci		  vr = exif_get_rational (entry->data, entry->order);
291b8bc0d8aSopenharmony_ci		  if (!vr.denominator) break;
292b8bc0d8aSopenharmony_ci		  snprintf (val, maxlen, "%2.4f", (double) vr.numerator /
293b8bc0d8aSopenharmony_ci						    vr.denominator);
294b8bc0d8aSopenharmony_ci		  break;
295b8bc0d8aSopenharmony_ci		case EXIF_FORMAT_SRATIONAL:
296b8bc0d8aSopenharmony_ci		  vsr = exif_get_srational (entry->data, entry->order);
297b8bc0d8aSopenharmony_ci		  if (!vsr.denominator) break;
298b8bc0d8aSopenharmony_ci		  snprintf (val, maxlen, "%2.4f", (double) vsr.numerator /
299b8bc0d8aSopenharmony_ci			  vsr.denominator);
300b8bc0d8aSopenharmony_ci		  break;
301b8bc0d8aSopenharmony_ci		case EXIF_FORMAT_UNDEFINED:
302b8bc0d8aSopenharmony_ci		default:
303b8bc0d8aSopenharmony_ci		  snprintf (val, maxlen, _("%i bytes unknown data"),
304b8bc0d8aSopenharmony_ci 			  entry->size);
305b8bc0d8aSopenharmony_ci		  break;
306b8bc0d8aSopenharmony_ci		}
307b8bc0d8aSopenharmony_ci		break;
308b8bc0d8aSopenharmony_ci	}
309b8bc0d8aSopenharmony_ci
310b8bc0d8aSopenharmony_ci	return (val);
311b8bc0d8aSopenharmony_ci}
312