Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5722 → Rev 5721

/programs/network/vncc/gui.inc
234,8 → 234,6
mcall 18, 18, [thread_id] ; kill thread
.ok:
and [URLbox.flags], not ed_disabled
mov [USERbox.size], 0
mov [PASSbox.size], 0
mov [status], STATUS_CONNECT
inc [update_gui]
jmp .loop
/programs/network/vncc/network.inc
71,10 → 71,8
je err_connect
 
; Verify handshake from server
call read_data
cmp eax, 12
jb err_proto
cmp dword[esi], "RFB "
call wait_for_data
cmp dword[receive_buffer], "RFB "
jne err_proto
add esi, 12
 
91,9 → 89,7
mcall send, [socketnum], HandShake, 12, 0
 
; VNC 3.3 protocol: server decides security type
call read_data
cmp eax, 4
jb err_proto
call wait_for_data
lodsd
cmp eax, 0x00000000
je err_handshake
105,10 → 101,6
 
vnc_security:
 
lea eax, [esi+8]
cmp [datapointer], eax
jb err_proto
 
push esi ; pointer to message
 
mov dword[password], 0
204,10 → 196,8
 
securityresult:
; Wait for SecurityResult from server
call read_data
cmp eax, 4
jb err_proto
cmp dword[esi], 0 ; OK
call wait_for_data
cmp dword[receive_buffer], 0 ; OK
jne err_login
 
initialize:
214,52 → 204,45
DEBUGF 1, "Sending ClientInit\n"
mcall send, [socketnum], ClientInit, 1, 0
 
call read_data ; now the server should send init message
cmp eax, ServerInit.name
jb err_proto
call wait_for_data ; now the server should send init message
 
DEBUGF 2, "Serverinit: bpp: %u depth: %u bigendian: %u truecolor: %u\n", \
[esi+ServerInit.pixelformat.bpp]:1, \
[esi+ServerInit.pixelformat.depth]:1, \
[esi+ServerInit.pixelformat.big_endian]:1, \
[esi+ServerInit.pixelformat.true_color]:1
DEBUGF 1, "Serverinit: bpp: %u depth: %u bigendian: %u truecolor: %u\n", \
[receive_buffer+framebuffer.pixelformat.bpp]:1, \
[receive_buffer+framebuffer.pixelformat.depth]:1, \
[receive_buffer+framebuffer.pixelformat.big_endian]:1, \
[receive_buffer+framebuffer.pixelformat.true_color]:1
 
mov eax, dword[esi+ServerInit.width]
mov eax, dword[receive_buffer+framebuffer.width]
mov dword[FramebufferUpdateRequest.width], eax
bswap eax
mov dword[screen], eax
DEBUGF 1, "Screen width=%u, height=%u\n", [screen.width]:2, [screen.height]:2
 
; Set main window caption to servername
mov ecx, dword[esi+ServerInit.name_length]
bswap ecx
add esi, ServerInit.name
lea eax, [esi+ecx]
cmp [datapointer], eax
jb err_proto
cmp ecx, 64 ; Limit name length to 64 chars
jbe @f
mov ecx, 64
@@:
mov edi, servername
rep movsb
mov byte[edi], 0
mov [name.dash], "-"
 
DEBUGF 1, "Sending pixel format\n"
if BITS_PER_PIXEL = 8
mcall send, [socketnum], SetPixelFormat8, 20, 0
else if BITS_PER_PIXEL = 16
mcall send, [socketnum], SetPixelFormat16, 20, 0
else if BITS_PER_PIXEL = 24
else
mcall send, [socketnum], SetPixelFormat24, 20, 0
else
mcall send, [socketnum], SetPixelFormat32, 20, 0
end if
 
DEBUGF 1, "Sending encoding info\n"
mcall send, [socketnum], SetEncodings, SetEncodings.length, 0
 
; Set main window caption to servername
mov ecx, dword[receive_buffer+framebuffer.name_length]
bswap ecx
cmp ecx, 64
jbe @f
mov ecx, 64
@@:
lea esi, [receive_buffer+framebuffer.name]
mov edi, servername
rep movsb
mov byte[edi], 0
mov [name.dash], "-"
 
