mirror of
https://github.com/KolibriOS/kolibrios.git
synced 2024-12-01 21:17:05 +03:00
837 lines
17 KiB
PHP
837 lines
17 KiB
PHP
|
left_sort_files:
|
|||
|
; mcall 26,9
|
|||
|
; mov [timer_tick],eax
|
|||
|
mov eax,[left_folder_data]
|
|||
|
add eax,32+40
|
|||
|
cmp [eax],word '..'
|
|||
|
jne @f
|
|||
|
cmp [eax+2],byte 0
|
|||
|
jne @f
|
|||
|
add [left_folder_data],304
|
|||
|
dec [left_folder_block]
|
|||
|
mov [exit_to_dir],1
|
|||
|
@@:
|
|||
|
; add memory for sorting
|
|||
|
mov ecx,[right_folder_data]
|
|||
|
sub ecx,[left_folder_data]
|
|||
|
mov ebx,[appl_memory]
|
|||
|
add ecx,ebx
|
|||
|
push ebx
|
|||
|
mov [appl_memory],ecx
|
|||
|
mcall 64,1
|
|||
|
mov edi,[esp]
|
|||
|
mov ecx,[appl_memory]
|
|||
|
sub ecx,edi
|
|||
|
shr ecx,2
|
|||
|
mov eax,0xffffffff
|
|||
|
cld
|
|||
|
rep stosd
|
|||
|
cmp [left_sort_flag],0
|
|||
|
je left_name_sort
|
|||
|
cmp [left_sort_flag],1
|
|||
|
je left_type_sort
|
|||
|
jmp left_size_date_sort
|
|||
|
.move_sorted_file:
|
|||
|
; move sorted file area in folder area
|
|||
|
mov esi,[esp]
|
|||
|
mov edi,[left_folder_data]
|
|||
|
add edi,32
|
|||
|
mov ecx,[right_folder_data]
|
|||
|
sub ecx,edi
|
|||
|
shr ecx,2
|
|||
|
cld
|
|||
|
rep movsd
|
|||
|
cmp [exit_to_dir],0
|
|||
|
je @f
|
|||
|
sub [left_folder_data],304
|
|||
|
inc [left_folder_block]
|
|||
|
mov [exit_to_dir],0
|
|||
|
@@:
|
|||
|
; sub memory for sorting
|
|||
|
pop ecx
|
|||
|
mov [appl_memory],ecx
|
|||
|
mcall 64,1
|
|||
|
; mcall 26,9
|
|||
|
; sub eax,[timer_tick]
|
|||
|
; mov [timer_tick],eax
|
|||
|
; call draw_window
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
left_name_sort:
|
|||
|
; sorting of files
|
|||
|
call prepare_data_1
|
|||
|
call left_name_sort_1
|
|||
|
call prepare_data_2
|
|||
|
call left_name_sort_1
|
|||
|
.1:
|
|||
|
call prepare_data_4
|
|||
|
jmp left_sort_files.move_sorted_file
|
|||
|
left_name_sort_1:
|
|||
|
xor ebp,ebp
|
|||
|
.copy_folders:
|
|||
|
call copy_folders_1
|
|||
|
je .file
|
|||
|
test [esi],byte 0x10
|
|||
|
jz .continue
|
|||
|
jmp @f
|
|||
|
.file:
|
|||
|
test [esi],byte 0x10
|
|||
|
jnz .continue
|
|||
|
@@:
|
|||
|
call prepare_data_3
|
|||
|
.start:
|
|||
|
push esi edi
|
|||
|
call sort_by_name.start
|
|||
|
jae .add_counter
|
|||
|
.no_add_counter:
|
|||
|
call move_area_for_bdvk
|
|||
|
pop edi esi
|
|||
|
jmp .end
|
|||
|
.add_counter:
|
|||
|
inc [sort_counter]
|
|||
|
pop edi esi
|
|||
|
call add_counter
|
|||
|
jae .start
|
|||
|
.end:
|
|||
|
call move_bdvk
|
|||
|
.continue:
|
|||
|
inc ebp
|
|||
|
cmp ebp,[left_folder_block]
|
|||
|
jb .copy_folders
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
left_type_sort:
|
|||
|
; sorting of files
|
|||
|
call left_prepare_extension_start_1
|
|||
|
call prepare_data_1
|
|||
|
call left_type_sort_1
|
|||
|
call prepare_data_2
|
|||
|
call left_type_sort_1
|
|||
|
jmp left_name_sort.1
|
|||
|
left_type_sort_1:
|
|||
|
xor ebp,ebp
|
|||
|
.copy_folders:
|
|||
|
call copy_folders_1
|
|||
|
je .file
|
|||
|
; test [esi],byte 0x10
|
|||
|
test al,ah
|
|||
|
jz .continue
|
|||
|
jmp @f
|
|||
|
.file:
|
|||
|
; test [esi],byte 0x10
|
|||
|
test al,ah
|
|||
|
jnz .continue
|
|||
|
@@:
|
|||
|
call prepare_data_3
|
|||
|
.start:
|
|||
|
push esi edi
|
|||
|
cmp [dir_or_file],1
|
|||
|
je @f
|
|||
|
call prepare_data_5
|
|||
|
@@:
|
|||
|
call sort_by_name.start
|
|||
|
je .1
|
|||
|
ja .add_counter
|
|||
|
.no_add_counter:
|
|||
|
call move_area_for_bdvk
|
|||
|
pop edi esi
|
|||
|
jmp .end
|
|||
|
.1:
|
|||
|
cmp [dir_or_file],1
|
|||
|
je .add_counter
|
|||
|
call sort_by_name
|
|||
|
jbe .no_add_counter
|
|||
|
.add_counter:
|
|||
|
inc [sort_counter]
|
|||
|
pop edi esi
|
|||
|
call add_counter
|
|||
|
jae .start
|
|||
|
.end:
|
|||
|
call move_bdvk
|
|||
|
.continue:
|
|||
|
inc ebp
|
|||
|
cmp ebp,[left_folder_block]
|
|||
|
jb .copy_folders
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
left_size_date_sort:
|
|||
|
; sorting of files
|
|||
|
call prepare_data_1
|
|||
|
call left_size_date_sort_1
|
|||
|
call prepare_data_2
|
|||
|
call left_size_date_sort_1
|
|||
|
jmp left_name_sort.1
|
|||
|
left_size_date_sort_1:
|
|||
|
xor ebp,ebp
|
|||
|
.copy_folders:
|
|||
|
call copy_folders_1
|
|||
|
je .file
|
|||
|
test [esi],byte 0x10
|
|||
|
jz .continue
|
|||
|
jmp @f
|
|||
|
.file:
|
|||
|
test [esi],byte 0x10
|
|||
|
jnz .continue
|
|||
|
@@:
|
|||
|
call prepare_data_3
|
|||
|
.start:
|
|||
|
push esi edi
|
|||
|
mov eax,[left_sort_flag]
|
|||
|
cmp eax,2
|
|||
|
je .size_sort
|
|||
|
call sort_by_date
|
|||
|
; je .1
|
|||
|
jae .add_counter
|
|||
|
jmp .no_add_counter
|
|||
|
.size_sort:
|
|||
|
cmp [dir_or_file],0
|
|||
|
je .file_1
|
|||
|
call sort_by_name.start
|
|||
|
jmp @f
|
|||
|
.file_1:
|
|||
|
call sort_by_size
|
|||
|
@@:
|
|||
|
jae .add_counter
|
|||
|
.no_add_counter:
|
|||
|
call move_area_for_bdvk
|
|||
|
pop edi esi
|
|||
|
jmp .end
|
|||
|
;.1:
|
|||
|
; call sort_by_name.start
|
|||
|
; jbe .no_add_counter
|
|||
|
.add_counter:
|
|||
|
inc [sort_counter]
|
|||
|
pop edi esi
|
|||
|
call add_counter
|
|||
|
jae .start
|
|||
|
.end:
|
|||
|
call move_bdvk
|
|||
|
.continue:
|
|||
|
inc ebp
|
|||
|
cmp ebp,[left_folder_block]
|
|||
|
jb .copy_folders
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
left_prepare_extension_start:
|
|||
|
xor ebp,ebp
|
|||
|
mov esi,[left_folder_data]
|
|||
|
add esi,32+40
|
|||
|
.start:
|
|||
|
call prepare_extension_start_all
|
|||
|
cmp ebp,[left_folder_block]
|
|||
|
jb .start
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
prepare_extension_start_all:
|
|||
|
push esi
|
|||
|
call search_extension_start
|
|||
|
mov eax,esi
|
|||
|
pop esi
|
|||
|
sub eax,esi
|
|||
|
sub ebx,esi
|
|||
|
shl eax,16
|
|||
|
mov ax,bx
|
|||
|
mov [esi+300-40],eax
|
|||
|
mov [esi+299-40],byte 0
|
|||
|
add esi,304
|
|||
|
inc ebp
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
left_prepare_extension_start_1:
|
|||
|
xor ebp,ebp
|
|||
|
mov edi,[esp+4]
|
|||
|
.start:
|
|||
|
xor eax,eax
|
|||
|
mov [edi+300],eax
|
|||
|
add edi,304
|
|||
|
inc ebp
|
|||
|
cmp ebp,[left_folder_block]
|
|||
|
jb .start
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
left_files_name_normalize:
|
|||
|
xor ebp,ebp
|
|||
|
mov esi,[left_folder_data]
|
|||
|
add esi,32+40
|
|||
|
.start:
|
|||
|
push esi
|
|||
|
mov al,[esi]
|
|||
|
call char_toupper
|
|||
|
mov [esi],al
|
|||
|
@@:
|
|||
|
inc esi
|
|||
|
mov al,[esi]
|
|||
|
test al,al
|
|||
|
jz @f
|
|||
|
call char_todown
|
|||
|
mov [esi],al
|
|||
|
jmp @b
|
|||
|
@@:
|
|||
|
pop esi
|
|||
|
add esi,304
|
|||
|
inc ebp
|
|||
|
cmp ebp,[left_folder_block]
|
|||
|
jb .start
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
right_files_name_normalize:
|
|||
|
xor ebp,ebp
|
|||
|
mov esi,[right_folder_data]
|
|||
|
add esi,32+40
|
|||
|
.start:
|
|||
|
push esi
|
|||
|
mov al,[esi]
|
|||
|
call char_toupper
|
|||
|
mov [esi],al
|
|||
|
@@:
|
|||
|
inc esi
|
|||
|
mov al,[esi]
|
|||
|
test al,al
|
|||
|
jz @f
|
|||
|
call char_todown
|
|||
|
mov [esi],al
|
|||
|
jmp @b
|
|||
|
@@:
|
|||
|
pop esi
|
|||
|
add esi,304
|
|||
|
inc ebp
|
|||
|
cmp ebp,[right_folder_block]
|
|||
|
jb .start
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
right_prepare_extension_start:
|
|||
|
xor ebp,ebp
|
|||
|
mov esi,[right_folder_data]
|
|||
|
add esi,32+40
|
|||
|
.start:
|
|||
|
call prepare_extension_start_all
|
|||
|
cmp ebp,[right_folder_block]
|
|||
|
jb .start
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
right_prepare_extension_start_1:
|
|||
|
xor ebp,ebp
|
|||
|
mov edi,[esp+4]
|
|||
|
.start:
|
|||
|
xor eax,eax
|
|||
|
mov [edi+300],eax
|
|||
|
add edi,304
|
|||
|
inc ebp
|
|||
|
cmp ebp,[right_folder_block]
|
|||
|
jb .start
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
prepare_data_1:
|
|||
|
mov [dir_or_file],1
|
|||
|
mov [dir_temp_counter],0
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
prepare_data_2:
|
|||
|
mov eax,[dir_temp_counter]
|
|||
|
mov [dir_temp_counter_1],eax
|
|||
|
imul eax,304
|
|||
|
add [esp+4],eax
|
|||
|
mov [dir_or_file],0
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
prepare_data_3:
|
|||
|
mov edi,[esp+4+4]
|
|||
|
add esi,40
|
|||
|
add edi,40
|
|||
|
mov [sort_counter],0
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
prepare_data_4:
|
|||
|
mov eax,[dir_temp_counter_1]
|
|||
|
imul eax,304
|
|||
|
sub [esp+4],eax
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
prepare_data_5:
|
|||
|
xor eax,eax
|
|||
|
mov ax,[esi+302-40]
|
|||
|
add esi,eax
|
|||
|
mov ax,[edi+302-40]
|
|||
|
add edi,eax
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
sort_by_name:
|
|||
|
mov esi,[esp+8]
|
|||
|
mov edi,[esp+4]
|
|||
|
.start:
|
|||
|
cld
|
|||
|
lodsd
|
|||
|
mov ebx,[edi] ; bufer
|
|||
|
add edi,4
|
|||
|
cmp al,bl
|
|||
|
jnz @f
|
|||
|
test bl, bl
|
|||
|
jz @f
|
|||
|
cmp ah,bh
|
|||
|
jnz @f
|
|||
|
test bh, bh
|
|||
|
jz @f
|
|||
|
ror eax,16
|
|||
|
ror ebx,16
|
|||
|
cmp al,bl
|
|||
|
jnz @f
|
|||
|
test bl, bl
|
|||
|
jz @f
|
|||
|
cmp ah, bh
|
|||
|
jnz @f
|
|||
|
test bh, bh
|
|||
|
jnz .start
|
|||
|
@@:
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
sort_by_name_3:
|
|||
|
mov esi,[esp+8]
|
|||
|
mov edi,[esp+4]
|
|||
|
.start:
|
|||
|
cld
|
|||
|
lodsd
|
|||
|
mov ecx,4
|
|||
|
rep scasb
|
|||
|
jz .start
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
sort_by_name_1:
|
|||
|
mov esi,[esp+8]
|
|||
|
mov edi,[esp+4]
|
|||
|
cmp [edi],byte 255
|
|||
|
je @f
|
|||
|
.start:
|
|||
|
cld
|
|||
|
lodsb
|
|||
|
mov ah,[edi] ; bufer
|
|||
|
inc edi
|
|||
|
cmp al,ah
|
|||
|
jnz @f
|
|||
|
test ah, ah
|
|||
|
jnz .start
|
|||
|
@@:
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
align 4
|
|||
|
sort_by_date:
|
|||
|
mov eax,[esi-12] ;+28-40]
|
|||
|
cmp eax,[edi-12] ;+28-40]
|
|||
|
jnz .end
|
|||
|
mov eax,[esi-16] ;+24-40]
|
|||
|
cmp eax,[edi-16] ;+24-40]
|
|||
|
.end:
|
|||
|
ret
|
|||
|
|
|||
|
;mov eax,[esi-12]
|
|||
|
;cmp eax,[edi-12]
|
|||
|
;jz @f
|
|||
|
;ret
|
|||
|
;@@:
|
|||
|
;mov eax,[esi-16]
|
|||
|
;cmp eax,[edi-16]
|
|||
|
;ret
|
|||
|
|
|||
|
;push ecx ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ecx <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;mov eax,[esi-12]
|
|||
|
;cmp eax,[edi-12]
|
|||
|
;setnz ch
|
|||
|
;adc ch,-2
|
|||
|
;mov eax,[esi-16]
|
|||
|
;cmp eax,[edi-16]
|
|||
|
;setnz cl
|
|||
|
;adc cl,-2
|
|||
|
;cmp cx,0xFEFE
|
|||
|
;pop ecx
|
|||
|
;ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
align 4
|
|||
|
sort_by_size:
|
|||
|
mov eax,[esi-4] ;+36-40]
|
|||
|
cmp eax,[edi-4] ;+36-40]
|
|||
|
jnz .end
|
|||
|
mov eax,[esi-8] ;+32-40]
|
|||
|
cmp eax,[edi-8] ;+32-40]
|
|||
|
.end:
|
|||
|
ret
|
|||
|
|
|||
|
;mov eax,[esi-4]
|
|||
|
;cmp eax,[edi-4]
|
|||
|
;jz @f
|
|||
|
;ret
|
|||
|
;@@:
|
|||
|
;mov eax,[esi-8]
|
|||
|
;cmp eax,[edi-8]
|
|||
|
;ret
|
|||
|
|
|||
|
;push ecx ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ecx <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;mov eax,[esi-4]
|
|||
|
;cmp eax,[edi-4]
|
|||
|
;setnz ch
|
|||
|
;adc ch,-2
|
|||
|
;mov eax,[esi-8]
|
|||
|
;cmp eax,[edi-8]
|
|||
|
;setnz cl
|
|||
|
;adc cl,-2
|
|||
|
;cmp cx,0xFEFE
|
|||
|
;pop ecx
|
|||
|
;ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
add_counter:
|
|||
|
add edi,304
|
|||
|
mov eax,[appl_memory]
|
|||
|
sub eax,304-40
|
|||
|
cmp eax,edi
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
copy_folders_1:
|
|||
|
mov edi,ebp
|
|||
|
call multiple_304
|
|||
|
; imul edi,304
|
|||
|
mov esi,edi
|
|||
|
add esi,[left_folder_data]
|
|||
|
add esi,32
|
|||
|
mov ah,0x10
|
|||
|
mov al,[esi]
|
|||
|
cmp [dir_or_file],0
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
copy_folders_2:
|
|||
|
mov edi,ebp
|
|||
|
call multiple_304
|
|||
|
; imul edi,304
|
|||
|
mov esi,edi
|
|||
|
add esi,[right_folder_data]
|
|||
|
add esi,32
|
|||
|
cmp [dir_or_file],0
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
move_bdvk:
|
|||
|
sub esi,40
|
|||
|
mov edi,[sort_counter]
|
|||
|
call multiple_304
|
|||
|
add edi,[esp+4+4]
|
|||
|
call move_bdvk_1
|
|||
|
inc [dir_temp_counter]
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
move_bdvk_1:
|
|||
|
mov eax,[esi+300]
|
|||
|
mov [edi+300],eax
|
|||
|
mov ecx,0
|
|||
|
mov [edi+299],cl
|
|||
|
mov cx,[esi+300]
|
|||
|
add ecx,41
|
|||
|
ror ecx,2
|
|||
|
mov ax,cx
|
|||
|
xor cx,cx
|
|||
|
rol ecx,2
|
|||
|
mov bx,cx
|
|||
|
mov cx,ax
|
|||
|
cld
|
|||
|
rep movsd
|
|||
|
mov cx,bx
|
|||
|
rep movsb
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
multiple_304:
|
|||
|
shl edi,4
|
|||
|
mov eax,edi
|
|||
|
mov ebx,eax
|
|||
|
shl edi,5
|
|||
|
shl eax,3
|
|||
|
sub edi,eax
|
|||
|
mov eax,ebx
|
|||
|
shl ebx,2
|
|||
|
sub edi,ebx
|
|||
|
sub edi,eax
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
move_area_for_bdvk:
|
|||
|
mov eax,[dir_temp_counter]
|
|||
|
mov edi,[sort_counter]
|
|||
|
test eax,eax
|
|||
|
je .end
|
|||
|
cmp eax,edi
|
|||
|
jbe .end
|
|||
|
call multiple_304
|
|||
|
; imul edi,304
|
|||
|
mov ecx,edi
|
|||
|
mov edi,[dir_temp_counter]
|
|||
|
add edi,2
|
|||
|
call multiple_304
|
|||
|
; imul edi,304
|
|||
|
mov eax,ecx
|
|||
|
mov ebx,[esp+12+4]
|
|||
|
add edi,ebx
|
|||
|
mov edx,[appl_memory]
|
|||
|
cmp edi,edx
|
|||
|
jbe @f
|
|||
|
mov edi,edx
|
|||
|
@@:
|
|||
|
mov esi,edi
|
|||
|
sub esi,304
|
|||
|
mov ecx,edi
|
|||
|
sub ecx,ebx
|
|||
|
sub ecx,eax
|
|||
|
shr ecx,2
|
|||
|
std
|
|||
|
rep movsd
|
|||
|
|
|||
|
; mov eax,ecx
|
|||
|
; mov ebx,304
|
|||
|
; mov edx,0
|
|||
|
; div ebx
|
|||
|
; mov ecx,eax
|
|||
|
; sub ecx,2
|
|||
|
; mov eax,[appl_memory]
|
|||
|
; mov [temp_ecx],edi
|
|||
|
; mov [temp_ebx],esi
|
|||
|
; mov [temp_eax],eax
|
|||
|
; pusha
|
|||
|
; call draw_window
|
|||
|
; mcall 5,300
|
|||
|
; popa
|
|||
|
; sub edi,303
|
|||
|
; sub esi,303
|
|||
|
;@@:
|
|||
|
; push ecx esi edi
|
|||
|
; call move_bdvk_1
|
|||
|
; pop edi esi ecx
|
|||
|
; sub edi,304
|
|||
|
; sub esi,304
|
|||
|
; dec ecx
|
|||
|
; jnz @b
|
|||
|
.end:
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
search_extension_start:
|
|||
|
mov edx,esi
|
|||
|
xor eax,eax
|
|||
|
@@:
|
|||
|
cld
|
|||
|
lodsb
|
|||
|
test eax,eax
|
|||
|
jnz @b
|
|||
|
dec esi
|
|||
|
dec edx
|
|||
|
push esi
|
|||
|
@@:
|
|||
|
std
|
|||
|
lodsb
|
|||
|
cmp esi,edx
|
|||
|
je .end
|
|||
|
cmp al,'.'
|
|||
|
jnz @b
|
|||
|
add esi,2
|
|||
|
pop ebx
|
|||
|
ret
|
|||
|
.end:
|
|||
|
pop esi
|
|||
|
mov ebx,esi
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
right_sort_files:
|
|||
|
mov eax,[right_folder_data]
|
|||
|
add eax,32+40
|
|||
|
cmp [eax],word '..'
|
|||
|
jne @f
|
|||
|
cmp [eax+2],byte 0
|
|||
|
jne @f
|
|||
|
add [right_folder_data],304
|
|||
|
dec [right_folder_block]
|
|||
|
mov [exit_to_dir],1
|
|||
|
@@:
|
|||
|
; add memory for sorting
|
|||
|
mov ecx,[appl_memory]
|
|||
|
push ecx
|
|||
|
sub ecx,[right_folder_data]
|
|||
|
add ecx,[esp]
|
|||
|
mov [appl_memory],ecx
|
|||
|
mcall 64,1
|
|||
|
mov edi,[esp]
|
|||
|
mov ecx,[appl_memory]
|
|||
|
sub ecx,edi
|
|||
|
shr ecx,2
|
|||
|
mov eax,0xffffffff
|
|||
|
cld
|
|||
|
rep stosd
|
|||
|
cmp [right_sort_flag],0
|
|||
|
je right_name_sort
|
|||
|
cmp [right_sort_flag],1
|
|||
|
je right_type_sort
|
|||
|
jmp right_size_date_sort
|
|||
|
.move_sorted_file:
|
|||
|
; move sorted file area in folder area
|
|||
|
mov esi,[esp]
|
|||
|
mov ecx,esi
|
|||
|
mov edi,[right_folder_data]
|
|||
|
add edi,32
|
|||
|
sub ecx,edi
|
|||
|
shr ecx,2
|
|||
|
cld
|
|||
|
rep movsd
|
|||
|
cmp [exit_to_dir],0
|
|||
|
je @f
|
|||
|
sub [right_folder_data],304
|
|||
|
inc [right_folder_block]
|
|||
|
mov [exit_to_dir],0
|
|||
|
@@:
|
|||
|
; sub memory for sorting
|
|||
|
pop ecx
|
|||
|
mov [appl_memory],ecx
|
|||
|
mcall 64,1
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
right_name_sort:
|
|||
|
; sorting of files
|
|||
|
call prepare_data_1
|
|||
|
call right_name_sort_1
|
|||
|
call prepare_data_2
|
|||
|
call right_name_sort_1
|
|||
|
.1:
|
|||
|
call prepare_data_4
|
|||
|
jmp right_sort_files.move_sorted_file
|
|||
|
right_name_sort_1:
|
|||
|
xor ebp,ebp
|
|||
|
.copy_folders:
|
|||
|
call copy_folders_2
|
|||
|
je .file
|
|||
|
test [esi],byte 0x10
|
|||
|
jz .continue
|
|||
|
jmp @f
|
|||
|
.file:
|
|||
|
test [esi],byte 0x10
|
|||
|
jnz .continue
|
|||
|
@@:
|
|||
|
call prepare_data_3
|
|||
|
.start:
|
|||
|
push esi edi
|
|||
|
call sort_by_name.start
|
|||
|
jae .add_counter
|
|||
|
.no_add_counter:
|
|||
|
call move_area_for_bdvk
|
|||
|
pop edi esi
|
|||
|
jmp .end
|
|||
|
.add_counter:
|
|||
|
inc [sort_counter]
|
|||
|
pop edi esi
|
|||
|
call add_counter
|
|||
|
jae .start
|
|||
|
.end:
|
|||
|
call move_bdvk
|
|||
|
.continue:
|
|||
|
inc ebp
|
|||
|
cmp ebp,[right_folder_block]
|
|||
|
jb .copy_folders
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
right_type_sort:
|
|||
|
; sorting of files
|
|||
|
call right_prepare_extension_start_1
|
|||
|
call prepare_data_1
|
|||
|
call right_type_sort_1
|
|||
|
call prepare_data_2
|
|||
|
call right_type_sort_1
|
|||
|
jmp right_name_sort.1
|
|||
|
right_type_sort_1:
|
|||
|
xor ebp,ebp
|
|||
|
.copy_folders:
|
|||
|
call copy_folders_2
|
|||
|
je .file
|
|||
|
test [esi],byte 0x10
|
|||
|
jz .continue
|
|||
|
jmp @f
|
|||
|
.file:
|
|||
|
test [esi],byte 0x10
|
|||
|
jnz .continue
|
|||
|
@@:
|
|||
|
call prepare_data_3
|
|||
|
.start:
|
|||
|
push esi edi
|
|||
|
cmp [dir_or_file],1
|
|||
|
je @f
|
|||
|
call prepare_data_5
|
|||
|
@@:
|
|||
|
call sort_by_name.start
|
|||
|
je .1
|
|||
|
ja .add_counter
|
|||
|
.no_add_counter:
|
|||
|
call move_area_for_bdvk
|
|||
|
pop edi esi
|
|||
|
jmp .end
|
|||
|
.1:
|
|||
|
cmp [dir_or_file],1
|
|||
|
je .add_counter
|
|||
|
call sort_by_name
|
|||
|
jbe .no_add_counter
|
|||
|
.add_counter:
|
|||
|
inc [sort_counter]
|
|||
|
pop edi esi
|
|||
|
call add_counter
|
|||
|
jae .start
|
|||
|
.end:
|
|||
|
call move_bdvk
|
|||
|
.continue:
|
|||
|
inc ebp
|
|||
|
cmp ebp,[right_folder_block]
|
|||
|
jb .copy_folders
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|
|||
|
right_size_date_sort:
|
|||
|
; sorting of files
|
|||
|
call prepare_data_1
|
|||
|
call right_size_date_sort_1
|
|||
|
call prepare_data_2
|
|||
|
call right_size_date_sort_1
|
|||
|
jmp right_name_sort.1
|
|||
|
right_size_date_sort_1:
|
|||
|
xor ebp,ebp
|
|||
|
.copy_folders:
|
|||
|
call copy_folders_2
|
|||
|
je .file
|
|||
|
test [esi],byte 0x10
|
|||
|
jz .continue
|
|||
|
jmp @f
|
|||
|
.file:
|
|||
|
test [esi],byte 0x10
|
|||
|
jnz .continue
|
|||
|
@@:
|
|||
|
call prepare_data_3
|
|||
|
.start:
|
|||
|
push esi edi
|
|||
|
cmp [right_sort_flag],2
|
|||
|
je .size_sort
|
|||
|
call sort_by_date
|
|||
|
je .1
|
|||
|
ja .add_counter
|
|||
|
jmp .no_add_counter
|
|||
|
.size_sort:
|
|||
|
cmp [dir_or_file],0
|
|||
|
je .file_1
|
|||
|
call sort_by_name.start
|
|||
|
jmp @f
|
|||
|
.file_1:
|
|||
|
call sort_by_size
|
|||
|
@@:
|
|||
|
jae .add_counter
|
|||
|
.no_add_counter:
|
|||
|
call move_area_for_bdvk
|
|||
|
pop edi esi
|
|||
|
jmp .end
|
|||
|
.1:
|
|||
|
call sort_by_name.start
|
|||
|
jbe .no_add_counter
|
|||
|
.add_counter:
|
|||
|
inc [sort_counter]
|
|||
|
pop edi esi
|
|||
|
call add_counter
|
|||
|
jae .start
|
|||
|
.end:
|
|||
|
call move_bdvk
|
|||
|
.continue:
|
|||
|
inc ebp
|
|||
|
cmp ebp,[right_folder_block]
|
|||
|
jb .copy_folders
|
|||
|
ret
|
|||
|
;---------------------------------------------------------------------
|