Subversion Repositories Kolibri OS

Rev

Rev 4995 | Rev 5007 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4994 IgorA 1
format MS COFF
2
public EXPORTS
3
section '.flat' code readable align 16
4
 
5
include '../../../../macros.inc'
6
include '../../../../proc32.inc'
7
 
8
 
9
 
10
;---------
11
offs_m_or_i    equ 8 ;смещение параметра 'MM' или 'II' (Motorola, Intel)
12
offs_tag_count equ 16 ;смещение количества тегов
13
offs_tag_0     equ 18 ;смещение 0-го тега
14
tag_size       equ 12 ;размер структуры тега
5002 IgorA 15
offs_tag_child_0 equ 2 ;смещение 0-го дочернего тега
4994 IgorA 16
;форматы данных
17
tag_format_ui1b  equ  1 ;unsigned integer 1 byte
18
tag_format_text  equ  2 ;ascii string
19
tag_format_ui2b  equ  3 ;unsigned integer 2 byte
20
tag_format_ui4b  equ  4 ;unsigned integer 4 byte
4995 IgorA 21
tag_format_urb   equ  5 ;unsigned integer 4/4 byte
4994 IgorA 22
tag_format_si1b  equ  6 ;signed integer 1 byte
23
tag_format_undef equ  7 ;undefined
24
tag_format_si2b  equ  8 ;signed integer 2 byte
25
tag_format_si4b  equ  9 ;signed integer 4 byte
4995 IgorA 26
tag_format_srb   equ 10 ;signed integer 4/4 byte
4994 IgorA 27
tag_format_f4b	 equ 11 ;float 4 byte
28
tag_format_f8b	 equ 12 ;float 8 byte
29
 
30
align 4
31
txt_dp db ': ',0
4995 IgorA 32
txt_div db '/',0
4994 IgorA 33
 
34
;
35
align 4
36
exif_tag_numbers:
37
 
