Subversion Repositories Kolibri OS

Rev

Rev 5008 | Rev 5010 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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_id_gr     equ 10 ;ᬥ饭¨¥ id group
  13. offs_tag_0     equ  2 ;ᬥ饭¨¥ 0-£® ⥣ 
  14. tag_size       equ 12 ;à §¬¥à áâàãªâãàë ⥣ 
  15. ;ä®à¬ âë ¤ ­­ëå
  16. tag_format_ui1b  equ  1 ;unsigned integer 1 byte
  17. tag_format_text  equ  2 ;ascii string
  18. tag_format_ui2b  equ  3 ;unsigned integer 2 byte
  19. tag_format_ui4b  equ  4 ;unsigned integer 4 byte
  20. tag_format_urb   equ  5 ;unsigned integer 4/4 byte
  21. tag_format_si1b  equ  6 ;signed integer 1 byte
  22. tag_format_undef equ  7 ;undefined
  23. tag_format_si2b  equ  8 ;signed integer 2 byte
  24. tag_format_si4b  equ  9 ;signed integer 4 byte
  25. tag_format_srb   equ 10 ;signed integer 4/4 byte
  26. tag_format_f4b   equ 11 ;float 4 byte
  27. tag_format_f8b   equ 12 ;float 8 byte
  28.  
  29. align 4
  30. txt_dp db ': ',0
  31. txt_zap db ', ',0
  32. txt_div db '/',0
  33.  
  34. ;
  35. align 4
  36. exif_tag_numbers:
  37. dd 0,      gr_0
  38. dd 0x8769, gr_8769 ;Exif offset
  39. dd 0xa005, gr_a005 ;Interop offset
  40. dd 0x8825, gr_8825 ;GPS info
  41. .end:
  42.  
  43. align 4
  44. gr_0:
  45. db 0x00,0x0b,'Processing software',0
  46. db 0x00,0xfe,'Subfile type',0
  47. db 0x00,0xff,'OldSubfile type',0
  48. db 0x01,0x00,'Image width',0
  49. db 0x01,0x01,'Image height',0
  50. db 0x01,0x02,'Bits per sample',0
  51. db 0x01,0x03,'Compression',0
  52. db 0x01,0x06,'Photometric interpretation',0
  53. db 0x01,0x07,'Thresholding',0
  54. db 0x01,0x08,'Cell width',0
  55. db 0x01,0x09,'Cell length',0
  56. db 0x01,0x0a,'Fill order',0
  57. db 0x01,0x0d,'Document name',0
  58. db 0x01,0x0e,'Image description',0
  59. db 0x01,0x0f,'Manufacturer of digicam',0
  60. db 0x01,0x10,'Model',0
  61. db 0x01,0x11,'Strip offsets',0
  62. db 0x01,0x12,'Orientation',0
  63. db 0x01,0x15,'Samples per pixel',0
  64. db 0x01,0x16,'Rows per strip',0
  65. db 0x01,0x17,'Strip byte counts',0
  66. db 0x01,0x18,'Min sample value',0
  67. db 0x01,0x19,'Max sample value',0
  68. db 0x01,0x1a,'X resolution',0
  69. db 0x01,0x1b,'Y resolution',0
  70. db 0x01,0x1c,'Planar configuration',0
  71. db 0x01,0x1d,'Page name',0
  72. db 0x01,0x1e,'X position',0
  73. db 0x01,0x1f,'Y position',0
  74. db 0x01,0x20,'Free offsets',0
  75. db 0x01,0x21,'Free byte counts',0
  76. db 0x01,0x22,'Gray response unit',0
  77. db 0x01,0x23,'Gray response curve',0
  78. db 0x01,0x24,'T4 options',0
  79. db 0x01,0x25,'T6 options',0
  80. db 0x01,0x28,'Resolution unit',0
  81. db 0x01,0x29,'Page number',0
  82. db 0x01,0x2c,'Color response unit',0
  83. db 0x01,0x2d,'Transfer function',0
  84. db 0x01,0x31,'Software',0
  85. db 0x01,0x32,'Modify date',0
  86. db 0x01,0x3b,'Artist',0
  87. db 0x01,0x3c,'Host computer',0
  88. db 0x01,0x3d,'Predictor',0
  89. db 0x01,0x3e,'White point',0
  90. db 0x01,0x3f,'Primary chromaticities',0
  91. db 0x01,0x40,'Color map',0
  92. db 0x01,0x41,'Halftone hints',0
  93. db 0x01,0x42,'Tile width',0
  94. db 0x01,0x43,'Tile length',0
  95. db 0x01,0x44,'Tile offsets',0
  96. db 0x01,0x45,'Tile byte counts',0
  97. db 0x01,0x46,'Bad fax lines',0
  98. db 0x01,0x47,'Clean fax data',0
  99. db 0x01,0x48,'Consecutive bad fax lines',0
  100. db 0x01,0x4a,'Sub IFDs',0
  101. db 0x01,0x4c,'Ink set',0
  102. db 0x01,0x4d,'Ink names',0
  103. db 0x01,0x4e,'Numberof inks',0
  104. db 0x01,0x50,'Dot range',0
  105. db 0x01,0x51,'Target printer',0
  106. db 0x01,0x52,'Extra samples',0
  107. db 0x01,0x53,'Sample format',0
  108. db 0x01,0x54,'SMin sample value',0
  109. db 0x01,0x55,'SMax sample value',0
  110. db 0x01,0x56,'Transfer range',0
  111. db 0x01,0x57,'Clip path',0
  112. db 0x01,0x58,'X clip path units',0
  113. db 0x01,0x59,'Y clip path units',0
  114. db 0x01,0x5a,'Indexed',0
  115. db 0x01,0x5b,'JPEG tables',0
  116. db 0x01,0x5f,'OPIProxy',0
  117. db 0x01,0x90,'Global parameters IFD',0
  118. db 0x01,0x91,'Profile type',0
  119. db 0x01,0x92,'Fax profile',0
  120. db 0x01,0x93,'Coding methods',0
  121. db 0x01,0x94,'Version year',0
  122. db 0x01,0x95,'Mode number',0
  123. db 0x01,0xb1,'Decode',0
  124. db 0x01,0xb2,'Default image color',0
  125. db 0x01,0xb3,'T82 options',0
  126. db 0x01,0xb5,'JPEG tables',0 ;㦥 ¡ë«® ?
  127. db 0x02,0x00,'JPEG proc',0
  128. db 0x02,0x01,'Thumbnail offset',0
  129. db 0x02,0x02,'Thumbnail length',0
  130. db 0x02,0x03,'JPEG restart interval',0
  131. db 0x02,0x05,'JPEG lossless predictors',0
  132. db 0x02,0x06,'JPEG point transforms',0
  133. db 0x02,0x07,'JPEG QTables',0
  134. db 0x02,0x08,'JPEG DCTables',0
  135. db 0x02,0x09,'JPEG ACTables',0
  136. db 0x02,0x11,'YCbCrCoefficients',0
  137. db 0x02,0x12,'YCbCrSubSampling',0
  138. db 0x02,0x13,'YCbCrPositioning',0
  139. db 0x02,0x14,'Reference black white',0
  140. db 0x02,0x2f,'Strip row counts',0
  141. db 0x03,0xe7,'USPTO Miscellaneous',0
  142. db 0x47,0x46,'Rating',0
  143. db 0x47,0x47,'XP_DIP_XML',0
  144. db 0x47,0x48,'Stitch info',0
  145. db 0x47,0x49,'Rating percent',0
  146. db 0x80,0x0d,'Image ID',0
  147. db 0x80,0xa3,'Wang tag 1',0
  148. db 0x80,0xa4,'Wang annotation',0
  149. db 0x80,0xa5,'Wang tag 3',0
  150. db 0x80,0xa6,'Wang tag 4',0
  151. db 0x80,0xe3,'Matteing',0
  152. db 0x80,0xe4,'Data type',0
  153. db 0x80,0xe5,'Image depth',0
  154. db 0x80,0xe6,'Tile depth',0
  155. db 0x82,0x7d,'Model 2',0
  156. db 0x82,0x8d,'CFA repeat pattern dim',0
  157. db 0x82,0x8e,'CFA pattern 2',0
  158. db 0x82,0x8f,'Battery level',0
  159. db 0x82,0x90,'Kodak IFD',0
  160. db 0x82,0x98,'Copyright',0
  161. db 0x82,0xa5,'MD file tag',0
  162. db 0x82,0xa6,'MD scale pixel',0
  163. db 0x82,0xa7,'MD color table',0
  164. db 0x82,0xa8,'MD lab name',0
  165. db 0x82,0xa9,'MD sample info',0
  166. db 0x82,0xaa,'MD prep date',0
  167. db 0x82,0xab,'MD prep time',0
  168. db 0x82,0xac,'MD file units',0
  169. db 0x83,0x0e,'Pixel scale',0
  170. db 0x83,0x35,'Advent scale',0
  171. db 0x83,0x36,'Advent revision',0
  172. db 0x83,0x5c,'UIC1 tag',0
  173. db 0x83,0x5d,'UIC2 tag',0
  174. db 0x83,0x5e,'UIC3 tag',0
  175. db 0x83,0x5f,'UIC4 tag',0
  176. db 0x83,0xbb,'IPTC-NAA',0
  177. db 0x84,0x7e,'Intergraph packet data',0
  178. db 0x84,0x7f,'Intergraph flag registers',0
  179. db 0x84,0x80,'Intergraph matrix',0
  180. db 0x84,0x81,'INGR reserved',0
  181. db 0x84,0x82,'Model tie point',0
  182. db 0x84,0xe0,'Site',0
  183. db 0x84,0xe1,'Color sequence',0
  184. db 0x84,0xe2,'IT8 header',0
  185. db 0x84,0xe3,'Raster padding',0
  186. db 0x84,0xe4,'Bits per run length',0
  187. db 0x84,0xe5,'Bits per extended run length',0
  188. db 0x84,0xe6,'Color table',0
  189. db 0x84,0xe7,'Image color indicator',0
  190. db 0x84,0xe8,'Background color indicator',0
  191. db 0x84,0xe9,'Image color value',0
  192. db 0x84,0xea,'Background color value',0
  193. db 0x84,0xeb,'Pixel intensity range',0
  194. db 0x84,0xec,'Transparency indicator',0
  195. db 0x84,0xed,'Color characterization',0
  196. db 0x84,0xee,'HCUsage',0
  197. db 0x84,0xef,'Trap indicator',0
  198. db 0x84,0xf0,'CMYK equivalent',0
  199. db 0x85,0x46,'SEM info',0
  200. db 0x85,0x68,'AFCP_IPTC',0
  201. db 0x85,0xb8,'Pixel magic JBIG options',0
  202. db 0x85,0xd8,'Model transform',0
  203. db 0x86,0x02,'WB_GRGB levels',0
  204. db 0x86,0x06,'Leaf data',0
  205. db 0x86,0x49,'Photoshop settings',0
  206. db 0x87,0x69,'Exif offset',0
  207. db 0x87,0x73,'ICC_Profile',0
  208. db 0x87,0x7f,'TIFF_FX extensions',0
  209. db 0x87,0x80,'Multi profiles',0
  210. db 0x87,0x81,'Shared data',0
  211. db 0x87,0x82,'T88 options',0
  212. db 0x87,0xac,'Image layer',0
  213. db 0x87,0xaf,'Geo tiff directory',0
  214. db 0x87,0xb0,'Geo tiff double params',0
  215. db 0x87,0xb1,'Geo tiff ascii params',0
  216. db 0x88,0x25,'GPS info',0
  217. db 0x88,0x28,'Opto-Electric conv factor',0
  218. db 0x88,0x29,'Interlace',0
  219. db 0x88,0x5c,'Fax recv params',0
  220. db 0x88,0x5d,'Fax sub address',0
  221. db 0x88,0x5e,'Fax recv time',0
  222. db 0x88,0x8a,'Leaf sub IFD',0
  223. db 0x92,0x0b,'Flash energy',0
  224. db 0x92,0x0c,'Spatial frequency response',0
  225. db 0x92,0x0d,'Noise',0
  226. db 0x92,0x0e,'Focal plane X resolution',0
  227. db 0x92,0x0f,'Focal plane Y resolution',0
  228. db 0x92,0x10,'Focal plane resolution unit',0
  229. db 0x92,0x15,'Exposure index',0
  230. db 0x92,0x16,'TIFF-EP standard ID',0
  231. db 0x92,0x17,'Sensing method',0
  232. db 0x92,0x3a,'CIP3 data file',0
  233. db 0x92,0x3b,'CIP3 sheet',0
  234. db 0x92,0x3c,'CIP3 side',0
  235. db 0x92,0x3f,'Sto nits',0
  236. db 0x93,0x2f,'MS document text',0
  237. db 0x93,0x30,'MS property set storage',0
  238. db 0x93,0x31,'MS document text position',0
  239. db 0x93,0x5c,'Image source data',0
  240. db 0x9c,0x9b,'XP title',0
  241. db 0x9c,0x9c,'XP comment',0
  242. db 0x9c,0x9d,'XP author',0
  243. db 0x9c,0x9e,'XP keywords',0
  244. db 0x9c,0x9f,'XP subject',0
  245. db 0xa2,0x0c,'Spatial frequency fesponse',0
  246. db 0xa2,0x0d,'Noise',0
  247. db 0xa2,0x11,'Image number',0
  248. db 0xa2,0x12,'Security classification',0
  249. db 0xa2,0x13,'Image history',0
  250. db 0xa2,0x16,'TIFF-EP standard ID',0
  251. db 0xa4,0x80,'GDAL metadata',0
  252. db 0xa4,0x81,'GDAL no data',0
  253. db 0xaf,0xc0,'Expand software',0
  254. db 0xaf,0xc1,'Expand lens',0
  255. db 0xaf,0xc2,'Expand film',0
  256. db 0xaf,0xc3,'Expand filterLens',0
  257. db 0xaf,0xc4,'Expand scanner',0
  258. db 0xaf,0xc5,'Expand flash lamp',0
  259. db 0xbc,0x01,'Pixel format',0
  260. db 0xbc,0x02,'Transformation',0
  261. db 0xbc,0x03,'Uncompressed',0
  262. db 0xbc,0x04,'Image type',0
  263. db 0xbc,0x80,'Image width',0
  264. db 0xbc,0x81,'Image height',0
  265. db 0xbc,0x82,'Width resolution',0
  266. db 0xbc,0x83,'Height resolution',0
  267. db 0xbc,0xc0,'Image offset',0
  268. db 0xbc,0xc1,'Image byte count',0
  269. db 0xbc,0xc2,'Alpha offset',0
  270. db 0xbc,0xc3,'Alpha byte count',0
  271. db 0xbc,0xc4,'Image data discard',0
  272. db 0xbc,0xc5,'Alpha data discard',0
  273. db 0xc4,0x27,'Oce scanjob desc',0
  274. db 0xc4,0x28,'Oce application selector',0
  275. db 0xc4,0x29,'Oce ID number',0
  276. db 0xc4,0x2a,'Oce image logic',0
  277. db 0xc4,0x4f,'Annotations',0
  278. db 0xc4,0xa5,'Print IM',0
  279. db 0xc5,0x73,'Original file name',0
  280. db 0xc5,0x80,'USPTO original content type',0
  281. db 0xc6,0x12,'DNG version',0
  282. db 0xc6,0x13,'DNG backward version',0
  283. db 0xc6,0x14,'Unique camera model',0
  284. db 0xc6,0x15,'Localized camera model',0
  285. db 0xc6,0x16,'CFA plane color',0
  286. db 0xc6,0x17,'CFA layout',0
  287. db 0xc6,0x18,'Linearization table',0
  288. db 0xc6,0x19,'Black level repeat dim',0
  289. db 0xc6,0x1a,'Black level',0
  290. db 0xc6,0x1b,'Black level delta H',0
  291. db 0xc6,0x1c,'Black level delta V',0
  292. db 0xc6,0x1d,'White level',0
  293. db 0xc6,0x1e,'Default scale',0
  294. db 0xc6,0x1f,'Default crop origin',0
  295. db 0xc6,0x20,'Default crop size',0
  296. db 0xc6,0x21,'Color matrix 1',0
  297. db 0xc6,0x22,'Color matrix 2',0
  298. db 0xc6,0x23,'Camera calibration 1',0
  299. db 0xc6,0x24,'Camera calibration 2',0
  300. db 0xc6,0x25,'Reduction matrix 1',0
  301. db 0xc6,0x26,'Reduction matrix 2',0
  302. db 0xc6,0x27,'Analog balance',0
  303. db 0xc6,0x28,'As shot neutral',0
  304. db 0xc6,0x29,'As shot white XY',0
  305. db 0xc6,0x2a,'BaselineExposure',0
  306. db 0xc6,0x2b,'BaselineNoise',0
  307. db 0xc6,0x2c,'BaselineSharpness',0
  308. db 0xc6,0x2d,'BayerGreenSplit',0
  309. db 0xc6,0x2e,'Linear response limit',0
  310. db 0xc6,0x2f,'Camera serial number',0
  311. db 0xc6,0x30,'DNG lens info',0
  312. db 0xc6,0x31,'Chroma blur radius',0
  313. db 0xc6,0x32,'Anti alias strength',0
  314. db 0xc6,0x33,'Shadow scale',0
  315. db 0xc6,0x34,'SR2 private',0
  316. db 0xc6,0x35,'Maker note safety',0
  317. db 0xc6,0x40,'Raw image segmentation',0
  318. db 0xc6,0x5a,'Calibration illuminant 1',0
  319. db 0xc6,0x5b,'Calibration illuminant 2',0
  320. db 0xc6,0x5c,'Best quality scale',0
  321. db 0xc6,0x5d,'Raw data unique ID',0
  322. db 0xc6,0x60,'Alias layer metadata',0
  323. db 0xc6,0x8b,'Original raw file name',0
  324. db 0xc6,0x8c,'Original raw file data',0
  325. db 0xc6,0x8d,'Active area',0
  326. db 0xc6,0x8e,'Masked areas',0
  327. db 0xc6,0x8f,'AsShot ICC profile',0
  328. db 0xc6,0x90,'AsShot pre profile matrix',0
  329. db 0xc6,0x91,'Current ICC profile',0
  330. db 0xc6,0x92,'Current pre profile matrix',0
  331. db 0xc6,0xbf,'Colorimetric reference',0
  332. db 0xc6,0xd2,'Panasonic title',0
  333. db 0xc6,0xd3,'Panasonic title 2',0
  334. db 0xc6,0xf3,'Camera calibration sig',0
  335. db 0xc6,0xf4,'Profile calibration sig',0
  336. db 0xc6,0xf5,'Profile IFD',0
  337. db 0xc6,0xf6,'AsShot profile name',0
  338. db 0xc6,0xf7,'Noise reduction applied',0
  339. db 0xc6,0xf8,'Profile name',0
  340. db 0xc6,0xf9,'Profile hue sat map dims',0
  341. db 0xc6,0xfa,'Profile hue sat map data 1',0
  342. db 0xc6,0xfb,'Profile hue sat map data 2',0
  343. db 0xc6,0xfc,'Profile tone curve',0
  344. db 0xc6,0xfd,'Profile embed policy',0
  345. db 0xc6,0xfe,'Profile copyright',0
  346. db 0xc7,0x14,'Forward matrix 1',0
  347. db 0xc7,0x15,'Forward matrix 2',0
  348. db 0xc7,0x16,'Preview application name',0
  349. db 0xc7,0x17,'Preview application version',0
  350. db 0xc7,0x18,'Preview settings name',0
  351. db 0xc7,0x19,'Preview settings digest',0
  352. db 0xc7,0x1a,'Preview color space',0
  353. db 0xc7,0x1b,'Preview date time',0
  354. db 0xc7,0x1c,'Raw image digest',0
  355. db 0xc7,0x1d,'Original raw file digest',0
  356. db 0xc7,0x1e,'Sub tile block size',0
  357. db 0xc7,0x1f,'Row interleave factor',0
  358. db 0xc7,0x25,'Profile look table dims',0
  359. db 0xc7,0x26,'Profile look table data',0
  360. db 0xc7,0x40,'Opcode list 1',0
  361. db 0xc7,0x41,'Opcode list 2',0
  362. db 0xc7,0x4e,'Opcode list 3',0
  363. db 0xc7,0x61,'Noise profile',0
  364. db 0xc7,0x63,'Time codes',0
  365. db 0xc7,0x64,'Frame rate',0
  366. db 0xc7,0x72,'TStop',0
  367. db 0xc7,0x89,'Reel name',0
  368. db 0xc7,0x91,'Original default final size',0
  369. db 0xc7,0x92,'Original best quality size',0
  370. db 0xc7,0x93,'Original default crop size',0
  371. db 0xc7,0xa1,'Camera label',0
  372. db 0xc7,0xa3,'Profile hue sat map encoding',0
  373. db 0xc7,0xa4,'Profile look table encoding',0
  374. db 0xc7,0xa5,'Baseline exposure offset',0
  375. db 0xc7,0xa6,'Default black render',0
  376. db 0xc7,0xa7,'New raw image digest',0
  377. db 0xc7,0xa8,'Raw to preview gain',0
  378. db 0xc7,0xb5,'Default user crop',0
  379. db 0xfe,0x00,'KDC_IFD',0
  380.  
  381. dd 0
  382.  
  383. align 4
  384. gr_8769:
  385. db 0x02,0xbc,'Application notes',0
  386. db 0x82,0x9a,'Exposure time',0
  387. db 0x82,0x9d,'F number',0
  388. db 0x88,0x22,'Exposure program',0
  389. db 0x88,0x24,'Spectral sensitivity',0
  390. db 0x88,0x27,'ISO',0
  391. db 0x88,0x2a,'Time zone offset',0
  392. db 0x88,0x2b,'Self timer mode',0
  393. db 0x88,0x30,'Sensitivity type',0
  394. db 0x88,0x31,'Standard output sensitivity',0
  395. db 0x88,0x32,'Recommended exposure index',0
  396. db 0x88,0x33,'ISO speed',0
  397. db 0x88,0x34,'ISO speed latitude yyy',0
  398. db 0x88,0x35,'ISO speed latitude zzz',0
  399. db 0x90,0x00,'Exif version',0
  400. db 0x90,0x03,'Date time original',0
  401. db 0x90,0x04,'Create date',0
  402. db 0x91,0x01,'Components configuration',0
  403. db 0x91,0x02,'Compressed bits per pixel',0
  404. db 0x92,0x01,'Shutter speed value',0
  405. db 0x92,0x02,'Aperture value',0
  406. db 0x92,0x03,'Brightness value',0
  407. db 0x92,0x04,'Exposure compensation',0
  408. db 0x92,0x05,'Max aperture value',0
  409. db 0x92,0x06,'Subject distance',0
  410. db 0x92,0x07,'Metering mode',0
  411. db 0x92,0x08,'Light source',0
  412. db 0x92,0x09,'Flash',0
  413. db 0x92,0x0a,'Focal length',0
  414. db 0x92,0x11,'Image number',0
  415. db 0x92,0x12,'Security classification',0
  416. db 0x92,0x13,'Image history',0
  417. db 0x92,0x14,'Subject area',0
  418. db 0x92,0x7c,'Maker note',0
  419. db 0x92,0x86,'User comment',0
  420. db 0x92,0x90,'Sub sec time',0
  421. db 0x92,0x91,'Sub sec time original',0
  422. db 0x92,0x92,'Sub sec time digitized',0
  423. db 0xa0,0x00,'Flashpix version',0
  424. db 0xa0,0x01,'Color space',0
  425. db 0xa0,0x02,'Exif image width',0
  426. db 0xa0,0x03,'Exif image height',0
  427. db 0xa0,0x04,'Related sound file',0
  428. db 0xa0,0x05,'Interop offset',0
  429. db 0xa2,0x0b,'Flash energy',0
  430. db 0xa2,0x0e,'Focal plane X resolution',0
  431. db 0xa2,0x0f,'Focal plane Y resolution',0
  432. db 0xa2,0x10,'Focal plane resolution unit',0
  433. db 0xa2,0x14,'Subject location',0
  434. db 0xa2,0x15,'Exposure index',0
  435. db 0xa2,0x17,'Sensing method',0
  436. db 0xa3,0x00,'File source',0
  437. db 0xa3,0x01,'Scene type',0
  438. db 0xa3,0x02,'CFA pattern',0
  439. db 0xa4,0x01,'Custom rendered',0
  440. db 0xa4,0x02,'Exposure mode',0
  441. db 0xa4,0x03,'White balance',0
  442. db 0xa4,0x04,'Digital zoom ratio',0
  443. db 0xa4,0x05,'Focal length in 35mm format',0
  444. db 0xa4,0x06,'Scene capture type',0
  445. db 0xa4,0x07,'Gain control',0
  446. db 0xa4,0x08,'Contrast',0
  447. db 0xa4,0x09,'Saturation',0
  448. db 0xa4,0x0a,'Sharpness',0
  449. db 0xa4,0x0b,'Device setting description',0
  450. db 0xa4,0x0c,'Subject distance range',0
  451. db 0xa4,0x20,'Image unique ID',0
  452. db 0xa4,0x30,'Owner name',0
  453. db 0xa4,0x31,'Serial number',0
  454. db 0xa4,0x32,'Lens info',0
  455. db 0xa4,0x33,'Lens make',0
  456. db 0xa4,0x34,'Lens model',0
  457. db 0xa4,0x35,'Lens serial number',0
  458. db 0xa5,0x00,'Gamma',0
  459. db 0xea,0x1c,'Padding',0
  460. db 0xea,0x1d,'Offset schema',0
  461. db 0xfd,0xe8,'Owner name',0
  462. db 0xfd,0xe9,'Serial number',0
  463. db 0xfd,0xea,'Lens',0
  464. db 0xfe,0x4c,'Raw file',0
  465. db 0xfe,0x4d,'Converter',0
  466. db 0xfe,0x4e,'White balance',0
  467. db 0xfe,0x51,'Exposure',0
  468. db 0xfe,0x52,'Shadows',0
  469. db 0xfe,0x53,'Brightness',0
  470. db 0xfe,0x54,'Contrast',0
  471. db 0xfe,0x55,'Saturation',0
  472. db 0xfe,0x56,'Sharpness',0
  473. db 0xfe,0x57,'Smoothness',0
  474. db 0xfe,0x58,'Moire filter',0
  475.  
  476. dd 0
  477.  
  478. align 4
  479. gr_a005:
  480. db 0x00,0x01,'Interop index',0
  481. db 0x00,0x02,'Interop version',0
  482. db 0x10,0x00,'Related image file format',0
  483. db 0x10,0x01,'Related image width',0
  484. db 0x10,0x02,'Related image height',0
  485. dd 0
  486.  
  487. align 4
  488. gr_8825:
  489. db 0x00,0x00,'GPS version ID',0
  490. db 0x00,0x01,'GPS latitude ref',0
  491. db 0x00,0x02,'GPS latitude',0
  492. db 0x00,0x03,'GPS longitude ref',0
  493. db 0x00,0x04,'GPS longitude',0
  494. db 0x00,0x05,'GPS altitude ref',0
  495. db 0x00,0x06,'GPS altitude',0
  496. db 0x00,0x07,'GPS time stamp',0
  497. db 0x00,0x08,'GPS satellites',0
  498. db 0x00,0x09,'GPS status',0
  499. db 0x00,0x0a,'GPS measuremode',0
  500. db 0x00,0x0b,'GPS dop',0
  501. db 0x00,0x0c,'GPS speed ref',0
  502. db 0x00,0x0d,'GPS speed',0
  503. db 0x00,0x0e,'GPS track ref',0
  504. db 0x00,0x0f,'GPS track',0
  505. db 0x00,0x10,'GPS img direction ref',0
  506. db 0x00,0x11,'GPS img direction',0
  507. db 0x00,0x12,'GPS map datum',0
  508. db 0x00,0x13,'GPS dest latitude ref',0
  509. db 0x00,0x14,'GPS dest latitude',0
  510. db 0x00,0x15,'GPS dest longitude ref',0
  511. db 0x00,0x16,'GPS dest longitude',0
  512. db 0x00,0x17,'GPS dest bearing ref',0
  513. db 0x00,0x18,'GPS dest bearing',0
  514. db 0x00,0x19,'GPS dest distance ref',0
  515. db 0x00,0x1a,'GPS dest distance',0
  516. db 0x00,0x1b,'GPS processing method',0
  517. db 0x00,0x1c,'GPS area information',0
  518. db 0x00,0x1d,'GPS date stamp',0
  519. db 0x00,0x1e,'GPS differential',0
  520. db 0x00,0x1f,'GPS h positioning error',0
  521.  
  522. dd 0
  523.  
  524. ;input:
  525. ; bof - 㪠§ â¥«ì ­  ­ ç «® ä ©« 
  526. ; app1 - 㪠§ â¥«ì ¤«ï § ¯®«­¥­¨ï exif.app1
  527. ;output:
  528. ; app1 - 㪠§ â¥«ì ­  ­ ç «® exif.app1 (¨«¨ 0 ¥á«¨ ­¥ ­ ©¤¥­® ¨«¨ ä®à¬ â ä ©«  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï)
  529. align 4
  530. proc exif_get_app1 uses eax ebx edi, bof:dword, app1:dword
  531.         mov eax,[bof]
  532.         mov edi,[app1]
  533.  
  534.         ;ä ©« ¢ ä®à¬ â¥ jpg?
  535.         cmp word[eax],0xd8ff
  536.         jne .no_exif
  537.         add eax,2
  538.  
  539.         ;ä ©« ᮤ¥à¦¨â exif.app0?
  540.         cmp word[eax],0xe0ff
  541.         jne @f
  542.                 add eax,2
  543.                 movzx ebx,word[eax]
  544.                 ror bx,8 ;¢á¥£¤  «¨ â ª ­ ¤®?
  545.                 add eax,ebx
  546.         @@:
  547.  
  548.         ;ä ©« ᮤ¥à¦¨â exif.app1?
  549.         cmp word[eax],0xe1ff
  550.         jne .no_exif
  551.  
  552.         xor ebx,ebx
  553.         cmp word[eax+10],'II'
  554.         je @f
  555.                 inc ebx ;if 'MM' edx=1
  556.         @@:
  557.         mov [edi+offs_m_or_i],ebx
  558.         ;¯¨è¥¬ ®¤­®© ª®¬ ­¤®© ¢ dword[edi+offs_m_or_i]
  559.         ;¢ ¬« ¤è¨¥ 2 ¡ ©â  ᯮᮡ ¢ëà ¢­¨¢ ­¨ï ç¨á¥«
  560.         ;¢ áâ à訥 2 ¡ ©â  id £àã¯ë, ª®â®àë© ¢á¥£¤  0 ¤«ï app1
  561.         add eax,18
  562.         mov [edi],eax
  563.         sub eax,8
  564.         mov [edi+4],eax
  565.  
  566.         jmp @f
  567.         .no_exif:
  568.                 mov dword[edi],0
  569.         @@:
  570.         ret
  571. endp
  572.  
  573. ;input:
  574. ; app1 - 㪠§ â¥«ì ­  ­ ç «® exif.app1
  575. ; num - ¯®à浪®¢ë© ­®¬¥à ⥣  (­ ç¨­ ¥âáï á 1)
  576. ; txt - 㪠§ â¥«ì ­  ⥪áâ, ªã¤  ¡ã¤¥â § ¯¨á ­® §­ ç¥­¨¥
  577. ; t_max - ¬ ªá¨¬ «ì­ë© à §¬¥à ⥪áâ 
  578. align 4
  579. proc exif_get_app1_tag, app1:dword, num:dword, txt:dword, t_max:dword
  580. pushad
  581.         mov eax,[app1]
  582.         mov edi,[txt]
  583.         mov ecx,[num]
  584.  
  585.         xor edx,edx
  586.         mov byte[edi],dl
  587.         cmp [eax],edx
  588.         je .end_f ;¥á«¨ ­¥ ­ ©¤¥­ 㪠§ â¥«ì ­  ­ ç «® exif.app1
  589.         cmp ecx,edx
  590.         jle .end_f ;¥á«¨ ¯®à浪®¢ë© ­®¬¥à ⥣  <= 0
  591.  
  592.         movzx edx,word[eax+offs_m_or_i] ;if 'MM' edx=1
  593.  
  594.         ;¯à®¢¥à塞 ç¨á«® ⥣®¢
  595.         mov eax,[eax]
  596.         movzx ebx,word[eax]
  597.         bt edx,0
  598.         jnc @f
  599.                 ror bx,8
  600.         @@:
  601.         cmp ecx,ebx
  602.         jg .end_f ;¥á«¨ ­®¬¥à ⥣  ¡®«ìè¥ ç¥¬ ¨å ¥áâì ¢ ä ©«¥
  603.  
  604.         ;¯¥à¥å®¤¨¬ ­  § ¤ ­­ë© ⥣
  605.         dec ecx
  606.         imul ecx,tag_size
  607.         add eax,offs_tag_0
  608.         add eax,ecx
  609.  
  610.         stdcall read_tag_value,[app1],[t_max]
  611.  
  612.         .end_f:
  613. popad
  614.         ret
  615. endp
  616.  
  617. ;input:
  618. ; app1 - 㪠§ â¥«ì ­  exif.app1 ¨«¨ ­  exif.app1.child
  619. ; child - 㪠§ â¥«ì ¤«ï § ¯®«­¥­¨ï ­ ç «  ¤®ç¥à­¨å ⥣®¢ exif.app1.child
  620. ; c_tag - ⥣ ¤«ï ª®â®à®£® ¤¥« ¥âáï ¯®¨áª ¤®ç¥à­¨å
  621. ;output:
  622. ; child - 㪠§ â¥«ì ­  ­ ç «® ¤®ç¥à­¨å ⥣®¢
  623. align 4
  624. proc exif_get_app1_child, app1:dword, child:dword , c_tag:dword
  625. pushad
  626.         mov eax,[app1]
  627.         mov edi,[child]
  628.  
  629.         xor edx,edx
  630.         cmp [eax],edx
  631.         je .no_found ;¥á«¨ ­¥ ­ ©¤¥­ 㪠§ â¥«ì ­  ­ ç «® exif.app1
  632.  
  633.         movzx edx,word[eax+offs_m_or_i] ;if 'MM' edx=1
  634.  
  635.         ;­ ç «® ¯®¨áª 
  636.         mov ebx,[c_tag]
  637.         bt edx,0
  638.         jnc @f
  639.                 ror bx,8
  640.         @@:
  641.  
  642.         ;¯à®¢¥à塞 ç¨á«® ⥣®¢
  643.         mov eax,[eax]
  644.         movzx ecx,word[eax]
  645.         bt edx,0
  646.         jnc @f
  647.                 ror cx,8
  648.         @@:
  649.         cmp ecx,1
  650.         jl .no_found ;¥á«¨ ç¨á«® ⥣®¢ <1
  651.  
  652.         ;¯¥à¥å®¤¨¬ ­  1-© ⥣
  653.         add eax,offs_tag_0
  654.         @@:
  655.                 cmp word[eax],bx
  656.                 je @f
  657.                 add eax,tag_size
  658.                 loop @b
  659.         jmp .no_found ;¥á«¨ ­¥ ­ ©¤¥­®
  660.         @@: ;¥á«¨ ­ ©¤¥­®
  661.                 mov ebx,dword[eax+8]
  662.                 bt edx,0
  663.                 jnc @f
  664.                         ror bx,8
  665.                         ror ebx,16
  666.                         ror bx,8
  667.                 @@:
  668.                 mov eax,[app1]
  669.                 add ebx,[eax+4]
  670.                 mov dword[edi],ebx
  671.                 m2m dword[edi+4],dword[eax+4]
  672.                 ror edx,16
  673.                 mov dx,word[c_tag]
  674.                 ror edx,16
  675.                 mov dword[edi+offs_m_or_i],edx
  676.  
  677.         jmp .end_f
  678.         .no_found:
  679.                 mov dword[edi],0
  680.         .end_f:
  681. popad
  682.         ret
  683. endp
  684.  
  685. ;output:
  686. ; app2 - 㪠§ â¥«ì ­  ­ ç «® exif.app2 (¨«¨ 0 ¥á«¨ ­¥ ­ ©¤¥­® ¨«¨ ä®à¬ â ä ©«  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï)
  687. align 4
  688. proc exif_get_app2, app1:dword, app2:dword
  689. pushad
  690.         mov eax,[app1]
  691.         cmp [eax],edx
  692.         je .no_suport ;¥á«¨ ­¥ ­ ©¤¥­ 㪠§ â¥«ì ­  ­ ç «® exif.app1
  693.  
  694.         mov edi,[app2]
  695.         movzx edx,word[eax+offs_m_or_i] ;if 'MM' edx=1
  696.  
  697.         ;­ ç «® ¯®¨áª  ¯à®¨§¢®¤¨â¥«ï ª ¬¥àë
  698.         mov ebx,0x010f
  699.         bt edx,0
  700.         jnc @f
  701.                 ror bx,8
  702.         @@:
  703.  
  704.         ;¯à®¢¥à塞 ç¨á«® ⥣®¢
  705.         mov eax,[eax]
  706.         movzx ecx,word[eax]
  707.         bt edx,0
  708.         jnc @f
  709.                 ror cx,8
  710.         @@:
  711.         cmp ecx,1
  712.         jl .no_suport ;¥á«¨ ç¨á«® ⥣®¢ <1
  713.  
  714.         ;¯¥à¥å®¤¨¬ ­  1-© ⥣
  715.         add eax,offs_tag_0
  716.         @@:
  717.                 cmp word[eax],bx
  718.                 je @f
  719.                 add eax,tag_size
  720.                 loop @b
  721.         jmp .no_suport ;¥á«¨ ­¥ ­ ©¤¥­®
  722.         @@: ;¥á«¨ ­ ©¤¥­®      
  723.                 mov ebx,dword[eax+4]
  724.                 bt edx,0
  725.                 jnc @f
  726.                         ror bx,8
  727.                         ror ebx,16
  728.                         ror bx,8
  729.                 @@:
  730.                 cmp ebx,4
  731.                 jle .no_suport ;­ §¢ ­¨¥ ¯à®¨§¢®¤¨â¥«ï ¬¥­ìè¥ 4 ᨬ¢®«®¢, ­¥ ¯®¤¤¥à¦¨ ¢ ¥âáï
  732.  
  733.                 mov ebx,dword[eax+8]
  734.                 bt edx,0
  735.                 jnc @f
  736.                         ror bx,8
  737.                         ror ebx,16
  738.                         ror bx,8
  739.                 @@:
  740.        
  741.         ;¯à®¢¥àª  ¯®¤¤¥à¦¨¢ ¥¬ëå ¯à®¨§¢®¤¨â¥«¥©
  742.         mov eax,[app1]
  743.         add ebx,[eax+4]
  744.         cmp dword[ebx],'Cano'
  745.         je .suport
  746.         cmp dword[ebx],'NIKO'
  747.         je .suport
  748.         cmp dword[ebx],'Pana'
  749.         je .suport
  750.  
  751.         ;¢á¥ ®áâ «ì­ë¥ ­¥ ¯®¤¤¥à¦¨¢ îâáï
  752.         jmp .no_suport
  753.  
  754.         .suport:
  755.         ;­ å®¤¨¬ ⥣ 0x8769 (à áè¨à¥­­ë¥ ¤ ­­ë¥ ¯® Exif)
  756.         stdcall exif_get_app1_child, eax,edi,0x8769
  757.         cmp dword[edi],0
  758.         je .no_suport
  759.         ;­ å®¤¨¬ ⥣ 0xa005 (¤ ­­ë¥ Maker ¯® ª ¬¥à¥)
  760.         stdcall exif_get_app1_child, edi,edi, 0x927c
  761.         cmp dword[edi],0
  762.         je .no_suport
  763.  
  764.         cmp dword[ebx],'NIKO'
  765.         jne @f
  766.                 add dword[edi],18 ;for Nikon
  767.         @@:
  768.         cmp dword[ebx],'Pana'
  769.         jne @f
  770.                 add dword[edi],12 ;for Panasonic
  771.         @@:
  772.  
  773.         jmp @f
  774.         .no_suport:
  775.                 mov dword[edi],0
  776.         @@:
  777. popad
  778.         ret
  779. endp
  780.  
  781. ;description:
  782. ; ¢á¯®¬®£ â¥«ì­ ï äã­ªæ¨ï ¤«ï ç⥭¨ï ­ §­ ç¥­¨© ⥣®¢
  783. ;input:
  784. ; eax - 㪠§ â¥«ì ­ ç «  ⥣ 
  785. ; edi - 㪠§ â¥«ì ­  ¯ ¬ïâì ¤«ï § ¯¨á¨ ⥪á⮢®© áâப¨
  786. align 4
  787. proc read_tag_value, app1:dword, t_max:dword
  788.         push exif_tag_numbers
  789.         pop esi
  790.  
  791.         ;¯®¨áª â ¡«¨æë ¤«ï £à㯯ë ⥣®¢
  792.         mov ebx,[app1]
  793.         mov bx,word[ebx+offs_id_gr] ;¡¥à¥¬ ¨¤¥­â¨ä¨ª â®à £à㯯ë ⥣®¢
  794.         @@:
  795.                 cmp word[esi],bx
  796.                 je .set_table
  797.                 add esi,8
  798.                 cmp esi,exif_tag_numbers.end
  799.                 jge .tag_unknown ;⥣ ­¥ ®¯®§­ ­ (­¥ ­ ©¤¥­  â ¡«¨æ  £à㯯ë ⥣®¢)
  800.                 jmp @b
  801.         .set_table:
  802.                 mov esi,dword[esi+4] ;ãáâ ­®¢ª   ¤à¥á  â ¡«¨æë ¢ esi
  803.  
  804.         ;¯®¨áª ­ §¢ ­¨ï ⥣  ¢ â ¡«¨æ¥
  805.         .next_tag:
  806.         mov bx,word[esi]
  807.         cmp bx,0
  808.         jne @f
  809.                 cmp dword[esi],0
  810.                 jne @f
  811.                 jmp .tag_unknown ;⥣ ­¥ ®¯®§­ ­ (¢ £à㯯¥ ­¥ ­ ©¤¥­ ⥣)
  812.         @@:
  813.         bt edx,0
  814.         jc @f
  815.                 ror bx,8
  816.         @@:
  817.         cmp word[eax],bx
  818.         je .found
  819.         inc esi
  820.         @@:
  821.                 inc esi
  822.                 cmp byte[esi],0
  823.                 jne @b
  824.         inc esi
  825.         jmp .next_tag
  826.         .found:
  827.  
  828.         ;ª®¯¨à㥬 áâபã á ­ §¢ ­¨¥¬ ⥣ 
  829.         add esi,2
  830.         stdcall str_n_cat,edi,esi,[t_max]
  831.  
  832.         jmp .start_read
  833.         .tag_unknown:
  834.                 ;¥á«¨ ⥣ ­¥ ­ ©¤¥­ áâ ¢¨¬ ¥£® ª®¤ ¢¬¥áâ® ­ §¢ ­¨ï
  835.                 movzx ebx,word[eax]
  836.                 bt edx,0
  837.                 jnc @f
  838.                         ror bx,8
  839.                 @@:
  840.                 stdcall hex_in_str, edi, ebx,4
  841.                 mov byte[edi+4],0
  842.         .start_read:
  843.  
  844.         ;ç¨â ¥¬ ¨­ä®à¬ æ¨î ¢ ⥣¥
  845.         mov bx,tag_format_ui1b
  846.         bt edx,0
  847.         jnc @f
  848.                 ror bx,8
  849.         @@:
  850.         cmp word[eax+2],bx
  851.         jne .tag_01
  852.                 stdcall str_n_cat,edi,txt_dp,[t_max]
  853.                 call get_tag_data_size
  854.                 cmp ebx,4
  855.                 jg .over4b_01
  856.                 cmp ebx,1
  857.                 je @f
  858.                         or edx,2 ;array data
  859.                         mov ecx,dword[eax+8]
  860.                         mov dh,bl
  861.                 @@:
  862.                         ;¥á«¨ 1 ®¤­® ¡ ©â®¢®¥ ç¨á«®
  863.                         movzx ebx,byte[eax+8]
  864.                         stdcall str_len,edi
  865.                         add edi,eax
  866.                         mov eax,ebx
  867.                         call convert_int_to_str ;[t_max]
  868.                         bt edx,1
  869.                         jnc .end_f
  870.                         @@:
  871.                                 ;¥á«¨ ®â 2 ¤® 4 ®¤­® ¡ ©â®¢ëå ç¨á¥«
  872.                                 dec dh
  873.                                 cmp dh,0
  874.                                 je .end_f
  875.                                 shr ecx,8
  876.                                 stdcall str_n_cat,edi,txt_zap,[t_max]
  877.                                 stdcall str_len,edi
  878.                                 add edi,eax
  879.                                 movzx eax,cl
  880.                                 call convert_int_to_str ;[t_max]
  881.                                 jmp @b
  882.                 .over4b_01:
  883.                         ;...
  884.                 jmp .end_f
  885.         .tag_01:
  886.  
  887.         mov bx,tag_format_text
  888.         bt edx,0
  889.         jnc @f
  890.                 ror bx,8
  891.         @@:
  892.         cmp word[eax+2],bx
  893.         jne .tag_02
  894.                 stdcall str_n_cat,edi,txt_dp,[t_max]
  895.                 call get_tag_data_size ;¯à®¢¥à塞 ¤«¨­­ã áâப¨
  896.                 cmp ebx,4
  897.                 jg @f
  898.                         ;¥á«¨ áâப  ¯®¬¥é ¥âáï ¢ 4 ᨬ¢®« 
  899.                         mov esi,eax
  900.                         add esi,8
  901.                         stdcall str_n_cat,edi,esi,[t_max]
  902.                         jmp .end_f
  903.                 ;¥á«¨ áâப  ­¥ ¯®¬¥é ¥âáï ¢ 4 ᨬ¢®« 
  904.                 @@:
  905.                 mov esi,dword[eax+8]
  906.                 bt edx,0
  907.                 jnc @f
  908.                         ror si,8
  909.                         ror esi,16
  910.                         ror si,8
  911.                 @@:
  912.                 mov eax,[app1]
  913.                 mov eax,[eax+4]
  914.                 add esi,eax
  915.                 stdcall str_n_cat,edi,esi,[t_max]
  916.                 jmp .end_f
  917.         .tag_02:
  918.  
  919.         mov bx,tag_format_ui2b
  920.         bt edx,0
  921.         jnc @f
  922.                 ror bx,8
  923.         @@:
  924.         cmp word[eax+2],bx
  925.         jne .tag_03
  926.                 stdcall str_n_cat,edi,txt_dp,[t_max]
  927.                 call get_tag_data_size
  928.                 cmp ebx,2
  929.                 jg .over4b_03
  930.                 jne @f
  931.                         ;¥á«¨ ¤¢  2 ¡ ©â®¢ëå ç¨á« 
  932.                         or edx,2 ;array data
  933.                         movzx ecx,word[eax+10]
  934.                         bt edx,0
  935.                         jnc @f
  936.                                 ror cx,8
  937.                         @@:
  938.                         ;¥á«¨ ®¤­® 2 ¡ ©â®¢®¥ ç¨á«®
  939.                         movzx ebx,word[eax+8]
  940.                         bt edx,0
  941.                         jnc @f
  942.                                 ror bx,8
  943.                         @@:
  944.                         stdcall str_len,edi
  945.                         add edi,eax
  946.                         mov eax,ebx
  947.                         call convert_int_to_str ;[t_max]
  948.                         bt edx,1 ;array ?
  949.                         jnc .end_f
  950.                         ;¤®¡ ¢«ï¥¬ 2-¥ ç¨á«®
  951.                         stdcall str_n_cat,edi,txt_zap,[t_max]
  952.                         stdcall str_len,edi
  953.                         add edi,eax
  954.                         mov eax,ecx
  955.                         call convert_int_to_str ;[t_max]
  956.                 .over4b_03:
  957.                         ;...
  958.                 jmp .end_f
  959.         .tag_03:
  960.  
  961.         mov bx,tag_format_ui4b
  962.         bt edx,0
  963.         jnc @f
  964.                 ror bx,8
  965.         @@:
  966.         cmp word[eax+2],bx
  967.         jne .tag_04
  968.                 stdcall str_n_cat,edi,txt_dp,[t_max]
  969.                 call get_tag_data_size
  970.                 cmp ebx,1
  971.                 jg .over4b_04
  972.                         ;¥á«¨ ®¤­® 4 ¡ ©â®¢®¥ ç¨á«®
  973.                         mov ebx,dword[eax+8]
  974.                         bt edx,0
  975.                         jnc @f
  976.                                 ror bx,8
  977.                                 ror ebx,16
  978.                                 ror bx,8
  979.                         @@:
  980.                         stdcall str_len,edi
  981.                         add edi,eax
  982.                         mov eax,ebx
  983.                         call convert_int_to_str ;[t_max]
  984.                 .over4b_04:
  985.                         ;...
  986.                 jmp .end_f
  987.         .tag_04:
  988.  
  989.         mov bx,tag_format_urb
  990.         bt edx,0
  991.         jnc @f
  992.                 ror bx,8
  993.         @@:
  994.         cmp word[eax+2],bx
  995.         jne .tag_05
  996.                 stdcall str_n_cat,edi,txt_dp,[t_max]
  997.                 ;call get_tag_data_size
  998.                 ;cmp ebx,1
  999.                 ;jg .over4b_05
  1000.                         mov ebx,dword[eax+8]
  1001.                         bt edx,0
  1002.                         jnc @f
  1003.                                 ror bx,8
  1004.                                 ror ebx,16
  1005.                                 ror bx,8
  1006.                         @@:
  1007.                         stdcall str_len,edi
  1008.                         add edi,eax
  1009.                         mov eax,[app1]
  1010.                         mov eax,[eax+4]
  1011.                         add ebx,eax
  1012.                         mov eax,[ebx]
  1013.                         bt edx,0
  1014.                         jnc @f
  1015.                                 ror ax,8
  1016.                                 ror eax,16
  1017.                                 ror ax,8
  1018.                         @@:
  1019.                         call convert_int_to_str ;áâ ¢¨¬ 1-¥ ç¨á«®
  1020.                         stdcall str_n_cat,edi,txt_div,[t_max] ;áâ ¢¨¬ §­ ª ¤¥«¥­¨ï
  1021.                         stdcall str_len,edi
  1022.                         add edi,eax
  1023.                         mov eax,[ebx+4]
  1024.                         bt edx,0
  1025.                         jnc @f
  1026.                                 ror ax,8
  1027.                                 ror eax,16
  1028.                                 ror ax,8
  1029.                         @@:
  1030.                         call convert_int_to_str ;áâ ¢¨¬ 2-¥ ç¨á«®
  1031.                 ;.over4b_05:
  1032.                         ;...
  1033.                 jmp .end_f
  1034.         .tag_05:
  1035.  
  1036.         mov bx,tag_format_si2b
  1037.         bt edx,0
  1038.         jnc @f
  1039.                 ror bx,8
  1040.         @@:
  1041.         cmp word[eax+2],bx
  1042.         jne .tag_08
  1043.                 stdcall str_n_cat,edi,txt_dp,[t_max]
  1044.                 call get_tag_data_size
  1045.                 cmp ebx,1
  1046.                 jg .over4b_08
  1047.                         ;¥á«¨ ®¤­® 2 ¡ ©â®¢®¥ ç¨á«®
  1048.                         movzx ebx,word[eax+8]
  1049.                         bt edx,0
  1050.                         jnc @f
  1051.                                 ror bx,8
  1052.                         @@:
  1053.                         stdcall str_len,edi
  1054.                         add edi,eax
  1055.                         bt bx,15
  1056.                         jnc @f
  1057.                                 mov byte[edi],'-'
  1058.                                 inc edi
  1059.                                 neg bx
  1060.                                 inc bx
  1061.                         @@:
  1062.                         mov eax,ebx
  1063.                         call convert_int_to_str ;[t_max]
  1064.                 .over4b_08:
  1065.                         ;...
  1066.                 jmp .end_f
  1067.         .tag_08:
  1068.  
  1069.         mov bx,tag_format_si4b
  1070.         bt edx,0
  1071.         jnc @f
  1072.                 ror bx,8
  1073.         @@:
  1074.         cmp word[eax+2],bx
  1075.         jne .tag_09
  1076.                 stdcall str_n_cat,edi,txt_dp,[t_max]
  1077.                 call get_tag_data_size
  1078.                 cmp ebx,1
  1079.                 jg .over4b_09
  1080.                         ;¥á«¨ ®¤­® 4 ¡ ©â®¢®¥ ç¨á«®
  1081.                         mov ebx,dword[eax+8]
  1082.                         bt edx,0
  1083.                         jnc @f
  1084.                                 ror bx,8
  1085.                                 ror ebx,16
  1086.                                 ror bx,8
  1087.                         @@:
  1088.                         stdcall str_len,edi
  1089.                         add edi,eax
  1090.                         bt ebx,31
  1091.                         jnc @f
  1092.                                 mov byte[edi],'-'
  1093.                                 inc edi
  1094.                                 neg ebx
  1095.                                 inc ebx
  1096.                         @@:
  1097.                         mov eax,ebx
  1098.                         call convert_int_to_str ;[t_max]
  1099.                 .over4b_09:
  1100.                         ;...
  1101.                 jmp .end_f
  1102.         .tag_09:
  1103.  
  1104.         .end_f:
  1105.         ret
  1106. endp
  1107.  
  1108. ;input:
  1109. ; eax - tag pointer
  1110. ; edx - 1 if 'MM', 0 if 'II'
  1111. ;output:
  1112. ; ebx - data size
  1113. align 4
  1114. get_tag_data_size:
  1115.         mov ebx,dword[eax+4]
  1116.         bt edx,0
  1117.         jnc @f
  1118.                 ror bx,8
  1119.                 ror ebx,16
  1120.                 ror bx,8
  1121.         @@:
  1122.         ret
  1123.  
  1124. align 4
  1125. proc str_n_cat uses eax ecx edi esi, str1:dword, str2:dword, n:dword
  1126.         mov esi,dword[str2]
  1127.         mov ecx,dword[n]
  1128.         mov edi,dword[str1]
  1129.         stdcall str_len,edi
  1130.         add edi,eax
  1131.         cld
  1132.         repne movsb
  1133.         mov byte[edi],0
  1134.         ret
  1135. endp
  1136.  
  1137. ;output:
  1138. ; eax = strlen
  1139. align 4
  1140. proc str_len, str1:dword
  1141.         mov eax,[str1]
  1142.         @@:
  1143.                 cmp byte[eax],0
  1144.                 je @f
  1145.                 inc eax
  1146.                 jmp @b
  1147.         @@:
  1148.         sub eax,[str1]
  1149.         ret
  1150. endp
  1151.  
  1152. align 4
  1153. proc hex_in_str, buf:dword,val:dword,zif:dword
  1154.         pushad
  1155.                 mov edi,dword[buf]
  1156.                 mov ecx,dword[zif]
  1157.                 add edi,ecx
  1158.                 dec edi
  1159.                 mov ebx,dword[val]
  1160.  
  1161.                 .cycle:
  1162.                         mov al,bl
  1163.                         and al,0xf
  1164.                         cmp al,10
  1165.                         jl @f
  1166.                                 add al,'a'-'0'-10
  1167.                         @@:
  1168.                         add al,'0'
  1169.                         mov byte[edi],al
  1170.                         dec edi
  1171.                         shr ebx,4
  1172.                 loop .cycle
  1173.  
  1174.         popad
  1175.         ret
  1176. endp
  1177.  
  1178. ;input:
  1179. ; eax = value
  1180. ; edi = string buffer
  1181. ;output:
  1182. align 4
  1183. convert_int_to_str:
  1184.         pushad
  1185.                 mov dword[edi+1],0
  1186.                 mov dword[edi+5],0
  1187.                 call .str
  1188.         popad
  1189.         ret
  1190.  
  1191. align 4
  1192. .str:
  1193.         mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬  áç¨á«¥­¨ï ¨§¬¥­ïîâáï ॣ¨áâàë ebx,eax,ecx,edx ¢å®¤­ë¥ ¯ à ¬¥âàë eax - ç¨á«®
  1194.     ;¯à¥à¥¢®¤ ç¨á«  ¢ ASCII áâப㠢§®¤­ë¥ ¤ ­­ë¥ ecx=á¨á⥬  áç¨á«¥­ï edi  ¤à¥á ªã¤  § ¯¨á뢠âì, ¡ã¤¥¬ áâபã, ¯à¨ç¥¬ ª®­¥æ ¯¥à¥¬¥­­®©
  1195.         cmp eax,ecx  ;áà ¢­¨âì ¥á«¨ ¢ eax ¬¥­ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ ­  @@-1 â.¥. ­  pop eax
  1196.         jb @f
  1197.                 xor edx,edx  ;®ç¨áâ¨âì edx
  1198.                 div ecx      ;à §¤¥«¨âì - ®áâ â®ª ¢ edx
  1199.                 push edx     ;¯®«®¦¨âì ¢ á⥪
  1200.                 ;dec edi             ;ᬥ饭¨¥ ­¥®¡å®¤¨¬®¥ ¤«ï § ¯¨á¨ á ª®­æ  áâப¨
  1201.                 call .str ;¯¥à¥©â¨ ­  á ¬ã ᥡï â.¥. ¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥­â  ¯®ª  ¢ eax ­¥ áâ ­¥â ¬¥­ìè¥ ç¥¬ ¢ ecx
  1202.                 pop eax
  1203.         @@: ;cmp al,10 ;¯à®¢¥à¨âì ­¥ ¬¥­ìè¥ «¨ §­ ç¥­¨¥ ¢ al 祬 10 (¤«ï á¨á⥬ë áç¨á«¥­ï 10 ¤ ­­ ï ª®¬ ­¤  - «¨è­ ï))
  1204.         or al,0x30  ;¤ ­­ ï ª®¬ ­¤  ª®à®ç¥  ç¥¬ ¤¢¥ ¢ëè¥
  1205.         stosb       ;§ ¯¨á âì í«¥¬¥­â ¨§ ॣ¨áâà  al ¢ ï祪㠯 ¬ï⨠es:edi
  1206.         ret           ;¢¥à­ãâìáï ç¥­ì ¨­â¥à¥á­ë© 室 â.ª. ¯®ª  ¢ á⥪¥ åà ­¨âìáï ª®«-¢® ¢ë§®¢®¢ â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï
  1207.  
  1208.  
  1209.  
  1210. align 16
  1211. EXPORTS:
  1212.         dd sz_exif_get_app1, exif_get_app1
  1213.         dd sz_exif_get_app1_tag, exif_get_app1_tag
  1214.         dd sz_exif_get_app1_child, exif_get_app1_child
  1215.         dd sz_exif_get_app2, exif_get_app2
  1216.         dd 0,0
  1217.         sz_exif_get_app1 db 'exif_get_app1',0
  1218.         sz_exif_get_app1_tag db 'exif_get_app1_tag',0
  1219.         sz_exif_get_app1_child db 'exif_get_app1_child',0
  1220.         sz_exif_get_app2 db 'exif_get_app2',0
  1221.