Subversion Repositories Kolibri OS

Rev

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

  1. ;*****************************************************************************
  2. ; zSea - advanced image viewer for KolibriOS
  3. ; Copyright (c) 2008-2011, Marat Zakiyanov aka Mario79, aka Mario
  4. ; All rights reserved.
  5. ;
  6. ; Redistribution and use in source and binary forms, with or without
  7. ; modification, are permitted provided that the following conditions are met:
  8. ;        * Redistributions of source code must retain the above copyright
  9. ;          notice, this list of conditions and the following disclaimer.
  10. ;        * Redistributions in binary form must reproduce the above copyright
  11. ;          notice, this list of conditions and the following disclaimer in the
  12. ;          documentation and/or other materials provided with the distribution.
  13. ;        * Neither the name of the <organization> nor the
  14. ;          names of its contributors may be used to endorse or promote products
  15. ;          derived from this software without specific prior written permission.
  16. ;
  17. ; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY
  18. ; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  19. ; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  20. ; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
  21. ; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  22. ; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  23. ; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  24. ; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25. ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  26. ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. ;*****************************************************************************
  28. ;       v.1.0 rё4 25.09.2011
  29. ;******************************************************************************
  30.         use32
  31.         org 0x0
  32.         db 'MENUET01'   ; 8 byte id
  33.         dd 0x01         ; header version
  34.         dd START        ; start of code
  35.         dd IM_END       ; size of image
  36.         dd I_END        ; memory for app
  37.         dd stacktop     ; esp
  38.         dd temp_area    ; I_Param
  39.         dd path         ; APPLICATION PACH
  40.  
  41. include 'lang.inc'
  42. ;include 'macros.inc'
  43. ;include 'editbox_ex.mac'
  44. ;include 'proc32.inc'
  45.  
  46. include '../../macros.inc'
  47. include '../../develop/libraries/box_lib/trunk/box_lib.mac'
  48. include '../../proc32.inc'
  49.  
  50. ;include 'load_lib.mac'
  51. include '../../develop/libraries/box_lib/load_lib.mac'
  52.         @use_library    ;use load lib macros
  53. ;******************************************************************************
  54.  
  55. START:                          ; start of execution
  56.         mcall   68, 11
  57.         mcall   66, 1,1
  58.         mcall 40, 0x27
  59.  
  60.         mcall 9, procinfo, -1
  61.         mov     eax,[ebx+30]
  62.         mov     [PID],eax
  63.         xor     ecx,ecx
  64. @@:
  65.         inc     ecx
  66.         mcall 9, procinfo
  67.         mov     eax,[PID]
  68.         cmp     eax,[ebx+30]
  69.         jne     @r
  70.         mov     [active_process],ecx
  71.  
  72.         mcall   48,4
  73.         mov     [skin_height],eax
  74.        
  75.         mcall   68,12,1024
  76.         mov     [menu_data_1.procinfo],eax
  77.         mov     [menu_data_2.procinfo],eax
  78.         mov     [menu_data_3.procinfo],eax
  79.         mov     [menu_data_4.procinfo],eax
  80.         mov     [menu_data_5.procinfo],eax
  81.         mov     [menu_data_6.procinfo],eax
  82.  
  83.         mov     [load_directory_pointer],dir_header
  84.  
  85.  
  86.         call    load_plugins
  87.  
  88.  
  89.         call    load_buttons
  90.  
  91. ;       call    init_data_OpenDialog
  92.  
  93. ;init_OpenDialog        OpenDialog_data
  94.         push    dword OpenDialog_data
  95.         call    [OpenDialog_Init]
  96.  
  97.         call    get_filter_data
  98.  
  99. ;-----------------------------------------------------
  100. ; check for parameters
  101.         cmp     dword [temp_area],'BOOT'
  102.         jne     .no_boot
  103. .background:
  104.         call    load_image
  105.         cmp     [error_fs],0
  106.         jnz     .exit
  107.         call    convert
  108.  
  109.         call    background
  110.  
  111. .exit:
  112.         call Set_ini
  113. .exit_1:
  114.         mov     ebx,18
  115.         mov     edx,PID1
  116.         mov     esi,7
  117. .kill_successors:
  118.         mov     ecx,[edx]
  119.         add     edx,4
  120.         test    ecx,ecx
  121.         jz      @f
  122.         mcall 18
  123. @@:
  124.         dec     esi
  125.         jnz     .kill_successors
  126.        
  127.         mcall -1
  128. ;-----------------------------------------------------
  129.  .no_boot:
  130.         xor     eax,eax
  131.         cmp     byte [temp_area],al
  132.         jnz     @f
  133.         mov     [file_name],eax
  134.         jmp .no_param
  135. @@:
  136.  
  137.  
  138.         mov     edi,string      ; clear string
  139.         mov     ecx,256/4       ;       length of a string
  140.         xor     eax,eax ;       symbol <0>
  141.         rep     stosd
  142.  
  143.  
  144.         mov     edi,temp_area   ; look for <0> in temp_area
  145.  
  146.         cmp     [edi],byte "\"
  147.         jne     .continue
  148.         cmp     [edi+1],byte "T"
  149.         jne     @f
  150.         mov     [bgrmode],dword 1
  151.         jmp     .continue_1
  152. @@:
  153.         cmp     [edi+1],byte "S"
  154.         jne     START.exit
  155.         mov     [bgrmode],dword 2
  156. .continue_1:
  157.         add     edi,4
  158. .continue:
  159.         mov     esi,edi
  160.         mov     ecx,257 ;       strlen
  161.         repne scasb
  162.         lea             ecx, [edi-temp_area]
  163.  
  164.         mov     edi,string
  165.         rep     movsb           ; copy string from temp_area to "string" (filename)
  166.         cmp     [temp_area],byte "\"
  167.         je      START.background
  168.         call    load_directory
  169.         test    eax,eax
  170.         jnz     @f
  171.         call    load_image
  172.         test    eax,eax
  173.         jnz     @f
  174.         call    convert
  175.         jmp     .no_param
  176. @@:
  177.         mov     [load_directory_pointer],dir_header
  178.         mov     [error_fs],eax
  179.         call    convert.error
  180. ;-----------------------------------------------------
  181.  .no_param:
  182. ;       or      ecx,-1          ; get information about me
  183. ;       call getappinfo
  184.  
  185. ;       mov edx,[process_info+30] ; ЄхяхЁ№ т edx эр° шфхэЄшЇшърЄюЁ
  186. ;       mov ecx,eax
  187.  
  188. ;       @@:
  189. ;       call getappinfo
  190. ;       cmp edx,[process_info+30]
  191. ;       je      @f      ; хёыш эр° PID ёютяры ё PID ЁрёёьрЄЁштрхьюую яЁюЎхёёр, ь√ эр°ыш ёхс 
  192. ;       dec ecx ; шэрўх ёьюЄЁшь ёыхфє■∙шщ яЁюЎхёё
  193. ;       jne @b  ; тючтЁр∙рхьё , хёыш эх тёх яЁюЎхёё√ ЁрёёьюЄЁхэ√
  194. ;       @@:
  195.  
  196. ; ЄхяхЁ№ т ecx эюьхЁ яЁюЎхёёр
  197. ;       mov     [process],ecx
  198. ;---------------------------------------------------------------------
  199.         cmp     [wnd_width],635
  200.         jae     @f
  201.         mov     [wnd_width],635
  202. @@:
  203.         cmp     [wnd_height],150
  204.         jae     @f
  205.         mov     [wnd_height],150
  206. @@:
  207. ;       call draw_window
  208. red:
  209. ;draw_still:
  210. ;       pusha
  211.         call    get_window_param
  212.         test    [window_status],10b
  213.         jnz     red_1   ;still
  214.         test    [window_status],100b
  215.         jnz     red_1
  216.         test    [window_status],1b
  217.         jnz     red_1
  218.         mov esi,-1
  219.         mov eax,procinfo
  220.         mov eax,[eax+66]
  221.         cmp     eax,150
  222. ;       cmp     [window_high],150
  223.         jae     @f
  224.         mov     esi,150
  225.         mcall 67,-1,ebx,ebx
  226. @@:
  227.         mov edx,-1
  228.         mov eax,procinfo
  229.         mov eax,[eax+62]
  230.         cmp     eax,635
  231. ;       cmp     [window_width],635
  232.         jae     @f      ;red_1
  233.         mov     edx,635
  234.         mcall 67,-1,ebx, ,ebx
  235. @@:
  236. ;       mcall 67,-1,ebx
  237. ;       popa
  238. ;       xor esi,esi
  239. red_1:
  240. ;       xor     eax,eax
  241. ;       mov     [scroll_bar_data_vertical.position],eax
  242. ;       mov     [scroll_bar_data_horizontal.position],eax
  243.  
  244.         call draw_window
  245.        
  246.         cmp     [redraw_wallpaper_flag],0
  247.         je      still
  248.         mov     [redraw_wallpaper_flag],0
  249.         call    clear_thread
  250. ;       mcall 15,3
  251. ;       jmp  red_1
  252. still:
  253.         call    pause_cicle
  254.        
  255.         cmp     [RAW1_flag],1
  256.         je      animation_handler
  257.        
  258.         mcall   48,4
  259.         cmp     [skin_height],eax
  260.         je      @f
  261.         mov     [skin_height],eax
  262.         call    convert.img_resolution_ok
  263.         jmp     red_1
  264. @@:
  265.         mcall   10
  266. .1:
  267.         cmp     [open_file_flag],1
  268.         je      kopen_1
  269.         cmp     [sort_directory_flag],byte 1
  270.         je      red_sort_directory
  271.         cmp     [redraw_flag],byte 1
  272.         je      redraw_window
  273.         cmp     eax,1   ; яхЁхЁшёютрЄ№ юъэю ?
  274.         je              red     ; хёыш фр - эр ьхЄъє red
  275.         cmp     eax,2   ; эрцрЄр ъыртш°р ?
  276.         je              key     ; хёыш фр - эр key
  277.         cmp     eax,3   ; эрцрЄр ъэюяър ?
  278.         je              button          ; хёыш фр - эр button
  279.         cmp     eax,6
  280.         je      mouse
  281. ;       cmp [redraw_wallpaper_flag],1
  282. ;       jne still
  283. ;       mov     [redraw_wallpaper_flag],0
  284. ;       mcall   15,3
  285.         jmp     still   ; хёыш фЁєуюх ёюс√Єшх - т эрўрыю Ўшъыр
  286.  
  287. red_sort_directory:
  288.         mov     [sort_directory_flag],byte 0
  289.         jmp     red_1
  290.  
  291. redraw_window:
  292.         mov     [redraw_flag],byte 0
  293.         jmp     red_1
  294.        
  295. ;---------------------------------------------------------------------
  296. ;       red:
  297. ;       test    dword [status], 4
  298. ;       jz      draw_still
  299. ;       mov     al,18
  300. ;       mov     ebx,3
  301. ;       mov     ecx,[process]
  302. ;       mcall   18,3,[active_process]
  303. ;       and     byte [status], not 4
  304. ;       jmp     still
  305. ;---------------------------------------------------------------------
  306. button:                 ; button
  307.         mov     eax,17          ; get id
  308.         mcall
  309.         cmp     ah,1                    ; button id=1 ?
  310.         je      START.exit
  311. ;       jne     .noclose
  312. ;
  313. ;       mov     eax,-1          ; close this program
  314. ;       mcall
  315. .noclose:
  316.         cmp     ah,2
  317.         je      slide_show.3    ;still
  318.         jmp     slide_show
  319. ;---------------------------------------------------------------------
  320. pause_cicle:
  321.         pusha
  322. .start:
  323.         mcall   9,procinfo,-1
  324.         mov     eax,[procinfo+70] ;status of window
  325.         test    eax,100b
  326.         jne     @f
  327.         popa
  328.         ret
  329. @@:
  330.         mcall   10
  331.         dec     eax
  332.         jz      .redraw
  333.         dec     eax
  334.         jz      .key
  335.         dec     eax
  336.         jnz     .start 
  337. .button:
  338.         mcall   -1
  339. .key:
  340.         mcall   2
  341.         jmp     .start
  342. .redraw:
  343.         call    draw_window
  344.         jmp     .start
  345. ;---------------------------------------------------------------------
  346. get_filter_data:
  347.         mov     edi,Filter+4
  348.         xor     eax,eax
  349.         mov     ecx,10
  350.         cld
  351. @@:
  352.         mov     esi,10
  353.         sub     esi,ecx
  354.         lea     esi,[esi+esi*2] ; x 3
  355.         shl     esi,3  ; x 8
  356.         add     esi,dword Convert_plugin_0.Assoc
  357.         mov     esi,[esi]
  358.         add     esi,4
  359.  
  360.         test    esi,esi
  361.         jz      @f
  362.         call    .start
  363.         dec     ecx
  364.         jnz     @r
  365. @@:
  366.         mov     [edi],byte 0
  367.         mov     eax,Filter
  368.         sub     edi,eax
  369.         mov     [eax],edi
  370.  
  371.         ret
  372. .start:
  373. @@:
  374.         lodsb
  375.         stosb
  376.         test    eax,eax
  377.         jnz     @r
  378.         cmp     [esi],ah
  379.         jne     @r
  380.         ret
  381. ;---------------------------------------------------------------------
  382. kopen_1:
  383.  
  384.         mov     [open_file_flag],0
  385.         call    load_directory
  386.         test    eax,eax
  387.         jz      kopen
  388. .err:
  389.         mov     [load_directory_pointer],dir_header
  390.         mov     [error_fs],eax
  391.         call    convert.error
  392.         jmp     still   ;red_1
  393.  
  394. kopen:
  395.         cmp     [string],byte 0
  396.         je      still
  397.  
  398.         mov     ecx,-1
  399.         call    getappinfo
  400.  
  401.         call    load_image
  402.  
  403.         test    eax,eax
  404.         jnz     kopen_1.err
  405.         call    convert
  406.  
  407. .1:
  408.         call    get_window_param
  409.         test    [window_status],1b
  410.         jz      red     ;draw_still
  411.         mov     [no_draw_window],1
  412.  
  413. ;       push    edx
  414. ;       mov     edx,size_after_convert_2
  415. ;       call    write_memory_size
  416. ;       pop     edx
  417.  
  418.         call    draw_other
  419.  
  420.         mov     [no_draw_window],0
  421. ;       jmp     draw_still
  422.         jmp     still
  423. ;---------------------------------------------------------------------
  424. getappinfo:
  425.         mov     eax,9
  426.         mov     ebx,process_info
  427.         mcall
  428.         ret
  429. ;---------------------------------------------------------------------
  430. get_window_param:
  431.         mcall   9, procinfo, -1
  432.         mov     eax,[ebx+34]
  433.         mov     [window_start_x],eax
  434.         mov     eax,[ebx+38]
  435.         mov     [window_start_y],eax
  436.         mov     eax,[ebx+66]   ;46]
  437.         inc     eax
  438.         mov     [window_high],eax
  439.         mov     eax,[ebx+62]   ;42]
  440.         inc     eax
  441.         mov     [window_width],eax
  442.         mov     eax,[ebx+70]
  443.         mov     [window_status],eax
  444. ;       mcall   48,4
  445. ;       mov     [skin_high],eax
  446.         ret
  447. ;---------------------------------------------------------------------
  448. ;write_memory_size:
  449. ;       pusha
  450. ;       mcall   9, procinfo, -1
  451. ;       mov     eax,[ebx+26]
  452. ;       mov     [edx],eax
  453. ;       popa
  454. ;       ret
  455. ;---------------------------------------------------------------------
  456. include 'backgrnd.inc'
  457. include 'draw_win.inc'
  458. include 'full_win.inc'
  459. include 'mouse.inc'
  460. include 'key.inc'
  461. include 'menu_key.inc'
  462. include 'clr_bcgr.inc'
  463. include 'w_error.inc'
  464. include 'load.inc'
  465. include 'animat.inc'
  466. include 'draw_img.inc'
  467. include 'convert.inc'
  468. include 'zoom.inc'
  469. include 'w_about.inc'
  470. include 'win_file.inc'
  471. include 'win_info.inc'
  472. include 'win_bcgr.inc'
  473. include 'win_sort.inc'
  474. include 'win_opti.inc'
  475. include 'libini.inc'
  476. include 'dll.inc'
  477. include 'data.inc'
  478. ;---------------------------------------------------------------------
  479. IM_END:
  480. include 'dat_area.inc'
  481. I_END:
  482.