0,0 → 1,263 |
red_logon: |
call draw_window_logon ; at first, draw the window |
|
still_logon: ; main cycle of application begins here |
mov eax,10 ; wait here for event |
int 0x40 |
|
checkevent_logon: ; Check what event was called _logon: this will be used to return from textbox focus |
|
dec eax ; redraw request ? |
jz red_logon |
dec eax ; key in buffer ? |
jz key_logon |
dec eax ; button in buffer ? |
jz button_logon |
|
jmp still_logon |
|
key_logon: ; key event handler |
mov al,2 ; eax was zero so will now be 2 |
int 0x40 ; just read it and ignore |
|
cmp ah,13 |
jne still_logon ; return to main loop |
|
ret ; enter key was pressed => return to logon |
|
button_logon: ; eax was zero so will now be 17 |
mov al,17 ; get id |
int 0x40 |
|
cmp ah,1 ; close ? |
jz close_logon |
cmp ah,2 ; logon ? |
je connect_logon |
cmp ah,5 ; first ? |
jz dstbtn_logon |
|
srcbtn_logon: |
mov dword[addr],first |
jmp rk_logon |
|
dstbtn_logon: |
mov dword[addr],second |
|
rk_logon: |
mov edi,[addr] ; load the address of the string |
xor al,al ; mov al,0 ; the symbol we will search for |
mov ecx,STRLEN+1 ; length of the string (+1) |
cld ; search forward |
repne scasb ; do search now |
inc ecx ; we've found a zero or ecx became 0 |
mov eax,STRLEN+1 |
sub eax,ecx ; eax = address of <0> character |
mov [temp],eax ; position |
|
cmp dword[addr],dword second |
jne @f |
mov dword [passlen],eax |
@@: |
|
call print_text_logon |
|
mov edi,[addr] ; address of string |
add edi,[temp] ; cursor position |
|
.waitev_logon: |
mov eax,10 ; wait for event |
int 0x40 |
cmp eax,2 ; button presed ? |
jne checkevent_logon ; a key is pressed or redraw is nessesary, goto checkevent |
int 0x40 ; eax = 2, read button |
shr eax,8 |
cmp eax,8 |
jnz .nobs_logon ; BACKSPACE |
cmp edi,[addr] |
jz .waitev_logon |
dec edi |
mov byte[edi],0 |
|
cmp dword[addr],second |
jne @f |
dec [passlen] |
@@: |
|
call print_text_logon |
jmp .waitev_logon |
.nobs_logon: |
cmp eax,13 ; ENTER |
je still_logon |
cmp eax,192 |
jne .noclear_logon |
xor al,al |
mov edi,[addr] |
mov ecx,STRLEN |
rep stosb |
mov edi,[addr] |
call print_text_logon |
jmp .waitev_logon |
|
.noclear_logon: |
mov [edi],al |
|
cmp dword[addr],second |
jne @f |
inc [passlen] |
@@: |
|
call print_text_logon |
|
inc edi |
mov esi,[addr] |
add esi,STRLEN |
cmp esi,edi |
jnz .waitev_logon |
|
jmp still_logon |
|
|
; print strings (source & destination) |
print_text_logon: |
pusha |
|
mov eax, 8 |
mov ebx, 105*65536+200 |
mov ecx, 33*65536+12 |
mov edx, 4 |
mov esi, 0xEBEBEB |
int 0x40 |
|
cmp byte[mode],0 |
je @f |
|
mov ecx, 49*65536+12 |
inc edx |
int 0x40 |
|
@@: |
mov eax, 4 ; function 4 _logon: write text to window |
mov ebx, 107*65536+34 ; [x start] *65536 + [y start] |
xor ecx, ecx ; color of text RRGGBB |
mov edx, first ; pointer to text beginning |
mov esi, STRLEN ; text length |
int 0x40 |
|
cmp byte[mode],0 |
je dont_draw_pass |
|
add ebx,16 |
mov edi,[passlen] |
|
@@: |
cmp edi,0 |
jle dont_draw_pass |
|
dec edi |
mov edx, passchar |
mov esi, 1 |
int 0x40 |
add ebx,6*65536 |
jmp @r |
|
dont_draw_pass: |
|
popa |
ret |
|
close_logon: |
mov eax,-1 |
int 0x40 |
|
connect_logon: |
ret |
|
draw_window_logon: |
|
mov eax, 12 ; function 12_logon:tell os about windowdraw |
mov ebx, 1 ; 1, start of draw |
int 0x40 |
pusha |
; DRAW WINDOW |
xor eax, eax ; function 0 _logon: define and draw window |
mov ebx, 160*65536+330 ; [x start] *65536 + [x size] |
mov ecx, 160*65536+100 ; [y start] *65536 + [y size] |
mov edx, 0x03DDDDDD ; color of work area RRGGBB |
int 0x40 |
|
mov eax, 8 ; LOGON BUTTON |
mov ebx, 220*65536+85 |
mov ecx, 63*65536+16 |
mov edx, 2 |
mov esi, 0xCCCCCC |
int 0x40 |
|
call print_text_logon |
; WINDOW LABEL |
mov eax, 4 ; function 4 _logon: write text to window |
mov ebx, 8*65536+8 ; [x start] *65536 + [y start] |
mov ecx, 0x10ffffff ; color of text RRGGBB |
mov edx, labelt ; pointer to text beginning |
mov esi, labellen-labelt ; text length |
int 0x40 |
|
cmp byte[mode],0 |
je servermode_ |
|
mov ebx, 25*65536+33 ; [x start] *65536 + [y start] |
xor ecx, ecx |
mov edx, userstr ; pointer to text beginning |
mov esi, passstr-userstr ; text length |
int 0x40 |
|
add bl,16 |
mov edx, passstr ; pointer to text beginning |
mov esi, connect-passstr ; text length |
int 0x40 |
|
jmp drawtherest_ |
|
servermode_: |
|
mov ebx, 25*65536+33 ; [x start] *65536 + [y start] |
xor ecx, ecx |
mov edx, serverstr ; pointer to text beginning |
mov esi, userstr-serverstr ; text length |
int 0x40 |
|
drawtherest_: |
|
mov ebx, 240*65536+67 ; [x start] *65536 + [y start] |
mov edx, connect ; pointer to text beginning |
mov esi, connect_e-connect ; text length |
int 0x40 |
|
popa |
inc ebx |
int 0x40 |
|
ret |
|
|
; DATA AREA |
labelt: db 'Kolibrios VNC client by HIDNPLAYR' |
labellen: |
|
first: db '192.168.1.5' |
rb STRLEN |
second: rb STRLEN |
|
passchar db '*' |
passlen dd 0 |
|
addr dd 0 |
temp dd 0 |
mode db 0 ; 0 = connection details, 1 = authentication |
|
serverstr: db 'server:' |
userstr: db 'username:' |
passstr: db 'password:' |
connect: db 'connect !' |
connect_e: |
|
I_END_logon: |