Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5667 → Rev 5668

/programs/network/vncc/rre.inc
0,0 → 1,130
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2010-2015. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;; VNC client for KolibriOS ;;
;; ;;
;; Written by hidnplayr@kolibrios.org ;;
;; ;;
;; GNU GENERAL PUBLIC LICENSE ;;
;; Version 2, June 1991 ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
pixel_to_24bpp: ; returns in ecx, destroys eax, ebx
; Convert pixel to 24BPP
mov bl, 85
mov al, [esi]
shr al, 4
and al, 3
mul bl
mov cl, al
mov al, [esi]
shr al, 2
and al, 3
mul bl
mov ch, al
mov al, [esi]
and al, 3
mul bl
shl ecx, 8
mov cl, al
 
ret
 
encoding_RRE:
 
DEBUGF 1,"RRE\n"
 
@@:
lea eax, [esi+5]
cmp [datapointer], eax
jae @f
call read_data.more
jmp @b
@@:
 
lodsd
bswap eax
mov [subrectangles], eax
 
call pixel_to_24bpp
 
movzx eax, [screen.width]
mul [rectangle.y] ; [screen.width]*[rectangle.y]
add eax, [rectangle.x] ; [screen.width]*[rectangle.y]+[rectangle.x]
lea edi, [framebuffer_data+eax*3] ; edi = framebuffer_data+([screen.width]*[rectangle.y]+[rectangle.x])*3
 
movzx eax, [screen.width]
sub eax, [rectangle.width]
lea ebp, [eax*3] ; ebp = ([screen.width]-[rectangle.width])*3
 
push edi
mov eax, ecx
mov edx, [rectangle.height]
.lineloop:
mov ecx, [rectangle.width]
.pixelloop:
stosw
rol eax, 16
stosb
rol eax, 16
dec ecx
jnz .pixelloop
add edi, ebp
dec edx
jnz .lineloop
pop edi
 
.subrectangle:
@@:
lea eax, [esi+9]
cmp [datapointer], eax
jae @f
call read_data.more
jmp @b
@@:
 
call pixel_to_24bpp
 
xor eax, eax
lodsw
xchg al, ah
mov [subrectangle.x], eax
lodsw
xchg al, ah
mov [subrectangle.y], eax
lodsw
xchg al, ah
mov [subrectangle.height], eax
lodsw
xchg al, ah
mov [subrectangle.width], eax
 
push edi
mov eax, [rectangle.width]
mul [subrectangle.y]
add eax, [subrectangle.x]
add edi, eax
 
mov eax, ecx
mov edx, [subrectangle.height]
.lineloop2:
mov ecx, [subrectangle.width]
.pixelloop2:
stosw
rol eax, 16
stosb
rol eax, 16
dec ecx
jnz .pixelloop2
add edi, ebp
dec edx
jnz .lineloop2
 
pop edi
 
dec [subrectangles]
jnz .subrectangle
jmp next_rectangle