key:
    mcall 2
    cmp   [extended_key],1
    je	  .extended_key
    test  al, al
    jnz   still
    cmp   ah, 0xE0
    jne   @f
    mov   [extended_key],1
    jmp   still
@@:
    cmp   ah,15
    jne   .no_tab
    inc   [select_panel_counter]
    and   [select_panel_counter],1b
    call  draw_left_panel
    call  draw_right_panel
    jmp   still
.no_tab:
    cmp   ah,72   ; arrow up
    je	  key_72.1
    cmp   ah,80   ; arrow down
    je	  key_80.1
    cmp   ah,28   ; Enter
    je	  key_28.1
    cmp   ah,17   ; W
    je    set_background
    cmp   ah,19   ; R
    je	  reload_dir_1
    cmp   ah,42
    je	  key_shift_up
    cmp   ah,54
    je	  key_shift_up
    cmp   ah,142
    je	  exit_dir_1	; BackSpace Up
    cmp   ah,170
    je	  key_shift_down
    cmp   ah,182
    je	  key_shift_down
    cmp   ah,29
    je	  key_ctrl_up.1
    cmp   ah,157
    je	  key_ctrl_down.1
    cmp   ah,56
    je	  key_alt_up.1
    cmp   ah,184
    je	  key_alt_down.1
    cmp   ah,206 ; NumPad+ Up
    je    NumPad_plus_Up
    cmp   ah,202 ; NumPad- Up
    je    NumPad_minus_Up
    cmp   ah,183 ; NumPad* Up
    je    NumPad_sneg_Up
    cmp   ah,158
    je    symbol_a_up
    cmp   ah,59    ; down F1
    je	  f_key_f1
    cmp   ah,60    ; down F2
    je	  f_key_f2
    cmp   ah,61    ; down F3
    je	  f_key_f3 ;sort_name
    cmp   ah,62    ; down F4
    je	  f_key_f4 ;sort_type
    cmp   ah,63    ; down F5
    je	  f_key_f5 ;sort_size
    cmp   ah,64    ; down F6
    je	  f_key_f6 ; sort_date
    cmp   ah,65    ; down F7
    je	  f_key_f7 ;
    cmp   ah,66    ; down F8
    je	  f_key_f8 ; delete_file
    cmp   ah,88    ; down F12
    je	  f_key_f12
    jmp  still
;-------------------------------------------------------------
.extended_key:
    mov  [extended_key],0
key_80:
    cmp  ah,80	; arrow down
    jne  key_72
.1:
    cmp  [select_panel_counter],0
    jne  .right_1
    mov  eax,[left_folder_block]
    dec  eax
    imul eax,10
    cmp  ax,[left_start_draw_cursor_line]
    jbe  .marked_action   ;still
    mov  ax,[left_start_draw_cursor_line]
    add  ax,10
    cmp  ax,[left_panel_y.size_y]
    jae  @f
.add_1:
    add  [left_start_draw_cursor_line],10
    call draw_left_panel_selection
    mov  [drawing_panel_folder],1
.all:
    sub  ecx,10 shl 16
    mov  edx,0xffffff
    int  0x40
    mov  [not_clear_lines],1
    call draw_folder_data
    mov  [not_clear_lines],0
    jmp  still
.marked_action:
    cmp  [marked_action],0
    je   still
    mov  [marked_action],0
    call draw_left_panel
    jmp  still
.marked_action_1:
    cmp  [marked_action],0
    je   still
    mov  [marked_action],0
    call draw_right_panel
    jmp  still
@@:
    mov  eax,[left_folder_block]
    sub  eax,[max_panel_line]
    test eax,0x80000000
    jz	 @f
    xor  eax,eax
@@:
    cmp  [marked_action],0
    jne   @f
    cmp  [left_start_draw_line],eax
    je	 still
@@:
    mov  [marked_action],0
    inc  [left_start_draw_line]
    call draw_left_panel
    jmp  still
.right_1:
    mov  eax,[right_folder_block]
    dec  eax
    imul eax,10
    cmp  ax,[right_start_draw_cursor_line]
    jbe  .marked_action_1   ;still
    mov  ax,[right_start_draw_cursor_line]
    add  ax,10
    cmp  ax,[right_panel_y.size_y]
    jae  @f
