Rev 7017 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7017 | Rev 8850 | ||
---|---|---|---|
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ;; ;; |
2 | ;; ;; |
3 | ;; Copyright (C) KolibriOS team 2010-2015. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2010-2015. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;; VNC client for KolibriOS ;; |
6 | ;; VNC client for KolibriOS ;; |
7 | ;; ;; |
7 | ;; ;; |
8 | ;; Written by hidnplayr@kolibrios.org ;; |
8 | ;; Written by hidnplayr@kolibrios.org ;; |
9 | ;; ;; |
9 | ;; ;; |
10 | ;; GNU GENERAL PUBLIC LICENSE ;; |
10 | ;; GNU GENERAL PUBLIC LICENSE ;; |
11 | ;; Version 2, June 1991 ;; |
11 | ;; Version 2, June 1991 ;; |
12 | ;; ;; |
12 | ;; ;; |
13 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
13 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
14 | 14 | ||
15 | format binary as "" |
15 | format binary as "" |
16 | 16 | ||
17 | __DEBUG__ = 1 |
17 | __DEBUG__ = 1 |
18 | __DEBUG_LEVEL__ = 2 |
18 | __DEBUG_LEVEL__ = 2 |
19 | 19 | ||
20 | BITS_PER_PIXEL = 32 ; 8, 16, 24 or 32 |
20 | BITS_PER_PIXEL = 32 ; 8, 16, 24 or 32 |
21 | SERVERADDRLEN = 4096 |
21 | SERVERADDRLEN = 4096 |
22 | 22 | ||
23 | use32 |
23 | use32 |
24 | 24 | ||
25 | org 0x0 |
25 | org 0x0 |
26 | 26 | ||
27 | db "MENUET01" ; 8 byte id |
27 | db "MENUET01" ; 8 byte id |
28 | dd 0x01 ; header version |
28 | dd 0x01 ; header version |
29 | dd START ; start of code |
29 | dd START ; start of code |
30 | dd I_END ; size of image |
30 | dd I_END ; size of image |
31 | dd IM_END ; memory for app |
31 | dd IM_END ; memory for app |
32 | dd IM_END ; esp |
32 | dd IM_END ; esp |
33 | dd serveraddr, 0x0 ; I_Param , I_Path |
33 | dd serveraddr, 0x0 ; I_Param , I_Path |
34 | 34 | ||
35 | include "../../macros.inc" |
35 | include "../../macros.inc" |
36 | include "../../debug-fdo.inc" |
36 | include "../../debug-fdo.inc" |
37 | include "../../proc32.inc" |
37 | include "../../proc32.inc" |
38 | include "../../dll.inc" |
38 | include "../../dll.inc" |
39 | include "../../struct.inc" |
39 | include "../../struct.inc" |
40 | include "../../develop/libraries/box_lib/trunk/box_lib.mac" |
40 | include "../../develop/libraries/box_lib/trunk/box_lib.mac" |
41 | include "../../network.inc" |
41 | include "../../network.inc" |
42 | 42 | ||
43 | struct PixelFormat |
43 | struct PixelFormat |
44 | bpp db ? |
44 | bpp db ? |
45 | depth db ? |
45 | depth db ? |
46 | big_endian db ? |
46 | big_endian db ? |
47 | true_color db ? |
47 | true_color db ? |
48 | red_max dw ? |
48 | red_max dw ? |
49 | green_max dw ? |
49 | green_max dw ? |
50 | blue_max dw ? |
50 | blue_max dw ? |
51 | red_shift db ? |
51 | red_shift db ? |
52 | green_shift db ? |
52 | green_shift db ? |
53 | blue_shift db ? |
53 | blue_shift db ? |
54 | padding rb 3 |
54 | padding rb 3 |
55 | ends |
55 | ends |
56 | 56 | ||
57 | struct ServerInit |
57 | struct ServerInit |
58 | width dw ? |
58 | width dw ? |
59 | height dw ? |
59 | height dw ? |
60 | pixelformat PixelFormat |
60 | pixelformat PixelFormat |
61 | name_length dd ? |
61 | name_length dd ? |
62 | name db ? |
62 | name db ? |
63 | ends |
63 | ends |
64 | 64 | ||
65 | xpos = 4 |
65 | xpos = 4 |
66 | ypos = 21 |
66 | ypos = 21 |
67 | 67 | ||
68 | TIMEOUT = 5 ; timeout in seconds |
68 | TIMEOUT = 5 ; timeout in seconds |
69 | 69 | ||
70 | RECEIVE_BUFFER_SIZE = 8*1024*1024 ; 8 Mib |
70 | RECEIVE_BUFFER_SIZE = 8*1024*1024 ; 8 Mib |
71 | 71 | ||
72 | STATUS_CONNECT = 0 |
72 | STATUS_CONNECT = 0 |
73 | STATUS_CONNECTING = 1 |
73 | STATUS_CONNECTING = 1 |
74 | STATUS_REQ_LOGIN = 2 |
74 | STATUS_REQ_LOGIN = 2 |
75 | STATUS_LOGIN = 3 |
75 | STATUS_LOGIN = 3 |
76 | STATUS_CONNECTED = 4 |
76 | STATUS_CONNECTED = 4 |
77 | STATUS_CLOSED = 5 |
77 | STATUS_CLOSED = 5 |
78 | 78 | ||
79 | STATUS_DISCONNECTED = 10 |
79 | STATUS_DISCONNECTED = 10 |
80 | STATUS_DNS_ERR = 11 |
80 | STATUS_DNS_ERR = 11 |
81 | STATUS_SOCK_ERR = 12 |
81 | STATUS_SOCK_ERR = 12 |
82 | STATUS_CONNECT_ERR = 13 |
82 | STATUS_CONNECT_ERR = 13 |
83 | STATUS_PROTO_ERR = 14 |
83 | STATUS_PROTO_ERR = 14 |
84 | STATUS_SECURITY_ERR = 15 |
84 | STATUS_SECURITY_ERR = 15 |
85 | STATUS_LIB_ERR = 16 |
85 | STATUS_LIB_ERR = 16 |
86 | STATUS_THREAD_ERR = 17 |
86 | STATUS_THREAD_ERR = 17 |
87 | STATUS_LOGIN_FAILED = 18 |
87 | STATUS_LOGIN_FAILED = 18 |
88 | STATUS_SECURITY_ERR_C = 19 |
88 | STATUS_SECURITY_ERR_C = 19 |
89 | 89 | ||
90 | WORK_FRAMEBUFFER = 1 shl 0 |
90 | WORK_FRAMEBUFFER = 1 shl 0 |
91 | WORK_CURSOR = 1 shl 1 |
91 | WORK_CURSOR = 1 shl 1 |
92 | WORK_GUI = 1 shl 2 |
92 | WORK_GUI = 1 shl 2 |
93 | 93 | ||
94 | BYTES_PER_PIXEL = (BITS_PER_PIXEL + 7) / 8 |
94 | BYTES_PER_PIXEL = (BITS_PER_PIXEL + 7) / 8 |
95 | 95 | ||
96 | if BITS_PER_PIXEL = 32 |
96 | if BITS_PER_PIXEL = 32 |
97 | BYTES_PER_CPIXEL= 3 |
97 | BYTES_PER_CPIXEL= 3 |
98 | else |
98 | else |
99 | BYTES_PER_CPIXEL= BYTES_PER_PIXEL |
99 | BYTES_PER_CPIXEL= BYTES_PER_PIXEL |
100 | end if |
100 | end if |
101 | 101 | ||
102 | include "keymap.inc" |
102 | include "keymap.inc" |
103 | include "gui.inc" |
103 | include "gui.inc" |
104 | include "network.inc" |
104 | include "network.inc" |
105 | include "raw.inc" |
105 | include "raw.inc" |
106 | include "copyrect.inc" |
106 | include "copyrect.inc" |
107 | include "rre.inc" |
107 | include "rre.inc" |
108 | include "trle.inc" |
108 | include "trle.inc" |
109 | include "zrle.inc" |
109 | include "zrle.inc" |
110 | include "cursor.inc" |
110 | include "cursor.inc" |
111 | include "des.inc" |
111 | include "des.inc" |
112 | 112 | ||
113 | 113 | ||
114 | if BITS_PER_PIXEL = 8 |
114 | if BITS_PER_PIXEL = 8 |
115 | create_lut: |
115 | create_lut: |
116 | mov edi, lut_8bpp ; 332 format |
116 | mov edi, lut_8bpp ; 332 format |
117 | xor eax, eax |
117 | xor eax, eax |
118 | call green |
118 | call green |
119 | add eax, 0x240000 |
119 | add eax, 0x240000 |
120 | call green |
120 | call green |
121 | add eax, 0x250000 |
121 | add eax, 0x250000 |
122 | call green |
122 | call green |
123 | add eax, 0x240000 |
123 | add eax, 0x240000 |
124 | call green |
124 | call green |
125 | add eax, 0x250000 |
125 | add eax, 0x250000 |
126 | call green |
126 | call green |
127 | add eax, 0x240000 |
127 | add eax, 0x240000 |
128 | call green |
128 | call green |
129 | add eax, 0x250000 |
129 | add eax, 0x250000 |
130 | call green |
130 | call green |
131 | add eax, 0x240000 |
131 | add eax, 0x240000 |
132 | call green |
132 | call green |
133 | ret |
133 | ret |
134 | 134 | ||
135 | green: |
135 | green: |
136 | mov ah, 0 |
136 | mov ah, 0 |
137 | call blue |
137 | call blue |
138 | mov ah, 36 |
138 | mov ah, 36 |
139 | call blue |
139 | call blue |
140 | add ah, 37 |
140 | add ah, 37 |
141 | call blue |
141 | call blue |
142 | add ah, 36 |
142 | add ah, 36 |
143 | call blue |
143 | call blue |
144 | add ah, 37 |
144 | add ah, 37 |
145 | call blue |
145 | call blue |
146 | add ah, 36 |
146 | add ah, 36 |
147 | call blue |
147 | call blue |
148 | add ah, 37 |
148 | add ah, 37 |
149 | call blue |
149 | call blue |
150 | add ah, 36 |
150 | add ah, 36 |
151 | call blue |
151 | call blue |
152 | ret |
152 | ret |
153 | 153 | ||
154 | blue: |
154 | blue: |
155 | mov al, 0 |
155 | mov al, 0 |
156 | stosd |
156 | stosd |
157 | mov al, 85 |
157 | mov al, 85 |
158 | stosd |
158 | stosd |
159 | mov al, 170 |
159 | mov al, 170 |
160 | stosd |
160 | stosd |
161 | mov al, 255 |
161 | mov al, 255 |
162 | stosd |
162 | stosd |
163 | ret |
163 | ret |
164 | end if |
164 | end if |
165 | 165 | ||
166 | 166 | ||
167 | START: |
167 | START: |
168 | 168 | ||
169 | mcall 68, 11 ; init heap |
169 | mcall 68, 11 ; init heap |
170 | 170 | ||
171 | ; Load libraries |
171 | ; Load libraries |
172 | stdcall dll.Load, @IMPORT |
172 | stdcall dll.Load, @IMPORT |
173 | test eax, eax |
173 | test eax, eax |
174 | jz @f |
174 | jz @f |
175 | mov [status], STATUS_LIB_ERR |
175 | mov [status], STATUS_LIB_ERR |
176 | jmp draw_gui.first_time |
176 | jmp draw_gui.first_time |
177 | @@: |
177 | @@: |
178 | 178 | ||
179 | ; When using 8BPP, create lookup table |
179 | ; When using 8BPP, create lookup table |
180 | if BITS_PER_PIXEL = 8 |
180 | if BITS_PER_PIXEL = 8 |
181 | call create_lut |
181 | call create_lut |
182 | end if |
182 | end if |
183 | 183 | ||
184 | ; Check if we got a server address through parameters |
184 | ; Check if we got a server address through parameters |
185 | cmp byte[serveraddr], 0 |
185 | cmp byte[serveraddr], 0 |
186 | je @f |
186 | je @f |
187 | xor al, al |
187 | xor al, al |
188 | mov edi, serveraddr |
188 | mov edi, serveraddr |
189 | mov ecx, SERVERADDRLEN |
189 | mov ecx, SERVERADDRLEN |
190 | repne scasb |
190 | repne scasb |
191 | sub edi, serveraddr+1 |
191 | sub edi, serveraddr+1 |
192 | mov [URLbox.size], edi |
192 | mov [URLbox.size], edi |
193 | mov [URLbox.pos], edi |
193 | mov [URLbox.pos], edi |
194 | call open_connection |
194 | call open_connection |
195 | @@: |
195 | @@: |
196 | 196 | ||
197 | ; Present the user with the GUI and wait for network connection |
197 | ; Present the user with the GUI and wait for network connection |
198 | jmp draw_gui.first_time |
198 | jmp draw_gui.first_time |
199 | 199 | ||
200 | ; Create main window |
200 | ; Create main window |
201 | connected: |
201 | connected: |
202 | mcall 71, 1, name ; reset window caption (add server name) |
202 | mcall 71, 1, name ; reset window caption (add server name) |
203 | 203 | ||
204 | mov edx, dword[screen] |
204 | mov edx, dword[screen] |
205 | movzx esi, dx |
205 | movzx esi, dx |
206 | shr edx, 16 |
206 | shr edx, 16 |
207 | add edx, 2*xpos |
207 | add edx, 2*xpos |
208 | add esi, ypos+xpos |
208 | add esi, ypos+xpos |
209 | mcall 67, 10, 10 ; resize the window |
209 | mcall 67, 10, 10 ; resize the window |
210 | 210 | ||
211 | mcall 40, EVM_CURSOR_FILTER + EVM_MOUSE_FILTER + EVM_MOUSE + EVM_KEY + EVM_REDRAW + EVM_BUTTON |
211 | mcall 40, EVM_CURSOR_FILTER + EVM_MOUSE_FILTER + EVM_MOUSE + EVM_KEY + EVM_REDRAW + EVM_BUTTON |
212 | 212 | ||
213 | mcall 66, 1, 1 ; Switch keyboard to scancode mode |
213 | mcall 66, 1, 1 ; Switch keyboard to scancode mode |
214 | 214 | ||
215 | call generate_keymap |
215 | call generate_keymap |
216 | 216 | ||
217 | redraw: |
217 | redraw: |
218 | mcall 12, 1 |
218 | mcall 12, 1 |
219 | 219 | ||
220 | mov ebx, dword[screen] |
220 | mov ebx, dword[screen] |
221 | movzx ecx, bx |
221 | movzx ecx, bx |
222 | shr ebx, 16 |
222 | shr ebx, 16 |
223 | mov edx, 0x74ffffff |
223 | mov edx, 0x74ffffff |
224 | mov edi, name |
224 | mov edi, name |
225 | mcall 0 ; draw window |
225 | mcall 0 ; draw window |
226 | 226 | ||
227 | mcall 12, 2 |
227 | mcall 12, 2 |
228 | 228 | ||
229 | draw_framebuffer: |
229 | draw_framebuffer: |
230 | DEBUGF 1, "Drawing framebuffer\n" |
230 | DEBUGF 1, "Drawing framebuffer\n" |
231 | mcall 7, framebuffer, dword[screen], 0 |
231 | mcall 7, framebuffer, dword[screen], 0 |
232 | and [work], not WORK_FRAMEBUFFER |
232 | and [work], not WORK_FRAMEBUFFER |
233 | 233 | ||
234 | mainloop: |
234 | mainloop: |
235 | cmp [status], STATUS_CONNECTED |
235 | cmp [status], STATUS_CONNECTED |
236 | jne draw_gui |
236 | jne draw_gui |
237 | test [work], WORK_FRAMEBUFFER |
237 | test [work], WORK_FRAMEBUFFER |
238 | jnz draw_framebuffer |
238 | jnz draw_framebuffer |
239 | test [work], WORK_CURSOR |
239 | test [work], WORK_CURSOR |
240 | jnz update_cursor |
240 | jnz update_cursor |
241 | 241 | ||
242 | mcall 23, 10 ; Check for event with 0,1s timeout |
242 | mcall 23, 10 ; Check for event with 0,1s timeout |
243 | 243 | ||
244 | dec eax |
244 | dec eax |
245 | jz redraw |
245 | jz redraw |
246 | dec eax |
246 | dec eax |
247 | jz key |
247 | jz key |
248 | dec eax |
248 | dec eax |
249 | jz button |
249 | jz button |
250 | sub eax, 3 |
250 | sub eax, 3 |
251 | jz mouse |
251 | jz mouse |
252 | jmp mainloop |
252 | jmp mainloop |
253 | 253 | ||
254 | key: |
254 | key: |
255 | mcall 66, 3 |
255 | mcall 66, 3 |
256 | mov ebx, eax ; get modifier keys |
256 | mov ebx, eax ; get modifier keys |
257 | 257 | ||
258 | mcall 2 ; get key scancode |
258 | mcall 2 ; get key scancode |
259 | cmp ah, 224 ; extended keycode? |
259 | cmp ah, 224 ; extended keycode? |
260 | je .extended |
260 | je .extended |
261 | 261 | ||
262 | xor al, al |
262 | xor al, al |
263 | test ah, 0x80 ; key up? |
263 | test ah, 0x80 ; key up? |
264 | jnz @f |
264 | jnz @f |
265 | inc al |
265 | inc al |
266 | and ah, 0x7f |
266 | and ah, 0x7f |
267 | @@: |
267 | @@: |
268 | mov byte[KeyEvent.down], al |
268 | mov byte[KeyEvent.down], al |
269 | 269 | ||
270 | movzx eax, ah |
270 | movzx eax, ah |
271 | 271 | ||
272 | test ebx, 100000b ; alt? |
272 | test ebx, 100000b ; alt? |
273 | jz .no_alt |
273 | jz .no_alt |
274 | mov ax, [keymap_alt+eax*2] |
274 | mov ax, [keymap_alt+eax*2] |
275 | jmp .key |
275 | jmp .key |
276 | .no_alt: |
276 | .no_alt: |
277 | 277 | ||
278 | test ebx, 11b ; shift? |
278 | test ebx, 11b ; shift? |
279 | jz .no_shift |
279 | jz .no_shift |
280 | mov ax, [keymap_shift+eax*2] |
280 | mov ax, [keymap_shift+eax*2] |
281 | jmp .key |
281 | jmp .key |
282 | .no_shift: |
282 | .no_shift: |
283 | 283 | ||
284 | test ebx, 10000000b ; numlock ? |
284 | test ebx, 10000000b ; numlock ? |
285 | jz .no_numlock |
285 | jz .no_numlock |
286 | cmp al, 71 |
286 | cmp al, 71 |
287 | jb .no_numlock |
287 | jb .no_numlock |
288 | cmp al, 83 |
288 | cmp al, 83 |
289 | ja .no_numlock |
289 | ja .no_numlock |
290 | mov ah, [keymap_numlock+eax-71] |
290 | mov ah, [keymap_numlock+eax-71] |
291 | xor al, al |
291 | xor al, al |
292 | jmp .key |
292 | jmp .key |
293 | 293 | ||
294 | .extended: ; extended keys always use regular keymap |
294 | .extended: ; extended keys always use regular keymap |
295 | mcall 2 |
295 | mcall 2 |
296 | shr eax, 8 |
296 | shr eax, 8 |
297 | jz mainloop |
297 | jz mainloop |
298 | 298 | ||
299 | xor ah, ah |
299 | xor ah, ah |
300 | test al, 0x80 ; key up? |
300 | test al, 0x80 ; key up? |
301 | jnz @f |
301 | jnz @f |
302 | inc ah |
302 | inc ah |
303 | @@: |
303 | @@: |
304 | mov byte[KeyEvent.down], ah |
304 | mov byte[KeyEvent.down], ah |
305 | and ax, 0x007f |
305 | and ax, 0x007f |
306 | .no_numlock: |
306 | .no_numlock: |
307 | mov ax, [keymap+eax*2] |
307 | mov ax, [keymap+eax*2] |
308 | .key: |
308 | .key: |
309 | test ax, ax |
309 | test ax, ax |
310 | jz mainloop |
310 | jz mainloop |
311 | mov word[KeyEvent.key+2], ax |
311 | mov word[KeyEvent.key+2], ax |
312 | DEBUGF 1, "Sending key: 0x%x\n", ax |
312 | DEBUGF 1, "Sending key: 0x%x\n", ax |
313 | mcall send, [socketnum], KeyEvent, 8, 0 |
313 | mcall send, [socketnum], KeyEvent, 8, 0 |
314 | jmp mainloop |
314 | jmp mainloop |
315 | 315 | ||
316 | 316 | ||
317 | 317 | ||
318 | mouse: |
318 | mouse: |
319 | ; DEBUGF 1, "Sending pointer event\n" |
319 | ; DEBUGF 1, "Sending pointer event\n" |
320 | 320 | ||
321 | mcall 37, 1 ; get mouse pos |
321 | mcall 37, 1 ; get mouse pos |
322 | bswap eax |
322 | bswap eax |
323 | mov [PointerEvent.x], ax |
323 | mov [PointerEvent.x], ax |
324 | shr eax, 16 |
324 | shr eax, 16 |
325 | mov [PointerEvent.y], ax |
325 | mov [PointerEvent.y], ax |
326 | 326 | ||
327 | mcall 37, 2 ; get mouse buttons |
327 | mcall 37, 2 ; get mouse buttons |
328 | test al, 00000010b ; test if right button was pressed (bit 1 in kolibri) |
328 | test al, 00000010b ; test if right button was pressed (bit 1 in kolibri) |
329 | jz @f |
329 | jz @f |
330 | 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 |
330 | 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 |
331 | @@: |
331 | @@: |
332 | mov [PointerEvent.mask], al |
332 | mov [PointerEvent.mask], al |
333 | 333 | ||
334 | mcall send, [socketnum], PointerEvent, 6, 0 |
334 | mcall send, [socketnum], PointerEvent, 6, 0 |
335 | jmp mainloop |
335 | jmp mainloop |
336 | 336 | ||
337 | button: |
337 | button: |
338 | mcall 17 ; get id |
338 | mcall 17 ; get id |
339 | mov [status], STATUS_CLOSED |
339 | mov [status], STATUS_CLOSED |
340 | mcall close, [socketnum] |
340 | mcall close, [socketnum] |
341 | mcall -1 |
341 | mcall -1 |
342 | 342 | ||
343 | 343 | ||
344 | update_cursor: |
344 | update_cursor: |
345 | 345 | ||
346 | ; load cursor |
346 | ; load cursor |
347 | mov dx, word[cursor.y] |
347 | mov dx, word[cursor.y] |
348 | shl edx, 16 |
348 | shl edx, 16 |
349 | mov dx, 2 |
349 | mov dx, 2 |
350 | mcall 37, 4, cursor.image |
350 | mcall 37, 4, cursor.image |
351 | test eax, eax |
351 | test eax, eax |
352 | jz .fail |
352 | jz .fail |
353 | 353 | ||
354 | ; set cursor |
354 | ; set cursor |
355 | mov ecx, eax |
355 | mov ecx, eax |
356 | mcall 37, 5 |
356 | mcall 37, 5 |
357 | 357 | ||
358 | ; delete previously set cursor |
358 | ; delete previously set cursor |
359 | mov ecx, eax |
359 | mov ecx, eax |
360 | mcall 37, 6 |
360 | mcall 37, 6 |
361 | 361 | ||
362 | .fail: |
362 | .fail: |
363 | and [work], not WORK_CURSOR |
363 | and [work], not WORK_CURSOR |
364 | jmp mainloop |
364 | jmp mainloop |
365 | 365 | ||
366 | 366 | ||
367 | ; DATA AREA |
367 | ; DATA AREA |
368 | 368 | ||
369 | include_debug_strings |
369 | include_debug_strings |
370 | 370 | ||
371 | keymap_numlock: |
371 | keymap_numlock: |
372 | db '7', '8', '9', '-' |
372 | db '7', '8', '9', '-' |
373 | db '4', '5', '6', '+' |
373 | db '4', '5', '6', '+' |
374 | db '1', '2', '3' |
374 | db '1', '2', '3' |
375 | db '0', '.' |
375 | db '0', '.' |
376 | 376 | ||
377 | HandShake db "RFB 003.003", 10 |
377 | HandShake db "RFB 003.003", 10 |
378 | 378 | ||
379 | ClientInit db 0 ; not shared |
379 | ClientInit db 0 ; not shared |
380 | 380 | ||
381 | if BITS_PER_PIXEL = 32 |
381 | if BITS_PER_PIXEL = 32 |
382 | 382 | ||
383 | SetPixelFormat db 0 ; setPixelformat |
383 | SetPixelFormat db 0 ; setPixelformat |
384 | db 0, 0, 0 ; padding |
384 | db 0, 0, 0 ; padding |
385 | .bpp db 32 ; bits per pixel |
385 | .bpp db 32 ; bits per pixel |
386 | .depth db 24 ; depth |
386 | .depth db 24 ; depth |
387 | .big_endian db 0 ; big-endian flag |
387 | .big_endian db 0 ; big-endian flag |
388 | .true_color db 1 ; true-colour flag |
388 | .true_color db 1 ; true-colour flag |
389 | .red_max db 0, 255 ; red-max |
389 | .red_max db 0, 255 ; red-max |
390 | .green_max db 0, 255 ; green-max |
390 | .green_max db 0, 255 ; green-max |
391 | .blue_max db 0, 255 ; blue-max |
391 | .blue_max db 0, 255 ; blue-max |
392 | .red_shift db 16 ; red-shift |
392 | .red_shift db 16 ; red-shift |
393 | .green_shift db 8 ; green-shift |
393 | .green_shift db 8 ; green-shift |
394 | .blue_shift db 0 ; blue-shift |
394 | .blue_shift db 0 ; blue-shift |
395 | db 0, 0, 0 ; padding |
395 | db 0, 0, 0 ; padding |
396 | 396 | ||
397 | else if BITS_PER_PIXEL = 24 |
397 | else if BITS_PER_PIXEL = 24 |
398 | 398 | ||
399 | SetPixelFormat db 0 ; setPixelformat |
399 | SetPixelFormat db 0 ; setPixelformat |
400 | db 0, 0, 0 ; padding |
400 | db 0, 0, 0 ; padding |
401 | .bpp db 24 ; bits per pixel |
401 | .bpp db 24 ; bits per pixel |
402 | .depth db 24 ; depth |
402 | .depth db 24 ; depth |
403 | .big_endian db 0 ; big-endian flag |
403 | .big_endian db 0 ; big-endian flag |
404 | .true_color db 1 ; true-colour flag |
404 | .true_color db 1 ; true-colour flag |
405 | .red_max db 0, 255 ; red-max |
405 | .red_max db 0, 255 ; red-max |
406 | .green_max db 0, 255 ; green-max |
406 | .green_max db 0, 255 ; green-max |
407 | .blue_max db 0, 255 ; blue-max |
407 | .blue_max db 0, 255 ; blue-max |
408 | .red_shift db 16 ; red-shift |
408 | .red_shift db 16 ; red-shift |
409 | .green_shift db 8 ; green-shift |
409 | .green_shift db 8 ; green-shift |
410 | .blue_shift db 0 ; blue-shift |
410 | .blue_shift db 0 ; blue-shift |
411 | db 0, 0, 0 ; padding |
411 | db 0, 0, 0 ; padding |
412 | 412 | ||
413 | else if BITS_PER_PIXEL = 16 |
413 | else if BITS_PER_PIXEL = 16 |
414 | 414 | ||
415 | SetPixelFormat db 0 ; setPixelformat |
415 | SetPixelFormat db 0 ; setPixelformat |
416 | db 0, 0, 0 ; padding |
416 | db 0, 0, 0 ; padding |
417 | .bpp db 16 ; bits per pixel |
417 | .bpp db 16 ; bits per pixel |
418 | .depth db 16 ; depth |
418 | .depth db 16 ; depth |
419 | .big_endian db 0 ; big-endian flag |
419 | .big_endian db 0 ; big-endian flag |
420 | .true_color db 1 ; true-colour flag |
420 | .true_color db 1 ; true-colour flag |
421 | .red_max db 0, 31 ; red-max |
421 | .red_max db 0, 31 ; red-max |
422 | .green_max db 0, 63 ; green-max |
422 | .green_max db 0, 63 ; green-max |
423 | .blue_max db 0, 31 ; blue-max |
423 | .blue_max db 0, 31 ; blue-max |
424 | .red_shift db 11 ; red-shift |
424 | .red_shift db 11 ; red-shift |
425 | .green_shift db 5 ; green-shift |
425 | .green_shift db 5 ; green-shift |
426 | .blue_shift db 0 ; blue-shift |
426 | .blue_shift db 0 ; blue-shift |
427 | db 0, 0, 0 ; padding |
427 | db 0, 0, 0 ; padding |
428 | 428 | ||
429 | else if BITS_PER_PIXEL = 8 |
429 | else if BITS_PER_PIXEL = 8 |
430 | 430 | ||
431 | SetPixelFormat db 0 ; setPixelformat |
431 | SetPixelFormat db 0 ; setPixelformat |
432 | db 0, 0, 0 ; padding |
432 | db 0, 0, 0 ; padding |
433 | .bpp db 8 ; bits per pixel |
433 | .bpp db 8 ; bits per pixel |
434 | .depth db 8 ; depth |
434 | .depth db 8 ; depth |
435 | .big_endian db 0 ; big-endian flag |
435 | .big_endian db 0 ; big-endian flag |
436 | .true_color db 1 ; true-colour flag |
436 | .true_color db 1 ; true-colour flag |
437 | .red_max db 0, 7 ; red-max |
437 | .red_max db 0, 7 ; red-max |
438 | .green_max db 0, 7 ; green-max |
438 | .green_max db 0, 7 ; green-max |
439 | .blue_max db 0, 3 ; blue-max |
439 | .blue_max db 0, 3 ; blue-max |
440 | .red_shift db 5 ; red-shift |
440 | .red_shift db 5 ; red-shift |
441 | .green_shift db 2 ; green-shift |
441 | .green_shift db 2 ; green-shift |
442 | .blue_shift db 0 ; blue-shift |
442 | .blue_shift db 0 ; blue-shift |
443 | db 0, 0, 0 ; padding |
443 | db 0, 0, 0 ; padding |
444 | 444 | ||
445 | end if |
445 | end if |
446 | 446 | ||
447 | SetEncodings db 2 ; setEncodings |
447 | SetEncodings db 2 ; setEncodings |
448 | db 0 ; padding |
448 | db 0 ; padding |
449 | db 0, 5 ; number of encodings |
449 | db 0, 5 ; number of encodings |
450 | ; db 0, 0, 0, 16 ; ZRLE |
450 | ; db 0, 0, 0, 16 ; ZRLE |
451 | db 0, 0, 0, 15 ; TRLE |
451 | db 0, 0, 0, 15 ; TRLE |
452 | db 0, 0, 0, 2 ; RRE |
452 | db 0, 0, 0, 2 ; RRE |
453 | db 0, 0, 0, 1 ; Copyrect encoding |
453 | db 0, 0, 0, 1 ; Copyrect encoding |
454 | db 0xff, 0xff, 0xff, 0x11 ; Cursor pseudo encoding |
454 | db 0xff, 0xff, 0xff, 0x11 ; Cursor pseudo encoding |
455 | db 0, 0, 0, 0 ; raw encoding |
455 | db 0, 0, 0, 0 ; raw encoding |
456 | .length = $ - SetEncodings |
456 | .length = $ - SetEncodings |
457 | 457 | ||
458 | FramebufferUpdateRequest db 3 |
458 | FramebufferUpdateRequest db 3 |
459 | .inc db 0 ; incremental |
459 | .inc db 0 ; incremental |
460 | .x dw 0 |
460 | .x dw 0 |
461 | .y dw 0 |
461 | .y dw 0 |
462 | .width dw 0 |
462 | .width dw 0 |
463 | .height dw 0 |
463 | .height dw 0 |
464 | 464 | ||
465 | KeyEvent db 4 ; keyevent |
465 | KeyEvent db 4 ; keyevent |
466 | .down db 0 ; down-flag |
466 | .down db 0 ; down-flag |
467 | dw 0 ; padding |
467 | dw 0 ; padding |
468 | .key dd 0 ; key |
468 | .key dd 0 ; key |
469 | 469 | ||
470 | PointerEvent db 5 ; pointerevent |
470 | PointerEvent db 5 ; pointerevent |
471 | .mask db 0 ; button-mask |
471 | .mask db 0 ; button-mask |
472 | .x dw 0 ; x-position |
472 | .x dw 0 ; x-position |
473 | .y dw 0 ; y-position |
473 | .y dw 0 ; y-position |
474 | 474 | ||
475 | 475 | ||
476 | sockaddr1: |
476 | sockaddr1: |
477 | dw AF_INET4 |
477 | dw AF_INET4 |
478 | .port dw 0x0c17 ; 5900 |
478 | .port dw 0x0c17 ; 5900 |
479 | .ip dd 0 |
479 | .ip dd 0 |
480 | rb 10 |
480 | rb 10 |
481 | 481 | ||
482 | beep db 0x85, 0x25, 0x85, 0x40, 0 |
482 | beep db 0x85, 0x25, 0x85, 0x40, 0 |
483 | 483 | ||
484 | status dd STATUS_CONNECT |
484 | status dd STATUS_CONNECT |
485 | work dd 0 |
485 | work dd 0 |
486 | mouse_dd dd 0 |
486 | mouse_dd dd 0 |
487 | thread_id dd 0 |
487 | thread_id dd 0 |
488 | 488 | ||
489 | deflate_buffer dd 0 |
489 | deflate_buffer dd 0 |
490 | deflate_length dd ? |
490 | deflate_length dd ? |
491 | deflate_str dd ? |
491 | deflate_str dd ? |
492 | 492 | ||
493 | URLbox edit_box 235, 70, 20, 0xffffff, 0x6f9480, 0, 0, 0x90000000, SERVERADDRLEN, serveraddr, mouse_dd, ed_focus, 0, 0 |
493 | URLbox edit_box 235, 70, 20, 0xffffff, 0x6f9480, 0, 0, 0x90000000, SERVERADDRLEN, serveraddr, mouse_dd, ed_focus, 0, 0 |
494 | USERbox edit_box 215, 90, 10, 0xffffff, 0x6f9480, 0, 0, 0x90000000, 127, username, mouse_dd, ed_focus, 0, 0 |
494 | USERbox edit_box 215, 90, 10, 0xffffff, 0x6f9480, 0, 0, 0x90000000, 127, username, mouse_dd, ed_focus, 0, 0 |
495 | PASSbox edit_box 215, 90, 35, 0xffffff, 0x6f9480, 0, 0, 0x10000000, 127, password, mouse_dd, ed_pass, 0, 0 |
495 | PASSbox edit_box 215, 90, 35, 0xffffff, 0x6f9480, 0, 0, 0x10000000, 127, password, mouse_dd, ed_pass, 0, 0 |
496 | 496 | ||
497 | serverstr db "server:" |
497 | serverstr db "server:" |
498 | userstr db "username:" |
498 | userstr db "username:" |
499 | passstr db "password:" |
499 | passstr db "password:" |
500 | connectstr db "Connect" |
500 | connectstr db "Connect" |
501 | loginstr db "Log in" |
501 | loginstr db "Log in" |
502 | cancelstr db "Cancel" |
502 | cancelstr db "Cancel" |
503 | okstr db "OK" |
503 | okstr db "OK" |
504 | okstr_e: |
504 | okstr_e: |
505 | 505 | ||
506 | sz_err_disconnected db "The server has closed the connection unexpectedly.", 0 |
506 | sz_err_disconnected db "The server has closed the connection unexpectedly.", 0 |
507 | sz_err_dns db "Could not resolve hostname.", 0 |
507 | sz_err_dns db "Could not resolve hostname.", 0 |
508 | sz_err_sock db "Could not open socket.", 0 |
508 | sz_err_sock db "Could not open socket.", 0 |
509 | sz_err_connect db "Could not connect to the server.", 0 |
509 | sz_err_connect db "Could not connect to the server.", 0 |
510 | sz_err_proto db "A protocol error has occured.", 0 |
510 | sz_err_proto db "A protocol error has occured.", 0 |
511 | sz_err_security db "An authentication problem has occured.", 0 |
511 | sz_err_security db "An authentication problem has occured.", 0 |
512 | sz_err_library db "Could not load needed libraries.", 0 |
512 | sz_err_library db "Could not load needed libraries.", 0 |
513 | sz_err_thread db "Could not create thread.", 0 |
513 | sz_err_thread db "Could not create thread.", 0 |
514 | sz_err_login_failed db "Login failed.", 0 |
514 | sz_err_login_failed db "Login failed.", 0 |
515 | 515 | ||
516 | err_msg dd sz_err_disconnected |
516 | err_msg dd sz_err_disconnected |
517 | dd sz_err_dns |
517 | dd sz_err_dns |
518 | dd sz_err_sock |
518 | dd sz_err_sock |
519 | dd sz_err_connect |
519 | dd sz_err_connect |
520 | dd sz_err_proto |
520 | dd sz_err_proto |
521 | dd sz_err_security |
521 | dd sz_err_security |
522 | dd sz_err_library |
522 | dd sz_err_library |
523 | dd sz_err_thread |
523 | dd sz_err_thread |
524 | dd sz_err_login_failed |
524 | dd sz_err_login_failed |
525 | dd sz_err_security_c |
525 | dd sz_err_security_c |
526 | 526 | ||
527 | ; import |
527 | ; import |
528 | align 4 |
528 | align 4 |
529 | @IMPORT: |
529 | @IMPORT: |
530 | 530 | ||
531 | library network, "network.obj",\ |
531 | library network, "network.obj",\ |
532 | box_lib, "box_lib.obj",\ |
532 | box_lib, "box_lib.obj",\ |
533 | archiver, "archiver.obj" |
533 | archiver, "archiver.obj" |
534 | 534 | ||
535 | import network,\ |
535 | import network,\ |
536 | getaddrinfo, "getaddrinfo", \ |
536 | getaddrinfo, "getaddrinfo", \ |
537 | freeaddrinfo, "freeaddrinfo", \ |
537 | freeaddrinfo, "freeaddrinfo", \ |
538 | inet_ntoa, "inet_ntoa" |
538 | inet_ntoa, "inet_ntoa" |
539 | 539 | ||
540 | import box_lib,\ |
540 | import box_lib,\ |
541 | edit_box_draw, "edit_box",\ |
541 | edit_box_draw, "edit_box",\ |
542 | edit_box_key, "edit_box_key",\ |
542 | edit_box_key, "edit_box_key",\ |
543 | edit_box_mouse, "edit_box_mouse",\ |
543 | edit_box_mouse, "edit_box_mouse",\ |
544 | scrollbar_v_draw, "scrollbar_v_draw",\ |
544 | scrollbar_v_draw, "scrollbar_v_draw",\ |
545 | scrollbar_v_mouse, "scrollbar_v_mouse",\ |
545 | scrollbar_v_mouse, "scrollbar_v_mouse",\ |
546 | scrollbar_h_draw, "scrollbar_h_draw",\ |
546 | scrollbar_h_draw, "scrollbar_h_draw",\ |
547 | scrollbar_h_mouse, "scrollbar_h_mouse" |
547 | scrollbar_h_mouse, "scrollbar_h_mouse" |
548 | 548 | ||
549 | import archiver,\ |
549 | import archiver,\ |
550 | deflate_unpack2, "deflate_unpack2" |
550 | deflate_unpack2, "deflate_unpack2" |
551 | 551 | ||
552 | name db "VNC viewer " |
552 | name db "VNC viewer " |
553 | .dash db 0, " " |
553 | .dash db 0, " " |
- | 554 | ||
- | 555 | port_notice db "Example: 192.168.0.3:5900" |
|
- | 556 | port_notice_e: |
|
554 | 557 | ||
555 | I_END: |
558 | I_END: |
556 | 559 | ||
557 | servername rb 64+1 |
560 | servername rb 64+1 |
558 | 561 | ||
559 | serveraddr db 0 |
562 | serveraddr db 0 |
560 | rb SERVERADDRLEN |
563 | rb SERVERADDRLEN |
561 | 564 | ||
562 | socketnum dd ? |
565 | socketnum dd ? |
563 | datapointer dd ? |
566 | datapointer dd ? |
564 | 567 | ||
565 | rectangles dw ? |
568 | rectangles dw ? |
566 | 569 | ||
567 | rectangle: |
570 | rectangle: |
568 | .x dd ? |
571 | .x dd ? |
569 | .y dd ? |
572 | .y dd ? |
570 | .width dd ? |
573 | .width dd ? |
571 | .height dd ? |
574 | .height dd ? |
572 | 575 | ||
573 | subrectangles dd ? |
576 | subrectangles dd ? |
574 | 577 | ||
575 | subrectangle: |
578 | subrectangle: |
576 | .x dd ? |
579 | .x dd ? |
577 | .y dd ? |
580 | .y dd ? |
578 | .width dd ? |
581 | .width dd ? |
579 | .height dd ? |
582 | .height dd ? |
580 | 583 | ||
581 | screen: ; Remote screen resolution |
584 | screen: ; Remote screen resolution |
582 | .height dw ? |
585 | .height dw ? |
583 | .width dw ? |
586 | .width dw ? |
584 | 587 | ||
585 | palette rd 128 ; TRLE/ZRLE |
588 | palette rd 128 ; TRLE/ZRLE |
586 | palettesize db ? ; TRLE/ZRLE |
589 | palettesize db ? ; TRLE/ZRLE |
587 | 590 | ||
588 | keymap rw 128 |
591 | keymap rw 128 |
589 | keymap_shift rw 128 |
592 | keymap_shift rw 128 |
590 | keymap_alt rw 128 |
593 | keymap_alt rw 128 |
591 | username rb 128 |
594 | username rb 128 |
592 | password rb 128 |
595 | password rb 128 |
593 | keys rd 32*2 ; DES keys for VNC authentication |
596 | keys rd 32*2 ; DES keys for VNC authentication |
594 | 597 | ||
595 | cursor: |
598 | cursor: |
596 | .y db ? |
599 | .y db ? |
597 | .x db ? |
600 | .x db ? |
598 | .image rd 32*32 |
601 | .image rd 32*32 |
599 | 602 | ||
600 | align 4 |
603 | align 4 |
601 | if BITS_PER_PIXEL = 8 |
604 | if BITS_PER_PIXEL = 8 |
602 | lut_8bpp rd 256 |
605 | lut_8bpp rd 256 |
603 | end if |
606 | end if |
604 | 607 | ||
605 | sz_err_security_c rb 512+1 |
608 | sz_err_security_c rb 512+1 |
606 | 609 | ||
607 | receive_buffer rb RECEIVE_BUFFER_SIZE |
610 | receive_buffer rb RECEIVE_BUFFER_SIZE |
608 | framebuffer rb 1280*1024*3 ; framebuffer |
611 | framebuffer rb 1280*1024*3 ; framebuffer |
609 | 612 | ||
610 | rb 0x1000 |
613 | rb 0x1000 |
611 | thread_stack: |
614 | thread_stack: |
612 | rb 0x1000 |
615 | rb 0x1000 |
613 | IM_END: |
616 | IM_END: |