1,6 → 1,6 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; ;; |
;; Copyright (C) KolibriOS team 2010-2013. All rights reserved. ;; |
;; Copyright (C) KolibriOS team 2010-2015. All rights reserved. ;; |
;; Distributed under terms of the GNU General Public License ;; |
;; ;; |
;; vncc.asm - VNC client for KolibriOS ;; |
17,7 → 17,6 |
__DEBUG__ = 1 |
__DEBUG_LEVEL__ = 1 |
|
STRLEN = 64 ; password and server max length |
xpos = 4 ; coordinates of image |
ypos = 22 ; |
|
27,7 → 26,7 |
|
org 0x0 |
|
db 'MENUET01' ; 8 byte id |
db "MENUET01" ; 8 byte id |
dd 0x01 ; header version |
dd START ; start of code |
dd I_END ; size of image |
36,18 → 35,40 |
dd 0x0 , 0x0 ; I_Param , I_Path |
|
|
include '../../macros.inc' |
include '../../debug-fdo.inc' |
include '../../proc32.inc' |
include '../../dll.inc' |
include '../../struct.inc' |
include '../../network.inc' |
include "../../macros.inc" |
include "../../debug-fdo.inc" |
include "../../proc32.inc" |
include "../../dll.inc" |
include "../../struct.inc" |
include "../../develop/libraries/box_lib/trunk/box_lib.mac" |
include "../../network.inc" |
|
include 'structs.inc' |
include 'logon.inc' |
include 'raw.inc' |
include 'thread.inc' |
struct pixel_format |
bpp db ? |
depth db ? |
big_endian db ? |
true_color db ? |
red_max dw ? |
green_max dw ? |
blue_max dw ? |
red_shift db ? |
green_shift db ? |
blue_shift db ? |
padding rb 3 |
ends |
|
struct framebuffer |
width dw ? |
height dw ? |
pixelformat pixel_format |
name_length dd ? |
name rb 256 |
ends |
|
include "logon.inc" |
include "raw.inc" |
include "thread.inc" |
|
START: |
|
mcall 68, 11 ; init heap |
57,13 → 78,13 |
test eax, eax |
jnz exit |
|
call red_logon |
call logon |
|
mcall 40, 0 ; no events |
mcall 40, 0 ; disable all events |
mcall 67, 0, 0, 0, 0 ; resize the window (hide it) |
mcall 51, 1, thread_start, thread_stack |
|
DEBUGF 1,'Thread created: %u\n', eax |
DEBUGF 1,"Thread created: %u\n", eax |
|
@@: |
mcall 5, 10 |
70,9 → 91,8 |
cmp byte [thread_ready], 0 |
je @r |
|
mcall 40, 100111b ; mouse, button, key, redraw |
mcall 40, EVM_MOUSE + EVM_MOUSE_FILTER + EVM_KEY + EVM_REDRAW + EVM_BUTTON |
|
|
mov edx, dword [screen] |
movzx esi, dx |
shr edx, 16 |
81,25 → 101,21 |
mcall 67, 10, 10 ; resize the window |
|
mainloop: |
mcall 23, 50 ; wait for event, 0,5s timeout |
mcall 10 ; wait for event |
|
dec eax |
jz redraw |
|
dec eax |
jz key |
|
dec eax |
jz button |
|
sub eax, 3 |
jz mouse |
|
jmp mainloop |
|
key: |
|
DEBUGF 1,'Sending key event\n' |
; DEBUGF 1,"Sending key event\n" |
|
mcall 2 |
mov byte [keyevent.key+3], ah |
109,7 → 125,7 |
|
mouse: |
|
DEBUGF 1,'Sending mouse event\n' |
; DEBUGF 1,"Sending mouse event\n" |
|
mcall 37, 1 ; get mouse pos |
sub eax, xpos shl 16 + ypos |
121,7 → 137,7 |
mcall 37, 2 ; get mouse buttons |
test al, 00000010b ; test if right button was pressed (bit 1 in kolibri) |
jz @f |
add al, 00000010b ; in RFB protocol it is bit 2, so if we add bit 2 again, we'll get bit 3 and bit 1 will remain the same |
add al, 00000010b ; in RFB protocol it is bit 2, so if we add bit 2 again, we"ll get bit 3 and bit 1 will remain the same |
@@: |
mov [pointerevent.mask],al |
|
130,7 → 146,7 |
|
redraw: |
|
DEBUGF 1,'Drawing window\n' |
; DEBUGF 1,"Drawing window\n" |
|
mcall 12, 1 |
|
148,25 → 164,23 |
jmp mainloop |
|
drawbuffer: |
|
mcall 7, framebuffer_data, dword[screen], 0 |
ret |
|
|
button: |
mcall 17 ; get id |
|
exit: |
DEBUGF 1, 'Closing time!\n' |
DEBUGF 1, "Closing time!\n" |
mcall close, [socketnum] |
mcall -1 |
|
no_rfb: |
DEBUGF 1, 'This is no vnc server!\n' |
DEBUGF 1, "This is no vnc server!\n" |
jmp exit |
|
invalid_security: |
DEBUGF 1, 'Security error: %s\n', receive_buffer+5 |
DEBUGF 1, "Security error: %s\n", receive_buffer+5 |
jmp exit |
|
|
174,12 → 188,12 |
|
include_debug_strings ; ALWAYS present in data section |
|
handshake db 'RFB 003.003', 10 |
shared db 0 |
handshake db "RFB 003.003", 10 |
ClientInit db 0 ; not shared |
beep db 0x85,0x25,0x85,0x40,0 |
|
pixel_format32 db 0 ; setPixelformat |
rb 3 ; padding |
db 0, 0, 0 ; padding |
.bpp db 32 ; bits per pixel |
.depth db 32 ; depth |
.big_endian db 0 ; big-endian flag |
190,10 → 204,10 |
.red_shif db 0 ; red-shift |
.green_shift db 8 ; green-shift |
.blue_shift db 16 ; blue-shift |
rb 3 ; padding |
db 0, 0, 0 ; padding |
|
pixel_format16 db 0 ; setPixelformat |
rb 3 ; padding |
db 0, 0, 0 ; padding |
.bpp db 16 ; bits per pixel |
.depth db 15 ; depth |
.big_endian db 0 ; big-endian flag |
204,10 → 218,10 |
.red_shif db 0 ; red-shift |
.green_shift db 5 ; green-shift |
.blue_shift db 10 ; blue-shift |
rb 3 ; padding |
db 0, 0, 0 ; padding |
|
pixel_format8 db 0 ; setPixelformat |
rb 3 ; padding |
db 0, 0, 0 ; padding |
.bpp db 8 ; bits per pixel |
.depth db 6 ; depth |
.big_endian db 0 ; big-endian flag |
218,13 → 232,14 |
.red_shif db 0 ; red-shift |
.green_shift db 2 ; green-shift |
.blue_shift db 4 ; blue-shift |
rb 3 ; padding |
db 0, 0, 0 ; padding |
|
encodings db 2 ; setEncodings |
rb 1 ; padding |
db 1,0 ; number of encodings |
db 0 ; padding |
db 0, 1 ; number of encodings |
db 0,0,0,0 ; raw encoding (DWORD, Big endian order) |
db 1,0,0,0 ; Copyrect encoding |
; db 1, 0, 0, 0 ; Copyrect encoding |
; db |
|
fbur db 3 ; frame buffer update request |
.inc db 0 ; incremental |
251,41 → 266,65 |
rb 10 |
|
thread_ready db 0 |
mouse_dd dd ? |
|
URLbox edit_box 200, 25, 16, 0xffffff, 0x6f9480, 0, 0, 0, 65535, serveraddr, mouse_dd, ed_focus, 0, 0 |
|
; import |
align 4 |
@IMPORT: |
|
library network, 'network.obj' |
library network, "network.obj",\ |
box_lib, "box_lib.obj",\ |
archiver, "archiver.obj" |
|
import network, \ |
getaddrinfo, 'getaddrinfo', \ |
freeaddrinfo, 'freeaddrinfo', \ |
inet_ntoa, 'inet_ntoa' |
getaddrinfo, "getaddrinfo", \ |
freeaddrinfo, "freeaddrinfo", \ |
inet_ntoa, "inet_ntoa" |
|
name db 'VNC client', 0 |
import box_lib,\ |
edit_box_draw, "edit_box",\ |
edit_box_key, "edit_box_key",\ |
edit_box_mouse, "edit_box_mouse",\ |
scrollbar_v_draw, "scrollbar_v_draw",\ |
scrollbar_v_mouse, "scrollbar_v_mouse",\ |
scrollbar_h_draw, "scrollbar_h_draw",\ |
scrollbar_h_mouse, "scrollbar_h_mouse" |
|
import archiver,\ |
deflate_unpack, "deflate_unpack" |
|
name db "VNC client " |
name.dash db 0, " " |
|
I_END: |
|
servername rb 64+1 |
|
socketnum dd ? |
datapointer dd ? |
rectangles dw ? |
|
frame: |
rectangle: |
.width dw ? |
.height dw ? |
.x dw ? |
.y dw ? |
|
screen: |
screen: ; Remote screen resolution |
.height dw ? |
.width dw ? |
|
serveraddr rb 65536 |
receive_buffer rb 5*1024*1024 ; 5 mb buffer for received data (incoming frbupdate etc) |
framebuffer_data rb 1024*768*3 ; framebuffer |
framebuffer_data rb 1024*1024*3 ; framebuffer |
|
|
rb 0x1000 |
thread_stack: |
|
rb 0x1000 |
|
IM_END: |
|
|