.add_2:
    add  [right_start_draw_cursor_line],10
    call draw_right_panel_selection
    mov  [drawing_panel_folder],2
    jmp  key_80.all
@@:
    mov  eax,[right_folder_block]
    sub  eax,[max_panel_line]
    test eax,0x80000000
    jz	 @f
    xor  eax,eax
@@:
    cmp  [marked_action],0
    jne  @f
    cmp  [right_start_draw_line],eax
    je	 still
@@:
    mov  [marked_action],0
    inc  [right_start_draw_line]
    call draw_right_panel
    jmp  still
;-------------------------------------------------------------
key_72:
    cmp  ah,72	;arrow up
    jne  key_81
.1:
    cmp  [select_panel_counter],0
    jne  .right_1
    mov  ax,[left_start_draw_cursor_line]
    add  ax,[left_panel_y.start_y]
    cmp  [left_panel_y.start_y],ax
    je	 @f
    sub  [left_start_draw_cursor_line],10
    call draw_left_panel_selection
    mov  [drawing_panel_folder],1
.all:    
    add  ecx,10 shl 16
    mov  edx,0xffffff
    int  0x40
    mov  [not_clear_lines],1
    call draw_folder_data
    mov  [not_clear_lines],0
    jmp  still
@@:
    cmp  [left_start_draw_line],0
    je	 still
    dec  [left_start_draw_line]
    call draw_left_panel
    jmp  still
.right_1:
    mov  ax,[right_start_draw_cursor_line]
    add  ax,[right_panel_y.start_y]
    cmp  [right_panel_y.start_y],ax
    je	 @f
    sub  [right_start_draw_cursor_line],10
    call draw_right_panel_selection
    mov  [drawing_panel_folder],2
    jmp  key_72.all
@@:
    cmp  [right_start_draw_line],0
    je	 still
    dec  [right_start_draw_line]
    call draw_right_panel
    jmp  still
;-------------------------------------------------------------
key_81:
    cmp  ah,81 ; PageDown
    jne  key_73
    mov  eax,[max_panel_line]
    cmp  [select_panel_counter],0
    jne  .right_1
    mov  ebx,[left_folder_block]
    sub  ebx,eax
    test ebx,0x80000000
    jnz  .left_2
    sub  ebx,[left_start_draw_line]
    cmp  ebx,eax
    ja  .ok_1
    mov  ebx,[left_folder_block]
    sub  ebx,eax
    call prepare_data_left_down
    ja   @f
    cmp  ebx,[left_start_draw_line]
    je   still
@@:
    mov  [left_start_draw_line],ebx
.left_3:
    dec  eax
    imul eax,10
.left_1:
    mov  [left_start_draw_cursor_line],ax
    call draw_left_panel
    jmp  still
.left_2:
    mov  eax,[left_folder_block]
    sub  eax,[left_start_draw_line]
    dec  eax
    imul eax,10
    cmp  ax,[left_start_draw_cursor_line]
    jbe  still
    jmp  .left_1
.ok_1:
    add  [left_start_draw_line],eax
    call draw_left_panel
    jmp  still
.right_1:
    mov  ebx,[right_folder_block]
    sub  ebx,eax
    test ebx,0x80000000
    jnz  .right_3
    sub  ebx,[right_start_draw_line]
    cmp  ebx,eax
    jae  .ok_2
    mov  ebx,[right_folder_block]
    sub  ebx,eax
    call prepare_data_right_down
    ja   @f
    cmp  ebx,[right_start_draw_line]
    je   still
@@:
    mov  [right_start_draw_line],ebx
.right_4:
    dec  eax
    imul eax,10
.right_2:
    mov  [right_start_draw_cursor_line],ax
    call draw_right_panel
    jmp  still
.right_3:
    mov  eax,[right_folder_block]
    sub  eax,[right_start_draw_line]
    dec  eax
    imul eax,10
    cmp  ax,[right_start_draw_cursor_line]
    jbe  still
    jmp  .right_2
.ok_2:
    add  [right_start_draw_line],eax
    call draw_right_panel
    jmp  still
;-------------------------------------------------------------    
prepare_data_right_down:
    mov  ecx,[right_folder_block]
    sub  ecx,[right_start_draw_line]
    dec  ecx
    imul ecx,10
    cmp  cx,[right_start_draw_cursor_line]
    ret
;-------------------------------------------------------------    
prepare_data_left_down:
    mov  ecx,[left_folder_block]
    sub  ecx,[left_start_draw_line]
    dec  ecx
    imul ecx,10
    cmp  cx,[left_start_draw_cursor_line]
    ret
;-------------------------------------------------------------
key_73:
    cmp  ah,73 ; PageUp
    jne  key_71
    mov  eax,[max_panel_line]
    cmp  [select_panel_counter],0
    jne  .right_1
    mov  ebx,[left_start_draw_line]
    sub  ebx,eax
    test ebx,0x8000000
    jz	 @f
    cmp  [left_start_draw_line],0
    jne  .draw_line_1
    cmp  [left_start_draw_cursor_line],0
    je	 still
    mov  [left_start_draw_cursor_line],0
.draw_line_1:
    mov  [left_start_draw_line],0
    call draw_left_panel
    jmp  still
@@:
    sub  [left_start_draw_line],eax
    call draw_left_panel
    jmp  still
.right_1:
    mov  ebx,[right_start_draw_line]
    sub  ebx,eax
    test ebx,0x80000000
    jz	 @f
    cmp  [right_start_draw_line],0
    jne  .draw_line_2
    cmp  [right_start_draw_cursor_line],0
    je	 still
    mov  [right_start_draw_cursor_line],0
.draw_line_2:
    mov  [right_start_draw_line],0
    call draw_right_panel
    jmp  still
@@:
    sub  [right_start_draw_line],eax
    call draw_right_panel
    jmp  still
;-------------------------------------------------------------
key_71:
    cmp  ah,71 ; Home
    jne  key_79
    cmp  [select_panel_counter],0
    jne  .right_1
    cmp  [left_start_draw_line],0
    jne   .draw_left_panel
    cmp  [left_start_draw_cursor_line],0
    je	 still
.draw_left_panel:
    mov  [left_start_draw_line],0
    mov  [left_start_draw_cursor_line],0
    call draw_left_panel
    jmp  still
.right_1:
    cmp  [right_start_draw_line],0
    jne   .draw_right_panel
    cmp  [right_start_draw_cursor_line],0
    je	 still
.draw_right_panel:
    mov  [right_start_draw_line],0
    mov  [right_start_draw_cursor_line],0
    call draw_right_panel
    jmp  still
;-------------------------------------------------------------
key_79:
    cmp  ah,79 ; End
    jne  key_28
    cmp  [select_panel_counter],0
    jne  .right_1
    mov  eax,[left_folder_block]
    sub  eax,[max_panel_line]
    test eax,0x80000000
    jnz  key_81.left_2
    call prepare_data_left_down
    ja   @f
    cmp  eax,[left_start_draw_line]
    je   still
@@:
    mov  [left_start_draw_line],eax
    mov  eax,[max_panel_line]
    jmp  key_81.left_3
.right_1:
    mov  eax,[right_folder_block]
    sub  eax,[max_panel_line]
    test eax,0x80000000
    jnz  key_81.right_3
    call prepare_data_right_down
    ja   @f
    cmp  eax,[right_start_draw_line]
    je   still
@@:
    mov  [right_start_draw_line],eax
    mov  eax,[max_panel_line]
    jmp  key_81.right_4    
;-------------------------------------------------------------
key_28:
    cmp  ah,28 ; Enter
    jne  key_ctrl_up
.1:
    cmp  [shift_flag],1
    je	 still
    cmp  [ctrl_flag],1
    je	 still
    cmp  [alt_flag],1
    je	 files_information
    
    mov  [open_param],0
.2:
    cmp  [select_panel_counter],0
    jne  .right_1
    mov  ebp,read_folder_name    ;read_folder.name
    call  calculate_left_data_1
    add  esi,32
    cmp  [exit_dir],1
    je	 .up_patch
    test [esi],byte 0x10
    jz	 file_no_folder
    cmp  [open_param],0
    jne  still
    cmp  [esi+40],word 2Eh
    je	 still
    cmp  [esi+40],word '..'
    je	 .up_patch
    call calculate_key_28_1
    mov  [left_start_draw_cursor_line],0
    mov  [left_start_draw_line],0
    jmp  proc_read_folder
.up_patch:
    call calculate_key_28_2
    jmp  proc_read_folder
.right_1:
    mov  ebp,read_folder_1_name   ;read_folder_1.name
    call calculate_right_data_1
    add  esi,32
    cmp  [exit_dir],1
    je	 .up_patch_1
    test [esi],byte 0x10
    jz	 file_no_folder
    cmp  [esi+40],word 2Eh
    je	 still
    cmp  [esi+40],word '..'
    je	 .up_patch_1
    call calculate_key_28_1
    mov  [right_start_draw_cursor_line],0
    mov  [right_start_draw_line],0
    jmp  proc_read_folder_1
.up_patch_1:
    call calculate_key_28_2
    jmp  proc_read_folder_1
;---------------------------------------------------------------------
calculate_key_28_1:    
;    mov  edi,read_folder.name-1
    mov  edi,ebp
    dec  edi
    inc  ebp
@@:
    inc  edi
    cmp  [edi],byte 0
    jne  @r
    cmp  edi,ebp ;read_folder.name+1
    je	 @f
    mov  al,'/'
    mov [edi],al
    inc  edi
@@:
    add  esi,40
@@:
    cld
    lodsb
    stosb
    cmp al,0
    jnz   @r
    ret
;---------------------------------------------------------------------
calculate_key_28_2:
    mov  [exit_dir],0
    mov  edi,ebp ;read_folder.name
@@:
    inc  edi
    cmp  [edi],byte 0
    jne  @r
    mov  [extension_size],edi
    dec  edi
@@:
    dec  edi
    cmp  [edi],byte '/'
    jne  @r
    mov  eax,ebp ;read_folder.name
    cmp  edi,eax
    jbe  @f
    mov  [edi],byte 0
@@:
    inc  edi
    mov  [temp_counter_dword],edi
    dec  edi
    sub  [extension_size],edi
    mov  [search_pre_folder],1
    ret
;---------------------------------------------------------------------
set_background:
    cmp  [shift_flag],1
    je   .shift
    cmp  [ctrl_flag],1
    jne  still
    mov  [open_param],background_stretch
    jmp  key_28.2
.shift:
    mov  [open_param],background_tile
    jmp  key_28.2    
;---------------------------------------------------------------------    
reload_dir_1:
    cmp  [ctrl_flag],0
    je	 still
    jmp  reload_dir
;---------------------------------------------------------------------
symbol_a_up:
    cmp  [shift_flag],1
    je	 still
    cmp  [ctrl_flag],1
    je	 .ctrl
    cmp  [alt_flag],1
    je	 still
    jmp  still
.ctrl:
    mov  [mark_action_counter],0
    jmp  mark_all_file
;---------------------------------------------------------------------
NumPad_plus_Up:
    cmp  [shift_flag],1
    je	 still
    cmp  [ctrl_flag],1
    je	 .ctrl
    cmp  [alt_flag],1
    je	 still
    jmp  still
.ctrl:
    mov  [mark_action_counter],0
    jmp  mark_all_file
;---------------------------------------------------------------------
NumPad_minus_Up:
    cmp  [shift_flag],1
    je	 still
    cmp  [ctrl_flag],1
    je	 .ctrl
    cmp  [alt_flag],1
    je	 still
    jmp  still
.ctrl:
    mov  [mark_action_counter],1
    jmp  mark_all_file
;---------------------------------------------------------------------
NumPad_sneg_Up:
    cmp  [shift_flag],1
    je	 still
    cmp  [ctrl_flag],1
    je	 .ctrl
    cmp  [alt_flag],1
    je	 still
    jmp  still
.ctrl:
    mov  [mark_action_counter],2
    jmp  mark_all_file
;---------------------------------------------------------------------
f_key_f1:
;sort_name:
    cmp  [shift_flag],1
    je	 still
    cmp  [ctrl_flag],1
    je	 still
    cmp  [alt_flag],1
    je	 draw_left_select_disk_menu
    jmp  help_start
;---------------------------------------------------------------------
f_key_f2:
;sort_name:
    cmp  [shift_flag],1
    je	 still
    cmp  [ctrl_flag],1
    je	 still
    cmp  [alt_flag],1
    je	 draw_right_select_disk_menu
    jmp  still
;---------------------------------------------------------------------
f_key_f3:
;sort_name:
    cmp  [shift_flag],1
    je	 still
    cmp  [ctrl_flag],1
    je	 .ctrl
    cmp  [alt_flag],1
    je	 still
    jmp  still
.ctrl:
    cmp  [select_panel_counter],1
    je	 right_sort_name
    jmp  left_sort_name
;---------------------------------------------------------------------
f_key_f4:
;sort_type:
    cmp  [shift_flag],1
    je	 still
    cmp  [ctrl_flag],1
    je	 .ctrl
    cmp  [alt_flag],1
    je	 still
    jmp  open_file_f4
.ctrl:
    cmp  [select_panel_counter],1
    je	 right_sort_type
    jmp  left_sort_type
;---------------------------------------------------------------------
f_key_f5:
;sort_size:
    cmp  [shift_flag],1
    je	 still
    cmp  [ctrl_flag],1
    je	 .ctrl
    cmp  [alt_flag],1
    je	 still
    jmp  copy_file_f5
.ctrl:
    cmp  [select_panel_counter],1
    je	 right_sort_size
    jmp  left_sort_size
;---------------------------------------------------------------------
f_key_f6:
;sort_date:
    cmp  [shift_flag],1
    je	 still
    cmp  [ctrl_flag],1
    je	 .ctrl
    cmp  [alt_flag],1
    je	 still
    jmp  move_file_f6
.ctrl:
    cmp  [select_panel_counter],1
    je	 right_sort_date
    jmp  left_sort_date
;---------------------------------------------------------------------
f_key_f7:
    cmp  [shift_flag],1
    je	 still
    cmp  [ctrl_flag],1
    je	 still
    cmp  [alt_flag],1
    je	 still
    jmp  create_directory
;---------------------------------------------------------------------
f_key_f8:
    cmp  [shift_flag],1
    je	 still
    cmp  [ctrl_flag],1
    je	 still
    cmp  [alt_flag],1
    je	 still
    jmp  delete_file
;---------------------------------------------------------------------
f_key_f12:
    cmp  [shift_flag],1
    je	 still
    cmp  [ctrl_flag],1
    je	 still
    cmp  [alt_flag],1
    je	 still
    jmp  exit_apl
;---------------------------------------------------------------------
key_shift_up:
    cmp  [shift_flag],1
    je	 still
    mov  [shift_flag],1
    jmp  key_alt_down.for_all
;---------------------------------------------------------------------
key_shift_down:
    mov  [shift_flag],0
    jmp  key_alt_down.for_all
;---------------------------------------------------------------------
key_ctrl_up:
    cmp   ah,29
    jne   key_ctrl_down
.1:
    cmp  [ctrl_flag],1
    je	 still
    mov  [ctrl_flag],1
    jmp  key_alt_down.for_all
;---------------------------------------------------------------------
key_ctrl_down:
    cmp   ah,157
    jne   key_alt_up
.1:
    mov  [ctrl_flag],0
    jmp  key_alt_down.for_all
;---------------------------------------------------------------------
key_alt_up:
    cmp   ah,56
    jne   key_alt_down
.1:
    cmp  [alt_flag],1
    je	 still
    mov  [alt_flag],1
    jmp  key_alt_down.for_all
;---------------------------------------------------------------------
key_alt_down:
    cmp   ah,184
    jne   key_insert
.1:
    mov  [alt_flag],0
.for_all:
    call erase_fbutton
    call draw_fbutton
    jmp  still
;---------------------------------------------------------------------
key_insert:
    cmp   ah,82   ; Insert
    je	  mark_file
    cmp   ah,83
    je	  f_key_f8	;delete_file
key_end:
    jmp  still
;---------------------------------------------------------------------