Subversion Repositories Kolibri OS

Rev

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

  1. ;------------------------------------------------------------------------------
  2. draw_buttons_panel:
  3.         mov     ecx,[skin_high]
  4.         add     ecx,19
  5.         shl     ecx,16
  6.         mov     cx,18
  7.         mov     ebx,[window_width]
  8.         sub     ebx,9
  9.         add     ebx,5 shl 16
  10.         mcall   13,,,0xffffff
  11.        
  12.         mov     edx,15 shl 16+20
  13.         add     edx,[skin_high]
  14.         mcall   7,buttons_file_data,<198,16>
  15.        
  16.         mov ecx, 20
  17.         add ecx, [skin_high]
  18.         shl ecx, 16
  19.         add ecx, 16
  20.         mcall   8,<15,16>,,150+0x40000000
  21.        
  22. _new_but:
  23.         add     ebx,26 shl 16
  24.         inc edx
  25.         mcall
  26.         cmp edx, 157+0x40000000
  27.         jl  _new_but
  28.        
  29.         ret
  30. ;--------------------------------------
  31. .calculate_button:
  32.         mov     ebx,edx
  33.         mov     bx,15
  34.         mov     ecx,edx
  35.         shl     ecx,16
  36.         mov     cx,bx
  37.         ret
  38. ;------------------------------------------------------------------------------
  39. draw_left_sort_button:
  40.         mov     bx,[left_panel_x.start_x]
  41.         add     bx,[left_panel_x.size_x]
  42.         sub     ebx,50+15+12
  43.         mov     cx,[left_panel_y.start_y]
  44.         call    calclulate_sort_button_1
  45.         mov     edx,145
  46. ;--------------------------------------
  47. .start:
  48.         mov     esi,0xffffff
  49.         dec     ebp
  50.         cmp     [left_sort_flag],ebp
  51.         jne     @f
  52.  
  53.         mov     esi,0xccccff
  54. ;--------------------------------------
  55. @@:
  56.         call    calclulate_sort_button_2
  57.         jnz     .start
  58.  
  59.         ret
  60. ;------------------------------------------------------------------------------
  61. calclulate_sort_button_1:
  62.         shl     ebx,16
  63.         mov     bx,50
  64.         sub     cx,14
  65.         shl     ecx,16
  66.         mov     cx,12
  67.         mov     eax,8
  68.         mov     ebp,4
  69.         ret
  70. ;------------------------------------------------------------------------------
  71. calclulate_sort_button_2:
  72.         inc     ebp
  73.         mcall
  74.         pusha
  75.         push    ebx
  76.         mov     eax,ebx
  77.         inc     eax
  78.         shl     eax,16
  79.         add     ebx,eax
  80.         cmp     ebp,4
  81.         jne     @f
  82.  
  83.         mov     bx,15+12
  84.         jmp     .continue
  85. ;--------------------------------------
  86. @@:
  87.         mov     bx,1
  88. ;--------------------------------------
  89. .continue:
  90.         inc     ecx
  91.         mcall   13,,,0xcccccc
  92.         pop     ebx
  93.         cmp     ebp,1
  94.         jne     @f
  95.  
  96.         mov     eax,[temp_panel_end]
  97.         shl     eax,16
  98.         add     eax,[temp_panel_end]
  99.         shr     eax,16
  100.         shr     ebx,16
  101.         sub     ebx,eax
  102.         shl     ebx,16
  103.         mov     bx,ax
  104.         rol     ebx,16
  105.         mcall   13
  106.         mov     [temp_panel_end],ebx
  107. ;--------------------------------------
  108. @@:
  109.         popa
  110.         pusha
  111.         shr     ecx,16
  112.         mov     bx,cx
  113.         add     ebx,3 shl 16+2
  114.         mov     edx,ebp
  115.         dec     edx
  116.         shl     edx,2
  117.         add     edx,sort_button_name
  118.         mov     eax,4
  119.         xor     ecx,ecx
  120.         mov     esi,eax
  121.         mcall
  122.         popa
  123.         dec     edx
  124.         sub     ebx,38 shl 16
  125.         mov     bx,36
  126.         dec     ebp
  127.         ret
  128. ;------------------------------------------------------------------------------
  129. draw_right_sort_button:
  130.         mov     bx,[right_panel_x.start_x]
  131.         add     bx,[right_panel_x.size_x]
  132.         sub     ebx,50+15+12
  133.         mov     cx,[right_panel_y.start_y]
  134.         call    calclulate_sort_button_1
  135.         mov     edx,149
  136. ;--------------------------------------
  137. .start:
  138.         mov     esi,0xffffff
  139.         dec     ebp
  140.         cmp     [right_sort_flag],ebp
  141.         jne     @f
  142.  
  143.         mov     esi,0xccccff
  144. ;--------------------------------------
  145. @@:
  146.         call    calclulate_sort_button_2
  147.         jnz     .start
  148.  
  149.         ret
  150. ;------------------------------------------------------------------------------
  151. draw_left_select_disk_button:
  152.         mov     bx,[left_panel_x.start_x]
  153.         mov     cx,[left_panel_y.start_y]
  154.         mov     ebp,read_folder_name          ;read_folder.name
  155.         mov     edx,0x40000000+140
  156. ;--------------------------------------
  157. .1:
  158.         shl     ebx,16
  159.         mov     bx,60
  160.         sub     cx,14
  161.         shl     ecx,16
  162.         mov     cx,13
  163.         mcall   8,,,,0xffffff
  164.         mcall   13,,,0xffffff
  165.         pusha
  166.         mov     esi,ebp
  167.         add     esi,2
  168. ;--------------------------------------
  169. @@:
  170.         inc     esi
  171.         cmp     [esi],byte 0
  172.         je      @f
  173.  
  174.         cmp     [esi],byte '/'
  175.         jne     @r
  176.  
  177.         add     esi,2
  178. ;--------------------------------------
  179. @@:
  180.         sub     esi,ebp  ;read_folder.name
  181.         add     ebx,1 shl 16
  182.         shr     ecx,16
  183.         mov     bx,cx
  184.         add     ebx,3
  185.         mov     edx,ebp
  186.         mcall   4,,0  ;,read_folder.name
  187.         popa
  188.         add     ebx,50 shl 16
  189.         mov     bx,10
  190.         mcall   ,,,0x6060ff
  191.         mov     [temp_panel_end],ebx
  192.         add     ebx,1 shl 16
  193.         shr     ecx,16
  194.         mov     bx,cx
  195.         add     ebx,3
  196.         mcall   4, ,0x80ffffff,select_disk_char
  197.         add     ebx,1 shl 16
  198.         mcall
  199.         ret
  200. ;------------------------------------------------------------------------------
  201. draw_right_select_disk_button:
  202.         mov     bx,[right_panel_x.start_x]
  203.         mov     cx,[right_panel_y.start_y]
  204.         mov     ebp,read_folder_1_name   ;read_folder_1.name
  205.         mov     edx,0x40000000+141
  206.         jmp     draw_left_select_disk_button.1
  207. ;------------------------------------------------------------------------------
  208. ;draw_ATAPI_tray_control:
  209. ;       ret
  210. ;------------------------------------------------------------------------------
  211. calc_max_panel_line:
  212.         xor     eax,eax
  213.         mov     ax,[left_panel_y.size_y]
  214.         mov     ebx,10
  215.         xor     edx,edx
  216.         div     ebx
  217.         mov     [max_panel_line],eax
  218.         ret
  219. ;------------------------------------------------------------------------------
  220. draw_icon:
  221.         pusha
  222.         test    [edx-40],byte 0x10
  223.         jnz     .draw_dir_pic
  224.  
  225.         call    get_icon_number
  226.         imul    ebx,270
  227.         add     ebx,icons_file_data
  228.         jmp     .draw
  229. ;--------------------------------------
  230. .draw_dir_pic:
  231.         mov     ebx,icons_file_data
  232.         cmp     [edx],word '..'
  233.         jne      .draw
  234.  
  235.         add     ebx,270   ;*17
  236. ;--------------------------------------
  237. .draw:
  238.         mov     edx,[esp+16]    ;ebx
  239.         ror     edx,16
  240.         sub     edx,12
  241.         rol     edx,16
  242.         dec edx
  243.         mcall   7, ,<10,9>
  244.         popa
  245.         ret
  246. ;------------------------------------------------------------------------------
  247. ;       ÏÅÐÅÂÎÄ 10-ÍÛÕ ×ÈÑÅË ÑÎ ÇÍÀÊÎÌ Â ÑÒÐÎÊÎÂÛÉ ÂÈÄ
  248. ;       Âõîä:
  249. ;               AX - ÷èñëî
  250. ;               EBX - àäðåñ ñòðîêè
  251. ;       Âûõîä:
  252. ;               ñòðîêà ñîäåðæèò ÷èñëî, êîíåö îòìå÷åí êîäîì 0
  253. ;------------------------------------------------------------------------------
  254. decimal_string_2:
  255.         push    eax ebx ecx edx
  256.         xor     ecx,ecx
  257.         mov     [ebx],byte '0'
  258.         inc     ebx
  259. ;--------------------------------------
  260. .p3:
  261.         xor     edx,edx
  262.         push    ebx
  263.         mov     ebx,10
  264.         div     ebx
  265.         pop     ebx
  266.         add     edx,48
  267.         push    edx
  268.         inc     ecx
  269.         cmp     ax,0
  270.         jne     .p3
  271.  
  272.         cmp     ecx,1
  273.         jbe     .p4
  274.  
  275.         mov     ecx,2
  276.         dec     ebx
  277. ;--------------------------------------
  278. .p4:
  279.         pop     edx
  280.         mov     [ebx],dl
  281.         inc     ebx
  282.         loop    .p4
  283.         pop     edx ecx ebx eax
  284.         ret
  285. ;------------------------------------------------------------------------------
  286. decimal_string:
  287.         push    eax ebx ecx edx
  288.         mov     ecx,10
  289. ;--------------------------------------
  290. .p3:
  291.         xor     edx,edx
  292.         div     ecx
  293.         add     edx,48
  294.         mov     [ebx],dl
  295.         dec     ebx
  296.         test    eax,eax
  297.         jnz     .p3
  298.  
  299.         pop     edx ecx ebx eax
  300.         ret
  301. ;------------------------------------------------------------------------------
  302. draw_type_size_date:
  303.         pusha
  304.         test    [edx-40],byte 0x10
  305.         jz      .copy_type
  306.  
  307.         mov     [type_table],dword '<DIR'
  308.         mov     [type_table+4],word '> '
  309.         mov     [file_name_length],0
  310.         mov     [extension_size],0
  311.         jmp     .start  ;.size
  312. ;--------------------------------------
  313. .copy_type:
  314.         mov     [type_table],dword '    '
  315.         mov     [type_table+4],word '  '
  316. ;--------------------------------------
  317. .start:
  318.         mov     esi,edx
  319.         xor     eax,eax
  320. ;--------------------------------------
  321. @@:
  322.         cld
  323.         lodsb
  324.         test    eax,eax
  325.         jnz     @b
  326.  
  327.         mov     [file_name_length],esi
  328.         sub     [file_name_length],edx
  329.         mov     [temp_counter_1],esi
  330.         test    [edx-40],byte 0x10
  331.         jnz      .size
  332.  
  333.         dec     esi
  334.         dec     edx
  335. ;--------------------------------------
  336. @@:
  337.         std
  338.         lodsb
  339.         cmp     esi,edx
  340.         je      .extension_size_0
  341.  
  342.         cmp     al,'.'
  343.         jnz     @b
  344.  
  345.         add     esi,2
  346.         mov     [extension_start],esi
  347.         mov     ecx,[temp_counter_1]
  348.         sub     ecx,esi
  349.         inc     ecx
  350.         mov     [extension_size],ecx
  351.         sub     [file_name_length],ecx
  352.         cmp     ecx,2
  353.         ja      @f
  354.  
  355.         inc     [file_name_length]
  356. ;--------------------------------------
  357. @@:
  358.         sub     ecx,2
  359.         cmp     ecx,4
  360.         jbe     @f
  361.  
  362.         mov     ecx,4
  363.         mov     [type_table+4],word '..'
  364. ;--------------------------------------
  365. @@:
  366.         mov     edi,type_table  ;+1
  367.         cld
  368.         rep     movsb
  369.         mov     [edi],byte ' '
  370.         inc     edx
  371.         jmp     .size
  372. ;--------------------------------------
  373. .extension_size_0:
  374.         inc     edx
  375.         mov     [extension_size],0
  376. ;--------------------------------------
  377. .size:
  378.         test    [edx-40],byte 0x10
  379.         jz      .copy_size
  380.  
  381.         mov     [size_table],dword '----'
  382.         mov     [size_table+4],word '- '
  383.         jmp     .date
  384. ;--------------------------------------
  385. .qword_div:
  386.         mov     eax,[edx-40+32]
  387.         mov     ebx,[edx-40+32+4]
  388. @@:     ; /1024
  389.         shrd    eax,ebx,5 ; /32
  390.         shr     ebx,5 ; /32
  391.         shrd    eax,ebx,5 ; /32
  392.         shr     ebx,5 ; /32
  393.         dec     ecx
  394.         jnz     @b
  395. ; /(1024*1024)
  396.         shr     eax,20
  397.         test    eax,eax
  398.         ret
  399. ;--------------------------------------
  400. .copy_size:
  401. ;/0x1000000000000000 - EB
  402. ;/0x4000000000000 - PB
  403. ;/0x10000000000 - TB
  404. ;/0x40000000 - GB
  405. ;/0x100000 - MB
  406. ;/0x400 - KB
  407.         mov     [size_table],dword '    '
  408.         mov     [size_table+4],word '  '
  409.         push    ebx edx
  410.         push    ecx
  411.         mov     ecx,4
  412.         call    .qword_div
  413.         pop     ecx
  414.         jz      @f
  415.  
  416.         mov     ebx,size_table+3
  417.         call    decimal_string
  418.         mov     [ebx+1],byte 'E' ; Exa Byte
  419.         jmp     .size_convert_end
  420. ;--------------------------------------
  421. @@:
  422.         push    ecx
  423.         mov     ecx,3
  424.         call    .qword_div
  425.         pop     ecx
  426.         jz      @f
  427.  
  428.         mov     ebx,size_table+3
  429.         call    decimal_string
  430.         mov     [ebx+1],byte 'P' ; Peta Byte
  431.         jmp     .size_convert_end
  432. ;--------------------------------------
  433. @@:
  434.         push    ecx
  435.         mov     ecx,2
  436.         call    .qword_div
  437.         pop     ecx
  438.         jz      @f
  439.  
  440.         mov     ebx,size_table+3
  441.         call    decimal_string
  442.         mov     [ebx+1],byte 'T' ; Tera Byte
  443.         jmp     .size_convert_end
  444. ;--------------------------------------
  445. @@:
  446.         push    ecx
  447.         mov     ecx,1
  448.         call    .qword_div
  449.         pop     ecx
  450.         jz      @f
  451.  
  452.         mov     ebx,size_table+3
  453.         call    decimal_string
  454.         mov     [ebx+1],byte 'G' ; Giga Byte
  455.         jmp     .size_convert_end
  456. ;--------------------------------------
  457. @@:
  458.         mov     eax,[edx-40+32]
  459.         mov     ebx,eax
  460.         shr     eax,20 ; /(1024*1024)
  461.         test    eax,eax
  462.         jz      @f
  463.  
  464.         mov     ebx,size_table+3
  465.         call    decimal_string
  466.         mov     [ebx+1],byte 'M' ; Mega Byte
  467.         jmp     .size_convert_end
  468. ;--------------------------------------
  469. @@:
  470.         mov     eax,ebx
  471.         shr     eax,10 ; /1024
  472.         test    eax,eax
  473.         jz      @f
  474.  
  475.         mov     ebx,size_table+3
  476.         call    decimal_string
  477.         mov     [ebx+1],byte 'K' ; Kilo Byte
  478.         jmp     .size_convert_end
  479. ;--------------------------------------
  480. @@:
  481.         mov     eax,ebx
  482. ;.size_convert:
  483.         mov     ebx,size_table+4
  484.         call    decimal_string
  485. ;--------------------------------------
  486. .size_convert_end:
  487.         pop     edx ebx
  488. ;--------------------------------------
  489. .date:
  490.         cmp     [edx],word '..'
  491.         jne     @f
  492.        
  493.         cmp     [edx+2],byte 0
  494.         je      .not_show_date
  495. @@:
  496.         xor     eax,eax
  497.         mov     al,[edx-40+28]
  498.         push    ebx
  499.         mov     ebx,date_table
  500.         call    decimal_string_2
  501.         mov     al,[edx-40+29]
  502.         mov     ebx,date_table+3
  503.         call    decimal_string_2
  504.         mov     ax,[edx-40+30]
  505.         lea     ebx,[year_table+4]
  506.         mov     [ebx-4], dword '0000'
  507.         mov     [ebx], byte '0'
  508.         call    decimal_string
  509.         mov     eax,[year_table+1]
  510.         mov     [date_table+6],eax
  511.         pop     ebx
  512.         ror     ebx,16
  513.         add     bx,[left_panel_x.size_x]
  514.         sub     ebx,161 ;122+12+15
  515.         rol     ebx,16
  516.         mov     ecx,0
  517.         cmp     [marked_file],byte 0
  518.         je      @f
  519.  
  520.         mov     ecx,0xff0000
  521. ;--------------------------------------
  522. @@:
  523.         mcall   4,,,type_table,22
  524. ;--------------------------------------
  525. .not_show_date:
  526.         popa
  527.         ret
  528. ;------------------------------------------------------------------------------
  529. draw_folder_data:
  530.         cmp     [drawing_panel_folder],1
  531.         jne     .right_panel
  532.  
  533.         mov     eax,[left_folder_block]
  534.         sub     eax,[max_panel_line]
  535.         test    eax,0x8000000
  536.         jz      .ok_left
  537.  
  538.         mov     [left_start_draw_line],0
  539.         jmp     @f
  540. ;--------------------------------------
  541. .ok_left:
  542.         cmp     eax,[left_start_draw_line]
  543.         jae     @f
  544.  
  545.         mov     [left_start_draw_line],eax
  546. ;--------------------------------------
  547. @@:
  548.         mov     bx,[left_panel_x.start_x]
  549.         add     bx,12
  550.         shl     ebx,16
  551.         mov     bx,[left_panel_y.start_y]
  552.         inc     bx
  553.         mov     edx,[left_start_draw_line]
  554.         imul    edx,304
  555.         add     edx,[left_folder_data]
  556.         add     edx,32+40
  557.         mov     [temp_counter],0
  558.         jmp     .type_folder
  559. ;--------------------------------------
  560. .right_panel:
  561.         mov     eax,[right_folder_block]
  562.         sub     eax,[max_panel_line]
  563.         test    eax,0x8000000
  564.         jz      .ok_right
  565.  
  566.         mov     [right_start_draw_line],0
  567.         jmp     @f
  568. ;--------------------------------------
  569. .ok_right:
  570.         cmp     eax,[right_start_draw_line]
  571.         jae     @f
  572.  
  573.         mov     [right_start_draw_line],eax
  574. ;--------------------------------------
  575. @@:
  576.         mov     bx,[right_panel_x.start_x]
  577.         add     bx,12
  578.         shl     ebx,16
  579.         mov     bx,[right_panel_y.start_y]
  580.         inc     bx
  581.         mov     edx,[right_start_draw_line]
  582.         imul    edx,304
  583.         add     edx,[right_folder_data]
  584.         add     edx,32+40
  585.         mov     [temp_counter],1
  586. ;--------------------------------------
  587. .type_folder:
  588.         xor     eax,eax
  589. ;--------------------------------------
  590. .start:
  591.         pusha
  592.         mov     eax,edx
  593.         cmp     [temp_counter],1
  594.         je      @f
  595.  
  596.         sub     eax,[left_folder_data]
  597.         sub     eax,32+40
  598.         xor     edx,edx
  599.         mov     ebx,304
  600.         div     ebx
  601.         cmp     eax,[left_folder_block]
  602.         je      .end_1
  603.  
  604.         jmp     .continue_1
  605. ;--------------------------------------
  606. @@:
  607.         sub     eax,[right_folder_data]
  608.         sub     eax,32+40
  609.         xor     edx,edx
  610.         mov     ebx,304
  611.         div     ebx
  612.         cmp     eax,[right_folder_block]
  613.         je      .end_1
  614. ;--------------------------------------
  615. .continue_1:
  616.         popa
  617.         cmp     eax,[max_panel_line]    ;  20
  618.         je      .end_2
  619.  
  620.         mov     [marked_file],0
  621.         cmp     [edx+299-40],byte 0
  622.         je      @f
  623.  
  624.         mov     [marked_file],1
  625. ;--------------------------------------
  626. @@:
  627.         call    clear_line
  628.         call    draw_type_size_date
  629.         call    draw_icon
  630.         push    eax
  631.         xor     eax,eax
  632.         mov     ax,[left_panel_x.size_x]
  633.         push    ebx edx
  634.         mov     ebx,6
  635.         xor     edx,edx
  636.         div     ebx
  637.         pop     edx ebx
  638.         sub     eax,23+2+2+2
  639.         mov     esi,[file_name_length]
  640.         mov     [temp_counter_1],0
  641.         cmp     esi,eax
  642.         jbe     @f
  643.  
  644.         mov     esi,eax
  645.         mov     [temp_counter_1],1
  646. ;--------------------------------------
  647. @@:
  648.         mov     ecx,0
  649.         cmp     [marked_file],byte 0
  650.         je      @f
  651.  
  652.         mov     ecx,0xff0000
  653. ;--------------------------------------
  654. @@:
  655.         mcall   4
  656.         cmp     [temp_counter_1],0
  657.         je      .continue
  658.  
  659.         mov     eax,esi ;[file_name_length]
  660.         imul    eax,6
  661.         shl     eax,16
  662.         push    ebx edx
  663.         add     ebx,eax
  664.         mcall   4,,0xff0000,truncated_filename_char,2
  665.         add     ebx,1 shl 16
  666.         mcall
  667.         pop     edx ebx
  668. ;--------------------------------------
  669. .continue:
  670.         add     ebx,10
  671.         add     edx,304 ;10
  672.         pop     eax
  673.         inc     eax
  674.         jmp     .start
  675. ;--------------------------------------
  676. .end_1:
  677.         popa
  678. ;--------------------------------------
  679. .end_2:    
  680.         mov     ax,[left_panel_y.start_y]
  681.         add     ax,[left_panel_y.size_y]
  682.         mov     cx,bx
  683.         dec     cx
  684.         rol     ecx,16
  685.         mov     cx,ax
  686.         mov     eax,ecx
  687.         shr     eax,16
  688.         sub     cx,ax
  689.         cmp     cx,0
  690.         jbe     @f
  691.  
  692.         mov     bx,[left_panel_x.size_x]
  693.         sub     ebx,12 shl 16
  694.         mcall   13,,,0xffffff
  695. ;--------------------------------------
  696. @@:
  697. .end:
  698.         cmp     [drawing_panel_folder],1
  699.         jne     @f
  700.  
  701.         call    draw_scroll_bar_left
  702.         ret
  703. ;--------------------------------------
  704. @@:
  705.         call    draw_scroll_bar_right
  706.         ret
  707. ;------------------------------------------------------------------------------
  708. clear_line:
  709.         cmp     [not_clear_lines],0
  710.         jne     .end_1
  711.  
  712.         pusha
  713.         shl     ebx,16
  714.         shr     ebx,16
  715.         dec     ebx
  716.         cmp     [drawing_panel_folder],1
  717.         jne     .right
  718.  
  719.         cmp     [select_panel_counter],0
  720.         jne     .continue
  721.  
  722.         mov     ax,[left_start_draw_cursor_line]
  723.         add     ax,[left_panel_y.start_y]
  724.         cmp     bx,ax
  725.         je      .end
  726.  
  727.         jmp     .continue
  728. ;--------------------------------------
  729. .right:
  730.         cmp     [select_panel_counter],0
  731.         je      .continue
  732.  
  733.         mov     ax,[right_start_draw_cursor_line]
  734.         add     ax,[right_panel_y.start_y]
  735.         cmp     bx,ax
  736.         je      .end
  737. ;--------------------------------------
  738. .continue:
  739.         mov     ebx,[esp+16]
  740.         mov     cx,bx
  741.         dec     cx
  742.         rol     ecx,16
  743.         mov     cx,10
  744.         mov     bx,[left_panel_x.size_x]
  745.         cmp     [drawing_panel_folder],1
  746.         je      @f
  747.  
  748.         dec     ebx
  749. ;--------------------------------------
  750. @@:
  751.         sub     ebx,12 shl 16+15
  752.         mcall   13,,,0xffffff
  753. ;--------------------------------------
  754. .end:
  755.         popa
  756. ;--------------------------------------
  757. .end_1:
  758.         ret
  759. ;------------------------------------------------------------------------------
  760. draw_left_panel:
  761.         call    clear_left_panel
  762.         call    calc_max_panel_line
  763.         call    draw_left_panel_selection
  764.         mov     [drawing_panel_folder],1
  765.         call    draw_folder_data
  766.         call    draw_left_panel_patch
  767.         ret
  768. ;------------------------------------------------------------------------------
  769. draw_right_panel:
  770.         call    clear_right_panel
  771.         call    calc_max_panel_line
  772.         call    draw_right_panel_selection
  773.         mov     [drawing_panel_folder],2
  774.         call    draw_folder_data
  775.         call    draw_right_panel_patch
  776.         ret
  777. ;------------------------------------------------------------------------------
  778. draw_left_panel_patch:
  779.         cmp     [select_panel_counter],0
  780.         jne     .end
  781.  
  782.         mov     edx,read_folder_name       ;read_folder.name
  783. ;--------------------------------------
  784. .1:
  785.         call    clear_patch_area
  786.         mov     ebx,[window_high]
  787.         sub     ebx,33
  788.         add     ebx,8 shl 16
  789.         mcall   4,,0x80000000  ; ,read_folder.name
  790. ;--------------------------------------
  791. .end:
  792.         ret
  793. ;------------------------------------------------------------------------------
  794. draw_right_panel_patch:
  795.         cmp     [select_panel_counter],1
  796.         jne     draw_left_panel_patch.end
  797.  
  798.         mov     edx,read_folder_1_name    ;read_folder_1.name
  799.         jmp     draw_left_panel_patch.1
  800. ;------------------------------------------------------------------------------
  801. clear_patch_area:
  802.         push    edx
  803.         mov     ebx,[window_width]
  804.         sub     ebx,9
  805.         add     ebx,5 shl 16
  806.         mov     ecx,[window_high]
  807.         sub     ecx,35
  808.         shl     ecx,16
  809.         mov     cx,12
  810.         mcall   13,,,0xffffcc
  811.         pop     edx
  812.         ret
  813. ;------------------------------------------------------------------------------
  814. draw_left_panel_selection:
  815.         cmp     [select_panel_counter],0
  816.         jne     .end
  817.        
  818.         mov     eax,[left_folder_block]
  819.         sub     eax,[left_start_draw_line]
  820.         mov     edx,left_start_draw_cursor_line
  821.         mov     cx,[edx]
  822.         call    for_all_panel_selection
  823.         mov     eax,[left_folder_block]
  824.         dec     eax
  825.         imul    eax,10
  826.         cmp     ax,cx
  827.         jae      @f
  828.  
  829.         mov     cx,ax
  830. ;--------------------------------------
  831. @@:
  832.         mov     [edx],cx
  833.         mov     ebx,[left_panel_x]
  834.         add     cx,[left_panel_y.start_y]
  835. ;--------------------------------------
  836. .1:
  837.         shl     ecx,16
  838.         mov     cx,10
  839.         sub     ebx,15
  840.         mcall   13,,,0xbbddff
  841. ;--------------------------------------
  842. .end:
  843.         ret
  844. ;------------------------------------------------------------------------------
  845. draw_right_panel_selection:
  846.         cmp     [select_panel_counter],1
  847.         jne     draw_left_panel_selection.end
  848.  
  849.         mov     eax,[right_folder_block]
  850.         sub     eax,[right_start_draw_line]
  851.         mov     edx,right_start_draw_cursor_line
  852.         mov     cx,[edx]
  853.         call    for_all_panel_selection
  854.         mov     eax,[right_folder_block]
  855.         dec     eax
  856.         imul    eax,10
  857.         cmp     ax,cx
  858.         jae      @f
  859.  
  860.         mov     cx,ax
  861. ;--------------------------------------
  862. @@:
  863.         mov     [edx],cx
  864.         mov     ebx,[right_panel_x]
  865.         add     cx,[right_panel_y.start_y]
  866.         jmp     draw_left_panel_selection.1
  867. ;------------------------------------------------------------------------------
  868. for_all_panel_selection:
  869.         imul    eax,10
  870.         cmp     ax,cx
  871.         jae     @f
  872.  
  873.         mov     cx,ax
  874. ;--------------------------------------
  875. @@:
  876.         mov     eax,[max_panel_line]
  877.         dec     eax
  878.         imul    eax,10
  879.         cmp     ax,cx
  880.         jae     @f
  881.  
  882.         mov     cx,ax
  883. ;--------------------------------------
  884. @@:
  885.         ret
  886. ;------------------------------------------------------------------------------
  887. clear_left_panel:
  888.         mov     ebx,7 shl 16
  889.         add     ebx,[window_width]
  890.         shr     bx,1
  891.         sub     ebx,6+1
  892.         mov     [left_panel_x],ebx
  893.         call    calculate_panel_1
  894.         mov     [left_panel_y],ecx
  895.         xor     eax,eax
  896.         mov     ax,cx
  897.         xor     edx,edx
  898.         mov     ebx,10
  899.         div     ebx
  900. ; óìíîæåíèå íà 10
  901.         shl     eax,1      ; óìíîæåíèå íà 2
  902.         lea     eax,[eax+eax*4] ; óìíîæåíèå íà 5
  903.         mov     [left_panel_y_correct_size_y],ax
  904.         ret
  905. ;------------------------------------------------------------------------------
  906. calculate_panel_1:
  907.         mov     ecx,[skin_high]
  908.         add     ecx,70
  909.         shl     ecx,16
  910.         add     ecx,[window_high]
  911.         sub     ecx,129
  912.         ret
  913. ;------------------------------------------------------------------------------
  914. clear_right_panel:
  915.         mov     ebx,[window_width]
  916.         shr     ebx,1
  917.         add     ebx,3
  918.         shl     ebx,16
  919.         add     ebx,[window_width]
  920.         shr     bx,1
  921.         sub     bx,2+6
  922.         mov     [right_panel_x],ebx
  923.         call    calculate_panel_1
  924.         mov     [right_panel_y],ecx
  925.         xor     eax,eax
  926.         mov     ax,cx
  927.         xor     edx,edx
  928.         mov     ebx,10
  929.         div     ebx
  930. ; óìíîæåíèå íà 10
  931.         shl     eax,1      ; óìíîæåíèå íà 2
  932.         lea     eax,[eax+eax*4] ; óìíîæåíèå íà 5
  933.         mov     [right_panel_y_correct_size_y],ax
  934.         ret
  935. ;------------------------------------------------------------------------------
  936. erase_fbutton:
  937.         mov     edx,0x80000065
  938.         mov     eax,8
  939.         mov     ebp,12
  940. ;--------------------------------------
  941. .start:
  942.         mcall
  943.         dec     ebp
  944.         jnz     .start
  945.  
  946.         ret
  947. ;------------------------------------------------------------------------------
  948. draw_fbutton:
  949.         test    [window_status],100b    ; window is rolled up
  950.         jnz     .exit
  951.  
  952.         test    [window_status],10b     ; window is minimized to panel
  953.         jnz     .exit
  954.  
  955.         mov     ecx,[window_high]
  956.         sub     ecx,20
  957.         shl     ecx,16
  958.         add     ecx,15
  959.         mov     eax,[window_width]
  960.         mov     ebx,12
  961.         xor     edx,edx
  962.         div     ebx
  963.         mov     [fbutton_width],eax
  964.         mov     ebx,5 shl 16
  965.         add     ebx,eax
  966.         sub     ebx,2
  967.         mov     esi,0xaa00
  968.         mov     edx,101
  969.         mov     eax,8
  970.         mov     ebp,12
  971. ;--------------------------------------
  972. .start:
  973.         cmp     ebp,1
  974.         jne     @f
  975.  
  976.         mov     eax,ebx
  977.         shr     eax,16
  978.         mov     bx,ax
  979.         mov     eax,[window_width]
  980.         sub     ax,bx
  981.         sub     ax,5
  982.         mov     bx,ax
  983.         mov     eax,8
  984. ;--------------------------------------
  985. @@:
  986.         mcall
  987.         push    eax ebx edx
  988.         mov     edx,0x6060ff
  989.         mov     bx,10
  990.         cmp     ebp,4
  991.         jae     @f
  992.  
  993.         mov     bx,18
  994. ;--------------------------------------
  995. @@:
  996.         mcall   13
  997.         cmp     ebp,1
  998.         je      @f
  999.  
  1000.         ror     ebx,16
  1001.         add     ebx,[fbutton_width]
  1002.         dec     ebx
  1003.         rol     ebx,16
  1004.         mov     bx,1
  1005.         inc     ecx
  1006.         mcall   ,,,0xcccccc
  1007.         dec     ecx
  1008. ;--------------------------------------
  1009. @@:
  1010.         pop     edx ebx eax
  1011.         call    .rol_ror
  1012.         inc     edx
  1013.         dec     ebp
  1014.         jnz     .start
  1015.  
  1016.         call    draw_fbutton_name
  1017.         ret
  1018. ;--------------------------------------
  1019. .rol_ror:
  1020.         rol     ebx,16
  1021.         add     ebx,[fbutton_width]
  1022.         ror     ebx,16
  1023. ;--------------------------------------
  1024. .exit:
  1025.         ret
  1026. ;------------------------------------------------------------------------------
  1027. draw_fbutton_name:
  1028.         mov     ebx, 7 shl 16
  1029.         add     ebx,[window_high]
  1030.         sub     ebx,19
  1031.         mov     eax,4
  1032.         mov     ecx,0x90000000
  1033.         push    ebx
  1034.         call    .type_1
  1035.         pop     ebx
  1036.         mov     ecx,0x90ffffff
  1037.         sub     ebx,1 shl 16 + 1
  1038. ;--------------------------------------
  1039. .type_1:
  1040.         cmp     [shift_flag],1
  1041.         je      .type_shift
  1042.  
  1043.         cmp     [ctrl_flag],1
  1044.         je      .type_ctrl
  1045.  
  1046.         cmp     [alt_flag],1
  1047.         je      .type_alt
  1048. ;--------------------------------------
  1049. .type:
  1050.         mov     edx,fbutton_name.f1
  1051.         call    .type_all
  1052.         mov     edx,fbutton_name.f2
  1053.         call    .type_all
  1054.         mov     edx,fbutton_name.f3
  1055.         call    .type_all
  1056.         mov     edx,fbutton_name.f4
  1057.         call    .type_all
  1058.         mov     edx,fbutton_name.f5
  1059.         call    .type_all
  1060.         mov     edx,fbutton_name.f6
  1061.         call    .type_all
  1062.         mov     edx,fbutton_name.f7
  1063.         call    .type_all
  1064.         mov     edx,fbutton_name.f8
  1065.         call    .type_all
  1066.         mov     edx,fbutton_name.f9
  1067.         call    .type_all
  1068.         mov     edx,fbutton_name.f10
  1069.         call    .type_all
  1070.         mov     edx,fbutton_name.f11
  1071.         call    .type_all
  1072.         mov     edx,fbutton_name.f12
  1073.         mcall
  1074.         ret
  1075. ;--------------------------------------
  1076. .type_shift:
  1077.         mov     edx,fbutton_name_shift.f1
  1078.         call    .type_all
  1079.         mov     edx,fbutton_name_shift.f2
  1080.         call    .type_all
  1081.         mov     edx,fbutton_name_shift.f3
  1082.         call    .type_all
  1083.         mov     edx,fbutton_name_shift.f4
  1084.         call    .type_all
  1085.         mov     edx,fbutton_name_shift.f5
  1086.         call    .type_all
  1087.         mov     edx,fbutton_name_shift.f6
  1088.         call    .type_all
  1089.         mov     edx,fbutton_name_shift.f7
  1090.         call    .type_all
  1091.         mov     edx,fbutton_name_shift.f8
  1092.         call    .type_all
  1093.         mov     edx,fbutton_name_shift.f9
  1094.         call    .type_all
  1095.         mov     edx,fbutton_name_shift.f10
  1096.         call    .type_all
  1097.         mov     edx,fbutton_name_shift.f11
  1098.         call    .type_all
  1099.         mov     edx,fbutton_name_shift.f12
  1100.         mcall
  1101.         ret
  1102. ;--------------------------------------
  1103. .type_ctrl:
  1104.         mov     edx,fbutton_name_ctrl.f1
  1105.         call    .type_all
  1106.         mov     edx,fbutton_name_ctrl.f2
  1107.         call    .type_all
  1108.         mov     edx,fbutton_name_ctrl.f3
  1109.         call    .type_all
  1110.         mov     edx,fbutton_name_ctrl.f4
  1111.         call    .type_all
  1112.         mov     edx,fbutton_name_ctrl.f5
  1113.         call    .type_all
  1114.         mov     edx,fbutton_name_ctrl.f6
  1115.         call    .type_all
  1116.         mov     edx,fbutton_name_ctrl.f7
  1117.         call    .type_all
  1118.         mov     edx,fbutton_name_ctrl.f8
  1119.         call    .type_all
  1120.         mov     edx,fbutton_name_ctrl.f9
  1121.         call    .type_all
  1122.         mov     edx,fbutton_name_ctrl.f10
  1123.         call    .type_all
  1124.         mov     edx,fbutton_name_ctrl.f11
  1125.         call    .type_all
  1126.         mov     edx,fbutton_name_ctrl.f12
  1127.         mcall
  1128.         ret
  1129. ;--------------------------------------
  1130. .type_alt:
  1131.         mov     edx,fbutton_name_alt.f1
  1132.         call    .type_all
  1133.         mov     edx,fbutton_name_alt.f2
  1134.         call    .type_all
  1135.         mov     edx,fbutton_name_alt.f3
  1136.         call    .type_all
  1137.         mov     edx,fbutton_name_alt.f4
  1138.         call    .type_all
  1139.         mov     edx,fbutton_name_alt.f5
  1140.         call    .type_all
  1141.         mov     edx,fbutton_name_alt.f6
  1142.         call    .type_all
  1143.         mov     edx,fbutton_name_alt.f7
  1144.         call    .type_all
  1145.         mov     edx,fbutton_name_alt.f8
  1146.         call    .type_all
  1147.         mov     edx,fbutton_name_alt.f9
  1148.         call    .type_all
  1149.         mov     edx,fbutton_name_alt.f10
  1150.         call    .type_all
  1151.         mov     edx,fbutton_name_alt.f11
  1152.         call    .type_all
  1153.         mov     edx,fbutton_name_alt.f12
  1154. ;--------------------------------------
  1155. .type_all:
  1156.         mcall
  1157.         call    draw_fbutton.rol_ror
  1158.         ret
  1159. ;------------------------------------------------------------------------------
  1160.