forked from KolibriOS/kolibrios
fca11d7700
git-svn-id: svn://kolibrios.org@111 a494cfbc-eb01-0410-851d-a64ba20cac60
140 lines
2.9 KiB
PHP
140 lines
2.9 KiB
PHP
;------------------------------------------------------------------------------
|
|
;///// SORTING ////////////////////////////////////////////////////////////////
|
|
;------------------------------------------------------------------------------
|
|
|
|
r_sort db 1
|
|
l_sort db 1
|
|
|
|
align 4
|
|
compare_table:
|
|
dd compare_by_name
|
|
dd compare_by_extension
|
|
|
|
; AL = panel
|
|
func mfar_sort
|
|
pusha
|
|
cmp al,0
|
|
jne ._00
|
|
mov eax,[d_lcnt]
|
|
mov edi,lstart
|
|
movzx edx,[l_sort]
|
|
jmp @f
|
|
._00:
|
|
mov eax,[d_rcnt]
|
|
mov edi,rstart
|
|
movzx edx,[r_sort]
|
|
@@:
|
|
mov edx,[edx*4+compare_table]
|
|
cmp eax,2
|
|
jbe .exit
|
|
dec eax
|
|
shl eax,4
|
|
add eax,edi
|
|
cmp word[edi],'..'
|
|
jne @f
|
|
add edi,16
|
|
@@:
|
|
push edi
|
|
mov esi,edi
|
|
add edi,16
|
|
.next_file:
|
|
call edx
|
|
add edi,16
|
|
cmp edi,eax
|
|
jbe .next_file
|
|
|
|
mov ebx,12
|
|
@@:
|
|
mov ecx,[ebx+eax]
|
|
xchg [ebx+esi],ecx
|
|
mov [ebx+eax],ecx
|
|
sub ebx,4
|
|
jge @b
|
|
|
|
mov esi,[esp]
|
|
mov edi,esi
|
|
add edi,16
|
|
|
|
sub eax,16
|
|
cmp eax,edi
|
|
jge .next_file
|
|
pop edi
|
|
|
|
.exit:
|
|
popad
|
|
ret
|
|
endf
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
; ESI = pointer to 1st file info
|
|
; EDI = pointer to 2nd file info
|
|
func compare_by_name
|
|
mov ecx,11
|
|
push edi esi
|
|
repe cmpsb
|
|
pop esi edi
|
|
pushfd
|
|
test byte[esi+11],FA_FOLDER
|
|
jnz ._00
|
|
test byte[edi+11],FA_FOLDER
|
|
jz ._01
|
|
jmp ._03
|
|
._00:
|
|
test byte[edi+11],FA_FOLDER
|
|
jz ._02
|
|
._01:
|
|
popfd
|
|
jg ._04
|
|
mov esi,edi
|
|
ret
|
|
._02:
|
|
popfd
|
|
mov esi,edi
|
|
ret
|
|
._03:
|
|
popfd
|
|
._04:
|
|
ret
|
|
endf
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
; ESI = pointer to 1st file info
|
|
; EDI = pointer to 2nd file info
|
|
func compare_by_extension
|
|
push edi esi
|
|
mov ecx,3
|
|
add esi,8
|
|
add edi,8
|
|
repe cmpsb
|
|
jne ._00
|
|
mov esi,[esp]
|
|
mov edi,[esp+4]
|
|
mov ecx,8
|
|
repe cmpsb
|
|
._00:
|
|
pop esi edi
|
|
pushfd
|
|
test byte[esi+11],FA_FOLDER
|
|
jnz ._01
|
|
test byte[edi+11],FA_FOLDER
|
|
jz ._02
|
|
jmp ._04
|
|
._01:
|
|
test byte[edi+11],FA_FOLDER
|
|
jz ._03
|
|
._02:
|
|
popfd
|
|
jg ._05
|
|
mov esi,edi
|
|
ret
|
|
._03:
|
|
popfd
|
|
mov esi,edi
|
|
ret
|
|
._04:
|
|
popfd
|
|
._05:
|
|
ret
|
|
endf |