Subversion Repositories Kolibri OS

Rev

Rev 3811 | Blame | Last modification | View Log | Download | RSS feed

  1. ;*****************************************************************************
  2. ; File Browser control 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. macro   file_browser_exit
  30. {
  31. popa        
  32. ret 4
  33. }
  34. ;*****************************************************************************
  35. macro   use_file_browser
  36. {
  37. file_browser:
  38. fb_type                         equ dword [edi]         ;dword
  39. fb_size_x                       equ [edi+4]             ;word
  40. fb_start_x                      equ [edi+6]             ;word
  41. fb_size_y                       equ [edi+8]             ;word
  42. fb_start_y                      equ [edi+10]            ;word
  43. fb_icon_size_y                  equ word [edi+12]       ;word
  44. fb_icon_size_x                  equ word [edi+14]       ;word
  45. fb_line_size_x                  equ word [edi+16]       ;word
  46. fb_line_size_y                  equ word [edi+18]       ;word
  47. fb_type_size_x                  equ word [edi+20]       ;word
  48. fb_size_size_x                  equ word [edi+22]       ;word
  49. fb_date_size_x                  equ word [edi+24]       ;word
  50. fb_attributes_size_x            equ word [edi+26]       ;word
  51. fb_icon_assoc_area              equ dword [edi+28]      ;dword
  52. fb_icon_raw_area                equ dword [edi+32]      ;dword
  53. fb_resolution_raw               equ dword [edi+36]      ;dword
  54. fb_palette_raw                  equ dword [edi+40]      ;dword
  55. fb_directory_path_area          equ dword [edi+44]      ;dword
  56. fb_file_name_area               equ dword [edi+48]      ;dword
  57. fb_select_flag                  equ dword [edi+52]      ;dword
  58. fb_background_color             equ dword [edi+56]      ;dword
  59. fb_select_color                 equ dword [edi+60]      ;dword
  60. fb_seclect_text_color           equ dword [edi+64]      ;dword
  61. fb_text_color                   equ dword [edi+68]      ;dword
  62. fb_reduct_text_color            equ dword [edi+72]      ;dword
  63. fb_marked_text_color            equ dword [edi+76]      ;dword
  64. fb_max_panel_line               equ dword [edi+80]      ;dword
  65. fb_select_panel_counter         equ dword [edi+84]      ;dword
  66. fb_folder_block                 equ dword [edi+88]      ;dword
  67. fb_start_draw_line              equ dword [edi+92]      ;dword
  68. fb_start_draw_cursor_line       equ word [edi+96]       ;word
  69. fb_folder_data                  equ dword [edi+98]      ;dword
  70. fb_temp_counter                 equ dword [edi+102]     ;dword
  71. fb_file_name_length             equ dword [edi+106]     ;dword
  72. fb_marked_file                  equ dword [edi+110]     ;dword
  73. fb_extension_size               equ dword [edi+114]     ;dword
  74. fb_extension_start              equ dword [edi+118]     ;dword
  75. fb_type_table                   equ dword [edi+122]     ;dword
  76. fb_ini_file_start               equ dword [edi+126]     ;dword
  77. fb_ini_file_end                 equ dword [edi+130]     ;dword
  78. fb_draw_scroll_bar              equ dword [edi+134]     ;dword
  79. fb_font_size_y                  equ word [edi+138]      ;dword
  80. fb_font_size_x                  equ word [edi+140]      ;dword
  81. fb_mouse_keys                   equ dword [edi+142]     ;dword
  82. fb_mouse_keys_old               equ dword [edi+146]     ;dword
  83. fb_mouse_pos                    equ dword [edi+150]     ;dword
  84. fb_mouse_keys_delta             equ dword [edi+154]     ;dword
  85. fb_mouse_key_delay              equ dword [edi+158]     ;dword
  86. fb_mouse_keys_tick              equ dword [edi+162]     ;dword
  87. fb_start_draw_cursor_line_2     equ word [edi+166]      ;dword
  88. fb_all_redraw                   equ dword [edi+168]     ;dword
  89. fb_selected_BDVK_adress         equ dword [edi+172]     ;dword
  90. fb_key_action                   equ word [edi+176]      ;word
  91. fb_key_action_num               equ word [edi+178]      ;word
  92. fb_name_temp_area               equ dword [edi+180]     ;dword
  93. fb_max_name_temp_size           equ dword [edi+184]     ;dword
  94. fb_display_name_max_length      equ dword [edi+188]     ;dword
  95. fb_draw_panel_selection_flag    equ dword [edi+192]     ;dword
  96. fb_mouse_pos_old                equ dword [edi+196]     ;dword
  97. fb_marked_counter               equ dword [edi+200]     ;dword
  98. fb_keymap_pointer               equ dword [edi+204]     ;dword
  99. ;---------------------------------------------------------------------
  100. fb_draw_panel:
  101.         pusha
  102.         mov     edi,dword [esp+36]
  103.         call    fb_clear_panel
  104.         call    fb_calc_max_panel_line
  105.         call    fb_calc_folder_sysdata
  106.         call    fb_draw_panel_selection
  107.         call    fb_draw_folder_data
  108.         call    fb_prepare_selected_BDVK_adress
  109. file_browser_exit
  110. ;---------------------------------------------------------------------
  111. fb_draw_panel_1:
  112.         pusha
  113.         mov     eax,fb_select_color
  114.         push    eax
  115.         mov     eax,fb_seclect_text_color
  116.         push    eax
  117.         mov     ax,fb_start_draw_cursor_line
  118.         push    eax
  119.         mov     eax,fb_background_color
  120.         mov     fb_select_color,eax
  121.         mov     eax,fb_text_color
  122.         mov     fb_seclect_text_color,eax
  123.         mov     ax,fb_start_draw_cursor_line_2
  124.         mov     fb_start_draw_cursor_line,ax
  125.         call    fb_draw_panel_selection
  126.         pop     eax
  127.         mov     fb_start_draw_cursor_line,ax
  128.         pop     eax
  129.         mov     fb_seclect_text_color,eax
  130.         pop     eax
  131.         mov     fb_select_color,eax
  132.         call    fb_draw_panel_selection
  133.         call    fb_draw_folder_data
  134.         popa
  135.         ret
  136. ;---------------------------------------------------------------------
  137. fb_clear_panel:
  138.         cmp     fb_all_redraw,1
  139.         jne     @f
  140.         xor     eax,eax
  141.         mov     fb_max_name_temp_size,eax
  142. @@:
  143.         ret
  144. ;---------------------------------------------------------------------
  145. fb_calc_folder_sysdata:
  146.         mov     eax,fb_folder_data
  147.         mov     eax,[eax+4]
  148.         mov     fb_folder_block,eax
  149.         ret
  150. ;---------------------------------------------------------------------
  151. fb_calc_max_panel_line:
  152.         xor     eax,eax
  153.         xor     ebx,ebx
  154.         mov     ax,fb_size_y
  155.         mov     bx,fb_line_size_y
  156.         test    ebx,ebx
  157.         jnz     @f
  158.         inc     ebx
  159. @@:
  160.         xor     edx,edx
  161.         div     ebx
  162.         mov     fb_max_panel_line,eax
  163.         ret
  164. ;---------------------------------------------------------------------
  165. fb_draw_panel_selection:
  166.         cmp     fb_all_redraw,2
  167.         je      .end
  168.         xor     eax,eax
  169.         cmp     fb_select_panel_counter,eax
  170.         je      .end
  171.         mov     eax,fb_folder_block
  172.         sub     eax,fb_start_draw_line
  173.         mov     cx,fb_start_draw_cursor_line
  174.         call    fb_for_all_panel_selection
  175.         mov     eax,fb_folder_block
  176.         dec     eax
  177.         xor     edx,edx
  178.         mov     dx,fb_line_size_y
  179.         imul    eax,edx
  180.         cmp     ax,cx
  181.         jae     @f
  182.         mov     cx,ax
  183. @@:
  184.         mov     fb_start_draw_cursor_line,cx
  185.         mov     ebx,fb_size_x
  186.         add     cx,fb_start_y
  187. ;.1:
  188.         shl     ecx,16
  189.         mov     cx,fb_line_size_y
  190.         mov     edx,fb_select_color
  191.         xor     eax,eax
  192.         mov     ax,fb_icon_size_x
  193.         add     eax,2
  194.         sub     ebx,eax
  195.         shl     eax,16
  196.         push    eax
  197.         add     ebx,eax
  198.         mcall   13
  199.         pop     ebx
  200.         cmp     fb_all_redraw,0
  201.         je      .end
  202.         mov     bx,fb_start_x
  203.         ror     ebx,16
  204.         mcall   13,,,fb_background_color
  205. .end:
  206.         ret
  207. ;---------------------------------------------------------------------
  208. fb_for_all_panel_selection:
  209. ;       dec     eax
  210.         xor     edx,edx
  211.         mov     dx,fb_line_size_y
  212.         imul    eax,edx
  213.         cmp     ax,cx
  214.         jae     @f
  215.         mov     cx,ax
  216. @@:
  217.         mov     eax,fb_max_panel_line
  218.         dec     eax
  219.         imul    eax,edx
  220.         cmp     ax,cx
  221.         jae     @f
  222.         mov     cx,ax
  223. @@:
  224.         ret
  225. ;---------------------------------------------------------------------
  226. fb_draw_folder_data:
  227.         mov     eax,fb_folder_block
  228.         sub     eax,fb_max_panel_line
  229.         test    eax,0x80000000
  230.         jz      .ok_left
  231.         mov     fb_start_draw_line,0
  232.         jmp     @f
  233. .ok_left:
  234.         cmp     eax,fb_start_draw_line
  235.         jae     @f
  236.         mov     fb_start_draw_line,eax
  237. @@:
  238.         mov     bx,fb_start_x
  239.         add     bx,3
  240.         add     bx,fb_icon_size_x
  241.         shl     ebx,16
  242.         mov     bx,fb_start_y
  243.         mov     edx,fb_start_draw_line
  244.         imul    edx,304
  245.         add     edx,fb_folder_data
  246.         add     edx,32+40
  247.         xor     eax,eax
  248. .start:
  249.         pusha
  250.         mov     eax,edx
  251.         sub     eax,fb_folder_data
  252.         sub     eax,32+40
  253.         xor     edx,edx
  254.         mov     ebx,304
  255.         div     ebx
  256.         cmp     eax,fb_folder_block
  257.         je      .end_1
  258. ;.continue_1:
  259.         popa
  260.         cmp     eax,fb_max_panel_line
  261.         je      .end_2
  262.         mov     fb_marked_file,0
  263.         cmp     [edx+299-40],byte 0
  264.         je      @f
  265.         mov     fb_marked_file,1
  266. @@:
  267.         call    fb_clear_line
  268.         call    fb_draw_type_size_date
  269.         cmp     fb_all_redraw,2
  270.         je      .draw_icon
  271.         cmp     fb_all_redraw,0
  272.         je      @f
  273. .draw_icon:
  274.         call    fb_draw_icon
  275. @@:
  276.         push    eax
  277.         xor     eax,eax
  278.         mov     ax,fb_size_x
  279.         push    ebx edx
  280.         xor     ebx,ebx
  281.         mov     bx,fb_font_size_x
  282.         xor     edx,edx
  283.         div     ebx
  284.         pop     edx ebx
  285.         sub     eax,23+2+2
  286.         mov     esi,fb_file_name_length
  287.         mov     fb_temp_counter,0
  288.         mov     fb_display_name_max_length,eax
  289.         cmp     esi,eax
  290.         jbe     @f
  291.         mov     esi,eax
  292.         mov     fb_temp_counter,1
  293. @@:
  294.         cmp     fb_max_name_temp_size,esi
  295.         jae     @f
  296.         mov     fb_max_name_temp_size,esi
  297.         inc     fb_max_name_temp_size
  298. @@:
  299.         mov     ecx,fb_text_color
  300.         cmp     fb_marked_file,0
  301.         je      @f
  302.         mov     ecx,fb_reduct_text_color        ;0xff0000
  303. @@:
  304.         mov     ax,fb_line_size_y
  305.         sub     ax,fb_font_size_y
  306.  
  307.         push    ebx
  308.         mov     bx,ax
  309.         shr     ax,1
  310.         test    bx,1b
  311.         jz      @f
  312.         inc     ax
  313. @@:
  314.         pop     ebx
  315.  
  316.         push    ebx
  317.         add     bx,ax
  318.         call    .draw_name_temp_area
  319.         xor     eax,eax
  320.         mov     ax,fb_font_size_x
  321.         imul    eax,fb_display_name_max_length
  322.         shl     eax,16
  323.         push    edx
  324.         add     ebx,eax
  325.         mov     esi,2
  326.         mov     ecx,fb_reduct_text_color        ;0xff0000
  327.         mov     edx,dword fb_truncated_filename_char
  328.         cmp     fb_temp_counter,0
  329.         jne     @f
  330.         mov     edx,dword fb_truncated_filename_clear
  331.         mov     ecx,fb_text_color
  332. @@:
  333.         push    edi
  334.  
  335.         and     ecx,0x30ffffff
  336.         add     ecx,0x40000000
  337.         mov     eax,fb_background_color
  338.         cmp     fb_draw_panel_selection_flag,1
  339.         jne     @f
  340.         mov     eax,fb_select_color
  341. @@:
  342.         mov     edi,eax
  343.         mcall   4
  344.         pop     edi
  345.         cmp     fb_temp_counter,0
  346.         je      .continue_1
  347.         push    edi
  348.  
  349.         mov     eax,fb_background_color
  350.         cmp     fb_draw_panel_selection_flag,1
  351.         jne     @f
  352.         mov     eax,fb_select_color
  353. @@:
  354.         mov     edi,eax
  355.  
  356.         add     ebx,1 shl 16
  357.         mcall   4
  358.         pop     edi
  359. .continue_1:
  360.         pop     edx
  361. .continue:
  362.         pop     ebx
  363.         add     bx,fb_line_size_y
  364.         add     edx,304
  365.         pop     eax
  366.         inc     eax
  367.         jmp     .start
  368. ;--------------------------------------
  369. .draw_name_temp_area:
  370.         pusha
  371.         mov     ebx,esi
  372.         mov     eax,dword '    '
  373.         mov     ecx,256/4
  374.         cld
  375.  
  376.         push    edi
  377.         mov     edi,fb_name_temp_area
  378.         rep     stosd
  379.         pop     edi
  380.  
  381.         mov     esi,edx
  382.         mov     ecx,ebx
  383.         cld
  384.         mov     edi,fb_name_temp_area
  385.         rep     movsb
  386.         popa
  387.  
  388.         pusha
  389.         mov     edx,fb_name_temp_area
  390.  
  391.         cmp     fb_all_redraw,2
  392.         jne     .draw_name_temp_area_1
  393.         mov     esi,fb_max_name_temp_size
  394.         and     ecx,0xffffff
  395.         add     ecx,0x40000000
  396.  
  397.         mov     eax,fb_background_color
  398.         cmp     fb_draw_panel_selection_flag,1
  399.         jne     @f
  400.         mov     eax,fb_select_color
  401. @@:
  402.         mov     edi,eax
  403. .draw_name_temp_area_1:
  404.         mcall   4
  405.         popa
  406.  
  407.         ret
  408. ;--------------------------------------
  409. .end_1:
  410.         popa
  411. .end_2:
  412.         cmp     fb_all_redraw,1
  413.         jne     @f
  414.  
  415.         mov     ax,fb_start_y
  416.         add     ax,fb_size_y
  417.         mov     cx,bx
  418.         rol     ecx,16
  419.         mov     cx,ax
  420.         mov     eax,ecx
  421.         shr     eax,16
  422.         sub     cx,ax
  423.         cmp     cx,0
  424.         jbe     @f
  425.         mov     bx,fb_size_x
  426.         ror     ebx,16
  427.         sub     bx,fb_icon_size_x
  428.         sub     bx,3
  429.         rol     ebx,16
  430.         mov     edx,fb_background_color ;0xffffff
  431.         mcall   13
  432. @@:
  433.  
  434. .end:
  435. ;       mov     fb_draw_scroll_bar,dword 1
  436.         ret
  437. ;---------------------------------------------------------------------
  438. fb_clear_line:
  439.         mov     fb_draw_panel_selection_flag,0
  440.         pusha
  441.         shl     ebx,16
  442.         shr     ebx,16
  443. ;       dec     ebx
  444.         cmp     fb_select_panel_counter,0
  445.         je      .continue
  446.         mov     ax,fb_start_draw_cursor_line
  447.         add     ax,fb_start_y
  448.         cmp     bx,ax
  449.         jne     .continue
  450.         mov     fb_draw_panel_selection_flag,1
  451.         jmp     .end
  452. .continue:
  453.         cmp     fb_all_redraw,2
  454.         je      .end
  455.         cmp     fb_all_redraw,0
  456.         je      .end
  457.         mov     ebx,[esp+16]
  458.         mov     cx,bx
  459. ;       dec     cx
  460.         rol     ecx,16
  461.         mov     cx,fb_line_size_y
  462.         mov     bx,fb_size_x
  463.         ror     ebx,16
  464.         sub     bx,fb_icon_size_x
  465.         sub     bx,3
  466.         rol     ebx,16
  467.         mov     edx,fb_background_color
  468.         mcall   13
  469. .end:
  470.         popa
  471.         ret
  472. ;---------------------------------------------------------------------
  473. fb_draw_type_size_date:
  474.         pusha
  475.         mov     eax,fb_type_table
  476.         test    [edx-40],byte 0x10
  477.         jz      .copy_type
  478.         mov     [eax],dword '<DIR'
  479.         mov     [eax+4],word '> '
  480.         mov     fb_file_name_length,0
  481.         mov     fb_extension_size,0
  482.         jmp     .start
  483. .copy_type:
  484.         mov     [eax],dword '   '
  485.         mov     [eax+4],word '  '
  486. .start:
  487.         mov     esi,edx
  488.         xor     eax,eax
  489. @@:
  490.         cld
  491.         lodsb
  492.         test    eax,eax
  493.         jnz     @b
  494.         mov     fb_file_name_length,esi
  495.         sub     fb_file_name_length,edx
  496.         mov     fb_temp_counter,esi
  497.         test    [edx-40],byte   0x10
  498.         jnz     .size
  499. ;@@:
  500.         dec     esi
  501.         dec     edx
  502. @@:
  503.         std
  504.         lodsb
  505.         cmp     esi,edx
  506.         je      .extension_size_0
  507.         cmp     al,'.'
  508.         jnz     @b
  509.         add     esi,2
  510.         mov     fb_extension_start,esi
  511.         mov     ecx,fb_temp_counter
  512.         sub     ecx,esi
  513.         inc     ecx
  514.         mov     fb_extension_size,ecx
  515.         sub     fb_file_name_length,ecx
  516.         cmp     ecx,2
  517.         ja      @f
  518.         inc     fb_file_name_length
  519. @@:
  520.         sub     ecx,2
  521.         cmp     ecx,4
  522.         jbe     @f
  523.         mov     ecx,3
  524.         mov     eax,fb_type_table
  525.         mov     [eax+3],word '..'
  526. @@:
  527.         push    edi
  528.         mov     edi,fb_type_table
  529.         cld
  530.         rep     movsb
  531.         pop     edi
  532.         inc     edx
  533.         jmp     .size
  534. .extension_size_0:
  535.         inc     edx
  536.         mov     fb_extension_size,0
  537. .size:
  538.         mov     eax,fb_type_table
  539.         test    [edx-40],byte 0x10
  540.         jz      .copy_size
  541.         mov     [eax+6],dword '----'
  542.         mov     [eax+6+4],word '- '
  543.         jmp     .date
  544. ;-----------------------------------------
  545. .call_decimal_string:
  546.         mov     ebx,fb_type_table
  547.         add     ebx,6
  548.         call    fb_decimal_string_4
  549.         mov     [ebx],dl
  550.         jmp     .size_convert_end
  551. ;-----------------------------------------
  552. .copy_size:
  553. ;/0x40000000 - Gb
  554. ;/0x100000 - Mb
  555. ;/0x400 Kb
  556.         mov     [eax+6],dword '    '
  557.         mov     [eax+6+4],word '  '
  558.         push    ebx
  559.         push    edx
  560.         mov     eax,[edx-40+32]
  561.         mov     ebx,eax
  562.         shr     eax,30 ; /(1024*1024*1024)
  563.         test    eax,eax
  564.         jz      @f
  565.         mov     dl,byte 'G'
  566.         jmp     .call_decimal_string
  567. @@:
  568.         mov     eax,ebx
  569.         shr     eax,20 ; /(1024*1024)
  570.         test    eax,eax
  571.         jz      @f
  572.         mov     dl,byte 'M'
  573.         jmp     .call_decimal_string
  574. @@:
  575.         mov     eax,ebx
  576.         shr     eax,10 ; /1024
  577.         test    eax,eax
  578.         jz      @f
  579.         mov     dl,byte 'K'
  580.         jmp     .call_decimal_string
  581. @@:
  582.         mov     eax,ebx
  583. ;.size_convert:
  584.         mov     ebx,fb_type_table
  585.         add     ebx,6
  586.         call    fb_decimal_string_4
  587. .size_convert_end:
  588.         mov     eax,fb_type_table
  589.         add     eax,6
  590.         push    edi
  591.         cmp     [eax],byte '0'
  592.         jne     @f
  593.         mov     [eax],byte ' '
  594. @@:
  595.         add     eax,3
  596. @@:
  597.         cmp     [eax+1],byte ' '
  598.         jne     @f
  599.         mov     esi,eax
  600.         mov     edi,esi
  601.         inc     edi
  602.         mov     ecx,5
  603.         std
  604.         rep     movsb
  605.         jmp     @r
  606. @@:
  607.         pop     edi
  608.         pop     edx
  609.         pop     ebx
  610. ;-----------------------------------------
  611. .date:
  612.         xor     eax,eax
  613.         mov     al,[edx-40+28]
  614.         push    ebx
  615.         mov     ebx,fb_type_table
  616.         add     ebx,12
  617.         call    fb_decimal_string_2 ; day
  618.         mov     al,[edx-40+29]
  619.         mov     ebx,fb_type_table
  620.         add     ebx,12+3
  621.         call    fb_decimal_string_2 ; month
  622.         mov     ax,[edx-40+30]
  623.         mov     ebx,fb_type_table
  624.         add     ebx,12+15
  625.         call    fb_decimal_string_4 ; year
  626.         mov     ebx,fb_type_table
  627.         mov     ax,[ebx+12+15+2]
  628.         mov     [ebx+12+6],ax
  629.         pop     ebx
  630. ;-----------------------------------------
  631.         ror     ebx,16
  632.         add     bx,fb_size_x
  633.         sub     ebx,122+12+15
  634.         rol     ebx,16
  635.         mov     ecx,fb_text_color
  636.         cmp     fb_marked_file,0
  637.         je      @f
  638.         mov     ecx,fb_reduct_text_color        ;0xff0000
  639. @@:
  640.         mov     edx,fb_type_table
  641.         mov     esi,20
  642.  
  643.         mov     ax,fb_line_size_y
  644.         sub     ax,fb_font_size_y
  645.  
  646.         push    ebx
  647.         mov     bx,ax
  648.         shr     ax,1
  649.         test    bx,1b
  650.         jz      @f
  651.         inc     ax
  652. @@:
  653.         pop     ebx
  654.         add     bx,ax
  655.         cmp     fb_all_redraw,2
  656.         jne     .draw  ;@f
  657.         and     ecx,0xffffff
  658.         add     ecx,0x40000000
  659.  
  660.         mov     eax,fb_background_color
  661.         cmp     fb_draw_panel_selection_flag,1
  662.         jne     @f
  663.         mov     eax,fb_select_color
  664. @@:
  665.         mov     edi,eax
  666. .draw:
  667.         mcall   4
  668.         popa
  669.         ret
  670. ;---------------------------------------------------------------------
  671. fb_draw_icon:
  672.         pusha
  673.         xor     eax,eax
  674.         mov     ax,fb_icon_size_y
  675.         mov     ebx,fb_resolution_raw
  676.         imul    eax,ebx
  677.         mov     bx,fb_icon_size_x
  678.         imul    eax,ebx
  679.         mov     ebx,eax
  680.         shr     eax,3
  681.         test    ebx,111b
  682.         jz      @f
  683.         inc     eax
  684. @@:
  685.         test    [edx-40],byte 0x10
  686.         jnz     .draw_dir_pic
  687.  
  688.         call    fb_get_icon_number
  689. ;       mov     ebx,2
  690.         imul    ebx,eax ;16*16*3
  691.         jmp     .draw
  692. .draw_dir_pic:
  693.         xor     ebx,ebx
  694.         cmp     [edx],word '..'
  695.         jne     .draw
  696.         mov     ebx,eax ;16*16*3
  697. .draw:
  698.         add     ebx,fb_icon_raw_area
  699.         mov     cx,fb_icon_size_x
  700.         shl     ecx,16
  701.         mov     cx,fb_icon_size_y
  702.        
  703.         mov     edx,[esp+16]
  704.         ror     edx,16
  705.         sub     edx,2
  706.         sub     dx,fb_icon_size_x
  707.         rol     edx,16
  708.  
  709.         mov     ax,fb_line_size_y
  710.         sub     ax,fb_icon_size_y
  711.         shr     ax,1
  712.         add     dx,ax
  713.  
  714.         mov     esi,fb_resolution_raw
  715.  
  716.         xor     ebp,ebp
  717.        
  718.         push    edi
  719.         mov     edi,fb_palette_raw
  720.         mcall   65
  721.         pop     edi
  722.         popa
  723.         ret
  724. ;---------------------------------------------------------------------
  725. ; Convert of a binary number in decimal string form
  726. ; Input:
  727. ;  AX - value
  728. ;  EBX - address of string
  729. ; Output:
  730. ;  string contains the number, marked the end of the code 0
  731. fb_decimal_string_2:
  732.         push    eax ebx ecx edx
  733.         xor     ecx,ecx
  734.         mov     [ebx],byte '0'
  735.         inc     ebx
  736. .p3:
  737.         xor     edx,edx
  738.         push    ebx
  739.         mov     ebx,10
  740.         div     ebx
  741.         pop     ebx
  742.         add     edx,48
  743.         push    edx
  744.         inc     ecx
  745.         cmp     ax,0
  746.         jne     .p3
  747.         cmp     ecx,1
  748.         jbe     .p4
  749.         mov     ecx,2
  750.         dec     ebx
  751. .p4:
  752.         pop     edx
  753.         mov     [ebx],dl
  754.         inc     ebx
  755.         loop    .p4
  756.         pop     edx ecx ebx eax
  757.         ret
  758. ;---------------------------------------------------------------------
  759. fb_decimal_string_4:
  760.         push    eax ecx edx
  761.         xor     ecx,ecx
  762.         mov     [ebx],byte '0'
  763.         inc     ebx
  764. .p3:
  765.         xor     edx,edx
  766.         push    ebx
  767.         mov     ebx,10
  768.         div     ebx
  769.         pop     ebx
  770.         add     edx,48
  771.         push    edx
  772.         inc     ecx
  773.         cmp     eax,0
  774.         jne     .p3
  775.         cmp     ecx,3
  776.         jbe     .p4
  777.         mov     ecx,4
  778.         dec     ebx
  779. .p4:
  780.         pop     edx
  781.         mov     [ebx],dl
  782.         inc     ebx
  783.         loop    .p4
  784.         pop     edx ecx eax
  785.         ret
  786. ;---------------------------------------------------------------------
  787. fb_get_icon_number:
  788.         push    eax
  789.         mov     ebp,fb_extension_size
  790.         test    ebp,ebp
  791.         je      .end
  792.         dec     ebp
  793.         test    ebp,ebp
  794.         je      .end
  795.         dec     ebp
  796.         test    ebp,ebp
  797.         je              .end
  798. @@:
  799.         mov     edx,fb_ini_file_end
  800.         sub     edx,ebp
  801.         mov     eax,fb_ini_file_start
  802.         dec     eax
  803. .search_association:
  804.         cmp     edx,eax
  805.         jbe     .end
  806.         mov     esi,fb_extension_start
  807.         inc     eax
  808.         mov     ecx,eax
  809.         mov     ebx,eax
  810.         cld
  811. .check:
  812.         lodsb
  813.         test    al,al
  814.         jz      @f
  815.         call    fb_char_toupper
  816.         shl     ax,8
  817. .search_start_of_line:
  818.         mov     al,[ebx]
  819.         inc     ebx
  820.         call    fb_char_toupper
  821.         cmp     al,ah
  822.         je      .check
  823.         mov     eax,ecx
  824.         jmp     .search_association
  825. @@:
  826.         mov     esi,ecx
  827.         add     esi,ebp
  828.         lodsb
  829.         cmp     al,byte '='
  830.         jne     .end
  831.         mov     eax,ecx
  832.         cmp     eax,fb_ini_file_start
  833.         je      @f
  834.         dec     eax
  835.         cmp [eax],byte 15
  836.         ja      .end
  837. @@:
  838.         xor     ebx,ebx
  839.         xor     eax,eax
  840.         mov     ecx,9
  841.         call    .calculate
  842.         cmp al,0x30
  843.         jb      .end
  844.         cmp     al,0x39
  845.         ja      .end
  846.         sub     eax,0x30
  847. @@:
  848.         call    .calculate_1
  849.         cmp al,0x30
  850.         jb      @f
  851.         cmp     al,0x39
  852.         ja      @f
  853.         sub     eax,0x30
  854.        
  855.         lea ebx,[ebx+ebx*4]
  856.         shl     ebx,1
  857.        
  858.         dec     ecx
  859.         jnz     @b
  860. @@:
  861.         pop     eax
  862.         ret
  863. .end:
  864.         mov     ebx,2
  865.         pop     eax
  866.         ret
  867. ;---------------------------------------------------------------------
  868. .calculate_1:
  869.         add     ebx,eax
  870. .calculate:
  871.         xor     eax,eax
  872.         cld
  873.         lodsb
  874.         ret
  875. ;---------------------------------------------------------------------
  876. fb_char_toupper:
  877. ; convert character to uppercase, using cp866 encoding
  878. ; in: al=symbol
  879. ; out: al=converted symbol
  880.         cmp     al,'a'
  881.         jb      .ret
  882.         cmp     al, 'z'
  883.         jbe     .az
  884.         cmp     al, ' '
  885.         jb      .ret
  886.         cmp     al, 'à'
  887.         jb      .rus1
  888.         cmp     al, 'ï'
  889.         ja      .ret
  890. ; 0xE0-0xEF -> 0x90-0x9F
  891.         sub     al, 'à'-''
  892. .ret:
  893.         ret
  894. .rus1:
  895. ; 0xA0-0xAF -> 0x80-0x8F
  896. .az:
  897.         and     al, not 0x20
  898.         ret
  899. ;---------------------------------------------------------------------
  900. fb_char_todown:
  901. ; convert character to lowercase, using cp866 encoding
  902. ; in: al=symbol
  903. ; out: al=converted symbol
  904.         cmp     al, 'A'
  905.         jb      .ret
  906.         cmp     al, 'Z'
  907.         jbe     .az
  908.         cmp     al, '€'
  909.         jb      .ret
  910.         cmp     al, ''
  911.         jb      .rus1
  912.         cmp     al, 'Ÿ'
  913.         ja      .ret
  914. ; 0x90-0x9F -> 0xE0-0xEF
  915.         add     al, 'à'-''
  916. .ret:
  917.         ret
  918. .rus1:
  919. ; 0x80-0x8F -> 0xA0-0xAF
  920. .az:
  921.         add     al, 0x20
  922.         ret
  923. ;---------------------------------------------------------------------
  924. fb_truncated_filename_char:
  925.         db      '..'
  926. fb_truncated_filename_clear:
  927.         db      '  '
  928. ;---------------------------------------------------------------------
  929. ;*****************************************************************************
  930. ;*****************************************************************************
  931. ; mouse event
  932. ;*****************************************************************************
  933. ;*****************************************************************************
  934. fb_mouse:
  935.         pusha
  936.         mov     edi,dword [esp+36]
  937. ;-------------------------------------------------------
  938.         mcall   37,2
  939.         mov     ebx,fb_mouse_keys
  940.         mov     fb_mouse_keys_old,ebx
  941.         mov     fb_mouse_keys,eax
  942.        
  943.         mcall   37,1
  944.         mov     ebx,fb_mouse_pos
  945.         mov     fb_mouse_pos_old,ebx
  946.         mov     fb_mouse_pos,eax
  947.        
  948.         test    eax,0x80000000
  949.         jnz     .exit_fb
  950.         test    eax,0x8000
  951.         jnz     .exit_fb
  952.  
  953.         mov     ebx,eax
  954.         shr     ebx,16  ; x position
  955.         shl     eax,16
  956.         shr     eax,16  ; y position
  957.        
  958.         mov     cx,fb_start_x
  959.         cmp     bx,cx
  960.         jb      .exit_fb
  961.        
  962.         add     cx,fb_size_x
  963.         cmp     bx,cx
  964.         ja      .exit_fb
  965.  
  966.         mov     cx,fb_start_y
  967.         cmp     ax,cx
  968.         jb      .exit_fb
  969.        
  970.         add     cx,fb_size_y
  971.         cmp     ax,cx
  972.         ja      .exit_fb
  973.  
  974.         cmp     fb_mouse_keys,0
  975.         jz      @f
  976.         mov     fb_select_flag,1
  977. @@:
  978. ;-------------------------------------------------------        
  979.         cmp     fb_mouse_keys_delta,1
  980.         je      .enter_1
  981.  
  982.         cmp     fb_mouse_keys,0
  983.         jz      .exit_fb
  984. .start:
  985.         sub     ax,fb_start_y
  986.         xor     ebx,ebx
  987.         mov     bx,fb_line_size_y
  988.         xor     edx,edx
  989.         push    eax
  990.         div     ebx
  991.         pop     eax
  992.         sub     eax,edx
  993.         xor     edx,edx
  994.         cmp     fb_select_panel_counter,edx
  995.         jne     @f
  996.         mov     fb_mouse_keys_delta,0
  997.         jmp     .continue
  998. @@:
  999.         xor     edx,edx
  1000.         cmp     fb_start_draw_cursor_line,ax
  1001.         jne     @f
  1002.         cmp     fb_mouse_keys,edx
  1003.         jnz     .continue
  1004. @@:
  1005.         mov     fb_mouse_keys_delta,edx
  1006. .continue:
  1007.         xor     ebx,ebx
  1008.         mov     bx,fb_line_size_y
  1009.         imul    ebx,fb_folder_block
  1010.         cmp     eax,ebx
  1011.         jb      @f
  1012.         xor     edx,edx
  1013.         mov     dx,fb_line_size_y
  1014.         sub     ebx,edx
  1015.         cmp     bx,fb_start_draw_cursor_line
  1016.         je      .enter
  1017.         call    .store_old_cursor_line
  1018.         mov     fb_start_draw_cursor_line,bx
  1019.         jmp     .continue_1
  1020. @@:
  1021.         cmp     ax,fb_start_draw_cursor_line
  1022.         je      .enter
  1023.         call    .store_old_cursor_line
  1024.         mov     fb_start_draw_cursor_line,ax
  1025. .continue_1:
  1026.         test    fb_mouse_keys,10b
  1027.         jne     .mark_mouse
  1028.         jmp     .enter_1
  1029. .continue_2:
  1030.         mov     ax,fb_start_draw_cursor_line
  1031.         cmp     ax,fb_start_draw_cursor_line_2
  1032.         je      .exit_fb
  1033.  
  1034.         call    fb_draw_panel_1
  1035.         jmp     .exit_fb
  1036. .enter:
  1037.         cmp     fb_mouse_keys_delta,2
  1038.         je      .enter_2
  1039.         cmp     fb_mouse_keys_delta,1
  1040.         je      .enter_1
  1041.         mov     eax,fb_mouse_keys_old
  1042.         cmp     fb_mouse_keys,eax
  1043.         jz      .exit_fb
  1044.         test    fb_mouse_keys,10b
  1045.         jne     .mark_mouse
  1046.         xor     edx,edx
  1047.         inc     edx
  1048.         mov     fb_mouse_keys_delta,edx
  1049.         jmp     .exit_fb
  1050. .enter_1:
  1051. ;       mov     eax,fb_mouse_keys_old
  1052. ;       cmp     fb_mouse_keys,eax
  1053. ;       jz      .exit_fb
  1054.         test    fb_mouse_keys,10b
  1055.         jne     .mark_mouse
  1056.         mov     edx,2
  1057.         mov     fb_mouse_keys_delta,edx
  1058.         mcall   26,9
  1059.         add     eax,fb_mouse_key_delay
  1060.         mov     fb_mouse_keys_tick,eax
  1061.         jmp     .continue_2
  1062. .enter_2:
  1063.         mcall   26,9
  1064.         cmp     eax,fb_mouse_keys_tick
  1065.         ja      @f
  1066. ;       mov     eax,fb_mouse_pos_old
  1067. ;       cmp     eax,fb_mouse_pos
  1068. ;       jne     @f
  1069.         mov     eax,fb_mouse_keys_old
  1070.         cmp     fb_mouse_keys,eax
  1071.         jz      @f
  1072.         test    fb_mouse_keys,10b
  1073.         jne     .mark_mouse
  1074.         call    .enter_3
  1075.         jmp     .exit_fb
  1076. @@:
  1077.         xor     eax,eax
  1078.         inc     eax
  1079.         mov     fb_mouse_keys_delta,eax
  1080. ;-------------------------------------------------------
  1081. .exit_fb:
  1082.         call    fb_prepare_selected_BDVK_adress
  1083. file_browser_exit
  1084. ;-------------------------------------------------------
  1085. .mark_mouse:
  1086.         call    fb_key.mark_1
  1087.         call    fb_draw_panel_1
  1088.         xor     eax,eax
  1089.         mov     fb_mouse_keys_delta,eax
  1090.         jmp     .exit_fb       
  1091. ;-------------------------------------------------------
  1092. .enter_3:
  1093.         xor     eax,eax
  1094.         mov     fb_mouse_keys,eax
  1095.         mov     fb_mouse_keys_old,eax
  1096.         mov     eax,3
  1097.         mov     fb_mouse_keys_delta,eax
  1098.         xor     eax,eax
  1099.         mov     fb_max_name_temp_size,eax
  1100.         ret
  1101. ;-------------------------------------------------------
  1102. .store_old_cursor_line:
  1103.         push    eax
  1104.         mov     ax,fb_start_draw_cursor_line
  1105.         mov     fb_start_draw_cursor_line_2,ax
  1106.         xor     eax,eax
  1107. ;       mov     fb_mouse_keys_delta,eax
  1108.         pop     eax
  1109.         ret
  1110. ;*****************************************************************************
  1111. ;*****************************************************************************
  1112. fb_prepare_selected_BDVK_adress:
  1113.         xor     eax,eax
  1114.         mov     ax,fb_start_draw_cursor_line
  1115.         xor     ebx,ebx
  1116.         mov     bx,fb_line_size_y
  1117.         xor     edx,edx
  1118.         div     ebx
  1119.         add     eax,fb_start_draw_line
  1120.         imul    eax,304
  1121.         add     eax,32
  1122.         add     eax,fb_folder_data
  1123.         mov     fb_selected_BDVK_adress,eax
  1124.         ret
  1125. ;*****************************************************************************
  1126. ;*****************************************************************************
  1127. ; key event
  1128. ; 1 - arrow down
  1129. ; 2 - arrow up
  1130. ; 3 - PageDown
  1131. ; 4 - PageUp
  1132. ; 5 - Home
  1133. ; 6 - End
  1134. ; 7 - Enter
  1135. ; 8 - Insert (Mark)
  1136. ; 9 - Mark All
  1137. ; 10 - Unmark All
  1138. ; 11 - Invert Mark
  1139. ; 12 - Search with key
  1140. ;*****************************************************************************
  1141. ;*****************************************************************************
  1142. fb_key:
  1143.         pusha
  1144.         mov     edi,dword [esp+36]
  1145. ;-------------------------------------------------------
  1146.         xor     eax,eax
  1147.         mov     ax,fb_key_action
  1148.         shl     eax,2
  1149.         add     eax,dword fb_key_table
  1150.         cmp     eax,fb_key_table.end
  1151.         jae     .exit_fb
  1152.         cmp     [eax],dword 0
  1153.         je      .exit_fb
  1154.         jmp     dword [eax]
  1155. ;-------------------------------------------------------
  1156. .arrow_down:
  1157.         mov     ax,fb_start_draw_cursor_line
  1158.         add     ax,fb_line_size_y
  1159.         add     ax,fb_line_size_y
  1160.         cmp     ax,word fb_size_y
  1161.         ja      @f
  1162. .add_1:
  1163.         call    fb_mouse.store_old_cursor_line
  1164.         mov     ax,fb_start_draw_cursor_line
  1165.         add     ax,fb_line_size_y
  1166.         mov     fb_start_draw_cursor_line,ax
  1167.         call    fb_draw_panel_1
  1168.         jmp     .exit_fb
  1169. @@:
  1170.         mov     eax,fb_folder_block
  1171.         sub     eax,fb_max_panel_line
  1172.         test    eax,0x80000000
  1173.         jnz     .page_down_2
  1174.  
  1175.         call    .prepare_data_down
  1176.         ja      @f
  1177.  
  1178.         cmp     fb_start_draw_line,eax
  1179.         je      .exit_fb
  1180. @@:
  1181.         inc     fb_start_draw_line
  1182.         call    fb_draw_panel_3
  1183.         jmp     .exit_fb
  1184. ;-------------------------------------------------------
  1185. .arrow_up:
  1186.         mov     ax,fb_start_draw_cursor_line
  1187.         add     ax,fb_start_y
  1188.         cmp     fb_start_y,ax
  1189.         je      @f
  1190.         call    fb_mouse.store_old_cursor_line
  1191.         mov     ax,fb_start_draw_cursor_line
  1192.         sub     ax,fb_line_size_y
  1193.         mov     fb_start_draw_cursor_line,ax
  1194.         call    fb_draw_panel_1
  1195.         jmp     .exit_fb
  1196. @@:
  1197.         cmp     fb_start_draw_line,0
  1198.         je      .exit_fb
  1199.         dec     fb_start_draw_line
  1200.         call    fb_draw_panel_3
  1201.         jmp     .exit_fb
  1202. ;-------------------------------------------------------
  1203. .page_down:
  1204.         mov     eax,fb_max_panel_line
  1205.         mov     ebx,fb_folder_block
  1206.         sub     ebx,eax
  1207.         test    ebx,0x80000000
  1208.         jnz     .page_down_2
  1209.         sub     ebx,fb_start_draw_line
  1210.         cmp     ebx,eax
  1211.         ja      .page_down_3
  1212.         mov     ebx,fb_folder_block
  1213.         sub     ebx,eax
  1214.         call    .prepare_data_down
  1215.         ja      @f
  1216.         cmp     ebx,fb_start_draw_line
  1217.         je      .exit_fb
  1218. @@:
  1219.         mov     fb_start_draw_line,ebx
  1220. .page_down_0:
  1221.         dec     eax
  1222.         xor     ebx,ebx
  1223.         mov     bx,fb_line_size_y
  1224.         imul    eax,ebx
  1225. .page_down_1:
  1226.         call    fb_mouse.store_old_cursor_line
  1227.         mov     fb_start_draw_cursor_line,ax
  1228.         call    fb_draw_panel_2
  1229.         jmp     .exit_fb
  1230. .page_down_2:
  1231.         mov     eax,fb_folder_block
  1232.         sub     eax,fb_start_draw_line
  1233.         dec     eax
  1234.         xor     ebx,ebx
  1235.         mov     bx,fb_line_size_y
  1236.         imul    eax,ebx
  1237.         cmp     ax,fb_start_draw_cursor_line
  1238.         jbe     .exit_fb
  1239.         jmp     .page_down_1
  1240. .page_down_3:
  1241.         add     fb_start_draw_line,eax
  1242.         call    fb_draw_panel_2
  1243.         jmp     .exit_fb
  1244. ;-------------------------------------------------------
  1245. .prepare_data_down:
  1246.         mov     ecx,fb_folder_block
  1247.         sub     ecx,fb_start_draw_line
  1248.         dec     ecx
  1249.         xor     edx,edx
  1250.         mov     dx,fb_line_size_y
  1251.         imul    ecx,edx
  1252.         cmp     cx,fb_start_draw_cursor_line
  1253.         ret
  1254. ;-------------------------------------------------------
  1255. .page_up:
  1256.         mov     eax,fb_max_panel_line
  1257.         mov     ebx,fb_start_draw_line
  1258.         sub     ebx,eax
  1259.         test    ebx,0x80000000
  1260.         jz      @f
  1261.         cmp     fb_start_draw_line,0
  1262.         jne     .page_up_1
  1263.         cmp     fb_start_draw_cursor_line,0
  1264.         je      .exit_fb
  1265.         mov     fb_start_draw_cursor_line,0
  1266. .page_up_1:
  1267.         mov     fb_start_draw_line,0
  1268.         call    fb_draw_panel_2
  1269.         jmp     .exit_fb
  1270. @@:
  1271.         sub     fb_start_draw_line,eax
  1272.         call    fb_draw_panel_2
  1273.         jmp     .exit_fb
  1274. ;-------------------------------------------------------
  1275. .home:
  1276.         cmp     fb_start_draw_line,0
  1277.         jne     @f
  1278.         cmp     fb_start_draw_cursor_line,0
  1279.         je      .exit_fb
  1280. @@:
  1281.         mov     fb_start_draw_line,0
  1282.         mov     fb_start_draw_cursor_line,0
  1283.         call    fb_mouse.store_old_cursor_line
  1284.         call    fb_draw_panel_2
  1285.         jmp     .exit_fb
  1286. ;-------------------------------------------------------
  1287. .end:
  1288.         mov     eax,fb_folder_block
  1289.         sub     eax,fb_max_panel_line
  1290.         test    eax,0x80000000
  1291.         jnz     .page_down_2
  1292.         call    .prepare_data_down
  1293.         ja      @f
  1294.         cmp     eax,fb_start_draw_line
  1295.         je      .exit_fb
  1296. @@:
  1297.         mov     fb_start_draw_line,eax
  1298.         mov     eax,fb_max_panel_line
  1299.         jmp     .page_down_0
  1300. ;-------------------------------------------------------
  1301. .enter:
  1302.         call    fb_mouse.enter_3
  1303.         jmp     .exit_fb
  1304. ;-------------------------------------------------------
  1305. .mark:
  1306.         call    .mark_1
  1307.         jmp     .arrow_down    
  1308. ;-------------------------------------------------------
  1309. .mark_1:
  1310.         xor     eax,eax
  1311.         mov     ax,fb_start_draw_cursor_line
  1312.         xor     edx,edx
  1313.         xor     ebx,ebx
  1314.         mov     bx,fb_line_size_y
  1315.         div     ebx
  1316.         mov     esi,fb_start_draw_line
  1317.         add     esi,eax
  1318.         imul    esi,304
  1319.         add     esi,fb_folder_data
  1320.  
  1321.         add     esi,32+299
  1322.         mov     al,[esi]
  1323.         and     al,1
  1324.        
  1325.         test    al,al
  1326.         jnz     @f
  1327.         inc     fb_marked_counter
  1328.         jmp     .mark_2
  1329. @@:
  1330.         dec     fb_marked_counter
  1331. .mark_2:
  1332.         mov     al,[esi]
  1333.         inc     al
  1334.         and     al,1
  1335.         mov     [esi],al
  1336.         ret
  1337. ;-------------------------------------------------------
  1338. .mark_all:
  1339.         mov     fb_temp_counter,0
  1340. .mark_all_1:   
  1341.         mov     ebp,fb_folder_block
  1342. .mark_all_2:
  1343.         mov     ebx,ebp
  1344.         dec     ebx
  1345.         imul    ebx,304
  1346.         add     ebx,fb_folder_data
  1347.         add     ebx,32+40
  1348.         cmp     [ebx],word '..'
  1349.         jne     .mark_all_3
  1350.         cmp     [ebx+2],byte 0
  1351.         je      @f
  1352. .mark_all_3:
  1353.         call    .select_mark_action
  1354. @@:
  1355.         dec     ebp
  1356.         jnz     .mark_all_2
  1357.        
  1358.         call    fb_draw_panel_3
  1359.         cmp     fb_temp_counter,0
  1360.         jne     @f
  1361.         mov     eax,fb_folder_block
  1362.         jmp     .mark_all_4
  1363. @@:
  1364.         cmp     fb_temp_counter,1
  1365.         jne     @f
  1366.         mov     fb_marked_counter,0
  1367.         jmp     .exit_fb
  1368. @@:
  1369.         mov     eax,fb_folder_block
  1370.         sub     eax,fb_marked_counter
  1371. .mark_all_4:
  1372.         dec     eax
  1373.         mov     fb_marked_counter,eax
  1374.         jmp     .exit_fb
  1375. ;-------------------------------------------------------       
  1376. .select_mark_action:
  1377.         add     ebx,299-40
  1378.         cmp     fb_temp_counter,0
  1379.         jne     @f
  1380.         mov     [ebx],byte 1
  1381.         jmp     .select_mark_action_1
  1382. @@:
  1383.         cmp     fb_temp_counter,1
  1384.         jne     @f
  1385.         mov     [ebx],byte 0
  1386.         jmp     .select_mark_action_1
  1387. @@:
  1388.         mov     al,[ebx]
  1389.         inc     al
  1390.         and     al,1
  1391.         mov     [ebx],al
  1392. .select_mark_action_1:
  1393.         ret
  1394. ;-------------------------------------------------------
  1395. .unmark_all:
  1396.         mov     fb_temp_counter,1
  1397.         jmp     .mark_all_1
  1398. ;-------------------------------------------------------
  1399. .invert_mark:
  1400.         mov     fb_temp_counter,2
  1401.         jmp     .mark_all_1
  1402. ;-------------------------------------------------------
  1403. ;  * bit 0  (mask 1): left Shift is pressed
  1404. ;  * bit 1  (mask 2): right Shift is pressed
  1405. ;  * bit 2  (mask 4): left Ctrl is pressed
  1406. ;  * bit 3  (mask 8): right Ctrl is pressed
  1407. ;  * bit 4  (mask 0x10): left Alt is pressed
  1408. ;  * bit 5  (mask 0x20): right Alt is pressed
  1409. ;  * bit 6  (mask 0x40): CapsLock is on
  1410. ;  * bit 7  (mask 0x80): NumLock is on
  1411. ;  * bit 8  (mask 0x100): ScrollLock is on
  1412. ;  * bit 9  (mask 0x200): left Win is pressed
  1413. ;  * bit 10 (mask 0x400): right Win is pressed
  1414. ;-------------------------------------------------------
  1415. .search_with_key:
  1416.         mcall   66,3
  1417.         test    al,11b
  1418.         jnz     .shift_layout
  1419.  
  1420.         test    al,110000b
  1421.         jnz     .alt_layout
  1422.  
  1423.         mov     ecx,1   ; Normal
  1424.         jmp     .get_keyboard_layout
  1425.  
  1426. .shift_layout:
  1427.         mov     ecx,2   ; Shift
  1428.         jmp     .get_keyboard_layout
  1429.  
  1430. .alt_layout:
  1431.         mov     ecx,3   ; Alt
  1432. .get_keyboard_layout:
  1433.         mcall   26,2,,fb_keymap_pointer
  1434.         xor     eax,eax
  1435.         mov     ax,fb_key_action_num
  1436.         add     eax,fb_keymap_pointer
  1437.         mov     al,[eax]
  1438.         and     eax,0xff
  1439.         call    fb_char_todown
  1440.         mov     ah,al
  1441.         xor     esi,esi
  1442.         push    eax
  1443.         movzx   eax,fb_start_draw_cursor_line
  1444.         movzx   ebx,fb_line_size_y
  1445.         xor     edx,edx
  1446.         div     ebx
  1447.         add     si,ax   ;fb_start_draw_cursor_line
  1448.         pop     eax
  1449.         add     esi,fb_start_draw_line
  1450.         mov     ecx,esi
  1451.         xor     ebx,ebx
  1452.         inc     ecx
  1453.         cmp     ecx,fb_folder_block
  1454.         ja      .reset_data
  1455.  
  1456. .first_entry:
  1457.         imul    esi,304
  1458.         add     esi,fb_folder_data
  1459.         add     esi,40+32
  1460. @@:
  1461.         add     esi,304
  1462.         mov     al,[esi]
  1463.         call    fb_char_todown
  1464.         cmp     ah,al
  1465.         je      .match
  1466.  
  1467.         inc     ecx
  1468.         cmp     ecx,fb_folder_block
  1469.         jb      @b
  1470.  
  1471. .reset_data:
  1472.         xor     esi,esi
  1473.        
  1474.         dec     esi
  1475.         cmp     ebx,2
  1476.         jae     .exit_fb
  1477.  
  1478.         xor     ecx,ecx
  1479.         inc     ebx
  1480.         jmp     .first_entry
  1481.  
  1482. .match:
  1483.         mov     fb_start_draw_line,ecx
  1484.         mov     eax,fb_folder_block
  1485.         mov     ebx,fb_max_panel_line
  1486.         sub     eax,ebx
  1487.         jbe     .1
  1488.  
  1489.         cmp     eax,ecx
  1490.         jbe     @f
  1491.        
  1492.         xor     ecx,ecx
  1493.         jmp     .2
  1494. @@:
  1495.         mov     fb_start_draw_line,eax
  1496.         mov     eax,fb_folder_block
  1497.         sub     eax,ecx
  1498.  
  1499.         mov     ecx,fb_max_panel_line
  1500.         sub     ecx,eax
  1501.         jmp     .2
  1502.  
  1503. .1:
  1504.         xor     eax,eax
  1505.         mov     fb_start_draw_line,eax
  1506. .2:
  1507.         movzx   eax,fb_line_size_y
  1508.         imul    ecx,eax
  1509.         mov     fb_start_draw_cursor_line,cx
  1510.         call    fb_draw_panel_2
  1511. ;-------------------------------------------------------
  1512. .exit_fb:
  1513.         call    fb_prepare_selected_BDVK_adress
  1514. file_browser_exit
  1515. ;-------------------------------------------------------
  1516. fb_key_table:
  1517.         dd      0
  1518.         dd      fb_key.arrow_down       ; 1
  1519.         dd      fb_key.arrow_up         ; 2
  1520.         dd      fb_key.page_down        ; 3
  1521.         dd      fb_key.page_up          ; 4
  1522.         dd      fb_key.home             ; 5
  1523.         dd      fb_key.end              ; 6
  1524.         dd      fb_key.enter            ; 7
  1525.         dd      fb_key.mark             ; 8
  1526.         dd      fb_key.mark_all         ; 9
  1527.         dd      fb_key.unmark_all       ; 10
  1528.         dd      fb_key.invert_mark      ; 11
  1529.         dd      fb_key.search_with_key  ; 12
  1530. .end:
  1531.         dd      0
  1532. ;-------------------------------------------------------
  1533. fb_draw_panel_3:
  1534.         mov     eax,2
  1535.         mov     fb_all_redraw,eax
  1536.         jmp     fb_draw_panel_2.1
  1537. fb_draw_panel_2:
  1538.         xor     eax,eax
  1539.         inc     eax
  1540.         mov     fb_all_redraw,eax
  1541.         call    fb_draw_panel_selection
  1542. .1:
  1543.         call    fb_draw_folder_data
  1544.         xor     eax,eax
  1545.         mov     fb_all_redraw,eax
  1546.         inc     eax
  1547.         mov     fb_draw_scroll_bar,eax
  1548.         ret
  1549.  
  1550. }
  1551.