Subversion Repositories Kolibri OS

Rev

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