Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1950 → Rev 1951

/programs/media/zsea/zSea.asm
0,0 → 1,448
;*****************************************************************************
; zSea - advanced image viewer for KolibriOS
; Copyright (c) 2008-2011, Marat Zakiyanov aka Mario79, aka Mario
; All rights reserved.
;
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
; * Redistributions of source code must retain the above copyright
; notice, this list of conditions and the following disclaimer.
; * Redistributions in binary form must reproduce the above copyright
; notice, this list of conditions and the following disclaimer in the
; documentation and/or other materials provided with the distribution.
; * Neither the name of the <organization> nor the
; names of its contributors may be used to endorse or promote products
; derived from this software without specific prior written permission.
;
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;*****************************************************************************
; v.1.0 rñ3 12.06.2011
;******************************************************************************
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd IM_END ; size of image
dd I_END ; memory for app
dd stacktop ; esp
dd temp_area ; I_Param
dd path ; APPLICATION PACH
 
include 'lang.inc'
;include 'macros.inc'
;include 'editbox_ex.mac'
;include 'proc32.inc'
 
include '../../macros.inc'
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
include '../../proc32.inc'
 
;include 'load_lib.mac'
include '../../develop/libraries/box_lib/load_lib.mac'
@use_library ;use load lib macros
;******************************************************************************
 
START: ; start of execution
mcall 68, 11
mcall 66, 1,1
mcall 40, 0x27
 
mcall 9, procinfo, -1
mov eax,[ebx+30]
mov [PID],eax
xor ecx,ecx
@@:
inc ecx
mcall 9, procinfo
mov eax,[PID]
cmp eax,[ebx+30]
jne @r
mov [active_process],ecx
 
mcall 68,12,1024
mov [menu_data_1.procinfo],eax
mov [menu_data_2.procinfo],eax
mov [menu_data_3.procinfo],eax
mov [menu_data_4.procinfo],eax
mov [menu_data_5.procinfo],eax
mov [menu_data_6.procinfo],eax
 
mov [load_directory_pointer],dir_header
 
 
call load_plugins
 
 
call load_buttons
 
; call init_data_OpenDialog
 
;init_OpenDialog OpenDialog_data
push dword OpenDialog_data
call [OpenDialog_Init]
 
call get_filter_data
 
;-----------------------------------------------------
; check for parameters
cmp dword [temp_area],'BOOT'
jne .no_boot
.background:
call load_image
cmp [error_fs],0
jnz .exit
call convert
 
call background
 
.exit:
call Set_ini
.exit_1:
mov ebx,18
mov edx,PID1
mov esi,7
.kill_successors:
mov ecx,[edx]
add edx,4
test ecx,ecx
jz @f
mcall 18
@@:
dec esi
jnz .kill_successors
mcall -1
;-----------------------------------------------------
.no_boot:
xor eax,eax
cmp byte [temp_area],al
jnz @f
mov [file_name],eax
jmp .no_param
@@:
 
 
mov edi,string ; clear string
mov ecx,256/4 ; length of a string
xor eax,eax ; symbol <0>
rep stosd
 
 
mov edi,temp_area ; look for <0> in temp_area
 
cmp [edi],byte "\"
jne .continue
cmp [edi+1],byte "T"
jne @f
mov [bgrmode],dword 1
jmp .continue_1
@@:
cmp [edi+1],byte "S"
jne START.exit
mov [bgrmode],dword 2
.continue_1:
add edi,4
.continue:
mov esi,edi
mov ecx,257 ; strlen
repne scasb
lea ecx, [edi-temp_area]
 
mov edi,string
rep movsb ; copy string from temp_area to "string" (filename)
cmp [temp_area],byte "\"
je START.background
call load_directory
test eax,eax
jnz @f
call load_image
test eax,eax
jnz @f
call convert
jmp .no_param
@@:
mov [load_directory_pointer],dir_header
mov [error_fs],eax
call convert.error
;-----------------------------------------------------
.no_param:
; or ecx,-1 ; get information about me
; call getappinfo
 
; mov edx,[process_info+30] ; òåïåðü â edx íàø èäåíòèôèêàòîð
; mov ecx,eax
 
; @@:
; call getappinfo
; cmp edx,[process_info+30]
; je @f ; åñëè íàø PID ñîâïàë ñ PID ðàññìàòðèâàåìîãî ïðîöåññà, ìû íàøëè ñåáÿ
; dec ecx ; èíà÷å ñìîòðèì ñëåäóþùèé ïðîöåññ
; jne @b ; âîçâðàùàåìñÿ, åñëè íå âñå ïðîöåññû ðàññìîòðåíû
; @@:
 
; òåïåðü â ecx íîìåð ïðîöåññà
; mov [process],ecx
;---------------------------------------------------------------------
cmp [wnd_width],635
jae @f
mov [wnd_width],635
@@:
cmp [wnd_height],150
jae @f
mov [wnd_height],150
@@:
; call draw_window
red:
;draw_still:
; pusha
call get_window_param
test [window_status],10b
jnz red_1 ;still
test [window_status],100b
jnz red_1
test [window_status],1b
jnz red_1
mov esi,-1
mov eax,procinfo
mov eax,[eax+66]
cmp eax,150
; cmp [window_high],150
jae @f
mov esi,150
mcall 67,-1,ebx,ebx
@@:
mov edx,-1
mov eax,procinfo
mov eax,[eax+62]
cmp eax,635
; cmp [window_width],635
jae @f ;red_1
mov edx,635
mcall 67,-1,ebx, ,ebx
@@:
; mcall 67,-1,ebx
; popa
; xor esi,esi
red_1:
; xor eax,eax
; mov [scroll_bar_data_vertical.position],eax
; mov [scroll_bar_data_horizontal.position],eax
 
call draw_window
cmp [redraw_wallpaper_flag],0
je still
mov [redraw_wallpaper_flag],0
call clear_thread
; mcall 15,3
; jmp red_1
still:
cmp [RAW1_flag],1
je animation_handler
mcall 10
.1:
cmp [open_file_flag],1
je kopen_1
cmp [sort_directory_flag],byte 1
je red_sort_directory
cmp [redraw_flag],byte 1
je redraw_window
cmp eax,1 ; ïåðåðèñîâàòü îêíî ?
je red ; åñëè äà - íà ìåòêó red
cmp eax,2 ; íàæàòà êëàâèøà ?
je key ; åñëè äà - íà key
cmp eax,3 ; íàæàòà êíîïêà ?
je button ; åñëè äà - íà button
cmp eax,6
je mouse
; cmp [redraw_wallpaper_flag],1
; jne still
; mov [redraw_wallpaper_flag],0
; mcall 15,3
jmp still ; åñëè äðóãîå ñîáûòèå - â íà÷àëî öèêëà
 
red_sort_directory:
mov [sort_directory_flag],byte 0
jmp red_1
 
redraw_window:
mov [redraw_flag],byte 0
jmp red_1
;---------------------------------------------------------------------
; red:
; test dword [status], 4
; jz draw_still
; mov al,18
; mov ebx,3
; mov ecx,[process]
; mcall 18,3,[active_process]
; and byte [status], not 4
; jmp still
;---------------------------------------------------------------------
button: ; button
mov eax,17 ; get id
mcall
cmp ah,1 ; button id=1 ?
je START.exit
; jne .noclose
;
; mov eax,-1 ; close this program
; mcall
.noclose:
cmp ah,2
je slide_show.3 ;still
jmp slide_show
;---------------------------------------------------------------------
kopen_1:
 
mov [open_file_flag],0
call load_directory
test eax,eax
jz kopen
.err:
mov [load_directory_pointer],dir_header
mov [error_fs],eax
call convert.error
jmp still ;red_1
 
kopen:
cmp [string],byte 0
je still
 
mov ecx,-1
call getappinfo
 
call load_image
 
test eax,eax
jnz kopen_1.err
call convert
 
.1:
call get_window_param
test [window_status],1b
jz red ;draw_still
mov [no_draw_window],1
 
; push edx
; mov edx,size_after_convert_2
; call write_memory_size
; pop edx
 
call draw_other
 
mov [no_draw_window],0
; jmp draw_still
jmp still
;---------------------------------------------------------------------
getappinfo:
mov eax,9
mov ebx,process_info
mcall
ret
;---------------------------------------------------------------------
; ÓÑÒÀÍÎÂÈÒÜ ÔÎÍ
background:
cmp [soi],0
je .end
mov ecx,[img_width] ; øèðèíà
test ecx,ecx
jz .end
mov edx,[img_high] ; âûñîòà 
test edx,edx
jz .end
mcall 15,1 ; set size
 
mov esi,ecx
imul esi,edx
lea esi,[esi*3]
; mov ebx,5
mov ecx,[soi]
 
xor edx,edx
 
cmp [img_resolution],24
je @f
mov eax,image_file
; call [plugin_convert_background]
call [convert_Conv_24b]
mov ecx,[raw_pointer_2]
mcall 15,5 ;15,5 set data
mov ecx,[raw_pointer_2]
mcall 68,13
jmp .set_mode
@@:
 
mcall 15,5 ; 15,5 set data
.set_mode:
; dec ebx ;tile/stretch
mov ecx,[bgrmode]
mcall 15,4 ; 15,4 set mode
 
dec ebx ; 15,3 redraw background
mcall
 
.end:
ret
;---------------------------------------------------------------------
get_window_param:
mcall 9, procinfo, -1
mov eax,[ebx+34]
mov [window_start_x],eax
mov eax,[ebx+38]
mov [window_start_y],eax
mov eax,[ebx+66] ;46]
inc eax
mov [window_high],eax
mov eax,[ebx+62] ;42]
inc eax
mov [window_width],eax
mov eax,[ebx+70]
mov [window_status],eax
; mcall 48,4
; mov [skin_high],eax
ret
;---------------------------------------------------------------------
;write_memory_size:
; pusha
; mcall 9, procinfo, -1
; mov eax,[ebx+26]
; mov [edx],eax
; popa
; ret
;---------------------------------------------------------------------
include 'draw_win.inc'
include 'full_win.inc'
include 'mouse.inc'
include 'key.inc'
include 'menu_key.inc'
include 'clr_bcgr.inc'
include 'w_error.inc'
include 'load.inc'
include 'animat.inc'
include 'draw_img.inc'
include 'convert.inc'
include 'zoom.inc'
include 'w_about.inc'
include 'win_file.inc'
include 'win_info.inc'
include 'win_bcgr.inc'
include 'win_sort.inc'
include 'win_opti.inc'
include 'libini.inc'
include 'dll.inc'
include 'data.inc'
;---------------------------------------------------------------------
IM_END:
include 'dat_area.inc'
I_END: