/programs/develop/libraries/exif/examples/viev_exif.asm |
---|
16,7 → 16,7 |
include '../../../../dll.inc' |
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load |
caption db 'à®á¬®âà ¨ä®à¬ 樨 Exif 17.07.14',0 ;¯®¤¯¨áì ®ª |
caption db 'à®á¬®âà ¨ä®à¬ 樨 Exif 18.07.14',0 ;¯®¤¯¨áì ®ª |
struct FileInfoBlock |
Function dd ? |
33,7 → 33,7 |
fn_toolbar db 'toolbar.png',0 |
IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3 |
IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*5 |
IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*6 |
image_data_toolbar dd 0 |
IMAGE_FILE1_SIZE equ 128*144*3+54 ;à §¬¥à ä ©« á ¨§®¡à ¦¥¨¥¬ |
137,9 → 137,9 |
; *** à¨á®¢ ¨¥ £« ¢®£® ®ª (¢ë¯®«ï¥âáï 1 à § ¯à¨ § ¯ã᪥) *** |
xor eax,eax |
mov ebx,(20 shl 16)+480 |
mov ecx,(20 shl 16)+410 |
mov ecx,(20 shl 16)+540 |
mov edx,[sc.work] |
or edx,(3 shl 24)+0x10000000+0x20000000 |
or edx,(3 shl 24)+0x30000000 |
mov edi,caption |
int 0x40 |
167,6 → 167,10 |
mov edx,7 |
int 0x40 |
mov ebx,(135 shl 16)+20 |
mov edx,8 |
int 0x40 |
; *** à¨á®¢ ¨¥ ¨ª®®ª ª®¯ª å *** |
mov eax,7 |
mov ebx,[image_data_toolbar] |
187,6 → 191,9 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ; |
int 0x40 |
;add ebx,IMAGE_TOOLBAR_ICON_SIZE |
;add edx,(25 shl 16) ; |
;int 0x40 |
; *** à¨á®¢ ¨¥ ¡ãä¥à *** |
stdcall [buf2d_draw], buf_0 |
228,6 → 235,10 |
jne @f |
call but_2 |
@@: |
cmp ah,8 |
jne @f |
call but_3 |
@@: |
cmp ah,1 |
jne still |
.exit: |
241,7 → 252,7 |
align 4 |
but_new_file: |
mov dword[open_file_size],0 |
call draw_file |
call draw_file_1 |
ret |
align 4 |
301,13 → 312,13 |
stdcall [exif_get_app1], [open_file],h_app1 |
mcall 71,1,openfile_path |
call draw_file |
call draw_file_1 |
.end_open_file: |
popad |
ret |
align 4 |
draw_file: |
draw_file_1: |
pushad |
stdcall [buf2d_clear], buf_0, [buf_0.color] |
cmp dword[open_file_size],0 |
316,7 → 327,7 |
mov eax,1 |
mov ebx,1 |
.cycle_0: |
stdcall [exif_get_app1_tag], [h_app1],eax,txt_buf,80 |
stdcall [exif_get_app1_tag], h_app1,eax,txt_buf,80 |
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 |
inc eax |
add ebx,10 |
324,14 → 335,14 |
jne .cycle_0 |
;áç¨âë¢ ¥¬ ¤®ç¥à¨¥ ⥣¨ ¤«ï 0x8769 |
stdcall [exif_get_app1_child], [h_app1],h_child,0x8769 ;0x8825 |
stdcall [exif_get_app1_child], h_app1,h_child,0x8769 |
cmp dword[h_child],0 |
je @f |
je .no_found_child |
mov eax,1 |
sub ebx,5 |
.cycle_1: |
stdcall [exif_get_app1_child_tag], [h_app1],[h_child],eax,txt_buf,80 |
stdcall [exif_get_app1_tag], h_child,eax,txt_buf,80 |
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb00000 |
inc eax |
add ebx,10 |
339,6 → 350,9 |
jne .cycle_1 |
jmp @f |
.no_found_child: |
stdcall [buf2d_draw_text], buf_0, buf_1,txt_nochild,3,ebx,0xb000 |
jmp @f |
.open_file: |
stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000 |
@@: |
347,6 → 361,96 |
ret |
align 4 |
draw_file_2: |
pushad |
stdcall [buf2d_clear], buf_0, [buf_0.color] |
cmp dword[open_file_size],0 |
je .open_file |
mov eax,1 |
mov ebx,1 |
.cycle_0: |
stdcall [exif_get_app1_tag], h_app1,eax,txt_buf,80 |
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 |
inc eax |
add ebx,10 |
cmp byte[txt_buf],0 |
jne .cycle_0 |
;áç¨âë¢ ¥¬ ¤®ç¥à¨¥ ⥣¨ ¤«ï 0x8825 |
stdcall [exif_get_app1_child], h_app1,h_child,0x8825 |
cmp dword[h_child],0 |
je .no_found_child |
mov eax,1 |
sub ebx,5 |
.cycle_1: |
stdcall [exif_get_app1_tag], h_child,eax,txt_buf,80 |
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb00000 |
inc eax |
add ebx,10 |
cmp byte[txt_buf],0 |
jne .cycle_1 |
jmp @f |
.no_found_child: |
stdcall [buf2d_draw_text], buf_0, buf_1,txt_nochild,3,ebx,0xb000 |
jmp @f |
.open_file: |
stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000 |
@@: |
stdcall [buf2d_draw], buf_0 |
popad |
ret |
align 4 |
draw_file_3: |
pushad |
stdcall [buf2d_clear], buf_0, [buf_0.color] |
cmp dword[open_file_size],0 |
je .open_file |
mov eax,1 |
mov ebx,1 |
.cycle_0: |
stdcall [exif_get_app1_tag], h_app1,eax,txt_buf,80 |
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0 |
inc eax |
add ebx,10 |
cmp byte[txt_buf],0 |
jne .cycle_0 |
;áç¨âë¢ ¥¬ ¤®ç¥à¨¥ ⥣¨ ¤«ï 0x8769 |
stdcall [exif_get_app1_child], h_app1,h_child,0x8769 |
cmp dword[h_child],0 |
je .no_found_child |
;áç¨âë¢ ¥¬ ¤®ç¥à¨¥ ⥣¨ ¤«ï 0xa005 |
stdcall [exif_get_app1_child], h_child,h_child,0xa005 |
cmp dword[h_child],0 |
je .no_found_child |
mov eax,1 |
sub ebx,5 |
.cycle_1: |
stdcall [exif_get_app1_tag], h_child,eax,txt_buf,80 |
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb00000 |
inc eax |
add ebx,10 |
cmp byte[txt_buf],0 |
jne .cycle_1 |
jmp @f |
.no_found_child: |
stdcall [buf2d_draw_text], buf_0, buf_1,txt_nochild,3,ebx,0xb000 |
jmp @f |
.open_file: |
stdcall [buf2d_draw_text], buf_0, buf_1,txt_openfile,3,3,0xb000 |
@@: |
stdcall [buf2d_draw], buf_0 |
popad |
ret |
align 4 |
but_save_file: |
pushad |
copy_path open_dialog_name,communication_area_default_path,file_name,0 |
378,16 → 482,19 |
align 4 |
but_1: |
stdcall [exif_get_app1_tag], [h_app1],1,txt_buf,80 |
notify_window_run txt_buf |
call draw_file_1 ;®á®¢ ï ¨ä®à¬ æ¨ï |
ret |
align 4 |
but_2: |
stdcall [exif_get_app1_tag], [h_app1],2,txt_buf,80 |
notify_window_run txt_buf |
call draw_file_2 ;¨ä®à¬ æ¨ï ¯® GPS |
ret |
align 4 |
but_3: |
call draw_file_3 ;¥é¥ ª ª ï-â® ¨ä®à¬ æ¨ï ... |
ret |
;¤ ë¥ ¤«ï ¤¨ «®£ ®âªàëâ¨ï ä ©«®¢ |
align 4 |
OpenDialog_data: |
545,12 → 652,10 |
exif_get_app1 dd sz_exif_get_app1 |
exif_get_app1_tag dd sz_exif_get_app1_tag |
exif_get_app1_child dd sz_exif_get_app1_child |
exif_get_app1_child_tag dd sz_exif_get_app1_child_tag |
dd 0,0 |
sz_exif_get_app1 db 'exif_get_app1',0 |
sz_exif_get_app1_tag db 'exif_get_app1_tag',0 |
sz_exif_get_app1_child db 'exif_get_app1_child',0 |
sz_exif_get_app1_child_tag db 'exif_get_app1_child_tag',0 |
;exif_get_image_160_120 |
sc system_colors |
563,7 → 668,7 |
dw 5 ;+4 left |
dw 31 ;+6 top |
.w: dd 456 ;+8 w |
.h: dd 350 ;+12 h |
.h: dd 480 ;+12 h |
.color: dd 0xffffd0 ;+16 color |
db 24 ;+20 bit in pixel |
577,9 → 682,10 |
dd 0 ;+16 color |
db 24 ;+20 bit in pixel |
h_app1 dd 0 ;㪠§ â¥«ì § £®«®¢®ª £« ¢ëå ⥣®¢ |
h_child dd 0 ;㪠§ â¥«ì § £®«®¢®ª ¤®ç¥à¨å ⥣®¢ |
h_app1 dd 0,0,0 ;áâàãªâãà ¤«ï § £®«®¢ª £« ¢ëå ⥣®¢ |
h_child dd 0,0,0 ;áâàãªâãà ¤«ï § £®«®¢ª ¤®ç¥à¨å ⥣®¢ |
txt_openfile db 'âªà®©â¥ ä ©« ¨§®¡à ¦¥¨ï ¢ ä®à¬ ⥠*.jpg.',0 |
txt_nochild db 'ä®à¬ æ¨ï ¯® í⮩ ª®¯ª¥ ¥ ©¤¥ .',0 |
txt_buf rb 80 |
i_end: |
/programs/develop/libraries/exif/trunk/about.htm |
---|
0,0 → 1,132 |
<html> |
<head> |
<title>áèáëèîòåêà äëÿ ïîëó÷åíèÿ èíôîðìàöèè èç ôîðìàòà Exif</title> |
<meta http-equiv="content-type" content="text/html; charset=WINDOWS-1251"> |
<style> |
body |
{ |
font-size: 15px; |
font-family: "Bookman Old Style"; |
color: black; |
text-align: justify; |
} |
h1 { color: green; font-size: 23px; } |
h2 { color: green; font-size: 21px; } |
h3 { color: green; font-size: 19px; } |
h4 { color: #803f00; font-size: 17px; } |
i { color: #0099cc; } |
b { color: #0099cc; } |
p { |
text-indent: 1em; |
margin-top: 3px; |
margin-bottom: 2px; |
margin-left: 0px; |
margin-right: 0px; |
} |
ol, ul, dl{ |
margin-top: 3px; |
margin-bottom: 2px; |
} |
pre |
{ |
padding: 2px; |
padding-left: 20px; |
margin-top: 5px; |
margin-bottom: 5px; |
margin-left: 0px; |
margin-right: 0px; |
font-family: "Courier New"; |
font-size: 15px; |
color: #004000; |
background-color: #ffd0ff; |
} |
table { font-size: 15px; } |
</style> |
</head> |
<body> |
<h1>Îãëàâëåíèå</h1> |
<ul> |
<li>Âñòóïëåíèå</li> |
<li><a href="#fun">Ôóíêöèè</a></li> |
<ul> |
<li><a href="#f_1">exif_get_app1</a></li> |
<li><a href="#f_2">exif_get_app1_tag</a></li> |
<li><a href="#f_3">exif_get_app1_child</a></li> |
</ul> |
</li> |
<li><a href="#const">Êîíñòàíòû äëÿ ôóíêöèè exif_get_app1_child</a></li> |
<li><a href="#tabl_e">Òàáëèöà ýêñïîðòà</a></li> |
<li><a href="#hist">Èñòîðèÿ</a></li> |
</ul> |
<h1>Âñòóïëåíèå</h1> |
<p>Äîêóìåíòàöèÿ ê ñâîáîäíîé áèáëèîòåêå <b>exif.obj</b>, äëÿ <b>ÎÑ Êîëèáðè</b>. |
Ýòà áèáëèîòåêà ñîçäàíà äëÿ ïðîñìîòðà èíôîðìàöèè íàõîäÿùåéñÿ â èçîáðàæåíèÿõ â ôîðìàòå Exif. Èíôîðìàöèÿ ýòà ñîçäàåòñÿ öèôðîâûìè ôîòîêàìåðàìè è ñîäåðæèò ðàçíûå ïàðàìåòðû íàïðèìåð òàêèå êàê: íàçâàíèå ôèðìû ïðîèçâîäèòåëÿ, ìîäåëü êàìåðû, è ò.ä.</p> |
<p>Ïîñëåäíåå îáíîâëåíèå áèáëèîòåêè 18.07.14.</p> |
<h1><a name="fun">Ôóíêöèè</a></h1> |
<p>Ôóíêöèè ðàáîòàþò ñ óêàçàòåëÿìè íà ñòðóêòóðû app1 èëè íà app1_child. Ïðèìåð ñòðóêòóðû:</p> |
<pre>align 4 |
h_app1: |
dd 0 ;+0 óêàçàòåëü íà êîëè÷åñòâî òåãîâ è íà ñàìè òåãè |
dd 0 ;+4 ñìåùåíèå äîáàâëÿåìîå ê óêàçàòåëÿì â òåãàõ |
dd 0 ;+8 ïàðàìåòð, îòâå÷àþùèé çà ïîðÿäîê ñëåäîâàíèÿ áàéòîâ</pre> |
<h4><a name="f_1">exif_get_app1</a></h4> |
<p>Ýòà ôóíêöèÿ èùåò íà÷àëî Exif äàííûõ. Åñëè îíè íàéäåíû òî çàïîëíÿåòñÿ ñòðóêòóðà app1. Åñëè íå íàéäåíû, òî ïåðâûé ïàðàìåòð â ñòðóêòóðå äåëàåòñÿ ðàâíûì 0. Ïðèìåð:</p> |
<pre>stdcall [exif_get_app1], [open_file],h_app1 |
... |
h_app1 dd 0,0,0</pre> |
<p>ãäå open_file - óêàçàòåëü íà äàííûå ôàéëà èçîáðàæåíèÿ (ïîêà ïîääåðæèâàþòñÿ òîëüêî *.jpg è *.jpeg).</p> |
<p>h_app1 - ñòðóêòóðà äëÿ çàïîìèíàíèÿ íà÷àëà Exif äàííûõ.</p> |
<h4><a name="f_2">exif_get_app1_tag</a></h4> |
<p>Çàïîëíÿåò òåêñòîâóþ ñòðîêó èìåíåì ïàðàìåòðà èç Exif è åãî çíà÷åíèåì. Ïðèìåð:</p> |
<pre>stdcall [exif_get_app1_tag], h_app1,3,txt_buf,80 |
... |
h_app1 dd 0,0,0 |
txt_buf rb 80</pre> |
<p>ãäå h_app1 - ñòðóêòóðà çàïîëåííàÿ â exif_get_app1 èëè â exif_get_app1_child.</p> |
<p>3 - ïîðÿäêîâûé íîìåð ïàðàìåòðà.</p> |
<p>txt_buf - òåêñòîâûé áóôåð äëÿ çàïîëíåíèÿ.</p> |
<p>80 - ìàêñèìàëüíàÿ äëèíà òåêñòà.</p> |
<h4><a name="f_3">exif_get_app1_child</a></h4> |
<p>Åñòü ïðîñòûå òåãè ñ èíôîðìàöèåé à åñòü òåãè óêàçûâàþùèå íà ñïèñêè äðóãèõ òåãîâ. Ýòà ôóíêöèÿ áåðåò óêàçàòåëü íà íà÷àëî ñïèñêà äî÷åðíèõ òåãîâ. Ïðèìåð:</p> |
<pre>stdcall [exif_get_app1_child], h_app1,h_child,0x8769 |
... |
h_app1 dd 0,0,0 |
h_child dd 0,0,0</pre> |
<p>ãäå h_app1 - ñòðóêòóðà çàïîëåííàÿ â exif_get_app1 èëè â exif_get_app1_child.</p> |
<p>h_child - ñòðóêòóðà äëÿ çàïîëåíèÿ äàííûõ ñïèñêà äî÷åðíèõ òåãîâ.</p> |
<p>0x8769 - êîä òåãà (íàõîäÿùåãîñÿ â ñïèñêå òåãîâ h_app1), êîòîðûé ÿâëÿåòñÿ óêàçàòåëåì íà ñïèñîê äðóãèõ äî÷åðíèõ òåãîâ.</p> |
<p> äàíîì ïðèìåðå ôóíêöèÿ áåðåò òåã 0x8769 è ïûòàåòñÿ íàéòè åãî â ñïèñêå h_app1, åñëè íàõîäèò òî çàïîëíÿåò ïî íåìó çíà÷åíèÿ â ñòðóêòóðå h_child. Äàëåå ê ñïèñêó h_child ìîæíî ïðèìåíÿòü ôóíêöèþ exif_get_app1_tag äëÿ âçÿòèÿ çíà÷åíèÿ ýòèõ òåãîâ. Ñ ïîìîùüþ ýòîé ôóíêöèè ìû êàê áû ïåðåõîäèì âíóòðü íåêîé "ïàïêè" ñ òåãàìè, êîòîðûå ñðàçó äîñòàòü íå ìîæåì.</p> |
<h1><a name="const">Êîíñòàíòû äëÿ ôóíêöèè exif_get_app1_child</a></h1> |
<p>Çäåñü ïðèâåäåíû íåêîòîðûå êîíñòàíòû, êîòîðûå ìîãóò èñïîëüçîâàòñÿ êàê 3-é ïàðàìåòð äëÿ ôóíêöèè exif_get_app1_child. Ýòè êîíñòàíòû îáîçíà÷àþò ñïåöèàëüíûå òåãè, êîòîðûå ñîäåðæàò ñìåùåíèå íà äî÷åðíèå ïàðàìåòðû, êîòîðûå íàõîäÿòñÿ â Exif.</p> |
<h4>0x8769</h4> |
<p>Îáîçíà÷àåò äîïîëíèòåëüíûå ïàðàìåòðû Exif.</p> |
<h4>0x8825</h4> |
<p>Îáîçíà÷àåò ïàðàìåòðû GPS.</p> |
<h1><a name="tabl_e">Òàáëèöà ýêñïîðòà</a></h1> |
<p>Ïðèìåð òàáëèöû ýêñïîðòà, ðàñ÷èòàííîé íà èñïîëüçîâàíèå ìàêðîñà <b>@use_library_mem</b>:</p> |
<pre>align 4 |
import_exif: |
exif_get_app1 dd sz_exif_get_app1 |
exif_get_app1_tag dd sz_exif_get_app1_tag |
exif_get_app1_child dd sz_exif_get_app1_child |
dd 0,0 |
sz_exif_get_app1 db 'exif_get_app1',0 |
sz_exif_get_app1_tag db 'exif_get_app1_tag',0 |
sz_exif_get_app1_child db 'exif_get_app1_child',0</pre> |
<h1><a name="hist">Èñòîðèÿ</a></h1> |
<p>15.07.14 - ïåðâàÿ âåðñèÿ áèáëèîòåêè, ïðèìåð èñïîëüçîâàíèÿ.</p> |
</body> |
</html> |
/programs/develop/libraries/exif/trunk/exif.asm |
---|
9,10 → 9,8 |
;--------- |
offs_m_or_i equ 8 ;ᬥ饨¥ ¯ à ¬¥âà 'MM' ¨«¨ 'II' (Motorola, Intel) |
offs_tag_count equ 16 ;ᬥ饨¥ ª®«¨ç¥á⢠⥣®¢ |
offs_tag_0 equ 18 ;ᬥ饨¥ 0-£® ⥣ |
offs_tag_0 equ 2 ;ᬥ饨¥ 0-£® ⥣ |
tag_size equ 12 ;à §¬¥à áâàãªâãàë ⥣ |
offs_tag_child_0 equ 2 ;ᬥ饨¥ 0-£® ¤®ç¥à¥£® ⥣ |
;ä®à¬ âë ¤ ëå |
tag_format_ui1b equ 1 ;unsigned integer 1 byte |
tag_format_text equ 2 ;ascii string |
466,8 → 464,10 |
db 0xfe,0x57,'Smoothness',0 |
db 0xfe,0x58,'Moire filter',0 |
dw 0 |
db 0x00,0x00,'GPS version ID',0 |
dd 0 |
;input: |
; bof - 㪠§ ⥫ì ç «® ä ©« |
; app1 - 㪠§ â¥«ì ¤«ï § ¯®«¥¨ï exif.app1 |
496,8 → 496,16 |
cmp word[eax],0xe1ff |
jne .no_exif |
add eax,2 |
xor ebx,ebx |
cmp word[eax+10],'II' |
je @f |
inc ebx ;if 'MM' edx=1 |
@@: |
mov [edi+offs_m_or_i],ebx |
add eax,18 |
mov [edi],eax |
sub eax,8 |
mov [edi+4],eax |
jmp @f |
.no_exif: |
520,18 → 528,16 |
xor edx,edx |
mov byte[edi],dl |
cmp eax,edx |
cmp [eax],edx |
je .end_f ;¥á«¨ ¥ ©¤¥ 㪠§ ⥫ì ç «® exif.app1 |
cmp ecx,edx |
jle .end_f ;¥á«¨ ¯®à浪®¢ë© ®¬¥à ⥣ <= 0 |
cmp word[eax+offs_m_or_i],'II' |
je @f |
inc edx ;if 'MM' edx=1 |
@@: |
movzx edx,word[eax+offs_m_or_i] ;if 'MM' edx=1 |
;¯à®¢¥à塞 ç¨á«® ⥣®¢ |
movzx ebx,word[eax+offs_tag_count] |
mov eax,[eax] |
movzx ebx,word[eax] |
bt edx,0 |
jnc @f |
ror bx,8 |
553,7 → 559,7 |
endp |
;input: |
; app1 - 㪠§ ⥫ì exif.app1 |
; app1 - 㪠§ ⥫ì exif.app1 ¨«¨ exif.app1.child |
; child - 㪠§ â¥«ì ¤«ï § ¯®«¥¨ï ç « ¤®ç¥à¨å ⥣®¢ exif.app1.child |
; c_tag - ⥣ ¤«ï ª®â®à®£® ¤¥« ¥âáï ¯®¨áª ¤®ç¥à¨å |
;output: |
565,14 → 571,10 |
mov edi,[child] |
xor edx,edx |
mov dword[edi],edx |
cmp eax,edx |
je .end_f ;¥á«¨ ¥ ©¤¥ 㪠§ ⥫ì ç «® exif.app1 |
cmp [eax],edx |
je .no_found ;¥á«¨ ¥ ©¤¥ 㪠§ ⥫ì ç «® exif.app1 |
cmp word[eax+offs_m_or_i],'II' |
je @f |
inc edx ;if 'MM' edx=1 |
@@: |
movzx edx,word[eax+offs_m_or_i] ;if 'MM' edx=1 |
; ç «® ¯®¨áª |
mov ebx,[c_tag] |
582,13 → 584,14 |
@@: |
;¯à®¢¥à塞 ç¨á«® ⥣®¢ |
movzx ecx,word[eax+offs_tag_count] |
mov eax,[eax] |
movzx ecx,word[eax] |
bt edx,0 |
jnc @f |
ror cx,8 |
@@: |
cmp ecx,1 |
jl .end_f ;¥á«¨ ç¨á«® ⥣®¢ <1 |
jl .no_found ;¥á«¨ ç¨á«® ⥣®¢ <1 |
;¯¥à¥å®¤¨¬ 1-© ⥣ |
add eax,offs_tag_0 |
597,7 → 600,7 |
je @f |
add eax,tag_size |
loop @b |
jmp .end_f ;¥á«¨ ¥ ©¤¥® |
jmp .no_found ;¥á«¨ ¥ ©¤¥® |
@@: ;¥á«¨ ©¤¥® |
mov ebx,dword[eax+8] |
bt edx,0 |
606,60 → 609,15 |
ror ebx,16 |
ror bx,8 |
@@: |
add ebx,[app1] |
add ebx,offs_m_or_i |
mov eax,[app1] |
add ebx,[eax+4] |
mov dword[edi],ebx |
.end_f: |
popad |
ret |
endp |
m2m dword[edi+4],dword[eax+4] |
mov dword[edi+offs_m_or_i],edx |
;input: |
; app1 - 㪠§ ⥫ì ç «® exif.app1 |
; child - 㪠§ ⥫ì ç «® ¤®ç¥à¨å ⥣®¢ exif.app1.child |
; num - ¯®à浪®¢ë© ®¬¥à ⥣ ( ç¨ ¥âáï á 1) |
; txt - 㪠§ ⥫ì ⥪áâ, ªã¤ ¡ã¤¥â § ¯¨á ® § 票¥ |
; t_max - ¬ ªá¨¬ «ìë© à §¬¥à ⥪áâ |
align 4 |
proc exif_get_app1_child_tag, app1:dword, child:dword, num:dword, txt:dword, t_max:dword |
pushad |
mov eax,[app1] |
mov edi,[txt] |
mov ecx,[num] |
xor edx,edx |
mov byte[edi],dl |
cmp eax,edx |
je .end_f ;¥á«¨ ¥ ©¤¥ 㪠§ ⥫ì ç «® exif.app1 |
cmp ecx,edx |
jle .end_f ;¥á«¨ ¯®à浪®¢ë© ®¬¥à ⥣ <= 0 |
cmp word[eax+offs_m_or_i],'II' |
je @f |
inc edx ;if 'MM' edx=1 |
@@: |
mov eax,[child] |
cmp eax,0 |
je .end_f ;¥á«¨ ¥ ©¤¥ 㪠§ ⥫ì ç «® exif.app1.child |
;¯à®¢¥à塞 ç¨á«® ⥣®¢ |
movzx ebx,word[eax] |
bt edx,0 |
jnc @f |
ror bx,8 |
@@: |
cmp ecx,ebx |
jg .end_f ;¥á«¨ ®¬¥à ⥣ ¡®«ìè¥ ç¥¬ ¨å ¥áâì ¢ ä ©«¥ |
;¯¥à¥å®¤¨¬ § ¤ ë© â¥£ |
dec ecx |
imul ecx,tag_size |
add eax,offs_tag_child_0 |
add eax,ecx |
stdcall read_tag_value,[app1],[t_max] |
jmp .end_f |
.no_found: |
mov dword[edi],0 |
.end_f: |
popad |
ret |
677,7 → 635,11 |
.next_tag: |
mov bx,word[esi] |
cmp bx,0 |
je .tag_unknown ;⥣ ¥ ®¯®§ |
jne @f |
cmp dword[esi],0 |
jne @f |
jmp .tag_unknown ;⥣ ¥ ®¯®§ |
@@: |
bt edx,0 |
jc @f |
ror bx,8 |
729,8 → 691,9 |
ror esi,16 |
ror si,8 |
@@: |
add esi,offs_m_or_i |
add esi,[app1] |
mov eax,[app1] |
mov eax,[eax+4] |
add esi,eax |
stdcall str_n_cat,edi,esi,[t_max] |
jmp .end_f |
.tag_02: |
809,8 → 772,9 |
@@: |
stdcall str_len,edi |
add edi,eax |
add ebx,offs_m_or_i |
add ebx,[app1] |
mov eax,[app1] |
mov eax,[eax+4] |
add ebx,eax |
mov eax,[ebx] |
bt edx,0 |
jnc @f |
832,9 → 796,77 |
call convert_int_to_str ;áâ ¢¨¬ 2-¥ ç¨á«® |
;.over4b_05: |
;... |
;jmp .end_f |
jmp .end_f |
.tag_05: |
mov bx,tag_format_si2b |
bt edx,0 |
jnc @f |
ror bx,8 |
@@: |
cmp word[eax+2],bx |
jne .tag_08 |
stdcall str_n_cat,edi,txt_dp,[t_max] |
call get_tag_data_size |
cmp ebx,1 |
jg .over4b_08 |
;¥á«¨ ®¤® 2 ¡ ©â®¢®¥ ç¨á«® |
movzx ebx,word[eax+8] |
bt edx,0 |
jnc @f |
ror bx,8 |
@@: |
stdcall str_len,edi |
add edi,eax |
bt bx,15 |
jnc @f |
mov byte[edi],'-' |
inc edi |
neg bx |
inc bx |
@@: |
mov eax,ebx |
call convert_int_to_str ;[t_max] |
.over4b_08: |
;... |
jmp .end_f |
.tag_08: |
mov bx,tag_format_si4b |
bt edx,0 |
jnc @f |
ror bx,8 |
@@: |
cmp word[eax+2],bx |
jne .tag_09 |
stdcall str_n_cat,edi,txt_dp,[t_max] |
call get_tag_data_size |
cmp ebx,1 |
jg .over4b_09 |
;¥á«¨ ®¤® 4 ¡ ©â®¢®¥ ç¨á«® |
mov ebx,dword[eax+8] |
bt edx,0 |
jnc @f |
ror bx,8 |
ror ebx,16 |
ror bx,8 |
@@: |
stdcall str_len,edi |
add edi,eax |
bt ebx,31 |
jnc @f |
mov byte[edi],'-' |
inc edi |
neg ebx |
inc ebx |
@@: |
mov eax,ebx |
call convert_int_to_str ;[t_max] |
.over4b_09: |
;... |
jmp .end_f |
.tag_09: |
.end_f: |
ret |
endp |
920,9 → 952,7 |
dd sz_exif_get_app1, exif_get_app1 |
dd sz_exif_get_app1_tag, exif_get_app1_tag |
dd sz_exif_get_app1_child, exif_get_app1_child |
dd sz_exif_get_app1_child_tag, exif_get_app1_child_tag |
dd 0,0 |
sz_exif_get_app1 db 'exif_get_app1',0 |
sz_exif_get_app1_tag db 'exif_get_app1_tag',0 |
sz_exif_get_app1_child db 'exif_get_app1_child',0 |
sz_exif_get_app1_child_tag db 'exif_get_app1_child_tag',0 |