; Tell the main thread we are ready for business!
mov [status], STATUS_CONNECTED
 
460,6 → 443,17
jmp .more
 
 
 
wait_for_data: ; FIXME: add timeout
mcall recv, [socketnum], receive_buffer, 4096, 0 ; MSG_DONTWAIT
cmp eax, -1
je err_sock
test eax, eax
jz err_disconnected
mov esi, receive_buffer
ret
 
 
err_disconnected:
mov [status], STATUS_DISCONNECTED
inc [update_gui]
471,8 → 465,6
mcall -1
 
err_sock:
; TODO: distinguish between different socket errors!
DEBUGF 2, "Socket error: %u\n", ebx
mov [status], STATUS_SOCK_ERR
inc [update_gui]
mcall -1
/programs/network/vncc/vncc.asm
17,7 → 17,7
__DEBUG__ = 1
__DEBUG_LEVEL__ = 2
 
BITS_PER_PIXEL = 32 ; 8, 16, 24 or 32
BITS_PER_PIXEL = 8 ; 8, 16 24
SERVERADDRLEN = 4096
 
use32
40,7 → 40,7
include "../../develop/libraries/box_lib/trunk/box_lib.mac"
include "../../network.inc"
 
struct PixelFormat
struct pixel_format
bpp db ?
depth db ?
big_endian db ?
54,12 → 54,12
padding rb 3
ends
 
struct ServerInit
struct framebuffer
width dw ?
height dw ?
pixelformat PixelFormat
pixelformat pixel_format
name_length dd ?
name db ?
name rb 256
ends
 
xpos = 4
156,7 → 156,7
 
draw_framebuffer:
DEBUGF 1, "Drawing framebuffer\n"
mcall 7, framebuffer, dword[screen], 0
mcall 7, framebuffer_data, dword[screen], 0
mov [update_framebuffer], 0
 
mainloop:
275,15 → 275,15
SetPixelFormat32 db 0 ; setPixelformat
db 0, 0, 0 ; padding
.bpp db 32 ; bits per pixel
.depth db 24 ; depth
.depth db 32 ; depth
.big_endian db 0 ; big-endian flag
.true_color db 1 ; true-colour flag
.red_max db 0, 255 ; red-max
.green_max db 0, 255 ; green-max
.blue_max db 0, 255 ; blue-max
.red_shift db 16 ; red-shift
.red_shif db 0 ; red-shift
.green_shift db 8 ; green-shift
.blue_shift db 0 ; blue-shift
.blue_shift db 16 ; blue-shift
db 0, 0, 0 ; padding
 
SetPixelFormat24 db 0 ; setPixelformat
479,7 → 479,7
sz_err_security_c rb 512+1
 
receive_buffer rb RECEIVE_BUFFER_SIZE
framebuffer rb 1280*1024*3 ; framebuffer
framebuffer_data rb 1280*1024*3 ; framebuffer
 
rb 0x1000
thread_stack:
/programs/network/vncc/rre.inc
12,16 → 12,16
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
load_pixel_rre: ; returns in ecx
pixel_to_24bpp: ; returns in ecx
 
push eax
@@:
lea eax, [esi+BYTES_PER_PIXEL]
cmp [datapointer], eax
jae @f
call read_data.more
jmp @b
@@:
; @@:
; lea eax, [esi+BYTES_PER_PIXEL]
; cmp [datapointer], eax
; jae @f
; call read_data.more
; jmp @b
; @@:
 
if BITS_PER_PIXEL = 8
 
65,18 → 65,14
shl cl, 3
and cx, 0x00f8 ; blue
 
else if BITS_PER_PIXEL = 24
else
 
mov ecx, [esi]
and ecx, 0x00ffffff
xor ecx, ecx
mov cx, [esi]
shl ecx, 8
mov cl, [esi+2]
add esi, 3
 
else if BITS_PER_PIXEL = 32
 
mov ecx, [esi]
and ecx, 0x00ffffff
add esi, 4
 
end if
pop eax
 
101,13 → 97,13
DEBUGF 1, "%u subrectangles\n", eax
 
; Get background color
call load_pixel_rre
call pixel_to_24bpp
 
; Calculate first pixel pos
movzx eax, [screen.width]
mul [rectangle.y] ; [screen.width]*[rectangle.y]
add eax, [rectangle.x] ; [screen.width]*[rectangle.y]+[rectangle.x]
lea edi, [framebuffer+eax*3] ; edi = framebuffer_data+([screen.width]*[rectangle.y]+[rectangle.x])*3
lea edi, [framebuffer_data+eax*3] ; edi = framebuffer_data+([screen.width]*[rectangle.y]+[rectangle.x])*3
 
; Calculate offset between two rows of pixels
movzx eax, [screen.width]
146,7 → 142,7
@@:
 
; Get subrectangle color
call load_pixel_rre
call pixel_to_24bpp
 
; Get coordinates
xor eax, eax
/programs/network/vncc/zrle.inc
12,68 → 12,6
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 
load_pixel_zrle: ; returns in ecx
 
push eax
 
; TODO: check for buffer underrun!
 
if BITS_PER_PIXEL = 8
 
push ebx
 
mov bl, 36
mov al, [esi]
and al, 7
mul bl
mov ch, al ; red
 
mov al, [esi]
shr al, 3
and al, 7
mul bl
mov cl, al ; green
 
mov bl, 85
mov al, [esi]
shr al, 6
and al, 3
mul bl
shl ecx, 8
mov cl, al ; blue
 
inc esi
pop ebx
 
else if BITS_PER_PIXEL = 16
 
lodsw
mov cl, ah
and al, 0xf8 ; red
 
mov cx, ax
shl cx, 5
and ch, 0xfc ; green
shl ecx, 8
 
mov cl, al
shl cl, 3
and cx, 0x00f8 ; blue
 
else ; 32 BPP gets packed to 24 BPP
 
mov ecx, [esi]
and ecx, 0x00ffffff
add esi, 3
 
end if
pop eax
 
ret
 
 
 
deflate_callback:
mov eax, [deflate_length]
mov ecx, [esp+8]
81,8 → 19,6
mov eax, [deflate_buffer]
ret 8
 
 
 
encoding_ZRLE:
 
DEBUGF 2, "ZRLE\n"
166,7 → 102,7
mul ebx
add eax, [rectangle.x]
add eax, [subrectangle.x]
lea edi, [framebuffer+eax*3]
lea edi, [framebuffer_data+eax*3]
 
; Calculate offset between two rows of pixels
movzx eax, [screen.width]
283,7 → 219,8
jmp .next_tile
 
.rle_reload:
call load_pixel_zrle
; load pixel value
call pixel_to_24bpp
 
;;;
 
517,7 → 454,7
.raw_line:
mov ebx, [subrectangle.width]
.raw_pixel:
call load_pixel_zrle
call pixel_to_24bpp
mov word[edi], cx
shr ecx, 16
add edi, 2
535,7 → 472,7
; Single color tile
.solid:
DEBUGF 1, "Solid tile\n"
call load_pixel_zrle
call pixel_to_24bpp
mov eax, ecx
shr eax, 16
 
/programs/network/vncc/raw.inc
23,8 → 23,6
shl eax, 1
else if BITS_PER_PIXEL = 24
lea eax, [eax*2+eax]
else if BITS_PER_PIXEL = 32
shl eax, 2
end if
@@:
push eax
41,7 → 39,7
movzx ebx, [screen.width]
mul ebx ; [screen.width]*[rectangle.y]
add eax, [rectangle.x] ; [screen.width]*[rectangle.y]+[rectangle.x]
lea edi, [framebuffer+eax*3] ; edi = framebuffer_data+([screen.width]*[rectangle.y]+[rectangle.x])*3
lea edi, [framebuffer_data+eax*3] ; edi = framebuffer_data+([screen.width]*[rectangle.y]+[rectangle.x])*3
 
movzx eax, [screen.width]
sub eax, [rectangle.width]
94,13 → 92,6
jnz .pixelloop
else if BITS_PER_PIXEL = 24
rep movsb
else if BITS_PER_PIXEL = 32
.pixelloop:
movsw
movsb
inc esi
dec ecx
jnz .pixelloop
end if
 
add edi, ebp
/programs/network/vncc/trle.inc
20,7 → 20,7
DEBUGF 1, "Loading palette of %u colors\n", dl
mov edi, palette
.loop:
call load_pixel_trle
call pixel_to_24bpp
mov [edi], ecx
add edi, 4
dec dl
30,71 → 30,6
ret
 
 
load_pixel_trle: ; returns in ecx
 
push eax
@@:
lea eax, [esi+BYTES_PER_PIXEL]
cmp [datapointer], eax
jae @f
call read_data.more
jmp @b
@@:
 
if BITS_PER_PIXEL = 8
 
push ebx
 
mov bl, 36
mov al, [esi]
and al, 7
mul bl
mov ch, al ; red
 
mov al, [esi]
shr al, 3
and al, 7
mul bl
mov cl, al ; green
 
mov bl, 85
mov al, [esi]
shr al, 6
and al, 3
mul bl
shl ecx, 8
mov cl, al ; blue
 
inc esi
pop ebx
 
else if BITS_PER_PIXEL = 16
 
lodsw
mov cl, ah
and al, 0xf8 ; red
 
mov cx, ax
shl cx, 5
and ch, 0xfc ; green
shl ecx, 8
 
mov cl, al
shl cl, 3
and cx, 0x00f8 ; blue
 
else ; 32 BPP gets packed to 24 BPP
 
mov ecx, [esi]
and ecx, 0x00ffffff
add esi, 3
 
end if
pop eax
 
ret
 
 
encoding_TRLE:
 
DEBUGF 1, "TRLE\n"
127,7 → 62,7
mul ebx
add eax, [rectangle.x]
add eax, [subrectangle.x]
lea edi, [framebuffer+eax*3]
lea edi, [framebuffer_data+eax*3]
 
; Calculate offset between two rows of pixels
movzx eax, [screen.width]
262,7 → 197,8
jmp .next_tile
 
.rle_reload:
call load_pixel_trle
; load pixel value
call pixel_to_24bpp
 
@@:
lea eax, [esi+1]
511,7 → 447,7
.raw_line:
mov ebx, [subrectangle.width]
.raw_pixel:
call load_pixel_trle
call pixel_to_24bpp
mov word[edi], cx
shr ecx, 16
add edi, 2
529,7 → 465,7
; Single color tile
.solid:
DEBUGF 1, "Solid tile\n"
call load_pixel_trle
call pixel_to_24bpp
mov eax, ecx
shr eax, 16
 
/programs/network/vncc/copyrect.inc
33,13 → 33,13
movzx ebx, word[esi] ; [src.x]
xchg bl, bh
add eax, ebx ; [screen.width]*[src.y]+[src.x]
lea esi, [framebuffer+eax*3] ; esi = framebuffer_data+([screen.width]*[src.y]+[src.x])*3
lea esi, [framebuffer_data+eax*3] ; esi = framebuffer_data+([screen.width]*[src.y]+[src.x])*3
 
mov eax, [rectangle.y]
movzx ebx, [screen.width]
mul ebx ; [screen.width]*[rectangle.y]
add eax, [rectangle.x] ; [screen.width]*[rectangle.y]+[rectangle.x]
lea edi, [framebuffer+eax*3] ; edi = framebuffer_data+([screen.width]*[rectangle.y]+[rectangle.x])*3
lea edi, [framebuffer_data+eax*3] ; edi = framebuffer_data+([screen.width]*[rectangle.y]+[rectangle.x])*3
 
movzx eax, [screen.width]
sub eax, [rectangle.width]