forked from KolibriOS/kolibrios
refactored multiline textbox and moved to a separate file.
git-svn-id: svn://kolibrios.org@4060 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
b84e1d0e74
commit
00b0341730
@ -130,103 +130,6 @@ get_byte_utf8:
|
||||
|
||||
|
||||
|
||||
print_character:
|
||||
|
||||
pusha
|
||||
|
||||
cmp bl, 13 ; line beginning
|
||||
jne nobol
|
||||
|
||||
mov ecx, [pos]
|
||||
inc ecx
|
||||
boll1:
|
||||
dec ecx
|
||||
mov eax, ecx
|
||||
xor edx, edx
|
||||
mov ebx, [textbox_width]
|
||||
div ebx
|
||||
test edx, edx
|
||||
jnz boll1
|
||||
mov [pos], ecx
|
||||
jmp newdata
|
||||
nobol:
|
||||
|
||||
cmp bl, 10 ; line down
|
||||
jne nolf
|
||||
|
||||
addx1:
|
||||
inc [pos]
|
||||
mov eax, [pos]
|
||||
xor edx, edx
|
||||
mov ecx, [textbox_width]
|
||||
div ecx
|
||||
test edx, edx
|
||||
jnz addx1
|
||||
mov eax, [pos]
|
||||
jmp cm1
|
||||
nolf:
|
||||
no_lf_ret:
|
||||
|
||||
|
||||
cmp bl, 15 ; character
|
||||
jbe newdata
|
||||
|
||||
mov eax, [irc_data]
|
||||
shl eax, 8
|
||||
mov al, bl
|
||||
mov [irc_data], eax
|
||||
|
||||
mov eax, [pos]
|
||||
;---- draw data
|
||||
pusha
|
||||
|
||||
and ebx, 0xff
|
||||
add eax, [text_start]
|
||||
mov [eax], bl
|
||||
|
||||
popa
|
||||
;---- draw data
|
||||
|
||||
mov eax, [pos]
|
||||
inc eax
|
||||
cm1:
|
||||
mov ebx, [scroll+4]
|
||||
imul ebx, [textbox_width]
|
||||
cmp eax, ebx
|
||||
jb noeaxz
|
||||
|
||||
mov esi, [text_start]
|
||||
add esi, [textbox_width]
|
||||
|
||||
mov edi, [text_start]
|
||||
mov ecx, ebx
|
||||
rep movsb
|
||||
|
||||
mov esi, [text_start]
|
||||
mov ecx, [textbox_width]
|
||||
imul ecx, 61
|
||||
add esi, ecx
|
||||
|
||||
mov edi, [text_start]
|
||||
mov ecx, [textbox_width]
|
||||
imul ecx, 60
|
||||
add edi, ecx
|
||||
mov ecx, ebx
|
||||
rep movsb
|
||||
|
||||
mov eax, ebx
|
||||
sub eax, [textbox_width]
|
||||
noeaxz:
|
||||
mov [pos], eax
|
||||
|
||||
newdata:
|
||||
call window_is_updated
|
||||
|
||||
popa
|
||||
ret
|
||||
|
||||
|
||||
|
||||
recode_to_cp866:
|
||||
rep movsb
|
||||
ret
|
||||
|
@ -225,68 +225,6 @@ print_channel_list:
|
||||
ret
|
||||
|
||||
|
||||
|
||||
|
||||
draw_channel_text:
|
||||
|
||||
pusha
|
||||
|
||||
mov eax, 4 ; draw text
|
||||
mov ebx, TEXT_X shl 16 + TEXT_Y
|
||||
mov ecx, 12 ; 12 lines max ?
|
||||
mov esi, [textbox_width]
|
||||
|
||||
.dct:
|
||||
pusha
|
||||
mov cx, bx
|
||||
shl ecx, 16
|
||||
mov cx, 9 ; character height
|
||||
mov eax, 13 ; draw rectangle
|
||||
mov ebx, TEXT_X shl 16
|
||||
mov bx, word[textbox_width]
|
||||
imul bx, 6 ; character width
|
||||
mov edx, [colors.work]
|
||||
mcall
|
||||
popa
|
||||
|
||||
push ecx
|
||||
mov ecx, [colors.work_text]
|
||||
cmp word[edx], '* '
|
||||
jne .no_red
|
||||
mov ecx, 0x00aa0000
|
||||
jmp .draw
|
||||
.no_red:
|
||||
|
||||
cmp word[edx], '**'
|
||||
jne .no_light_blue
|
||||
cmp byte[edx+2], '*'
|
||||
jne .no_light_blue
|
||||
mov ecx, 0x000000aa
|
||||
jmp .draw
|
||||
.no_light_blue:
|
||||
|
||||
cmp byte[edx], '#'
|
||||
jne .no_blue
|
||||
mov ecx, 0x0000aa00
|
||||
; jmp .draw
|
||||
.no_blue:
|
||||
|
||||
.draw:
|
||||
mcall
|
||||
add edx, [textbox_width]
|
||||
add ebx, 10 ; height distance between lines
|
||||
|
||||
pop ecx
|
||||
loop .dct
|
||||
|
||||
mov eax, [window_active]
|
||||
and [eax + window.flags], not FLAG_UPDATED ; clear the 'window is updated' flag
|
||||
|
||||
popa
|
||||
ret
|
||||
|
||||
|
||||
|
||||
draw_windowtabs:
|
||||
|
||||
; Create the buttons
|
||||
|
@ -73,6 +73,7 @@ SCROLLBAR_WIDTH = 12
|
||||
|
||||
USERLIST_X = 98
|
||||
|
||||
TEXTBOX_LINES = 12
|
||||
|
||||
format binary as ""
|
||||
|
||||
@ -121,6 +122,7 @@ include "userparser.inc"
|
||||
include "socket.inc"
|
||||
include "gui.inc"
|
||||
include "users.inc"
|
||||
include "textbox.inc"
|
||||
|
||||
|
||||
START:
|
||||
@ -163,8 +165,6 @@ START:
|
||||
mov [ebx + window.data_ptr], eax
|
||||
mov [ebx + window.flags], 0
|
||||
mov [ebx + window.type], WINDOWTYPE_SERVER
|
||||
add eax, window_data.text
|
||||
mov [text_start], eax
|
||||
|
||||
call window_refresh
|
||||
|
||||
@ -431,16 +431,12 @@ sockaddr1:
|
||||
status dd STATUS_DISCONNECTED
|
||||
|
||||
text_start dd ? ; pointer to current textbox data
|
||||
irc_data dd 0x0 ; encoder
|
||||
textbox_width dd 80 ; in characters, not pixels ;)
|
||||
pos dd 66 * 11 ; encoder
|
||||
text_pos dd ? ; text writing cursor
|
||||
|
||||
window_active dd windows
|
||||
window_print dd windows
|
||||
|
||||
scroll dd 1
|
||||
dd 12
|
||||
|
||||
align 4
|
||||
@IMPORT:
|
||||
|
||||
|
@ -48,7 +48,7 @@ server_commands:
|
||||
|
||||
dd '322 ', cmd_322 ; RPL_LIST
|
||||
dd '323 ', cmd_323 ; RPL_LISTEND
|
||||
dd '328 ', cmd_328
|
||||
dd '328 ', cmd_328 ; RPL_CHANNEL_URL
|
||||
dd '332 ', cmd_topic
|
||||
dd '333 ', cmd_333 ; nickname and time of topic
|
||||
dd '353 ', cmd_353 ; name reply
|
||||
|
123
programs/network/ircc/textbox.inc
Normal file
123
programs/network/ircc/textbox.inc
Normal file
@ -0,0 +1,123 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2013. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;; ;;
|
||||
;; GNU GENERAL PUBLIC LICENSE ;;
|
||||
;; Version 2, June 1991 ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
print_text: ; eax = start ptr
|
||||
; dl = end char
|
||||
pusha
|
||||
ptr2:
|
||||
mov bl, [eax]
|
||||
|
||||
cmp bl, dl
|
||||
je .done
|
||||
test bl, bl
|
||||
jz .done
|
||||
call print_character
|
||||
|
||||
inc eax
|
||||
jmp ptr2
|
||||
|
||||
.done:
|
||||
popa
|
||||
ret
|
||||
|
||||
|
||||
|
||||
print_text2: ; esi = ptr to ASCIIZ string
|
||||
|
||||
pusha
|
||||
.loop:
|
||||
lodsb
|
||||
test al, al
|
||||
jz .done
|
||||
mov bl, al
|
||||
call print_character
|
||||
jmp .loop
|
||||
|
||||
.done:
|
||||
popa
|
||||
ret
|
||||
|
||||
|
||||
|
||||
; Character in bl
|
||||
print_character:
|
||||
|
||||
pusha
|
||||
mov ecx, TEXTBOX_LINES
|
||||
imul ecx, [textbox_width]
|
||||
mov esi, [text_start]
|
||||
|
||||
cmp bl, 10 ; line down
|
||||
je .linefeed
|
||||
|
||||
mov eax, [text_pos]
|
||||
mov byte[esi + eax], bl ; write the byte
|
||||
inc [text_pos]
|
||||
|
||||
cmp [text_pos], ecx
|
||||
jb .done
|
||||
|
||||
.linefeed:
|
||||
; scroll all text one line to the top
|
||||
mov edi, esi
|
||||
add esi, [textbox_width]
|
||||
rep movsb
|
||||
|
||||
mov ecx, TEXTBOX_LINES - 1
|
||||
imul ecx, [textbox_width]
|
||||
mov [text_pos], ecx
|
||||
|
||||
.done:
|
||||
call window_is_updated
|
||||
|
||||
popa
|
||||
ret
|
||||
|
||||
|
||||
|
||||
draw_channel_text: ; edx = pointer to text
|
||||
|
||||
pusha
|
||||
|
||||
mov ebx, TEXT_X shl 16 + TEXT_Y
|
||||
mov ecx, TEXTBOX_LINES
|
||||
|
||||
.drawloop:
|
||||
pusha
|
||||
mov cx, bx
|
||||
shl ecx, 16
|
||||
mov cx, 9 ; character height
|
||||
mov ebx, TEXT_X shl 16
|
||||
mov bx, word[textbox_width]
|
||||
imul bx, 6 ; character width
|
||||
mov edx, [colors.work]
|
||||
mcall 13 ; draw rectangle
|
||||
popa
|
||||
|
||||
push ecx
|
||||
mov ecx, [colors.work_text]
|
||||
|
||||
.draw:
|
||||
mov esi, [textbox_width]
|
||||
mcall 4 ; draw text
|
||||
add edx, [textbox_width]
|
||||
add ebx, 10 ; height distance between lines
|
||||
|
||||
pop ecx
|
||||
loop .drawloop
|
||||
|
||||
mov eax, [window_active]
|
||||
and [eax + window.flags], not FLAG_UPDATED ; clear the 'window is updated' flag
|
||||
|
||||
popa
|
||||
ret
|
||||
|
@ -65,11 +65,12 @@ window_set_name: ; esi = ptr to name, ebx = window ptr
|
||||
|
||||
window_refresh:
|
||||
|
||||
; set the correct buffer pointers ; FIXME: what is it good for?
|
||||
mov eax, [textbox_width] ;
|
||||
imul eax, 11 ;
|
||||
mov [pos], eax ;
|
||||
; set text write cursor to beginning of last line
|
||||
mov eax, [textbox_width]
|
||||
imul eax, TEXTBOX_LINES - 1
|
||||
mov [text_pos], eax
|
||||
|
||||
; set the textbuffer pointer
|
||||
mov eax, [window_print]
|
||||
mov eax, [eax + window.data_ptr]
|
||||
add eax, window_data.text
|
||||
@ -233,41 +234,6 @@ window_open:
|
||||
ret
|
||||
|
||||
|
||||
print_text: ; eax = start ptr
|
||||
; dl = end char
|
||||
pusha
|
||||
ptr2:
|
||||
mov bl, [eax]
|
||||
|
||||
cmp bl, dl
|
||||
je ptr_ret
|
||||
cmp bl, 0
|
||||
je ptr_ret
|
||||
call print_character
|
||||
|
||||
inc eax
|
||||
jmp ptr2
|
||||
|
||||
ptr_ret:
|
||||
popa
|
||||
ret
|
||||
|
||||
|
||||
print_text2: ; esi = ptr to ASCIIZ string
|
||||
|
||||
pusha
|
||||
.loop:
|
||||
lodsb
|
||||
test al, al
|
||||
jz .done
|
||||
mov bl, al
|
||||
call print_character
|
||||
jmp .loop
|
||||
|
||||
.done:
|
||||
popa
|
||||
ret
|
||||
|
||||
|
||||
if TIMESTAMP
|
||||
print_timestamp:
|
||||
|
Loading…
Reference in New Issue
Block a user