@open: case insensitive sorintg; more convenient navigation using the keyboard

git-svn-id: svn://kolibrios.org@5913 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
eAndrew 2015-11-11 19:16:02 +00:00
parent ee33b6893a
commit 8bc2caddf7
2 changed files with 63 additions and 35 deletions

View File

@ -33,28 +33,6 @@
ret ret
endp endp
proc string.compare uses ebx ecx edx, _str1, _str2
mov eax, 0
mov ebx, [_str1]
mov ecx, [_str2]
@@:
mov dl, [ebx]
cmp dl, [ecx]
jne .not_eq
cmp dl, 0
je @f
cmp [ecx], byte 0
je @f
inc ebx
inc ecx
jmp @b
.not_eq:
mov eax, -1
@@:
inc eax
ret
endp
proc string.cmp uses ecx esi edi, _str1, _str2, _n proc string.cmp uses ecx esi edi, _str1, _str2, _n
mov ecx, [_n] mov ecx, [_n]
test ecx, ecx ; Max length is zero? test ecx, ecx ; Max length is zero?

View File

@ -143,7 +143,7 @@ end if
last_y dd -1 last_y dd -1
if DEBUG eq 1 if DEBUG eq 1
std_param db "/sys/example.asm", 0 std_param db "~/sys/example.asm", 0
end if end if
imports: imports:
@ -429,8 +429,13 @@ end if
pop eax pop eax
@@: mov edi, 0
cmpe byte [ebx], 0, @f mov esi, [list.size]
.search:
shl esi, 5
add esi, list
@@:
cmpe ebx, esi, @f
movzx edx, byte [ebx] movzx edx, byte [ebx]
stdcall downcase_char, edx stdcall downcase_char, edx
@ -444,7 +449,15 @@ end if
add ebx, 32 add ebx, 32
jmp @b jmp @b
@@: @@:
jmp update cmpe edi, 1, update
mov ebx, list
mov ecx, 0
mov edi, 1
push eax
stdcall get_index
mov esi, eax
pop eax
jmp .search
.toggle_cb: .toggle_cb:
mov eax, [cb_always.flags] mov eax, [cb_always.flags]
@ -483,8 +496,23 @@ end if
stdcall get_index stdcall get_index
;; CHANGE INDEX ;; CHANGE INDEX
.check_p2:
cmpne esi, 2, .check_m2
mov ebx, [list.size]
dec ebx
sub ebx, eax
cmpg ebx, 1, .add
jmp .check
.check_m2:
cmpne esi, -2, .add
cmpg eax, 1, .add
jmp .check
.add:
add eax, esi add eax, esi
.check:
cmpl eax, [list.size], @f cmpl eax, [list.size], @f
mov eax, [list.size] mov eax, [list.size]
dec eax dec eax
@ -871,8 +899,12 @@ end if
mov eax, 0 mov eax, 0
cmpl [last_y], 0xFFFF, @f cmpl [last_y], 0xFFFF, @f
mov ebx, 0xFFFFFFFF shr 1
sub ebx, [last_y]
inc ebx
mov [last_y], 0 mov [last_y], 0
dec [sb_apps.position] ;dec [sb_apps.position]
sub [sb_apps.position], ebx
mov eax, 1 mov eax, 1
jmp .exit jmp .exit
@@: @@:
@ -905,8 +937,8 @@ end if
mov ebx, [list.size] mov ebx, [list.size]
shl ebx, 5 shl ebx, 5
add ebx, list add ebx, list
stdcall string.compare, [_sec], assoc_ini.sec stdcall string.cmp, [_sec], assoc_ini.sec
cmpe eax, 1, @f cmpe eax, 0, @f
stdcall string.copy, [_sec], ebx stdcall string.copy, [_sec], ebx
invoke libini.get_num, [_file], [_sec], assoc_ini.icon, 0 invoke libini.get_num, [_file], [_sec], assoc_ini.icon, 0
mov ecx, [list.size] mov ecx, [list.size]
@ -923,33 +955,50 @@ end if
;---------------------- ;----------------------
proc sort_list proc sort_list
mov eax, list
mov ebx, list.lowercased
@@:
stdcall string.copy, eax, ebx
stdcall string.to_lower_case, ebx
add eax, 32
add ebx, 32
cmpne byte [eax], 0, @b
mov edi, 0 mov edi, 0
mov ebx, list ;; i = 0 mov ebx, list.lowercased ;; i = 0
imul ecx, [list.size], 32 ;; i < n - 1 imul ecx, [list.size], 32 ;; i < n - 1
sub ecx, 32 sub ecx, 32
add ecx, list add ecx, list.lowercased
.loop1: .loop1:
mov edx, list ;; j = 0 mov edx, list.lowercased ;; j = 0
mov esi, [list.size] ;; j < n - i - 1 mov esi, [list.size] ;; j < n - i - 1
sub esi, edi sub esi, edi
dec esi dec esi
imul esi, 32 imul esi, 32
add esi, list add esi, list.lowercased
.loop2: .loop2:
mov eax, edx mov eax, edx
add eax, 32 add eax, 32
stdcall string.cmp, edx, eax, 32 stdcall string.cmp, edx, eax, 32
cmpne eax, 1, .next2 cmpne eax, 1, .next2
;; swap names ;; swap names lw
mov eax, edx mov eax, edx
add eax, 32 add eax, 32
stdcall string.copy, edx, buffer7 stdcall string.copy, edx, buffer7
stdcall string.copy, eax, edx stdcall string.copy, eax, edx
stdcall string.copy, buffer7, eax stdcall string.copy, buffer7, eax
;; swap names
mov eax, edx
sub eax, 256 * 32 - 32
sub edx, 256 * 32
stdcall string.copy, edx, buffer7
stdcall string.copy, eax, edx
stdcall string.copy, buffer7, eax
add edx, 256 * 32
;; swap icons ;; swap icons
mov eax, edx mov eax, edx
sub eax, list sub eax, list.lowercased
shr eax, 3 shr eax, 3
add eax, list.icon add eax, list.icon
push ebx ecx push ebx ecx
@ -977,6 +1026,7 @@ end if
skin system_colors skin system_colors
list rb 32 * 256 list rb 32 * 256
.lowercased rd 32 * 256
.icon rd 256 .icon rd 256
.size rd 1 .size rd 1
img rd 1 img rd 1