Rev 5677 | Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5668 | hidnplayr | 1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ;; ;; |
||
3 | ;; Copyright (C) KolibriOS team 2010-2015. All rights reserved. ;; |
||
4 | ;; Distributed under terms of the GNU General Public License ;; |
||
5 | ;; ;; |
||
6 | ;; VNC client for KolibriOS ;; |
||
7 | ;; ;; |
||
8 | ;; Written by hidnplayr@kolibrios.org ;; |
||
9 | ;; ;; |
||
10 | ;; GNU GENERAL PUBLIC LICENSE ;; |
||
11 | ;; Version 2, June 1991 ;; |
||
12 | ;; ;; |
||
13 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
14 | |||
15 | pixel_to_24bpp: ; returns in ecx, destroys eax, ebx |
||
16 | ; Convert pixel to 24BPP |
||
17 | mov bl, 85 |
||
18 | mov al, [esi] |
||
19 | shr al, 4 |
||
20 | and al, 3 |
||
21 | mul bl |
||
22 | mov cl, al |
||
23 | mov al, [esi] |
||
24 | shr al, 2 |
||
25 | and al, 3 |
||
26 | mul bl |
||
27 | mov ch, al |
||
28 | mov al, [esi] |
||
29 | and al, 3 |
||
30 | mul bl |
||
31 | shl ecx, 8 |
||
32 | mov cl, al |
||
33 | |||
34 | ret |
||
35 | |||
36 | encoding_RRE: |
||
37 | |||
38 | DEBUGF 1,"RRE\n" |
||
39 | |||
40 | @@: |
||
41 | lea eax, [esi+5] |
||
42 | cmp [datapointer], eax |
||
43 | jae @f |
||
44 | call read_data.more |
||
45 | jmp @b |
||
46 | @@: |
||
47 | |||
48 | lodsd |
||
49 | bswap eax |
||
50 | mov [subrectangles], eax |
||
51 | |||
52 | call pixel_to_24bpp |
||
53 | |||
54 | movzx eax, [screen.width] |
||
55 | mul [rectangle.y] ; [screen.width]*[rectangle.y] |
||
56 | add eax, [rectangle.x] ; [screen.width]*[rectangle.y]+[rectangle.x] |
||
57 | lea edi, [framebuffer_data+eax*3] ; edi = framebuffer_data+([screen.width]*[rectangle.y]+[rectangle.x])*3 |
||
58 | |||
59 | movzx eax, [screen.width] |
||
60 | sub eax, [rectangle.width] |
||
61 | lea ebp, [eax*3] ; ebp = ([screen.width]-[rectangle.width])*3 |
||
62 | |||
63 | push edi |
||
64 | mov eax, ecx |
||
65 | mov edx, [rectangle.height] |
||
66 | .lineloop: |
||
67 | mov ecx, [rectangle.width] |
||
68 | .pixelloop: |
||
69 | stosw |
||
70 | rol eax, 16 |
||
71 | stosb |
||
72 | rol eax, 16 |
||
73 | dec ecx |
||
74 | jnz .pixelloop |
||
75 | add edi, ebp |
||
76 | dec edx |
||
77 | jnz .lineloop |
||
78 | pop edi |
||
79 | |||
80 | .subrectangle: |
||
81 | @@: |
||
82 | lea eax, [esi+9] |
||
83 | cmp [datapointer], eax |
||
84 | jae @f |
||
85 | call read_data.more |
||
86 | jmp @b |
||
87 | @@: |
||
88 | |||
89 | call pixel_to_24bpp |
||
90 | |||
91 | xor eax, eax |
||
92 | lodsw |
||
93 | xchg al, ah |
||
94 | mov [subrectangle.x], eax |
||
95 | lodsw |
||
96 | xchg al, ah |
||
97 | mov [subrectangle.y], eax |
||
98 | lodsw |
||
99 | xchg al, ah |
||
100 | mov [subrectangle.height], eax |
||
101 | lodsw |
||
102 | xchg al, ah |
||
103 | mov [subrectangle.width], eax |
||
104 | |||
105 | push edi |
||
106 | mov eax, [rectangle.width] |
||
107 | mul [subrectangle.y] |
||
108 | add eax, [subrectangle.x] |
||
109 | add edi, eax |
||
110 | |||
111 | mov eax, ecx |
||
112 | mov edx, [subrectangle.height] |
||
113 | .lineloop2: |
||
114 | mov ecx, [subrectangle.width] |
||
115 | .pixelloop2: |
||
116 | stosw |
||
117 | rol eax, 16 |
||
118 | stosb |
||
119 | rol eax, 16 |
||
120 | dec ecx |
||
121 | jnz .pixelloop2 |
||
122 | add edi, ebp |
||
123 | dec edx |
||
124 | jnz .lineloop2 |
||
125 | |||
126 | pop edi |
||
127 | |||
128 | dec [subrectangles] |
||
129 | jnz .subrectangle |
||
130 | jmp next_rectangle |