kolibrios/programs/fs/kfm/trunk/file_inf.inc

481 lines
11 KiB
PHP
Raw Normal View History

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
;---------------------------------------------------------------------
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 10-<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
; EAX - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; EBX - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;---------------------------------------------------------------------
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
;----------------------------------------------------------
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 64-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> divident <EFBFBD><EFBFBD> 16-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> divisor.
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> 64-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> quotent,
; <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <EFBFBD> 16-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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
;---------------------------------------------------------------------