Upload files to "ircc_v8930_vigenere"
This commit is contained in:
1 parent
f129ef104a
commit
b59e75a1aa
1 file changed
+200
@@ -0,0 +1,200 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2024. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;; Written by hidnplayr@kolibrios.org ;;
|
||||
;; ;;
|
||||
;; GNU GENERAL PUBLIC LICENSE ;;
|
||||
;; Version 2, June 1991 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
; TODO: work correctly with user prefixes.
|
||||
; use first byte of nick for prefix ONLY (use a space for those that do not have special powers..)
|
||||
|
||||
user_prefixes db '~&@%+ ', 0 ; in descending order
|
||||
|
||||
; TODO: update selected user if needed
|
||||
; esi is ptr to nick
|
||||
; ebx is ptr to window
|
||||
align 4
|
||||
user_add:
|
||||
|
||||
cmp [ebx + window.users], MAX_USERS
|
||||
jae .fail
|
||||
|
||||
; Check if user is already listed (case insensitive)
|
||||
mov edi, [ebx + window.data_ptr]
|
||||
add edi, window_data.names
|
||||
mov ebp, [ebx + window.users]
|
||||
inc ebp ; CHECKME
|
||||
|
||||
push esi edi
|
||||
.restart:
|
||||
mov ecx, MAX_NICK_LEN
|
||||
.loop1:
|
||||
lodsb
|
||||
cmp al, '@'
|
||||
jne @f
|
||||
mov al, ' ' ; give @ highest priority
|
||||
@@:
|
||||
cmp al, 'A'
|
||||
jb @f
|
||||
cmp al, 'Z'
|
||||
ja @f
|
||||
add al, 'a' - 'A' ; convert to lowercase
|
||||
@@:
|
||||
dec ecx
|
||||
jz .got_it
|
||||
|
||||
.loop2:
|
||||
mov dl, [edi]
|
||||
cmp dl, 0
|
||||
je .got_it
|
||||
cmp dl, '@'
|
||||
jne @f
|
||||
mov dl, ' ' ; give @ highest priority
|
||||
@@:
|
||||
cmp dl, 'A'
|
||||
jb @f
|
||||
cmp dl, 'Z'
|
||||
ja @f
|
||||
add dl, 'a' - 'A' ; convert to lowercase
|
||||
@@:
|
||||
cmp al, dl
|
||||
jb .got_it
|
||||
je .check_next
|
||||
|
||||
pop edi esi
|
||||
add edi, MAX_NICK_LEN
|
||||
push esi edi
|
||||
|
||||
dec ebp
|
||||
jnz .restart
|
||||
|
||||
.check_next:
|
||||
inc edi
|
||||
jmp .loop1
|
||||
|
||||
.got_it:
|
||||
pop edi esi
|
||||
|
||||
; OK, insert it here..
|
||||
|
||||
; mov all trailing usernames by MAX_NICK_LEN bytes
|
||||
push esi edi
|
||||
mov esi, [ebx + window.data_ptr]
|
||||
add esi, window_data.names + MAX_NICK_LEN * (MAX_USERS - 1) - 4 ; -4 because we're copying backward, dword wise
|
||||
mov ecx, esi
|
||||
sub ecx, edi
|
||||
add ecx, MAX_NICK_LEN
|
||||
shr ecx, 2
|
||||
lea edi, [esi + MAX_NICK_LEN]
|
||||
std
|
||||
rep movsd
|
||||
cld
|
||||
pop edi esi
|
||||
|
||||
; Now insert our new username
|
||||
mov ecx, MAX_NICK_LEN-1
|
||||
.fill:
|
||||
lodsb
|
||||
cmp al, ' '
|
||||
je .done
|
||||
cmp al, '!'
|
||||
je .done
|
||||
cmp al, 13
|
||||
je .done
|
||||
cmp al, 10
|
||||
je .done
|
||||
cmp al, 0
|
||||
je .done
|
||||
stosb
|
||||
loop .fill
|
||||
.done:
|
||||
xor al, al
|
||||
stosb
|
||||
|
||||
inc [ebx + window.users]
|
||||
or [ebx + window.flags], FLAG_UPDATED
|
||||
dec esi
|
||||
.fail:
|
||||
ret
|
||||
|
||||
|
||||
|
||||
|
||||
; TODO: update selected user if needed
|
||||
; esi is ptr to nick
|
||||
; ebx is ptr to window
|
||||
align 4
|
||||
user_remove:
|
||||
|
||||
call user_find
|
||||
jz .fail
|
||||
|
||||
lea esi, [edi + MAX_NICK_LEN]
|
||||
mov ecx, [ebx + window.data_ptr]
|
||||
add ecx, window_data.names + MAX_NICK_LEN * MAX_USERS
|
||||
sub ecx, esi
|
||||
shr ecx, 2
|
||||
rep movsd
|
||||
|
||||
dec [ebx + window.users]
|
||||
or [ebx + window.flags], FLAG_UPDATED
|
||||
.fail:
|
||||
ret
|
||||
|
||||
|
||||
|
||||
; IN:
|
||||
; esi is ptr to nick
|
||||
; ebx is ptr to window
|
||||
; OUT:
|
||||
; edi is ptr to nick in userlist
|
||||
align 4
|
||||
user_find:
|
||||
|
||||
mov eax, [ebx + window.users]
|
||||
test eax, eax
|
||||
jz .fail
|
||||
mov edi, [ebx + window.data_ptr]
|
||||
add edi, window_data.names
|
||||
|
||||
.loop:
|
||||
push esi edi
|
||||
mov ecx, MAX_NICK_LEN
|
||||
repe cmpsb
|
||||
cmp byte[edi-1], 0
|
||||
je .got_it
|
||||
; TODO: check byte[esi] too!
|
||||
pop edi esi
|
||||
add edi, MAX_NICK_LEN
|
||||
dec eax
|
||||
jnz .loop
|
||||
jmp .fail
|
||||
|
||||
.got_it:
|
||||
pop edi esi
|
||||
test edi, edi ; to clear zero flag
|
||||
ret
|
||||
|
||||
.fail:
|
||||
xor edi, edi
|
||||
ret
|
||||
|
||||
|
||||
|
||||
user_remove_all:
|
||||
|
||||
xor eax, eax
|
||||
mov edi, [window_print]
|
||||
mov [edi + window.users], eax
|
||||
mov [edi + window.selected], eax
|
||||
mov edi, [edi + window.data_ptr]
|
||||
add edi, window_data.names
|
||||
mov ecx, MAX_NICK_LEN * MAX_USERS / 4
|
||||
rep stosd
|
||||
|
||||
ret
|
||||
Reference in new issue
Block a user