Subversion Repositories Kolibri OS

Rev

Rev 2549 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1547 Asper 1
;
2549 leency 2
;   ZKEY. Version 0.51.
1547 Asper 3
;   Virtual keyboard for KolibriOS.
4
;
5
;   Author:         Asper
6
;   Date of issue:  26.08.2009
7
;   Compiler:       FASM
8
;   Target:         KolibriOS
9
;
10
 
11
use32
12
	org	0x0
13
 
14
	db	'MENUET00'	; 8 byte id
15
	dd	38		; required os
16
	dd	STARTAPP	; program start
17
	dd	I_END		; program image size
18
	dd	0x100000	; required amount of memory
19
	dd	0x00000000	; reserved=no extended header
20
 
1728 clevermous 21
include "ASPAPI.INC"
1547 Asper 22
 
23
N_KEYCOLOR equ 0x00677889 ; Normal button color
24
C_KEYCOLOR equ 0x00344556 ; Control button color
25
L_KEYCOLOR equ 0x00258778 ; Lock button color
26
TEXTCOLOR  equ 0x00FFFFFF ; Button caption color
27
 
4263 0CodErr 28
ASCII_KEYMAP_SIZE equ 128
29
PROCINFO_SIZE equ 1024
30
PROCINFO_BUFF equ ascii_keymap + ASCII_KEYMAP_SIZE
1547 Asper 31
 
32
STARTAPP:
33
	mov	ecx, 1	   ; to send scancodes.
34
	call	set_keyboard_mode
35
 
36
	call	reload_ascii_keymap
37
	call	draw_window
38
	jmp	get_zkey_window_slot_number
39
 
40
draw_window:
41
  test	 byte [red_type], 1
42
  jnz	 @f
43
  test	 byte [red_type], 2
44
  jnz	 .draw_switch_button
2549 leency 45
  start_draw_window 100,370,600,210,0x14224466,labelt
1547 Asper 46
 
47
  stdcall draw_button, 15,50,23,20,2,N_KEYCOLOR,keyText,3,TEXTCOLOR		; Esc
48
 
49
  stdcall draw_button, 70,50,23,20,3,N_KEYCOLOR,keyText+3,2,TEXTCOLOR	; F1
50
  stdcall draw_button, 95,50,23,20,4,N_KEYCOLOR,keyText+5,2,TEXTCOLOR	; F2
51
  stdcall draw_button, 120,50,23,20,5,N_KEYCOLOR,keyText+7,2,TEXTCOLOR	; F3
52
  stdcall draw_button, 145,50,23,20,6,N_KEYCOLOR,keyText+9,2,TEXTCOLOR	; F4
53
 
54
  stdcall draw_button, 183,50,23,20,7,N_KEYCOLOR,keyText+11,2,TEXTCOLOR ; F5
55
  stdcall draw_button, 208,50,23,20,8,N_KEYCOLOR,keyText+13,2,TEXTCOLOR ; F6
56
  stdcall draw_button, 233,50,23,20,9,N_KEYCOLOR,keyText+15,2,TEXTCOLOR ; F7
57
  stdcall draw_button, 258,50,23,20,10,N_KEYCOLOR,keyText+17,2,TEXTCOLOR ; F8
58
 
59
  stdcall draw_button, 296,50,23,20,11,N_KEYCOLOR,keyText+19,2,TEXTCOLOR ; F9
60
  stdcall draw_button, 321,50,23,20,12,N_KEYCOLOR,keyText+21,3,TEXTCOLOR ; F10
61
  stdcall draw_button, 346,50,23,20,13,N_KEYCOLOR,keyText+24,3,TEXTCOLOR ; F11
62
  stdcall draw_button, 371,50,23,20,14,N_KEYCOLOR,keyText+27,3,TEXTCOLOR ; F12
63
@@:
64
  stdcall draw_button, 15,80,23,20,15,N_KEYCOLOR,ascii_keymap+41,1,TEXTCOLOR ;keyText+30,2,TEXTCOLOR     ; ~
