Subversion Repositories Kolibri OS

Rev

Rev 7052 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;*****************************************************************************
  2. ; Open Dialog - for Kolibri OS
  3. ; Copyright (c) 2009-2013, 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. ;---------------------------------------------------------------------
  29. ;Some documentation for memory
  30. ;
  31. ;area name db 'FFFFFFFF_open_dialog',0 ; FFFFFFFF = PID
  32. ;
  33. ; communication area data
  34. ; flag  ; +0
  35. ; dw 0   ; 0 - empty, 1 - file for open, 2 -folder for open,
  36. ;          3 - cancel, 4 - path=name of area 6822.
  37. ;
  38. ; type of dialog:  0-Open, 1-Save, 2-Dir
  39. ; dw 0 ; +2
  40. ;
  41. ; window X size ; +4
  42. ; dw 0
  43. ;
  44. ; window X position ; +6
  45. ; dw 0
  46. ;
  47. ; window y size ; +8
  48. ; dw 0
  49. ;
  50. ; window Y position ; +10
  51. ; dw 0
  52. ;
  53. ; OpenDialog WINDOW SLOT ; +12
  54. ; dd 0
  55. ;
  56. ; file_path ; +16
  57. ; rb 3824 ; path to file
  58. ;
  59. ; file name ; +3840
  60. ; rb 256
  61. ;
  62. ; filtration flag ; +4096
  63. ; dd 0 ; flag 0 - no filtration,  1 - filtering
  64. ;
  65. ; area for storage of filtering values ; +4100
  66. ; rb 4092
  67. ;---------------------------------------------------------------------
  68.         use32
  69.         org     0x0
  70.  
  71.         db 'MENUET01'
  72.         dd 0x01
  73.         dd START
  74.         dd IM_END
  75.         dd I_END
  76.         dd stacktop
  77.         dd param
  78.         dd path
  79.  
  80. include '../../macros.inc'
  81. ;define __DEBUG__ 1
  82. ;define __DEBUG_LEVEL__ 1
  83. ;include '../../debug-fdo.inc'
  84. include '../../develop/libraries/box_lib/load_lib.mac'
  85. include '../../develop/libraries/box_lib/trunk/box_lib.mac'
  86. ;include 'macros.inc'
  87. ;include 'load_lib.mac'
  88. ;include 'box_lib.mac'
  89. @use_library
  90.  
  91. x_minimal_size equ 350
  92. y_minimal_size equ 250
  93. ;---------------------------------------------------------------------
  94. ;---------------------------------------------------------------------
  95. START:
  96.         mcall   68,11
  97.         mcall   66,1,1
  98.         mcall   40,0x27
  99.         call    get_communication_area
  100.        
  101.         call    get_active_pocess
  102.  
  103. load_libraries  l_libs_start,end_l_libs
  104.         test    eax,eax
  105.         jnz     button.exit
  106. ; initialize sort
  107.         push    dword 1
  108.         call    dword [sort_init]
  109. ; unpack deflate
  110.         mov     eax,[unpack_DeflateUnpack2]
  111.         mov     [deflate_unpack],eax
  112.  
  113.         mov     esi,start_pach
  114.         mov     edi,previous_dir_path
  115.         call    copy_dir_name.1
  116.        
  117.         call    load_root_directory
  118.         call    load_start_directory
  119.         call    sort_directory
  120.         call    load_icons
  121.         call    convert_icons
  122.         call    load_ini
  123.         call    calc_ini
  124.         jmp     red_1
  125. ;---------------------------------------------------------------------
  126. red:
  127.         call    control_minimal_window_size
  128. red_1:
  129.         call    draw_window
  130. ;---------------------------------------------------------------------
  131. still:
  132.         mcall   10
  133.         cmp     eax,1
  134.         je      red
  135.         cmp     eax,2
  136.         je      key
  137.         cmp     eax,3
  138.         je      button
  139.         cmp     eax,6
  140.         je      mouse
  141.         jmp     still
  142. ;---------------------------------------------------------------------
  143. control_minimal_window_size:
  144.         pusha
  145.         call    get_window_param
  146.         test    [window_status],10b
  147.         jnz     .end    ;red_1
  148.         test    [window_status],100b
  149.         jnz     .end    ;red_1
  150.         test    [window_status],1b
  151.         jnz     .end    ;red_1
  152.         mov     esi,-1
  153.         mov     eax,procinfo
  154.         mov     eax,[eax+46]
  155.         cmp     eax,dword y_minimal_size ;200
  156.         jae     @f
  157.         mov     esi,dword y_minimal_size ;200
  158.         mcall   67,-1,ebx,ebx
  159. @@:
  160.         mov     edx,-1
  161.         mov     eax,procinfo
  162.         mov     eax,[eax+42]
  163.         cmp     eax,dword x_minimal_size ;300
  164.         jae     @f
  165.         mov     edx,dword x_minimal_size ;300
  166.         mcall   67,-1,ebx,,ebx
  167. @@:
  168. .end:
  169.         popa
  170.         ret
  171. ;---------------------------------------------------------------------
  172. key:
  173.         mov     al,[focus_pointer]
  174.         test    al,al
  175.         jne     key_ASCII
  176.         mcall   2
  177.         xor     ebx,ebx
  178.         cmp     [extended_key],1
  179.         je      .extended_key
  180.         test    al,al
  181.         jnz     still
  182.         cmp     ah,0xE0
  183.         jne     @f
  184.         mov     [extended_key],1
  185.         jmp     still
  186. @@:
  187.         cmp     ah,72   ; arrow up
  188.         je      .2
  189.         cmp     ah,80   ; arrow down
  190.         je      .1
  191.         cmp     ah,28   ; Enter
  192.         je      .7
  193.         cmp     ah,1    ; Esc
  194.         je      button.exit
  195.         cmp     ah,14   ; Backspace
  196.         je      button.exit_dir
  197.         cmp     ah,187  ; F1
  198.         je      select_disk
  199.         cmp     ah,188  ; F2
  200.         je      select_sort
  201.         cmp     ah,189  ; F3
  202.         je      select_filter
  203.         cmp     ah,19   ; R
  204.         je      button.reload_dir
  205.         cmp     ah,42
  206.         je      key_shift_up
  207.         cmp     ah,54
  208.         je      key_shift_up
  209.         cmp     ah,170
  210.         je      key_shift_down
  211.         cmp     ah,182
  212.         je      key_shift_down
  213.         cmp     ah,29
  214.         je      key_ctrl_up
  215.         cmp     ah,157
  216.         je      key_ctrl_down
  217.         cmp     ah,56
  218.         je      key_alt_up
  219.         cmp     ah,184
  220.         je      key_alt_down
  221.         cmp     ah,206  ; NumPad+ Up
  222.         je      NumPad_plus_Up
  223.         cmp     ah,202  ; NumPad- Up
  224.         je      NumPad_minus_Up
  225.         cmp     ah,183  ; NumPad* Up
  226.         je      NumPad_invert_Up
  227.         cmp     ah,158
  228.         je      symbol_a_up
  229.         cmp     ah,15   ; Tab down
  230.         je      change_focus_area_press_Tab_key
  231.         cmp     ah,143  ; Tab up
  232.         je      change_focus_area_check_Tab_key
  233. ; compare for "1,2,3,4,5,6,7,8,9,0,(-),(=)"
  234.         cmp     ah,2
  235.         jb      still
  236.         cmp     ah,13
  237.         jbe     .12
  238. ; compare for "q,w,e,r,t,y,u,i,o,p,([),(])"    
  239.         cmp     ah,16
  240.         jb      still
  241.         cmp     ah,27
  242.         jbe     .12
  243. ; compare for "a,s,d,f,g,h,j,k,l,(;),('),(`)"  
  244.         cmp     ah,30
  245.         jb      still
  246.         cmp     ah,41
  247.         jbe     .12
  248. ; compare for "(\),z,x,c,v,b,n,m,(,),(.),(/)"  
  249.         cmp     ah,43
  250.         jb      still
  251.         cmp     ah,53
  252.         jbe     .12    
  253.         jmp     still
  254. .extended_key:
  255.         mov     [extended_key],0
  256.         cmp     ah,80   ; arrow down
  257.         je      .1
  258.         cmp     ah,72   ; arrow up
  259.         je      .2
  260.         cmp     ah,81   ; PageDown
  261.         je      .3
  262.         cmp     ah,73   ; PageUp
  263.         je      .4
  264.         cmp     ah,71   ; Home
  265.         je      .5
  266.         cmp     ah,79   ; End
  267.         je      .6
  268.         cmp     ah,28   ; Enter
  269.         je      .7
  270.         cmp     ah,82   ; Insert
  271.         je      .8
  272.        
  273.         cmp     ah,29
  274.         je      key_ctrl_up
  275.         cmp     ah,157
  276.         je      key_ctrl_down
  277.         cmp     ah,56
  278.         je      key_alt_up
  279.         cmp     ah,184
  280.         je      key_alt_down
  281.         jmp     still
  282. ;---------------------------------
  283. .12:
  284.         inc     ebx     ; 12 - Search with key
  285. ;---------------------------------
  286. .11:
  287.         inc     ebx     ; 11 - Invert Mark
  288. ;---------------------------------
  289. .10:
  290.         inc     ebx     ; 10 - Unmark All
  291. ;---------------------------------
  292. .9:
  293.         inc     ebx     ; 9 - Mark All
  294. ;---------------------------------
  295. .8:
  296.         inc     ebx     ; 8 - Insert (Mark)
  297. ;---------------------------------
  298. .7:
  299.         inc     ebx     ; 7 - Enter
  300. ;---------------------------------
  301. .6:
  302.         inc     ebx     ; 6 - End
  303. ;---------------------------------
  304. .5:
  305.         inc     ebx     ; 5 - Home
  306. ;---------------------------------
  307. .4:
  308.         inc     ebx     ; 4 - PageUp
  309. ;---------------------------------
  310. .3:
  311.         inc     ebx     ; 3 - PageDown
  312. ;---------------------------------
  313. .2:
  314.         inc     ebx     ; 2 - arrow up
  315. ;---------------------------------
  316. .1:
  317.         inc     ebx     ; 1 - arrow down
  318. ;---------------------------------
  319.         call    .key_action
  320.        
  321. ;       movzx   ecx,word [file_browser_data_1.start_draw_cursor_line]
  322. ;       mcall   47,0x80000,,<50,0>,0x40000000,0xffffff
  323. ;       movzx   ecx,word [file_browser_data_1.size_y]
  324. ;       mcall   47,0x80000,,<150,0>,0x40000000,0xffffff
  325.  
  326.         mov     eax,file_browser_data_1.mouse_keys_delta
  327.         cmp     [eax],dword 3
  328.         jne     still
  329.         xor     ebx,ebx
  330.         mov     [eax],ebx
  331.         call    load_next_dir
  332.         jmp     still
  333. ;-------------------------------------------------------
  334. .key_action:
  335.         mov     [file_browser_data_1.key_action],bx
  336.         shr     ax,8
  337.         mov     [file_browser_data_1.key_action_num],ax
  338.  
  339.         push    dword file_browser_data_1
  340.         call    [FileBrowser_key]
  341.  
  342.         call    draw_open_button_label
  343.  
  344.         cmp     [file_browser_data_1.draw_scroll_bar],0
  345.         je      @f
  346.         call    draw_scrollbar1
  347.         mov     [file_browser_data_1.draw_scroll_bar],0
  348. @@:
  349.         ret
  350. ;---------------------------------------------------------------------
  351. change_focus_area_Tab_key_ASCII:
  352.         xor     eax,eax
  353.         inc     eax
  354.         mov     [Tab_key_block],al
  355.         jmp     change_focus_area
  356. ;---------------------------------------------------------------------
  357. change_focus_area_press_Tab_key:
  358.         cmp     [open_dialog_type],1
  359.         jne     still
  360.         mov     al,[Tab_key_block]
  361.         test    al,al
  362.         jnz     still
  363.         xor     eax,eax
  364.         inc     eax
  365.         mov     [Tab_key],al
  366.         jmp     still
  367. ;---------------------------------------------------------------------
  368. change_focus_area_check_Tab_key:
  369.         cmp     [open_dialog_type],1
  370.         jne     still
  371.         xor     eax,eax
  372.         mov     [Tab_key_block],al
  373.         mov     al,[Tab_key]
  374.         test    al,al
  375.         jz      still
  376.         xor     eax,eax
  377.         mov     [Tab_key],al
  378. ;---------------------------------------------------------------------
  379. change_focus_area:
  380.         mov     al,[focus_pointer]
  381.         inc     al
  382.         and     al,1
  383.         mov     [focus_pointer],al
  384. .1:
  385.         mov     edi,edit1
  386.         test    al,al
  387.         jne     @f
  388.         mov     [file_browser_data_1.select_panel_counter],1
  389.         and     [edi+44],dword 0xFFFFFFFD       ; ed_focus
  390.         mov     [edi+12],dword 0xffffff ; color white
  391.         call    draw_draw_file_browser1
  392.         mcall   66,1,1
  393.         jmp     still
  394. @@:
  395.         mov     [file_browser_data_1.select_panel_counter],0
  396.         or      [edi+44],dword ed_focus
  397.         mov     [edi+12],dword 0xffffb0 ; color yellow
  398.         call    draw_draw_file_browser1
  399.         mcall   66,1,0
  400.         jmp     still
  401. ;---------------------------------------------------------------------
  402. key_ASCII:
  403.         mcall   2
  404.         cmp     ah,9
  405.         je      change_focus_area_Tab_key_ASCII
  406.         cmp     ah,13
  407.         je      .13
  408.         cmp     ah,27
  409.         je      button.exit
  410.         push    dword name_editboxes
  411.         call    [edit_box_key]
  412.         jmp     still
  413. .13:
  414. ;       cmp [open_dialog_type],2        ; Select dir
  415. ;       je      file_no_folder
  416. ;       cmp     [open_dialog_type],1    ; Save file
  417. ;       jne     user_selected_name_action       ; load_dir
  418. ;       inc     [open_dialog_type]
  419.         jmp     file_no_folder
  420. ;.load_dir:
  421. ;       mov     [file_browser_data_1.select_panel_counter],1
  422. ;       xor     eax,eax
  423. ;       mov     [focus_pointer],al
  424. ;       mcall   66,1,1
  425.  
  426. ;       xor     eax,eax
  427. ;       mov     esi,dir_path
  428. ;       cld
  429. ;@@:
  430. ;       lodsb
  431. ;       test    al,al
  432. ;       jne     @r
  433. ;       sub     esi,2
  434. ;       cmp     [esi],byte '/'
  435. ;       jne     @f
  436. ;       xor     eax,eax
  437. ;       mov     [esi],al
  438. ;@@:
  439. ;       call    load_next_dir.1
  440. ;       jmp     still
  441. ;---------------------------------------------------------------------
  442. user_selected_name_action:
  443.         mov     eax,[communication_area]
  444.         test    eax,eax
  445.         jnz     @f
  446.         call    control_minimal_window_size
  447.         call    draw_window
  448.         ret
  449. @@:
  450.         add     eax,16  ;12
  451. ;copy_path      user_selected_name,dir_path,eax,0
  452.         mov     esi,dir_path
  453.         mov     edi,eax
  454.         call    copy_dir_name
  455.         mov     [edi-1],byte '/'
  456.         mov     esi,user_selected_name
  457.         call    copy_dir_name
  458.        
  459.         mov     eax,[communication_area]
  460.         mov     [eax],word 1
  461.         jmp     button.exit
  462. ;--------------------------------------------------------------------- 
  463. select_disk:
  464.         call    check_alt
  465. .1:
  466.         call    load_root_directory
  467.         xor     eax,eax
  468.         mov     [menu_data_1.ret_key],eax
  469.  
  470.         push    dword menu_data_1
  471.         call    [menu_bar_activate]
  472.  
  473.         call    clear_control_key_flag
  474.  
  475.         mov     eax,[menu_data_1.ret_key]
  476.         mov     [menu_data_1.ret_key],dword 0
  477.         cmp     eax,1
  478.         je      select_filter.1
  479.  
  480.         cmp     eax,2
  481.         je      select_sort.1
  482.  
  483.         cmp     [menu_data_1.click],dword 1
  484.         jne     still
  485.  
  486.         cmp     [menu_data_1.cursor_out],dword 0
  487.         jne     analyse_out_menu_1
  488.         jmp     still
  489. ;---------------------------------------------------------------------
  490. select_sort:
  491.         call    check_alt
  492. .1:
  493.         xor     eax,eax
  494.         mov     [menu_data_2.ret_key],eax
  495.  
  496.         push    dword menu_data_2
  497.         call    [menu_bar_activate]
  498.  
  499.         call    clear_control_key_flag
  500.  
  501.         mov     eax,[menu_data_2.ret_key]
  502.         mov     [menu_data_2.ret_key],dword 0
  503.         cmp     eax,1
  504.         je      select_disk.1
  505.  
  506.         cmp     eax,2
  507.         je      select_filter.1
  508.  
  509.  
  510.         cmp     [menu_data_2.click],dword 1
  511.         jne     still
  512.  
  513.         cmp     [menu_data_2.cursor_out],dword 0
  514.         jne     analyse_out_menu_2
  515.         jmp     still
  516. ;---------------------------------------------------------------------
  517. select_filter:
  518.         call    check_alt
  519. .1:
  520.         xor     eax,eax
  521.         mov     [menu_data_3.ret_key],eax
  522.  
  523.         push    dword menu_data_3
  524.         call    [menu_bar_activate]
  525.  
  526.         call    clear_control_key_flag
  527.  
  528.         mov     eax,[menu_data_3.ret_key]
  529.         mov     [menu_data_3.ret_key],dword 0
  530.         cmp     eax,1
  531.         je      select_sort.1
  532.  
  533.         cmp     eax,2
  534.         je      select_disk.1
  535.  
  536.  
  537.         cmp     [menu_data_3.click],dword 1
  538.         jne     still
  539.  
  540.         cmp     [menu_data_3.cursor_out],dword 0
  541.         jne     analyse_out_menu_3
  542.         jmp     still
  543. ;---------------------------------------------------------------------
  544. symbol_a_up:
  545. NumPad_plus_Up:
  546.         call    check_ctrl
  547.         jmp     key.9
  548. ;---------------------------------------
  549. NumPad_minus_Up:
  550.         call    check_ctrl
  551.         jmp     key.10
  552. ;---------------------------------------
  553. NumPad_invert_Up:
  554.         call    check_ctrl
  555.         jmp     key.11
  556. ;---------------------------------------       
  557. check_alt:
  558.         xor     eax,eax
  559.         mov     al,[alt_flag]
  560.         test    eax,eax
  561.         jz      @f
  562.         xor     ebx,ebx
  563.         ret
  564. @@:
  565.         add     esp,4
  566.         jmp     still
  567. ;---------------------------------------       
  568. check_ctrl:
  569.         xor     eax,eax
  570.         mov     al,[ctrl_flag]
  571.         test    eax,eax
  572.         jz      @f
  573.         xor     ebx,ebx
  574.         ret
  575. @@:
  576.         add     esp,4
  577.         jmp     still
  578. ;---------------------------------------------------------------------
  579. clear_control_key_flag:
  580.         xor     eax,eax
  581.         mov     [shift_flag],al
  582.         mov     [ctrl_flag],al
  583.         mov     [alt_flag],al
  584.         ret
  585. ;---------------------------------------------------------------------
  586. key_shift_up:
  587.         mov     [shift_flag],1
  588.         jmp     still
  589. ;---------------------------------------------------------------------
  590. key_shift_down:
  591.         mov     [shift_flag],0
  592.         jmp     still
  593. ;---------------------------------------------------------------------
  594. key_ctrl_up:
  595.         mov     [ctrl_flag],1
  596.         jmp     still
  597. ;---------------------------------------------------------------------
  598. key_ctrl_down:
  599.         mov     [ctrl_flag],0
  600.         jmp     still
  601. ;---------------------------------------------------------------------
  602. key_alt_up:
  603.         mov     [alt_flag],1
  604.         jmp     still
  605. ;---------------------------------------------------------------------
  606. key_alt_down:
  607.         mov     [alt_flag],0
  608.         jmp     still
  609. ;---------------------------------------------------------------------
  610. button:
  611.         mcall   17
  612.         cmp     ah,6
  613.         je      .reload_dir_1
  614.         cmp     ah,4
  615.         je      .open_dir_or_file
  616.         cmp     ah,3
  617.         je      .exit
  618.         cmp     ah,2
  619.         je      .exit_dir
  620.         cmp     ah,1
  621.         jne     still
  622. .exit:
  623.         mov     eax,[communication_area]
  624.         test    eax,eax
  625.         jz      @f
  626.         cmp     [eax],word 1
  627.         je      @f
  628.         mov     [eax],word 3
  629. @@:
  630.         mov     eax,[N_error]
  631.         test    eax,eax
  632.         jz      @f
  633.         call    start_error_window_thread
  634. @@:
  635.         call    get_window_param
  636.         mov     ebx,[communication_area]
  637.         mov     ecx,procinfo
  638. ;       mov     eax,[window_x]
  639.         mov     eax,[ecx+34]
  640.         shl     eax,16
  641.         add     eax,[ecx+42]
  642.         mov     [ebx+4],eax
  643. ;       mov     eax,[window_y]
  644.         mov     eax,[ecx+38]
  645.         shl     eax,16
  646.         add     eax,[ecx+46]
  647.         mov     [ebx+8],eax
  648.  
  649.         mcall   -1
  650. ;---------------------------------------------------------------------
  651. .reload_dir:
  652.         cmp     [ctrl_flag],bl
  653.         je      key.12 ; Just symbol 'R' or 'r'
  654. .reload_dir_1:
  655.         call    load_next_dir.1
  656.         jmp     still
  657. ;---------------------------------------------------------------------
  658. .exit_dir:
  659.         call    load_next_dir.exit_dir
  660.         jmp     still
  661. ;---------------------------------------------------------------------
  662. .open_dir_or_file:
  663.         cmp     [open_dialog_type],0    ;Open file
  664.         jne     @f
  665.  
  666.         mov     eax,[file_browser_data_1.folder_data]
  667.         mov     eax,[eax+4]
  668.         test    eax,eax
  669.         jz      button.exit
  670. @@:
  671.         cmp     [open_dialog_type],2    ;Select dir
  672.         je      file_no_folder
  673.        
  674.         cmp     [open_dialog_type],1    ;Save file
  675.         jne     @f
  676.  
  677.         mov     al,[focus_pointer]
  678.         test    al,al
  679.         jne     file_no_folder 
  680. @@:
  681.         xor     ebx,ebx
  682.         jmp     key.7
  683. ;---------------------------------------------------------------------
  684. thread_start:
  685.         mov     eax,[N_error]
  686.         cmp     al,1
  687.         jne     @f
  688.         mov     [N_error],load_ini_error_type
  689.         mov     [error_path],file_name
  690.         jmp     .error_type
  691. @@:
  692.         cmp     al,2
  693.         jne     @f
  694.         mov     [N_error],load_icons_error_type
  695.         mov     [error_path],file_name
  696.         jmp     .error_type
  697. @@:
  698.         cmp     al,3
  699.         jne     @f
  700.         mov     [N_error],memory_free_error_type
  701.         xor     eax,eax
  702.         mov     [error_path],eax
  703.         mov     [error_type],eax
  704.         jmp     .red
  705. @@:
  706.         cmp     al,4
  707.         jne     @f
  708.         mov     [N_error],memory_get_error_type
  709.         xor     eax,eax
  710.         mov     [error_path],eax
  711.         mov     [error_type],eax
  712.         jmp     .red
  713. @@:
  714.         cmp     al,5
  715.         jne     @f
  716.         mov     [N_error],load_directory_error_type
  717.         mov     [error_path],dir_path
  718.         jmp     .error_type
  719. @@:
  720.         cmp     al,6
  721.         jne     .button
  722.         mov     [N_error],convert_icons_error_type
  723.         mov     [error_path],file_name
  724.         xor     eax,eax
  725.         mov     [error_type],eax
  726.         jmp     .red
  727. .error_type:
  728.         mov     eax,[error_type]
  729.         shl     eax,2
  730.         add     eax,error_fs_text_pointers
  731.         mov     eax,[eax]
  732.         mov     [error_type],eax
  733. .red:
  734.         call    draw_error_window
  735. .still:
  736.         mcall   10
  737.         cmp     eax,1
  738.         je      .red
  739.         cmp     eax,2
  740.         je      .key
  741.         cmp     eax,3
  742.         je      .button
  743.         jmp     .still
  744. .key:
  745.         mcall   2
  746.         jmp     .still
  747. .button:
  748.         mcall   -1
  749.         jmp     .still
  750. ;---------------------------------------------------------------------
  751. draw_error_window:
  752.         mcall   12,1
  753.         mcall   0,[error_window_x],[error_window_y],0x03ff0000
  754.         call    type_title
  755.         mcall   4,<10,30>,0x90ffffff,[N_error]
  756.         mov     eax,[error_path]
  757.         test    eax,eax
  758.         jz      @f
  759.         mcall   4,<10,50>,,[error_path]
  760. @@:
  761.         mov     eax,[error_type]
  762.         test    eax,eax
  763.         jz      @f
  764.         mcall   4,<10,70>,,[error_type]
  765. @@:
  766.         mcall   12,2
  767.         ret
  768. ;---------------------------------------------------------------------
  769. start_error_window_thread:
  770.         mcall   9,procinfo,-1
  771.         mov     eax,[ebx+46]
  772.         shr     eax,1
  773.         add     eax,[ebx+38]
  774.         sub     eax,40
  775.         mov     [error_window_y+2],ax
  776.         mov     eax,[ebx+42]
  777.         shr     eax,1
  778.         add     eax,[ebx+34]
  779.         sub     eax,125
  780.         mov     [error_window_x+2],ax
  781.         mcall   51,1,thread_start,thread_stack
  782.         ret
  783. ;---------------------------------------------------------------------
  784. mouse:
  785.         mcall   18,7
  786.         cmp     [active_process],eax
  787.         jne     still
  788.  
  789.         mcall   37,7
  790.         mov     [mouse_scroll_data],eax
  791.  
  792.         mcall   37,1
  793.         mov     [mouse_position],eax
  794.  
  795.         cmp     [scroll_bar_data_vertical.delta2],0
  796.         jne     .scrollbar
  797.  
  798.         mov     [file_browser_data_1.select_flag],0
  799.  
  800.         push    dword file_browser_data_1
  801.         call    [FileBrowser_mouse]
  802.  
  803.         call    draw_open_button_label
  804.  
  805.         mov     eax,file_browser_data_1.mouse_keys_delta
  806.         cmp     [eax],dword 3
  807.         jne     .check_focus    ; scrollbar
  808.         mov     [eax],dword 0
  809.         call    load_next_dir
  810.         jmp     still
  811. ;---------------------------------------------------
  812. .check_focus:
  813.         mov     ebx,[file_browser_data_1.select_flag]
  814.         test    ebx,ebx
  815.         jz      .scrollbar      ;@f
  816.         mov     al,[focus_pointer]
  817.         test    al,al
  818.         jz      .scrollbar
  819.         xor     eax,eax
  820.         mov     [focus_pointer],al
  821.         jmp     change_focus_area.1
  822. ;---------------------------------------------------
  823. .scrollbar:
  824.         mov     eax,[scroll_bar_data_vertical.max_area]
  825.         cmp     eax,[scroll_bar_data_vertical.cur_area]
  826.         jbe     .menu_bar       ;still
  827.        
  828.         push    dword scroll_bar_data_vertical
  829.         call    [scrollbar_ver_mouse]
  830.        
  831.         cmp     [scroll_bar_data_vertical.redraw],0
  832.         je      .menu_bar       ;still
  833.         mov     [scroll_bar_data_vertical.redraw],0
  834. .draw:
  835.         call    draw_draw_file_browser2
  836.         jmp     still
  837.  
  838. ;---------------------------------------------------
  839. .menu_bar:
  840.         cmp     [scroll_bar_data_vertical.delta2],0
  841.         jne     still
  842.  
  843. .menu_bar_1:
  844.         call    .set_mouse_flag
  845. @@:
  846.         push    dword menu_data_1
  847.         call    [menu_bar_mouse]
  848.  
  849.         cmp     [menu_data_1.click],dword 1
  850.         jne     .menu_bar_2
  851.  
  852.         cmp     [menu_data_1.cursor_out],dword 0
  853.         jne     select_disk.1   ;analyse_out_menu_1
  854.         jmp     .menu_bar_1
  855. ;--------------------------------------------
  856. .menu_bar_2:
  857.         push    dword menu_data_2
  858.         call    [menu_bar_mouse]
  859.  
  860.         cmp     [menu_data_2.click],dword 1
  861.         jne     .menu_bar_3
  862.  
  863.         cmp     [menu_data_2.cursor_out],dword 0
  864.         jne     analyse_out_menu_2
  865.         jmp     .menu_bar_1
  866. ;---------------------------------------------------
  867. .menu_bar_3:
  868.         push    dword menu_data_3
  869.         call    [menu_bar_mouse]
  870.  
  871.         cmp     [menu_data_3.click],dword 1
  872.         jne     .check_editboxes
  873.  
  874.         cmp     [menu_data_3.cursor_out],dword 0
  875.         jne     analyse_out_menu_3
  876.         jmp     .menu_bar_1
  877. ;---------------------------------------------------
  878. .check_editboxes:
  879.         cmp     [open_dialog_type],1
  880.         jne     .check_scroll_event
  881.         mov     eax,[edit1+44]
  882.         and     eax,10b
  883.         push    dword name_editboxes
  884.         call    [edit_box_mouse]
  885.         mov     ebx,[edit1+44]
  886.         and     ebx,10b
  887.         cmp     eax,ebx
  888.         je      .check_scroll_event
  889.         mov     al,[focus_pointer]
  890.         test    al,al
  891.         jnz     .check_scroll_event
  892.         xor     eax,eax
  893.         test    ebx,10b
  894.         jz      @f
  895.         inc     eax
  896. @@:
  897.         mov     [focus_pointer],al
  898.         jmp     change_focus_area.1
  899. ;---------------------------------------------------
  900. .check_scroll_event:
  901.         mov     eax,[mouse_position]
  902.         xor     ebx,ebx
  903.         mov     bx,ax   ; EBX mouse y
  904.         shr     eax,16  ; EAX mouse x
  905.        
  906.         mov     cx,[file_browser_data_1.start_x]
  907.         mov     dx,[file_browser_data_1.start_y]
  908.  
  909.         cmp     ax,cx
  910.         jb      .mouse_next     ; min x
  911.  
  912.         cmp     bx,dx
  913.         jb      .mouse_next     ; min y
  914.  
  915.         add     cx,[file_browser_data_1.size_x]
  916.         cmp     ax,cx  
  917.         ja      .mouse_next     ; max x
  918.  
  919.         add     dx,[file_browser_data_1.size_y]
  920.         cmp     bx,dx
  921.         ja      .mouse_next     ; max y
  922.  
  923.         xor     ecx,ecx
  924.         xor     ebx,ebx
  925.         mov     eax,[mouse_scroll_data]
  926.         test    eax,eax
  927.         jz      .mouse_next
  928.         test    ax,0x8000
  929.         jnz     .decr
  930.         shr     eax,16
  931.         test    ax,0x8000
  932.         jnz     .decr_1
  933.  
  934.         mov     cx,[mouse_scroll_data.vertical]
  935.         test    ecx,ecx
  936.         jnz     @f
  937.         mov     cx,[mouse_scroll_data.horizontal]
  938.         test    ecx,ecx
  939.         jz      .mouse_next
  940. @@:
  941.         mov     ebx,1
  942. @@:
  943.         push    ebx ecx
  944.         call    key.key_action
  945.         pop     ecx ebx
  946.         dec     ecx
  947.         jnz     @r
  948.         jmp     still
  949. ;----------------------------------------
  950. .decr:
  951.         mov     bx,[mouse_scroll_data.vertical]
  952.         jmp     @f
  953. .decr_1:
  954.         mov     bx,[mouse_scroll_data.horizontal]
  955. @@:
  956.         mov     ecx,0xffff
  957.         sub     ecx,ebx
  958.         inc     ecx
  959.         mov     ebx,2
  960. @@:
  961.         push    ebx ecx
  962.         call    key.key_action
  963.         pop     ecx ebx
  964.         dec     ecx
  965.         jnz     @r
  966.         jmp     still
  967. ;---------------------------------------------------
  968. .mouse_next:
  969.         jmp     still
  970. ;---------------------------------------------------------------------
  971. .set_mouse_flag:
  972.         xor     eax,eax
  973.         inc     eax
  974.         mov     [menu_data_1.get_mouse_flag],eax
  975.         mov     [menu_data_2.get_mouse_flag],eax
  976.         ret
  977. ;---------------------------------------------------------------------
  978. analyse_out_menu_1:
  979. ; Available disks
  980.         mov     eax,[menu_data_1.cursor_out]
  981.         dec     eax
  982.         imul    esi,eax,10
  983.         add     esi,retrieved_devices_table
  984.         mov     edi,dir_path
  985.         call    copy_dir_name
  986.         call    load_next_dir.1
  987.         jmp     still
  988. ;---------------------------------------------------------------------
  989. analyse_out_menu_2:
  990. ; Sort
  991.         mov     eax,[menu_data_2.cursor_out]
  992.         xor     ebx,ebx
  993.         cmp     eax,dword 1
  994.         je      .1
  995.         cmp     eax,dword 2
  996.         je      .2
  997.         cmp     eax,dword 3
  998.         je      .3
  999.         cmp     eax,dword 4
  1000.         je      .4
  1001.         jmp     still
  1002. .4:
  1003.         add     ebx,2
  1004. .3:
  1005.         add     ebx,2
  1006. .2:
  1007.         add     ebx,2
  1008. .1:
  1009.         mov     [sort_type],ebx
  1010.         call    sort_directory
  1011.         call    draw_draw_file_browser1
  1012.         jmp     still
  1013. ;---------------------------------------------------------------------
  1014. analyse_out_menu_3:
  1015. ; Filter
  1016.         mov     eax,[menu_data_3.cursor_out]
  1017.         cmp     eax,dword 1
  1018.         jne     @f
  1019.         mov     [filter_flag],0
  1020.         call    load_next_dir.1
  1021.         jmp     still
  1022. @@:
  1023.         cmp     eax,dword 2
  1024.         jne     still
  1025.         mov     [filter_flag],1
  1026.         call    load_next_dir.1
  1027.         jmp     still  
  1028. ;---------------------------------------------------------------------
  1029. get_communication_area:
  1030.         xor     eax,eax
  1031.         mov     al,[param]
  1032.         test    eax,eax
  1033.         jz      .exit
  1034.         mcall   68,22,param,,0x01
  1035.         mov     [communication_area],eax
  1036.         movzx   ebx,word [eax+2]
  1037.         mov     [open_dialog_type],ebx
  1038.         cmp     ebx,1
  1039.         jne     @f
  1040.         pushad
  1041.         mov     [focus_pointer],bl
  1042.         mov     edi,edit1
  1043.         mov     [file_browser_data_1.select_panel_counter],0
  1044.         or      [edi+44],dword ed_focus
  1045.         mov     [edi+12],dword 0xffffb0 ; color yellow
  1046.         mcall   66,1,0
  1047.         popad
  1048. @@:
  1049.         mov     ebx,[eax+4]
  1050.         cmp     bx,word x_minimal_size ;300
  1051.         jb      @f
  1052.         mov     [window_x],ebx
  1053.         mov     ebx,[eax+8]
  1054.         cmp     bx,word y_minimal_size ;200
  1055.         jb      @f
  1056.         mov     [window_y],ebx
  1057. .exit:
  1058.         ret
  1059. ;---------------------------------------------------------------------
  1060. load_start_directory:
  1061.         mov     eax,[communication_area]       
  1062.         test    eax,eax
  1063.         jz      .1
  1064.         movzx   ebx,word [eax]
  1065.         test    eax,eax
  1066.         jz      .1
  1067.         add     eax,16  ;12 ;4
  1068.         mov     esi,eax
  1069.         push    esi
  1070.         mov     esi,[communication_area]
  1071.         add     esi,3840 ;4096-256
  1072.         mov     eax,[esi]
  1073.         test    al,al
  1074.         jnz     @f
  1075.         mov     esi,example_name_temp
  1076. @@:
  1077.         mov     edi,user_selected_name
  1078.         call    copy_dir_name
  1079.         pop     esi
  1080.         jmp     .2
  1081. .1:
  1082.         mov     esi,start_pach
  1083. .2:
  1084.         mov     edi,dir_path
  1085.         call    copy_dir_name
  1086.        
  1087. ;       call    load_directory
  1088. ;       mov     eax,[N_error]
  1089. ;       test    eax,eax
  1090. ;       jnz     button.exit
  1091. .3:
  1092.         call    load_directory
  1093.         mov     eax,[N_error]
  1094.         test    eax,eax
  1095.         jz      @f
  1096.         call    error_handler
  1097.         jmp     .3
  1098. @@:
  1099.         ret
  1100. ;---------------------------------------------------------------------
  1101. load_next_dir:
  1102.         mov     ebx,[file_browser_data_1.folder_block]
  1103.         test    ebx,ebx
  1104.         jz      .exit
  1105.  
  1106.         mov     ebx,[file_browser_data_1.selected_BDVK_adress]
  1107.         add     ebx,40
  1108.         test    [ebx-40],byte 0x10
  1109.         jz      file_no_folder
  1110.         cmp     [ebx],word '..'
  1111.         jne     @f
  1112.         cmp     [ebx+2],byte 0
  1113.         je      .exit_dir
  1114. @@:
  1115.         mov     esi,dir_path
  1116.         call    copy_dir_path
  1117.  
  1118. @@:
  1119. .1:
  1120.         call    load_directory
  1121.         mov     eax,[N_error]
  1122.         test    eax,eax
  1123.         jz      @f
  1124.         call    error_handler
  1125.         jmp     .1
  1126. @@:
  1127.         call    sort_directory
  1128.  
  1129.         mov     ebx,[scroll_bar_data_vertical.x]
  1130.         inc     ebx
  1131.         mov     ecx,[scroll_bar_data_vertical.y]
  1132.         inc     ecx
  1133.         mcall   13,,,0xcccccc
  1134.         mov     edi,edit1
  1135.         xor     eax,eax
  1136.         mov     [edi+44],eax
  1137.         mov     [edi+12],dword 0xffffff ; color white
  1138.         call    draw_draw_file_browser1
  1139. .exit:
  1140.         ret
  1141. .exit_dir:
  1142.         mov     esi,dir_path
  1143.         call    copy_exit_dir
  1144.         jmp     .1
  1145. ;---------------------------------------------------------------------
  1146. error_handler:
  1147.         mcall   66,2
  1148.         mov     [error_handler_store_input_mode],eax
  1149.         mcall   66,1,1
  1150. .red:
  1151.         call    .draw_window
  1152. ;------------------------------------
  1153. .still:
  1154.         mcall   10
  1155.         cmp     eax,1
  1156.         je      .red
  1157.         cmp     eax,2
  1158.         je      .key
  1159.         cmp     eax,3
  1160.         je      .button
  1161.         jmp     .still
  1162. ;------------------------------------
  1163. .draw_window:
  1164.         xor     eax,eax
  1165.         inc     eax
  1166.         mov     [error_window],al
  1167.         call    control_minimal_window_size
  1168.         call    draw_window
  1169.         xor     eax,eax
  1170.         mov     [error_window],al
  1171.         ret
  1172. ;------------------------------------
  1173. .key:
  1174.         mcall   2
  1175.         xor     ebx,ebx
  1176.         cmp     [extended_key],1
  1177.         je      .extended_key
  1178.         test    al,al
  1179.         jnz     .still
  1180.         cmp     ah,0xE0
  1181.         jne     @f
  1182.         mov     [extended_key],1
  1183.         jmp     .still
  1184. @@:
  1185.         cmp     ah,129  ; Esc
  1186.         je      .exit
  1187.         jmp     .still
  1188. .extended_key:
  1189.         jmp     .still
  1190. ;------------------------------------
  1191. .button:
  1192.         mcall   17
  1193.         cmp     ah,5
  1194.         je      .exit
  1195.         cmp     ah,1
  1196.         jne     .still
  1197.         xor     eax,eax
  1198.         mov     [N_error],eax
  1199.         jmp     button.exit
  1200. ;------------------------------------
  1201. .exit:
  1202.         cmp     [open_dialog_type],1
  1203.         jne     @f
  1204.  
  1205.         mov     esi,root_pach
  1206.         mov     edi,dir_path
  1207.         call    copy_dir_name.1
  1208.         mov     esi,root_pach
  1209.         mov     edi,previous_dir_path
  1210.         call    copy_dir_name.1
  1211.         jmp     .restore_input_mode
  1212. @@:
  1213.         mov     esi,previous_dir_path
  1214.         mov     edi,dir_path
  1215.         call    copy_dir_name.1
  1216.         mov     esi,start_pach
  1217.         mov     edi,previous_dir_path
  1218.         call    copy_dir_name.1
  1219. .restore_input_mode:
  1220.         mcall   66,1,[error_handler_store_input_mode]
  1221.         ret
  1222. ;---------------------------------------------------------------------
  1223. file_no_folder:
  1224.         mov     esi,dir_path
  1225.         mov     edi,file_name
  1226.         call    copy_dir_name
  1227.         push    ebx
  1228.         mov     al,[focus_pointer]
  1229.         test    al,al
  1230.         je      @f
  1231.         mov     ebx,user_selected_name
  1232.         xor     eax,eax
  1233.         cmp     [ebx],al
  1234.         je      .exit
  1235. @@:
  1236.         cmp     [open_dialog_type],2
  1237.         je      @f
  1238.         mov     esi,file_name
  1239.         call    copy_dir_path
  1240. @@:
  1241.         mov     eax,[communication_area]
  1242.         test    eax,eax
  1243.         jnz     @f
  1244.         call    control_minimal_window_size
  1245.         call    draw_window
  1246.         pop     ebx
  1247.         ret
  1248. @@:
  1249.         mov     edi,eax
  1250.         add     edi,16  ;12
  1251.         mov     esi,file_name  
  1252.         call    copy_dir_name
  1253.        
  1254.         pop     esi
  1255.         mov     al,[focus_pointer]
  1256.         test    al,al
  1257.         jz      @f
  1258.         mov     esi,user_selected_name
  1259. @@:
  1260.         xor     eax,eax
  1261.         cmp     [esi],al
  1262.         je      .exit
  1263.         mov     edi,[communication_area]
  1264.         add     edi,3840 ;4096-256
  1265.         call    copy_dir_name
  1266. .exit:
  1267.         mov     eax,[communication_area]
  1268.         mov     [eax],word 1
  1269.         jmp     button.exit
  1270. ;---------------------------------------------------------------------
  1271. load_root_directory:
  1272.         mov     [dirinfo.name],dword dir_path_temp
  1273.         mov     eax,[dirinfo.return]
  1274.         push    eax
  1275.         mov     eax,[file_browser_data_1.folder_data]
  1276.         push    eax
  1277.         xor     eax,eax
  1278.         mov     [dirinfo.return],eax
  1279.         mov     [file_browser_data_1.folder_data],eax
  1280.         mov     esi,root_pach
  1281.         mov     edi,dir_path_temp
  1282.         call    copy_dir_name
  1283.         call    load_directory
  1284.         mov     eax,[N_error]
  1285.         test    eax,eax
  1286.         jnz     button.exit
  1287.  
  1288.         mov     eax,[dirinfo.return]
  1289.         mov     [root_folder_area],eax
  1290.         mov     eax,[eax+4]
  1291.         mov     [root_folder_block],eax
  1292.  
  1293.         xor     eax,eax
  1294.         mov     [dirinfo.return],eax
  1295.         mov     [file_browser_data_1.folder_data],eax
  1296.         mov     [temp_counter_1],eax    ;0
  1297.  
  1298.         mov     [retrieved_devices_table_counter],eax   ;0
  1299. .start_temp_counter_1:
  1300.         imul    esi,[temp_counter_1],304
  1301.         add     esi,[root_folder_area]
  1302.         add     esi,32+40
  1303.         mov     edi,dir_path_temp+1
  1304.         mov     [edi-1],byte '/'
  1305.         call    copy_dir_name
  1306.         call    load_directory
  1307.         mov     eax,[N_error]
  1308.         test    eax,eax
  1309.         jnz     button.exit
  1310.  
  1311.         mov     eax,[dirinfo.return]
  1312.         mov     [root1_folder_area],eax
  1313.         mov     eax,[eax+4]
  1314.         test    eax,eax
  1315.         jz      .continue
  1316.         mov     [root1_folder_block],eax
  1317.        
  1318.         mov     ebp,0
  1319. .start_copy_device_patch:
  1320.         imul    edi,[retrieved_devices_table_counter],10
  1321.         add     edi,retrieved_devices_table
  1322.         mov     [edi],byte '/'
  1323.         inc     edi
  1324.         imul    esi,[temp_counter_1],304
  1325.         add     esi,[root_folder_area]
  1326.         add     esi,32+40
  1327.  
  1328.         call    copy_dir_name
  1329.  
  1330.         imul    esi,ebp,304
  1331.         add     esi,[root1_folder_area]
  1332.         add     esi,32+40
  1333.         mov     [edi-1],byte '/'
  1334.  
  1335.         call    copy_dir_name
  1336.  
  1337.         inc     [retrieved_devices_table_counter]
  1338.         inc     ebp
  1339.         cmp     ebp,[root1_folder_block]
  1340.         jb      .start_copy_device_patch
  1341. .continue:
  1342.         inc     [temp_counter_1]
  1343.         mov     eax,[temp_counter_1]
  1344.         cmp     eax,[root_folder_block]
  1345.         jb      .start_temp_counter_1
  1346.  
  1347.         cmp     [root_folder_area],dword 0
  1348.         je      @f
  1349.         mcall   68,13,[root_folder_area]
  1350.         test    eax,eax
  1351.         jz      memory_free_error
  1352. @@:
  1353.  
  1354.         xor     ecx,ecx
  1355.         mov     edi,menu_text_area_1_1  ;.1
  1356. @@:
  1357.         imul    esi,ecx,10
  1358.         add     esi,retrieved_devices_table
  1359.         call    copy_dir_name
  1360.         inc     ecx
  1361.         cmp     ecx,[retrieved_devices_table_counter]
  1362.         jb      @b
  1363.         mov     [menu_data_1.text_end],edi
  1364.         xor     eax,eax
  1365.         mov     [edi],eax
  1366.         pop     eax
  1367.         mov     [file_browser_data_1.folder_data],eax
  1368.         pop     eax
  1369.         mov     [dirinfo.return],eax
  1370.         mov     [dirinfo.name],dword dir_path
  1371.         ret
  1372. ;---------------------------------------------------------------------
  1373. memory_free_error:
  1374.         mov     [N_error],3
  1375.         jmp     button.exit
  1376. ;---------------------------------------------------------------------
  1377. memory_get_error:
  1378.         mov     [N_error],4
  1379.         jmp     button.exit
  1380. ;---------------------------------------------------------------------
  1381. type_title:
  1382.         mov     ecx,[open_dialog_type]
  1383.         shl     ecx,2
  1384.         add     ecx,open_dialog_title_pointer
  1385.         mov     ecx,[ecx]
  1386.         test    ecx,ecx
  1387.         jz      @f
  1388.         mcall   71,1,; title ;;param ;file_name ;dir_path
  1389. @@:
  1390.         ret
  1391. ;---------------------------------------------------------------------
  1392. draw_window:
  1393.  
  1394.         mcall   12,1
  1395.         call    prepare_system_colors
  1396.         xor     esi,esi
  1397.         mcall   0,[window_x],[window_y],0x63AABBCC
  1398.         call    type_title
  1399.         call    get_window_param
  1400.         mov     eax,[procinfo+70] ;status of window
  1401.         test    eax,100b
  1402.         jne     .end
  1403.  
  1404.         mov     eax,[window_high]
  1405.         sub     eax,25+45
  1406.         mov     [file_browser_data_1.size_y],ax
  1407.         mov     [scroll_bar_data_vertical.size_y],ax
  1408.         mov     eax,[window_width]
  1409.         sub     eax,10+20
  1410.         mov     [file_browser_data_1.size_x],ax
  1411.         add     ax,10
  1412.         mov     [scroll_bar_data_vertical.start_x],ax
  1413.         mov     edx,[w_work]    ; color of work area RRGGBB,8->color
  1414.         or      edx,0x63000000
  1415.         mcall   13,[window_width],45    ;,0xcccccc
  1416.  
  1417.         push    ecx
  1418.         rol     ecx,16
  1419.         add     cx,[file_browser_data_1.size_y]
  1420.         add     cx,45
  1421.         ror     ecx,16
  1422.         mov     cx,25
  1423.         mcall
  1424.         pop     ecx
  1425.         add     ecx,45 shl 16
  1426.         mov     cx,[file_browser_data_1.size_y]
  1427.         mov     bx,10
  1428.         mcall
  1429.         mov     bx,[file_browser_data_1.size_x]
  1430.         add     bx,10
  1431.         shl     ebx,16
  1432.         mov     bx,20
  1433.         mcall
  1434.  
  1435.         cmp     [error_window],0
  1436.         je      @f
  1437.         call    draw_for_fs_errors
  1438.         jmp     .1
  1439. @@:
  1440.         mov     [do_not_draw_open_button_label],1
  1441.         call    draw_draw_file_browser1
  1442.         mov     [do_not_draw_open_button_label],0
  1443. .1:
  1444.         push    dword menu_data_1
  1445.         call    [menu_bar_draw]
  1446.         push    dword menu_data_2
  1447.         call    [menu_bar_draw]
  1448.         push    dword menu_data_3
  1449.         call    [menu_bar_draw]
  1450.  
  1451.         mov     ebx,[file_browser_data_1.x]
  1452.         mov     ax,bx
  1453.         shl     eax,16
  1454.         add     ebx,eax
  1455.         mov     eax,50
  1456.         mov     bx,ax
  1457.         shl     eax,16
  1458.         sub     ebx,eax
  1459.         mov     ecx,25 shl 16 + 16
  1460.         mcall   8,,,2,[w_work_button]   ;0xffffff
  1461.  
  1462.         pusha
  1463.         shr     ecx,16
  1464.         mov     bx,cx
  1465.         add     ebx,21 shl 16
  1466.         mov     ecx,[w_work_button_text]
  1467.         or      ecx,0x90000000
  1468.         mcall   4,,,message_ExitDir_button
  1469.         add     ebx,4
  1470.         mcall
  1471.         add     ebx,4
  1472.         mcall
  1473.         popa
  1474.  
  1475.         push    ebx
  1476.         sub     ebx,70 shl 16
  1477.         mov     bx,60
  1478.         mcall   8,,,6
  1479.  
  1480.         shr     ecx,16
  1481.         mov     bx,cx
  1482.         add     ebx,2 shl 16
  1483.         mov     ecx,[w_work_button_text]
  1484.         or      ecx,0x90000000
  1485.         mcall   4,,,message_ReloadDir_button
  1486.         pop     ebx
  1487.  
  1488.         mov     ebx,[file_browser_data_1.x]
  1489.         mov     ax,bx
  1490.         shl     eax,16
  1491.         add     ebx,eax
  1492.         mov     eax,55
  1493.         mov     bx,ax
  1494.         shl     eax,16
  1495.         sub     ebx,eax
  1496.         mov     ecx,[file_browser_data_1.y]
  1497.         mov     ax,cx
  1498.         add     eax,3
  1499.         shl     eax,16
  1500.         add     ecx,eax
  1501.         mov     cx,16
  1502.         mcall   8,,,3
  1503.  
  1504.         pusha
  1505.         shr     ecx,16
  1506.         mov     bx,cx
  1507.         add     ebx,4 shl 16
  1508.         mov     ecx,[w_work_button_text]
  1509.         or      ecx,0x90000000
  1510.         mcall   4,,,message_cancel_button
  1511.         popa
  1512.  
  1513.         sub     ebx,65 shl 16
  1514.         mcall   8,,,4
  1515.  
  1516.         shr     ecx,16
  1517.         mov     bx,cx
  1518.         add     ebx,4 shl 16
  1519.         mov     edx,[open_dialog_type]
  1520.         shl     edx,2
  1521.         add     edx,message_open_dialog_button
  1522.         mov     edx,[edx]
  1523. ;-------------------------------
  1524.         cmp     [open_dialog_type],1
  1525.         jne     @f
  1526.  
  1527.         cmp     [focus_pointer],1
  1528.         je      @f
  1529.  
  1530.         cmp     [error_window],0
  1531.         jne     @f
  1532.  
  1533.         mov     eax,[file_browser_data_1.folder_block]
  1534.         test    eax,eax
  1535.         jz      @f
  1536.  
  1537.         mov     eax,[file_browser_data_1.selected_BDVK_adress]
  1538.         test    [eax],byte 0x10
  1539.         jz      @f
  1540.  
  1541.         mov     edx,message_0   ; Open Dir
  1542. @@:
  1543. ;--------------------------------------
  1544.         mov     [open_button_coordinates],ebx
  1545.         mov     ecx,[w_work_button_text]
  1546.         or      ecx,0x90000000
  1547.         mcall   4       ;message_open_button
  1548. .end:
  1549.         mcall   12,2
  1550.         ret
  1551. ;---------------------------------------------------------------------
  1552. draw_open_button_label:
  1553.         cmp     [do_not_draw_open_button_label],1
  1554.         je      .exit_1
  1555.  
  1556.         cmp     [open_dialog_type],1
  1557.         jne     .exit_1
  1558.  
  1559.         cmp     [focus_pointer],1
  1560.         je      draw_save_button_label
  1561.        
  1562.         pusha
  1563.         mov     ebx,[open_button_coordinates]
  1564.         test    ebx,ebx
  1565.         jz      .exit
  1566.  
  1567.         mov     edx,[open_dialog_type]
  1568.         shl     edx,2
  1569.         add     edx,message_open_dialog_button
  1570.         mov     edx,[edx]
  1571.        
  1572.         mov     eax,[file_browser_data_1.folder_block]
  1573.         test    eax,eax
  1574.         jz      .1
  1575.        
  1576.         mov     eax,[file_browser_data_1.selected_BDVK_adress]
  1577.         test    [eax],byte 0x10
  1578.         jz      @f
  1579.        
  1580.         mov     edx,message_0   ; Open Dir
  1581.         jmp     .1
  1582. @@:
  1583.         call    copy_new_file_name
  1584. .1:
  1585.         mov     ecx,[w_work_button_text]
  1586.         or      ecx,0xd0000000
  1587.         mov     edi,[w_work_button]
  1588.         mcall   4       ;message_open_button
  1589. .exit:
  1590.         popa
  1591. .exit_1:
  1592.         ret
  1593. ;---------------------------------------------------------------------
  1594. draw_save_button_label:
  1595.         pusha
  1596.         mov     ebx,[open_button_coordinates]
  1597.  
  1598.         mov     edx,message_1   ; Save
  1599.  
  1600.         mov     ecx,[w_work_button_text]
  1601.         or      ecx,0xd0000000
  1602.         mov     edi,[w_work_button]
  1603.         mcall   4       ;message_open_button
  1604.         popa
  1605.         ret
  1606. ;---------------------------------------------------------------------
  1607. copy_new_file_name:
  1608.         mov     esi,[file_browser_data_1.selected_BDVK_adress]
  1609.         add     esi,40
  1610.         mov     edi,user_selected_name
  1611.         cld
  1612.         lodsb
  1613.         test    al,al
  1614.         jnz     .1
  1615.         ret
  1616. @@:
  1617.         lodsb
  1618. .1:
  1619.         stosb
  1620.         test    al,al
  1621.         jnz     @r
  1622.        
  1623.         sub     edi,user_selected_name
  1624.         dec     edi
  1625.        
  1626.         mov     esi,edit1
  1627.         mov     [esi+48],edi ;ed_size
  1628.         mov     [esi+52],edi ;ed_pos
  1629.  
  1630.         push    dword name_editboxes
  1631.         call    [edit_box_draw]
  1632.         ret
  1633. ;---------------------------------------------------------------------
  1634. prepare_system_colors:
  1635.         mcall   48,3,app_colours,10*4
  1636.  
  1637.         mov     eax,[w_work]
  1638.         mov     [menu_data_1.bckg_col],eax
  1639.         mov     [menu_data_2.bckg_col],eax
  1640.         mov     [menu_data_3.bckg_col],eax
  1641.  
  1642.         mov     [menu_data_1.menu_col],eax
  1643.         mov     [menu_data_2.menu_col],eax
  1644.         mov     [menu_data_3.menu_col],eax
  1645.        
  1646.         mov     [scroll_bar_data_vertical.bckg_col],eax
  1647.  
  1648.         mov     eax,[w_work_button]
  1649.         mov     [menu_data_1.frnt_col],eax
  1650.         mov     [menu_data_2.frnt_col],eax
  1651.         mov     [menu_data_3.frnt_col],eax
  1652.  
  1653.         mov     [scroll_bar_data_vertical.frnt_col],eax
  1654.  
  1655.         mov     eax,[w_work_button]
  1656.         mov     [menu_data_1.menu_sel_col],eax
  1657.         mov     [menu_data_2.menu_sel_col],eax
  1658.         mov     [menu_data_3.menu_sel_col],eax
  1659.  
  1660.         mov     eax,[w_work_text]
  1661.         mov     [menu_data_1.bckg_text_col],eax
  1662.         mov     [menu_data_2.bckg_text_col],eax
  1663.         mov     [menu_data_3.bckg_text_col],eax
  1664.        
  1665.         mov     eax,[w_work_button_text]
  1666.         mov     [menu_data_1.frnt_text_col],eax
  1667.         mov     [menu_data_2.frnt_text_col],eax
  1668.         mov     [menu_data_3.frnt_text_col],eax
  1669.        
  1670.         mov     [scroll_bar_data_vertical.line_col],eax
  1671.         ret
  1672. ;---------------------------------------------------------------------
  1673. draw_for_fs_errors:
  1674.         call    draw_dir_path
  1675.  
  1676.         mov     ebx,[file_browser_data_1.x]
  1677.         mov     ecx,[file_browser_data_1.y]
  1678.         mcall   13,,,[file_browser_data_1.background_color]
  1679.         push    ebx ecx
  1680.         add     ebx,10 shl 16
  1681.         sub     ebx,20
  1682.         add     ecx,10 shl 16
  1683.         sub     ecx,20
  1684.  
  1685.         shr     ecx,16
  1686.         mov     bx,cx
  1687.         add     ebx,5 shl 16+15
  1688.         mcall   4,,0x90000000,load_directory_error_type
  1689.  
  1690.         add     ebx,20
  1691.         mcall   4,,,dir_path   
  1692.  
  1693.         mov     eax,[error_type]
  1694.         shl     eax,2
  1695.         add     eax,error_fs_text_pointers
  1696.         mov     edx,[eax]
  1697.         add     ebx,20
  1698.         mcall   4
  1699.        
  1700.         add     ebx,20
  1701.         mcall   ,,,error_help_text
  1702.  
  1703.         pop     ecx ebx
  1704.  
  1705.         mov     ebx,[file_browser_data_1.x]
  1706.         mov     ax,bx
  1707.         shr     eax,1
  1708.         shl     eax,16
  1709.         add     ebx,eax
  1710.         mov     eax,50
  1711.         mov     bx,ax
  1712.         shr     eax,1
  1713.         shl     eax,16
  1714.         sub     ebx,eax
  1715.  
  1716.         mov     ecx,[file_browser_data_1.y]
  1717.         mov     ax,cx
  1718.         sub     eax,40
  1719.         shl     eax,16
  1720.         add     ecx,eax
  1721.         mov     cx,15
  1722.  
  1723.         mcall   8,,,5,[w_work_button]   ;0xffffff
  1724.  
  1725.         shr     ecx,16
  1726.         mov     bx,cx
  1727.         add     ebx,4 shl 16
  1728.         mov     ecx,[w_work_button_text]
  1729.         add     ecx,0x90000000
  1730.         mcall   4,,,message_cancel_button
  1731.  
  1732.         ret
  1733. ;--------------------------------------------------------------------- 
  1734. draw_file_name:
  1735.         mov     esi,user_selected_name
  1736.         cld
  1737. @@:
  1738.         lodsb
  1739.         test    al,al
  1740.         jne     @r
  1741.         sub     esi,user_selected_name
  1742.         mov     eax,esi
  1743.         dec     eax
  1744.        
  1745.         mov     edi,edit1
  1746.         mov     [edi+48],eax ;ed_size
  1747.         mov     [edi+52],eax ;ed_pos
  1748. ;--------------------------------------
  1749.         mov     eax,[file_browser_data_1.x]
  1750.         mov     ebx,eax
  1751.         shr     ebx,16
  1752.         and     eax,0xffff
  1753.         sub     eax,200
  1754.         mov     [edi],eax
  1755.         add     ebx,70
  1756.         mov     [edi+4],ebx
  1757.        
  1758.         mov     eax,[file_browser_data_1.y]
  1759.         mov     ebx,eax
  1760.         shr     ebx,16
  1761.         and     eax,0xffff
  1762.         add     eax,ebx
  1763.         add     eax,5
  1764.         mov     [edi+8],eax
  1765.        
  1766.         push    dword name_editboxes
  1767.         call    [edit_box_draw]
  1768.        
  1769.         mov     bx,[file_browser_data_1.start_x]
  1770.         add     bx,5
  1771.         shl     ebx,16
  1772.         mov     bx,[file_browser_data_1.start_y]
  1773.         add     bx,[file_browser_data_1.size_y]
  1774.         add     bx,9
  1775.         mov     ecx,[w_work_text]
  1776.         add     ecx,0x80000000
  1777.         mcall   4,,,message_file_name
  1778.         ret
  1779. ;---------------------------------------------------------------------
  1780. draw_dir_path:
  1781.         mov     eax,[file_browser_data_1.x]
  1782.         mov     ebx,eax
  1783.         shr     ebx,16
  1784.         add     ebx,3
  1785.         and     eax,0xffff
  1786.         sub     eax,5
  1787.        
  1788.         mov     [PathShow_data_1.area_size_x],ax
  1789.         mov     [PathShow_data_1.start_x],bx
  1790. ;--------------------------------------
  1791. ;; top line
  1792. ;       mov     ebx,[file_browser_data_1.x]
  1793. ;       mcall   13,,<7,1>,0x0
  1794. ; down line
  1795. ;       push    ebx ecx
  1796. ;       mcall   ,,<21,1>,
  1797. ;       pop     ecx ebx
  1798. ; left line    
  1799. ;       push    ebx
  1800. ;       mov     bx,1
  1801. ;       mov     cx,15
  1802. ;       mcall
  1803. ;       pop     ebx
  1804. ; right line
  1805. ;       mov     ax,bx
  1806. ;       shr     ebx,16
  1807. ;       add     bx,ax
  1808. ;       dec     ebx
  1809. ;       shl     ebx,16
  1810. ;       mov     bx,1
  1811. ;       mcall   13
  1812. ;--------------------------------------
  1813.         mov     ebx,[file_browser_data_1.x]
  1814.         sub     ebx,2
  1815.         add     ebx,1 shl 16
  1816.         mcall   13,,<8,13>,0xffffcc
  1817. ;--------------------------------------
  1818. ; prepare for PathShow
  1819.         push    dword PathShow_data_1
  1820.         call    [PathShow_prepare]
  1821.        
  1822. ; draw for PathShow
  1823.         push    dword PathShow_data_1
  1824.         call    [PathShow_draw]
  1825.        
  1826.         ret
  1827. ;---------------------------------------------------------------------
  1828. draw_draw_file_browser1:
  1829.         call    draw_dir_path
  1830.         cmp     [open_dialog_type],1
  1831.         jne     @f     
  1832.         call    draw_file_name
  1833. @@:
  1834.         xor     eax,eax
  1835.         inc     eax
  1836.         mov     [file_browser_data_1.all_redraw],eax
  1837.         mov     [scroll_bar_data_vertical.all_redraw],eax
  1838.        
  1839.         push    dword file_browser_data_1
  1840.         call    [FileBrowser_draw]
  1841.  
  1842.         call    draw_open_button_label
  1843.        
  1844.         call    prepare_scrollbar_data
  1845.  
  1846.         call    draw_scrollbar
  1847.  
  1848.         xor     eax,eax
  1849.         mov     [file_browser_data_1.all_redraw],eax
  1850.         mov     [scroll_bar_data_vertical.all_redraw],eax
  1851.         ret
  1852. ;---------------------------------------------------------------------
  1853. draw_draw_file_browser2:
  1854.         mov     eax,2
  1855.         mov     [file_browser_data_1.all_redraw],eax
  1856.  
  1857.         call    get_scrollbar_data
  1858.  
  1859.         push    dword file_browser_data_1
  1860.         call    [FileBrowser_draw]
  1861.  
  1862.         call    draw_open_button_label
  1863.  
  1864.         xor     eax,eax
  1865.         mov     [file_browser_data_1.all_redraw],eax
  1866.         ret
  1867. ;---------------------------------------------------------------------
  1868. draw_scrollbar1:
  1869.         mov     eax,[file_browser_data_1.start_draw_line]
  1870.         mov     [scroll_bar_data_vertical.position],eax
  1871.  
  1872.         call    draw_scrollbar
  1873.  
  1874.         ret
  1875. ;---------------------------------------------------------------------
  1876. draw_scrollbar:
  1877.         mov     eax,[scroll_bar_data_vertical.max_area]
  1878.         cmp     eax,[scroll_bar_data_vertical.cur_area]
  1879.         jbe     @f
  1880.         cmp     [scroll_bar_data_vertical.cur_area],0
  1881.         je      @f
  1882.         push    dword scroll_bar_data_vertical
  1883.         call    [scrollbar_ver_draw]
  1884. @@:
  1885.         ret
  1886. ;---------------------------------------------------------------------
  1887. get_scrollbar_data:
  1888.         mov     eax,[scroll_bar_data_vertical.position]
  1889.         mov     [file_browser_data_1.start_draw_line],eax
  1890.         ret
  1891. ;---------------------------------------------------------------------
  1892. prepare_scrollbar_data:
  1893.         mov     eax,[file_browser_data_1.folder_block]
  1894.         mov     [scroll_bar_data_vertical.max_area],eax
  1895.         mov     eax,[file_browser_data_1.max_panel_line]
  1896.         mov     [scroll_bar_data_vertical.cur_area],eax
  1897.         ret
  1898. ;---------------------------------------------------------------------
  1899. get_active_pocess:
  1900.         mcall   9,procinfo,-1
  1901.         mov     ecx,[ebx+30]    ; PID
  1902.         mcall   18,21
  1903.         mov     [active_process],eax    ; WINDOW SLOT
  1904.         mov     ebx,[communication_area]       
  1905.         test    ebx,ebx
  1906.         jz      .1
  1907.         mov     [ebx+12],eax    ; WINDOW SLOT to com. area
  1908. .1:
  1909.         ret
  1910. ;---------------------------------------------------------------------
  1911. get_window_param:
  1912.         mcall   9,procinfo,-1
  1913.         mov     eax,[ebx+66]
  1914.         inc     eax
  1915.         mov     [window_high],eax
  1916.         mov     eax,[ebx+62]
  1917.         inc     eax
  1918.         mov     [window_width],eax
  1919.         mov     eax,[ebx+70]
  1920.         mov     [window_status],eax
  1921.         ret
  1922. ;---------------------------------------------------------------------
  1923. convert_icons:
  1924.         xor     eax,eax
  1925.         mov     [return_code],eax
  1926. ;       mov     eax,image_file
  1927.         push    image_file
  1928.         call    [cnv_png_import.Start]
  1929.  
  1930.         mov     ecx,[image_file]
  1931.         mcall   68,13,
  1932.         test    eax,eax
  1933.         jz      memory_free_error
  1934.  
  1935.         cmp     [return_code],dword 0
  1936.         je      @f
  1937.         mov     [N_error],6
  1938.         jmp     button.exit
  1939. @@:
  1940.  
  1941.         mov     ebx,[raw_pointer]
  1942.         mov     eax,[ebx+4]
  1943. ; set of icon size x
  1944.         mov     [file_browser_data_1.icon_size_x],ax
  1945. ; mov eax,[ebx+8]
  1946. ; set of icon size y
  1947.         mov     [file_browser_data_1.icon_size_y],ax
  1948.         inc     ax
  1949.         mov     [file_browser_data_1.line_size_y],ax
  1950.         mov     eax,[ebx+12]
  1951. ; set of RAW resolution to pixel
  1952.         mov     [file_browser_data_1.resolution_raw],eax
  1953.  
  1954.         mov     eax,[ebx+20]
  1955.         add     eax,ebx
  1956. ; set RAW palette,use else resolution 8bit or less
  1957.         mov     [file_browser_data_1.palette_raw],eax
  1958.  
  1959.         mov     eax,[ebx+28]
  1960.         add     eax,ebx
  1961. ; set RAW area for icon
  1962.         mov     [file_browser_data_1.icon_raw_area],eax
  1963.         ret
  1964. ;---------------------------------------------------------------------
  1965. calc_ini:
  1966.         mov     eax,[image_file]
  1967.         mov     [file_browser_data_1.ini_file_start],eax
  1968.         add     eax,[img_size]
  1969.         mov     [file_browser_data_1.ini_file_end],eax
  1970.         ret
  1971. ;---------------------------------------------------------------------
  1972. load_ini:
  1973.         mov     edi,ini_file_name
  1974.  
  1975.         mov     [fileinfo.name],edi
  1976.         mov     [fileinfo.subfunction],dword 5
  1977.         mov     [fileinfo.size],dword 0
  1978.         mov     [fileinfo.return],dword file_info
  1979.         mcall   70,fileinfo
  1980.         test    eax,eax
  1981.         jnz     .error
  1982.  
  1983.         mov     [fileinfo.subfunction],dword 0
  1984.  
  1985.         mov     ecx,[file_info+32]
  1986.         mov     [fileinfo.size],ecx
  1987.         mov     [img_size],ecx
  1988.        
  1989.         mcall   68,12
  1990.         test    eax,eax
  1991.         jz      memory_get_error
  1992.  
  1993.         mov     [fileinfo.return],eax
  1994.         mov     [image_file],eax
  1995.  
  1996.         mcall   70,fileinfo
  1997.         test    eax,eax
  1998.         jnz     .error
  1999.         ret
  2000. .error:
  2001.         mov     [N_error],1
  2002.         mov     [error_type],eax
  2003.         jmp     button.exit
  2004. ;---------------------------------------------------------------------
  2005. load_icons:
  2006.         mov     ebx,icons_file_name_2
  2007.         mov     esi,path
  2008.         mov     edi,file_name
  2009.         call    copy_file_path
  2010.  
  2011.         mov     [fileinfo.subfunction],dword 5
  2012.         mov     [fileinfo.size],dword 0
  2013.         mov     [fileinfo.return],dword file_info
  2014.         mcall   70,fileinfo
  2015.         test    eax,eax
  2016.         jz      @f
  2017.        
  2018.         mov     edi,icons_path
  2019.  
  2020.         mov     [fileinfo.name],edi
  2021.         mov     [fileinfo.subfunction],dword 5
  2022.         mov     [fileinfo.size],dword 0
  2023.         mov     [fileinfo.return],dword file_info
  2024.         mcall   70,fileinfo
  2025.         test    eax,eax
  2026.         jnz     .error
  2027. @@:
  2028.         mov     [fileinfo.subfunction],dword 0
  2029.  
  2030.         mov     ecx,[file_info+32]
  2031.         mov     [fileinfo.size],ecx
  2032.         mov     [img_size],ecx
  2033.        
  2034.         mcall   68,12
  2035.         test    eax,eax
  2036.         jz      memory_get_error
  2037.  
  2038.         mov     [fileinfo.return],eax
  2039.         mov     [image_file],eax
  2040.  
  2041.         mcall   70,fileinfo
  2042.         test    eax,eax
  2043.         jnz     .error
  2044.         ret
  2045. .error:
  2046.         mov     [N_error],2
  2047.         mov     [error_type],eax
  2048.         jmp     button.exit
  2049. ;---------------------------------------------------------------------
  2050. sort_directory:
  2051.         mov     eax,[file_browser_data_1.folder_data]
  2052.         mov     ebx,[eax+4]     ; number of files
  2053.         add     eax,32
  2054.         cmp     [eax+40],word '..'
  2055.         jne     @f
  2056.         cmp     [eax+40+2],byte 0
  2057.         jne     @f
  2058.         dec     ebx
  2059.         add     eax,304
  2060. @@:
  2061.         push    dword [sort_type]       ; sort mode
  2062.         push    ebx     ; number of files
  2063.         push    eax     ; data files
  2064.         call    [sort_dir]
  2065.         ret
  2066. ;--------------------------------------------------------------------
  2067. load_directory:
  2068.         xor     eax,eax
  2069.         mov     [N_error],eax
  2070.         cmp     [file_browser_data_1.folder_data],eax
  2071.         je      @f
  2072.         mcall   68,13,[file_browser_data_1.folder_data]
  2073.         test    eax,eax
  2074.         jz      memory_free_error
  2075.  
  2076. @@:
  2077.         mov     [dirinfo.size],dword 0
  2078.         mov     [dirinfo.return],dir_header
  2079.         mcall   70,dirinfo
  2080.         test    eax,eax
  2081.         jz      @f
  2082. ;       mov     esi,previous_dir_path
  2083. ;       mov     edi,dir_path
  2084. ;       call    copy_dir_name.1
  2085. ;       mcall   70,dirinfo
  2086. ;       test    eax,eax
  2087. ;       jz      @f     
  2088.         xor     ebx,ebx
  2089.         mov     [file_browser_data_1.folder_data],ebx
  2090.         jmp     .error
  2091. @@:
  2092.        
  2093.         mov     ecx,[dir_header.totl_blocks]
  2094.         mov     [dirinfo.size],ecx
  2095.         imul    ecx,304
  2096.         add     ecx,32
  2097.         mcall   68,12
  2098.         test    eax,eax
  2099.         jz      memory_get_error
  2100.  
  2101.         mov     [dirinfo.return],eax
  2102.         mov     [file_browser_data_1.folder_data],eax
  2103.  
  2104.         mcall   70,dirinfo
  2105.         test    eax,eax
  2106.         jnz     .error
  2107.        
  2108. ; test for empty directory
  2109.         mov     eax,[dirinfo.return]
  2110.         mov     eax,[eax+4]
  2111.         test    eax,eax
  2112.         jz      @f
  2113.        
  2114.         call    delete_point_dir
  2115. ;       call    files_name_normalize
  2116.         call    check_filter
  2117.         call    prepare_extension_and_mark
  2118.         call    clear_data_fb_and_sb
  2119. @@:
  2120.         ret
  2121.  
  2122. .error:
  2123.         mov     [N_error],5
  2124.         mov     [error_type],eax
  2125.         ret
  2126. ;---------------------------------------------------------------------
  2127. clear_data_fb_and_sb:
  2128.         xor     eax,eax
  2129.         mov     [file_browser_data_1.start_draw_cursor_line],ax
  2130.         mov     [file_browser_data_1.start_draw_line],eax
  2131.         mov     [scroll_bar_data_vertical.position],eax
  2132.         ret
  2133. ;---------------------------------------------------------------------
  2134. check_filter:
  2135.         cmp [open_dialog_type],2        ; Select dir
  2136.         je      .1
  2137.         xor     eax,eax
  2138.         mov     al,[filter_flag]
  2139.         test    eax,eax
  2140.         jz      @f
  2141.  
  2142.         mov     eax,[communication_area]
  2143.         test    eax,eax
  2144.         jz      @f
  2145.         mov     eax,[eax+4096]
  2146.         test    eax,eax
  2147.         jz      @f
  2148. .1:
  2149.         call    delete_unsupported_BDFE
  2150. @@:
  2151.         ret
  2152. ;---------------------------------------------------------------------
  2153. delete_unsupported_BDFE:
  2154.         mov     ebx,[file_browser_data_1.folder_data]
  2155.         add     ebx,4
  2156.         xor     ecx,ecx
  2157.         dec     ecx
  2158.        
  2159.         mov     eax,[file_browser_data_1.folder_data]
  2160.         add     eax,32+40
  2161.         sub     eax,304
  2162. .start:
  2163.         inc     ecx
  2164.         add     eax,304
  2165. .1:
  2166.         cmp     [ebx],ecx
  2167.         je      .end
  2168.         cmp     [eax],byte '.'
  2169.         jne     @f
  2170.         cmp     [eax+1],byte 0
  2171.         je      .delete
  2172. @@:
  2173.         test    [eax-40],byte 0x10
  2174.         jnz     .start
  2175.        
  2176.         cmp     [open_dialog_type],2    ; Select dir
  2177.         je      .delete
  2178.        
  2179.         push    eax ebx
  2180.         mov     esi,eax
  2181.         call    search_expansion
  2182.         test    eax,eax
  2183.         pop     ebx eax
  2184.         jnz     .delete
  2185.        
  2186.         push    eax ebx ecx esi
  2187.         mov     edi,[communication_area]
  2188.         add     edi,4100
  2189.         call    compare_expansion
  2190.         test    eax,eax
  2191.         pop     esi ecx ebx eax
  2192.         jz      .start
  2193.        
  2194. ;-------------------------------------------
  2195. .delete:
  2196.         dec     dword [ebx]
  2197.         mov     esi,[ebx]
  2198.         sub     esi,ecx
  2199.  
  2200.         push    ecx
  2201.         mov     ecx,esi
  2202.         imul    ecx,304/4
  2203.         mov     edi,eax
  2204.         sub     edi,40
  2205.         mov     esi,edi
  2206.         add     esi,304
  2207.         cld
  2208.         rep     movsd
  2209.         pop     ecx
  2210.        
  2211.         jmp     .1
  2212. .end:
  2213.         ret
  2214. ;---------------------------------------------------------------------
  2215. search_expansion:
  2216.         mov     edi,esi
  2217.         xor     eax,eax
  2218. @@:
  2219.         cld
  2220.         lodsb
  2221.         test    eax,eax
  2222.         jnz     @b
  2223.         mov     ebx,esi
  2224.         dec     esi
  2225. @@:
  2226.         std
  2227.         lodsb
  2228.         cmp     esi,edi
  2229.         jb      .end_err
  2230.         cmp     al,'.'
  2231.         jne     @b
  2232.        
  2233.         add     esi,2
  2234.         sub     ebx,esi
  2235.         mov     [expansion_length],ebx
  2236.         cld
  2237.         xor     eax,eax
  2238.         ret
  2239.        
  2240. .end_err:
  2241.         cld
  2242.         xor     eax,eax
  2243.         inc     eax
  2244.         ret
  2245. ;---------------------------------------------------------------------
  2246. compare_expansion:
  2247.         mov     ebx,[edi]
  2248.         add     ebx,edi
  2249.         add     edi,3
  2250. .start:
  2251.         cmp     ebx,edi
  2252.         jb      .end_err
  2253.         mov     ecx,[expansion_length]
  2254.         inc     edi
  2255.        
  2256.         push    esi edi
  2257. @@:
  2258.         cld
  2259.         lodsb
  2260.         xchg    esi,edi
  2261.         shl     eax,8
  2262.         lodsb
  2263.         xchg    esi,edi
  2264.         call    char_todown
  2265.         xchg    al,ah
  2266.         call    char_todown
  2267.         cmp     al,ah
  2268.         jne     @f
  2269.         dec     ecx
  2270.         jnz     @b
  2271.         jmp     .end
  2272. @@:
  2273.         pop     edi esi
  2274.         jmp     .start
  2275. .end:
  2276.         pop     edi esi
  2277.         xor     eax,eax
  2278.         ret
  2279.        
  2280. .end_err:
  2281.         xor     eax,eax
  2282.         inc     eax
  2283.         ret
  2284. ;---------------------------------------------------------------------
  2285. prepare_extension_and_mark:
  2286.         mov     esi,[dirinfo.return]
  2287.         mov     ebp,[esi+4]
  2288.         test    ebp,ebp
  2289.         jz      .end
  2290.  
  2291.         add     esi,32+40
  2292. .start:
  2293.         push    esi
  2294.         call    search_extension_start
  2295.         mov     eax,esi
  2296.         pop     esi
  2297.         sub     eax,esi
  2298.         sub     ebx,esi
  2299.         shl     eax,16
  2300.         mov     ax,bx
  2301.         mov     [esi+300-40],eax
  2302.         mov     [esi+299-40],byte 0
  2303.         add     esi,304
  2304.         dec     ebp
  2305.         jnz     .start
  2306. .end:
  2307.         ret
  2308. ;---------------------------------------------------------------------
  2309. search_extension_start:
  2310.         mov     edx,esi
  2311.         xor     eax,eax
  2312.         cld
  2313. @@:
  2314.         lodsb
  2315.         test    eax,eax
  2316.         jnz     @b
  2317.         dec     esi
  2318.         dec     edx
  2319.         push    esi
  2320.         std
  2321. @@:
  2322.         lodsb
  2323.         cmp     esi,edx
  2324.         je      .end
  2325.         cmp     al,'.'
  2326.         jnz     @b
  2327.         add     esi,2
  2328.         cld
  2329.         pop     ebx
  2330.         ret
  2331. .end:
  2332.         cld
  2333.         pop     esi
  2334.         mov     ebx,esi
  2335.         ret
  2336. ;---------------------------------------------------------------------
  2337. delete_point_dir:
  2338.         mov     eax,[dirinfo.return]
  2339.         cmp     [eax+32+40],byte '.'
  2340.         jne     @f
  2341.         cmp     [eax+32+40+1],byte 0
  2342.         jne     @f
  2343.         mov     edi,eax
  2344.         add     edi,32
  2345.         mov     esi,edi
  2346.         add     esi,304
  2347.         mov     ecx,[eax+4]
  2348.         dec     ecx
  2349.         mov     [eax+4],ecx
  2350.         imul    ecx,304
  2351.         shr     ecx,2
  2352.         cld
  2353.         rep     movsd
  2354. @@:
  2355.         ret
  2356. ;---------------------------------------------------------------------
  2357. ;files_name_normalize:
  2358. ;       mov     esi,[dirinfo.return]
  2359. ;       mov     ebp,[esi+4]
  2360. ;       add     esi,32+40
  2361. ;.start:
  2362. ;       push    esi
  2363. ;       mov     al,[esi]
  2364. ;       call    char_toupper
  2365. ;       mov     [esi],al
  2366. ;@@:
  2367. ;       inc     esi
  2368. ;       mov     al,[esi]
  2369. ;       test    al,al
  2370. ;       jz      @f
  2371. ;       call    char_todown
  2372. ;       mov     [esi],al
  2373. ;       jmp     @b
  2374. ;@@:
  2375. ;       pop     esi
  2376. ;       add     esi,304
  2377. ;       dec     ebp
  2378. ;       jnz     .start
  2379. ;       ret
  2380. ;---------------------------------------------------------------------
  2381. char_toupper:
  2382. ; convert character to uppercase,using cp866 encoding
  2383. ; in: al=symbol
  2384. ; out: al=converted symbol
  2385.         cmp     al,'a'
  2386.         jb      .ret
  2387.         cmp     al,'z'
  2388.         jbe     .az
  2389.         cmp     al,'а'
  2390.         jb      .ret
  2391.         cmp     al,'р'
  2392.         jb      .rus1
  2393.         cmp     al,'я'
  2394.         ja      .ret
  2395. ; 0xE0-0xEF -> 0x90-0x9F
  2396.         sub     al,'р'-'Р'
  2397. .ret:
  2398.         ret
  2399. .rus1:
  2400. ; 0xA0-0xAF -> 0x80-0x8F
  2401. .az:
  2402.         and     al,not  0x20
  2403.         ret
  2404. ;---------------------------------------------------------------------
  2405. char_todown:
  2406. ; convert character to uppercase,using cp866 encoding
  2407. ; in: al=symbol
  2408. ; out: al=converted symbol
  2409.         cmp     al,'A'
  2410.         jb      .ret
  2411.         cmp     al,'Z'
  2412.         jbe     .az
  2413.         cmp     al,'А'
  2414.         jb      .ret
  2415.         cmp     al,'Р'
  2416.         jb      .rus1
  2417.         cmp     al,'Я'
  2418.         ja      .ret
  2419. ; 0x90-0x9F -> 0xE0-0xEF
  2420.         add     al,'р'-'Р'
  2421. .ret:
  2422.         ret
  2423. .rus1:
  2424. ; 0x80-0x8F -> 0xA0-0xAF
  2425. .az:
  2426.         add     al,0x20
  2427.         ret
  2428. ;---------------------------------------------------------------------
  2429. copy_file_path:
  2430.         xor     eax,eax
  2431.         cld
  2432. @@:
  2433.         lodsb
  2434.         stosb
  2435.         test    eax,eax
  2436.         jnz     @b
  2437.         mov     esi,edi
  2438.         dec     esi
  2439.         std
  2440. @@:
  2441.         lodsb
  2442.         cmp     al,'/'
  2443.         jnz     @b
  2444.         mov     edi,esi
  2445.         add     edi,2
  2446.         mov     esi,ebx
  2447.         cld
  2448. @@:
  2449.         lodsb
  2450.         stosb
  2451.         test    eax,eax
  2452.         jnz     @b
  2453.         ret
  2454. ;---------------------------------------------------------------------
  2455. copy_dir_path:
  2456.         mov     ecx,esi
  2457.         inc     ecx
  2458.         inc     ecx
  2459.         xor     eax,eax
  2460.         cld
  2461. @@:
  2462.         lodsb
  2463.         test    eax,eax
  2464.         jnz     @b
  2465.  
  2466.         cmp     ecx,esi
  2467.         jb      @f
  2468.         dec     esi
  2469. @@:
  2470.         mov     [esi-1],byte '/'
  2471.         mov     edi,esi
  2472.         mov     esi,ebx
  2473. @@:
  2474.         lodsb
  2475.         stosb
  2476.         test    eax,eax
  2477.         jnz     @b
  2478.         ret
  2479. ;---------------------------------------------------------------------
  2480. copy_exit_dir:
  2481.         mov     ebx,esi
  2482.         inc     ebx
  2483.         xor     eax,eax
  2484.         cld
  2485. @@:
  2486.         lodsb
  2487.         test    eax,eax
  2488.         jnz     @b
  2489.         sub     esi,2
  2490.         std
  2491. @@:
  2492.         lodsb
  2493.         cmp     al,'/'
  2494.         jnz     @b
  2495.         xor     eax,eax
  2496.         cmp     ebx,esi
  2497.         jb      @f
  2498.         inc     esi
  2499. @@:
  2500.         mov     [esi+1],al
  2501.         cld
  2502.         ret
  2503. ;---------------------------------------------------------------------
  2504. copy_dir_name:
  2505.         push    esi edi
  2506.         mov     esi,edi
  2507.         mov     edi,previous_dir_path
  2508.         call    .1
  2509.         pop     edi esi
  2510. .1:
  2511.         xor     eax,eax
  2512.         cmp     [esi],al
  2513.         je      .exit
  2514.         cld
  2515. @@:
  2516.         lodsb
  2517.         stosb
  2518.         test    eax,eax
  2519.         jnz     @b
  2520. .exit:
  2521.         ret
  2522. ;---------------------------------------------------------------------
  2523. ;---------------------------------------------------------------------
  2524.  
  2525. ;plugins_directory      db 'plugins/',0
  2526. plugins_directory       db 0
  2527.  
  2528. system_dir_Boxlib       db '/sys/lib/box_lib.obj',0
  2529. system_dir_CnvPNG       db '/sys/lib/cnv_png.obj',0
  2530. system_dir_Sort         db '/sys/lib/sort.obj',0
  2531. system_dir_UNPACK       db '/sys/lib/archiver.obj',0
  2532.  
  2533. ihead_f_i:
  2534. ihead_f_l       db 'System      error',0
  2535.  
  2536. er_message_found_lib    db 'box_lib.obj - Not found!',0
  2537. er_message_import       db 'box_lib.obj - Wrong import!',0
  2538.  
  2539. er_message_found_lib2   db 'cnv_png.obj - Not found!',0
  2540. er_message_import2      db 'cnv_png.obj - Wrong import!',0
  2541.  
  2542. err_message_found_lib3  db 'sort.obj - Not found!',0
  2543. err_message_import3     db 'sort.obj - Wrong import!',0
  2544.  
  2545. err_message_found_lib4  db 'archiver.obj - Not found!',0
  2546. err_message_import4     db 'archiver.obj - Wrong import!',0
  2547.  
  2548. align   4
  2549. l_libs_start:
  2550. library01       l_libs  system_dir_Boxlib+9,path,file_name,system_dir_Boxlib,\
  2551. er_message_found_lib,ihead_f_l,Box_lib_import,er_message_import,ihead_f_i,plugins_directory
  2552.  
  2553. library02       l_libs  system_dir_CnvPNG+9,path,file_name,system_dir_CnvPNG,\
  2554. er_message_found_lib2,ihead_f_l,cnv_png_import,er_message_import2,ihead_f_i,plugins_directory
  2555.  
  2556. library03       l_libs  system_dir_Sort+9,path,file_name,system_dir_Sort,\
  2557. err_message_found_lib3,ihead_f_l,Sort_import,err_message_import3,ihead_f_i,plugins_directory
  2558.  
  2559. library04       l_libs  system_dir_UNPACK+9,path,file_name,system_dir_UNPACK,\
  2560. err_message_found_lib4,ihead_f_l,UNPACK_import,err_message_import4,ihead_f_i,plugins_directory
  2561.  
  2562. end_l_libs:
  2563.  
  2564. ;---------------------------------------------------------------------
  2565. align   4
  2566. UNPACK_import:
  2567. ;unpack_Version                 dd aUnpack_Version
  2568. ;unpack_PluginLoad              dd aUnpack_PluginLoad  
  2569. ;unpack_OpenFilePlugin          dd aUnpack_OpenFilePlugin
  2570. ;unpack_ClosePlugin             dd aUnpack_ClosePlugin
  2571. ;unpack_ReadFolder              dd aUnpack_ReadFolder  
  2572. ;unpack_SetFolder               dd aUnpack_SetFolder
  2573. ;unpack_GetFiles                dd aUnpack_GetFiles
  2574. ;unpack_GetOpenPluginInfo       dd aUnpack_GetOpenPluginInfo
  2575. ;unpack_Getattr                 dd aUnpack_Getattr
  2576. ;unpack_Open                    dd aUnpack_Open
  2577. ;unpack_Read                    dd aUnpack_Read
  2578. ;unpack_Setpos                  dd aUnpack_Setpos
  2579. ;unpack_Close                   dd aUnpack_Close
  2580. ;unpack_DeflateUnpack           dd aUnpack_DeflateUnpack
  2581. unpack_DeflateUnpack2           dd aUnpack_DeflateUnpack2
  2582.         dd 0
  2583.         dd 0
  2584.  
  2585. ;aUnpack_Version                db 'version',0
  2586. ;aUnpack_PluginLoad             db 'plugin_load',0
  2587. ;aUnpack_OpenFilePlugin         db 'OpenFilePlugin',0
  2588. ;aUnpack_ClosePlugin            db 'ClosePlugin',0
  2589. ;aUnpack_ReadFolder             db 'ReadFolder',0
  2590. ;aUnpack_SetFolder              db 'SetFolder',0
  2591. ;aUnpack_GetFiles               db 'GetFiles',0
  2592. ;aUnpack_GetOpenPluginInfo      db 'GetOpenPluginInfo',0
  2593. ;aUnpack_Getattr                db 'getattr',0
  2594. ;aUnpack_Open                   db 'open',0
  2595. ;aUnpack_Read                   db 'read',0
  2596. ;aUnpack_Setpos                 db 'setpos',0
  2597. ;aUnpack_Close                  db 'close',0
  2598. ;aUnpack_DeflateUnpack          db 'deflate_unpack',0
  2599. aUnpack_DeflateUnpack2          db 'deflate_unpack2',0
  2600.  
  2601. ;---------------------------------------------------------------------
  2602. ;---------------------------------------------------------------------
  2603. align   4
  2604. Sort_import:
  2605. sort_init       dd aSort_init
  2606. sort_version    dd aSort_version
  2607. sort_dir        dd aSort_SortDir
  2608. sort_strcmpi    dd aSort_strcmpi
  2609.         dd 0
  2610.         dd 0
  2611.  
  2612. aSort_init      db 'START',0
  2613. aSort_version   db 'version',0
  2614. aSort_SortDir   db 'SortDir',0
  2615. aSort_strcmpi   db 'strcmpi',0
  2616.  
  2617. ;---------------------------------------------------------------------
  2618. align   4
  2619. cnv_png_import:
  2620. .Start          dd aCP_Start
  2621. .Version        dd aCP_Version
  2622. .Check          dd aCP_Check
  2623. .Assoc          dd aCP_Assoc
  2624.         dd 0
  2625.         dd 0
  2626. aCP_Start       db 'START',0
  2627. aCP_Version     db 'version',0
  2628. aCP_Check       db 'Check_Header',0
  2629. aCP_Assoc       db 'Associations',0
  2630. ;---------------------------------------------------------------------
  2631. align   4
  2632. Box_lib_import:
  2633. ;init_lib       dd a_init
  2634. ;version_lib    dd a_version
  2635.  
  2636.  
  2637. edit_box_draw           dd aEdit_box_draw
  2638. edit_box_key            dd aEdit_box_key
  2639. edit_box_mouse          dd aEdit_box_mouse
  2640. ;version_ed             dd aVersion_ed
  2641.  
  2642. ;check_box_draw dd aCheck_box_draw
  2643. ;check_box_mouse        dd aCheck_box_mouse
  2644. ;version_ch             dd aVersion_ch
  2645.  
  2646. ;option_box_draw        dd aOption_box_draw
  2647. ;option_box_mouse       dd aOption_box_mouse
  2648. ;version_op             dd aVersion_op
  2649.  
  2650. scrollbar_ver_draw      dd aScrollbar_ver_draw
  2651. scrollbar_ver_mouse     dd aScrollbar_ver_mouse
  2652. ;scrollbar_hor_draw     dd aScrollbar_hor_draw
  2653. ;scrollbar_hor_mouse    dd aScrollbar_hor_mouse
  2654. ;version_scrollbar      dd aVersion_scrollbar
  2655.  
  2656. ;dinamic_button_draw    dd aDbutton_draw
  2657. ;dinamic_button_mouse   dd aDbutton_mouse
  2658. ;version_dbutton        dd aVersion_dbutton
  2659.  
  2660. menu_bar_draw           dd aMenu_bar_draw
  2661. menu_bar_mouse          dd aMenu_bar_mouse
  2662. menu_bar_activate       dd aMenu_bar_activate
  2663. ;version_menu_bar       dd aVersion_menu_bar
  2664.  
  2665. FileBrowser_draw        dd aFileBrowser_draw
  2666. FileBrowser_mouse       dd aFileBrowser_mouse
  2667. FileBrowser_key         dd aFileBrowser_key
  2668. ;Version_FileBrowser    dd aVersion_FileBrowser
  2669.  
  2670. PathShow_prepare        dd sz_PathShow_prepare
  2671. PathShow_draw           dd sz_PathShow_draw
  2672. ;Version_path_show      dd szVersion_path_show
  2673.         dd 0
  2674.         dd 0
  2675.  
  2676. ;a_init                 db 'lib_init',0
  2677. ;a_version              db 'version',0
  2678.  
  2679. aEdit_box_draw          db 'edit_box',0
  2680. aEdit_box_key           db 'edit_box_key',0
  2681. aEdit_box_mouse         db 'edit_box_mouse',0
  2682. ;aVersion_ed            db 'version_ed',0
  2683.  
  2684. ;aCheck_box_draw        db 'check_box_draw',0
  2685. ;aCheck_box_mouse       db 'check_box_mouse',0
  2686. ;aVersion_ch            db 'version_ch',0
  2687.  
  2688. ;aOption_box_draw       db 'option_box_draw',0
  2689. ;aOption_box_mouse      db 'option_box_mouse',0
  2690. ;aVersion_op            db 'version_op',0
  2691.  
  2692. aScrollbar_ver_draw     db 'scrollbar_v_draw',0
  2693. aScrollbar_ver_mouse    db 'scrollbar_v_mouse',0
  2694. ;aScrollbar_hor_draw    db 'scrollbar_h_draw',0
  2695. ;aScrollbar_hor_mouse   db 'scrollbar_h_mouse',0
  2696. ;aVersion_scrollbar     db 'version_scrollbar',0
  2697.  
  2698. ;aDbutton_draw          db 'dbutton_draw',0
  2699. ;aDbutton_mouse         db 'dbutton_mouse',0
  2700. ;aVersion_dbutton       db 'version_dbutton',0
  2701.  
  2702. aMenu_bar_draw          db 'menu_bar_draw',0
  2703. aMenu_bar_mouse         db 'menu_bar_mouse',0
  2704. aMenu_bar_activate      db 'menu_bar_activate',0
  2705. ;aVersion_menu_bar      db 'version_menu_bar',0
  2706.  
  2707. aFileBrowser_draw       db 'FileBrowser_draw',0
  2708. aFileBrowser_mouse      db 'FileBrowser_mouse',0
  2709. aFileBrowser_key        db 'FileBrowser_key',0
  2710. ;aVersion_FileBrowser   db 'version_FileBrowser',0
  2711.  
  2712. sz_PathShow_prepare     db 'PathShow_prepare',0
  2713. sz_PathShow_draw        db 'PathShow_draw',0
  2714. ;szVersion_path_show    db 'version_PathShow',0
  2715. ;---------------------------------------------------------------------
  2716. ;---------------------------------------------------------------------
  2717. align   4
  2718. window_high                     dd 0
  2719. window_width                    dd 0
  2720. window_status                   dd 0
  2721.  
  2722. active_process                  dd 0
  2723. PID                             dd 0
  2724. sort_type                       dd 2
  2725. root_folder_area                dd 0
  2726. root_folder_block               dd 0
  2727. root1_folder_area               dd 0
  2728. root1_folder_block              dd 0
  2729. temp_counter_1                  dd 0
  2730. retrieved_devices_table_counter dd 0
  2731. communication_area              dd 0
  2732. open_dialog_type                dd 0
  2733.  
  2734. open_dialog_title_pointer:
  2735.         dd title_0
  2736.         dd title_1
  2737.         dd title_2
  2738.         dd 0
  2739.        
  2740. message_open_dialog_button:
  2741.         dd message_0
  2742.         dd message_1
  2743.         dd message_2
  2744.         dd 0
  2745. ;---------------------------------------------------------------------
  2746. expansion_length        dd 0
  2747. ;---------------------------------------------------------------------
  2748. N_error                 dd 0
  2749. error_type              dd 0
  2750. error_path              dd 0
  2751. error_window_x:         dd 100 shl 16+250
  2752. error_window_y:         dd 100 shl 16+120
  2753. ;---------------------------------------------------------------------
  2754. mouse_scroll_data:
  2755. .vertical       dw 0
  2756. .horizontal     dw 0
  2757.  
  2758. mouse_position:
  2759. .y      dw 0
  2760. .x      dw 0
  2761. ;---------------------------------------------------------------------
  2762. ; not   change  this    section!!!
  2763. ; start section
  2764. ;---------------------------------------------------------------------
  2765. align   4
  2766. image_file      dd 0
  2767. raw_pointer     dd 0
  2768. return_code     dd 0
  2769. img_size        dd 0
  2770. deflate_unpack  dd 0
  2771. raw_pointer_2   dd 0    ;+20
  2772. ;---------------------------------------------------------------------
  2773. ; end   section
  2774. ;---------------------------------------------------------------------
  2775. align   4
  2776. fileinfo:
  2777. .subfunction    dd 5
  2778. .Offset         dd 0
  2779. .Offset_1       dd 0
  2780. .size           dd 0
  2781. .return         dd file_info
  2782.                 db 0
  2783. .name:          dd file_name
  2784. ;---------------------------------------------------------------------
  2785. align   4
  2786. dirinfo:
  2787. .subfunction    dd 1
  2788. .start          dd 0
  2789. .flags          dd 0
  2790. .size           dd 0
  2791. .return         dd 0
  2792.                 db 0
  2793. .name:          dd dir_path
  2794. ;---------------------------------------------------------------------
  2795. align   4
  2796. dir_header:
  2797. .version        dd 0    ;+0
  2798. .curn_blocks    dd 0    ;+4
  2799. .totl_blocks    dd 0    ;+8
  2800. .other  rb      20
  2801. ;---------------------------------------------------------------------
  2802. load_ini_error_type:
  2803.         db 'Error loading INI file',0
  2804.  
  2805. load_icons_error_type:
  2806.         db 'Error loading of icons file',0
  2807.  
  2808. memory_free_error_type:
  2809.         db 'Error of free memory',0
  2810.  
  2811. memory_get_error_type:
  2812.         db 'Memory allocation error',0
  2813.  
  2814. load_directory_error_type:
  2815.         db 'Error loading directory',0
  2816.  
  2817. convert_icons_error_type:
  2818.         db 'Unsupported or corrupt data for icons file',0
  2819. ;---------------------------------------------------------------------
  2820. error_help_text:
  2821.         db 'For continue press <Esc> key or <Cancel>',0
  2822. ;---------------------------------------------------------------------
  2823. align   4
  2824. error_fs_text_pointers:
  2825.         dd error_fs_text_0
  2826.         dd error_fs_text_1
  2827.         dd error_fs_text_2
  2828.         dd error_fs_text_3
  2829.         dd error_fs_text_4
  2830.         dd error_fs_text_5
  2831.         dd error_fs_text_6
  2832.         dd error_fs_text_7
  2833.         dd error_fs_text_8
  2834.         dd error_fs_text_9
  2835.         dd error_fs_text_10
  2836.         dd error_fs_text_11
  2837.  
  2838. error_fs_text_0:        db '0 - Success full',0
  2839. error_fs_text_1:        db '1 - Base and/or partition of a hard disk is not defined',0
  2840. error_fs_text_2:        db '2 - Function is not supported for the given file system',0
  2841. error_fs_text_3:        db '3 - Unknown file system',0
  2842. error_fs_text_4:        db '4 - Reserved, is never returned in the current implementation',0
  2843. error_fs_text_5:        db '5 - File not found',0
  2844. error_fs_text_6:        db '6 - End of file, EOF',0
  2845. error_fs_text_7:        db '7 - Pointer lies outside of application memory',0
  2846. error_fs_text_8:        db '8 - Disk is full',0
  2847. error_fs_text_9:        db '9 - FAT table is destroyed',0
  2848. error_fs_text_10: