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