Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 6026 → Rev 6027

/programs/network/ircc/ircc.asm
13,7 → 13,7
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
version equ '0.25'
version equ '0.26'
 
; connection status
STATUS_DISCONNECTED = 0
20,6 → 20,7
STATUS_RESOLVING = 1
STATUS_CONNECTING = 2
STATUS_CONNECTED = 3
STATUS_LOGGED_IN = 4
 
; window flags
FLAG_UPDATED = 1 shl 0
473,8 → 474,9
str_srv_disconnected db 3, '5* Server disconnected', 10, 0
str_disconnected db 3, '5* Disconnected', 10, 0
str_reconnect db 3, '5* Connection reset by user', 10, 0
str_notconnected db 3, '5* Not connected to server', 10, 0
str_notconnected db 3, '5* You are not connected', 10, 0
str_notchannel db 3, '5* You are not on a channel', 10, 0
str_notloggedin db 3, '5* You are not logged in to the server', 10, 0
 
str_1 db 3, '13 -', 0
str_2 db '- ', 0
571,16 → 573,19
scrollbar_mouse,'scrollbar_v_mouse'
 
; width, left, top
edit1 edit_box 0, 0, 0, 0xffffff, 0x6f9480, 0, 0, 0x000000, 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, input_text, 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
 
usercommand db '/server chat.freenode.net', 0
input_text db '/server chat.freenode.net', 0
rb MAX_COMMAND_LEN
 
I_END:
 
user_command rb MAX_COMMAND_LEN*4
.size dd ?
 
utf8_bytes_rest dd ? ; bytes rest in current UTF8 sequence
utf8_char dd ? ; first bits of current UTF8 character
 
/programs/network/ircc/serverparser.inc
47,7 → 47,7
 
server_commands:
 
dd '001 ', cmd_justprint
dd '001 ', cmd_welcome
dd '002 ', cmd_justprint
dd '003 ', cmd_justprint
dd '004 ', cmd_justprint
80,7 → 80,9
dd '375 ', cmd_justprint ; start of motd
dd '376 ', cmd_justprint ; end of motd
dd '421 ', cmd_justprint ; unknown command
dd '432 ', cmd_justprint ; erroneous nickname
dd '433 ', cmd_justprint ; nickname already in use
dd '436 ', cmd_justprint ; nickname collision
 
dd 'join', cmd_join
dd 'kick', cmd_kick
170,7 → 172,9
 
 
 
cmd_welcome:
 
mov [status], STATUS_LOGGED_IN
 
cmd_justprint:
 
185,6 → 189,7
ret
 
 
 
cmd_notice:
 
if TIMESTAMP
466,11 → 471,11
ctcp_reply:
 
push esi
mov dword [usercommand], 'NOTI'
mov dword [usercommand+4], 'CE '
mov dword[user_command], 'NOTI'
mov dword[user_command+4], 'CE '
 
mov esi, servercommand+1
mov edi, usercommand+7
mov edi, user_command+7
.nickloop:
lodsb
cmp al, '!'
502,8 → 507,8
mov ax, 0x0a0d
stosw
 
lea esi, [edi - usercommand]
mcall send, [socketnum], usercommand, , 0
lea esi, [edi - user_command]
mcall send, [socketnum], user_command, , 0
.fail:
ret
 
/programs/network/ircc/userparser.inc
16,16 → 16,22
mov ebp, [window_active] ; print to the current window
mov [window_print], ebp
 
mov eax, [edit1.size]
test eax, eax
mov ecx, [edit1.size]
test ecx, ecx
jz .ret ; ignore empty commands
mov word[usercommand + eax], 0x0a0d ; terminate the line
 
cmp byte[usercommand], '/' ; is it a server command ?
mov esi, input_text
mov edi, user_command
call recode ; Convert to UTF-8
mov word[edi], 0x0a0d ; terminate the line
sub edi, user_command
mov [user_command.size], edi
 
cmp byte[user_command], '/' ; is it a server command ?
je .command
 
cmp [status], STATUS_CONNECTED
jne .not_connected
cmp [status], STATUS_LOGGED_IN
jne .not_loggedin
 
cmp [ebp + window.type], WINDOWTYPE_CHANNEL
je .send_privmsg
48,10 → 54,9
mov al, ' '
call print_char
 
mov eax, [edit1.size]
mov byte[usercommand + eax],0
 
mov esi, usercommand
mov eax, [user_command.size]
mov byte[user_command + eax],0
mov esi, user_command
call print_asciiz
 
mov al, 10
76,10 → 81,10
mov ax, ' :'
stosw
 
mov esi, usercommand
mov ecx, [edit1.size]
inc ecx
call recode
mov esi, user_command
mov ecx, [user_command.size]
; inc ecx
rep movsb
 
; end the command with a CRLF
mov ax, 0x0a0d
93,13 → 98,13
 
; Text begins with a '/' lets try to find the command in the lookup table.
.command:
mov eax, dword[usercommand+1] ; skip '/'
mov eax, dword[user_command+1] ; skip '/'
or eax, 0x20202020 ; convert to lowercase
 
mov edi, user_commands
mov ecx, user_commands.number
cmp [status], STATUS_CONNECTED
je .cmd_loop
jae .cmd_loop
mov ecx, user_commands.number2
.cmd_loop:
scasd
109,7 → 114,7
jnz .cmd_loop
 
cmp [status], STATUS_CONNECTED
jne .not_connected
jb .not_connected
 
; Commands shorter then 3 chars are placed here
and eax, 0x00ffffff
122,6 → 127,11
.got_cmd:
jmp dword[edi]
 
.not_loggedin:
mov esi, str_notloggedin
call print_asciiz
ret
 
.not_connected:
mov esi, str_notconnected
call print_asciiz
156,7 → 166,7
 
cmd_usr_msg:
 
lea esi, [usercommand+5]
lea esi, [user_command+5]
 
mov dword[packetbuf], 'PRIV'
mov dword[packetbuf+4], 'MSG '
226,9 → 236,9
cmd_usr_quit:
 
mov esi, quit_msg
cmp byte[usercommand+5], ' '
cmp byte[user_command+5], ' '
jne quit_server
lea esi, [usercommand+6]
lea esi, [user_command+6]
 
; esi = quit message
quit_server:
282,19 → 292,19
 
cmd_usr_nick:
 
cmp [edit1.size], 5
cmp [user_command.size], 5
je .justprint
cmp byte[usercommand+5], ' '
cmp byte[user_command+5], ' '
jne .fail
cmp [socketnum], 0
je .dontsend
 
; Request nickname change to server
mov dword[usercommand+1], 'NICK'
mov esi, [edit1.size]
mov word[usercommand + esi], 0x0a0d
mov dword[user_command+1], 'NICK'
mov esi, [user_command.size]
mov word[user_command + esi], 0x0a0d
inc esi
mcall send, [socketnum], usercommand+1, , 0
mcall send, [socketnum], user_command+1, , 0
 
.fail:
ret
302,7 → 312,7
; We arent logged in yet, directly change user_nick field and print notification to user.
.dontsend:
mov ecx, MAX_NICK_LEN
mov esi, usercommand+6
mov esi, user_command+6
mov edi, user_nick
@@:
lodsb
331,11 → 341,11
 
cmd_usr_real:
 
cmp byte[usercommand+5], ' '
cmp byte[user_command+5], ' '
jne cmd_usr_send
 
mov ecx, MAX_REAL_LEN
mov esi, usercommand+6
mov esi, user_command+6
mov edi, user_real_name
.loop:
lodsb
363,7 → 373,7
 
cmd_usr_server:
 
mov eax, dword[usercommand+5] ; check for 'er ', we only checked 'serv'
mov eax, dword[user_command+5] ; check for 'er ', we only checked 'serv'
or eax, 0x00002020
and eax, 0x00ffffff
cmp eax, 'er '
373,10 → 383,10
mov [window_print], windows
mov [window_active], windows
 
mov ecx, [edit1.size] ; ok now set the address
mov ecx, [user_command.size] ; ok now set the address
sub ecx, 8
 
mov esi, usercommand+8
mov esi, user_command+8
.now:
push esi
mov edi, irc_server_name
404,7 → 414,7
 
cmd_usr_quer:
 
mov esi, usercommand+7
mov esi, user_command+7
call window_open
; test ebx, ebx
; jz .fail
433,7 → 443,7
; User typed a part command
cmd_usr_part:
 
cmp byte[usercommand+5], 13 ; parameters given?
cmp byte[user_command+5], 13 ; parameters given?
jne cmd_usr_send ; yes, send command straight to server
 
; close active window
492,10 → 502,10
 
cmd_usr_ctcp:
 
cmp byte[usercommand+5], ' '
cmp byte[user_command+5], ' '
jne cmd_usr_send
 
mov esi, usercommand+6
mov esi, user_command+6
; prepare a 'PRIVMSG '
mov dword[packetbuf], 'PRIV'
mov dword[packetbuf+4], 'MSG '
575,7 → 585,7
stosb
 
; copy the message itself (including first space)
mov esi, usercommand+3
mov esi, user_command+3
@@:
lodsb
cmp al, 13
605,7 → 615,7
mov esi, user_nick
call print_asciiz
 
mov esi, usercommand+3
mov esi, user_command+3
mov bl, 13
call print_string
 
616,18 → 626,16
 
 
 
; The user typed some undefined command, just recode it and send to the server
; The user typed some undefined command, just send it to the server
cmd_usr_send:
 
mov esi, usercommand+1
mov ecx, [edit1.size]
inc ecx
mov edi, packetbuf
call recode
mov esi, [user_command.size]
mov eax, [user_command.size]
add eax, user_command+1
mov word[eax], 0x0d0a
inc esi
mcall send, [socketnum], user_command+1, , 0
 
lea esi, [edi - packetbuf]
mcall send, [socketnum], packetbuf, , 0
 
ret