65
  stdcall draw_button, 40,80,23,20,16,N_KEYCOLOR,ascii_keymap+2,1,TEXTCOLOR ;keyText+32,2,TEXTCOLOR      ; 1!
66
  stdcall draw_button, 65,80,23,20,17,N_KEYCOLOR,ascii_keymap+3,1,TEXTCOLOR ;keyText+34,2,TEXTCOLOR      ; 2@
67
  stdcall draw_button, 90,80,23,20,18,N_KEYCOLOR,ascii_keymap+4,1,TEXTCOLOR ;keyText+36,2,TEXTCOLOR      ; 3#
68
  stdcall draw_button, 115,80,23,20,19,N_KEYCOLOR,ascii_keymap+5,1,TEXTCOLOR ;keyText+38,2,TEXTCOLOR     ; 4$
69
  stdcall draw_button, 140,80,23,20,20,N_KEYCOLOR,ascii_keymap+6,1,TEXTCOLOR ;keyText+40,2,TEXTCOLOR     ; 5%
70
  stdcall draw_button, 165,80,23,20,21,N_KEYCOLOR,ascii_keymap+7,1,TEXTCOLOR ;keyText+42,2,TEXTCOLOR     ; 6^
71
  stdcall draw_button, 190,80,23,20,22,N_KEYCOLOR,ascii_keymap+8,1,TEXTCOLOR ;keyText+44,2,TEXTCOLOR     ; 7&
72
  stdcall draw_button, 215,80,23,20,23,N_KEYCOLOR,ascii_keymap+9,1,TEXTCOLOR ;keyText+46,2,TEXTCOLOR     ; 8*
73
  stdcall draw_button, 240,80,23,20,24,N_KEYCOLOR,ascii_keymap+10,1,TEXTCOLOR ;keyText+48,2,TEXTCOLOR    ; 9(
74
  stdcall draw_button, 265,80,23,20,25,N_KEYCOLOR,ascii_keymap+11,1,TEXTCOLOR ;keyText+50,2,TEXTCOLOR    ; 0)
75
  stdcall draw_button, 290,80,23,20,26,N_KEYCOLOR,ascii_keymap+12,1,TEXTCOLOR ;keyText+52,2,TEXTCOLOR    ; -_
76
  stdcall draw_button, 315,80,23,20,27,N_KEYCOLOR,ascii_keymap+13,1,TEXTCOLOR ;keyText+54,2,TEXTCOLOR    ; =+
77
  stdcall draw_button, 340,80,23,20,28,N_KEYCOLOR,ascii_keymap+43,1,TEXTCOLOR ;keyText+56,2,TEXTCOLOR    ; \|
78
  stdcall draw_button, 365,80,30,20,29,N_KEYCOLOR,keyText+58,4,TEXTCOLOR ; bksp
79
 
80
  stdcall draw_button, 15 ,103,33,20,30,N_KEYCOLOR,keyText+62,3,TEXTCOLOR	; Tab
81
  stdcall draw_button, 50 ,103,23,20,31,N_KEYCOLOR,ascii_keymap+16,1,TEXTCOLOR ;keyText+65,2,TEXTCOLOR   ; Q
82
  stdcall draw_button, 75 ,103,23,20,32,N_KEYCOLOR,ascii_keymap+17,1,TEXTCOLOR ;keyText+67,2,TEXTCOLOR   ; W
83
  stdcall draw_button, 100,103,23,20,33,N_KEYCOLOR,ascii_keymap+18,1,TEXTCOLOR ;keyText+69,2,TEXTCOLOR   ; E
84
  stdcall draw_button, 125,103,23,20,34,N_KEYCOLOR,ascii_keymap+19,1,TEXTCOLOR ;keyText+71,2,TEXTCOLOR   ; R
85
  stdcall draw_button, 150,103,23,20,35,N_KEYCOLOR,ascii_keymap+20,1,TEXTCOLOR ;keyText+73,2,TEXTCOLOR   ; T
86
  stdcall draw_button, 175,103,23,20,36,N_KEYCOLOR,ascii_keymap+21,1,TEXTCOLOR ;keyText+75,2,TEXTCOLOR   ; Y
87
  stdcall draw_button, 200,103,23,20,37,N_KEYCOLOR,ascii_keymap+22,1,TEXTCOLOR ;keyText+77,2,TEXTCOLOR   ; U
88
  stdcall draw_button, 225,103,23,20,38,N_KEYCOLOR,ascii_keymap+23,1,TEXTCOLOR ;keyText+79,2,TEXTCOLOR   ; I
89
  stdcall draw_button, 250,103,23,20,39,N_KEYCOLOR,ascii_keymap+24,1,TEXTCOLOR ;keyText+81,2,TEXTCOLOR   ; O
90
  stdcall draw_button, 275,103,23,20,40,N_KEYCOLOR,ascii_keymap+25,1,TEXTCOLOR ;keyText+83,2,TEXTCOLOR   ; P
91
  stdcall draw_button, 300,103,23,20,41,N_KEYCOLOR,ascii_keymap+26,1,TEXTCOLOR ;keyText+85,3,TEXTCOLOR   ; [{
92
  stdcall draw_button, 325,103,23,20,42,N_KEYCOLOR,ascii_keymap+27,1,TEXTCOLOR ;keyText+88,3,TEXTCOLOR   ; ]}
93
  stdcall draw_button, 350,103,45,43,43,N_KEYCOLOR,keyText+91,5,TEXTCOLOR	; Enter
94
 
95
  stdcall draw_button, 15 ,126,43,20,44,L_KEYCOLOR,keyText+96 ,4,TEXTCOLOR	; lock
96
  stdcall draw_button, 60 ,126,23,20,45,N_KEYCOLOR,ascii_keymap+30,1,TEXTCOLOR ;keyText+100,2,TEXTCOLOR  ; A
97
  stdcall draw_button, 85 ,126,23,20,46,N_KEYCOLOR,ascii_keymap+31,1,TEXTCOLOR ;keyText+102,2,TEXTCOLOR  ; S
98
  stdcall draw_button, 110,126,23,20,47,N_KEYCOLOR,ascii_keymap+32,1,TEXTCOLOR ;keyText+104,2,TEXTCOLOR  ; D
99
  stdcall draw_button, 135,126,23,20,48,N_KEYCOLOR,ascii_keymap+33,1,TEXTCOLOR ;keyText+106,2,TEXTCOLOR  ; F
100
  stdcall draw_button, 160,126,23,20,49,N_KEYCOLOR,ascii_keymap+34,1,TEXTCOLOR ;keyText+108,2,TEXTCOLOR  ; G
101
  stdcall draw_button, 185,126,23,20,50,N_KEYCOLOR,ascii_keymap+35,1,TEXTCOLOR ;keyText+110,2,TEXTCOLOR  ; H
102
  stdcall draw_button, 210,126,23,20,51,N_KEYCOLOR,ascii_keymap+36,1,TEXTCOLOR ;keyText+112,2,TEXTCOLOR  ; J
103
  stdcall draw_button, 235,126,23,20,52,N_KEYCOLOR,ascii_keymap+37,1,TEXTCOLOR ;keyText+114,2,TEXTCOLOR  ; K
104
  stdcall draw_button, 260,126,23,20,53,N_KEYCOLOR,ascii_keymap+38,1,TEXTCOLOR ;keyText+116,2,TEXTCOLOR  ; L
105
  stdcall draw_button, 285,126,23,20,54,N_KEYCOLOR,ascii_keymap+39,1,TEXTCOLOR ;keyText+118,3,TEXTCOLOR  ; ;:
106
  stdcall draw_button, 310,126,23,20,55,N_KEYCOLOR,ascii_keymap+40,1,TEXTCOLOR ;keyText+121,3,TEXTCOLOR  ; '"
