From ae553821c204c7adf18d6a29e058494590ec5ab6 Mon Sep 17 00:00:00 2001 From: hidnplayr Date: Mon, 26 Jul 2021 16:18:14 +0000 Subject: [PATCH] IRCc 0.34: Faster text drawing, add some server command codes related to WHOIS reply. git-svn-id: svn://kolibrios.org@9092 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/network/ircc/ircc.asm | 2 +- programs/network/ircc/serverparser.inc | 6 ++- programs/network/ircc/textbox.inc | 59 +++++++++++++++++--------- 3 files changed, 46 insertions(+), 21 deletions(-) diff --git a/programs/network/ircc/ircc.asm b/programs/network/ircc/ircc.asm index d368aafc9c..82625aa11d 100644 --- a/programs/network/ircc/ircc.asm +++ b/programs/network/ircc/ircc.asm @@ -13,7 +13,7 @@ ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -version equ '0.33' +version equ '0.34' ; connection status STATUS_DISCONNECTED = 0 diff --git a/programs/network/ircc/serverparser.inc b/programs/network/ircc/serverparser.inc index e17579f31e..52b9e58901 100644 --- a/programs/network/ircc/serverparser.inc +++ b/programs/network/ircc/serverparser.inc @@ -1,6 +1,6 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; -;; Copyright (C) KolibriOS team 2004-2018. All rights reserved. ;; +;; Copyright (C) KolibriOS team 2004-2021. All rights reserved. ;; ;; Distributed under terms of the GNU General Public License ;; ;; ;; ;; Written by hidnplayr@kolibrios.org ;; @@ -65,7 +65,9 @@ server_commands: dd '311 ', cmd_justprint ; RPL_WHOISUSER dd '312 ', cmd_justprint ; RPL_WHOISSERVER + dd '317 ', cmd_justprint ; RPL_WHOISIDLE dd '318 ', cmd_justprint ; RPL_ENDOFWHOIS + dd '319 ', cmd_justprint ; RPL_WHOISCHANNELS dd '322 ', cmd_322 ; RPL_LIST dd '323 ', cmd_323 ; RPL_LISTEND dd '324 ', cmd_justprint ; RPL_CHANNELMODEIS @@ -74,6 +76,7 @@ server_commands: dd '330 ', cmd_justprint dd '332 ', cmd_topic ; topic dd '333 ', cmd_333 ; nickname and time of topic + dd '338 ', cmd_justprint ; RPL_CHANPASSOK dd '353 ', cmd_353 ; name reply dd '366 ', cmd_366 ; end of names list dd '372 ', cmd_justprint ; motd @@ -83,6 +86,7 @@ server_commands: dd '432 ', cmd_justprint ; erroneous nickname dd '433 ', cmd_justprint ; nickname already in use dd '436 ', cmd_justprint ; nickname collision + dd '671 ', cmd_justprint ; RPL_WHOISSECURE dd 'join', cmd_join dd 'kick', cmd_kick diff --git a/programs/network/ircc/textbox.inc b/programs/network/ircc/textbox.inc index 73c01e92f6..c002cb72bc 100644 --- a/programs/network/ircc/textbox.inc +++ b/programs/network/ircc/textbox.inc @@ -1,6 +1,6 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; -;; Copyright (C) KolibriOS team 2004-2016. All rights reserved. ;; +;; Copyright (C) KolibriOS team 2004-2021. All rights reserved. ;; ;; Distributed under terms of the GNU General Public License ;; ;; ;; ;; Written by hidnplayr@kolibrios.org ;; @@ -175,6 +175,12 @@ print_char: +;----------------------------------------------- +; Draw text of the current window to the screen +; +; IN: / +; OUT: / +;----------------------------------------------- draw_channel_text: mov edi, [window_active] @@ -312,7 +318,6 @@ draw_channel_text: popa push eax - mov esi, [textbox_width] .line: cmp byte[edx], 0 je .end_of_text @@ -321,7 +326,6 @@ draw_channel_text: cmp byte[edx], 10 je .newline_hard - push esi cmp byte[edx], 3 ; escape code for mIRC colors jne .no_colors inc edx @@ -339,30 +343,47 @@ draw_channel_text: or ecx, 0x40000000 .no_colors: - mov esi, 1 - mcall 4 ; draw text +;------------------------------------------- +; Count characters until 0, 10, 13 or 3 byte - mov esi, 1 + push edx + xor esi, esi + dec esi + .next_char: + inc esi + cmp esi, [textbox_width] + je .cnt_done mov al, byte[edx] + cmp al, 13 + jbe .cnt_done + + inc edx test al, 10000000b - jz @f - mov esi, 4 + jz .next_char ; 1 byte wide + + add edx, 4 and al, 11111000b cmp al, 11110000b - je @f - dec esi + je .next_char ; 4 bytes wide + + dec edx and al, 11110000b cmp al, 11100000b - je @f - dec esi - @@: + je .next_char ; 3 bytes wide + dec edx ; 2 bytes wide + jmp .next_char + .cnt_done: + mov eax, edx + pop edx + push eax + mcall 4 ; draw text + pop edx ; next start ptr - add ebx, FONT_WIDTH shl 16 - add edx, esi - pop esi - dec esi - jnz .line - jmp .line_full + cmp esi, [textbox_width] + je .line_full + imul esi, FONT_WIDTH shl 16 + add ebx, esi + jmp .line .newline_hard: mov ecx, [colors.work_text]