Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5676 → Rev 5677

/programs/network/vncc/keymap.inc
0,0 → 1,121
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; 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 ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
generate_keymap:
 
; Read keymaps from kernel
mcall 26, 2, 1, keymap+128
mcall 26, 2, 2, keymap_shift+128
mcall 26, 2, 3, keymap_alt+128
 
mov esi, keymap+128
mov edi, keymap
mov ecx, 128
call convert_keymap
 
mov esi, keymap_shift+128
mov edi, keymap_shift
mov ecx, 128
call convert_keymap
 
mov esi, keymap_alt+128
mov edi, keymap_alt
mov ecx, 128
call convert_keymap
 
ret
 
 
 
convert_keymap:
.loop:
lodsb
 
cmp al, 0x08 ; Backspace
jne @f
mov ax, 0x08ff
jmp .next
@@:
cmp al, 0x09 ; Tab
jne @f
mov ax, 0x09ff
jmp .next
@@:
cmp al, 0x0d ; Enter
jne @f
mov ax, 0x0dff
jmp .next
@@:
cmp al, 0x1b ; Escape
jne @f
mov ax, 0x1bff
jmp .next
@@:
cmp al, 0x34 ; Insert
jne @f
mov ax, 0x63ff
jmp .next
@@:
cmp al, 0xb6 ; Delete
jne @f
mov ax, 0xffff
jmp .next
@@:
cmp al, 0xb4 ; Home
jne @f
mov ax, 0x50ff
jmp .next
@@:
cmp al, 0xb5 ; End
jne @f
mov ax, 0x57ff
jmp .next
@@:
cmp al, 0xb8 ; PgUp
jne @f
mov ax, 0x55ff
jmp .next
@@:
cmp al, 0xb7 ; PgDown
jne @f
mov ax, 0x56ff
jmp .next
@@:
cmp al, 0xb0 ; Left
jne @f
mov ax, 0x51ff
jmp .next
@@:
cmp al, 0xb2 ; Up
jne @f
mov ax, 0x52ff
jmp .next
@@:
cmp al, 0xb3 ; Right
jne @f
mov ax, 0x53ff
jmp .next
@@:
cmp al, 0xb1 ; Down
jne @f
mov ax, 0x54ff
jmp .next
@@:
 
shl ax, 8
.next:
stosw
dec ecx
jnz .loop
ret
/programs/network/vncc/network.inc
83,11 → 83,17
mov dword[screen], eax
DEBUGF 1, "Screen width=%u, height=%u\n", [screen.width]:2, [screen.height]:2
 
DEBUGF 1, "Sending pixel format\n"
if BITS_PER_PIXEL = 8
mcall send, [socketnum], SetPixelFormat8, 20, 0
DEBUGF 1, "Sending pixel format\n"
else if BITS_PER_PIXEL = 16
mcall send, [socketnum], SetPixelFormat16, 20, 0
else
mcall send, [socketnum], SetPixelFormat24, 20, 0
end if
 
DEBUGF 1, "Sending encoding info\n"
mcall send, [socketnum], SetEncodings, 12, 0
DEBUGF 1, "Sending encoding info\n"
 
; Set main window caption to servername
mov ecx, dword[receive_buffer+framebuffer.name_length]
126,7 → 132,6
cmp al, 3
je servercuttext
 
 
DEBUGF 2, "Unknown server command: %u\n", al
jmp thread_loop
 
201,8 → 206,35
 
DEBUGF 1, "Server sent SetColourMapEntries message\n"
 
; TODO
@@:
lea eax, [esi+5]
cmp [datapointer], eax
jae @f
call read_data.more
jmp @b
@@:
 
inc esi ; padding
 
xor eax, eax
lodsw ; first color (just ignore for now)
 
lodsw ; number of colors (use to find end of message)
xchg al, ah
lea eax, [eax*2+eax]
shl eax, 1
@@:
push eax
add eax, esi
cmp [datapointer], eax
jae @f
call read_data.more
pop eax
jmp @b
@@:
pop eax
 
add esi, eax ; Just skip it for now.
jmp thread_loop
 
 
248,16 → 280,22
mov esi, receive_buffer
.more:
push ebx ecx edx esi edi
mcall recv, [socketnum], [datapointer], 4096, 0
neg esi
add esi, receive_buffer + RECEIVE_BUFFER_SIZE
jz .buffer_end_reached
xor edi, edi
mcall recv, [socketnum], [datapointer]
pop edi esi edx ecx ebx
cmp eax, -1
je err_disconnected
je err_sock
test eax, eax
jz err_disconnected
add [datapointer], eax
; Check for buffer overflow
cmp [datapointer], receive_buffer + RECEIVE_BUFFER_SIZE
jbe @f
ret
 
.buffer_end_reached:
; Buffer is full, first needed data by program is pointed to by esi.
; Move all remaining data, starting from esi, to begin of buffer
; Move all usefull data to begin of buffer
cmp esi, receive_buffer
je err_proto
mov ecx, [datapointer]
264,20 → 302,18
sub ecx, esi
mov edi, receive_buffer
rep movsb
mov [datapointer], edi
mov esi, receive_buffer
@@:
cmp eax, 4096
je .more
ret
mov [datapointer], edi ; new end of data
mov esi, receive_buffer ; new start of data
jmp .more
 
 
 
wait_for_data: ; FIXME: add timeout
mcall recv, [socketnum], receive_buffer, 4096, 0
mcall recv, [socketnum], receive_buffer, 4096, 0 ; MSG_DONTWAIT
cmp eax, -1
je err_disconnected
je err_sock
test eax, eax
jz wait_for_data
jz err_disconnected
ret
 
 
/programs/network/vncc/raw.inc
19,15 → 19,21
mov eax, [rectangle.width]
mov ebx, [rectangle.height]
mul ebx
if BITS_PER_PIXEL = 16
shl eax, 1
else if BITS_PER_PIXEL = 24
lea eax, [eax*2+eax]
end if
@@:
push eax
add eax, esi
@@:
cmp [datapointer], eax
jae @f
push eax
call read_data.more
pop eax
jmp @b
@@:
pop eax
 
mov eax, [rectangle.y]
movzx ebx, [screen.width]
40,39 → 46,56
sub eax, [rectangle.width]
lea ebp, [eax*3] ; ebp = ([screen.width]-[rectangle.width])*3
 
mov bl, 85
 
mov edx, [rectangle.height]
 
.lineloop:
mov ecx, [rectangle.width]
if BITS_PER_PIXEL = 24
lea ecx, [ecx*2+ecx]
end if
 
if BITS_PER_PIXEL = 8
.pixelloop:
mov bl, 85
mov al, [esi]
shr al, 4
shr al, 6
and al, 3
mul bl
stosb
 
stosb ; blue
mov bl, 36
mov al, [esi]
shr al, 2
and al, 3
shr al, 3
and al, 7
mul bl
stosb
 
stosb ; green
mov al, [esi]
and al, 3
and al, 7
mul bl
stosb
 
stosb ; red
inc esi
dec ecx
jnz .pixelloop
else if BITS_PER_PIXEL = 16
.pixelloop:
lodsw
mov bx, ax
shl al, 3
and al, 0xf8
stosb ; blue
mov ax, bx
shr ax, 3
and al, 0xfc
stosb ; green
mov al, bh
and al, 0xf8
stosb ; red
dec ecx
jnz .pixelloop
else if BITS_PER_PIXEL = 24
rep movsb
end if
 
add edi, ebp
dec edx
jnz .lineloop
jmp next_rectangle
 
 
 
/programs/network/vncc/rre.inc
13,29 → 13,50
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
pixel_to_24bpp: ; returns in ecx, destroys eax, ebx
if BITS_PER_PIXEL = 8
; Convert pixel to 24BPP
mov bl, 85
mov al, [esi]
shr al, 4
shr al, 6
and al, 3
mul bl
mov cl, al
mov ch, al ; blue
mov bl, 36
mov al, [esi]
shr al, 2
and al, 3
shr al, 3
and al, 7
mul bl
mov ch, al
mov cl, al ; green
mov al, [esi]
and al, 3
and al, 7
mul bl
shl ecx, 8
shr ecx, 8
mov cl, al ; red
inc esi
else if BITS_PER_PIXEL = 16
lodsw
mov cl, al
shl cl, 3
and cx, 0x00f8 ; blue
shl ecx, 16
mov cx, ax
shl cx, 5
and ch, 0xfc ; green
mov cl, ah
and al, 0xf8 ; red
else
xor ecx, ecx
mov cx, [esi]
shr ecx, 8
mov cl, [esi+2]
add esi, 3
end if
 
ret
 
encoding_RRE:
 
DEBUGF 1,"RRE\n"
DEBUGF 2,"RRE\n"
 
@@:
lea eax, [esi+5]
/programs/network/vncc/vncc.asm
17,6 → 17,8
__DEBUG__ = 1
__DEBUG_LEVEL__ = 2
 
BITS_PER_PIXEL = 8 ; 8, 16 24
 
use32
 
org 0x0
81,6 → 83,7
STATUS_LIB_ERR = 16
STATUS_THREAD_ERR = 17
 
include "keymap.inc"
include "gui.inc"
include "network.inc"
include "raw.inc"
114,8 → 117,9
mcall 40, EVM_MOUSE + EVM_MOUSE_FILTER + EVM_KEY + EVM_REDRAW + EVM_BUTTON
 
mcall 66, 1, 1 ; Switch keyboard to scancode mode
mcall 26, 2, 1, keymap ; Read keymap
 
call generate_keymap
 
redraw:
mcall 12, 1
 
151,6 → 155,9
jmp mainloop
 
key:
mcall 66, 3
mov ebx, eax
 
mcall 2
cmp ah, 224 ; ext
je mainloop ;; TODO
162,18 → 169,28
@@:
mov byte[KeyEvent.down], al
 
shr eax, 8
and al, 0x7f
mov al, [keymap+eax]
mov byte[KeyEvent.key+3], al
shr eax, 7
and eax, 0x000000fe
 
DEBUGF 1, "Sending key: 0x%x\n", al
 
test ebx, 100000b ; alt?
jz @f
add eax, 512
jmp .key
@@:
test ebx, 11b ; shift?
jz @f
add eax, 256
@@:
.key:
mov ax, [keymap+eax]
mov word[KeyEvent.key+2], ax
DEBUGF 1, "Sending key: 0x%x\n", ax
mcall send, [socketnum], KeyEvent, 8, 0
jmp mainloop
 
 
mouse:
; DEBUGF 1, "Sending mouse event\n"
; DEBUGF 1, "Sending pointer event\n"
 
mcall 37, 1 ; get mouse pos
bswap eax
193,6 → 210,7
 
button:
mcall 17 ; get id
mcall close, [socketnum]
mcall -1
 
 
218,32 → 236,46
.blue_shift db 16 ; blue-shift
db 0, 0, 0 ; padding
 
SetPixelFormat24 db 0 ; setPixelformat
db 0, 0, 0 ; padding
.bpp db 24 ; bits per pixel
.depth db 24 ; 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
.green_shift db 8 ; green-shift
.blue_shift db 0 ; blue-shift
db 0, 0, 0 ; padding
 
SetPixelFormat16 db 0 ; setPixelformat
db 0, 0, 0 ; padding
.bpp db 16 ; bits per pixel
.depth db 15 ; depth
.depth db 16 ; depth
.big_endian db 0 ; big-endian flag
.true_color db 1 ; true-colour flag
.red_max db 0, 31 ; red-max
.green_max db 0, 31 ; green-max
.green_max db 0, 63 ; green-max
.blue_max db 0, 31 ; blue-max
.red_shif db 0 ; red-shift
.red_shift db 11 ; red-shift
.green_shift db 5 ; green-shift
.blue_shift db 10 ; blue-shift
.blue_shift db 0 ; blue-shift
db 0, 0, 0 ; padding
 
SetPixelFormat8 db 0 ; setPixelformat
db 0, 0, 0 ; padding
.bpp db 8 ; bits per pixel
.depth db 6 ; depth
.depth db 8 ; depth
.big_endian db 0 ; big-endian flag
.true_color db 1 ; true-colour flag
.red_max db 0, 3 ; red-max
.green_max db 0, 3 ; green-max
.red_max db 0, 7 ; red-max
.green_max db 0, 7 ; green-max
.blue_max db 0, 3 ; blue-max
.red_shif db 0 ; red-shift
.green_shift db 2 ; green-shift
.blue_shift db 4 ; blue-shift
.red_shift db 0 ; red-shift
.green_shift db 3 ; green-shift
.blue_shift db 6 ; blue-shift
db 0, 0, 0 ; padding
 
SetEncodings db 2 ; setEncodings
371,12 → 403,14
.height dw ?
.width dw ?
 
keymap rb 128
keymap rw 128
keymap_shift rw 128
keymap_alt rw 128
username rb 128
password rb 128
serveraddr rb 65536
receive_buffer rb RECEIVE_BUFFER_SIZE
framebuffer_data rb 1024*1024*3 ; framebuffer
framebuffer_data rb 1280*1024*3 ; framebuffer
 
rb 0x1000
thread_stack: