/programs/network/ircc/gui.inc |
---|
113,7 → 113,7 |
jne .not_channel |
mov [scroll1.all_redraw], 1 |
call draw_channel_list |
call draw_user_list |
; draw a vertical separator line when there is no scrollbar |
cmp [scroll2.all_redraw], 1 |
138,11 → 138,10 |
mov eax, [xsize] |
mov [edit1.width], eax |
push dword edit1 |
call [edit_box_draw] |
invoke edit_box_draw, edit1 |
; draw tabs |
call draw_windowtabs |
call draw_window_tabs |
.exit: |
popa |
150,7 → 149,7 |
draw_channel_list: |
draw_user_list: |
pusha |
167,8 → 166,7 |
mov [scroll1.position], eax |
@@: |
; OK, draw the scrollbar |
push dword scroll1 |
call [scrollbar_draw] |
invoke scrollbar_draw, scroll1 |
; dont redraw scrollbar completely next time, |
; unless draw_window asks us to by setting [scroll1.all_redraw] back to 1 |
211,7 → 209,7 |
pop ebx |
mov bx, TEXT_Y |
mov ecx, [colors.work_text] |
or ecx, 0x80000000 ; ASCIIZ string |
or ecx, 0x90000000 ; 8x16 font, zero terminated string |
mov eax, 4 ; draw text |
mov edi, [textbox_height] ; how many names will fit on screen |
226,16 → 224,16 |
mov cx, bx |
mov bx, USERLIST_WIDTH |
shl ecx, 16 |
mov cx, 10 - 1 |
mov cx, FONT_HEIGHT |
mov edx, 0x00000055 ; blue! |
mcall 13 |
popa |
mov ecx, 0x8000ffff ; cyan! |
mov ecx, 0x9000ffff ; cyan! |
mcall |
mov ecx, [colors.work_text] |
or ecx, 0x80000000 ; ASCIIZ string |
or ecx, 0x90000000 ; 8x16 font, zero terminated string |
jmp .next |
.nothighlight: |
253,7 → 251,7 |
ret |
draw_windowtabs: |
draw_window_tabs: |
; Draw horizontal line |
/programs/network/ircc/ircc.asm |
---|
13,7 → 13,7 |
;; ;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
version equ '0.24' |
version equ '0.25' |
; connection status |
STATUS_DISCONNECTED = 0 |
43,9 → 43,9 |
USERCMD_MAX_SIZE = 400 |
WIN_MIN_X = 600 |
WIN_MIN_Y = 170 |
WIN_MIN_Y = 183 |
TEXT_X = 5 |
TEXT_X = 2 |
TEXT_Y = TOP_Y + 2 |
TOP_SPACE = 2 |
77,10 → 77,10 |
WINDOW_BTN_LIST = 3 |
SCROLLBAR_WIDTH = 14 |
USERLIST_WIDTH = 100 |
USERLIST_WIDTH = 160 |
FONT_HEIGHT = 9 |
FONT_WIDTH = 6 |
FONT_WIDTH = 8 |
FONT_HEIGHT = 16 |
format binary as "" |
245,7 → 245,7 |
mov edi, [window_active] |
cmp [edi + window.type], WINDOWTYPE_CHANNEL |
jne .no_update |
call draw_channel_list |
call draw_user_list |
.no_update: |
call highlight_updated_tabs |
280,7 → 280,7 |
mov ebx, [window_active] |
mov [ebx + window.selected], eax |
call draw_channel_list |
call draw_user_list |
pop eax |
test eax, 1 shl 25 ; Right mouse button pressed? |
378,8 → 378,7 |
mov [edit1.size], 0 |
mov [edit1.pos], 0 |
push dword edit1 |
call [edit_box_draw] |
invoke edit_box_draw, edit1 |
call draw_channel_text |
389,8 → 388,7 |
jmp mainloop |
mouse: |
push dword edit1 |
call [edit_box_mouse] |
invoke edit_box_mouse, edit1 |
; mcall 37, 7 |
; movsx eax, ax |
401,12 → 399,11 |
cmp [edi + window.type], WINDOWTYPE_CHANNEL |
jne @f |
push [scroll1.position] |
push dword scroll1 |
call [scrollbar_mouse] |
invoke scrollbar_mouse, scroll1 |
pop eax |
cmp eax, [scroll1.position] ; did the scrollbar move? |
je @f |
call draw_channel_list |
call draw_user_list |
@@: |
; TODO: check if scrollbar is active? |
414,8 → 411,7 |
mov eax, [edi + window.text_lines] |
cmp eax, [textbox_height] |
jbe @f |
push dword scroll2 |
call [scrollbar_mouse] |
invoke scrollbar_mouse, scroll2 |
mov edi, [window_active] |
and [edi+window.flags], not FLAG_SCROLL_LOW |
mov edx, [scroll2.position] |
506,10 → 502,8 |
db 3, '3| |', 3, '7| | \', 3, '6 \____', 3, '4 \ \___| |_| \ ___/| | \ |', 10 |
db 3, '3|___|', 3, '7|____|_ /', 3, '6\______ /', 3, '4 \___ >____/__|\___ >___| /__|', 10 |
db 3, '3 ', 3, '7 \/ ', 3, '6 \/ ', 3, '4 \/ \/ \/', 10 |
db 10 |
db 'Welcome to KolibriOS IRC client ', version, 10 |
db 10 |
db 'Type /help for help', 10, 10, 0 |
db 'Type /help for help', 10, 0 |
str_version db 'VERSION KolibriOS ' |
str_programname db 'IRC client ', version, 0 |
577,7 → 571,7 |
scrollbar_mouse,'scrollbar_v_mouse' |
; width, left, top |
edit1 edit_box 0, 0, 0, 0xffffff, 0x6f9480, 0, 0, 0, USERCMD_MAX_SIZE, usercommand, mouse_dd, ed_always_focus, 25, 25 |
edit1 edit_box 0, 0, 0, 0xffffff, 0x6f9480, 0, 0, 0x000000, USERCMD_MAX_SIZE, usercommand, mouse_dd, ed_always_focus, 25, 25 |
; xsize, xpos, ysize, ypos, btn_height, max, cur, pos, bgcol, frcol, linecol |
scroll1 scrollbar SCROLLBAR_WIDTH, 0, 0, TOP_Y, SCROLLBAR_WIDTH, 0, 0, 0, 0, 0, 0, 1 |
scroll2 scrollbar SCROLLBAR_WIDTH, 0, 0, TOP_Y, SCROLLBAR_WIDTH, 0, 0, 0, 0, 0, 0, 1 |
/programs/network/ircc/serverparser.inc |
---|
1,6 → 1,6 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; ;; |
;; Copyright (C) KolibriOS team 2004-2014. All rights reserved. ;; |
;; Copyright (C) KolibriOS team 2004-2016. All rights reserved. ;; |
;; Distributed under terms of the GNU General Public License ;; |
;; ;; |
;; Written by hidnplayr@kolibrios.org ;; |
961,7 → 961,7 |
jmp .add |
.done: |
call draw_channel_list |
call draw_user_list |
.fail: |
ret |
1059,7 → 1059,7 |
jz .fail |
mov [window_active], ebx |
call draw_windowtabs |
call draw_window_tabs |
pop esi |
call print_asciiz |
mov al, 10 |
/programs/network/ircc/socket.inc |
---|
1,6 → 1,6 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; ;; |
;; Copyright (C) KolibriOS team 2004-2014. All rights reserved. ;; |
;; Copyright (C) KolibriOS team 2004-2016. All rights reserved. ;; |
;; Distributed under terms of the GNU General Public License ;; |
;; ;; |
;; Written by hidnplayr@kolibrios.org ;; |
210,7 → 210,7 |
pusha |
; TODO: read more data if we receive one full packet |
; FIXME: make this a proper stream! |
.nextpacket: |
mcall recv, [socketnum], packetbuf, 1024, MSG_DONTWAIT ; read a packet |
219,30 → 219,33 |
dec eax |
jz .disconnected |
; ok we have data, now feed it to the recoder |
; ok we have data, now feed it to the command splicer |
lea edx, [packetbuf + eax] ; edx = end pointer |
mov ecx, eax |
mov esi, packetbuf ; esi = start pointer |
.nextcommand: |
mov edi, servercommand |
.byteloop: |
call get_next_byte ; reads byte from [esi] to al |
jnc .nextpacket ; if CF is set, we need more data (TODO: dont throw away old data!!!) |
lodsb |
cmp al, 10 |
je .got_command |
cmp al, 13 |
je .got_command |
stosb |
jmp .byteloop |
dec ecx |
jnz .byteloop |
;;; FIXME |
jmp .nextpacket |
; we have a command, call the serverparser |
.got_command: |
mov byte[edi], 0 ; mark the end of the command |
push esi edx |
push esi ecx |
call server_parser |
pop edx esi |
jmp .nextcommand |
pop ecx esi |
test ecx, ecx |
jnz .nextcommand |
.done: |
popa |
/programs/network/ircc/textbox.inc |
---|
24,6 → 24,8 |
dec ecx |
jz .end_of_line |
lodsb ; get one character of the string |
test al, 0x80 |
jnz .multiball! |
test al, al ; end of string? |
jz .almost_done |
cmp al, ' ' ; it's a space! remember its position |
52,6 → 54,20 |
ret |
.multiball!: |
add esi, 4 |
and al, 11111000b |
cmp al, 11110000b |
je .more |
dec esi |
and al, 11110000b |
cmp al, 11100000b |
je .more |
dec esi |
jmp .more |
;---------------------------------- |
; scan untill next line is reached |
; |
245,11 → 261,45 |
.no_offset: |
xor ebx, ebx |
.draw_text: |
; Prepare to actually draw some text |
add ebx, TEXT_X shl 16 + TEXT_Y ; text coordinates |
mov ecx, [colors.work_text] ; default text color |
or ecx, 0x30000000 |
mov edx, [edi + window.text_print] ; start of text to print |
; Scan backwards on line for color escape codes |
mov esi, edx |
push edx |
std |
@@: |
lodsb |
cmp al, 0 ; end of text |
je @f |
cmp al, 10 ; hard newline |
je @f |
cmp al, 3 ; mIRC escape code |
jne @b |
cld |
lea edx, [esi+2] |
call dec_to_esi |
jz @f |
mov ecx, [irc_colors + 4*esi] |
or ecx, 0x30000000 ; UTF-8 text |
cmp byte[edx], ',' ; background color? |
jne @f |
inc edx |
call dec_to_esi |
jz @f |
mov edi, [irc_colors + 4*esi] |
or ecx, 0x40000000 ; enable background color |
@@: |
cld |
pop edx |
mov eax, [textbox_height] ; max number of lines to draw |
add ebx, TEXT_X shl 16 + TEXT_Y |
mov ecx, [colors.work_text] ; default text color |
mov edx, [edi + window.text_print] |
.drawloop: |
cmp byte[edx], 0 |
je .end_of_text |
266,19 → 316,17 |
mcall 13 ; draw rectangle |
popa |
mov esi, edx |
add esi, [textbox_width] |
push eax |
mov esi, [textbox_width] |
.line: |
cmp byte[edx], 0 |
je .end_of_text |
cmp byte[edx], 13 |
je .newline_soft |
cmp byte[edx], 10 |
je .newline_hard |
push esi eax |
push esi |
cmp byte[edx], 3 ; escape code for mIRC colors |
jne .no_colors |
inc edx |
285,6 → 333,7 |
call dec_to_esi |
jz .no_colors |
mov ecx, [irc_colors + 4*esi] |
or ecx, 0x30000000 |
cmp byte[edx], ',' ; background color? |
jne .no_colors |
297,20 → 346,38 |
mov esi, 1 |
mcall 4 ; draw text |
mov esi, 1 |
mov al, byte[edx] |
test al, 10000000b |
jz @f |
mov esi, 4 |
and al, 11111000b |
cmp al, 11110000b |
je @f |
dec esi |
and al, 11110000b |
cmp al, 11100000b |
je @f |
dec esi |
@@: |
add ebx, FONT_WIDTH shl 16 |
inc edx |
pop eax esi |
cmp edx, esi |
jb .line |
add edx, esi |
pop esi |
dec esi |
jnz .line |
jmp .line_full |
.newline_hard: |
mov ecx, [colors.work_text] |
or ecx, 0x30000000 |
.newline_soft: |
inc edx |
.line_full: |
and ebx, 0x0000ffff |
add ebx, TEXT_X shl 16 + FONT_HEIGHT |
pop eax |
dec eax |
jnz .drawloop |
.end_of_text: |
/programs/network/ircc/userparser.inc |
---|
440,6 → 440,7 |
cmd_usr_close_window: |
mov esi, [window_active] |
mov [window_print], esi |
cmp [esi + window.type], WINDOWTYPE_SERVER |
je .not_channel |
/programs/network/ircc/window.inc |
---|
76,7 → 76,7 |
stosb |
push esi ebx |
call draw_windowtabs |
call draw_window_tabs |
pop ebx esi |
ret |
107,7 → 107,7 |
jne @f |
sub edi, sizeof.window |
mov [window_active], edi |
mov [window_print], edi ;;;;;;;; |
mov [window_print], edi |
@@: |
; At last, redraw everything |