Subversion Repositories Kolibri OS

Rev

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: