mirror of
https://github.com/KolibriOS/kolibrios.git
synced 2024-12-27 00:39:41 +03:00
0ceaac39cf
git-svn-id: svn://kolibrios.org@661 a494cfbc-eb01-0410-851d-a64ba20cac60
1020 lines
15 KiB
NASM
1020 lines
15 KiB
NASM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; ;;
|
|
;; POP CLIENT for MenuetOS ;;
|
|
;; - Modified from IRC client ;;
|
|
;; ;;
|
|
;; License: GPL / See file COPYING for details ;;
|
|
;; Copyright 2002 (c) Ville Turjanmaa ;;
|
|
;; ;;
|
|
;; Compile with FASM for Menuet ;;
|
|
;; ;;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
include 'macros.inc'
|
|
version equ '0.1'
|
|
|
|
use32
|
|
|
|
org 0x0
|
|
|
|
db 'MENUET01' ; 8 byte id
|
|
dd 0x01 ; required os
|
|
dd START ; program start
|
|
dd I_END ; program image size
|
|
dd 0x200000 ; required amount of memory
|
|
dd 0xffff0
|
|
dd 0,0
|
|
|
|
START: ; start of execution
|
|
|
|
mov [file_start],0x100000
|
|
|
|
mov eax,70
|
|
mov ebx,filel
|
|
mcall
|
|
|
|
test eax,eax
|
|
jz @f
|
|
cmp eax,6
|
|
jnz notfound
|
|
@@:
|
|
add [file_start],ebx
|
|
notfound:
|
|
|
|
mov edi,I_END
|
|
mov ecx,60*120
|
|
mov al,32
|
|
cld
|
|
rep stosb
|
|
|
|
mov eax,[rxs]
|
|
imul eax,11
|
|
mov [pos],eax
|
|
|
|
mov ebp,0
|
|
mov edx,I_END
|
|
|
|
redraw: ; redraw
|
|
call draw_window ; at first, draw the window
|
|
|
|
still:
|
|
|
|
mov eax,5
|
|
mov ebx,1
|
|
mcall
|
|
|
|
mov eax,11 ; wait here for event
|
|
mcall
|
|
|
|
cmp eax,1 ; redraw
|
|
je redraw
|
|
cmp eax,2 ; key
|
|
je key
|
|
cmp eax,3 ; button
|
|
je button
|
|
|
|
cmp [I_END+120*60],byte 1
|
|
jne no_main_update
|
|
mov [I_END+120*60],byte 0
|
|
mov edx,I_END
|
|
call draw_server_data
|
|
no_main_update:
|
|
|
|
cmp [server_active],0
|
|
je noread
|
|
call read_incoming_data
|
|
noread:
|
|
|
|
call print_status
|
|
|
|
cmp [status],4
|
|
je send_request
|
|
|
|
jmp still
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;
|
|
;; Save the fetched mails
|
|
;;
|
|
|
|
|
|
save_file:
|
|
|
|
pusha
|
|
|
|
mov ebx,files
|
|
mov eax,[file_start]
|
|
sub eax,0x100000
|
|
mov [ebx+12],eax
|
|
|
|
mov eax,70
|
|
mcall
|
|
|
|
popa
|
|
|
|
ret
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;
|
|
;; Send user id/passwd/mailrq
|
|
;;
|
|
|
|
|
|
send_request:
|
|
|
|
inc [mcounter]
|
|
|
|
cmp [mcounter],1000
|
|
jbe no_send
|
|
|
|
mov eax,[ccounter]
|
|
imul eax,32
|
|
add eax,getmail
|
|
mov esi,eax
|
|
|
|
inc [ccounter]
|
|
|
|
mov edx,32
|
|
|
|
cmp [ccounter],1
|
|
jne no1
|
|
mov edx,5+2
|
|
add edx,[l2]
|
|
no1:
|
|
|
|
cmp [ccounter],2
|
|
jne no2
|
|
mov edx,5+2
|
|
add edx,[l3]
|
|
no2:
|
|
|
|
mov eax,53
|
|
mov ebx,7
|
|
mov ecx,[socket]
|
|
mcall
|
|
mov [mcounter],0
|
|
|
|
cmp [esi],dword 'quit'
|
|
je close_fetch
|
|
|
|
|
|
no_send:
|
|
|
|
jmp still
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;
|
|
;; Close connection to server
|
|
;;
|
|
|
|
|
|
close_fetch:
|
|
|
|
mov eax,53
|
|
mov ebx,7
|
|
mov ecx,[socket]
|
|
mov edx,14
|
|
mov esi,quitc
|
|
mcall
|
|
mov [mcounter],0
|
|
|
|
mov eax,5
|
|
mov ebx,150
|
|
mcall
|
|
|
|
call read_incoming_data
|
|
|
|
mov eax,53
|
|
mov ebx,8
|
|
mov ecx,[socket]
|
|
mcall
|
|
|
|
mov eax,5
|
|
mov ebx,2
|
|
mcall
|
|
|
|
mov eax,53
|
|
mov ebx,8
|
|
mov ecx,[socket]
|
|
mcall
|
|
|
|
mov [server_active],0
|
|
|
|
jmp still
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;
|
|
;; User input processing
|
|
;;
|
|
|
|
|
|
key:
|
|
|
|
mov eax,2
|
|
mcall
|
|
|
|
jmp still
|
|
|
|
|
|
button: ; button
|
|
|
|
mov eax,17 ; get id
|
|
mcall
|
|
|
|
cmp ah,60
|
|
jne no_open
|
|
mov eax, 70
|
|
mov ebx, tinypad_start
|
|
mcall
|
|
jmp still
|
|
no_open:
|
|
|
|
cmp ah,1 ; close program
|
|
jne noclose
|
|
mov eax,-1
|
|
mcall
|
|
noclose:
|
|
|
|
cmp ah,51
|
|
je read_string
|
|
cmp ah,52
|
|
je read_string
|
|
cmp ah,53
|
|
je read_string
|
|
|
|
call socket_commands
|
|
|
|
jmp still
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;
|
|
;; Socket open & close
|
|
;;
|
|
|
|
socket_commands:
|
|
|
|
cmp ah,22 ; open socket
|
|
jnz tst3
|
|
|
|
mov [server_active],1
|
|
|
|
mov [mcounter],900
|
|
mov [ccounter],0
|
|
|
|
mov eax,3
|
|
mcall
|
|
|
|
mov eax,3
|
|
mcall
|
|
mov ecx,eax
|
|
and ecx,0xffff
|
|
|
|
mov eax,53
|
|
mov ebx,5
|
|
mov edx,110
|
|
mov esi,dword [ip]
|
|
mov edi,1
|
|
mcall
|
|
mov [socket], eax
|
|
|
|
ret
|
|
tst3:
|
|
|
|
|
|
cmp ah,24 ; close socket
|
|
jnz no_24
|
|
mov eax,53
|
|
mov ebx,8
|
|
mov ecx,[socket]
|
|
mcall
|
|
mov [header_sent],0
|
|
mov [mail_rp],0
|
|
mov [server_active],0
|
|
|
|
ret
|
|
no_24:
|
|
|
|
ret
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;
|
|
;; Display connection status
|
|
;;
|
|
|
|
old_status dd 0x0
|
|
|
|
print_status:
|
|
|
|
pusha
|
|
|
|
mov eax,53
|
|
mov ebx,6
|
|
mov ecx,[socket]
|
|
mcall
|
|
|
|
mov [status],eax
|
|
|
|
cmp eax,[old_status]
|
|
je nopr
|
|
|
|
mov [old_status],eax
|
|
|
|
push eax
|
|
|
|
mov eax,13
|
|
mov ebx,200*65536+30
|
|
mov ecx,160*65536+10
|
|
mov edx,0xffffff
|
|
mcall
|
|
|
|
pop ecx
|
|
|
|
cmp [server_active],1
|
|
jne nopr
|
|
|
|
mov eax,47
|
|
mov ebx,3*65536
|
|
mov edx,200*65536+160
|
|
mov esi,0x000000
|
|
mcall
|
|
|
|
nopr:
|
|
|
|
popa
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;
|
|
;; Read data from server
|
|
;;
|
|
|
|
|
|
read_incoming_data:
|
|
|
|
pusha
|
|
|
|
read_new_byte:
|
|
|
|
call read_incoming_byte
|
|
cmp ecx,-1
|
|
je no_data_in_buffer
|
|
|
|
mov eax,[file_start]
|
|
mov [eax],bl
|
|
inc [file_start]
|
|
|
|
cmp bl,10
|
|
jne no_start_command
|
|
mov [cmd],1
|
|
no_start_command:
|
|
|
|
cmp bl,13
|
|
jne no_end_command
|
|
mov eax,[cmd]
|
|
mov [eax+command-2],byte 0
|
|
call save_file
|
|
call analyze_data
|
|
mov edi,command
|
|
mov ecx,250
|
|
mov eax,0
|
|
cld
|
|
rep stosb
|
|
mov [cmd],0
|
|
no_end_command:
|
|
|
|
mov eax,[cmd]
|
|
cmp eax,250
|
|
jge still
|
|
|
|
mov [eax+command-2],bl
|
|
inc [cmd]
|
|
|
|
jmp read_new_byte
|
|
|
|
no_data_in_buffer:
|
|
|
|
popa
|
|
|
|
ret
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;
|
|
;; Read user input for ip/user/passwd
|
|
;;
|
|
|
|
|
|
read_string:
|
|
|
|
shr eax,8
|
|
sub eax,51
|
|
mov ebx,eax
|
|
imul eax,12
|
|
add eax,181
|
|
|
|
mov [len],ebx
|
|
shl [len],2
|
|
add [len],l1
|
|
|
|
imul ebx,50
|
|
add ebx,input1
|
|
|
|
mov [addr],ebx
|
|
mov [ya],eax
|
|
|
|
mov edi,[addr]
|
|
mov eax,0
|
|
mov ecx,30
|
|
cld
|
|
rep stosb
|
|
|
|
call print_input_text
|
|
|
|
mov edi,[addr]
|
|
|
|
f11:
|
|
mov eax,10
|
|
mcall
|
|
cmp eax,2
|
|
jne read_done
|
|
mov eax,2
|
|
mcall
|
|
shr eax,8
|
|
cmp eax,13
|
|
je read_done
|
|
cmp eax,8
|
|
jnz nobsl
|
|
cmp edi,[addr]
|
|
jz f11
|
|
sub edi,1
|
|
mov [edi],byte 32
|
|
call print_text
|
|
jmp f11
|
|
nobsl:
|
|
mov [edi],al
|
|
|
|
call print_input_text
|
|
|
|
add edi,1
|
|
mov esi,[addr]
|
|
add esi,30
|
|
cmp esi,edi
|
|
jnz f11
|
|
|
|
read_done:
|
|
|
|
push edi
|
|
|
|
mov ecx,40
|
|
mov eax,32
|
|
cld
|
|
rep stosb
|
|
|
|
call print_input_text
|
|
|
|
pop edi
|
|
sub edi,[addr]
|
|
mov eax,[len]
|
|
mov [eax],edi
|
|
|
|
cmp [len],l1
|
|
jne noip
|
|
mov esi,input1
|
|
mov edi,ip_text+15
|
|
mov ecx,16
|
|
cld
|
|
rep movsb
|
|
call ip_set
|
|
noip:
|
|
|
|
cmp [len],l2
|
|
jne nol2
|
|
mov esi,input2
|
|
mov edi,l2_text+15
|
|
mov ecx,22
|
|
cld
|
|
rep movsb
|
|
mov esi,input2
|
|
mov edi,getmail+5
|
|
mov ecx,[l2]
|
|
cld
|
|
rep movsb
|
|
mov al,13
|
|
stosb
|
|
mov al,10
|
|
stosb
|
|
nol2:
|
|
|
|
cmp [len],l3
|
|
jne nol3
|
|
mov esi,input3
|
|
mov edi,getmail+32+5
|
|
mov ecx,[l3]
|
|
cld
|
|
rep movsb
|
|
mov al,13
|
|
stosb
|
|
mov al,10
|
|
stosb
|
|
nol3:
|
|
|
|
call draw_window
|
|
|
|
jmp still
|
|
|
|
|
|
|
|
print_input_text:
|
|
|
|
pusha
|
|
|
|
mov eax,13
|
|
mov ebx,95*65536+23*6
|
|
mov ecx,[ya]
|
|
shl ecx,16
|
|
mov cx,9
|
|
mov edx,0xffffff
|
|
mcall
|
|
|
|
cmp [len],l3
|
|
je noprt
|
|
|
|
mov eax,4
|
|
mov edx,[addr]
|
|
mov ebx,95*65536
|
|
add ebx,[ya]
|
|
mov ecx,0x000000
|
|
mov esi,23
|
|
mcall
|
|
|
|
noprt:
|
|
|
|
popa
|
|
ret
|
|
|
|
|
|
ip_set:
|
|
|
|
mov esi,input1-1
|
|
mov edi,ip
|
|
xor eax,eax
|
|
ip1:
|
|
inc esi
|
|
cmp [esi],byte '0'
|
|
jb ip2
|
|
cmp [esi],byte '9'
|
|
jg ip2
|
|
imul eax,10
|
|
movzx ebx,byte [esi]
|
|
sub ebx,48
|
|
add eax,ebx
|
|
jmp ip1
|
|
ip2:
|
|
mov [edi],al
|
|
xor eax,eax
|
|
inc edi
|
|
cmp edi,ip+3
|
|
jbe ip1
|
|
ret
|
|
no_read_ip:
|
|
|
|
ret
|
|
|
|
|
|
analyze_data:
|
|
|
|
pusha
|
|
|
|
mov [text_start],I_END
|
|
mov ecx,[rxs]
|
|
imul ecx,11
|
|
mov [pos],ecx
|
|
|
|
mov bl,13
|
|
call print_character
|
|
mov bl,10
|
|
call print_character
|
|
|
|
cmp [cmd],2
|
|
jbe nott
|
|
mov ecx,[cmd]
|
|
sub ecx,2
|
|
mov esi,command+0
|
|
newcmdc:
|
|
mov bl,[esi]
|
|
call print_character
|
|
inc esi
|
|
loop newcmdc
|
|
|
|
nott:
|
|
|
|
mov edx,I_END
|
|
call draw_server_data
|
|
|
|
cmd_len_ok:
|
|
|
|
cmp [command],dword '-ERR'
|
|
je close_fetch
|
|
|
|
cmp [command],word '+O'
|
|
jne nook
|
|
mov [mcounter],990
|
|
nook:
|
|
|
|
popa
|
|
|
|
ret
|
|
|
|
|
|
|
|
draw_data:
|
|
|
|
push eax
|
|
|
|
add eax,[text_start]
|
|
mov [eax],bl
|
|
|
|
pop eax
|
|
ret
|
|
|
|
|
|
|
|
print_text:
|
|
|
|
pusha
|
|
|
|
mov ecx,command-2
|
|
add ecx,[cmd]
|
|
|
|
ptr2:
|
|
mov bl,[eax]
|
|
cmp bl,dl
|
|
je ptr_ret
|
|
cmp bl,0
|
|
je ptr_ret
|
|
call print_character
|
|
inc eax
|
|
cmp eax,ecx
|
|
jbe ptr2
|
|
|
|
ptr_ret:
|
|
|
|
mov eax,[text_start]
|
|
mov [eax+120*60],byte 1
|
|
|
|
popa
|
|
ret
|
|
|
|
|
|
|
|
print_character:
|
|
|
|
pusha
|
|
|
|
cmp bl,13 ; line beginning
|
|
jne nobol
|
|
mov ecx,[pos]
|
|
add ecx,1
|
|
boll1:
|
|
sub ecx,1
|
|
mov eax,ecx
|
|
xor edx,edx
|
|
mov ebx,[rxs]
|
|
div ebx
|
|
cmp edx,0
|
|
jne boll1
|
|
mov [pos],ecx
|
|
jmp newdata
|
|
nobol:
|
|
|
|
cmp bl,10 ; line down
|
|
jne nolf
|
|
addx1:
|
|
add [pos],dword 1
|
|
mov eax,[pos]
|
|
xor edx,edx
|
|
mov ecx,[rxs]
|
|
div ecx
|
|
cmp edx,0
|
|
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]
|
|
call draw_data
|
|
|
|
mov eax,[pos]
|
|
add eax,1
|
|
cm1:
|
|
mov ebx,[scroll+4]
|
|
imul ebx,[rxs]
|
|
cmp eax,ebx
|
|
jb noeaxz
|
|
|
|
mov esi,[text_start]
|
|
add esi,[rxs]
|
|
|
|
mov edi,[text_start]
|
|
mov ecx,ebx
|
|
cld
|
|
rep movsb
|
|
|
|
mov esi,[text_start]
|
|
mov ecx,[rxs]
|
|
imul ecx,61
|
|
add esi,ecx
|
|
|
|
mov edi,[text_start]
|
|
mov ecx,[rxs]
|
|
imul ecx,60
|
|
add edi,ecx
|
|
mov ecx,ebx
|
|
cld
|
|
rep movsb
|
|
|
|
mov eax,ebx
|
|
sub eax,[rxs]
|
|
noeaxz:
|
|
mov [pos],eax
|
|
|
|
newdata:
|
|
|
|
mov eax,[text_start]
|
|
mov [eax+120*60],byte 1
|
|
|
|
popa
|
|
ret
|
|
|
|
|
|
|
|
read_incoming_byte:
|
|
|
|
mov eax, 53
|
|
mov ebx, 2
|
|
mov ecx, [socket]
|
|
mcall
|
|
|
|
mov ecx,-1
|
|
|
|
cmp eax,0
|
|
je no_more_data
|
|
|
|
mov eax, 53
|
|
mov ebx, 3
|
|
mov ecx, [socket]
|
|
mcall
|
|
|
|
mov ecx,0
|
|
|
|
no_more_data:
|
|
|
|
ret
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;
|
|
;; Window definitions
|
|
;;
|
|
|
|
|
|
|
|
draw_window:
|
|
|
|
pusha
|
|
|
|
mov eax,12
|
|
mov ebx,1
|
|
mcall
|
|
|
|
mov eax,0 ; draw window
|
|
mov ebx,5*65536+435
|
|
mov ecx,5*65536+232
|
|
mov edx,0x14ffffff
|
|
mov edi,labelt
|
|
mcall
|
|
|
|
mov [old_status],300
|
|
|
|
mov eax,8 ; button: open socket
|
|
mov ebx,23*65536+22
|
|
mov ecx,155*65536+10
|
|
mov edx,22
|
|
mov esi,0x44cc44
|
|
mcall
|
|
|
|
; mov eax,8 ; button: close socket
|
|
mov ebx,295*65536+22
|
|
mov ecx,155*65536+10
|
|
mov edx,24
|
|
mov esi,0xcc4444
|
|
mcall
|
|
|
|
; mov eax,8 ; button: text entries
|
|
mov ebx,243*65536+8
|
|
mov ecx,180*65536+8
|
|
mov edx,51
|
|
mov esi,0x4488dd
|
|
newi:
|
|
mcall
|
|
inc edx
|
|
add ecx,12*65536
|
|
cmp edx,53
|
|
jbe newi
|
|
|
|
; mov eax,8 ; open inbox
|
|
mov ebx,295*65536+102
|
|
mov ecx,190*65536+14
|
|
mov edx,60
|
|
mov esi,0x5577dd
|
|
mcall
|
|
|
|
mov eax,38 ; line
|
|
mov ebx,5*65536+430
|
|
mov ecx,114*65536+114
|
|
mov edx,0x000000
|
|
mcall
|
|
|
|
mov ebx,5*65536+133 ; info text
|
|
mov ecx,0x000000
|
|
mov edx,text
|
|
mov esi,70
|
|
newline:
|
|
mov eax,4
|
|
mcall
|
|
add ebx,12
|
|
add edx,70
|
|
cmp [edx],byte 'x'
|
|
jne newline
|
|
|
|
mov edx,I_END ; text from server
|
|
call draw_server_data
|
|
|
|
mov eax,12
|
|
mov ebx,2
|
|
mcall
|
|
|
|
popa
|
|
|
|
ret
|
|
|
|
|
|
draw_server_data:
|
|
|
|
pusha
|
|
|
|
mov eax,4
|
|
mov ebx,10*65536+26
|
|
mov ecx,8
|
|
mov esi,[rxs]
|
|
dct:
|
|
pusha
|
|
mov ecx,ebx
|
|
shl ecx,16
|
|
mov cl,9
|
|
mov eax,13
|
|
mov ebx,10*65536
|
|
mov bx,word [rxs]
|
|
imul bx,6
|
|
mov edx,0xffffff
|
|
mcall
|
|
popa
|
|
push ecx
|
|
mov eax,4
|
|
mov ecx,0
|
|
mcall
|
|
add edx,[rxs]
|
|
add ebx,10
|
|
pop ecx
|
|
loop dct
|
|
|
|
popa
|
|
ret
|
|
|
|
|
|
|
|
text:
|
|
|
|
db ' Incoming mails are written to /rd/1/popc.txt '
|
|
db ' '
|
|
db ' Check for mail. Force close '
|
|
db ' '
|
|
ip_text:
|
|
db ' Server IP : 192.168.1.200 < '
|
|
l2_text:
|
|
db ' User : < Open popc.txt '
|
|
l3_text:
|
|
db ' Password : (not shown) < '
|
|
|
|
db 'x' ; <- END MARKER, DONT DELETE
|
|
|
|
file_start dd 0x100000
|
|
|
|
; max size is 0x100000 bytes, read to/write from 0x100000
|
|
files:
|
|
dd 2,0,0,?,0x100000
|
|
db 0
|
|
dd pr
|
|
filel:
|
|
dd 0,0,0,0x100000,0x100000
|
|
pr db '/sys/popc.txt',0
|
|
|
|
ip db 192,168,1,200
|
|
|
|
socket dd 0x0
|
|
|
|
posx dd 0x0
|
|
incoming_pos dd 0x0
|
|
incoming_string: times 128 db 0
|
|
pos dd 0x0
|
|
|
|
text_start dd I_END
|
|
print db 0x0
|
|
cmd dd 0x0
|
|
rxs dd 66
|
|
|
|
res: db 0,0
|
|
command: times 256 db 0x0
|
|
|
|
command_position dd 0
|
|
counter dd 0
|
|
|
|
numtext db ' '
|
|
labelt db 'POP client v ',version,0
|
|
scroll: dd 1,8
|
|
|
|
tinypad_start:
|
|
dd 7
|
|
dd 0
|
|
dd pr
|
|
dd 0
|
|
dd 0
|
|
db '/sys/TINYPAD',0
|
|
|
|
getmail:
|
|
db 'user xyz ',13,10
|
|
db 'pass xyz ',13,10
|
|
db 'retr 1 ',13,10
|
|
db 'retr 2 ',13,10
|
|
db 'retr 3 ',13,10
|
|
db 'retr 4 ',13,10
|
|
db 'retr 5 ',13,10
|
|
db 'retr 6 ',13,10
|
|
db 'retr 7 ',13,10
|
|
db 'retr 8 ',13,10
|
|
db 'retr 9 ',13,10
|
|
|
|
quitc:
|
|
db 'quit ',13,10
|
|
|
|
mcounter dd 900
|
|
ccounter dd 0
|
|
|
|
ld db 13,10
|
|
|
|
server_active db 0
|
|
|
|
header_sent db 0
|
|
|
|
close_connection dd 0x0
|
|
|
|
mail_rp dd 0
|
|
|
|
irc_data dd 0x0
|
|
addr dd 0x0
|
|
ya dd 0x0
|
|
len dd 0x0
|
|
|
|
input1: times 50 db 32
|
|
input2: times 50 db 32
|
|
input3: times 50 db 32
|
|
|
|
l1 dd 0
|
|
l2 dd 3
|
|
l3 dd 3
|
|
|
|
status dd 0x0
|
|
|
|
I_END:
|