5002 IgorA 38
db 0x00,0x01,'Interop index',0
39
db 0x00,0x02,'Interop version',0
40
db 0x00,0x0b,'Processing software',0
41
db 0x00,0xfe,'Subfile type',0
42
db 0x00,0xff,'OldSubfile type',0
43
db 0x01,0x00,'Image width',0
44
db 0x01,0x01,'Image height',0
45
db 0x01,0x02,'Bits per sample',0
46
db 0x01,0x03,'Compression',0
47
db 0x01,0x06,'Photometric interpretation',0
48
db 0x01,0x07,'Thresholding',0
49
db 0x01,0x08,'Cell width',0
50
db 0x01,0x09,'Cell length',0
51
db 0x01,0x0a,'Fill order',0
52
db 0x01,0x0d,'Document name',0
4994 IgorA 53
db 0x01,0x0e,'Image description',0
54
db 0x01,0x0f,'Manufacturer of digicam',0
55
db 0x01,0x10,'Model',0
5002 IgorA 56
db 0x01,0x11,'Strip offsets',0
4994 IgorA 57
db 0x01,0x12,'Orientation',0
5002 IgorA 58
db 0x01,0x15,'Samples per pixel',0
59
db 0x01,0x16,'Rows per strip',0
60
db 0x01,0x17,'Strip byte counts',0
61
db 0x01,0x18,'Min sample value',0
62
db 0x01,0x19,'Max sample value',0
4994 IgorA 63
db 0x01,0x1a,'X resolution',0
64
db 0x01,0x1b,'Y resolution',0
5002 IgorA 65
db 0x01,0x1c,'Planar configuration',0
66
db 0x01,0x1d,'Page name',0
67
db 0x01,0x1e,'X position',0
68
db 0x01,0x1f,'Y position',0
69
db 0x01,0x20,'Free offsets',0
70
db 0x01,0x21,'Free byte counts',0
71
db 0x01,0x22,'Gray response unit',0
72
db 0x01,0x23,'Gray response curve',0
73
db 0x01,0x24,'T4 options',0
74
db 0x01,0x25,'T6 options',0
4994 IgorA 75
db 0x01,0x28,'Resolution unit',0
5002 IgorA 76
db 0x01,0x29,'Page number',0
77
db 0x01,0x2c,'Color response unit',0
78
db 0x01,0x2d,'Transfer function',0
4994 IgorA 79
db 0x01,0x31,'Software',0
5002 IgorA 80
db 0x01,0x32,'Modify date',0
81
db 0x01,0x3b,'Artist',0
82
db 0x01,0x3c,'Host computer',0
83
db 0x01,0x3d,'Predictor',0
4994 IgorA 84
db 0x01,0x3e,'White point',0
85
db 0x01,0x3f,'Primary chromaticities',0
5002 IgorA 86
db 0x01,0x40,'Color map',0
87
db 0x01,0x41,'Halftone hints',0
88
db 0x01,0x42,'Tile width',0
89
db 0x01,0x43,'Tile length',0
90
db 0x01,0x44,'Tile offsets',0
91
db 0x01,0x45,'Tile byte counts',0
92
db 0x01,0x46,'Bad fax lines',0
93
db 0x01,0x47,'Clean fax data',0
94
db 0x01,0x48,'Consecutive bad fax lines',0
95
db 0x01,0x4a,'Sub IFDs',0
96
db 0x01,0x4c,'Ink set',0
97
db 0x01,0x4d,'Ink names',0
98
db 0x01,0x4e,'Numberof inks',0
99
db 0x01,0x50,'Dot range',0
100
db 0x01,0x51,'Target printer',0
101
db 0x01,0x52,'Extra samples',0
102
db 0x01,0x53,'Sample format',0
103
db 0x01,0x54,'SMin sample value',0
104
db 0x01,0x55,'SMax sample value',0
105
db 0x01,0x56,'Transfer range',0
106
db 0x01,0x57,'Clip path',0
107
db 0x01,0x58,'X clip path units',0
108
db 0x01,0x59,'Y clip path units',0
109
db 0x01,0x5a,'Indexed',0
110
db 0x01,0x5b,'JPEG tables',0
111
db 0x01,0x5f,'OPIProxy',0
112
db 0x01,0x90,'Global parameters IFD',0
113
db 0x01,0x91,'Profile type',0
114
db 0x01,0x92,'Fax profile',0
115
db 0x01,0x93,'Coding methods',0
116
db 0x01,0x94,'Version year',0
117
db 0x01,0x95,'Mode number',0
118
db 0x01,0xb1,'Decode',0
119
db 0x01,0xb2,'Default image color',0
120
db 0x01,0xb3,'T82 options',0
121
db 0x01,0xb5,'JPEG tables',0 ;уже было ?
122
db 0x02,0x00,'JPEG proc',0
123
db 0x02,0x01,'Thumbnail offset',0
124
db 0x02,0x02,'Thumbnail length',0
125
db 0x02,0x03,'JPEG restart interval',0
126
db 0x02,0x05,'JPEG lossless predictors',0
127
db 0x02,0x06,'JPEG point transforms',0
128
db 0x02,0x07,'JPEG QTables',0
129
db 0x02,0x08,'JPEG DCTables',0
130
db 0x02,0x09,'JPEG ACTables',0
4994 IgorA 131
db 0x02,0x11,'YCbCrCoefficients',0
5002 IgorA 132
db 0x02,0x12,'YCbCrSubSampling',0
4994 IgorA 133
db 0x02,0x13,'YCbCrPositioning',0
134
db 0x02,0x14,'Reference black white',0
5002 IgorA 135
db 0x02,0x2f,'Strip row counts',0
136
db 0x02,0xbc,'Application notes',0
137
db 0x03,0xe7,'USPTO Miscellaneous',0
138
db 0x10,0x00,'Related image file format',0
139
db 0x10,0x01,'Related image width',0
140
db 0x10,0x02,'Related image height',0
141
db 0x47,0x46,'Rating',0
142
db 0x47,0x47,'XP_DIP_XML',0
143
db 0x47,0x48,'Stitch info',0
144
db 0x47,0x49,'Rating percent',0
145
db 0x80,0x0d,'Image ID',0
146
db 0x80,0xa3,'Wang tag 1',0
147
db 0x80,0xa4,'Wang annotation',0
148
db 0x80,0xa5,'Wang tag 3',0
149
db 0x80,0xa6,'Wang tag 4',0
150
db 0x80,0xe3,'Matteing',0
151
db 0x80,0xe4,'Data type',0
152
db 0x80,0xe5,'Image depth',0
153
db 0x80,0xe6,'Tile depth',0
154
db 0x82,0x7d,'Model 2',0
155
db 0x82,0x8d,'CFA repeat pattern dim',0
156
db 0x82,0x8e,'CFA pattern 2',0
157
db 0x82,0x8f,'Battery level',0
158
db 0x82,0x90,'Kodak IFD',0
4994 IgorA 159
db 0x82,0x98,'Copyright',0
5002 IgorA 160
db 0x82,0x9a,'Exposure time',0
161
db 0x82,0x9d,'F number',0
162
db 0x82,0xa5,'MD file tag',0
163
db 0x82,0xa6,'MD scale pixel',0
164
db 0x82,0xa7,'MD color table',0
165
db 0x82,0xa8,'MD lab name',0
166
db 0x82,0xa9,'MD sample info',0
167
db 0x82,0xaa,'MD prep date',0
168
db 0x82,0xab,'MD prep time',0
169
db 0x82,0xac,'MD file units',0
170
db 0x83,0x0e,'Pixel scale',0
171
db 0x83,0x35,'Advent scale',0
172
db 0x83,0x36,'Advent revision',0
173
db 0x83,0x5c,'UIC1 tag',0
174
db 0x83,0x5d,'UIC2 tag',0
175
db 0x83,0x5e,'UIC3 tag',0
176
db 0x83,0x5f,'UIC4 tag',0
177
db 0x83,0xbb,'IPTC-NAA',0
178
db 0x84,0x7e,'Intergraph packet data',0
179
db 0x84,0x7f,'Intergraph flag registers',0
180
db 0x84,0x80,'Intergraph matrix',0
181
db 0x84,0x81,'INGR reserved',0
182
db 0x84,0x82,'Model tie point',0
183
db 0x84,0xe0,'Site',0
184
db 0x84,0xe1,'Color sequence',0
185
db 0x84,0xe2,'IT8 header',0
186
db 0x84,0xe3,'Raster padding',0
187
db 0x84,0xe4,'Bits per run length',0
188
db 0x84,0xe5,'Bits per extended run length',0
189
db 0x84,0xe6,'Color table',0
190
db 0x84,0xe7,'Image color indicator',0
191
db 0x84,0xe8,'Background color indicator',0
192
db 0x84,0xe9,'Image color value',0
193
db 0x84,0xea,'Background color value',0
194
db 0x84,0xeb,'Pixel intensity range',0
195
db 0x84,0xec,'Transparency indicator',0
196
db 0x84,0xed,'Color characterization',0
197
db 0x84,0xee,'HCUsage',0
198
db 0x84,0xef,'Trap indicator',0
199
db 0x84,0xf0,'CMYK equivalent',0
200
db 0x85,0x46,'SEM info',0
201
db 0x85,0x68,'AFCP_IPTC',0
202
db 0x85,0xb8,'Pixel magic JBIG options',0
203
db 0x85,0xd8,'Model transform',0
204
db 0x86,0x02,'WB_GRGB levels',0
205
db 0x86,0x06,'Leaf data',0
206
db 0x86,0x49,'Photoshop settings',0
4994 IgorA 207
db 0x87,0x69,'Exif offset',0
5002 IgorA 208
db 0x87,0x73,'ICC_Profile',0
209
db 0x87,0x7f,'TIFF_FX extensions',0
210
db 0x87,0x80,'Multi profiles',0
211
db 0x87,0x81,'Shared data',0
212
db 0x87,0x82,'T88 options',0
213
db 0x87,0xac,'Image layer',0
214
db 0x87,0xaf,'Geo tiff directory',0
215
db 0x87,0xb0,'Geo tiff double params',0
216
db 0x87,0xb1,'Geo tiff ascii params',0
217
db 0x88,0x22,'Exposure program',0
218
db 0x88,0x24,'Spectral sensitivity',0
4994 IgorA 219
db 0x88,0x25,'GPS Info',0
5002 IgorA 220
db 0x88,0x27,'ISO',0
221
db 0x88,0x28,'Opto-Electric conv factor',0
222
db 0x88,0x29,'Interlace',0
223
db 0x88,0x2a,'Time zone offset',0
224
db 0x88,0x2b,'Self timer mode',0
225
db 0x88,0x30,'Sensitivity type',0
226
db 0x88,0x31,'Standard output sensitivity',0
227
db 0x88,0x32,'Recommended exposure index',0
228
db 0x88,0x33,'ISO speed',0
229
db 0x88,0x34,'ISO speed latitude yyy',0
230
db 0x88,0x35,'ISO speed latitude zzz',0
231
db 0x88,0x5c,'Fax recv params',0
232
db 0x88,0x5d,'Fax sub address',0
233
db 0x88,0x5e,'Fax recv time',0
234
db 0x88,0x8a,'Leaf sub IFD',0
235
db 0x90,0x00,'Exif version',0
236
db 0x90,0x03,'Date time original',0
237
db 0x90,0x04,'Create date',0
238
db 0x91,0x01,'Components configuration',0
239
db 0x91,0x02,'Compressed bits per pixel',0
240
db 0x92,0x01,'Shutter speed value',0
241
db 0x92,0x02,'Aperture value',0
242
db 0x92,0x03,'Brightness value',0
243
db 0x92,0x04,'Exposure compensation',0
244
db 0x92,0x05,'Max aperture value',0
245
db 0x92,0x06,'Subject distance',0
246
db 0x92,0x07,'Metering mode',0
247
db 0x92,0x08,'Light source',0
248
db 0x92,0x09,'Flash',0
249
db 0x92,0x0a,'Focal length',0
250
db 0x92,0x0b,'Flash energy',0
251
db 0x92,0x0c,'Spatial frequency response',0
252
db 0x92,0x0d,'Noise',0
253
db 0x92,0x0e,'Focal plane X resolution',0
254
db 0x92,0x0f,'Focal plane Y resolution',0
255
db 0x92,0x10,'Focal plane resolution unit',0
256
db 0x92,0x11,'Image number',0
257
db 0x92,0x12,'Security classification',0
258
db 0x92,0x13,'Image history',0
259
db 0x92,0x14,'Subject area',0
260
db 0x92,0x15,'Exposure index',0
261
db 0x92,0x16,'TIFF-EP standard ID',0
262
db 0x92,0x17,'Sensing method',0
263
db 0x92,0x3a,'CIP3 data file',0
264
db 0x92,0x3b,'CIP3 sheet',0
265
db 0x92,0x3c,'CIP3 side',0
266
db 0x92,0x3f,'Sto nits',0
267
db 0x92,0x7c,'Maker note',0
268
db 0x92,0x86,'User comment',0
269
db 0x92,0x90,'Sub sec time',0
270
db 0x92,0x91,'Sub sec time original',0
271
db 0x92,0x92,'Sub sec time digitized',0
272
db 0x93,0x2f,'MS document text',0
273
db 0x93,0x30,'MS property set storage',0
274
db 0x93,0x31,'MS document text position',0
275
db 0x93,0x5c,'Image source data',0
276
db 0x9c,0x9b,'XP title',0
277
db 0x9c,0x9c,'XP comment',0
278
db 0x9c,0x9d,'XP author',0
279
db 0x9c,0x9e,'XP keywords',0
280
db 0x9c,0x9f,'XP subject',0
281
db 0xa0,0x00,'Flashpix version',0
282
db 0xa0,0x01,'Color space',0
283
db 0xa0,0x02,'Exif image width',0
284
db 0xa0,0x03,'Exif image height',0
285
db 0xa0,0x04,'Related sound file',0
286
db 0xa0,0x05,'Interop offset',0
287
db 0xa2,0x0b,'Flash energy',0
288
db 0xa2,0x0c,'Spatial frequency fesponse',0
289
db 0xa2,0x0d,'Noise',0
290
db 0xa2,0x0e,'Focal plane X resolution',0
291
db 0xa2,0x0f,'Focal plane Y resolution',0
292
db 0xa2,0x10,'Focal plane resolution unit',0
293
db 0xa2,0x11,'Image number',0
294
db 0xa2,0x12,'Security classification',0
295
db 0xa2,0x13,'Image history',0
296
db 0xa2,0x14,'Subject location',0
297
db 0xa2,0x15,'Exposure index',0
298
db 0xa2,0x16,'TIFF-EP standard ID',0
299
db 0xa2,0x17,'Sensing method',0
300
db 0xa3,0x00,'File source',0
301
db 0xa3,0x01,'Scene type',0
302
db 0xa3,0x02,'CFA pattern',0
4995 IgorA 303
db 0xa4,0x01,'Custom rendered',0
304
db 0xa4,0x02,'Exposure mode',0
305
db 0xa4,0x03,'White balance',0
306
db 0xa4,0x04,'Digital zoom ratio',0
307
db 0xa4,0x05,'Focal length in 35mm format',0
308
db 0xa4,0x06,'Scene capture type',0
309
db 0xa4,0x07,'Gain control',0
310
db 0xa4,0x08,'Contrast',0
311
db 0xa4,0x09,'Saturation',0
312
db 0xa4,0x0a,'Sharpness',0
313
db 0xa4,0x0b,'Device setting description',0
314
db 0xa4,0x0c,'Subject distance range',0
315
db 0xa4,0x20,'Image unique ID',0
316
db 0xa4,0x30,'Owner name',0
317
db 0xa4,0x31,'Serial number',0
318
db 0xa4,0x32,'Lens info',0
319
db 0xa4,0x33,'Lens make',0
320
db 0xa4,0x34,'Lens model',0
321
db 0xa4,0x35,'Lens serial number',0
322
db 0xa4,0x80,'GDAL metadata',0
323
db 0xa4,0x81,'GDAL no data',0
324
db 0xa5,0x00,'Gamma',0
325
db 0xaf,0xc0,'Expand software',0
326
db 0xaf,0xc1,'Expand lens',0
327
db 0xaf,0xc2,'Expand film',0
328
db 0xaf,0xc3,'Expand filterLens',0
329
db 0xaf,0xc4,'Expand scanner',0
330
db 0xaf,0xc5,'Expand flash lamp',0
5002 IgorA 331
db 0xbc,0x01,'Pixel format',0
332
db 0xbc,0x02,'Transformation',0
333
db 0xbc,0x03,'Uncompressed',0
334
db 0xbc,0x04,'Image type',0
335
db 0xbc,0x80,'Image width',0
336
db 0xbc,0x81,'Image height',0
337
db 0xbc,0x82,'Width resolution',0
338
db 0xbc,0x83,'Height resolution',0
339
db 0xbc,0xc0,'Image offset',0
340
db 0xbc,0xc1,'Image byte count',0
341
db 0xbc,0xc2,'Alpha offset',0
342
db 0xbc,0xc3,'Alpha byte count',0
343
db 0xbc,0xc4,'Image data discard',0
344
db 0xbc,0xc5,'Alpha data discard',0
345
db 0xc4,0x27,'Oce scanjob desc',0
346
db 0xc4,0x28,'Oce application selector',0
347
db 0xc4,0x29,'Oce ID number',0
348
db 0xc4,0x2a,'Oce image logic',0
349
db 0xc4,0x4f,'Annotations',0
350
db 0xc4,0xa5,'Print IM',0
351
db 0xc5,0x73,'Original file name',0
352
db 0xc5,0x80,'USPTO original content type',0
353
db 0xc6,0x12,'DNG version',0
354
db 0xc6,0x13,'DNG backward version',0
355
db 0xc6,0x14,'Unique camera model',0
356
db 0xc6,0x15,'Localized camera model',0
357
db 0xc6,0x16,'CFA plane color',0
358
db 0xc6,0x17,'CFA layout',0
359
db 0xc6,0x18,'Linearization table',0
360
db 0xc6,0x19,'Black level repeat dim',0
361
db 0xc6,0x1a,'Black level',0
362
db 0xc6,0x1b,'Black level delta H',0
363
db 0xc6,0x1c,'Black level delta V',0
364
db 0xc6,0x1d,'White level',0
365
db 0xc6,0x1e,'Default scale',0
366
db 0xc6,0x1f,'Default crop origin',0
367
db 0xc6,0x20,'Default crop size',0
368
db 0xc6,0x21,'Color matrix 1',0
369
db 0xc6,0x22,'Color matrix 2',0
370
db 0xc6,0x23,'Camera calibration 1',0
371
db 0xc6,0x24,'Camera calibration 2',0
372
db 0xc6,0x25,'Reduction matrix 1',0
373
db 0xc6,0x26,'Reduction matrix 2',0
374
db 0xc6,0x27,'Analog balance',0
375
db 0xc6,0x28,'As shot neutral',0
376
db 0xc6,0x29,'As shot white XY',0
377
db 0xc6,0x2a,'BaselineExposure',0
378
db 0xc6,0x2b,'BaselineNoise',0
379
db 0xc6,0x2c,'BaselineSharpness',0
380
db 0xc6,0x2d,'BayerGreenSplit',0
381
db 0xc6,0x2e,'Linear response limit',0
382
db 0xc6,0x2f,'Camera serial number',0
383
db 0xc6,0x30,'DNG lens info',0
384
db 0xc6,0x31,'Chroma blur radius',0
385
db 0xc6,0x32,'Anti alias strength',0
386
db 0xc6,0x33,'Shadow scale',0
387
db 0xc6,0x34,'SR2 private',0
388
db 0xc6,0x35,'Maker note safety',0
389
db 0xc6,0x40,'Raw image segmentation',0
390
db 0xc6,0x5a,'Calibration illuminant 1',0
391
db 0xc6,0x5b,'Calibration illuminant 2',0
392
db 0xc6,0x5c,'Best quality scale',0
393
db 0xc6,0x5d,'Raw data unique ID',0
394
db 0xc6,0x60,'Alias layer metadata',0
395
db 0xc6,0x8b,'Original raw file name',0
396
db 0xc6,0x8c,'Original raw file data',0
397
db 0xc6,0x8d,'Active area',0
398
db 0xc6,0x8e,'Masked areas',0
399
db 0xc6,0x8f,'AsShot ICC profile',0
400
db 0xc6,0x90,'AsShot pre profile matrix',0
401
db 0xc6,0x91,'Current ICC profile',0
402
db 0xc6,0x92,'Current pre profile matrix',0
403
db 0xc6,0xbf,'Colorimetric reference',0
404
db 0xc6,0xd2,'Panasonic title',0
405
db 0xc6,0xd3,'Panasonic title 2',0
406
db 0xc6,0xf3,'Camera calibration sig',0
407
db 0xc6,0xf4,'Profile calibration sig',0
408
db 0xc6,0xf5,'Profile IFD',0
409
db 0xc6,0xf6,'AsShot profile name',0
410
db 0xc6,0xf7,'Noise reduction applied',0
411
db 0xc6,0xf8,'Profile name',0
412
db 0xc6,0xf9,'Profile hue sat map dims',0
413
db 0xc6,0xfa,'Profile hue sat map data 1',0
414
db 0xc6,0xfb,'Profile hue sat map data 2',0
415
db 0xc6,0xfc,'Profile tone curve',0
416
db 0xc6,0xfd,'Profile embed policy',0
417
db 0xc6,0xfe,'Profile copyright',0
418
db 0xc7,0x14,'Forward matrix 1',0
419
db 0xc7,0x15,'Forward matrix 2',0
420
db 0xc7,0x16,'Preview application name',0
421
db 0xc7,0x17,'Preview application version',0
422
db 0xc7,0x18,'Preview settings name',0
423
db 0xc7,0x19,'Preview settings digest',0
424
db 0xc7,0x1a,'Preview color space',0
425
db 0xc7,0x1b,'Preview date time',0
426
db 0xc7,0x1c,'Raw image digest',0
427
db 0xc7,0x1d,'Original raw file digest',0
428
db 0xc7,0x1e,'Sub tile block size',0
429
db 0xc7,0x1f,'Row interleave factor',0
430
db 0xc7,0x25,'Profile look table dims',0
431
db 0xc7,0x26,'Profile look table data',0
432
db 0xc7,0x40,'Opcode list 1',0
433
db 0xc7,0x41,'Opcode list 2',0
434
db 0xc7,0x4e,'Opcode list 3',0
435
db 0xc7,0x61,'Noise profile',0
436
db 0xc7,0x63,'Time codes',0
437
db 0xc7,0x64,'Frame rate',0
438
db 0xc7,0x72,'TStop',0
439
db 0xc7,0x89,'Reel name',0
440
db 0xc7,0x91,'Original default final size',0
441
db 0xc7,0x92,'Original best quality size',0
442
db 0xc7,0x93,'Original default crop size',0
443
db 0xc7,0xa1,'Camera label',0
444
db 0xc7,0xa3,'Profile hue sat map encoding',0
445
db 0xc7,0xa4,'Profile look table encoding',0
446
db 0xc7,0xa5,'Baseline exposure offset',0
447
db 0xc7,0xa6,'Default black render',0
448
db 0xc7,0xa7,'New raw image digest',0
449
db 0xc7,0xa8,'Raw to preview gain',0
450
db 0xc7,0xb5,'Default user crop',0
451
db 0xea,0x1c,'Padding',0
452
db 0xea,0x1d,'Offset schema',0
453
db 0xfd,0xe8,'Owner name',0
454
db 0xfd,0xe9,'Serial number',0
455
db 0xfd,0xea,'Lens',0
456
db 0xfe,0x00,'KDC_IFD',0
457
db 0xfe,0x4c,'Raw file',0
458
db 0xfe,0x4d,'Converter',0
459
db 0xfe,0x4e,'White balance',0
460
db 0xfe,0x51,'Exposure',0
461
db 0xfe,0x52,'Shadows',0
462
db 0xfe,0x53,'Brightness',0
463
db 0xfe,0x54,'Contrast',0
464
db 0xfe,0x55,'Saturation',0
465
db 0xfe,0x56,'Sharpness',0
466
db 0xfe,0x57,'Smoothness',0
467
db 0xfe,0x58,'Moire filter',0
4995 IgorA 468
 
4994 IgorA 469
dw 0
470
 
471
;input:
472
; bof - указатель на начало файла
473
; app1 - указатель для заполнения exif.app1
474
;output:
475
; app1 - указатель на начало exif.app1 (или 0 если не найдено или формат файла не поддерживается)
476
align 4
477
proc exif_get_app1 uses eax ebx edi, bof:dword, app1:dword
478
	mov eax,[bof]
479
	mov edi,[app1]
480
 
481
	;файл в формате jpg?
482
	cmp word[eax],0xd8ff
483
	jne .no_exif
484
	add eax,2
485
 
486
	;файл содержит exif.app0?
487
	cmp word[eax],0xe0ff
488
	jne @f
489
		add eax,2
490
		movzx ebx,word[eax]
491
		ror bx,8 ;всегда ли так надо?
492
		add eax,ebx
493
	@@:
494
 
495
	;файл содержит exif.app1?
496
	cmp word[eax],0xe1ff
497
	jne .no_exif
498
 
499
	add eax,2
500
	mov [edi],eax
501
 
502
	jmp @f
503
	.no_exif:
504
		mov dword[edi],0
505
	@@:
506
	ret
507
endp
508
 
509
;input:
510
; app1 - указатель на начало exif.app1
511
; num - порядковый номер тега (начинается с 1)
512
; txt - указатель на текст, куда будет записано значение
513
; t_max - максимальный размер текста
514
align 4
515
proc exif_get_app1_tag, app1:dword, num:dword, txt:dword, t_max:dword
516
pushad
517
	mov eax,[app1]
518
	mov edi,[txt]
519
	mov ecx,[num]
520
 
521
	xor edx,edx
5002 IgorA 522
	mov byte[edi],dl
4994 IgorA 523
	cmp eax,edx
524
	je .end_f ;если не найден указатель на начало exif.app1
525
	cmp ecx,edx
526
	jle .end_f ;если порядковый номер тега <= 0
527
 
528
	cmp word[eax+offs_m_or_i],'II'
529
	je @f
530
		inc edx ;if 'MM' edx=1
531
	@@:
532
 
533
	;проверяем число тегов
534
	movzx ebx,word[eax+offs_tag_count]
535
	bt edx,0
536
	jnc @f
537
		ror bx,8
538
	@@:
539
	cmp ecx,ebx
540
	jg .end_f ;если номер тега больше чем их есть в файле
541
 
542
	;переходим на заданный тег
543
	dec ecx
544
	imul ecx,tag_size
545
	add eax,offs_tag_0
546
	add eax,ecx
547
 
5002 IgorA 548
	stdcall read_tag_value,[app1],[t_max]
549
 
550
	.end_f:
551
popad
552
	ret
553
endp
554
 
555
;input:
556
; app1 - указатель на exif.app1
557
; child - указатель для заполнения начала дочерних тегов exif.app1.child
558
; c_tag - тег для которого делается поиск дочерних
559
;output:
560
; child - указатель на начало дочерних тегов
561
align 4
562
proc exif_get_app1_child, app1:dword, child:dword , c_tag:dword
563
pushad
564
	mov eax,[app1]
565
	mov edi,[child]
566
 
567
	xor edx,edx
568
	mov dword[edi],edx
569
	cmp eax,edx
570
	je .end_f ;если не найден указатель на начало exif.app1
571
 
572
	cmp word[eax+offs_m_or_i],'II'
573
	je @f
574
		inc edx ;if 'MM' edx=1
575
	@@:
576
 
577
	;начало поиска
578
	mov ebx,[c_tag]
579
	bt edx,0
580
	jnc @f
581
		ror bx,8
582
	@@:
583
 
584
	;проверяем число тегов
585
	movzx ecx,word[eax+offs_tag_count]
586
	bt edx,0
587
	jnc @f
588
		ror cx,8
589
	@@:
590
	cmp ecx,1
591
	jl .end_f ;если число тегов <1
592
 
593
	;переходим на 1-й тег
594
	add eax,offs_tag_0
595
	@@:
596
		cmp word[eax],bx
597
		je @f
598
		add eax,tag_size
599
		loop @b
600
	jmp .end_f ;если не найдено
601
	@@: ;если найдено
602
		mov ebx,dword[eax+8]
603
		bt edx,0
604
		jnc @f
605
			ror bx,8
606
			ror ebx,16
607
			ror bx,8
608
		@@:
609
		add ebx,[app1]
610
		add ebx,offs_m_or_i
611
		mov dword[edi],ebx
612
	.end_f:
613
popad
614
	ret
615
endp
616
 
617
;input:
618
; app1 - указатель на начало exif.app1
619
; child - указатель на начало дочерних тегов exif.app1.child
620
; num - порядковый номер тега (начинается с 1)
621
; txt - указатель на текст, куда будет записано значение
622
; t_max - максимальный размер текста
623
align 4
624
proc exif_get_app1_child_tag, app1:dword, child:dword, num:dword, txt:dword, t_max:dword
625
pushad
626
	mov eax,[app1]
627
	mov edi,[txt]
628
	mov ecx,[num]
629
 
630
	xor edx,edx
631
	mov byte[edi],dl
632
	cmp eax,edx
633
	je .end_f ;если не найден указатель на начало exif.app1
634
	cmp ecx,edx
635
	jle .end_f ;если порядковый номер тега <= 0
636
 
637
	cmp word[eax+offs_m_or_i],'II'
638
	je @f
639
		inc edx ;if 'MM' edx=1
640
	@@:
641
 
642
	mov eax,[child]
643
	cmp eax,0
644
	je .end_f ;если не найден указатель на начало exif.app1.child
645
 
646
	;проверяем число тегов
647
	movzx ebx,word[eax]
648
	bt edx,0
649
	jnc @f
650
		ror bx,8
651
	@@:
652
	cmp ecx,ebx
653
	jg .end_f ;если номер тега больше чем их есть в файле
654
 
655
	;переходим на заданный тег
656
	dec ecx
657
	imul ecx,tag_size
658
	add eax,offs_tag_child_0
659
	add eax,ecx
660
 
661
	stdcall read_tag_value,[app1],[t_max]
662
 
663
	.end_f:
664
popad
665
	ret
666
endp
667
 
668
;description:
669
; вспомогательная функция для чтения назначений тегов
670
;input:
671
; eax - указатель начала тега
672
; edi - указатель на память для записи текстовой строки
673
align 4
674
proc read_tag_value, app1:dword, t_max:dword
4994 IgorA 675
	push exif_tag_numbers
676
	pop esi
677
	.next_tag:
678
	mov bx,word[esi]
679
	cmp bx,0
680
	je .tag_unknown ;тег не опознан
681
	bt edx,0
682
	jc @f
683
		ror bx,8
684
	@@:
685
	cmp word[eax],bx
686
	je .found
687
	inc esi
688
	@@:
689
		inc esi
690
		cmp byte[esi],0
691
		jne @b
692
	inc esi
693
	jmp .next_tag
694
	.found:
695
 
696
	;копируем строку
697
	add esi,2
698
	stdcall str_n_cat,edi,esi,[t_max]
699
 
4995 IgorA 700
	jmp @f
701
	.tag_unknown:
702
		mov dword[edi],'???'
703
		mov byte[edi+3],0
704
	@@:
705
 
4994 IgorA 706
	;читаем информацию в теге
707
	mov bx,tag_format_text
708
	bt edx,0
709
	jnc @f
710
		ror bx,8
711
	@@:
712
	cmp word[eax+2],bx
713
	jne .tag_02
714
		stdcall str_n_cat,edi,txt_dp,[t_max]
4995 IgorA 715
		call get_tag_data_size ;проверяем длинну строки
4994 IgorA 716
		cmp ebx,4
717
		jg @f
718
			;если строка помещается в 4 символа
719
			mov esi,eax
720
			add esi,8
721
			stdcall str_n_cat,edi,esi,[t_max]
722
			jmp .end_f
723
		;если строка не помещается в 4 символа
724
		@@:
725
		mov esi,dword[eax+8]
726
		bt edx,0
727
		jnc @f
728
			ror si,8
729
			ror esi,16
730
			ror si,8
731
		@@:
732
		add esi,offs_m_or_i
733
		add esi,[app1]
734
		stdcall str_n_cat,edi,esi,[t_max]
4995 IgorA 735
		jmp .end_f
4994 IgorA 736
	.tag_02:
737
 
4995 IgorA 738
	mov bx,tag_format_ui2b
739
	bt edx,0
740
	jnc @f
741
		ror bx,8
742
	@@:
743
	cmp word[eax+2],bx
744
	jne .tag_03
745
		stdcall str_n_cat,edi,txt_dp,[t_max]
746
		call get_tag_data_size
747
		cmp ebx,1
748
		jg .over4b_03
749
			;если одно 2 байтовое число
750
			movzx ebx,word[eax+8]
751
			bt edx,0
752
			jnc @f
753
				ror bx,8
754
			@@:
755
			stdcall str_len,edi
756
			add edi,eax
757
			mov eax,ebx
758
			call convert_int_to_str ;[t_max]
759
		.over4b_03:
760
			;...
761
		jmp .end_f
762
	.tag_03:
763
 
764
	mov bx,tag_format_ui4b
765
	bt edx,0
766
	jnc @f
767
		ror bx,8
768
	@@:
769
	cmp word[eax+2],bx
770
	jne .tag_04
771
		stdcall str_n_cat,edi,txt_dp,[t_max]
772
		call get_tag_data_size
773
		cmp ebx,1
774
		jg .over4b_04
775
			;если одно 4 байтовое число
776
			mov ebx,dword[eax+8]
777
			bt edx,0
778
			jnc @f
779
				ror bx,8
780
				ror ebx,16
781
				ror bx,8
782
			@@:
783
			stdcall str_len,edi
784
			add edi,eax
785
			mov eax,ebx
786
			call convert_int_to_str ;[t_max]
787
		.over4b_04:
788
			;...
789
		jmp .end_f
790
	.tag_04:
791
 
792
	mov bx,tag_format_urb
793
	bt edx,0
794
	jnc @f
795
		ror bx,8
796
	@@:
797
	cmp word[eax+2],bx
798
	jne .tag_05
799
		stdcall str_n_cat,edi,txt_dp,[t_max]
800
		;call get_tag_data_size
801
		;cmp ebx,1
802
		;jg .over4b_05
803
			mov ebx,dword[eax+8]
804
			bt edx,0
805
			jnc @f
806
				ror bx,8
807
				ror ebx,16
808
				ror bx,8
809
			@@:
810
			stdcall str_len,edi
811
			add edi,eax
812
			add ebx,offs_m_or_i
813
			add ebx,[app1]
814
			mov eax,[ebx]
815
			bt edx,0
816
			jnc @f
817
				ror ax,8
818
				ror eax,16
819
				ror ax,8
820
			@@:
821
			call convert_int_to_str ;ставим 1-е число
822
			stdcall str_n_cat,edi,txt_div,[t_max] ;ставим знак деления
823
			stdcall str_len,edi
824
			add edi,eax
825
			mov eax,[ebx+4]
826
			bt edx,0
827
			jnc @f
828
				ror ax,8
829
				ror eax,16
830
				ror ax,8
831
			@@:
832
			call convert_int_to_str ;ставим 2-е число
833
		;.over4b_05:
834
			;...
835
		;jmp .end_f
836
	.tag_05:
837
 
4994 IgorA 838
	.end_f:
839
	ret
840
endp
841
 
4995 IgorA 842
;input:
843
; eax - tag pointer
844
; edx - 1 if 'MM', 0 if 'II'
845
;output:
846
; ebx - data size
4994 IgorA 847
align 4
4995 IgorA 848
get_tag_data_size:
849
	mov ebx,dword[eax+4]
850
	bt edx,0
851
	jnc @f
852
		ror bx,8
853
		ror ebx,16
854
		ror bx,8
855
	@@:
4994 IgorA 856
	ret
857
 
858
align 4
859
proc str_n_cat uses eax ecx edi esi, str1:dword, str2:dword, n:dword
860
	mov esi,dword[str2]
861
	mov ecx,dword[n]
862
	mov edi,dword[str1]
863
	stdcall str_len,edi
864
	add edi,eax
865
	cld
866
	repne movsb
867
	mov byte[edi],0
868
	ret
869
endp
870
 
871
;output:
872
; eax = strlen
873
align 4
874
proc str_len, str1:dword
875
	mov eax,[str1]
876
	@@:
877
		cmp byte[eax],0
878
		je @f
879
		inc eax
880
		jmp @b
881
	@@:
882
	sub eax,[str1]
883
	ret
884
endp
885
 
4995 IgorA 886
;input:
887
; eax = value
888
; edi = string buffer
889
;output:
890
align 4
891
convert_int_to_str:
892
	pushad
893
		mov dword[edi+1],0
894
		mov dword[edi+5],0
895
		call .str
896
	popad
897
	ret
898
 
899
align 4
900
.str:
901
	mov ecx,0x0a ;задается система счисления изменяются регистры ebx,eax,ecx,edx входные параметры eax - число
902
    ;преревод числа в ASCII строку взодные данные ecx=система счисленя edi адрес куда записывать, будем строку, причем конец переменной
903
	cmp eax,ecx  ;сравнить если в eax меньше чем в ecx то перейти на @@-1 т.е. на pop eax
904
	jb @f
905
		xor edx,edx  ;очистить edx
906
		div ecx      ;разделить - остаток в edx
907
		push edx     ;положить в стек
908
		;dec edi             ;смещение необходимое для записи с конца строки
909
		call .str ;перейти на саму себя т.е. вызвать саму себя и так до того момента пока в eax не станет меньше чем в ecx
910
		pop eax
911
	@@: ;cmp al,10 ;проверить не меньше ли значение в al чем 10 (для системы счисленя 10 данная команда - лишная))
912
	or al,0x30  ;данная команда короче  чем две выше
913
	stosb	    ;записать элемент из регистра al в ячеку памяти es:edi
914
	ret	      ;вернуться чень интересный ход т.к. пока в стеке храниться кол-во вызовов то столько раз мы и будем вызываться
915
 
916
 
917
 
4994 IgorA 918
align 16
919
EXPORTS:
920
	dd sz_exif_get_app1, exif_get_app1
921
	dd sz_exif_get_app1_tag, exif_get_app1_tag
5002 IgorA 922
	dd sz_exif_get_app1_child, exif_get_app1_child
923
	dd sz_exif_get_app1_child_tag, exif_get_app1_child_tag
4994 IgorA 924
	dd 0,0
925
	sz_exif_get_app1 db 'exif_get_app1',0
926
	sz_exif_get_app1_tag db 'exif_get_app1_tag',0
5002 IgorA 927
	sz_exif_get_app1_child db 'exif_get_app1_child',0
928
	sz_exif_get_app1_child_tag db 'exif_get_app1_child_tag',0