107
 
108
  stdcall draw_button, 15 ,149,53,20,56,C_KEYCOLOR,keyText+124,5,TEXTCOLOR	; Shift
109
  stdcall draw_button, 70 ,149,23,20,57,N_KEYCOLOR,ascii_keymap+44,1,TEXTCOLOR ;keyText+129,2,TEXTCOLOR  ; Z
110
  stdcall draw_button, 95 ,149,23,20,58,N_KEYCOLOR,ascii_keymap+45,1,TEXTCOLOR ;keyText+131,2,TEXTCOLOR  ; X
111
  stdcall draw_button, 120,149,23,20,59,N_KEYCOLOR,ascii_keymap+46,1,TEXTCOLOR ;keyText+133,2,TEXTCOLOR  ; C
112
  stdcall draw_button, 145,149,23,20,60,N_KEYCOLOR,ascii_keymap+47,1,TEXTCOLOR ;keyText+135,2,TEXTCOLOR  ; V
113
  stdcall draw_button, 170,149,23,20,61,N_KEYCOLOR,ascii_keymap+48,1,TEXTCOLOR ;keyText+137,2,TEXTCOLOR  ; B
114
  stdcall draw_button, 195,149,23,20,62,N_KEYCOLOR,ascii_keymap+49,1,TEXTCOLOR ;keyText+139,2,TEXTCOLOR  ; N
115
  stdcall draw_button, 220,149,23,20,63,N_KEYCOLOR,ascii_keymap+50,1,TEXTCOLOR ;keyText+141,2,TEXTCOLOR  ; M
116
  stdcall draw_button, 245,149,23,20,64,N_KEYCOLOR,ascii_keymap+51,1,TEXTCOLOR ;keyText+143,3,TEXTCOLOR  ; ,<
117
  stdcall draw_button, 270,149,23,20,65,N_KEYCOLOR,ascii_keymap+52,1,TEXTCOLOR ;keyText+146,3,TEXTCOLOR  ; .>
118
  stdcall draw_button, 295,149,23,20,66,N_KEYCOLOR,ascii_keymap+53,1,TEXTCOLOR ;keyText+149,2,TEXTCOLOR  ; /?
119
 
120
  test	  byte [red_type], 1
121
  jnz	  @f
122
  stdcall draw_button, 320,149,75,20,67,C_KEYCOLOR,keyText+151,5,TEXTCOLOR	; Shift
123
 
124
  stdcall draw_button, 15 ,172,30,20,68,C_KEYCOLOR,keyText+156,4,TEXTCOLOR	; Ctrl
125
  stdcall draw_button, 47 ,172,30,20,69,C_KEYCOLOR,keyText+160,3,TEXTCOLOR	; Win
126
  stdcall draw_button, 79 ,172,30,20,70,C_KEYCOLOR,keyText+163,3,TEXTCOLOR	; Alt
127
  stdcall draw_button, 111,172,156,20,71,N_KEYCOLOR,keyText+166,1,TEXTCOLOR	;  Space
128
  stdcall draw_button, 269,172,30,20,72,C_KEYCOLOR,keyText+167,3,TEXTCOLOR	; Alt
129
  stdcall draw_button, 301,172,30,20,73,C_KEYCOLOR,keyText+170,3,TEXTCOLOR	; Win
130
  stdcall draw_button, 333,172,30,20,74,C_KEYCOLOR,keyText+173,3,TEXTCOLOR	; [=]
131
  stdcall draw_button, 365,172,30,20,75,C_KEYCOLOR,keyText+176,4,TEXTCOLOR	; Ctrl
132
 
133
  stdcall draw_button, 405,50 ,23,20,76,N_KEYCOLOR,keyText+180,3,TEXTCOLOR	; psc
134
  stdcall draw_button, 430,50 ,23,20,77,L_KEYCOLOR,keyText+183,3,TEXTCOLOR	; slk
135
  stdcall draw_button, 455,50 ,23,20,78,N_KEYCOLOR,keyText+186,3,TEXTCOLOR	; brk
136
  stdcall draw_button, 405,80 ,23,20,79,N_KEYCOLOR,keyText+189,3,TEXTCOLOR	; Ins
137
  stdcall draw_button, 430,80 ,23,20,80,N_KEYCOLOR,keyText+192,2,TEXTCOLOR	; Hm
138
  stdcall draw_button, 455,80 ,23,20,81,N_KEYCOLOR,keyText+194,3,TEXTCOLOR	; Pup
139
  stdcall draw_button, 405,103 ,23,20,82,N_KEYCOLOR,keyText+197,3,TEXTCOLOR	; Del
140
  stdcall draw_button, 430,103 ,23,20,83,N_KEYCOLOR,keyText+200,3,TEXTCOLOR	; End
141
  stdcall draw_button, 455,103 ,23,20,84,N_KEYCOLOR,keyText+203,3,TEXTCOLOR	; Pdn
142
  stdcall draw_button, 430,149,23,20,85,C_KEYCOLOR,keyText+206,1,TEXTCOLOR	; ^
143
  stdcall draw_button, 405,172,23,20,86,C_KEYCOLOR,keyText+207,1,TEXTCOLOR	; v
144
  stdcall draw_button, 430,172,23,20,87,C_KEYCOLOR,keyText+208,1,TEXTCOLOR	; <
145
  stdcall draw_button, 455,172,23,20,88,C_KEYCOLOR,keyText+209,2,TEXTCOLOR	;  >
146
 
147
  stdcall draw_button, 488,80 ,23,20,89,L_KEYCOLOR,keyText+211,3,TEXTCOLOR	; nlk
148
  stdcall draw_button, 513,80 ,23,20,90,N_KEYCOLOR,keyText+214,1,TEXTCOLOR	; /
149
  stdcall draw_button, 538,80 ,23,20,91,N_KEYCOLOR,keyText+215,1,TEXTCOLOR	; *
150
  stdcall draw_button, 563,80 ,23,20,92,N_KEYCOLOR,keyText+216,1,TEXTCOLOR	; -
151
  stdcall draw_button, 488,103 ,23,20,93,N_KEYCOLOR,keyText+217,1,TEXTCOLOR	; 7
152
  stdcall draw_button, 513,103 ,23,20,94,N_KEYCOLOR,keyText+218,1,TEXTCOLOR	; 8
153
  stdcall draw_button, 538,103 ,23,20,95,N_KEYCOLOR,keyText+219,1,TEXTCOLOR	; 9
154
  stdcall draw_button, 488,126,23,20,96,N_KEYCOLOR,keyText+220,1,TEXTCOLOR	; 4
155
  stdcall draw_button, 513,126,23,20,97,N_KEYCOLOR,keyText+221,1,TEXTCOLOR	; 5
156
  stdcall draw_button, 538,126,23,20,98,N_KEYCOLOR,keyText+222,1,TEXTCOLOR	; 6
157
  stdcall draw_button, 488,149,23,20,99,N_KEYCOLOR,keyText+223,1,TEXTCOLOR	; 1
158
  stdcall draw_button, 513,149,23,20,100,N_KEYCOLOR,keyText+224,1,TEXTCOLOR	; 2
159
  stdcall draw_button, 538,149,23,20,101,N_KEYCOLOR,keyText+225,1,TEXTCOLOR	; 3
160
  stdcall draw_button, 488,172,48,20,102,N_KEYCOLOR,keyText+226,1,TEXTCOLOR	; 0
161
  stdcall draw_button, 538,172,23,20,103,N_KEYCOLOR,keyText+227,1,TEXTCOLOR	; .
162
  stdcall draw_button, 563,103 ,23,43,104,N_KEYCOLOR,keyText+228,1,TEXTCOLOR	; +
163
  stdcall draw_button, 563,149,23,43,105,N_KEYCOLOR,keyText+229,3,TEXTCOLOR	; Ent
164
 
165
 .draw_switch_button:
166
  mov	eax, 6
167
  mul	byte [keyboard_mode]
168
  add	eax, SwitchText
169
  stdcall draw_button, 513,28,46,20,106,0x00700000,eax,6,TEXTCOLOR	 ; Scan/ASCII switch
4263 0CodErr 170
 
171
  xor	al, al
172
  xchg	al, [red_type]
173
  test	al, 2
174
  jnz	.skip_end_draw_window ; if we draw switch button without redraw window then end_draw_window not need
175
 
1547 Asper 176
@@:
177
 .draw_indicators_area:
178
  call lights_on
179
 
180
  end_draw_window
4263 0CodErr 181
 
182
.skip_end_draw_window:
1547 Asper 183
ret
184
 
185
get_zkey_window_slot_number:
186
	mov	eax, 18
187
	mov	ebx, 7
188
	int	0x40
189
	mov	[zkey_window], eax
190
set_event_mask:
191
	mov	eax, 40
192
	mov	ebx, 39
193
	int	0x40
194
 
195
still:
196
	call	get_receiver_window_slot_number
4263 0CodErr 197
	call	get_receiver_window_keyboard_mode ; return in ecx keyboard_mode for set_keyboard_mode
198
	call	set_keyboard_mode
199
; delete_switch_button
200
	mov eax, 8
201
	mov edx, 0x80700000
202
	int	0x40
203
 mov	byte [red_type], 2
204
	call	draw_window.draw_switch_button
205
 
1547 Asper 206
	mov	eax, 10 	      ; Wait for an event in the queue.
207
	int	0x40
208
 
209
	cmp	al,1		      ; redraw request ?
210
	jz	red
211
	cmp	al,2		      ; key in buffer ?
212
	jz	key
213
	cmp	al,3		      ; button in buffer ?
214
	jz	button
215
 
216
	jmp	still
217
 
218
red:
219
	call	draw_window
220
	jmp	still
221
 
222
key:
223
	mov	eax, 2
224
	int	0x40
225
 
226
;        push    ax
227
	call	get_control_keys_state
228
	cmp	[locks], ax
229
	je	@f
230
 
231
      .reload:
232
	call	reload_ascii_keymap
233
	mov	byte [red_type], 1
234
	call	draw_window
235
       @@:
236
;        pop     dx
237
;        jmp     button.select_key_code
238
	jmp	still
239
 
240
button:
241
	mov	eax, 17 	    ; Get pressed button code
242
	int	0x40
243
	cmp	ah, 1		    ; Test x button
244
	je	close_app
245
 
246
	cmp	ah, 106 	    ; Test Scan/ASCII switch button
247
	jne	.keyboard_keys
248
	mov	cl, 1
249
	sub	cl, byte [keyboard_mode]
250
	call	set_keyboard_mode
251
	mov	byte [red_type], 2
252
	jmp	red
253
 
254
      .keyboard_keys:
255
	cmp	ah, 2		    ; Test if pressed buttons
256
	jb	still		    ; is a ZKEY keyboard key...
257
	cmp	ah, 106
258
	jnb	still		    ; ...so, if not then still,
259
	mov	[butt], ah	    ; if yes then save pressed button ID
260
      .test_slot:
261
	mov	eax, [zkey_window]		; Test is receiver ZKEY window
262
	mov	ecx, [receiver_window]
263
	cmp	eax, ecx
264
	je	still				; if yes still.
265
      .activate_receiver_window:
266
	mov	eax, 18
267
	mov	ebx, 3
268
	int	0x40
269
 
270
      call reload_ascii_keymap
271
 
272
      .read_key_scancode:
273
	xor	edx, edx
274
	movzx	si, byte [butt] 		; Read scan code of the key from the table.
275
	sub	si, 2
276
	mov	dl, [keyCodes+si]		; Set dl = scancode of the key corresponding to the pressed button.
277
	cmp	dl, 0xA0
