files_information:
    xor  eax,eax
    mov  [alt_flag],al
    mov  [files_counter],eax
    mov  [directories_counter],eax
    mov  [files_size.low],eax
    mov  [files_size.high],eax
    call get_files_information
    mov  eax,files_size
    mov  ebx,type_size_string
    call decimal_string_20
    call start_files_information_thread
   jmp still
;---------------------------------------------------------------------
start_files_information_thread:
    mcall 9, procinfo, -1
    mov   eax,[ebx+46]
    shr   eax,1
    add   eax,[ebx+38]
    sub   eax,150
    mov   [files_information_window_y+2],ax
    mov   eax,[ebx+42]
    shr   eax,1
    add   eax,[ebx+34]
    sub   eax,125
    mov   [files_information_window_x+2],ax
    mcall 51,1,thread_files_information_start,thread_stack
    ret
;---------------------------------------------------------------------
draw_files_information_window:
    mcall 12, 1
    mcall 0,[files_information_window_x] ,[files_information_window_y], 0x03ffffcc
    mov   edx,90 shl 16+50
    mov   ebx,0xa0000
    mov   esi,0x10000000
    cmp  [inf_marked_yes],1
    je	 .continue_4
    cmp  [nesting_direction],1
    je    @f
    add  edx,15
.continue_4:
    mcall 47, ,[files_counter]
@@:
    cmp  [inf_marked_yes],1
    je	 .continue_2
    cmp  [nesting_direction],0
    je    .continue_2
    cmp  [directories_counter],0
    je   @f
.continue_2:
    add  edx,15
    mcall 47, ,[directories_counter]
@@:
    add  edx,15
    mov  ebx,edx
    mcall 4, ,0x90000000,type_size_string
    cmp  [select_panel_counter],0
    jne  .right_1
    mov   edx,read_folder_name
    jmp  @f
.right_1:
    mov   edx,read_folder_1_name
@@:
    mcall 4,<75,35>,0x80000000,   ;file_name
    mcall 4,<10,35>,0x90000000,type_location
    cmp  [inf_marked_yes],1
    je	 .continue
    mcall 4,<90,50>,0x80000000,type_name
    mov   ecx,0x90000000
    cmp  [nesting_direction],1
    je    @f
    mcall 4,<10,50>, ,type_dir_name
    jmp   .continue
@@:
    mcall 4,<10,50>, ,type_file_name
.continue:
    cmp  [inf_marked_yes],1
    je	 .continue_3
    cmp  [nesting_direction],1
    je    @f
.continue_3:
    add   ebx,15
    mcall 4, , ,type_files
@@:
    cmp  [inf_marked_yes],1
    je	 .continue_1
    cmp  [nesting_direction],0
    je    .continue_1
    cmp  [directories_counter],0
    je   @f
.continue_1:
    add   ebx,15
    mcall 4, , ,type_dir
@@:
    add   ebx,15
    mcall 4, , ,type_size
    mcall 12, 2
    ret
;---------------------------------------------------------------------
thread_files_information_start:
.red:
    call  draw_files_information_window
.still:
    mcall 10
    cmp   eax,1
    je	  .red
    cmp   eax,2
    je	  .key
    cmp   eax,3
    je	  .button
    jmp   .still
.key:
.button:
    mcall -1
    jmp   .still
;---------------------------------------------------------------------
;       ������� 10-��� ����� �� ������ � ��������� ���
;       ����:
;               EAX - ��������� �� �����
;               EBX - ����� ������
;---------------------------------------------------------------------
decimal_string_20:
	push  eax ebx ecx edx
	mov   [divisor],word 10
	mov   ebp,eax
	xor	  ecx,ecx
;	mov	  [ebx],byte '0'
;	inc	  ebx
.p3:
	xor	  edx,edx
	push  ebx
	call  Division_64bit
	mov   eax,[quotent]
	mov   [ebp],eax
	mov   eax,[quotent+4]
	mov   [ebp+4],eax	
	pop   ebx
	add	  edx,48
	push  edx
	inc	  ecx
	cmp   [ebp],dword 0
	jne	  .p3
	cmp   [ebp+4],dword 0
	jne	  .p3
	cmp   ecx,19
	jbe   .p4
	mov   ecx,20
	dec   ebx
.p4:
	pop	  edx
	mov	  [ebx],dl
	inc	  ebx
	loop  .p4
	mov   [ebx], byte 0
	pop	  edx ecx ebx eax
	ret
;----------------------------------------------------------
; ������� 64-������� ����� divident �� 16-������ ����� divisor.
; ������� ���������� � 64-������ ���������� quotent,
; � ������� - � 16-������ ���������� modulo
Division_64bit:
        mov  ax,[ebp+6]
        xor  dx,dx
        mov  bx,[divisor]
        div  bx
        mov  [quotent+6],ax
        mov  ax,[ebp+4]
        div  bx
        mov  [quotent+4],ax
        mov  ax,[ebp+2]
        div  bx
        mov  [quotent+2],ax
        mov  ax,[ebp]
        div  bx
        mov  [quotent],ax
;        mov  [modulo],dx
        ret
        
;divident:
;      rb 8
divisor:
      rb 2
quotent:
      rb 8
;modulo:
;      rb 2
;---------------------------------------------------------------------
copy_type_name:
    push  esi
    mov  esi,ebx
    mov  edi,type_name
@@:
    cld
    lodsb
    stosb
    test  al,al
    jnz   @b
    pop  esi
    ret
;---------------------------------------------------------------------
get_files_information:
    call get_information_marked_files
    cmp  [inf_marked_yes],1
    je	 .end_2
    xor  eax,eax
    xor  edx,edx
    cmp  [select_panel_counter],0
    jne  .right_1
    mov  ax,[left_start_draw_cursor_line]
    mov  ebx,10
    div  ebx
    mov  ebx,[left_start_draw_line]
    add  ebx,eax
    imul ebx,304
    add  ebx,[left_folder_data]
    call prepare_data_8
    mov   esi,read_folder_name
    jmp  .end
.right_1:
    mov  ax,[right_start_draw_cursor_line]
    mov  ebx,10
    div  ebx
    mov  ebx,[right_start_draw_line]
    add  ebx,eax
    imul ebx,304
    add  ebx,[right_folder_data]
    call prepare_data_8
    mov   esi,read_folder_1_name
.end:
    mov   [error_pointer],ebx
    call  copy_type_name
    mov   edi,file_name
    call  copy_path_1
    test [ebx-40],byte 0x10
    jz	 @f
    push eax ebx
    call get_inf_dir
    mov  [nesting_direction],0
    pop  ebx eax
    dec  [directories_counter]
    jmp  .end_2
@@:
    mov  [nesting_direction],1
    call get_file_size
    test  eax,eax
    jz	 .end_1
    call start_error_window_thread
    add  esp,4
    jmp  reload_dir_all
.end_1:
;    inc  [files_counter]
    mov  eax,[file_features_temp_area+32]
    add  [files_size.low],eax
    mov  eax,[file_features_temp_area+32+4]
    adc  [files_size.high],eax
.end_2:
    ret
;---------------------------------------------------------------------
get_information_marked_files:
    xor  eax,eax
    mov  [inf_marked_yes],al
    cmp  [select_panel_counter],al
    jne  .right_1
    mov  ebp,[left_folder_block]
.start:
    mov  ebx,ebp
    dec  ebx
    imul ebx,304
    add  ebx,[left_folder_data]
    add  ebx,32+40
    cmp  [ebx+299-40],byte 0
    je	 @f
    cmp  [ebx],word '..'
    jne  .continue
    cmp  [ebx+2],byte 0
    je	 .continue_1
.continue:
    mov  esi,read_folder_name
    call prepare_data_9
.continue_1:
    mov  [inf_marked_yes],1
@@:
    dec  ebp
    jnz  .start
    ret
.right_1:
    mov  ebp,[right_folder_block]
.start_1:
    mov  ebx,ebp
    dec  ebx
    imul ebx,304
    add  ebx,[right_folder_data]
    add  ebx,32+40
    cmp  [ebx+299-40],byte 0
    je	 @f
    cmp  [ebx],word '..'
    jne  .continue_2
    cmp  [ebx+2],byte 0
    je	 .continue_3
.continue_2:
    mov   esi,read_folder_1_name
    call prepare_data_9
.continue_3:
    mov  [inf_marked_yes],1
@@:
    dec  ebp
    jnz  .start_1
    ret
;---------------------------------------------------------------------
prepare_data_9:
    mov   [error_pointer],ebx
    mov  edi,file_name
    call copy_path_1
    test [ebx-40],byte 0x10
    jz	 @f
    call get_inf_dir
    ret
@@:
    inc  [files_counter]
    call get_file_size
    test eax,eax
    jz	 .continue
    call start_error_window_thread
    add  esp,8+4
    ret
.continue:
    mov  eax,[file_features_temp_area+32]
    add  [files_size.low],eax
    mov  eax,[file_features_temp_area+32+4]
    adc  [files_size.high],eax
.continue_1:
    ret
;---------------------------------------------------------------------
prepare_data_8:
    add  ebx,32+40
    cmp  [ebx],word '..'
    jne  .continue
    cmp  [ebx+2],byte 0
    jne  .continue
    add  esp,4+4
    jmp  reload_dir
.continue:
    ret
;---------------------------------------------------------------------
get_inf_dir:
    mov  [nesting_direction],0
    pusha
    mov   [recursive_pointer],0
    mov   eax,[appl_memory]
    mov   [appl_memory_old],eax
.1:
    mov  [read_delete_dir_data.size],0
    mov  [read_delete_dir_data.return],delete_dir_data
    call read_delete_dir
    test eax,eax
    jz	 @f
    mov   [error_pointer],file_name
    call start_error_window_thread
    popa
    add  esp,8+8
    ret
@@:
    mov  eax,[delete_dir_data+8]
    imul  eax,304
    add   eax,32
    mov   ebx,eax
    add   ebx,[appl_memory_old]
    cmp   ebx,[appl_memory]
    jbe   @f
    mov   ecx,[appl_memory]
    mov   ecx,ebx
    mov   [appl_memory],ecx
    mcall 64,1
@@:
    mov  eax,[delete_dir_data+8]
    mov  [read_delete_dir_data.size],eax
    mov   eax,[appl_memory_old]
    mov  [read_delete_dir_data.return],eax
    call read_delete_dir
    test eax,eax
    jz	 @f
    mov   [error_pointer],file_name
    call start_error_window_thread
    popa
    add  esp,8+8
    ret
@@:
    cmp  [nesting_direction],0
    je	  @f
    call get_inf_dir_2
    jnc  .end
    dec   ebp
    push  ebp
    jmp   .1
@@:
    call get_inf_dir_1
    jnc  .end
    dec   ebp
    push  ebp
    jmp   .1
.end:
    call  return_delete_path
    dec   [recursive_pointer]
    cmp   [recursive_pointer],0
    jge   .1
    mov   ecx,[appl_memory_old]
    cmp   [appl_memory],ecx
    je	  @f
    mov   [appl_memory],ecx
    mcall 64,1
@@:
    popa
    ret
;---------------------------------------------------------------------
get_inf_dir_2:
    pop  eax
    pop  ebp
    push eax
    jmp  get_inf_dir_1.start
get_inf_dir_1:
    inc  [directories_counter]
    mov  ebp,[appl_memory_old]
    mov  ebp,[ebp+8]
.start:
    mov  ebx,ebp
    dec  ebx
    imul ebx,304
    add  ebx,[appl_memory_old]
    add  ebx,32+40
    cmp  [ebx],byte '.'
    jne  @f
    cmp  [ebx+1],byte 0
    je	 .continue_4
@@:
    cmp  [ebx],word '..'
    jne  .continue
    cmp  [ebx+2],byte 0
    je	 .continue_4
.continue:
    mov  esi,file_name
    inc  [recursive_pointer]
    call copy_path_2
    test [ebx-40],byte 0x10
    jnz  .continue_3
@@:
    inc  [files_counter]
.continue_1:
    mov  eax,[ebx+32-40]
    add  [files_size.low],eax
    mov  eax,[ebx+32+4-40]
    adc  [files_size.high],eax
    dec  [recursive_pointer]
    call return_delete_path
    dec  ebp
    jnz  .start

.continue_4:
    clc
    mov  [nesting_direction],1
    ret
.continue_3:
    stc
    mov  [nesting_direction],0
    ret
;---------------------------------------------------------------------
;type_patch_test:
;    pusha
;    mcall 5,200
;    mcall 13,<290,300>,<3,13>,0x0
;    mcall 4,<300, 5>,0x80FFFFFF,file_name  ;[error_pointer]
;    mcall 47,0x160100,[recursive_pointer],<300, 5>,0xffffff
;    mcall 47,0x160100,ebp,<300, 5>,0xffffff
;    mcall 5,1
;    popa
;    ret
;temp_value_1 db '1',0
;temp_value_2 db '2',0
;temp_value_3 db '3',0
;temp_value_4 db '4',0
;temp_value_5 db '5',0
;---------------------------------------------------------------------