;---------------------------------------------------------------------
key_menu:
    mcall 2
    cmp  [extended_key],1
    je	 .extended_key
    test al, al
    jnz  .end_1
    cmp  ah, 0xE0
    jne  @f
    mov  [extended_key],1
.end_1:
    ret
@@:
    cmp  ah,72
    je	menu_key_72.1
    cmp  ah,80
    je	menu_key_80.1
    cmp  ah,28
    je	menu_key_28.1
.end:
    cmp  ah,208
    je	.end_1
    cmp  ah,200
    je	.end_1
    cmp  ah,156
    je	.end_1
    cmp  ah,184
    je	.end_5
    cmp  ah,187
    je	.end_1
    cmp  ah,188
    je	.end_1
    cmp  ah,199
    je	.end_1
    cmp  ah,207
    je	.end_1
    cmp  ah,201
    je	.end_1
    cmp  ah,209
    je	.end_1
    cmp  ah,42	; NumLock ON
    je	.end_1
    cmp  ah,170  ; NumLock ON
    je	.end_1
    cmp  ah,210
    je	.end_1
    cmp  ah,211
    je	.end_1
    cmp  ah,56
    je	.end_4
    cmp  ah,59
    je	.end_2
    cmp  ah,60
    je	.end_3
.for_all:
    mov [close_menu],1
    ret

.end_2:
    cmp  [alt_flag],0
    je	 .for_all
    cmp  [select_panel_counter],0
    je	.end_1
    mov [close_menu],2
    ret
.end_3:
    cmp  [alt_flag],0
    je	 .for_all
    cmp  [select_panel_counter],0
    jne  .end_1
    mov [close_menu],2
    ret
.end_4:
    cmp  [alt_flag],1
    je	 .end_1
    mov  [alt_flag],1
    jmp  @f
.end_5:
    cmp  [alt_flag],0
    je	 .end_1
    mov  [alt_flag],0
@@:
    call erase_fbutton
    call draw_fbutton
    ret
;---------------------------------------------------------------------
.extended_key:
    mov  [extended_key],0
menu_key_80:
    cmp  ah,80	; arrow down
    jne  menu_key_72
.1:
    mov  eax,[retrieved_devices_table_counter]
    dec  eax
    cmp  eax,[start_draw_menu_cursor_line]
    je	 @f
    inc  [start_draw_menu_cursor_line]
@@:
    ret
;---------------------------------------------------------------------
menu_key_72:
    cmp  ah,72	;arrow up
    jne  menu_key_71
.1:
    cmp  [start_draw_menu_cursor_line],0
    je	 @f
    dec  [start_draw_menu_cursor_line]
@@:
    ret
;---------------------------------------------------------------------
menu_key_71:
    cmp  ah,71    ;Home
    je   @f
    cmp  ah,73    ;PageUp
    jne  menu_key_79
@@:
    mov   [start_draw_menu_cursor_line],0
    ret
;---------------------------------------------------------------------
menu_key_79:
    cmp  ah,79    ; End
    je   @f
    cmp  ah,81    ; PageDown
    jne  menu_key_82
@@:
    mov  eax,[retrieved_devices_table_counter]
    dec  eax
    mov   [start_draw_menu_cursor_line],eax
    ret
;---------------------------------------------------------------------
menu_key_82:
    cmp  ah,82	; Insert
    jne  menu_key_83
    mov  esi,[start_draw_menu_cursor_line]
    imul esi,10
    add  esi,retrieved_devices_table
    inc  esi
    cmp  [esi],word 'cd'
    jne  @f
    xor  ecx,ecx
    mov  cl,[esi+2]
    sub  ecx,0x30
    mcall 24,5
@@:
    ret
;---------------------------------------------------------------------
menu_key_83:
    cmp  ah,83	; Delete
    jne  menu_key_28
    mov  esi,[start_draw_menu_cursor_line]
    imul esi,10
    add  esi,retrieved_devices_table
    inc  esi
    cmp  [esi],word 'cd'
    jne  @f
    xor  ecx,ecx
    mov  cl,[esi+2]
    sub  ecx,0x30
    mcall 24,4
@@:
    ret
;---------------------------------------------------------------------
menu_key_28:
    cmp  ah,28 ; Enter
    jne  menu_key_end
.1:
    mov [press_enter_menu],1
    ret
menu_key_end:
    jmp  key_menu.end
;---------------------------------------------------------------------
key_menu_left:
    mov  [close_menu],0
    mov [press_enter_menu],0
    call key_menu
    cmp  [press_enter_menu],1
    je	 .press_enter_menu
    cmp  [close_menu],0
    je	 draw_left_select_disk_menu.red
.1:
;    mov   [left_panel_clear_all],1
    call draw_left_panel
;    mov   [right_panel_clear_all],1
    call draw_right_panel
    cmp  [alt_flag],0
    je	 still
    cmp  [close_menu],2
    je	 draw_right_select_disk_menu
    jmp  still
.press_enter_menu:
    mov  esi,[start_draw_menu_cursor_line]
    imul esi,10
    add  esi,retrieved_devices_table
    inc  esi
    call copy_folder_name
    mov  [left_start_draw_cursor_line],0
    call proc_read_folder
    jmp  still
;---------------------------------------------------------------------
key_menu_right:
    mov  [close_menu],0
    mov [press_enter_menu],0
    call key_menu
    cmp  [press_enter_menu],1
    je	 .press_enter_menu
    cmp  [close_menu],0
    je	 draw_right_select_disk_menu.red
.1:
;    mov   [left_panel_clear_all],1
    call draw_left_panel
;    mov   [right_panel_clear_all],1
    call draw_right_panel
    cmp  [alt_flag],0
    je	 still
    cmp  [close_menu],2
    je	 draw_left_select_disk_menu
    jmp  still
.press_enter_menu:
    mov  esi,[start_draw_menu_cursor_line]
    imul esi,10
    add  esi,retrieved_devices_table
    inc  esi
    call copy_folder_name_1
    mov  [right_start_draw_cursor_line],0
    call proc_read_folder_1
    jmp  still
;---------------------------------------------------------------------
draw_left_select_disk_menu:
    mov  [select_panel_counter],0
    call  draw_left_panel
    call  draw_right_panel
    mov  [start_draw_menu_cursor_line],0
.red:
    call  draw_left_menu
.still:
    mcall 10
    cmp  eax,1
    je	 red
    cmp  eax,2
    je	 key_menu_left
    cmp  eax,3
    je   @f
    cmp   eax,6
    je    mouse_menu_left
    jmp  .still
@@:
    call draw_left_panel
    jmp  button
;---------------------------------------------------------------------
draw_right_select_disk_menu:
    mov  [select_panel_counter],1
    call  draw_left_panel
    call  draw_right_panel
    mov  [start_draw_menu_cursor_line],0
.red:
    call  draw_right_menu
.still:
    mcall 10
    cmp  eax,1
    je	 red
    cmp  eax,2
    je	 key_menu_right
    cmp  eax,3
    je   @f
    cmp   eax,6
    je    mouse_menu_right
    jmp  .still
@@:
    call draw_right_panel
    jmp  button
;---------------------------------------------------------------------
draw_left_menu:
    mov  ebx,[left_panel_x]
    mov  bx,60
    mov  ecx,[left_panel_y]
    mov  eax,[retrieved_devices_table_counter]
    mov  cx,ax
    imul cx,10
    mov  edx,0xffffcc
    mov  eax,13
    int  0x40
    call draw_menu_Selection
    call draw_menu_data
    ret
;---------------------------------------------------------------------
draw_right_menu:
    mov  ebx,[right_panel_x]
    mov  bx,60
    mov  ecx,[right_panel_y]
    mov  eax,[retrieved_devices_table_counter]
    mov  cx,ax
    imul cx,10
    mov  edx,0xffffcc
    mov  eax,13
    int  0x40
    call draw_menu_Selection
    call draw_menu_data
    ret
;---------------------------------------------------------------------
draw_menu_data:
    mov  edx,retrieved_devices_table
    shr  ecx,16
    mov  bx,cx
    mov  ebp,0
.start:
    mcall 4, ,0x80000000
    add   ebx,10
    add   edx,10
    inc   ebp
    cmp   ebp,[retrieved_devices_table_counter]
    jne   .start
    ret
;---------------------------------------------------------------------
draw_menu_Selection:
    push ebx ecx
    mov  eax,[start_draw_menu_cursor_line]
    imul eax,10
    shl  eax,16
    add  ecx,eax
    mov  cx,10
    mov  edx,0xbbffbb
    mov  eax,13
    int  0x40
    pop  ecx ebx
    ret
;---------------------------------------------------------------------
mouse_menu_left:
    mcall 37,2
    mov  [mouse_keys],eax
    mcall 37,1
    mov  [mouse_position],eax
    test eax,0x80000000
    jnz   draw_left_select_disk_menu.still
    test eax,0x8000
    jnz   draw_left_select_disk_menu.still
    mov   ebx,eax
    shr   ebx,16
    shl   eax,16
    shr   eax,16
    cmp   ebx,[window_width]
    ja    draw_left_select_disk_menu.still
    cmp   eax,[window_high]
    ja    draw_left_select_disk_menu.still
    xor   ecx,ecx
    mov   cx,[left_panel_y.start_y]
    cmp   ax,cx
    jbe    .close
    mov   edx,[retrieved_devices_table_counter]
    imul  edx,10
    add   cx,dx
    cmp   ax,cx
    jae    .close
    mov   cx,[left_panel_x.start_x]
    cmp   bx,cx
    jbe    .close
    add   cx,60
    cmp   bx,cx
    jae    .close
    sub   ax,[left_panel_y.start_y]
    mov   ebx,10
    xor   edx,edx
    div   ebx
    mov   [start_draw_menu_cursor_line],eax
    cmp   [mouse_keys],0
    je    draw_left_select_disk_menu.red
    jmp   key_menu_left.press_enter_menu
.close:
    cmp   [mouse_keys],0
    je    draw_left_select_disk_menu.still
;    mov   [left_panel_clear_all],1
    call  draw_left_panel
    jmp   still
;---------------------------------------------------------------------
mouse_menu_right:
    mcall 37,2
    mov  [mouse_keys],eax
    mcall 37,1
    mov  [mouse_position],eax
    test eax,0x80000000
    jnz   draw_right_select_disk_menu.still
    test eax,0x8000
    jnz   draw_right_select_disk_menu.still
    mov   ebx,eax
    shr   ebx,16
    shl   eax,16
    shr   eax,16
    cmp   ebx,[window_width]
    ja    draw_right_select_disk_menu.still
    cmp   eax,[window_high]
    ja    draw_right_select_disk_menu.still
    xor   ecx,ecx
    mov   cx,[right_panel_y.start_y]
    cmp   ax,cx
    jbe    .close
    mov   edx,[retrieved_devices_table_counter]
    imul  edx,10
    add   cx,dx
    cmp   ax,cx
    jae    .close
    mov   cx,[right_panel_x.start_x]
    cmp   bx,cx
    jbe    .close
    add   cx,60
    cmp   bx,cx
    jae    .close
    sub   ax,[right_panel_y.start_y]
    mov   ebx,10
    xor   edx,edx
    div   ebx
    mov   [start_draw_menu_cursor_line],eax
    cmp   [mouse_keys],0
    je    draw_right_select_disk_menu.red
    jmp   key_menu_right.press_enter_menu
.close:
    cmp   [mouse_keys],0
    je    draw_right_select_disk_menu.still
;    mov   [right_panel_clear_all],1
    call  draw_right_panel
    jmp   still
;---------------------------------------------------------------------