Subversion Repositories Kolibri OS

Rev

Rev 9587 | 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 '../../KOSfuncs.inc'
  85. include '../../load_lib.mac'
  86. include '../../develop/libraries/box_lib/trunk/box_lib.mac'
  87. ;include 'macros.inc'
  88. ;include 'load_lib.mac'
  89. ;include 'box_lib.mac'
  90. @use_library
  91.  
  92. x_minimal_size equ 350
  93. y_minimal_size equ 250
  94. ;---------------------------------------------------------------------
  95. ;---------------------------------------------------------------------
  96. START:
  97.         mcall   68,11
  98.         mcall   66,1,1
  99.         mcall   40,0x27
  100.         call    get_communication_area
  101.        
  102.         call    get_active_pocess
  103.  
  104. load_libraries  l_libs_start,end_l_libs
  105.         test    eax,eax
  106.         jnz     button.exit
  107. ; initialize sort
  108.         push    dword 1
  109.         call    dword [sort_init]
  110. ; unpack deflate
  111.         mov     eax,[unpack_DeflateUnpack2]
  112.         mov     [deflate_unpack],eax
  113.  
  114.         mov     esi,start_pach
  115.         mov     edi,previous_dir_path
  116.         call    copy_dir_name.1
  117.        
  118.         call    load_root_directory
  119.         call    load_start_directory
  120.         call    sort_directory
  121.         call    load_icons
  122.         call    convert_icons
  123.         call    load_ini
  124.         call    calc_ini
  125.         jmp     red_1
  126. ;---------------------------------------------------------------------
  127. red:
  128.         call    control_minimal_window_size
  129. red_1:
  130.         call    draw_window
  131. ;---------------------------------------------------------------------
  132. still:
  133.         mcall   10
  134.         cmp     eax,1
  135.         je      red
  136.         cmp     eax,2
  137.         je      key
  138.         cmp     eax,3
  139.         je      button
  140.         cmp     eax,6
  141.         je      mouse
  142.         jmp     still
  143. ;---------------------------------------------------------------------
  144. control_minimal_window_size:
  145.         pusha
  146.         call    get_window_param
  147.         test    [window_status],10b
  148.         jnz     .end    ;red_1
  149.         test    [window_status],100b
  150.         jnz     .end    ;red_1
  151.         test    [window_status],1b
  152.         jnz     .end    ;red_1
  153.         mov     esi,-1
  154.         mov     eax,procinfo
  155.         mov     eax,[eax+46]
  156.         cmp     eax,dword y_minimal_size ;200
  157.         jae     @f
  158.         mov     esi,dword y_minimal_size ;200
  159.         mcall   67,-1,ebx,ebx
  160. @@:
  161.         mov     edx,-1
  162.         mov     eax,procinfo
  163.         mov     eax,[eax+42]
  164.         cmp     eax,dword x_minimal_size ;300
  165.         jae     @f
  166.         mov     edx,dword x_minimal_size ;300
  167.         mcall   67,-1,ebx,,ebx
  168. @@:
  169. .end:
  170.         popa
  171.         ret
  172. ;---------------------------------------------------------------------
  173. key:
  174.         mov     al,[focus_pointer]
  175.         test    al,al
  176.         jne     key_ASCII
  177.         mcall   2
  178.         xor     ebx,ebx
  179.         cmp     [extended_key],1
  180.         je      .extended_key
  181.         test    al,al
  182.         jnz     still
  183.         cmp     ah,0xE0
  184.         jne     @f
  185.         mov     [extended_key],1
  186.         jmp     still
  187. @@:
  188.         cmp     ah,72   ; arrow up
  189.         je      .2
  190.         cmp     ah,80   ; arrow down
  191.         je      .1
  192.         cmp     ah,28   ; Enter
  193.         je      .7
  194.         cmp     ah,1    ; Esc
  195.         je      button.exit
  196.         cmp     ah,14   ; Backspace
  197.         je      button.exit_dir
  198.         cmp     ah,187  ; F1
  199.         je      select_disk
  200.         cmp     ah,188  ; F2
  201.         je      select_sort
  202.         cmp     ah,189  ; F3
  203.         je      select_filter
  204.         cmp     ah,19   ; R
  205.         je      button.reload_dir
  206.         cmp     ah,42
  207.         je      key_shift_up
  208.         cmp     ah,54
  209.         je      key_shift_up
  210.         cmp     ah,170
  211.         je      key_shift_down
  212.         cmp     ah,182
  213.         je      key_shift_down
  214.         cmp     ah,29
  215.         je      key_ctrl_up
  216.         cmp     ah,157
  217.         je      key_ctrl_down
  218.         cmp     ah,56
  219.         je      key_alt_up
  220.         cmp     ah,184
  221.         je      key_alt_down
  222.         cmp     ah,206  ; NumPad+ Up
  223.         je      NumPad_plus_Up
  224.         cmp     ah,202  ; NumPad- Up
  225.         je      NumPad_minus_Up
  226.         cmp     ah,183  ; NumPad* Up
  227.         je      NumPad_invert_Up
  228.         cmp     ah,158
  229.         je      symbol_a_up
  230.         cmp     ah,15   ; Tab down
  231.         je      change_focus_area_press_Tab_key
  232.         cmp     ah,143  ; Tab up
  233.         je      change_focus_area_check_Tab_key
  234. ; compare for "1,2,3,4,5,6,7,8,9,0,(-),(=)"
  235.         cmp     ah,2
  236.         jb      still
  237.         cmp     ah,13
  238.         jbe     .12
  239. ; compare for "q,w,e,r,t,y,u,i,o,p,([),(])"    
  240.         cmp     ah,16
  241.         jb      still
  242.         cmp     ah,27
  243.         jbe     .12
  244. ; compare for "a,s,d,f,g,h,j,k,l,(;),('),(`)"  
  245.         cmp     ah,30
  246.         jb      still
  247.         cmp     ah,41
  248.         jbe     .12
  249. ; compare for "(\),z,x,c,v,b,n,m,(,),(.),(/)"  
  250.         cmp     ah,43
  251.         jb      still
  252.         cmp     ah,53
  253.         jbe     .12    
  254.         jmp     still
  255. .extended_key:
  256.         mov     [extended_key],0
  257.         cmp     ah,80   ; arrow down
  258.         je      .1
  259.         cmp     ah,72   ; arrow up
  260.         je      .2
  261.         cmp     ah,81   ; PageDown
  262.         je      .3
  263.         cmp     ah,73   ; PageUp
  264.         je      .4
  265.         cmp     ah,71   ; Home
  266.         je      .5
  267.         cmp     ah,79   ; End
  268.         je      .6
  269.         cmp     ah,28   ; Enter
  270.         je      .7
  271.         cmp     ah,82   ; Insert
  272.         je      .8
  273.        
  274.         cmp     ah,29
  275.         je      key_ctrl_up
  276.         cmp     ah,157
  277.         je      key_ctrl_down
  278.         cmp     ah,56
  279.         je      key_alt_up
  280.         cmp     ah,184
  281.         je      key_alt_down
  282.         jmp     still
  283. ;---------------------------------
  284. .12:
  285.         inc     ebx     ; 12 - Search with key
  286. ;---------------------------------
  287. .11:
  288.         inc     ebx     ; 11 - Invert Mark
  289. ;---------------------------------
  290. .10:
  291.         inc     ebx     ; 10 - Unmark All
  292. ;---------------------------------
  293. .9:
  294.         inc     ebx     ; 9 - Mark All
  295. ;---------------------------------
  296. .8:
  297.         inc     ebx     ; 8 - Insert (Mark)
  298. ;---------------------------------
  299. .7:
  300.         inc     ebx     ; 7 - Enter
  301. ;---------------------------------
  302. .6:
  303.         inc     ebx     ; 6 - End
  304. ;---------------------------------
  305. .5:
  306.         inc     ebx     ; 5 - Home
  307. ;---------------------------------
  308. .4:
  309.         inc     ebx     ; 4 - PageUp
  310. ;---------------------------------
  311. .3:
  312.         inc     ebx     ; 3 - PageDown
  313. ;---------------------------------
  314. .2:
  315.         inc     ebx     ; 2 - arrow up
  316. ;---------------------------------
  317. .1:
  318.         inc     ebx     ; 1 - arrow down
  319. ;---------------------------------
  320.         call    .key_action
  321.        
  322. ;       movzx   ecx,word [file_browser_data_1.start_draw_cursor_line]
  323. ;       mcall   47,0x80000,,<50,0>,0x40000000,0xffffff
  324. ;       movzx   ecx,word [file_browser_data_1.size_y]
  325. ;       mcall   47,0x80000,,<150,0>,0x40000000,0xffffff
  326.  
  327.         mov     eax,file_browser_data_1.mouse_keys_delta
  328.         cmp     [eax],dword 3
  329.         jne     still
  330.         xor     ebx,ebx
  331.         mov     [eax],ebx
  332.         call    load_next_dir
  333.         jmp     still
  334. ;-------------------------------------------------------
  335. .key_action:
  336.         mov     [file_browser_data_1.key_action],bx
  337.         shr     ax,8
  338.         mov     [file_browser_data_1.key_action_num],ax
  339.  
  340.         push    dword file_browser_data_1
  341.         call    [FileBrowser_key]
  342.  
  343.         call    draw_open_button_label
  344.  
  345.         cmp     [file_browser_data_1.draw_scroll_bar],0
  346.         je      @f
  347.         call    draw_scrollbar1
  348.         mov     [file_browser_data_1.draw_scroll_bar],0
  349. @@:
  350.         ret
  351. ;---------------------------------------------------------------------
  352. change_focus_area_Tab_key_ASCII:
  353.         xor     eax,eax
  354.         inc     eax
  355.         mov     [Tab_key_block],al
  356.         jmp     change_focus_area
  357. ;---------------------------------------------------------------------
  358. change_focus_area_press_Tab_key:
  359.         cmp     [open_dialog_type],1
  360.         jne     still
  361.         mov     al,[Tab_key_block]
  362.         test    al,al
  363.         jnz     still
  364.         xor     eax,eax
  365.         inc     eax
  366.         mov     [Tab_key],al
  367.         jmp     still
  368. ;---------------------------------------------------------------------
  369. change_focus_area_check_Tab_key:
  370.         cmp     [open_dialog_type],1
  371.         jne     still
  372.         xor     eax,eax
  373.         mov     [Tab_key_block],al
  374.         mov     al,[Tab_key]
  375.         test    al,al
  376.         jz      still
  377.         xor     eax,eax
  378.         mov     [Tab_key],al
  379. ;---------------------------------------------------------------------
  380. change_focus_area:
  381.         mov     al,[focus_pointer]
  382.         inc     al
  383.         and     al,1
  384.         mov     [focus_pointer],al
  385. .1:
  386.         mov     edi,edit1
  387.         test    al,al
  388.         jne     @f
  389.         mov     [file_browser_data_1.select_panel_counter],1
  390.         and     [edi+44],dword 0xFFFFFFFD       ; ed_focus
  391.         mov     [edi+12],dword 0xffffff ; color white
  392.         call    draw_draw_file_browser1
  393.         mcall   66,1,1
  394.         jmp     still
  395. @@:
  396.         mov     [file_browser_data_1.select_panel_counter],0
  397.         or      [edi+44],dword ed_focus
  398.         mov     [edi+12],dword 0xffffb0 ; color yellow
  399.         call    draw_draw_file_browser1
  400.         mcall   66,1,0
  401.         jmp     still
  402. ;---------------------------------------------------------------------
  403. key_ASCII:
  404.         mcall   2
  405.         cmp     ah,9
  406.         je      change_focus_area_Tab_key_ASCII
  407.         cmp     ah,13
  408.         je      .13
  409.         cmp     ah,27
  410.         je      button.exit
  411.         push    dword name_editboxes
  412.         call    [edit_box_key]
  413.         jmp     still
  414. .13:
  415. ;       cmp [open_dialog_type],2        ; Select dir
  416. ;       je      file_no_folder
  417. ;       cmp     [open_dialog_type],1    ; Save file
  418. ;       jne     user_selected_name_action       ; load_dir
  419. ;       inc     [open_dialog_type]
  420.         jmp     file_no_folder
  421. ;.load_dir:
  422. ;       mov     [file_browser_data_1.select_panel_counter],1
  423. ;       xor     eax,eax
  424. ;       mov     [focus_pointer],al
  425. ;       mcall   66,1,1
  426.  
  427. ;       xor     eax,eax
  428. ;       mov     esi,dir_path
  429. ;       cld
  430. ;@@:
  431. ;       lodsb
  432. ;       test    al,al
  433. ;       jne     @r
  434. ;       sub     esi,2
  435. ;       cmp     [esi],byte '/'
  436. ;       jne     @f
  437. ;       xor     eax,eax
  438. ;       mov     [esi],al
  439. ;@@:
  440. ;       call    load_next_dir.1
  441. ;       jmp     still
  442. ;---------------------------------------------------------------------
  443. user_selected_name_action:
  444.         mov     eax,[communication_area]
  445.         test    eax,eax
  446.         jnz     @f
  447.         call    control_minimal_window_size
  448.         call    draw_window
  449.         ret
  450. @@:
  451.         add     eax,16  ;12
  452. ;copy_path      user_selected_name,dir_path,eax,0
  453.         mov     esi,dir_path
  454.         mov     edi,eax
  455.         call    copy_dir_name
  456.         mov     [edi-1],byte '/'
  457.         mov     esi,user_selected_name
  458.         call    copy_dir_name
  459.        
  460.         mov     eax,[communication_area]
  461.         mov     [eax],word 1
  462.         jmp     button.exit
  463. ;--------------------------------------------------------------------- 
  464. select_disk:
  465.         call    check_alt
  466. .1:
  467.         call    load_root_directory
  468.         xor     eax,eax
  469.         mov     [menu_data_1.ret_key],eax
  470.  
  471.         push    dword menu_data_1
  472.         call    [menu_bar_activate]
  473.  
  474.         call    clear_control_key_flag
  475.  
  476.         mov     eax,[menu_data_1.ret_key]
  477.         mov     [menu_data_1.ret_key],dword 0
  478.         cmp     eax,1
  479.         je      select_filter.1
  480.  
  481.         cmp     eax,2
  482.         je      select_sort.1
  483.  
  484.         cmp     [menu_data_1.click],dword 1
  485.         jne     still
  486.  
  487.         cmp     [menu_data_1.cursor_out],dword 0
  488.         jne     analyse_out_menu_1
  489.         jmp     still
  490. ;---------------------------------------------------------------------
  491. select_sort:
  492.         call    check_alt
  493. .1:
  494.         xor     eax,eax
  495.         mov     [menu_data_2.ret_key],eax
  496.  
  497.         push    dword menu_data_2
  498.         call    [menu_bar_activate]
  499.  
  500.         call    clear_control_key_flag
  501.  
  502.         mov     eax,[menu_data_2.ret_key]
  503.         mov     [menu_data_2.ret_key],dword 0
  504.         cmp     eax,1
  505.         je      select_disk.1
  506.  
  507.         cmp     eax,2
  508.         je      select_filter.1
  509.  
  510.  
  511.         cmp     [menu_data_2.click],dword 1
  512.         jne     still
  513.  
  514.         cmp     [menu_data_2.cursor_out],dword 0
  515.         jne     analyse_out_menu_2
  516.         jmp     still
  517. ;---------------------------------------------------------------------
  518. select_filter:
  519.         call    check_alt
  520. .1:
  521.         xor     eax,eax
  522.         mov     [menu_data_3.ret_key],eax
  523.  
  524.         push    dword menu_data_3
  525.         call    [menu_bar_activate]
  526.  
  527.         call    clear_control_key_flag
  528.  
  529.         mov     eax,[menu_data_3.ret_key]
  530.         mov     [menu_data_3.ret_key],dword 0
  531.         cmp     eax,1
  532.         je      select_sort.1
  533.  
  534.         cmp     eax,2
  535.         je      select_disk.1
  536.  
  537.  
  538.         cmp     [menu_data_3.click],dword 1
  539.         jne     still
  540.  
  541.         cmp     [menu_data_3.cursor_out],dword 0
  542.         jne     analyse_out_menu_3
  543.         jmp     still
  544. ;---------------------------------------------------------------------
  545. symbol_a_up:
  546. NumPad_plus_Up:
  547.         call    check_ctrl
  548.         jmp     key.9
  549. ;---------------------------------------
  550. NumPad_minus_Up:
  551.         call    check_ctrl
  552.         jmp     key.10
  553. ;---------------------------------------
  554. NumPad_invert_Up:
  555.         call    check_ctrl
  556.         jmp     key.11
  557. ;---------------------------------------       
  558. check_alt:
  559.         xor     eax,eax
  560.         mov     al,[alt_flag]
  561.         test    eax,eax
  562.         jz      @f
  563.         xor     ebx,ebx
  564.         ret
  565. @@:
  566.         add     esp,4
  567.         jmp     still
  568. ;---------------------------------------       
  569. check_ctrl:
  570.         xor     eax,eax
  571.         mov     al,[ctrl_flag]
  572.         test    eax,eax
  573.         jz      @f
  574.         xor     ebx,ebx
  575.         ret
  576. @@:
  577.         add     esp,4
  578.         jmp     still
  579. ;---------------------------------------------------------------------
  580. clear_control_key_flag:
  581.         xor     eax,eax
  582.         mov     [shift_flag],al
  583.         mov     [ctrl_flag],al
  584.         mov     [alt_flag],al
  585.         ret
  586. ;---------------------------------------------------------------------
  587. key_shift_up:
  588.         mov     [shift_flag],1
  589.         jmp     still
  590. ;---------------------------------------------------------------------
  591. key_shift_down:
  592.         mov     [shift_flag],0
  593.         jmp     still
  594. ;---------------------------------------------------------------------
  595. key_ctrl_up:
  596.         mov     [ctrl_flag],1
  597.         jmp     still
  598. ;---------------------------------------------------------------------
  599. key_ctrl_down:
  600.         mov     [ctrl_flag],0
  601.         jmp     still
  602. ;---------------------------------------------------------------------
  603. key_alt_up:
  604.         mov     [alt_flag],1
  605.         jmp     still
  606. ;---------------------------------------------------------------------
  607. key_alt_down:
  608.         mov     [alt_flag],0
  609.         jmp     still
  610. ;---------------------------------------------------------------------
  611. button:
  612.         mcall   17
  613.         cmp     ah,6
  614.         je      .reload_dir_1
  615.         cmp     ah,4
  616.         je      .open_dir_or_file
  617.         cmp     ah,3
  618.         je      .exit
  619.         cmp     ah,2
  620.         je      .exit_dir
  621.         cmp     ah,1
  622.         jne     still
  623. .exit:
  624.         mov     eax,[communication_area]
  625.         test    eax,eax
  626.         jz      @f
  627.         cmp     [eax],word 1
  628.         je      @f
  629.         mov     [eax],word 3
  630. @@:
  631.         mov     eax,[N_error]
  632.         test    eax,eax
  633.         jz      @f
  634.         call    start_error_window_thread
  635. @@:
  636.         call    get_window_param
  637.         mov     ebx,[communication_area]
  638.         mov     ecx,procinfo
  639. ;       mov     eax,[window_x]
  640.         mov     eax,[ecx+34]
  641.         shl     eax,16
  642.         add     eax,[ecx+42]
  643.         mov     [ebx+4],eax
  644. ;       mov     eax,[window_y]
  645.         mov     eax,[ecx+38]
  646.         shl     eax,16
  647.         add     eax,[ecx+46]
  648.         mov     [ebx+8],eax
  649.  
  650.         mcall   -1
  651. ;---------------------------------------------------------------------
  652. .reload_dir:
  653.         cmp     [ctrl_flag],bl
  654.         je      key.12 ; Just symbol 'R' or 'r'
  655. .reload_dir_1:
  656.         call    load_next_dir.1
  657.         jmp     still
  658. ;---------------------------------------------------------------------
  659. .exit_dir:
  660.         call    load_next_dir.exit_dir
  661.         jmp     still
  662. ;---------------------------------------------------------------------
  663. .open_dir_or_file:
  664.         cmp     [open_dialog_type],0    ;Open file
  665.         jne     @f
  666.  
  667.         mov     eax,[file_browser_data_1.folder_data]
  668.         mov     eax,[eax+4]
  669.         test    eax,eax
  670.         jz      button.exit
  671. @@:
  672.         cmp     [open_dialog_type],2    ;Select dir
  673.         je      file_no_folder
  674.        
  675.         cmp     [open_dialog_type],1    ;Save file
  676.         jne     @f
  677.  
  678.         mov     al,[focus_pointer]
  679.         test    al,al
  680.         jne     file_no_folder 
  681. @@:
  682.         xor     ebx,ebx
  683.         jmp     key.7
  684. ;---------------------------------------------------------------------
  685. thread_start:
  686.         mov     eax,[N_error]
  687.         cmp     al,1
  688.         jne     @f
  689.         mov     [N_error],load_ini_error_type
  690.         mov     [error_path],file_name
  691.         jmp     .error_type
  692. @@:
  693.         cmp     al,2
  694.         jne     @f
  695.         mov     [N_error],load_icons_error_type
  696.         mov     [error_path],file_name
  697.         jmp     .error_type
  698. @@:
  699.         cmp     al,3
  700.         jne     @f
  701.         mov     [N_error],memory_free_error_type
  702.         xor     eax,eax
  703.         mov     [error_path],eax
  704.         mov     [error_type],eax
  705.         jmp     .red
  706. @@:
  707.         cmp     al,4
  708.         jne     @f
  709.         mov     [N_error],memory_get_error_type
  710.         xor     eax,eax
  711.         mov     [error_path],eax
  712.         mov     [error_type],eax
  713.         jmp     .red
  714. @@:
  715.         cmp     al,5
  716.         jne     @f
  717.         mov     [N_error],load_directory_error_type
  718.         mov     [error_path],dir_path
  719.         jmp     .error_type
  720. @@:
  721.         cmp     al,6
  722.         jne     .button
  723.         mov     [N_error],convert_icons_error_type
  724.         mov     [error_path],file_name
  725.         xor     eax,eax
  726.         mov     [error_type],eax
  727.         jmp     .red
  728. .error_type:
  729.         mov     eax,[error_type]
  730.         shl     eax,2
  731.         add     eax,error_fs_text_pointers
  732.         mov     eax,[eax]
  733.         mov     [error_type],eax
  734. .red:
  735.         call    draw_error_window
  736. .still:
  737.         mcall   10
  738.         cmp     eax,1
  739.         je      .red
  740.         cmp     eax,2
  741.         je      .key
  742.         cmp     eax,3
  743.         je      .button
  744.         jmp     .still
  745. .key:
  746.         mcall   2
  747.         jmp     .still
  748. .button:
  749.         mcall   -1
  750.         jmp     .still
  751. ;---------------------------------------------------------------------
  752. draw_error_window:
  753.         mcall   12,1
  754.         mcall   0,[error_window_x],[error_window_y],0x03ff0000
  755.         call    type_title
  756.         mcall   4,<10,30>,0x90ffffff,[N_error]
  757.         mov     eax,[error_path]
  758.         test    eax,eax
  759.         jz      @f
  760.         mcall   4,<10,50>,,[error_path]
  761. @@:
  762.         mov     eax,[error_type]
  763.         test    eax,eax
  764.         jz      @f
  765.         mcall   4,<10,70>,,[error_type]
  766. @@:
  767.         mcall   12,2
  768.         ret
  769. ;---------------------------------------------------------------------
  770. start_error_window_thread:
  771.         mcall   9,procinfo,-1
  772.         mov     eax,[ebx+46]
  773.         shr     eax,1
  774.         add     eax,[ebx+38]
  775.         sub     eax,40
  776.         mov     [error_window_y+2],ax
  777.         mov     eax,[ebx+42]
  778.         shr     eax,1
  779.         add     eax,[ebx+34]
  780.         sub     eax,125
  781.         mov     [error_window_x+2],ax
  782.         mcall   51,1,thread_start,thread_stack
  783.         ret
  784. ;---------------------------------------------------------------------
  785. mouse:
  786.         mcall   18,7
  787.         cmp     [active_process],eax
  788.         jne     still
  789.  
  790.         mcall   37,7
  791.         mov     [mouse_scroll_data],eax
  792.  
  793.         mcall   37,1
  794.         mov     [mouse_position],eax
  795.  
  796.         cmp     [scroll_bar_data_vertical.delta2],0
  797.         jne     .scrollbar
  798.  
  799.         mov     [file_browser_data_1.select_flag],0
  800.  
  801.         push    dword file_browser_data_1
  802.         call    [FileBrowser_mouse]
  803.  
  804.         call    draw_open_button_label
  805.  
  806.         mov     eax,file_browser_data_1.mouse_keys_delta
  807.         cmp     [eax],dword 3
  808.         jne     .check_focus    ; scrollbar
  809.         mov     [eax],dword 0
  810.         call    load_next_dir
  811.         jmp     still
  812. ;---------------------------------------------------
  813. .check_focus:
  814.         mov     ebx,[file_browser_data_1.select_flag]
  815.         test    ebx,ebx
  816.         jz      .scrollbar      ;@f
  817.         mov     al,[focus_pointer]
  818.         test    al,al
  819.         jz      .scrollbar
  820.         xor     eax,eax
  821.         mov     [focus_pointer],al
  822.         jmp     change_focus_area.1
  823. ;---------------------------------------------------
  824. .scrollbar:
  825.         mov     eax,[scroll_bar_data_vertical.max_area]
  826.         cmp     eax,[scroll_bar_data_vertical.cur_area]
  827.         jbe     .menu_bar       ;still
  828.        
  829.         push    dword scroll_bar_data_vertical
  830.         call    [scrollbar_ver_mouse]
  831.        
  832.         cmp     [scroll_bar_data_vertical.redraw],0
  833.         je      .menu_bar       ;still
  834.         mov     [scroll_bar_data_vertical.redraw],0
  835. .draw:
  836.         call    draw_draw_file_browser2
  837.         jmp     still
  838.  
  839. ;---------------------------------------------------
  840. .menu_bar:
  841.         cmp     [scroll_bar_data_vertical.delta2],0
  842.         jne     still
  843.  
  844. .menu_bar_1:
  845.         call    .set_mouse_flag
  846. @@:
  847.         push    dword menu_data_1
  848.         call    [menu_bar_mouse]
  849.  
  850.         cmp     [menu_data_1.click],dword 1
  851.         jne     .menu_bar_2
  852.  
  853.         cmp     [menu_data_1.cursor_out],dword 0
  854.         jne     select_disk.1   ;analyse_out_menu_1
  855.         jmp     .menu_bar_1
  856. ;--------------------------------------------
  857. .menu_bar_2:
  858.         push    dword menu_data_2
  859.         call    [menu_bar_mouse]
  860.  
  861.         cmp     [menu_data_2.click],dword 1
  862.         jne     .menu_bar_3
  863.  
  864.         cmp     [menu_data_2.cursor_out],dword 0
  865.         jne     analyse_out_menu_2
  866.         jmp     .menu_bar_1
  867. ;---------------------------------------------------
  868. .menu_bar_3:
  869.         push    dword menu_data_3
  870.         call    [menu_bar_mouse]
  871.  
  872.         cmp     [menu_data_3.click],dword 1
  873.         jne     .check_editboxes
  874.  
  875.         cmp     [menu_data_3.cursor_out],dword 0
  876.         jne     analyse_out_menu_3
  877.         jmp     .menu_bar_1
  878. ;---------------------------------------------------
  879. .check_editboxes:
  880.         cmp     [open_dialog_type],1
  881.         jne     .check_scroll_event
  882.         mov     eax,[edit1+44]
  883.         and     eax,10b
  884.         push    dword name_editboxes
  885.         call    [edit_box_mouse]
  886.         mov     ebx,[edit1+44]
  887.         and     ebx,10b
  888.         cmp     eax,ebx
  889.         je      .check_scroll_event
  890.         mov     al,[focus_pointer]
  891.         test    al,al
  892.         jnz     .check_scroll_event
  893.         xor     eax,eax
  894.         test    ebx,10b
  895.         jz      @f
  896.         inc     eax
  897. @@:
  898.         mov     [focus_pointer],al
  899.         jmp     change_focus_area.1
  900. ;---------------------------------------------------
  901. .check_scroll_event:
  902.         mov     eax,[mouse_position]
  903.         xor     ebx,ebx
  904.         mov     bx,ax   ; EBX mouse y
  905.         shr     eax,16  ; EAX mouse x
  906.        
  907.         mov     cx,[file_browser_data_1.start_x]
  908.         mov     dx,[file_browser_data_1.start_y]
  909.  
  910.         cmp     ax,cx
  911.         jb      .mouse_next     ; min x
  912.  
  913.         cmp     bx,dx
  914.         jb      .mouse_next     ; min y
  915.  
  916.         add     cx,[file_browser_data_1.size_x]
  917.         cmp     ax,cx  
  918.         ja      .mouse_next     ; max x
  919.  
  920.         add     dx,[file_browser_data_1.size_y]
  921.         cmp     bx,dx
  922.         ja      .mouse_next     ; max y
  923.  
  924.         xor     ecx,ecx
  925.         xor     ebx,ebx
  926.         mov     eax,[mouse_scroll_data]
  927.         test    eax,eax
  928.         jz      .mouse_next
  929.         test    ax,0x8000
  930.         jnz     .decr
  931.         shr     eax,16
  932.         test    ax,0x8000
  933.         jnz     .decr_1
  934.  
  935.         mov     cx,[mouse_scroll_data.vertical]
  936.         test    ecx,ecx
  937.         jnz     @f
  938.         mov     cx,[mouse_scroll_data.horizontal]
  939.         test    ecx,ecx
  940.         jz      .mouse_next
  941. @@:
  942.         mov     ebx,1
  943. @@:
  944.         push    ebx ecx
  945.         call    key.key_action
  946.         pop     ecx ebx
  947.         dec     ecx
  948.         jnz     @r
  949.         jmp     still
  950. ;----------------------------------------
  951. .decr:
  952.         mov     bx,[mouse_scroll_data.vertical]
  953.         jmp     @f
  954. .decr_1:
  955.         mov     bx,[mouse_scroll_data.horizontal]
  956. @@:
  957.         mov     ecx,0xffff
  958.         sub     ecx,ebx
  959.         inc     ecx
  960.         mov     ebx,2
  961. @@:
  962.         push    ebx ecx
  963.         call    key.key_action
  964.         pop     ecx ebx
  965.         dec     ecx
  966.         jnz     @r
  967.         jmp     still
  968. ;---------------------------------------------------
  969. .mouse_next:
  970.         jmp     still
  971. ;---------------------------------------------------------------------
  972. .set_mouse_flag:
  973.         xor     eax,eax
  974.         inc     eax
  975.         mov     [menu_data_1.get_mouse_flag],eax
  976.         mov     [menu_data_2.get_mouse_flag],eax
  977.         ret
  978. ;---------------------------------------------------------------------
  979. analyse_out_menu_1:
  980. ; Available disks
  981.         mov     eax,[menu_data_1.cursor_out]
  982.         dec     eax
  983.         imul    esi,eax,10
  984.         add     esi,retrieved_devices_table
  985.         mov     edi,dir_path
  986.         call    copy_dir_name
  987.         call    load_next_dir.1
  988.         jmp     still
  989. ;---------------------------------------------------------------------
  990. analyse_out_menu_2:
  991. ; Sort
  992.         mov     eax,[menu_data_2.cursor_out]
  993.         xor     ebx,ebx
  994.         cmp     eax,dword 1
  995.         je      .1
  996.         cmp     eax,dword 2
  997.         je      .2
  998.         cmp     eax,dword 3
  999.         je      .3
  1000.         cmp     eax,dword 4
  1001.         je      .4
  1002.         jmp     still
  1003. .4:
  1004.         add     ebx,2
  1005. .3:
  1006.         add     ebx,2
  1007. .2:
  1008.         add     ebx,2
  1009. .1:
  1010.         mov     [sort_type],ebx
  1011.         call    sort_directory
  1012.         call    draw_draw_file_browser1
  1013.         jmp     still
  1014. ;---------------------------------------------------------------------
  1015. analyse_out_menu_3:
  1016. ; Filter
  1017.         mov     eax,[menu_data_3.cursor_out]
  1018.         cmp     eax,dword 1
  1019.         jne     @f
  1020.         mov     [filter_flag],0
  1021.         call    load_next_dir.1
  1022.         jmp     still
  1023. @@:
  1024.         cmp     eax,dword 2
  1025.         jne     still
  1026.         mov     [filter_flag],1
  1027.         call    load_next_dir.1
  1028.         jmp     still  
  1029. ;---------------------------------------------------------------------
  1030. get_communication_area:
  1031.         xor     eax,eax
  1032.         mov     al,[param]
  1033.         test    eax,eax
  1034.         jz      .exit
  1035.         mcall   68,22,param,,0x01
  1036.         mov     [communication_area],eax
  1037.         movzx   ebx,word [eax+2]
  1038.         mov     [open_dialog_type],ebx
  1039.         cmp     ebx,1
  1040.         jne     @f
  1041.         pushad
  1042.         mov     [focus_pointer],bl
  1043.         mov     edi,edit1
  1044.         mov     [file_browser_data_1.select_panel_counter],0
  1045.         or      [edi+44],dword ed_focus
  1046.         mov     [edi+12],dword 0xffffb0 ; color yellow
  1047.         mcall   66,1,0
  1048.         popad
  1049. @@:
  1050.         mov     ebx,[eax+4]
  1051.         cmp     bx,word x_minimal_size ;300
  1052.         jb      @f
  1053.         mov     [window_x],ebx
  1054.         mov     ebx,[eax+8]
  1055.         cmp     bx,word y_minimal_size ;200
  1056.         jb      @f
  1057.         mov     [window_y],ebx
  1058. .exit:
  1059.         ret
  1060. ;---------------------------------------------------------------------
  1061. load_start_directory:
  1062.         mov     eax,[communication_area]       
  1063.         test    eax,eax
  1064.         jz      .1
  1065.         movzx   ebx,word [eax]
  1066.         test    eax,eax
  1067.         jz      .1
  1068.         add     eax,16  ;12 ;4
  1069.         mov     esi,eax
  1070.         push    esi
  1071.         mov     esi,[communication_area]
  1072.         add     esi,3840 ;4096-256
  1073.         mov     eax,[esi]
  1074.         test    al,al
  1075.         jnz     @f
  1076.         mov     esi,example_name_temp
  1077. @@:
  1078.         mov     edi,user_selected_name
  1079.         call    copy_dir_name
  1080.         pop     esi
  1081.         jmp     .2
  1082. .1:
  1083.         mov     esi,start_pach
  1084. .2:
  1085.         mov     edi,dir_path
  1086.         call    copy_dir_name
  1087.        
  1088. ;       call    load_directory
  1089. ;       mov     eax,[N_error]
  1090. ;       test    eax,eax
  1091. ;       jnz     button.exit
  1092. .3:
  1093.         call    load_directory
  1094.         mov     eax,[N_error]
  1095.         test    eax,eax
  1096.         jz      @f
  1097.         call    error_handler
  1098.         jmp     .3
  1099. @@:
  1100.         ret
  1101. ;---------------------------------------------------------------------
  1102. load_next_dir:
  1103.         mov     ebx,[file_browser_data_1.folder_block]
  1104.         test    ebx,ebx
  1105.         jz      .exit
  1106.  
  1107.         mov     ebx,[file_browser_data_1.selected_BDVK_adress]
  1108.         add     ebx,40
  1109.         test    [ebx-40],byte 0x10
  1110.         jz      file_no_folder
  1111.         cmp     [ebx],word '..'
  1112.         jne     @f
  1113.         cmp     [ebx+2],byte 0
  1114.         je      .exit_dir
  1115. @@:
  1116.         mov     esi,dir_path
  1117.         call    copy_dir_path
  1118.  
  1119. @@:
  1120. .1:
  1121.         call    load_directory
  1122.         mov     eax,[N_error]
  1123.         test    eax,eax
  1124.         jz      @f
  1125.         call    error_handler
  1126.         jmp     .1
  1127. @@:
  1128.         call    sort_directory
  1129.  
  1130.         mov     ebx,[scroll_bar_data_vertical.x]
  1131.         inc     ebx
  1132.         mov     ecx,[scroll_bar_data_vertical.y]
  1133.         inc     ecx
  1134.         mcall   13,,,0xcccccc
  1135.         mov     edi,edit1
  1136.         xor     eax,eax
  1137.         mov     [edi+44],eax
  1138.         mov     [edi+12],dword 0xffffff ; color white
  1139.         call    draw_draw_file_browser1
  1140. .exit:
  1141.         ret
  1142. .exit_dir:
  1143.         mov     esi,dir_path
  1144.         call    copy_exit_dir
  1145.         jmp     .1
  1146. ;---------------------------------------------------------------------
  1147. error_handler:
  1148.         mcall   66,2
  1149.         mov     [error_handler_store_input_mode],eax
  1150.         mcall   66,1,1
  1151. .red:
  1152.         call    .draw_window
  1153. ;------------------------------------
  1154. .still:
  1155.         mcall   10
  1156.         cmp     eax,1
  1157.         je      .red
  1158.         cmp     eax,2
  1159.         je      .key
  1160.         cmp     eax,3
  1161.         je      .button
  1162.         jmp     .still
  1163. ;------------------------------------
  1164. .draw_window:
  1165.         xor     eax,eax
  1166.         inc     eax
  1167.         mov     [error_window],al
  1168.         call    control_minimal_window_size
  1169.         call    draw_window
  1170.         xor     eax,eax
  1171.         mov     [error_window],al
  1172.         ret
  1173. ;------------------------------------
  1174. .key:
  1175.         mcall   2
  1176.         xor     ebx,ebx
  1177.         cmp     [extended_key],1
  1178.         je      .extended_key
  1179.         test    al,al
  1180.         jnz     .still
  1181.         cmp     ah,0xE0
  1182.         jne     @f
  1183.         mov     [extended_key],1
  1184.         jmp     .still
  1185. @@:
  1186.         cmp     ah,129  ; Esc
  1187.         je      .exit
  1188.         jmp     .still
  1189. .extended_key:
  1190.         jmp     .still
  1191. ;------------------------------------
  1192. .button:
  1193.         mcall   17
  1194.         cmp     ah,5
  1195.         je      .exit
  1196.         cmp     ah,1
  1197.         jne     .still
  1198.         xor     eax,eax
  1199.         mov     [N_error],eax
  1200.         jmp     button.exit
  1201. ;------------------------------------
  1202. .exit:
  1203.         cmp     [open_dialog_type],1
  1204.         jne     @f
  1205.  
  1206.         mov     esi,root_pach
  1207.         mov     edi,dir_path
  1208.         call    copy_dir_name.1
  1209.         mov     esi,root_pach
  1210.         mov     edi,previous_dir_path
  1211.         call    copy_dir_name.1
  1212.         jmp     .restore_input_mode
  1213. @@:
  1214.         mov     esi,previous_dir_path
  1215.         mov     edi,dir_path
  1216.         call    copy_dir_name.1
  1217.         mov     esi,start_pach
  1218.         mov     edi,previous_dir_path
  1219.         call    copy_dir_name.1
  1220. .restore_input_mode:
  1221.         mcall   66,1,[error_handler_store_input_mode]
  1222.         ret
  1223. ;---------------------------------------------------------------------
  1224. file_no_folder:
  1225.         mov     esi,dir_path
  1226.         mov     edi,file_name
  1227.         call    copy_dir_name
  1228.         push    ebx
  1229.         mov     al,[focus_pointer]
  1230.         test    al,al
  1231.         je      @f
  1232.         mov     ebx,user_selected_name
  1233.         xor     eax,eax
  1234.         cmp     [ebx],al
  1235.         je      .exit
  1236. @@:
  1237.         cmp     [open_dialog_type],2
  1238.         je      @f
  1239.         mov     esi,file_name
  1240.         call    copy_dir_path
  1241. @@:
  1242.         mov     eax,[communication_area]
  1243.         test    eax,eax
  1244.         jnz     @f
  1245.         call    control_minimal_window_size
  1246.         call    draw_window
  1247.         pop     ebx
  1248.         ret
  1249. @@:
  1250.         mov     edi,eax
  1251.         add     edi,16  ;12
  1252.         mov     esi,file_name  
  1253.         call    copy_dir_name
  1254.        
  1255.         pop     esi
  1256.         mov     al,[focus_pointer]
  1257.         test    al,al
  1258.         jz      @f
  1259.         mov     esi,user_selected_name
  1260. @@:
  1261.         xor     eax,eax
  1262.         cmp     [esi],al
  1263.         je      .exit
  1264.         mov     edi,[communication_area]
  1265.         add     edi,3840 ;4096-256
  1266.         call    copy_dir_name
  1267. .exit:
  1268.         mov     eax,[communication_area]
  1269.         mov     [eax],word 1
  1270.         jmp     button.exit
  1271. ;---------------------------------------------------------------------
  1272. load_root_directory:
  1273.         mov     [dirinfo.name],dword dir_path_temp
  1274.         mov     eax,[dirinfo.return]
  1275.         push    eax
  1276.         mov     eax,[file_browser_data_1.folder_data]
  1277.         push    eax
  1278.         xor     eax,eax
  1279.         mov     [dirinfo.return],eax
  1280.         mov     [file_browser_data_1.folder_data],eax
  1281.         mov     esi,root_pach
  1282.         mov     edi,dir_path_temp
  1283.         call    copy_dir_name
  1284.         call    load_directory
  1285.         mov     eax,[N_error]
  1286.         test    eax,eax
  1287.         jnz     button.exit
  1288.  
  1289.         mov     eax,[dirinfo.return]
  1290.         mov     [root_folder_area],eax
  1291.         mov     eax,[eax+4]
  1292.         mov     [root_folder_block],eax
  1293.  
  1294.         xor     eax,eax
  1295.         mov     [dirinfo.return],eax
  1296.         mov     [file_browser_data_1.folder_data],eax
  1297.         mov     [temp_counter_1],eax    ;0
  1298.  
  1299.         mov     [retrieved_devices_table_counter],eax   ;0
  1300. .start_temp_counter_1:
  1301.         imul    esi,[temp_counter_1],304
  1302.         add     esi,[root_folder_area]
  1303.         add     esi,32+40
  1304.         mov     edi,dir_path_temp+1
  1305.         mov     [edi-1],byte '/'
  1306.         call    copy_dir_name
  1307.         call    load_directory
  1308.         mov     eax,[N_error]
  1309.         test    eax,eax
  1310.         jnz     button.exit
  1311.  
  1312.         mov     eax,[dirinfo.return]
  1313.         mov     [root1_folder_area],eax
  1314.         mov     eax,[eax+4]
  1315.         test    eax,eax
  1316.         jz      .continue
  1317.         mov     [root1_folder_block],eax
  1318.        
  1319.         mov     ebp,0
  1320. .start_copy_device_patch:
  1321.         imul    edi,[retrieved_devices_table_counter],10
  1322.         add     edi,retrieved_devices_table
  1323.         mov     [edi],byte '/'
  1324.         inc     edi
  1325.         imul    esi,[temp_counter_1],304
  1326.         add     esi,[root_folder_area]
  1327.         add     esi,32+40
  1328.  
  1329.         call    copy_dir_name
  1330.  
  1331.         imul    esi,ebp,304
  1332.         add     esi,[root1_folder_area]
  1333.         add     esi,32+40
  1334.         mov     [edi-1],byte '/'
  1335.  
  1336.         call    copy_dir_name
  1337.  
  1338.         inc     [retrieved_devices_table_counter]
  1339.         inc     ebp
  1340.         cmp     ebp,[root1_folder_block]
  1341.         jb      .start_copy_device_patch
  1342. .continue:
  1343.         inc     [temp_counter_1]
  1344.         mov     eax,[temp_counter_1]
  1345.         cmp     eax,[root_folder_block]
  1346.         jb      .start_temp_counter_1
  1347.  
  1348.         cmp     [root_folder_area],dword 0
  1349.         je      @f
  1350.         mcall   68,13,[root_folder_area]
  1351.         test    eax,eax
  1352.         jz      memory_free_error
  1353. @@:
  1354.  
  1355.         xor     ecx,ecx
  1356.         mov     edi,menu_text_area_1_1  ;.1
  1357. @@:
  1358.         imul    esi,ecx,10
  1359.         add     esi,retrieved_devices_table
  1360.         call    copy_dir_name
  1361.         inc     ecx
  1362.         cmp     ecx,[retrieved_devices_table_counter]
  1363.         jb      @b
  1364.         mov     [menu_data_1.text_end],edi
  1365.         xor     eax,eax
  1366.         mov     [edi],eax
  1367.         pop     eax
  1368.         mov     [file_browser_data_1.folder_data],eax
  1369.         pop     eax
  1370.         mov     [dirinfo.return],eax
  1371.         mov     [dirinfo.name],dword dir_path
  1372.         ret
  1373. ;---------------------------------------------------------------------
  1374. memory_free_error:
  1375.         mov     [N_error],3
  1376.         jmp     button.exit
  1377. ;---------------------------------------------------------------------
  1378. memory_get_error:
  1379.         mov     [N_error],4
  1380.         jmp     button.exit
  1381. ;---------------------------------------------------------------------
  1382. type_title:
  1383.         mov     ecx,[open_dialog_type]
  1384.         shl     ecx,2
  1385.         add     ecx,open_dialog_title_pointer
  1386.         mov     ecx,[ecx]
  1387.         test    ecx,ecx
  1388.         jz      @f
  1389.         mcall   71,1,; title ;;param ;file_name ;dir_path
  1390. @@:
  1391.         ret
  1392. ;---------------------------------------------------------------------
  1393. draw_window:
  1394.  
  1395.         mcall   12,1
  1396.         call    prepare_system_colors
  1397.         xor     esi,esi
  1398.         mcall   0,[window_x],[window_y],0x63AABBCC
  1399.         call    type_title
  1400.         call    get_window_param
  1401.         mov     eax,[procinfo+70] ;status of window
  1402.         test    eax,100b
  1403.         jne     .end
  1404.  
  1405.         mov     eax,[window_high]
  1406.         sub     eax,25+45
  1407.         mov     [file_browser_data_1.size_y],ax
  1408.         mov     [scroll_bar_data_vertical.size_y],ax
  1409.         mov     eax,[window_width]
  1410.         sub     eax,10+20
  1411.         mov     [file_browser_data_1.size_x],ax
  1412.         add     ax,10
  1413.         mov     [scroll_bar_data_vertical.start_x],ax
  1414.         mov     edx,[w_work]    ; color of work area RRGGBB,8->color
  1415.         or      edx,0x63000000
  1416.         mcall   13,[window_width],45    ;,0xcccccc
  1417.  
  1418.         push    ecx
  1419.         rol     ecx,16
  1420.         add     cx,[file_browser_data_1.size_y]
  1421.         add     cx,45
  1422.         ror     ecx,16
  1423.         mov     cx,25
  1424.         mcall
  1425.         pop     ecx
  1426.         add     ecx,45 shl 16
  1427.         mov     cx,[file_browser_data_1.size_y]
  1428.         mov     bx,10
  1429.         mcall
  1430.         mov     bx,[file_browser_data_1.size_x]
  1431.         add     bx,10
  1432.         shl     ebx,16
  1433.         mov     bx,20
  1434.         mcall
  1435.  
  1436.         cmp     [error_window],0
  1437.         je      @f
  1438.         call    draw_for_fs_errors
  1439.         jmp     .1
  1440. @@:
  1441.         mov     [do_not_draw_open_button_label],1
  1442.         call    draw_draw_file_browser1
  1443.         mov     [do_not_draw_open_button_label],0
  1444. .1:
  1445.         push    dword menu_data_1
  1446.         call    [menu_bar_draw]
  1447.         push    dword menu_data_2
  1448.         call    [menu_bar_draw]
  1449.         push    dword menu_data_3
  1450.         call    [menu_bar_draw]
  1451.  
  1452.         mov     ebx,[file_browser_data_1.x]
  1453.         mov     ax,bx
  1454.         shl     eax,16
  1455.         add     ebx,eax
  1456.         mov     eax,50
  1457.         mov     bx,ax
  1458.         shl     eax,16
  1459.         sub     ebx,eax
  1460.         mov     ecx,25 shl 16 + 16
  1461.         mcall   8,,,2,[w_work_button]   ;0xffffff
  1462.  
  1463.         pusha
  1464.         shr     ecx,16
  1465.         mov     bx,cx
  1466.         add     ebx,21 shl 16
  1467.         mov     ecx,[w_work_button_text]
  1468.         or      ecx,0x90000000
  1469.         mcall   4,,,message_ExitDir_button
  1470.         add     ebx,4
  1471.         mcall
  1472.         add     ebx,4
  1473.         mcall
  1474.         popa
  1475.  
  1476.         push    ebx
  1477.         sub     ebx,70 shl 16
  1478.         mov     bx,60
  1479.         mcall   8,,,6
  1480.  
  1481.         shr     ecx,16
  1482.         mov     bx,cx
  1483.         add     ebx,2 shl 16
  1484.         mov     ecx,[w_work_button_text]
  1485.         or      ecx,0x90000000
  1486.         mcall   4,,,message_ReloadDir_button
  1487.         pop     ebx
  1488.  
  1489.         mov     ebx,[file_browser_data_1.x]
  1490.         mov     ax,bx
  1491.         shl     eax,16
  1492.         add     ebx,eax
  1493.         mov     eax,55
  1494.         mov     bx,ax
  1495.         shl     eax,16
  1496.         sub     ebx,eax
  1497.         mov     ecx,[file_browser_data_1.y]
  1498.         mov     ax,cx
  1499.         add     eax,3
  1500.         shl     eax,16
  1501.         add     ecx,eax
  1502.         mov     cx,16
  1503.         mcall   8,,,3
  1504.  
  1505.         pusha
  1506.         shr     ecx,16
  1507.         mov     bx,cx
  1508.         add     ebx,4 shl 16
  1509.         mov     ecx,[w_work_button_text]
  1510.         or      ecx,0x90000000
  1511.         mcall   4,,,message_cancel_button
  1512.         popa
  1513.  
  1514.         sub     ebx,65 shl 16
  1515.         mcall   8,,,4
  1516.  
  1517.         shr     ecx,16
  1518.         mov     bx,cx
  1519.         add     ebx,4 shl 16
  1520.         mov     edx,[open_dialog_type]
  1521.         shl     edx,2
  1522.         add     edx,message_open_dialog_button
  1523.         mov     edx,[edx]
  1524. ;-------------------------------
  1525.         cmp     [open_dialog_type],1
  1526.         jne     @f
  1527.  
  1528.         cmp     [focus_pointer],1
  1529.         je      @f
  1530.  
  1531.         cmp     [error_window],0
  1532.         jne     @f
  1533.  
  1534.         mov     eax,[file_browser_data_1.folder_block]
  1535.         test    eax,eax
  1536.         jz      @f
  1537.  
  1538.         mov     eax,[file_browser_data_1.selected_BDVK_adress]
  1539.         test    [eax],byte 0x10
  1540.         jz      @f
  1541.  
  1542.         mov     edx,message_0   ; Open Dir
  1543. @@:
  1544. ;--------------------------------------
  1545.         mov     [open_button_coordinates],ebx
  1546.         mov     ecx,[w_work_button_text]
  1547.         or      ecx,0x90000000
  1548.         mcall   4       ;message_open_button
  1549. .end:
  1550.         mcall   12,2
  1551.         ret
  1552. ;---------------------------------------------------------------------
  1553. draw_open_button_label:
  1554.         cmp     [do_not_draw_open_button_label],1
  1555.         je      .exit_1
  1556.  
  1557.         cmp     [open_dialog_type],1
  1558.         jne     .exit_1
  1559.  
  1560.         cmp     [focus_pointer],1
  1561.         je      draw_save_button_label
  1562.        
  1563.         pusha
  1564.         mov     ebx,[open_button_coordinates]
  1565.         test    ebx,ebx
  1566.         jz      .exit
  1567.  
  1568.         mov     edx,[open_dialog_type]
  1569.         shl     edx,2
  1570.         add     edx,message_open_dialog_button
  1571.         mov     edx,[edx]
  1572.        
  1573.         mov     eax,[file_browser_data_1.folder_block]
  1574.         test    eax,eax
  1575.         jz      .1
  1576.        
  1577.         mov     eax,[file_browser_data_1.selected_BDVK_adress]
  1578.         test    [eax],byte 0x10
  1579.         jz      @f
  1580.        
  1581.         mov     edx,message_0   ; Open Dir
  1582.         jmp     .1
  1583. @@:
  1584.         call    copy_new_file_name
  1585. .1:
  1586.         mov     ecx,[w_work_button_text]
  1587.         or      ecx,0xd0000000
  1588.         mov     edi,[w_work_button]
  1589.         mcall   4       ;message_open_button
  1590. .exit:
  1591.         popa
  1592. .exit_1:
  1593.         ret
  1594. ;---------------------------------------------------------------------
  1595. draw_save_button_label:
  1596.         pusha
  1597.         mov     ebx,[open_button_coordinates]
  1598.  
  1599.         mov     edx,message_1   ; Save
  1600.  
  1601.         mov     ecx,[w_work_button_text]
  1602.         or      ecx,0xd0000000
  1603.         mov     edi,[w_work_button]
  1604.         mcall   4       ;message_open_button
  1605.         popa
  1606.         ret
  1607. ;---------------------------------------------------------------------
  1608. copy_new_file_name:
  1609.         mov     esi,[file_browser_data_1.selected_BDVK_adress]
  1610.         add     esi,40
  1611.         mov     edi,user_selected_name
  1612.         cld
  1613.         lodsb
  1614.         test    al,al
  1615.         jnz     .1
  1616.         ret
  1617. @@:
  1618.         lodsb
  1619. .1:
  1620.         stosb
  1621.         test    al,al
  1622.         jnz     @r
  1623.        
  1624.         sub     edi,user_selected_name
  1625.         dec     edi
  1626.        
  1627.         mov     esi,edit1
  1628.         mov     [esi+48],edi ;ed_size
  1629.         mov     [esi+52],edi ;ed_pos
  1630.  
  1631.         push    dword name_editboxes
  1632.         call    [edit_box_draw]
  1633.         ret
  1634. ;---------------------------------------------------------------------
  1635. prepare_system_colors:
  1636.         mcall   48,3,app_colours,10*4
  1637.  
  1638.         mov     eax,[w_work]
  1639.         mov     [menu_data_1.bckg_col],eax
  1640.         mov     [menu_data_2.bckg_col],eax
  1641.         mov     [menu_data_3.bckg_col],eax
  1642.  
  1643.         mov     [menu_data_1.menu_col],eax
  1644.         mov     [menu_data_2.menu_col],eax
  1645.         mov     [menu_data_3.menu_col],eax
  1646.        
  1647.         mov     [scroll_bar_data_vertical.bckg_col],eax
  1648.  
  1649.         mov     eax,[w_work_button]
  1650.         mov     [menu_data_1.frnt_col],eax
  1651.         mov     [menu_data_2.frnt_col],eax
  1652.         mov     [menu_data_3.frnt_col],eax
  1653.  
  1654.         mov     [scroll_bar_data_vertical.frnt_col],eax
  1655.  
  1656.         mov     eax,[w_work_button]
  1657.         mov     [menu_data_1.menu_sel_col],eax
  1658.         mov     [menu_data_2.menu_sel_col],eax
  1659.         mov     [menu_data_3.menu_sel_col],eax
  1660.  
  1661.         mov     eax,[w_work_text]
  1662.         mov     [menu_data_1.bckg_text_col],eax
  1663.         mov     [menu_data_2.bckg_text_col],eax
  1664.         mov     [menu_data_3.bckg_text_col],eax
  1665.        
  1666.         mov     eax,[w_work_button_text]
  1667.         mov     [menu_data_1.frnt_text_col],eax
  1668.         mov     [menu_data_2.frnt_text_col],eax
  1669.         mov     [menu_data_3.frnt_text_col],eax
  1670.        
  1671.         mov     [scroll_bar_data_vertical.line_col],eax
  1672.         ret
  1673. ;---------------------------------------------------------------------
  1674. draw_for_fs_errors:
  1675.         call    draw_dir_path
  1676.  
  1677.         mov     ebx,[file_browser_data_1.x]
  1678.         mov     ecx,[file_browser_data_1.y]
  1679.         mcall   13,,,[file_browser_data_1.background_color]
  1680.         push    ebx ecx
  1681.         add     ebx,10 shl 16
  1682.         sub     ebx,20
  1683.         add     ecx,10 shl 16
  1684.         sub     ecx,20
  1685.  
  1686.         shr     ecx,16
  1687.         mov     bx,cx
  1688.         add     ebx,5 shl 16+15
  1689.         mcall   4,,0x90000000,load_directory_error_type
  1690.  
  1691.         add     ebx,20
  1692.         mcall   4,,,dir_path   
  1693.  
  1694.         mov     eax,[error_type]
  1695.         shl     eax,2
  1696.         add     eax,error_fs_text_pointers
  1697.         mov     edx,[eax]
  1698.         add     ebx,20
  1699.         mcall   4
  1700.        
  1701.         add     ebx,20
  1702.         mcall   ,,,error_help_text
  1703.  
  1704.         pop     ecx ebx
  1705.  
  1706.         mov     ebx,[file_browser_data_1.x]
  1707.         mov     ax,bx
  1708.         shr     eax,1
  1709.         shl     eax,16
  1710.         add     ebx,eax
  1711.         mov     eax,50
  1712.         mov     bx,ax
  1713.         shr     eax,1
  1714.         shl     eax,16
  1715.         sub     ebx,eax
  1716.  
  1717.         mov     ecx,[file_browser_data_1.y]
  1718.         mov     ax,cx
  1719.         sub     eax,40
  1720.         shl     eax,16
  1721.         add     ecx,eax
  1722.         mov     cx,15
  1723.  
  1724.         mcall   8,,,5,[w_work_button]   ;0xffffff
  1725.  
  1726.         shr     ecx,16
  1727.         mov     bx,cx
  1728.         add     ebx,4 shl 16
  1729.         mov     ecx,[w_work_button_text]
  1730.         add     ecx,0x90000000
  1731.         mcall   4,,,message_cancel_button
  1732.  
  1733.         ret
  1734. ;--------------------------------------------------------------------- 
  1735. draw_file_name:
  1736.         mov     esi,user_selected_name
  1737.         cld
  1738. @@:
  1739.         lodsb
  1740.         test    al,al
  1741.         jne     @r
  1742.         sub     esi,user_selected_name
  1743.         mov     eax,esi
  1744.         dec     eax
  1745.        
  1746.         mov     edi,edit1
  1747.         mov     [edi+48],eax ;ed_size
  1748.         mov     [edi+52],eax ;ed_pos
  1749. ;--------------------------------------
  1750.         mov     eax,[file_browser_data_1.x]
  1751.         mov     ebx,eax
  1752.         shr     ebx,16
  1753.         and     eax,0xffff
  1754.         sub     eax,200
  1755.         mov     [edi],eax
  1756.         add     ebx,70
  1757.         mov     [edi+4],ebx
  1758.        
  1759.         mov     eax,[file_browser_data_1.y]
  1760.         mov     ebx,eax
  1761.         shr     ebx,16
  1762.         and     eax,0xffff
  1763.         add     eax,ebx
  1764.         add     eax,5
  1765.         mov     [edi+8],eax
  1766.        
  1767.         push    dword name_editboxes
  1768.         call    [edit_box_draw]
  1769.        
  1770.         mov     bx,[file_browser_data_1.start_x]
  1771.         add     bx,5
  1772.         shl     ebx,16
  1773.         mov     bx,[file_browser_data_1.start_y]
  1774.         add     bx,[file_browser_data_1.size_y]
  1775.         add     bx,9
  1776.         mov     ecx,[w_work_text]
  1777.         add     ecx,0x80000000
  1778.         mcall   4,,,message_file_name
  1779.         ret
  1780. ;---------------------------------------------------------------------
  1781. draw_dir_path:
  1782.         mov     eax,[file_browser_data_1.x]
  1783.         mov     ebx,eax
  1784.         shr     ebx,16
  1785.         add     ebx,3
  1786.         and     eax,0xffff
  1787.         sub     eax,5
  1788.        
  1789.         mov     [PathShow_data_1.area_size_x],ax
  1790.         mov     [PathShow_data_1.start_x],bx
  1791. ;--------------------------------------
  1792. ;; top line
  1793. ;       mov     ebx,[file_browser_data_1.x]
  1794. ;       mcall   13,,<7,1>,0x0
  1795. ; down line
  1796. ;       push    ebx ecx
  1797. ;       mcall   ,,<21,1>,
  1798. ;       pop     ecx ebx
  1799. ; left line    
  1800. ;       push    ebx
  1801. ;       mov     bx,1
  1802. ;       mov     cx,15
  1803. ;       mcall
  1804. ;       pop     ebx
  1805. ; right line
  1806. ;       mov     ax,bx
  1807. ;       shr     ebx,16
  1808. ;       add     bx,ax
  1809. ;       dec     ebx
  1810. ;       shl     ebx,16
  1811. ;       mov     bx,1
  1812. ;       mcall   13
  1813. ;--------------------------------------
  1814.         mov     ebx,[file_browser_data_1.x]
  1815.         sub     ebx,2
  1816.         add     ebx,1 shl 16
  1817.         mcall   13,,<8,13>,0xffffcc
  1818. ;--------------------------------------
  1819. ; prepare for PathShow
  1820.         push    dword PathShow_data_1
  1821.         call    [PathShow_prepare]
  1822.        
  1823. ; draw for PathShow
  1824.         push    dword PathShow_data_1
  1825.         call    [PathShow_draw]
  1826.        
  1827.         ret
  1828. ;---------------------------------------------------------------------
  1829. draw_draw_file_browser1:
  1830.         call    draw_dir_path
  1831.         cmp     [open_dialog_type],1
  1832.         jne     @f     
  1833.         call    draw_file_name
  1834. @@:
  1835.         xor     eax,eax
  1836.         inc     eax
  1837.         mov     [file_browser_data_1.all_redraw],eax
  1838.         mov     [scroll_bar_data_vertical.all_redraw],eax
  1839.        
  1840.         push    dword file_browser_data_1
  1841.         call    [FileBrowser_draw]
  1842.  
  1843.         call    draw_open_button_label
  1844.        
  1845.         call    prepare_scrollbar_data
  1846.  
  1847.         call    draw_scrollbar
  1848.  
  1849.         xor     eax,eax
  1850.         mov     [file_browser_data_1.all_redraw],eax
  1851.         mov     [scroll_bar_data_vertical.all_redraw],eax
  1852.         ret
  1853. ;---------------------------------------------------------------------
  1854. draw_draw_file_browser2:
  1855.         mov     eax,2
  1856.         mov     [file_browser_data_1.all_redraw],eax
  1857.  
  1858.         call    get_scrollbar_data
  1859.  
  1860.         push    dword file_browser_data_1
  1861.         call    [FileBrowser_draw]
  1862.  
  1863.         call    draw_open_button_label
  1864.  
  1865.         xor     eax,eax
  1866.         mov     [file_browser_data_1.all_redraw],eax
  1867.         ret
  1868. ;---------------------------------------------------------------------
  1869. draw_scrollbar1:
  1870.         mov     eax,[file_browser_data_1.start_draw_line]
  1871.         mov     [scroll_bar_data_vertical.position],eax
  1872.  
  1873.         call    draw_scrollbar
  1874.  
  1875.         ret
  1876. ;---------------------------------------------------------------------
  1877. draw_scrollbar:
  1878.         mov     eax,[scroll_bar_data_vertical.max_area]
  1879.         cmp     eax,[scroll_bar_data_vertical.cur_area]
  1880.         jbe     @f
  1881.         cmp     [scroll_bar_data_vertical.cur_area],0
  1882.         je      @f
  1883.         push    dword scroll_bar_data_vertical
  1884.         call    [scrollbar_ver_draw]
  1885. @@:
  1886.         ret
  1887. ;---------------------------------------------------------------------
  1888. get_scrollbar_data:
  1889.         mov     eax,[scroll_bar_data_vertical.position]
  1890.         mov     [file_browser_data_1.start_draw_line],eax
  1891.         ret
  1892. ;---------------------------------------------------------------------
  1893. prepare_scrollbar_data:
  1894.         mov     eax,[file_browser_data_1.folder_block]
  1895.         mov     [scroll_bar_data_vertical.max_area],eax
  1896.         mov     eax,[file_browser_data_1.max_panel_line]
  1897.         mov     [scroll_bar_data_vertical.cur_area],eax
  1898.         ret
  1899. ;---------------------------------------------------------------------
  1900. get_active_pocess:
  1901.         mcall   9,procinfo,-1
  1902.         mov     ecx,[ebx+30]    ; PID
  1903.         mcall   18,21
  1904.         mov     [active_process],eax    ; WINDOW SLOT
  1905.         mov     ebx,[communication_area]       
  1906.         test    ebx,ebx
  1907.         jz      .1
  1908.         mov     [ebx+12],eax    ; WINDOW SLOT to com. area
  1909. .1:
  1910.         ret
  1911. ;---------------------------------------------------------------------
  1912. get_window_param:
  1913.         mcall   9,procinfo,-1
  1914.         mov     eax,[ebx+66]
  1915.         inc     eax
  1916.         mov     [window_high],eax
  1917.         mov     eax,[ebx+62]
  1918.         inc     eax
  1919.         mov     [window_width],eax
  1920.         mov     eax,[ebx+70]
  1921.         mov     [window_status],eax
  1922.         ret
  1923. ;---------------------------------------------------------------------
  1924. convert_icons:
  1925.         xor     eax,eax
  1926.         mov     [return_code],eax
  1927. ;       mov     eax,image_file
  1928.         push    image_file
  1929.         call    [cnv_png_import.Start]
  1930.  
  1931.         mov     ecx,[image_file]
  1932.         mcall   68,13,
  1933.         test    eax,eax
  1934.         jz      memory_free_error
  1935.  
  1936.         cmp     [return_code],dword 0
  1937.         je      @f
  1938.         mov     [N_error],6
  1939.         jmp     button.exit
  1940. @@:
  1941.  
  1942.         mov     ebx,[raw_pointer]
  1943.         mov     eax,[ebx+4]
  1944. ; set of icon size x
  1945.         mov     [file_browser_data_1.icon_size_x],ax
  1946. ; mov eax,[ebx+8]
  1947. ; set of icon size y
  1948.         mov     [file_browser_data_1.icon_size_y],ax
  1949.         inc     ax
  1950.         mov     [file_browser_data_1.line_size_y],ax
  1951.         mov     eax,[ebx+12]
  1952. ; set of RAW resolution to pixel
  1953.         mov     [file_browser_data_1.resolution_raw],eax
  1954.  
  1955.         mov     eax,[ebx+20]
  1956.         add     eax,ebx
  1957. ; set RAW palette,use else resolution 8bit or less
  1958.         mov     [file_browser_data_1.palette_raw],eax
  1959.  
  1960.         mov     eax,[ebx+28]
  1961.         add     eax,ebx
  1962. ; set RAW area for icon
  1963.         mov     [file_browser_data_1.icon_raw_area],eax
  1964.         ret
  1965. ;---------------------------------------------------------------------
  1966. calc_ini:
  1967.         mov     eax,[image_file]
  1968.         mov     [file_browser_data_1.ini_file_start],eax
  1969.  
  1970.         mov     edi,eax
  1971.         add     edi,[img_size]
  1972.         dec     edi
  1973.         mov     esi,eax
  1974.         add     esi,9 ; after [icons16]
  1975.         cld
  1976. @@:
  1977.         lodsb
  1978.         cmp     esi,edi
  1979.         je      @f
  1980.         cmp     al,byte '['
  1981.         jne     @r
  1982.        
  1983. @@:
  1984.         mov     [file_browser_data_1.ini_file_end],esi
  1985.         ret
  1986. ;---------------------------------------------------------------------
  1987. load_ini:
  1988.         mov     edi,ini_file_name
  1989.  
  1990.         mov     [fileinfo.name],edi
  1991.         mov     [fileinfo.subfunction],dword 5
  1992.         mov     [fileinfo.size],dword 0
  1993.         mov     [fileinfo.return],dword file_info
  1994.         mcall   70,fileinfo
  1995.         test    eax,eax
  1996.         jnz     .error
  1997.  
  1998.         mov     [fileinfo.subfunction],dword 0
  1999.  
  2000.         mov     ecx,[file_info+32]
  2001.         mov     [fileinfo.size],ecx
  2002.         mov     [img_size],ecx
  2003.        
  2004.         mcall   68,12
  2005.         test    eax,eax
  2006.         jz      memory_get_error
  2007.  
  2008.         mov     [fileinfo.return],eax
  2009.         mov     [image_file],eax
  2010.  
  2011.         mcall   70,fileinfo
  2012.         test    eax,eax
  2013.         jnz     .error
  2014.         ret
  2015. .error:
  2016.         mov     [N_error],1
  2017.         mov     [error_type],eax
  2018.         jmp     button.exit
  2019. ;---------------------------------------------------------------------
  2020. load_icons:
  2021.         mov     ebx,icons_file_name_2
  2022.         mov     esi,path
  2023.         mov     edi,file_name
  2024.         call    copy_file_path
  2025.  
  2026.         mov     [fileinfo.subfunction],dword 5
  2027.         mov     [fileinfo.size],dword 0
  2028.         mov     [fileinfo.return],dword file_info
  2029.         mcall   70,fileinfo
  2030.         test    eax,eax
  2031.         jz      @f
  2032.        
  2033.         mov     edi,icons_path
  2034.  
  2035.         mov     [fileinfo.name],edi
  2036.         mov     [fileinfo.subfunction],dword 5
  2037.         mov     [fileinfo.size],dword 0
  2038.         mov     [fileinfo.return],dword file_info
  2039.         mcall   70,fileinfo
  2040.         test    eax,eax
  2041.         jnz     .error
  2042. @@:
  2043.         mov     [fileinfo.subfunction],dword 0
  2044.  
  2045.         mov     ecx,[file_info+32]
  2046.         mov     [fileinfo.size],ecx
  2047.         mov     [img_size],ecx
  2048.        
  2049.         mcall   68,12
  2050.         test    eax,eax
  2051.         jz      memory_get_error
  2052.  
  2053.         mov     [fileinfo.return],eax
  2054.         mov     [image_file],eax
  2055.  
  2056.         mcall   70,fileinfo
  2057.         test    eax,eax
  2058.         jnz     .error
  2059.         ret
  2060. .error:
  2061.         mov     [N_error],2
  2062.         mov     [error_type],eax
  2063.         jmp     button.exit
  2064. ;---------------------------------------------------------------------
  2065. sort_directory:
  2066.         mov     eax,[file_browser_data_1.folder_data]
  2067.         mov     ebx,[eax+4]     ; number of files
  2068.         add     eax,32
  2069.         cmp     [eax+40],word '..'
  2070.         jne     @f
  2071.         cmp     [eax+40+2],byte 0
  2072.         jne     @f
  2073.         dec     ebx
  2074.         add     eax,304
  2075. @@:
  2076.         push    dword [sort_type]       ; sort mode
  2077.         push    ebx     ; number of files
  2078.         push    eax     ; data files
  2079.         call    [sort_dir]
  2080.         ret
  2081. ;--------------------------------------------------------------------
  2082. load_directory:
  2083.         xor     eax,eax
  2084.         mov     [N_error],eax
  2085.         cmp     [file_browser_data_1.folder_data],eax
  2086.         je      @f
  2087.         mcall   68,13,[file_browser_data_1.folder_data]
  2088.         test    eax,eax
  2089.         jz      memory_free_error
  2090.  
  2091. @@:
  2092.         mov     [dirinfo.size],dword 0
  2093.         mov     [dirinfo.return],dir_header
  2094.         mcall   70,dirinfo
  2095.         test    eax,eax
  2096.         jz      @f
  2097. ;       mov     esi,previous_dir_path
  2098. ;       mov     edi,dir_path
  2099. ;       call    copy_dir_name.1
  2100. ;       mcall   70,dirinfo
  2101. ;       test    eax,eax
  2102. ;       jz      @f     
  2103.         xor     ebx,ebx
  2104.         mov     [file_browser_data_1.folder_data],ebx
  2105.         jmp     .error
  2106. @@:
  2107.        
  2108.         mov     ecx,[dir_header.totl_blocks]
  2109.         mov     [dirinfo.size],ecx
  2110.         imul    ecx,304
  2111.         add     ecx,32
  2112.         mcall   68,12
  2113.         test    eax,eax
  2114.         jz      memory_get_error
  2115.  
  2116.         mov     [dirinfo.return],eax
  2117.         mov     [file_browser_data_1.folder_data],eax
  2118.  
  2119.         mcall   70,dirinfo
  2120.         test    eax,eax
  2121.         jnz     .error
  2122.        
  2123. ; test for empty directory
  2124.         mov     eax,[dirinfo.return]
  2125.         mov     eax,[eax+4]
  2126.         test    eax,eax
  2127.         jz      @f
  2128.        
  2129.         call    delete_point_dir
  2130. ;       call    files_name_normalize
  2131.         call    check_filter
  2132.         call    prepare_extension_and_mark
  2133.         call    clear_data_fb_and_sb
  2134. @@:
  2135.         ret
  2136.  
  2137. .error:
  2138.         mov     [N_error],5
  2139.         mov     [error_type],eax
  2140.         ret
  2141. ;---------------------------------------------------------------------
  2142. clear_data_fb_and_sb:
  2143.         xor     eax,eax
  2144.         mov     [file_browser_data_1.start_draw_cursor_line],ax
  2145.         mov     [file_browser_data_1.start_draw_line],eax
  2146.         mov     [scroll_bar_data_vertical.position],eax
  2147.         ret
  2148. ;---------------------------------------------------------------------
  2149. check_filter:
  2150.         cmp [open_dialog_type],2        ; Select dir
  2151.         je      .1
  2152.         xor     eax,eax
  2153.         mov     al,[filter_flag]
  2154.         test    eax,eax
  2155.         jz      @f
  2156.  
  2157.         mov     eax,[communication_area]
  2158.         test    eax,eax
  2159.         jz      @f
  2160.         mov     eax,[eax+4096]
  2161.         test    eax,eax
  2162.         jz      @f
  2163. .1:
  2164.         call    delete_unsupported_BDFE
  2165. @@:
  2166.         ret
  2167. ;---------------------------------------------------------------------
  2168. delete_unsupported_BDFE:
  2169.         mov     ebx,[file_browser_data_1.folder_data]
  2170.         add     ebx,4
  2171.         xor     ecx,ecx
  2172.         dec     ecx
  2173.        
  2174.         mov     eax,[file_browser_data_1.folder_data]
  2175.         add     eax,32+40
  2176.         sub     eax,304
  2177. .start:
  2178.         inc     ecx
  2179.         add     eax,304
  2180. .1:
  2181.         cmp     [ebx],ecx
  2182.         je      .end
  2183.         cmp     [eax],byte '.'
  2184.         jne     @f
  2185.         cmp     [eax+1],byte 0
  2186.         je      .delete
  2187. @@:
  2188.         test    [eax-40],byte 0x10
  2189.         jnz     .start
  2190.        
  2191.         cmp     [open_dialog_type],2    ; Select dir
  2192.         je      .delete
  2193.        
  2194.         push    eax ebx
  2195.         mov     esi,eax
  2196.         call    search_expansion
  2197.         test    eax,eax
  2198.         pop     ebx eax
  2199.         jnz     .delete
  2200.        
  2201.         push    eax ebx ecx esi
  2202.         mov     edi,[communication_area]
  2203.         add     edi,4100
  2204.         call    compare_expansion
  2205.         test    eax,eax
  2206.         pop     esi ecx ebx eax
  2207.         jz      .start
  2208.        
  2209. ;-------------------------------------------
  2210. .delete:
  2211.         dec     dword [ebx]
  2212.         mov     esi,[ebx]
  2213.         sub     esi,ecx
  2214.  
  2215.         push    ecx
  2216.         mov     ecx,esi
  2217.         imul    ecx,304/4
  2218.         mov     edi,eax
  2219.         sub     edi,40
  2220.         mov     esi,edi
  2221.         add     esi,304
  2222.         cld
  2223.         rep     movsd
  2224.         pop     ecx
  2225.        
  2226.         jmp     .1
  2227. .end:
  2228.         ret
  2229. ;---------------------------------------------------------------------
  2230. search_expansion:
  2231.         mov     edi,esi
  2232.         xor     eax,eax
  2233. @@:
  2234.         cld
  2235.         lodsb
  2236.         test    eax,eax
  2237.         jnz     @b
  2238.         mov     ebx,esi
  2239.         dec     esi
  2240. @@:
  2241.         std
  2242.         lodsb
  2243.         cmp     esi,edi
  2244.         jb      .end_err
  2245.         cmp     al,'.'
  2246.         jne     @b
  2247.        
  2248.         add     esi,2
  2249.         sub     ebx,esi
  2250.         mov     [expansion_length],ebx
  2251.         cld
  2252.         xor     eax,eax
  2253.         ret
  2254.        
  2255. .end_err:
  2256.         cld
  2257.         xor     eax,eax
  2258.         inc     eax
  2259.         ret
  2260. ;---------------------------------------------------------------------
  2261. compare_expansion:
  2262.         mov     ebx,[edi]
  2263.         add     ebx,edi
  2264.         add     edi,3
  2265. .start:
  2266.         cmp     ebx,edi
  2267.         jb      .end_err
  2268.         mov     ecx,[expansion_length]
  2269.         inc     edi
  2270.        
  2271.         push    esi edi
  2272. @@:
  2273.         cld
  2274.         lodsb
  2275.         xchg    esi,edi
  2276.         shl     eax,8
  2277.         lodsb
  2278.         xchg    esi,edi
  2279.         call    char_todown
  2280.         xchg    al,ah
  2281.         call    char_todown
  2282.         cmp     al,ah
  2283.         jne     @f
  2284.         dec     ecx
  2285.         jnz     @b
  2286.         jmp     .end
  2287. @@:
  2288.         pop     edi esi
  2289.         jmp     .start
  2290. .end:
  2291.         pop     edi esi
  2292.         xor     eax,eax
  2293.         ret
  2294.        
  2295. .end_err:
  2296.         xor     eax,eax
  2297.         inc     eax
  2298.         ret
  2299. ;---------------------------------------------------------------------
  2300. prepare_extension_and_mark:
  2301.         mov     esi,[dirinfo.return]
  2302.         mov     ebp,[esi+4]
  2303.         test    ebp,ebp
  2304.         jz      .end
  2305.  
  2306.         add     esi,32+40
  2307. .start:
  2308.         push    esi
  2309.         call    search_extension_start
  2310.         mov     eax,esi
  2311.         pop     esi
  2312.         sub     eax,esi
  2313.         sub     ebx,esi
  2314.         shl     eax,16
  2315.         mov     ax,bx
  2316.         mov     [esi+300-40],eax
  2317.         mov     [esi+299-40],byte 0
  2318.         add     esi,304
  2319.         dec     ebp
  2320.         jnz     .start
  2321. .end:
  2322.         ret
  2323. ;---------------------------------------------------------------------
  2324. search_extension_start:
  2325.         mov     edx,esi
  2326.         xor     eax,eax
  2327.         cld
  2328. @@:
  2329.         lodsb
  2330.         test    eax,eax
  2331.         jnz     @b
  2332.         dec     esi
  2333.         dec     edx
  2334.         push    esi
  2335.         std
  2336. @@:
  2337.         lodsb
  2338.         cmp     esi,edx
  2339.         je      .end
  2340.         cmp     al,'.'
  2341.         jnz     @b
  2342.         add     esi,2
  2343.         cld
  2344.         pop     ebx
  2345.         ret
  2346. .end:
  2347.         cld
  2348.         pop     esi
  2349.         mov     ebx,esi
  2350.         ret
  2351. ;---------------------------------------------------------------------
  2352. delete_point_dir:
  2353.         mov     eax,[dirinfo.return]
  2354.         cmp     [eax+32+40],byte '.'
  2355.         jne     @f
  2356.         cmp     [eax+32+40+1],byte 0
  2357.         jne     @f
  2358.         mov     edi,eax
  2359.         add     edi,32
  2360.         mov     esi,edi
  2361.         add     esi,304
  2362.         mov     ecx,[eax+4]
  2363.         dec     ecx
  2364.         mov     [eax+4],ecx
  2365.         imul    ecx,304
  2366.         shr     ecx,2
  2367.         cld
  2368.         rep     movsd
  2369. @@:
  2370.         ret
  2371. ;---------------------------------------------------------------------
  2372. ;files_name_normalize:
  2373. ;       mov     esi,[dirinfo.return]
  2374. ;       mov     ebp,[esi+4]
  2375. ;       add     esi,32+40
  2376. ;.start:
  2377. ;       push    esi
  2378. ;       mov     al,[esi]
  2379. ;       call    char_toupper
  2380. ;       mov     [esi],al
  2381. ;@@:
  2382. ;       inc     esi
  2383. ;       mov     al,[esi]
  2384. ;       test    al,al
  2385. ;       jz      @f
  2386. ;       call    char_todown
  2387. ;       mov     [esi],al
  2388. ;       jmp     @b
  2389. ;@@:
  2390. ;       pop     esi
  2391. ;       add     esi,304
  2392. ;       dec     ebp
  2393. ;       jnz     .start
  2394. ;       ret
  2395. ;---------------------------------------------------------------------
  2396. char_toupper:
  2397. ; convert character to uppercase,using cp866 encoding
  2398. ; in: al=symbol
  2399. ; out: al=converted symbol
  2400.         cmp     al,'a'
  2401.         jb      .ret
  2402.         cmp     al,'z'
  2403.         jbe     .az
  2404.         cmp     al,' '
  2405.         jb      .ret
  2406.         cmp     al,'à'
  2407.         jb      .rus1
  2408.         cmp     al,'ï'
  2409.         ja      .ret
  2410. ; 0xE0-0xEF -> 0x90-0x9F
  2411.         sub     al,'à'-''
  2412. .ret:
  2413.         ret
  2414. .rus1:
  2415. ; 0xA0-0xAF -> 0x80-0x8F
  2416. .az:
  2417.         and     al,not  0x20
  2418.         ret
  2419. ;---------------------------------------------------------------------
  2420. char_todown:
  2421. ; convert character to uppercase,using cp866 encoding
  2422. ; in: al=symbol
  2423. ; out: al=converted symbol
  2424.         cmp     al,'A'
  2425.         jb      .ret
  2426.         cmp     al,'Z'
  2427.         jbe     .az
  2428.         cmp     al,'€'
  2429.         jb      .ret
  2430.         cmp     al,''
  2431.         jb      .rus1
  2432.         cmp     al,'Ÿ'
  2433.         ja      .ret
  2434. ; 0x90-0x9F -> 0xE0-0xEF
  2435.         add     al,'à'-''
  2436. .ret:
  2437.         ret
  2438. .rus1:
  2439. ; 0x80-0x8F -> 0xA0-0xAF
  2440. .az:
  2441.         add     al,0x20
  2442.         ret
  2443. ;---------------------------------------------------------------------
  2444. copy_file_path:
  2445.         xor     eax,eax
  2446.         cld
  2447. @@:
  2448.         lodsb
  2449.         stosb
  2450.         test    eax,eax
  2451.         jnz     @b
  2452.         mov     esi,edi
  2453.         dec     esi
  2454.         std
  2455. @@:
  2456.         lodsb
  2457.         cmp     al,'/'
  2458.         jnz     @b
  2459.         mov     edi,esi
  2460.         add     edi,2
  2461.         mov     esi,ebx
  2462.         cld
  2463. @@:
  2464.         lodsb
  2465.         stosb
  2466.         test    eax,eax
  2467.         jnz     @b
  2468.         ret
  2469. ;---------------------------------------------------------------------
  2470. copy_dir_path:
  2471.         mov     ecx,esi
  2472.         inc     ecx
  2473.         inc     ecx
  2474.         xor     eax,eax
  2475.         cld
  2476. @@:
  2477.         lodsb
  2478.         test    eax,eax
  2479.         jnz     @b
  2480.  
  2481.         cmp     ecx,esi
  2482.         jb      @f
  2483.         dec     esi
  2484. @@:
  2485.         mov     [esi-1],byte '/'
  2486.         mov     edi,esi
  2487.         mov     esi,ebx
  2488. @@:
  2489.         lodsb
  2490.         stosb
  2491.         test    eax,eax
  2492.         jnz     @b
  2493.         ret
  2494. ;---------------------------------------------------------------------
  2495. copy_exit_dir:
  2496.         mov     ebx,esi
  2497.         inc     ebx
  2498.         xor     eax,eax
  2499.         cld
  2500. @@:
  2501.         lodsb
  2502.         test    eax,eax
  2503.         jnz     @b
  2504.         sub     esi,2
  2505.         std
  2506. @@:
  2507.         lodsb
  2508.         cmp     al,'/'
  2509.         jnz     @b
  2510.         xor     eax,eax
  2511.         cmp     ebx,esi
  2512.         jb      @f
  2513.         inc     esi
  2514. @@:
  2515.         mov     [esi+1],al
  2516.         cld
  2517.         ret
  2518. ;---------------------------------------------------------------------
  2519. copy_dir_name:
  2520.         push    esi edi
  2521.         mov     esi,edi
  2522.         mov     edi,previous_dir_path
  2523.         call    .1
  2524.         pop     edi esi
  2525. .1:
  2526.         xor     eax,eax
  2527.         cmp     [esi],al
  2528.         je      .exit
  2529.         cld
  2530. @@:
  2531.         lodsb
  2532.         stosb
  2533.         test    eax,eax
  2534.         jnz     @b
  2535. .exit:
  2536.         ret
  2537. ;---------------------------------------------------------------------
  2538. ;---------------------------------------------------------------------
  2539.  
  2540. ;plugins_directory      db 'plugins/',0
  2541. plugins_directory       db 0
  2542.  
  2543. system_dir_Boxlib       db '/sys/lib/box_lib.obj',0
  2544. system_dir_CnvPNG       db '/sys/lib/cnv_png.obj',0
  2545. system_dir_Sort         db '/sys/lib/sort.obj',0
  2546. system_dir_UNPACK       db '/sys/lib/archiver.obj',0
  2547.  
  2548. align   4
  2549. l_libs_start:
  2550. library01       l_libs  system_dir_Boxlib+9,file_name,system_dir_Boxlib,\
  2551. Box_lib_import,plugins_directory
  2552.  
  2553. library02       l_libs  system_dir_CnvPNG+9,file_name,system_dir_CnvPNG,\
  2554. cnv_png_import,plugins_directory
  2555.  
  2556. library03       l_libs  system_dir_Sort+9,file_name,system_dir_Sort,\
  2557. Sort_import,plugins_directory
  2558.  
  2559. library04       l_libs  system_dir_UNPACK+9,file_name,system_dir_UNPACK,\
  2560. UNPACK_import,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_draw',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:       db '10 - Access denied',0
  2849. error_fs_text_11:       db '11 - Device error',0
  2850. ;---------------------------------------------------------------------
  2851.  
  2852. extended_key    db 0
  2853.  
  2854. shift_flag      db 0
  2855. ctrl_flag       db 0
  2856. alt_flag        db 0
  2857.  
  2858. error_window    db 0
  2859.  
  2860. Tab_key         db 0
  2861. Tab_key_block   db 0
  2862.  
  2863. filter_flag     db 1
  2864.  
  2865. focus_pointer   db 0
  2866. ;---------------------------------------------------------------------
  2867. start_pach:
  2868.         db '/sys',0
  2869.  
  2870. root_pach:
  2871.         db '/',0
  2872.  
  2873. icons_file_name_2 db 'buttons/'
  2874. icons_path        db '/sys/icons16.png',0
  2875. ini_file_name     db '/sys/File managers/icons.ini',0
  2876. ;---------------------------------------------------------------------
  2877.  
  2878. message:
  2879.         db 'Press any key...',0
  2880.  
  2881. message_cancel_button:
  2882.         db 'Cancel',0
  2883.  
  2884. message_ReloadDir_button:
  2885.         db 'Refresh',0
  2886.  
  2887. message_ExitDir_button:
  2888.         db '^',0
  2889.  
  2890. message_file_name:
  2891.         db 'File name:',0
  2892.        
  2893. message_0:
  2894.         db ' Open ',0
  2895. message_1:
  2896.         db ' Save ',0
  2897. message_2:
  2898.         db 'Select',0
  2899.        
  2900. title_0:
  2901.         db 'Open Dialog',0
  2902. title_1:
  2903.         db 'Save Dialog',0
  2904. title_2:
  2905.         db 'Select Dir',0
  2906. ;---------------------------------------------------------------------
  2907. align 4
  2908. menu_data_1:
  2909. .type:          dd 1   ;+0
  2910. .x:
  2911. .size_x         dw 80  ;+4
  2912. .start_x        dw 10   ;+6
  2913. .y:
  2914. .size_y         dw 15   ;+8
  2915. .start_y        dw 26  ;+10
  2916. .text_pointer:  dd menu_text_area_1  ;0 ;+12
  2917. .pos_pointer:   dd menu_text_area_1_1 ;0 ;+16
  2918. .text_end       dd menu_text_area_1_1 ;0 ;+20
  2919. .ret_key        dd 0  ;+24
  2920. .mouse_keys     dd 0  ;+28
  2921. .x1:
  2922. .size_x1        dw 80  ;+32
  2923. .start_x1       dw 10   ;+34
  2924. .y1:
  2925. .size_y1        dw 100   ;+36
  2926. .start_y1       dw 41  ;+38
  2927. .bckg_col       dd 0xffffff  ;0xe5e5e5 ;+40
  2928. .frnt_col       dd 0xff ;+44
  2929. .menu_col       dd 0xeef0ff ;0xffffff ;+48
  2930. .select         dd 0 ;+52
  2931. .out_select     dd 0 ;+56
  2932. .buf_adress     dd 0 ;+60
  2933. .procinfo       dd procinfo ;+64
  2934. .click          dd 0 ;+68
  2935. .cursor         dd 0 ;+72
  2936. .cursor_old     dd 0 ;+76
  2937. .interval       dd 16 ;+80
  2938. .cursor_max     dd 0 ;+84
  2939. .extended_key   dd 0 ;+88
  2940. .menu_sel_col   dd 0x00cc00 ;+92
  2941. .bckg_text_col  dd 0 ; +96
  2942. .frnt_text_col  dd 0xffffff ;+100
  2943. .mouse_keys_old dd 0 ;+104
  2944. .font_height    dd 8 ;+108
  2945. .cursor_out     dd 0 ;+112
  2946. .get_mouse_flag dd 0 ;+116
  2947. ;---------------------------------------------------------------------
  2948. menu_text_area_1:
  2949. db 'Select Disk',0
  2950. ;---------------------------------------------------------------------
  2951. align 4
  2952. menu_data_2:
  2953. .type:          dd 0   ;+0
  2954. .x:
  2955. .size_x         dw 30  ;+4
  2956. .start_x        dw 95   ;+6
  2957. .y:
  2958. .size_y         dw 15   ;+8
  2959. .start_y        dw 26  ;+10
  2960. .text_pointer:  dd menu_text_area_2  ;0 ;+12
  2961. .pos_pointer:   dd menu_text_area_2.1 ;0 ;+16
  2962. .text_end       dd menu_text_area_2.end ;0 ;+20
  2963. .ret_key        dd 0  ;+24
  2964. .mouse_keys     dd 0  ;+28
  2965. .x1:
  2966. .size_x1        dw 30  ;+32
  2967. .start_x1       dw 95   ;+34
  2968. .y1:
  2969. .size_y1        dw 100   ;+36
  2970. .start_y1       dw 41  ;+38
  2971. .bckg_col       dd 0xffffff ; 0xe5e5e5 ;+40
  2972. .frnt_col       dd 0xff ;+44
  2973. .menu_col       dd 0xeef0ff  ;0xffffff ;+48
  2974. .select         dd 0 ;+52
  2975. .out_select     dd 0 ;+56
  2976. .buf_adress     dd 0 ;+60
  2977. .procinfo       dd procinfo ;+64
  2978. .click          dd 0 ;+68
  2979. .cursor         dd 0 ;+72
  2980. .cursor_old     dd 0 ;+76
  2981. .interval       dd 16 ;+80
  2982. .cursor_max     dd 0 ;+84
  2983. .extended_key   dd 0 ;+88
  2984. .menu_sel_col   dd 0x00cc00 ;+92
  2985. .bckg_text_col  dd 0 ; +96
  2986. .frnt_text_col  dd 0xffffff ;+100
  2987. .mouse_keys_old dd 0 ;+104
  2988. .font_height    dd 8 ;+108
  2989. .cursor_out     dd 0 ;+112
  2990. .get_mouse_flag dd 0 ;+116
  2991. ;---------------------------------------------------------------------
  2992. menu_text_area_2:
  2993. db 'Sort',0
  2994. .1:
  2995. db 'Name',0
  2996. db 'Type',0
  2997. db 'Date',0
  2998. db 'Size',0
  2999. .end:
  3000. db 0
  3001. ;---------------------------------------------------------------------
  3002. align 4
  3003. menu_data_3:
  3004. .type:          dd 0   ;+0
  3005. .x:
  3006. .size_x         dw 45  ;+4
  3007. .start_x        dw 130   ;+6
  3008. .y:
  3009. .size_y         dw 15   ;+8
  3010. .start_y        dw 26  ;+10
  3011. .text_pointer:  dd menu_text_area_3  ;0 ;+12
  3012. .pos_pointer:   dd menu_text_area_3.1 ;0 ;+16
  3013. .text_end       dd menu_text_area_3.end ;0 ;+20
  3014. .ret_key        dd 0  ;+24
  3015. .mouse_keys     dd 0  ;+28
  3016. .x1:
  3017. .size_x1        dw 95  ;+32
  3018. .start_x1       dw 130   ;+34
  3019. .y1:
  3020. .size_y1        dw 100   ;+36
  3021. .start_y1       dw 41  ;+38
  3022. .bckg_col       dd 0xffffff ; 0xe5e5e5 ;+40
  3023. .frnt_col       dd 0xff ;+44
  3024. .menu_col       dd 0xeef0ff  ;0xffffff ;+48
  3025. .select         dd 0 ;+52
  3026. .out_select     dd 0 ;+56
  3027. .buf_adress     dd 0 ;+60
  3028. .procinfo       dd procinfo ;+64
  3029. .click          dd 0 ;+68
  3030. .cursor         dd 0 ;+72
  3031. .cursor_old     dd 0 ;+76
  3032. .interval       dd 16 ;+80
  3033. .cursor_max     dd 0 ;+84
  3034. .extended_key   dd 0 ;+88
  3035. .menu_sel_col   dd 0x00cc00 ;+92
  3036. .bckg_text_col  dd 0 ; +96
  3037. .frnt_text_col  dd 0xffffff ;+100
  3038. .mouse_keys_old dd 0 ;+104
  3039. .font_height    dd 8 ;+108
  3040. .cursor_out     dd 0 ;+112
  3041. .get_mouse_flag dd 0 ;+116
  3042. ;---------------------------------------------------------------------
  3043. menu_text_area_3:
  3044. db 'Filter',0
  3045. .1:
  3046. db '*.* - show all',0
  3047. db 'Only supported',0
  3048. .end:
  3049. db 0
  3050. ;---------------------------------------------------------------------
  3051.  
  3052. align 4
  3053. scroll_bar_data_vertical:
  3054. .x:
  3055. .size_x         dw 15 ;+0
  3056. .start_x        dw 500 ;+2
  3057. .y:
  3058. .size_y         dw 300 ;+4
  3059. .start_y        dw 45 ;+6
  3060. .btn_high       dd 15 ;+8
  3061. .type           dd 2  ;+12
  3062. .max_area       dd 10  ;+16
  3063. .cur_area       dd 2  ;+20
  3064. .position       dd 0  ;+24
  3065. .bckg_col       dd 0xeeeeee ;+28
  3066. .frnt_col       dd 0xbbddff ;+32 ;0x8aeaa0
  3067. .line_col       dd 0  ;+36
  3068. .redraw         dd 0  ;+40
  3069. .delta          dw 0  ;+44
  3070. .delta2         dw 0  ;+46
  3071. .run_x:
  3072. .r_size_x       dw 0  ;+48
  3073. .r_start_x      dw 0  ;+50
  3074. .run_y:
  3075. .r_size_y       dw 0 ;+52
  3076. .r_start_y      dw 0 ;+54
  3077. .m_pos          dd 0 ;+56
  3078. .m_pos_2        dd 0 ;+60
  3079. .m_keys         dd 0 ;+64
  3080. .run_size       dd 0 ;+68
  3081. .position2      dd 0 ;+72
  3082. .work_size      dd 0 ;+76
  3083. .all_redraw     dd 0 ;+80
  3084. .ar_offset      dd 1 ;+84
  3085. ;---------------------------------------------------------------------
  3086. align 4
  3087. file_browser_data_1:
  3088. .type                           dd 0 ;+0
  3089. .x:
  3090. .size_x                         dw 400 ;+4
  3091. .start_x                        dw 10 ;+6
  3092. .y:
  3093. .size_y                         dw 550 ;+8
  3094. .start_y                        dw 45 ;+10
  3095. .icon_size_y                    dw 16 ; +12
  3096. .icon_size_x                    dw 16 ; +14
  3097. .line_size_x                    dw 0 ; +16
  3098. .line_size_y                    dw 18 ; +18
  3099. .type_size_x                    dw 0 ; +20
  3100. .size_size_x                    dw 0 ; +22
  3101. .date_size_x                    dw 0 ; +24
  3102. .attributes_size_x              dw 0 ; +26
  3103. .icon_assoc_area                dd 0 ; +28
  3104. .icon_raw_area                  dd 0 ; +32
  3105. .resolution_raw                 dd 0 ; +36
  3106. .palette_raw                    dd 0 ; +40
  3107. .directory_path_area            dd 0 ; +44
  3108. .file_name_area                 dd 0 ; +48
  3109. .select_flag                    dd 0 ; +52
  3110. .background_color               dd 0xffffff ; +56
  3111. .select_color                   dd 0xbbddff ; +60
  3112. .seclect_text_color             dd 0 ; +64
  3113. .text_color                     dd 0 ; +68
  3114. .reduct_text_color              dd 0xff0000 ; +72
  3115. .marked_text_color              dd 0 ; +76
  3116. .max_panel_line                 dd 0 ; +80
  3117. .select_panel_counter           dd 1 ; +84
  3118. .folder_block                   dd 0 ; +88
  3119. .start_draw_line                dd 0 ; +92
  3120. .start_draw_cursor_line         dw 0 ; +96 ; pixels
  3121. .folder_data                    dd 0 ; +98
  3122. .temp_counter                   dd 0 ; +102
  3123. .file_name_length               dd 0 ; +106
  3124. .marked_file                    dd 0 ; +110
  3125. .extension_size                 dd 0 ; +114
  3126. .extension_start                dd 0 ; +118
  3127. .type_table                     dd features_table ; +122
  3128. .ini_file_start                 dd 0 ; +126
  3129. .ini_file_end                   dd 0 ; +130
  3130. .draw_scroll_bar                dd 0 ; +134
  3131. .font_size_y                    dw 9 ; +138
  3132. .font_size_x                    dw 6 ; +140
  3133. .mouse_keys                     dd 0 ; +142
  3134. .mouse_keys_old                 dd 0 ; +146
  3135. .mouse_pos                      dd 0 ; +150
  3136. .mouse_keys_delta               dd 0 ; +154
  3137. .mouse_key_delay                dd 50 ; +158
  3138. .mouse_keys_tick                dd 0 ; +162
  3139. .start_draw_cursor_line_2       dw 0 ;+166
  3140. .all_redraw                     dd 0 ;+168
  3141. .selected_BDVK_adress           dd 0 ;+172
  3142. .key_action                     dw 0 ;+176
  3143. .key_action_num                 dw 0 ;+178
  3144. .name_temp_area                 dd name_temp_area ;+180
  3145. .max_name_temp_size             dd 0 ;+184
  3146. .display_name_max_length        dd 0 ;+188
  3147. .draw_panel_selection_flag      dd 0 ;+192
  3148. .mouse_pos_old                  dd 0 ;+196
  3149. .marked_counter                 dd 0 ;+200
  3150. .keymap_pointer                 dd keymap_area ;+204
  3151. ;---------------------------------------------------------------------
  3152. PathShow_data_1:
  3153. .type                   dd 0    ;+0
  3154. .start_y                dw 11   ;+4
  3155. .start_x                dw 10   ;+6
  3156. .font_size_x            dw 6    ;+8     ; 6 - for font 0, 8 - for font 1
  3157. .area_size_x            dw 200  ;+10
  3158. .font_number            dd 0    ;+12    ; 0 - monospace, 1 - variable
  3159. .background_flag        dd 0    ;+16
  3160. .font_color             dd 0x0  ;+20
  3161. .background_color       dd 0x0  ;+24
  3162. .text_pointer           dd dir_path     ;+28
  3163. .work_area_pointer      dd text_work_area       ;+32
  3164. .temp_text_length       dd 0    ;+36
  3165. ;---------------------------------------------------------------------
  3166. ; for EDITBOX
  3167. align   4
  3168. name_editboxes:
  3169. edit1   edit_box 200,10,7,0xffffff,0xbbddff,0,0,0,4095,user_selected_name,mouse_dd,,0
  3170. name_editboxes_end:
  3171.  
  3172. ;mouse_flag:    dd 0x0
  3173.  
  3174. mouse_dd rd     1
  3175. ;---------------------------------------------------------------------
  3176. window_x:
  3177. .x_size         dw 420
  3178. .x_start        dw 10
  3179. window_y:
  3180. .y_size         dw 320
  3181. .y_start        dw 10
  3182. ;---------------------------------------------------------------------
  3183. features_table:
  3184. .type_table:
  3185.         db '<DIR> '
  3186. ;---------------------------------------------------------------------
  3187. .size_table:
  3188.         db '1023b '
  3189. ;---------------------------------------------------------------------
  3190. .date_table:
  3191.         db '00.00.0000 00:00 '
  3192. ;---------------------------------------------------------------------
  3193. example_name_temp:     
  3194.         db 'temp1.asm',0
  3195. ;---------------------------------------------------------------------
  3196. IM_END:
  3197. ;---------------------------------------------------------------------
  3198. do_not_draw_open_button_label   rb 1
  3199. ;---------------------------------------------------------------------
  3200. ;include_debug_strings
  3201. ;---------------------------------------------------------------------
  3202. align 4
  3203. app_colours:
  3204.  
  3205. w_frame                 rd 1
  3206. w_grab                  rd 1
  3207. w_work_dark             rd 1
  3208. w_work_light    rd 1
  3209. w_grab_text             rd 1
  3210. w_work                  rd 1
  3211. w_work_button           rd 1
  3212. w_work_button_text      rd 1
  3213. w_work_text             rd 1
  3214. w_work_graph            rd 1
  3215. ;---------------------------------------------------------------------
  3216. open_button_coordinates rd 1
  3217. ;---------------------------------------------------------------------
  3218. error_handler_store_input_mode rd 1
  3219. ;---------------------------------------------------------------------
  3220. menu_text_area_1_1:
  3221. rb 256
  3222. ;---------------------------------------------------------------------
  3223.         rb 1024
  3224. stacktop:
  3225. ;---------------------------------------------------------------------
  3226. ; window error message
  3227.         rb 1024
  3228. thread_stack:
  3229. ;---------------------------------------------------------------------
  3230. retrieved_devices_table:
  3231.         rb 200
  3232. ;---------------------------------------------------------------------
  3233. keymap_area:
  3234.         rb 128
  3235. ;---------------------------------------------------------------------
  3236. name_temp_area:
  3237.         rb 256
  3238. ;---------------------------------------------------------------------
  3239. user_selected_name:
  3240.         rb 256
  3241. ;---------------------------------------------------------------------
  3242. param:
  3243.         rb 256
  3244. ;---------------------------------------------------------------------
  3245. path:
  3246.         rb 4096
  3247. ;---------------------------------------------------------------------
  3248. file_name:
  3249.         rb 4096
  3250. ;---------------------------------------------------------------------
  3251. previous_dir_path:
  3252.         rb 4096
  3253. ;---------------------------------------------------------------------
  3254. dir_path:
  3255.         rb 4096
  3256. ;---------------------------------------------------------------------
  3257. dir_path_temp:
  3258.         rb 4096
  3259. ;---------------------------------------------------------------------
  3260. text_work_area:
  3261.         rb 1024
  3262. ;---------------------------------------------------------------------
  3263. procinfo:
  3264. process_info:
  3265.         rb 1024
  3266. ;----------------------
  3267. file_info:
  3268.         rb 40
  3269. I_END:
  3270.