0,0 → 1,140 |
;------------------------------------------------------------------------------ |
;///// 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 |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |