kolibrios/programs/media/zsea/load.inc
Marat Zakiyanov (Mario79) d7b0867c02 zSea - advanced image viewer for KolibriOS
v.1.0 rс3 12.06.2011

git-svn-id: svn://kolibrios.org@1951 a494cfbc-eb01-0410-851d-a64ba20cac60
2011-06-11 22:16:26 +00:00

886 lines
19 KiB
PHP
Raw Blame History

;---------------------------------------------------------------------
load_plugins:
load_libraries l_libs_start,end_l_libs
test eax,eax
jnz START.exit_1
;---------------------------------------------------------------------
; Get ini values
call Get_ini
; jmp last_plugin
;---------------------------------------------------------------------
; mov [cnv_plugin_name_pointer],plugin_0_name
load_convert_plugins:
mov ecx,10
.1:
push ecx
mov esi,[cnv_plugin_name_pointer]
cmp [esi],dword 'NoKe'
je clear_current_load_convert_plugins_area ;last_plugin
mov edi,system_path.1
mov ecx,128/4
cld
rep movsd
mov esi,[cnv_plugin_name_pointer]
mov edi,err_message_found_lib.1
mov ecx,128/4
rep movsd
mov esi,[cnv_plugin_name_pointer]
mov edi,err_message_import.1
mov ecx,128/4
rep movsd
load_library system_path.1, path, library_path, system_path, \
err_message_found_lib, head_f_l, \
[cnv_plugin_import_pointer], err_message_import, head_f_i, plugins_directory
test eax,eax
jnz START.exit_1
load_convert_plugins_next:
add [cnv_plugin_import_pointer],dword 24
add [cnv_plugin_name_pointer],128
pop ecx
dec ecx
jnz load_convert_plugins.1
; jmp load_convert_plugins
last_plugin:
; initialize sort
push dword 1
call dword [sort_init]
; unpack deflate
mov eax,[unpack_DeflateUnpack2]
mov [deflate_unpack],eax
ret
;-----------------------------------------
clear_current_load_convert_plugins_area:
xor eax,eax
mov edi,[cnv_plugin_import_pointer]
cld
push ecx
mov ecx,24/4
rep stosd
pop ecx
jmp load_convert_plugins_next
;---------------------------------------------------------------------
copy_path_my:
xor eax,eax
@@:
cld
lodsb
stosb
test eax,eax
jnz @b
mov esi,edi
@@:
std
lodsb
cmp al,'/'
jnz @b
mov edi,esi
add edi,2
mov esi,ebx
@@:
cld
lodsb
stosb
test eax,eax
jnz @b
mov esi,ecx
dec edi
@@:
cld
lodsb
stosb
test eax,eax
jnz @b
ret
;---------------------------------------------------------------------
load_image:
call delete_RAW1
mov [fileinfo+0],dword 5
mov [fileinfo+12],dword 0
mov [fileinfo+16],dword process_info
cmp [soi],0
je @f
mov ecx,[raw_pointer]
mcall 68, 13,
mov [soi],0
@@:
; cmp [raw_pointer_2],dword 0
; je @f
; mov ecx,[raw_pointer_2] ;[soi]
; mcall 68, 13,
; mov [raw_pointer_2],0
;@@:
.1:
mcall 70, fileinfo
test eax,eax
jnz .end
mov [fileinfo+0],dword 0
mov ecx,[process_info+32]
; for Diamond emulator, and broken files - size = 0
; test ecx,ecx
; jnz @f
cmp ecx,32
jae @f
mov eax,6
jmp .end
@@:
mov [fileinfo+12],ecx
mov [img_size],ecx
mcall 68, 12
mov [fileinfo+16],eax
mov [image_file],eax
mcall 70, fileinfo
.end:
mov [error_fs],eax
ret
;---------------------------------------------------------------------
delete_RAW1:
cmp [RAW1_pointer],0
jne @f
ret
@@:
mcall 68, 13,[previous_frame_pointer]
xor eax,eax
mov [Repeat_N],eax
@@:
mov edx,[Repeat_N]
shl edx,4
add edx,[RAW1_pointer]
mov ecx,[edx+16]
call .1
inc [Repeat_N]
mov eax,[Repeat_N]
cmp [Total_Repeat_N],eax
ja @r
mov ecx,[RAW1_pointer]
call .1
xor eax,eax
mov [RAW1_pointer],eax
ret
.1:
mcall 68, 13,
ret
;---------------------------------------------------------------------
load_buttons:
mov esi,path
mov edi,plugin_pach
mov ebx,buttons_directory
mov ecx,button_name ;buttons_passive_name
call copy_path_my
mov [fileinfo.name], dword plugin_pach
xor eax,eax
mov [raw_pointer_2],eax
call load_image
mov eax,[error_fs]
test eax,eax
jnz START.exit_1
call convert_plugin_invoke
mov eax,[return_code]
test eax,eax
jnz START.exit_1
mov ebx,[raw_pointer]
mov eax,[ebx+4]
mov [dinamic_button_data_1.size_x],ax
mov [dinamic_button_data_1.size_y],ax
mov [dinamic_button_data_2.size_x],ax
mov [dinamic_button_data_2.size_y],ax
mov [dinamic_button_data_3.size_x],ax
mov [dinamic_button_data_3.size_y],ax
mov [dinamic_button_data_4.size_x],ax
mov [dinamic_button_data_4.size_y],ax
mov [dinamic_button_data_5.size_x],ax
mov [dinamic_button_data_5.size_y],ax
mov [dinamic_button_data_6.size_x],ax
mov [dinamic_button_data_6.size_y],ax
mov [dinamic_button_data_7.size_x],ax
mov [dinamic_button_data_7.size_y],ax
mov [dinamic_button_data_8.size_x],ax
mov [dinamic_button_data_8.size_y],ax
mov [dinamic_button_data_9.size_x],ax
mov [dinamic_button_data_9.size_y],ax
mov [dinamic_button_data_10.size_x],ax
mov [dinamic_button_data_10.size_y],ax
mov [dinamic_button_data_11.size_x],ax
mov [dinamic_button_data_11.size_y],ax
mov [dinamic_button_data_12.size_x],ax
mov [dinamic_button_data_12.size_y],ax
mov [dinamic_button_data_13.size_x],ax
mov [dinamic_button_data_13.size_y],ax
mov [dinamic_button_data_14.size_x],ax
mov [dinamic_button_data_14.size_y],ax
mov [dinamic_button_data_15.size_x],ax
mov [dinamic_button_data_15.size_y],ax
mov eax,[ebx+12]
mov [dinamic_button_data_1.resolution_raw],eax
mov [dinamic_button_data_2.resolution_raw],eax
mov [dinamic_button_data_3.resolution_raw],eax
mov [dinamic_button_data_4.resolution_raw],eax
mov [dinamic_button_data_5.resolution_raw],eax
mov [dinamic_button_data_6.resolution_raw],eax
mov [dinamic_button_data_7.resolution_raw],eax
mov [dinamic_button_data_8.resolution_raw],eax
mov [dinamic_button_data_9.resolution_raw],eax
mov [dinamic_button_data_10.resolution_raw],eax
mov [dinamic_button_data_11.resolution_raw],eax
mov [dinamic_button_data_12.resolution_raw],eax
mov [dinamic_button_data_13.resolution_raw],eax
mov [dinamic_button_data_14.resolution_raw],eax
mov [dinamic_button_data_15.resolution_raw],eax
mov eax,[ebx+20]
add eax,ebx
mov [dinamic_button_data_1.palette_raw],eax
mov [dinamic_button_data_2.palette_raw],eax
mov [dinamic_button_data_3.palette_raw],eax
mov [dinamic_button_data_4.palette_raw],eax
mov [dinamic_button_data_5.palette_raw],eax
mov [dinamic_button_data_6.palette_raw],eax
mov [dinamic_button_data_7.palette_raw],eax
mov [dinamic_button_data_8.palette_raw],eax
mov [dinamic_button_data_9.palette_raw],eax
mov [dinamic_button_data_10.palette_raw],eax
mov [dinamic_button_data_11.palette_raw],eax
mov [dinamic_button_data_12.palette_raw],eax
mov [dinamic_button_data_13.palette_raw],eax
mov [dinamic_button_data_14.palette_raw],eax
mov [dinamic_button_data_15.palette_raw],eax
mov eax,[ebx+28]
add eax,ebx
push eax
mov [dinamic_button_data_1.passive_raw],eax
mov ecx,[ebx+4]
imul ecx,[ebx+4]
imul ecx,[ebx+12]
shr ecx,3
add eax,ecx
mov [dinamic_button_data_2.passive_raw],eax
add eax,ecx
mov [dinamic_button_data_3.passive_raw],eax
add eax,ecx
mov [dinamic_button_data_4.passive_raw],eax
add eax,ecx
mov [dinamic_button_data_5.passive_raw],eax
add eax,ecx
mov [dinamic_button_data_6.passive_raw],eax
add eax,ecx
mov [dinamic_button_data_7.passive_raw],eax
add eax,ecx
mov [dinamic_button_data_8.passive_raw],eax
add eax,ecx
mov [dinamic_button_data_9.passive_raw],eax
add eax,ecx
mov [dinamic_button_data_10.passive_raw],eax
add eax,ecx
mov [dinamic_button_data_11.passive_raw],eax
add eax,ecx
mov [dinamic_button_data_12.passive_raw],eax
add eax,ecx
mov [dinamic_button_data_13.passive_raw],eax
add eax,ecx
mov [dinamic_button_data_14.passive_raw],eax
add eax,ecx
mov [dinamic_button_data_15.passive_raw],eax
;------------------------------------
movzx ebx,word [dinamic_button_data_1.size_x]
movzx eax,word [dinamic_button_data_1.size_y]
imul eax,ebx
imul eax,15
mov ebx,[dinamic_button_data_1.resolution_raw]
shr ebx,3
imul ebx,eax
pop eax
add eax,ebx
push eax
mov [dinamic_button_data_1.active_raw],eax
add eax,ecx
mov [dinamic_button_data_2.active_raw],eax
add eax,ecx
mov [dinamic_button_data_3.active_raw],eax
add eax,ecx
mov [dinamic_button_data_4.active_raw],eax
add eax,ecx
mov [dinamic_button_data_5.active_raw],eax
add eax,ecx
mov [dinamic_button_data_6.active_raw],eax
add eax,ecx
mov [dinamic_button_data_7.active_raw],eax
add eax,ecx
mov [dinamic_button_data_8.active_raw],eax
add eax,ecx
mov [dinamic_button_data_9.active_raw],eax
add eax,ecx
mov [dinamic_button_data_10.active_raw],eax
add eax,ecx
mov [dinamic_button_data_11.active_raw],eax
add eax,ecx
mov [dinamic_button_data_12.active_raw],eax
add eax,ecx
mov [dinamic_button_data_13.active_raw],eax
add eax,ecx
mov [dinamic_button_data_14.active_raw],eax
add eax,ecx
mov [dinamic_button_data_15.active_raw],eax
;------------------------------------
pop eax
add eax,ebx
mov [dinamic_button_data_1.click_raw],eax
add eax,ecx
mov [dinamic_button_data_2.click_raw],eax
add eax,ecx
mov [dinamic_button_data_3.click_raw],eax
add eax,ecx
mov [dinamic_button_data_4.click_raw],eax
add eax,ecx
mov [dinamic_button_data_5.click_raw],eax
add eax,ecx
mov [dinamic_button_data_6.click_raw],eax
add eax,ecx
mov [dinamic_button_data_7.click_raw],eax
add eax,ecx
mov [dinamic_button_data_8.click_raw],eax
add eax,ecx
mov [dinamic_button_data_9.click_raw],eax
add eax,ecx
mov [dinamic_button_data_10.click_raw],eax
add eax,ecx
mov [dinamic_button_data_11.click_raw],eax
add eax,ecx
mov [dinamic_button_data_12.click_raw],eax
add eax,ecx
mov [dinamic_button_data_13.click_raw],eax
add eax,ecx
mov [dinamic_button_data_14.click_raw],eax
add eax,ecx
mov [dinamic_button_data_15.click_raw],eax
;------------------------------------
mov [fileinfo.name], dword string
xor eax,eax
mov [img_size],eax
ret
;---------------------------------------------------------------------
load_directory:
cmp [load_directory_pointer],dir_header ;dword 0
je @f
mcall 68, 13, [load_directory_pointer]
@@:
call .copy_dir_path
mov [dirinfo.size],dword 0
mov [dirinfo.return],dir_header ;procinfo
mcall 70, dirinfo
test eax,eax
jnz .end_err
mov ecx,[dir_header.totl_blocks] ;[procinfo+8]
mov [dirinfo.size],ecx
imul ecx,304
add ecx,32
mcall 68, 12
mov [dirinfo.return],eax
mov [load_directory_pointer],eax
mcall 70, dirinfo
test eax,eax
jnz .end_err
call delete_unsupported_BDFE
.sort:
call sort_directory
; add [load_directory_pointer],2*304+32+40
mov ebp,[load_directory_pointer]
mov ebp,[ebp+4]
; check ebp = 0
test ebp,ebp
jz .end_1 ;.start
dec ebp
jz .end_1
.start:
mov esi,file_name
mov ecx,[file_name_length]
imul edi,ebp,304
add edi,32+40
add edi,[load_directory_pointer]
@@:
cld
lodsb
call char_todown
xchg ah,al
xchg edi,esi
cld
lodsb
call char_todown
; xchg ah,al
xchg edi,esi
dec ecx
jz .end
cmp ah,al
je @r
dec ebp
jnz .start
.end_1:
xor eax,eax
mov [load_file_number],eax
ret
.end:
mov [load_file_number],ebp
xor eax,eax
.end_err:
ret
;-------------------------------------------
.copy_dir_path:
mov esi,string ;path
mov edi,plugin_pach
mov ebx,file_name
call copy_dir_path
mov [file_name_length],ebx
ret
;---------------------------------------------------------------------
sort_directory:
; pusha
push dword [sort_type] ;2 ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mov eax,[load_directory_pointer]
push dword [eax+4] ;[dirdata+4] ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> push ebx, <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> int 0x40
add eax,32
push eax ;dirdata+32 ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; call [plugin_sort]
call [sort_dir]
; popa
ret
;---------------------------------------------------------------------
delete_unsupported_BDFE:
mov [fileinfo.subfunction],dword 0
mov [fileinfo.size],dword 32
mov [fileinfo.name], dword plugin_pach
mov eax,process_info
mov [fileinfo.return],eax
mov [image_file],eax
mov ebx,[load_directory_pointer]
add ebx,4
xor ecx,ecx
dec ecx
mov eax,[load_directory_pointer]
add eax,32+40
sub eax,304
.start:
inc ecx
add eax,304
.1:
cmp [ebx],ecx
je .end
cmp [eax],byte '.'
jne @f
cmp [eax+1],byte 0
je .delete
@@:
cmp [eax],word '..'
jne @f
cmp [eax+2],byte 0
je .delete
@@:
test [eax-40],byte 0x10
jnz .delete
push eax ebx
mov esi,eax
call search_expansion
test eax,eax
pop ebx eax
jnz .delete
; mov edi,[test_area+4]
; cmp [esi],edi
; je .start
mov edi,plugin_0_name
cmp [edi],dword 'NoKe'
je .delete
push eax ebx ecx esi
mov edi,[Convert_plugin_0.Assoc]
test edi,edi
jnz @f
pop esi ecx ebx eax
jmp .delete
@@:
call compare_expansion
test eax,eax
pop esi ecx ebx eax
jz .start
mov edi,plugin_1_name
cmp [edi],dword 'NoKe'
je .delete
push eax ebx ecx esi
mov edi,[Convert_plugin_1.Assoc]
test edi,edi
jnz @f
pop esi ecx ebx eax
jmp .delete
@@:
call compare_expansion
test eax,eax
pop esi ecx ebx eax
jz .start
mov edi,plugin_2_name
cmp [edi],dword 'NoKe'
je .delete
push eax ebx ecx esi
mov edi,[Convert_plugin_2.Assoc]
test edi,edi
jnz @f
pop esi ecx ebx eax
jmp .delete
@@:
call compare_expansion
test eax,eax
pop esi ecx ebx eax
jz .start
mov edi,plugin_3_name
cmp [edi],dword 'NoKe'
je .delete
push eax ebx ecx esi
mov edi,[Convert_plugin_3.Assoc]
test edi,edi
jnz @f
pop esi ecx ebx eax
jmp .delete
@@:
call compare_expansion
test eax,eax
pop esi ecx ebx eax
jz .start
mov edi,plugin_4_name
cmp [edi],dword 'NoKe'
je .delete
push eax ebx ecx esi
mov edi,[Convert_plugin_4.Assoc]
test edi,edi
jnz @f
pop esi ecx ebx eax
jmp .delete
@@:
call compare_expansion
test eax,eax
pop esi ecx ebx eax
jz .start
mov edi,plugin_5_name
cmp [edi],dword 'NoKe'
je .delete
push eax ebx ecx esi
mov edi,[Convert_plugin_5.Assoc]
test edi,edi
jnz @f
pop esi ecx ebx eax
jmp .delete
@@:
call compare_expansion
test eax,eax
pop esi ecx ebx eax
jz .start
mov edi,plugin_6_name
cmp [edi],dword 'NoKe'
je .delete
push eax ebx ecx esi
mov edi,[Convert_plugin_6.Assoc]
test edi,edi
jnz @f
pop esi ecx ebx eax
jmp .delete
@@:
call compare_expansion
test eax,eax
pop esi ecx ebx eax
jz .start
mov edi,plugin_7_name
cmp [edi],dword 'NoKe'
je .delete
push eax ebx ecx esi
mov edi,[Convert_plugin_7.Assoc]
test edi,edi
jnz @f
pop esi ecx ebx eax
jmp .delete
@@:
call compare_expansion
test eax,eax
pop esi ecx ebx eax
jz .start
mov edi,plugin_8_name
cmp [edi],dword 'NoKe'
je .delete
push eax ebx ecx esi
mov edi,[Convert_plugin_8.Assoc]
test edi,edi
jnz @f
pop esi ecx ebx eax
jmp .delete
@@:
call compare_expansion
test eax,eax
pop esi ecx ebx eax
jz .start
mov edi,plugin_9_name
cmp [edi],dword 'NoKe'
je .delete
push eax ebx ecx esi
mov edi,[Convert_plugin_9.Assoc]
test edi,edi
jnz @f
pop esi ecx ebx eax
jmp .delete
@@:
call compare_expansion
test eax,eax
pop esi ecx ebx eax
jz .start
;-------------------------------------------
.delete:
dec dword [ebx]
mov esi,[ebx]
sub esi,ecx
push ecx
mov ecx,esi
imul ecx,304/4
mov edi,eax
sub edi,40
mov esi,edi
add esi,304
cld
rep movsd
pop ecx
jmp .1
.end:
mov [fileinfo.name], dword string
ret
;---------------------------------------------------------------------
image_editor:
mov [start_appl.parameter],dword string
mov [start_appl.name],dword Editor_path
mcall 70, start_appl
jmp still
;---------------------------------------------------------------------
open_help:
mov ebx,key_help_name
mov esi,path
mov edi,library_path
call copy_file_path
mov [start_appl.parameter],dword library_path
mov [start_appl.name],dword Help_path
mcall 70, start_appl
jmp still
;---------------------------------------------------------------------
char_todown:
; convert character to uppercase, using cp866 encoding
; in: al=symbol
; out: al=converted symbol
cmp al, 'A'
jb .ret
cmp al, 'Z'
jbe .az
cmp al, '<27>'
jb .ret
cmp al, '<27>'
jb .rus1
cmp al, '<27>'
ja .ret
; 0x90-0x9F -> 0xE0-0xEF
add al, '<27>'-'<27>'
.ret:
ret
.rus1:
; 0x80-0x8F -> 0xA0-0xAF
.az:
add al, 0x20
ret
;---------------------------------------------------------------------
copy_dir_path:
xor eax,eax
cmp [esi],al
jne @f
mov [edi],al
mov [ebx],al
xor ebx,ebx
inc ebx
ret
@@:
cld
lodsb
stosb
test eax,eax
jnz @b
mov esi,edi
dec esi
@@:
std
lodsb
cmp al,'/'
jnz @b
push esi
add esi,2
mov edi,ebx ;file_name
xor ebx,ebx
@@:
cld
lodsb
stosb
inc ebx
test eax,eax
jnz @b
pop esi
mov [esi+1], byte 0
cld
ret
;---------------------------------------------------------------------
copy_file_path:
xor eax,eax
@@:
cld
lodsb
stosb
test eax,eax
jnz @b
mov esi,edi
dec esi
@@:
std
lodsb
cmp al,'/'
jnz @b
mov edi,esi
add edi,2
mov esi,ebx
@@:
cld
lodsb
stosb
test eax,eax
jnz @b
ret
;---------------------------------------------------------------------
search_expansion:
mov edi,esi
xor eax,eax
@@:
cld
lodsb
test eax,eax
jnz @b
mov ebx,esi
dec esi
@@:
std
lodsb
cmp esi,edi
jb .end_err
cmp al,'.'
jne @b
add esi,2
sub ebx,esi
dec ebx
mov [expansion_length],ebx
cld
xor eax,eax
ret
.end_err:
cld
xor eax,eax
inc eax
ret
;---------------------------------------------------------------------
compare_expansion:
mov ebx,[edi]
add ebx,edi
add edi,3
.start:
cmp ebx,edi
jb .end_err
mov ecx,[expansion_length]
inc edi
push esi edi
@@:
cld
lodsb
xchg esi,edi
shl eax,8
lodsb
xchg esi,edi
call char_todown
xchg al,ah
call char_todown
cmp al,ah
jne @f
dec ecx
jnz @b
jmp .end
@@:
pop edi esi
jmp .start
; jnz .start
.end:
pop edi esi
xor eax,eax
ret
.end_err:
xor eax,eax
inc eax
ret
;---------------------------------------------------------------------