278
	jb	.select_key_code		; If not extended key then select ascii or scan to send and then send it to the receiver.
279
 
280
	cmp	dl, 0xA6			; Test if it's extended2 key
281
	jne	.read_ext_key			; if not go to prepare to send simply extended key.
282
	mov	dl, 0xE1			; Send extended2 scancode...
283
	call	send_key
284
	mov	dl, 0x1D			; ...and extended scancode,
285
	call	send_key			;
286
	mov	dl, [keyCodes.ext2]		; (There is only one ext2 key - 'Break')
287
	jmp	.send_key_code				; so... send it's normal scan code.
288
      .read_ext_key:
289
	sub	dl, 0xA0			; Read extended key scan code from the table.
290
	movzx	si, dl
291
	mov	dl, [keyCodes.ext+si]
292
     .send_ext:
293
	push	dx				; Send extended scancode to the receiver's window.
294
	mov	dl, 0xE0
295
	call	send_key
296
	pop	dx
297
;        jmp     .send_key_code
298
      .select_key_code: 		; Select what to send ASCII or scan.
299
	cmp	[keyboard_mode], 0	; Test if ZKEY must send ASCII.
300
	jne	.send_key_code
301
 
302
;        mov     esi, ext0               ; Set esi to the beginning of the ext0 table.
303
	and	edx, 0x7F
304
;      @@:
305
;        cmp     dl, byte [esi]
306
;        je      .send_key_code
307
;        inc     esi
308
;        cmp     esi, ext0end
309
;        jng     @b
310
      .read_ascii:
311
	mov	dl, byte [ascii_keymap+edx]	; Read ASCII from the keymap table.
312
      .send_key_code:
313
	call	send_key		; Finally send the key to the receiver's window.
314
      .wait:
315
	mov	eax, 5
316
	mov	ebx, 1			; Wait 0.01 second.
317
	int	0x40
318
      .activate_zkey_window:
319
	mov	eax, 18
320
	mov	ebx, 3
321
	mov	ecx, [zkey_window]
322
	int	0x40
323
 
324
	jmp	still
325
 
326
 
327
close_app:
328
    mov  eax,-1 		 ; close this program
329
    int  0x40
330
 
331
 
332
;**********************************
333
;*  input: ecx = type of mode     *
334
;**********************************
335
 
336
set_keyboard_mode:
337
	mov	eax, 66
338
	mov	ebx, 1	   ; Set keyboard mode
339
	int	0x40
340
	mov	[keyboard_mode], cl
341
ret
342
 
343
get_control_keys_state:    ; This routine works only in Scan keyboard mode.
344
	mov	eax, 66
345
	mov	ebx, 3
346
	int	0x40
347
ret
348
 
349
 
350
;**********************************
351
;*  input: ecx = type of map      *
352
;**********************************
353
 
354
get_keyboard_map:
355
	mov	eax, 26
356
	mov	ebx, 2
357
	mov	edx, ascii_keymap
358
	int	0x40
359
ret
360
 
361
 
362
reload_ascii_keymap:
363
	call	get_control_keys_state
364
	mov	ecx, 1
365
 
366
	test	ax, 3				; Shift pressed ?
367
	jnz	 @f
368
	test	ax, 0x40			; Caps  Lock  on ?
369
	jz	.load_ascii_keymap
370
      @@:
371
	mov	ecx, 2
372
      .load_ascii_keymap:
373
	call	get_keyboard_map
374
  ret
375
 
376
 
377
 
378
get_receiver_window_slot_number:
379
	mov	eax, 18
380
	mov	ebx, 7
381
	int	0x40
382
	mov	ebx, [zkey_window]
383
	cmp	eax, ebx
384
	je	@f
385
	mov	[receiver_window], eax
386
      @@:
387
  ret
388
 
4263 0CodErr 389
get_receiver_window_keyboard_mode:
390
	mov	eax, 9
391
	mov	ebx, PROCINFO_BUFF
