Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 6315 → Rev 6322

/programs/develop/libraries/exif/examples/viev_exif.asm
10,7 → 10,7
include '../../../../develop/libraries/box_lib/trunk/box_lib.mac'
 
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
caption db 'à®á¬®âà ¨­ä®à¬ æ¨¨ Exif 10.03.16',0 ;¯®¤¯¨áì ®ª­ 
caption db 'à®á¬®âà ¨­ä®à¬ æ¨¨ Exif 11.03.16',0 ;¯®¤¯¨áì ®ª­ 
 
run_file_70 FileInfoBlock
 
268,7 → 268,7
mov eax,1
mov ebx,1
.cycle_0:
stdcall [exif_get_app1_tag], h_app1,eax,txt_buf,80
stdcall [exif_get_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
276,7 → 276,7
jne .cycle_0
 
;áç¨â뢠¥¬ ¤®ç¥à­¨¥ ⥣¨ ¤«ï 0x8769
stdcall [exif_get_app1_child], h_app1,h_child,0x8769
stdcall [exif_get_child], h_app1,h_child,0x8769
cmp dword[h_child],0
je .no_found_child
 
283,7 → 283,7
mov eax,1
sub ebx,5
.cycle_1:
stdcall [exif_get_app1_tag], h_child,eax,txt_buf,80
stdcall [exif_get_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
314,7 → 314,7
mov eax,1
mov ebx,1
.cycle_0:
stdcall [exif_get_app1_tag], h_app1,eax,txt_buf,80
stdcall [exif_get_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
322,7 → 322,7
jne .cycle_0
 
;áç¨â뢠¥¬ ¤®ç¥à­¨¥ ⥣¨ ¤«ï 0x8825
stdcall [exif_get_app1_child], h_app1,h_child,0x8825
stdcall [exif_get_child], h_app1,h_child,0x8825
cmp dword[h_child],0
je .no_found_child
 
329,7 → 329,7
mov eax,1
sub ebx,5
.cycle_1:
stdcall [exif_get_app1_tag], h_child,eax,txt_buf,80
stdcall [exif_get_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
360,7 → 360,7
mov eax,1
mov ebx,1
.cycle_0:
stdcall [exif_get_app1_tag], h_app1,eax,txt_buf,80
stdcall [exif_get_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
375,7 → 375,7
mov eax,1 ;25
sub ebx,5
.cycle_1:
stdcall [exif_get_app1_tag], h_child,eax,txt_buf,80
stdcall [exif_get_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
403,27 → 403,42
cmp dword[open_file_size],0
je .open_file
 
mov eax,1
mov ebx,1
;¢ë¢®¤¨¬ ®¡éãî ¨­ä®à¬ æ¨î ¯® á­¨¬ªã:
;0x010f - Manufacturer of digicam
;0x0110 - Model
;0x0132 - Modify date
mov ebx,3
stdcall [exif_get_tag_id], h_app1,0x010f,txt_buf,80
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0
add ebx,10
stdcall [exif_get_tag_id], h_app1,0x0110,txt_buf,80
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0
add ebx,10
stdcall [exif_get_tag_id], h_app1,0x0132,txt_buf,80
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,ebx,0xb0
add ebx,20
 
;­ å®¤¨¬ app2
stdcall [exif_get_app2], h_app1,h_child
cmp dword[h_child],0
je .no_found_child
 
;áç¨â뢠¥¬ ¤®ç¥à­¨¥ ⥣¨
stdcall [exif_get_app1_child], h_child,h_child,0x0011
;0x0011 - Preview IFD
stdcall [exif_get_child], h_child,h_child,0x0011
cmp dword[h_child],0
je .no_found_child
 
stdcall [exif_get_app1_child], h_child,h_child_siz,0x0202
;0x0202 - Preview Image Length
stdcall [exif_get_child], h_child,h_child_siz,0x0202
cmp dword[h_child_siz],0
je .no_found_child
stdcall [exif_get_app1_child], h_child,h_child,0x0201
;0x0201 - Preview Image Start
stdcall [exif_get_child], h_child,h_child,0x0201
cmp dword[h_child],0
je .no_found_child
 
;®¯à¥¤¥«ï¥¬ ¢¨¤ ¨§®¡à ¦¥­¨ï ¨ ¯¥à¥¢®¤¨¬ ¥£® ¢® ¢à¥¬¥­­ë© ¡ãä¥à ebx
stdcall [img_decode],dword[h_child],dword[h_child_siz],0
cmp dword[eax+4],1
jl .no_found_child
433,15 → 448,16
stdcall [buf2d_resize],buf_thumb,[eax+4],[eax+8],1
;¯à¥®¡à §ã¥¬ ¨§®¡à ¦¥­¨¥ ª ä®à¬ âã rgb
stdcall [img_to_rgb2],ebx,[buf_thumb]
;㤠«ï¥¬ ¢à¥¬¥­­ë© ¡ãä¥à ebx
stdcall [img_destroy],ebx
stdcall [img_destroy],ebx ;㤠«ï¥¬ ¢à¥¬¥­­ë© ¡ãä¥à ebx
 
stdcall [buf2d_bit_blt], buf_0, 0,15, buf_thumb ;à¨á㥬 ¨§®¡à ¦¥­¨¥
stdcall [buf2d_draw_text], buf_0, buf_1,txt_thumb,3,3,0xb000
mov ebx,43
stdcall [buf2d_draw_text], buf_0, buf_1,txt_thumb,3,ebx,0xb000
add ebx,10
stdcall [buf2d_bit_blt], buf_0, 0,ebx, buf_thumb ;à¨á㥬 ¨§®¡à ¦¥­¨¥
jmp @f
 
.no_found_child:
stdcall [buf2d_draw_text], buf_0, buf_1,txt_nochild,3,3,0xb000
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
475,10 → 491,10
cmp dword[h_child],0
je .end_save_file
;áç¨â뢠¥¬ ¤®ç¥à­¨¥ ⥣¨
stdcall [exif_get_app1_child], h_child,h_child,0x0011
stdcall [exif_get_child], h_child,h_child,0x0011
cmp dword[h_child],0
je .end_save_file
stdcall [exif_get_app1_child], h_child,h_child,0x0201
stdcall [exif_get_child], h_child,h_child,0x0201
cmp dword[h_child],0
je .end_save_file
 
657,15 → 673,19
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
exif_get_app2 dd sz_exif_get_app2
exif_get_tag dd sz_exif_get_tag
exif_get_tag_id dd sz_exif_get_tag_id
exif_get_child dd sz_exif_get_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
sz_exif_get_app2 db 'exif_get_app2',0
sz_exif_get_tag db 'exif_get_tag',0
sz_exif_get_tag_id db 'exif_get_tag_id',0
sz_exif_get_child db 'exif_get_child',0
 
 
sc system_colors
 
align 16
/programs/develop/libraries/exif/trunk/about.htm
52,12 → 52,13
<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>
<li><a href="#f_2">exif_get_tag</a></li>
<li><a href="#f_5">exif_get_tag_id</a></li>
<li><a href="#f_3">exif_get_child</a></li>
<li><a href="#f_4">exif_get_app2</a></li>
</ul>
</li>
<li><a href="#const">Êîíñòàíòû äëÿ ôóíêöèè exif_get_app1_child</a></li>
<li><a href="#const">Êîíñòàíòû äëÿ ôóíêöèè exif_get_child</a></li>
<li><a href="#tabl_e">Òàáëèöà ýêñïîðòà</a></li>
<li><a href="#hist">Èñòîðèÿ</a></li>
</ul>
86,27 → 87,38
<p>ãäå open_file - óêàçàòåëü íà äàííûå ôàéëà èçîáðàæåíèÿ (ïîêà ïîääåðæèâàþòñÿ òîëüêî *.jpg è *.jpeg).</p>
<p>h_app1 - ñòðóêòóðà äëÿ çàïîìèíàíèÿ íà÷àëà Exif äàííûõ.</p>
 
<h4><a name="f_2">exif_get_app1_tag</a></h4>
<h4><a name="f_2">exif_get_tag</a></h4>
<p>Çàïîëíÿåò òåêñòîâóþ ñòðîêó èìåíåì ïàðàìåòðà èç Exif è åãî çíà÷åíèåì. Ïðèìåð:</p>
<pre>stdcall [exif_get_app1_tag], h_app1,3,txt_buf,80
<pre>stdcall [exif_get_tag], h_app1,3,txt_buf,80
...
h_app1 rb 14
txt_buf rb 80</pre>
<p>ãäå h_app1 - ñòðóêòóðà çàïîëåííàÿ â exif_get_app1 èëè â exif_get_app1_child.</p>
<p>ãäå h_app1 - ñòðóêòóðà çàïîëåííàÿ â exif_get_app1 èëè â exif_get_child.</p>
<p>3 - ïîðÿäêîâûé íîìåð ïàðàìåòðà.</p>
<p>txt_buf - òåêñòîâûé áóôåð äëÿ çàïîëíåíèÿ.</p>
<p>80 - ìàêñèìàëüíàÿ äëèíà òåêñòà.</p>
 
<h4><a name="f_3">exif_get_app1_child</a></h4>
<h4><a name="f_5">exif_get_tag_id</a></h4>
<p>Çàïîëíÿåò òåêñòîâóþ ñòðîêó èìåíåì ïàðàìåòðà èç Exif è åãî çíà÷åíèåì. Ïðèìåð:</p>
<pre>stdcall [exif_get_tag_id], h_app1,0x010f,txt_buf,80
...
h_app1 rb 14
txt_buf rb 80</pre>
<p>ãäå h_app1 - ñòðóêòóðà çàïîëåííàÿ â exif_get_app1 èëè â exif_get_child.</p>
<p>0x010f - êîä òåãà â êîòîðîì ñîäåðæèòñÿ íàçâàíèå ïðîèçâîäèòåëÿ êàìåðû.</p>
<p>txt_buf - òåêñòîâûé áóôåð äëÿ çàïîëíåíèÿ.</p>
<p>80 - ìàêñèìàëüíàÿ äëèíà òåêñòà.</p>
 
<h4><a name="f_3">exif_get_child</a></h4>
<p>Åñòü ïðîñòûå òåãè ñ èíôîðìàöèåé à åñòü òåãè óêàçûâàþùèå íà ñïèñêè äðóãèõ òåãîâ. Ýòà ôóíêöèÿ áåðåò óêàçàòåëü íà íà÷àëî ñïèñêà äî÷åðíèõ òåãîâ. Ïðèìåð:</p>
<pre>stdcall [exif_get_app1_child], h_app1,h_child,0x8769
<pre>stdcall [exif_get_child], h_app1,h_child,0x8769
...
h_app1 rb 14
h_child rb 14</pre>
<p>ãäå h_app1 - ñòðóêòóðà çàïîëåííàÿ â exif_get_app1 èëè â exif_get_app1_child.</p>
<p>ãäå h_app1 - ñòðóêòóðà çàïîëåííàÿ â exif_get_app1 èëè â exif_get_child.</p>
<p>h_child - ñòðóêòóðà äëÿ çàïîëåíèÿ äàííûõ ñïèñêà äî÷åðíèõ òåãîâ.</p>
<p>0x8769 - êîä òåãà (íàõîäÿùåãîñÿ â ñïèñêå òåãîâ h_app1), êîòîðûé ÿâëÿåòñÿ óêàçàòåëåì íà ñïèñîê äðóãèõ äî÷åðíèõ òåãîâ.</p>
<p> äàíîì ïðèìåðå ôóíêöèÿ áåðåò òåã 0x8769 è ïûòàåòñÿ íàéòè åãî â ñïèñêå h_app1, åñëè íàõîäèò òî çàïîëíÿåò ïî íåìó çíà÷åíèÿ â ñòðóêòóðå h_child. Äàëåå ê ñïèñêó h_child ìîæíî ïðèìåíÿòü ôóíêöèþ exif_get_app1_tag äëÿ âçÿòèÿ çíà÷åíèÿ ýòèõ òåãîâ. Ñ ïîìîùüþ ýòîé ôóíêöèè ìû êàê áû ïåðåõîäèì âíóòðü íåêîé &quot;ïàïêè&quot; ñ òåãàìè, êîòîðûå ñðàçó äîñòàòü íå ìîæåì.</p>
<p> äàíîì ïðèìåðå ôóíêöèÿ áåðåò òåã 0x8769 è ïûòàåòñÿ íàéòè åãî â ñïèñêå h_app1, åñëè íàõîäèò òî çàïîëíÿåò ïî íåìó çíà÷åíèÿ â ñòðóêòóðå h_child. Äàëåå ê ñïèñêó h_child ìîæíî ïðèìåíÿòü ôóíêöèþ exif_get_tag äëÿ âçÿòèÿ çíà÷åíèÿ ýòèõ òåãîâ. Ñ ïîìîùüþ ýòîé ôóíêöèè ìû êàê áû ïåðåõîäèì âíóòðü íåêîé &quot;ïàïêè&quot; ñ òåãàìè, êîòîðûå ñðàçó äîñòàòü íå ìîæåì.</p>
 
<h4><a name="f_4">exif_get_app2</a></h4>
<p>Ýòà ôóíêöèÿ èùåò íà÷àëî äàííûõ Exif.app2. Åñëè îíè íàéäåíû òî çàïîëíÿåòñÿ ñòðóêòóðà app2. Åñëè íå íàéäåíû, òî ïåðâûé ïàðàìåòð â ñòðóêòóðå äåëàåòñÿ ðàâíûì 0. Ïðèìåð:</p>
117,8 → 129,8
<p>ãäå h_app1 - ñòðóêòóðà c äàííûìè Exif.app1, ïðåäâàðèòåëüíî çàïîëíåííàÿ ôóíêöèåé exif_get_app1.</p>
<p>h_app2 - ñòðóêòóðà äëÿ çàïîìèíàíèÿ íà÷àëà äàííûõ Exif.app2.</p>
 
<h1><a name="const">Êîíñòàíòû äëÿ ôóíêöèè exif_get_app1_child</a></h1>
<p>Çäåñü ïðèâåäåíû íåêîòîðûå êîíñòàíòû, êîòîðûå ìîãóò èñïîëüçîâàòñÿ êàê 3-é ïàðàìåòð äëÿ ôóíêöèè exif_get_app1_child. Ýòè êîíñòàíòû îáîçíà÷àþò ñïåöèàëüíûå òåãè, êîòîðûå ñîäåðæàò ñìåùåíèå íà äî÷åðíèå ïàðàìåòðû, êîòîðûå íàõîäÿòñÿ â Exif.</p>
<h1><a name="const">Êîíñòàíòû äëÿ ôóíêöèè exif_get_child</a></h1>
<p>Çäåñü ïðèâåäåíû íåêîòîðûå êîíñòàíòû, êîòîðûå ìîãóò èñïîëüçîâàòñÿ êàê 3-é ïàðàìåòð äëÿ ôóíêöèè exif_get_child. Ýòè êîíñòàíòû îáîçíà÷àþò ñïåöèàëüíûå òåãè, êîòîðûå ñîäåðæàò ñìåùåíèå íà äî÷åðíèå ïàðàìåòðû, êîòîðûå íàõîäÿòñÿ â Exif.</p>
<h4>0x8769</h4>
<p>Îáîçíà÷àåò äîïîëíèòåëüíûå ïàðàìåòðû Exif.</p>
<h4>0x8825</h4>
129,17 → 141,20
<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
exif_get_app2 dd sz_exif_get_app2
exif_get_tag dd sz_exif_get_tag
exif_get_tag_id dd sz_exif_get_tag_id
exif_get_child dd sz_exif_get_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
sz_exif_get_app2 db 'exif_get_app2',0</pre>
sz_exif_get_app2 db 'exif_get_app2',0
sz_exif_get_tag db 'exif_get_tag',0
sz_exif_get_tag_id db 'exif_get_tag_id',0
sz_exif_get_child db 'exif_get_child',0</pre>
 
<h1><a name="hist">Èñòîðèÿ</a></h1>
<p>15.07.14 - ïåðâàÿ âåðñèÿ áèáëèîòåêè, ïðèìåð èñïîëüçîâàíèÿ.</p>
<p>23.07.14 - äîáàâëåíà ôóíêöèÿ exif_get_app2.</p>
<p>11.03.16 - äîáàâëåíà ôóíêöèÿ exif_get_tag_id, èçìåíåíû íàçâàíèÿ íåêîòîðûõ ôóíêöèé (óáðàíî app1 ïîòîìó ÷òî îíè ìîãóò ðàáîòàòü íå òîëüêî ñ app1).</p>
</body>
</html>
/programs/develop/libraries/exif/trunk/exif.asm
928,8 → 928,10
; num - ¯®à浪®¢ë© ­®¬¥à ⥣  (­ ç¨­ ¥âáï á 1)
; txt - 㪠§ â¥«ì ­  ⥪áâ, ªã¤  ¡ã¤¥â § ¯¨á ­® §­ ç¥­¨¥
; t_max - ¬ ªá¨¬ «ì­ë© à §¬¥à ⥪áâ 
;output:
; txt - § ¯®«­ï¥âáï ⥪á⮬ ¢ ¢¨¤¥ "¯ à ¬¥âà: §­ ç¥­¨¥", ¥á«¨ ­¥ ­ ©¤¥­® â® ¯ãáâ ï áâப 
align 4
proc exif_get_app1_tag, app1:dword, num:dword, txt:dword, t_max:dword
proc exif_get_tag, app1:dword, num:dword, txt:dword, t_max:dword
pushad
mov eax,[app1]
mov edi,[txt]
968,6 → 970,55
endp
 
;input:
; app1 - 㪠§ â¥«ì ­  ­ ç «® exif.app1
; id - ¨¤¥­â¨ä¨ª â®à ⥣  §­ ç¥­¨¥ ª®â®à®£® ­ã¦­® ­ ©â¨
; txt - 㪠§ â¥«ì ­  ⥪áâ, ªã¤  ¡ã¤¥â § ¯¨á ­® §­ ç¥­¨¥
; t_max - ¬ ªá¨¬ «ì­ë© à §¬¥à ⥪áâ 
;output:
; txt - § ¯®«­ï¥âáï ⥪á⮬ ¢ ¢¨¤¥ "¯ à ¬¥âà: §­ ç¥­¨¥", ¥á«¨ ­¥ ­ ©¤¥­® â® ¯ãáâ ï áâப 
align 4
proc exif_get_tag_id, app1:dword, id:dword, txt:dword, t_max:dword
pushad
mov eax,[app1]
mov edi,[txt]
 
xor edx,edx
mov byte[edi],dl
cmp [eax],edx
je .end_f ;¥á«¨ ­¥ ­ ©¤¥­ 㪠§ â¥«ì ­  ­ ç «® exif.app1
 
mov ebx,[id]
movzx edx,word[eax+offs_m_or_i] ;if 'MM' edx=1
bt edx,0
jnc @f
ror bx,8
@@:
 
;¡¥à¥¬ ç¨á«® ⥣®¢
mov eax,[eax]
movzx ecx,word[eax]
bt edx,0
jnc @f
ror cx,8
@@:
;¢ ecx - ç¨á«® ⥣®¢
 
;¨é¥¬ § ¤ ­­ë© ⥣
add eax,offs_tag_0
.cycle_0:
cmp word[eax],bx ;word[eax+0] - ª®¤ ⥣ 
je @f
add eax,tag_size
loop .cycle_0
jmp .end_f
@@:
stdcall read_tag_value,[app1],[t_max]
.end_f:
popad
ret
endp
 
;input:
; app1 - 㪠§ â¥«ì ­  exif.app1 ¨«¨ ­  exif.app1.child
; child - 㪠§ â¥«ì ¤«ï § ¯®«­¥­¨ï ­ ç «  ¤®ç¥à­¨å ⥣®¢ exif.app1.child
; c_tag - ⥣ ¤«ï ª®â®à®£® ¤¥« ¥âáï ¯®¨áª ¤®ç¥à­¨å
974,7 → 1025,7
;output:
; child - 㪠§ â¥«ì ­  ­ ç «® ¤®ç¥à­¨å ⥣®¢
align 4
proc exif_get_app1_child, app1:dword, child:dword , c_tag:dword
proc exif_get_child, app1:dword, child:dword , c_tag:dword
pushad
mov eax,[app1]
mov edi,[child]
1106,11 → 1157,11
 
.suport:
;­ å®¤¨¬ ⥣ 0x8769 (à áè¨à¥­­ë¥ ¤ ­­ë¥ ¯® Exif)
stdcall exif_get_app1_child, eax,edi,0x8769
stdcall exif_get_child, eax,edi,0x8769
cmp dword[edi],0
je .no_suport
;­ å®¤¨¬ ⥣ 0x927c (¤ ­­ë¥ Maker ¯® ª ¬¥à¥)
stdcall exif_get_app1_child, edi,edi, 0x927c
stdcall exif_get_child, edi,edi, 0x927c
cmp dword[edi],0
je .no_suport
 
1673,11 → 1724,14
align 16
EXPORTS:
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_app2, exif_get_app2
dd sz_exif_get_tag, exif_get_tag
dd sz_exif_get_tag_id, exif_get_tag_id
dd sz_exif_get_child, exif_get_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
sz_exif_get_app2 db 'exif_get_app2',0
sz_exif_get_tag db 'exif_get_tag',0
sz_exif_get_tag_id db 'exif_get_tag_id',0
sz_exif_get_child db 'exif_get_child',0