Subversion Repositories Kolibri OS

Rev

Rev 1959 | Rev 2116 | 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ё3 07.07.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   68,12,1024
  73.         mov     [menu_data_1.procinfo],eax
  74.         mov     [menu_data_2.procinfo],eax
  75.         mov     [menu_data_3.procinfo],eax
  76.         mov     [menu_data_4.procinfo],eax
  77.         mov     [menu_data_5.procinfo],eax
  78.         mov     [menu_data_6.procinfo],eax
  79.  
  80.         mov     [load_directory_pointer],dir_header
  81.  
  82.  
  83.         call    load_plugins
  84.  
  85.  
  86.         call    load_buttons
  87.  
  88. ;       call    init_data_OpenDialog
  89.  
  90. ;init_OpenDialog        OpenDialog_data
  91.         push    dword OpenDialog_data
  92.         call    [OpenDialog_Init]
  93.  
  94.         call    get_filter_data
  95.  
  96. ;-----------------------------------------------------
  97. ; check for parameters
  98.         cmp     dword [temp_area],'BOOT'
  99.         jne     .no_boot
  100. .background:
  101.         call    load_image
  102.         cmp     [error_fs],0
  103.         jnz     .exit
  104.         call    convert
  105.  
  106.         call    background
  107.  
  108. .exit:
  109.         call Set_ini
  110. .exit_1:
  111.         mov     ebx,18
  112.         mov     edx,PID1
  113.         mov     esi,7
  114. .kill_successors:
  115.         mov     ecx,[edx]
  116.         add     edx,4
  117.         test    ecx,ecx
  118.         jz      @f
  119.         mcall 18
  120. @@:
  121.         dec     esi
  122.         jnz     .kill_successors
  123.        
  124.         mcall -1
  125. ;-----------------------------------------------------
  126.  .no_boot:
  127.         xor     eax,eax
  128.         cmp     byte [temp_area],al
  129.         jnz     @f
  130.         mov     [file_name],eax
  131.         jmp .no_param
  132. @@:
  133.  
  134.  
  135.         mov     edi,string      ; clear string
  136.         mov     ecx,256/4       ;       length of a string
  137.         xor     eax,eax ;       symbol <0>
  138.         rep     stosd
  139.  
  140.  
  141.         mov     edi,temp_area   ; look for <0> in temp_area
  142.  
  143.         cmp     [edi],byte "\"
  144.         jne     .continue
  145.         cmp     [edi+1],byte "T"
  146.         jne     @f
  147.         mov     [bgrmode],dword 1
  148.         jmp     .continue_1
  149. @@:
  150.         cmp     [edi+1],byte "S"
  151.         jne     START.exit
  152.         mov     [bgrmode],dword 2
  153. .continue_1:
  154.         add     edi,4
  155. .continue:
  156.         mov     esi,edi
  157.         mov     ecx,257 ;       strlen
  158.         repne scasb
  159.         lea             ecx, [edi-temp_area]
  160.  
  161.         mov     edi,string
  162.         rep     movsb           ; copy string from temp_area to "string" (filename)
  163.         cmp     [temp_area],byte "\"
  164.         je      START.background
  165.         call    load_directory
  166.         test    eax,eax
  167.         jnz     @f
  168.         call    load_image
  169.         test    eax,eax
  170.         jnz     @f
  171.         call    convert
  172.         jmp     .no_param
  173. @@:
  174.         mov     [load_directory_pointer],dir_header
  175.         mov     [error_fs],eax
  176.         call    convert.error
  177. ;-----------------------------------------------------
  178.  .no_param:
  179. ;       or      ecx,-1          ; get information about me
  180. ;       call getappinfo
  181.  
  182. ;       mov edx,[process_info+30] ; ЄхяхЁ№ т edx эр° шфхэЄшЇшърЄюЁ
  183. ;       mov ecx,eax
  184.  
  185. ;       @@:
  186. ;       call getappinfo
  187. ;       cmp edx,[process_info+30]
  188. ;       je      @f      ; хёыш эр° PID ёютяры ё PID ЁрёёьрЄЁштрхьюую яЁюЎхёёр, ь√ эр°ыш ёхс 
  189. ;       dec ecx ; шэрўх ёьюЄЁшь ёыхфє■∙шщ яЁюЎхёё
  190. ;       jne @b  ; тючтЁр∙рхьё , хёыш эх тёх яЁюЎхёё√ ЁрёёьюЄЁхэ√
  191. ;       @@:
  192.  
  193. ; ЄхяхЁ№ т ecx эюьхЁ яЁюЎхёёр
  194. ;       mov     [process],ecx
  195. ;---------------------------------------------------------------------
  196.         cmp     [wnd_width],635
  197.         jae     @f
  198.         mov     [wnd_width],635
  199. @@:
  200.         cmp     [wnd_height],150
  201.         jae     @f
  202.         mov     [wnd_height],150
  203. @@:
  204. ;       call draw_window
  205. red:
  206. ;draw_still:
  207. ;       pusha
  208.         call    get_window_param
  209.         test    [window_status],10b
  210.         jnz     red_1   ;still
  211.         test    [window_status],100b
  212.         jnz     red_1
  213.         test    [window_status],1b
  214.         jnz     red_1
  215.         mov esi,-1
  216.         mov eax,procinfo
  217.         mov eax,[eax+66]
  218.         cmp     eax,150
  219. ;       cmp     [window_high],150
  220.         jae     @f
  221.         mov     esi,150
  222.         mcall 67,-1,ebx,ebx
  223. @@:
  224.         mov edx,-1
  225.         mov eax,procinfo
  226.         mov eax,[eax+62]
  227.         cmp     eax,635
  228. ;       cmp     [window_width],635
  229.         jae     @f      ;red_1
  230.         mov     edx,635
  231.         mcall 67,-1,ebx, ,ebx
  232. @@:
  233. ;       mcall 67,-1,ebx
  234. ;       popa
  235. ;       xor esi,esi
  236. red_1:
  237. ;       xor     eax,eax
  238. ;       mov     [scroll_bar_data_vertical.position],eax
  239. ;       mov     [scroll_bar_data_horizontal.position],eax
  240.  
  241.         call draw_window
  242.        
  243.         cmp     [redraw_wallpaper_flag],0
  244.         je      still
  245.         mov     [redraw_wallpaper_flag],0
  246.         call    clear_thread
  247. ;       mcall 15,3
  248. ;       jmp  red_1
  249. still:
  250.         cmp     [RAW1_flag],1
  251.         je      animation_handler
  252.         mcall   10
  253. .1:
  254.         cmp     [open_file_flag],1
  255.         je      kopen_1
  256.         cmp     [sort_directory_flag],byte 1
  257.         je      red_sort_directory
  258.         cmp     [redraw_flag],byte 1
  259.         je      redraw_window
  260.         cmp     eax,1   ; яхЁхЁшёютрЄ№ юъэю ?
  261.         je              red     ; хёыш фр - эр ьхЄъє red
  262.         cmp     eax,2   ; эрцрЄр ъыртш°р ?
  263.         je              key     ; хёыш фр - эр key
  264.         cmp     eax,3   ; эрцрЄр ъэюяър ?
  265.         je              button          ; хёыш фр - эр button
  266.         cmp     eax,6
  267.         je      mouse
  268. ;       cmp [redraw_wallpaper_flag],1
  269. ;       jne still
  270. ;       mov     [redraw_wallpaper_flag],0
  271. ;       mcall   15,3
  272.         jmp     still   ; хёыш фЁєуюх ёюс√Єшх - т эрўрыю Ўшъыр
  273.  
  274. red_sort_directory:
  275.         mov     [sort_directory_flag],byte 0
  276.         jmp     red_1
  277.  
  278. redraw_window:
  279.         mov     [redraw_flag],byte 0
  280.         jmp     red_1
  281. ;---------------------------------------------------------------------
  282. ;       red:
  283. ;       test    dword [status], 4
  284. ;       jz      draw_still
  285. ;       mov     al,18
  286. ;       mov     ebx,3
  287. ;       mov     ecx,[process]
  288. ;       mcall   18,3,[active_process]
  289. ;       and     byte [status], not 4
  290. ;       jmp     still
  291. ;---------------------------------------------------------------------
  292. button:                 ; button
  293.         mov     eax,17          ; get id
  294.         mcall
  295.         cmp     ah,1                    ; button id=1 ?
  296.         je      START.exit
  297. ;       jne     .noclose
  298. ;
  299. ;       mov     eax,-1          ; close this program
  300. ;       mcall
  301. .noclose:
  302.         cmp     ah,2
  303.         je      slide_show.3    ;still
  304.         jmp     slide_show
  305. ;---------------------------------------------------------------------
  306. get_filter_data:
  307.         mov     edi,Filter+4
  308.         xor     eax,eax
  309.         mov     ecx,10
  310.         cld
  311. @@:
  312.         mov     esi,10
  313.         sub     esi,ecx
  314.         lea     esi,[esi+esi*2] ; x 3
  315.         shl     esi,3  ; x 8
  316.         add     esi,dword Convert_plugin_0.Assoc
  317.         mov     esi,[esi]
  318.         add     esi,4
  319.  
  320.         test    esi,esi
  321.         jz      @f
  322.         call    .start
  323.         dec     ecx
  324.         jnz     @r
  325. @@:
  326.         mov     [edi],byte 0
  327.         mov     eax,Filter
  328.         sub     edi,eax
  329.         mov     [eax],edi
  330.  
  331.         ret
  332. .start:
  333. @@:
  334.         lodsb
  335.         stosb
  336.         test    eax,eax
  337.         jnz     @r
  338.         cmp     [esi],ah
  339.         jne     @r
  340.         ret
  341. ;---------------------------------------------------------------------
  342. kopen_1:
  343.  
  344.         mov     [open_file_flag],0
  345.         call    load_directory
  346.         test    eax,eax
  347.         jz      kopen
  348. .err:
  349.         mov     [load_directory_pointer],dir_header
  350.         mov     [error_fs],eax
  351.         call    convert.error
  352.         jmp     still   ;red_1
  353.  
  354. kopen:
  355.         cmp     [string],byte 0
  356.         je      still
  357.  
  358.         mov     ecx,-1
  359.         call    getappinfo
  360.  
  361.         call    load_image
  362.  
  363.         test    eax,eax
  364.         jnz     kopen_1.err
  365.         call    convert
  366.  
  367. .1:
  368.         call    get_window_param
  369.         test    [window_status],1b
  370.         jz      red     ;draw_still
  371.         mov     [no_draw_window],1
  372.  
  373. ;       push    edx
  374. ;       mov     edx,size_after_convert_2
  375. ;       call    write_memory_size
  376. ;       pop     edx
  377.  
  378.         call    draw_other
  379.  
  380.         mov     [no_draw_window],0
  381. ;       jmp     draw_still
  382.         jmp     still
  383. ;---------------------------------------------------------------------
  384. getappinfo:
  385.         mov     eax,9
  386.         mov     ebx,process_info
  387.         mcall
  388.         ret
  389. ;---------------------------------------------------------------------
  390. get_window_param:
  391.         mcall   9, procinfo, -1
  392.         mov     eax,[ebx+34]
  393.         mov     [window_start_x],eax
  394.         mov     eax,[ebx+38]
  395.         mov     [window_start_y],eax
  396.         mov     eax,[ebx+66]   ;46]
  397.         inc     eax
  398.         mov     [window_high],eax
  399.         mov     eax,[ebx+62]   ;42]
  400.         inc     eax
  401.         mov     [window_width],eax
  402.         mov     eax,[ebx+70]
  403.         mov     [window_status],eax
  404. ;       mcall   48,4
  405. ;       mov     [skin_high],eax
  406.         ret
  407. ;---------------------------------------------------------------------
  408. ;write_memory_size:
  409. ;       pusha
  410. ;       mcall   9, procinfo, -1
  411. ;       mov     eax,[ebx+26]
  412. ;       mov     [edx],eax
  413. ;       popa
  414. ;       ret
  415. ;---------------------------------------------------------------------
  416. include 'backgrnd.inc'
  417. include 'draw_win.inc'
  418. include 'full_win.inc'
  419. include 'mouse.inc'
  420. include 'key.inc'
  421. include 'menu_key.inc'
  422. include 'clr_bcgr.inc'
  423. include 'w_error.inc'
  424. include 'load.inc'
  425. include 'animat.inc'
  426. include 'draw_img.inc'
  427. include 'convert.inc'
  428. include 'zoom.inc'
  429. include 'w_about.inc'
  430. include 'win_file.inc'
  431. include 'win_info.inc'
  432. include 'win_bcgr.inc'
  433. include 'win_sort.inc'
  434. include 'win_opti.inc'
  435. include 'libini.inc'
  436. include 'dll.inc'
  437. include 'data.inc'
  438. ;---------------------------------------------------------------------
  439. IM_END:
  440. include 'dat_area.inc'
  441. I_END:
  442.