forked from KolibriOS/kolibrios
@open: add apps sorting; string.inc: add string.cmp for compare strings
git-svn-id: svn://kolibrios.org@5907 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
be110571f5
commit
5ed305bfbd
@ -55,6 +55,29 @@
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
proc string.cmp uses ecx esi edi, _str1, _str2, _n
|
||||||
|
mov ecx, [_n]
|
||||||
|
test ecx, ecx ; Max length is zero?
|
||||||
|
je .done
|
||||||
|
|
||||||
|
mov esi, [_str1] ; esi = string s1
|
||||||
|
mov edi, [_str2] ; edi = string s2
|
||||||
|
cld
|
||||||
|
.compare:
|
||||||
|
cmpsb ; Compare two bytes
|
||||||
|
jne .done
|
||||||
|
cmp byte [esi-1], 0 ; End of string?
|
||||||
|
je .done
|
||||||
|
dec ecx ; Length limit reached?
|
||||||
|
jne .compare
|
||||||
|
.done:
|
||||||
|
seta al ; al = (s1 > s2)
|
||||||
|
setb ah ; ah = (s1 < s2)
|
||||||
|
sub al, ah
|
||||||
|
movsx eax, al ; eax = (s1 > s2) - (s1 < s2), i.e. -1, 0, 1
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
proc string.to_lower_case uses eax, _str
|
proc string.to_lower_case uses eax, _str
|
||||||
mov eax, [_str]
|
mov eax, [_str]
|
||||||
@@:
|
@@:
|
||||||
|
@ -208,7 +208,6 @@ end if
|
|||||||
;; if without '.' - execute
|
;; if without '.' - execute
|
||||||
stdcall string.last_index_of, [param_s], '.', 1
|
stdcall string.last_index_of, [param_s], '.', 1
|
||||||
cmpe eax, -1, execute
|
cmpe eax, -1, execute
|
||||||
|
|
||||||
;; if '.' is part of path - execute
|
;; if '.' is part of path - execute
|
||||||
mov esi, eax
|
mov esi, eax
|
||||||
stdcall string.last_index_of, [param_s], '/', 1
|
stdcall string.last_index_of, [param_s], '/', 1
|
||||||
@ -298,6 +297,7 @@ end if
|
|||||||
|
|
||||||
;; get list
|
;; get list
|
||||||
invoke libini.for_each_section, assoc_ini, section_cb
|
invoke libini.for_each_section, assoc_ini, section_cb
|
||||||
|
stdcall sort_list
|
||||||
mov eax, [sb_apps.max_area]
|
mov eax, [sb_apps.max_area]
|
||||||
and eax, 1b
|
and eax, 1b
|
||||||
shr [sb_apps.max_area], 1
|
shr [sb_apps.max_area], 1
|
||||||
@ -911,6 +911,55 @@ end if
|
|||||||
|
|
||||||
;----------------------
|
;----------------------
|
||||||
|
|
||||||
|
proc sort_list
|
||||||
|
mov edi, 0
|
||||||
|
mov ebx, list ;; i = 0
|
||||||
|
imul ecx, [list.size], 32 ;; i < n - 1
|
||||||
|
sub ecx, 32
|
||||||
|
add ecx, list
|
||||||
|
|
||||||
|
.loop1:
|
||||||
|
mov edx, list ;; j = 0
|
||||||
|
mov esi, [list.size] ;; j < n - i - 1
|
||||||
|
sub esi, edi
|
||||||
|
dec esi
|
||||||
|
imul esi, 32
|
||||||
|
add esi, list
|
||||||
|
.loop2:
|
||||||
|
mov eax, edx
|
||||||
|
add eax, 32
|
||||||
|
stdcall string.cmp, edx, eax, 32
|
||||||
|
cmpne eax, 1, .next2
|
||||||
|
;; swap names
|
||||||
|
mov eax, edx
|
||||||
|
add eax, 32
|
||||||
|
stdcall string.copy, edx, buffer7
|
||||||
|
stdcall string.copy, eax, edx
|
||||||
|
stdcall string.copy, buffer7, eax
|
||||||
|
;; swap icons
|
||||||
|
mov eax, edx
|
||||||
|
sub eax, list
|
||||||
|
shr eax, 3
|
||||||
|
add eax, list.icon
|
||||||
|
push ebx ecx
|
||||||
|
mov ebx, [eax]
|
||||||
|
mov ecx, [eax + 4]
|
||||||
|
mov [eax], ecx
|
||||||
|
mov [eax + 4], ebx
|
||||||
|
pop ecx ebx
|
||||||
|
.next2:
|
||||||
|
add edx, 32
|
||||||
|
cmpne edx, esi, .loop2
|
||||||
|
.next1:
|
||||||
|
inc edi
|
||||||
|
add ebx, 32
|
||||||
|
cmpne ebx, ecx, .loop1
|
||||||
|
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
;----------------------
|
||||||
|
|
||||||
dataend:
|
dataend:
|
||||||
|
|
||||||
;===============================
|
;===============================
|
||||||
@ -932,12 +981,13 @@ end if
|
|||||||
param_e rd 1
|
param_e rd 1
|
||||||
param_a rd 1
|
param_a rd 1
|
||||||
undefined rb 1
|
undefined rb 1
|
||||||
buffer rb 2048
|
buffer rb 2048
|
||||||
buffer2 rb 2048
|
buffer2 rb 2048 ;OD
|
||||||
buffer3 rb 2048
|
buffer3 rb 2048 ;OD
|
||||||
buffer4 rb 4096
|
buffer4 rb 2048 ;OD
|
||||||
buffer5 rb 4096
|
buffer5 rb 2048 ;OD
|
||||||
buffer6 rb 2048
|
buffer6 rb 2048 ;check existance
|
||||||
|
buffer7 rb 32 ;for sorting
|
||||||
params rb 2048
|
params rb 2048
|
||||||
_stack rb 2048
|
_stack rb 2048
|
||||||
memory:
|
memory:
|
||||||
|
Loading…
Reference in New Issue
Block a user