392
	mov	ecx, [receiver_window]
393
	int	0x40
394
	movzx	ecx, byte [ebx + 75]
395
	ret
396
 
1547 Asper 397
;************************************
398
;*  input: edx = code of the key    *
399
;************************************
400
 
401
send_key:
402
	mov	eax, 72
403
	mov	ebx, 1
404
	mov	ecx, 2
405
	int	0x40
406
  ret
407
 
408
lights_on:
409
   bar 491,51,95,15,0			   ; indicators area
410
   rectangle 490,50,96,16,TEXTCOLOR
411
 
412
   call    get_control_keys_state
413
   mov	   [locks], ax
414
   test ax, 0x40
415
   jz @f
416
   ;stdcall bar, 532, 53, 10, 11, 0x0000FF00
417
   bar 532, 53, 10, 11, 0x0000FF00
418
 @@:
419
   test ax, 0x80
420
   jz @f
421
   ;stdcall bar, 500, 53, 10, 11, 0x0000FF00
422
   bar 500, 53, 10, 11, 0x0000FF00
423
 @@:
424
   test ax, 0x100
425
   jz @f
426
   ;stdcall bar, 565, 53, 10, 11, 0x0000FF00
427
   bar 565, 53, 10, 11, 0x0000FF00
428
 @@:
429
ret
430
 
431
; DATA AREA
432
 
433
; Application Title
2549 leency 434
labelt db 'ZKEY v0.51 - keyboard for KolibriOS', 0
1547 Asper 435
 
436
SwitchText db ' ASCII SCAN '
437
 
438
;Button names
439
keyText db 'EscF1F2F3F4F5F6F7F8F9F10F11F12'
440
	db '~1!2@3#4$5%6^7&8*9(0)-_=+\|bksp'
441
	db 'TabQWERTYUIOP{[}]Enter'
442
	db 'lockASDFGHJKL;:''"'
443
	db 'ShiftZXCVBNM,<.>/?Shift'
444
	db 'CtrlWinAlt AltWin[=]Ctrl'
445
	db 'pscslkbrkInsHmPupDelEndPdn^'
446
	db 'nlk/*-7894561230.+Ent'
447
 
448
;Key scan codes
449
keyCodes:
450
	db 0x01, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x57, 0x58
451
	db 0x29, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x2B, 0x0E
452
	db 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C
453
	db 0x3A, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28
454
	db 0x2A, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36
455
	db 0x1D, 0xA0, 0x38, 0x39, 0xA1, 0xA2, 0xA3, 0xA4
456
	db 0xA5, 0x46, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0
457
	db 0x45, 0xB1, 0x37, 0x4A, 0x47, 0x48, 0x49, 0x4B, 0x4C, 0x4D, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x4E, 0xB2
458
      .ext:
459
	db 0x5B, 0x38, 0x5C, 0x5D, 0x1D
460
	db 0x37, 0x00, 0x52, 0x47, 0x49, 0x53, 0x4F, 0x51, 0x48, 0x4B, 0x50, 0x4D
461
	db 0x35, 0x1C
462
      .ext2  db 0x45	  ; Just Break :)
463
 
464
;ext0:
465
;    db   0x1D, 0x29, 0x2A, 0x36, 0x37, 0x38, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40
466
;    db   0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D
467
;    db   0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x57, 0x58
468
;ext0end:
469
 
470
receiver_window dd 0	  ; Slot number of the receiver
471
zkey_window dd 0	  ; Slot number of ZKEY
472
butt	db 0		  ; Pressed button ID
473
locks	dw 0		  ; NumLock, CapsLock, ScrollLock lights mask
474
 
475
keyboard_mode db 0	  ; Scan or ASCII keys to send ?  0 - ASCII , 1 - Scan
476
red_type      db 0	  ; Type of window redraw. 0 - default , 1 - on ASCII_keymap change , 2 - Switch button pressed.
477
 
478
I_END:			  ; End of application code and data marker
479
 
480
ascii_keymap: