Subversion Repositories Kolibri OS

Rev

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