Subversion Repositories Kolibri OS

Rev

Rev 7814 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7814 Rev 7981
1
#ifndef INCLUDE_KEYBOARD_H
1
#ifndef INCLUDE_KEYBOARD_H
2
#define INCLUDE_KEYBOARD_H
2
#define INCLUDE_KEYBOARD_H
3
 
3
 
4
//ASCII KEYS
4
//ASCII KEYS
5
#define ASCII_KEY_BS    008
5
#define ASCII_KEY_BS    008
6
#define ASCII_KEY_TAB   009
6
#define ASCII_KEY_TAB   009
7
#define ASCII_KEY_ENTER 013
7
#define ASCII_KEY_ENTER 013
8
#define ASCII_KEY_ESC   027
8
#define ASCII_KEY_ESC   027
9
#define ASCII_KEY_DEL   182
9
#define ASCII_KEY_DEL   182
10
#define ASCII_KEY_INS   185
10
#define ASCII_KEY_INS   185
11
#define ASCII_KEY_SPACE 032
11
#define ASCII_KEY_SPACE 032
12
 
12
 
13
#define ASCII_KEY_PLUS  043
13
#define ASCII_KEY_PLUS  043
14
#define ASCII_KEY_MINUS 045
14
#define ASCII_KEY_MINUS 045
15
#define ASCII_KEY_EQU   061
15
#define ASCII_KEY_EQU   061
16
 
16
 
17
#define ASCII_KEY_LEFT  176
17
#define ASCII_KEY_LEFT  176
18
#define ASCII_KEY_RIGHT 179
18
#define ASCII_KEY_RIGHT 179
19
#define ASCII_KEY_DOWN  177
19
#define ASCII_KEY_DOWN  177
20
#define ASCII_KEY_UP    178
20
#define ASCII_KEY_UP    178
21
#define ASCII_KEY_HOME  180
21
#define ASCII_KEY_HOME  180
22
#define ASCII_KEY_END   181
22
#define ASCII_KEY_END   181
23
#define ASCII_KEY_PGDN  183
23
#define ASCII_KEY_PGDN  183
24
#define ASCII_KEY_PGUP  184
24
#define ASCII_KEY_PGUP  184
25
 
25
 
26
//SCAN CODE KEYS
26
//SCAN CODE KEYS
27
#define SCAN_CODE_BS    014
27
#define SCAN_CODE_BS    014
28
#define SCAN_CODE_TAB   015
28
#define SCAN_CODE_TAB   015
29
#define SCAN_CODE_ENTER 028
29
#define SCAN_CODE_ENTER 028
30
#define SCAN_CODE_ESC   001
30
#define SCAN_CODE_ESC   001
31
#define SCAN_CODE_DEL   083
31
#define SCAN_CODE_DEL   083
32
#define SCAN_CODE_INS   082
32
#define SCAN_CODE_INS   082
33
#define SCAN_CODE_SPACE 057
33
#define SCAN_CODE_SPACE 057
34
#define SCAN_CODE_MENU  093
34
#define SCAN_CODE_MENU  093
35
 
35
 
36
#define SCAN_CODE_LEFT  075
36
#define SCAN_CODE_LEFT  075
37
#define SCAN_CODE_RIGHT 077
37
#define SCAN_CODE_RIGHT 077
38
#define SCAN_CODE_DOWN  080
38
#define SCAN_CODE_DOWN  080
39
#define SCAN_CODE_UP    072
39
#define SCAN_CODE_UP    072
40
#define SCAN_CODE_HOME  071
40
#define SCAN_CODE_HOME  071
41
#define SCAN_CODE_END   079
41
#define SCAN_CODE_END   079
42
#define SCAN_CODE_PGDN  081
42
#define SCAN_CODE_PGDN  081
43
#define SCAN_CODE_PGUP  073
43
#define SCAN_CODE_PGUP  073
44
 
44
 
45
#define SCAN_CODE_MINUS 012
45
#define SCAN_CODE_MINUS 012
46
#define SCAN_CODE_PLUS  013
46
#define SCAN_CODE_PLUS  013
47
 
47
 
48
#define SCAN_CODE_F1    059
48
#define SCAN_CODE_F1    059
49
#define SCAN_CODE_F2    060
49
#define SCAN_CODE_F2    060
50
#define SCAN_CODE_F3    061
50
#define SCAN_CODE_F3    061
51
#define SCAN_CODE_F4    062
51
#define SCAN_CODE_F4    062
52
#define SCAN_CODE_F5    063
52
#define SCAN_CODE_F5    063
53
#define SCAN_CODE_F6    064
53
#define SCAN_CODE_F6    064
54
#define SCAN_CODE_F7    065
54
#define SCAN_CODE_F7    065
55
#define SCAN_CODE_F8    066
55
#define SCAN_CODE_F8    066
56
#define SCAN_CODE_F9    067
56
#define SCAN_CODE_F9    067
57
#define SCAN_CODE_F10   068
57
#define SCAN_CODE_F10   068
58
#define SCAN_CODE_F11   087
58
#define SCAN_CODE_F11   087
59
#define SCAN_CODE_F12   088
59
#define SCAN_CODE_F12   088
60
 
60
 
61
#define SCAN_CODE_1     002
61
#define SCAN_CODE_1     002
62
#define SCAN_CODE_2     003
62
#define SCAN_CODE_2     003
63
#define SCAN_CODE_3     004
63
#define SCAN_CODE_3     004
64
#define SCAN_CODE_4     005
64
#define SCAN_CODE_4     005
65
#define SCAN_CODE_5     006
65
#define SCAN_CODE_5     006
66
#define SCAN_CODE_6     007
66
#define SCAN_CODE_6     007
67
#define SCAN_CODE_7     008
67
#define SCAN_CODE_7     008
68
#define SCAN_CODE_8     009
68
#define SCAN_CODE_8     009
69
#define SCAN_CODE_9     010
69
#define SCAN_CODE_9     010
70
#define SCAN_CODE_10    011
70
#define SCAN_CODE_10    011
71
 
71
 
72
#define SCAN_CODE_KEY_A 030
72
#define SCAN_CODE_KEY_A 030
73
#define SCAN_CODE_KEY_B 048
73
#define SCAN_CODE_KEY_B 048
74
#define SCAN_CODE_KEY_C 046
74
#define SCAN_CODE_KEY_C 046
75
#define SCAN_CODE_KEY_D 032
75
#define SCAN_CODE_KEY_D 032
76
#define SCAN_CODE_KEY_E 018
76
#define SCAN_CODE_KEY_E 018
77
#define SCAN_CODE_KEY_F 033
77
#define SCAN_CODE_KEY_F 033
78
#define SCAN_CODE_KEY_G 034
78
#define SCAN_CODE_KEY_G 034
79
#define SCAN_CODE_KEY_J 036
79
#define SCAN_CODE_KEY_J 036
80
#define SCAN_CODE_KEY_H 035
80
#define SCAN_CODE_KEY_H 035
81
#define SCAN_CODE_KEY_I 023
81
#define SCAN_CODE_KEY_I 023
82
#define SCAN_CODE_KEY_L 038
82
#define SCAN_CODE_KEY_L 038
83
#define SCAN_CODE_KEY_M 050
83
#define SCAN_CODE_KEY_M 050
84
#define SCAN_CODE_KEY_N 049
84
#define SCAN_CODE_KEY_N 049
85
#define SCAN_CODE_KEY_O 024
85
#define SCAN_CODE_KEY_O 024
86
#define SCAN_CODE_KEY_P 025
86
#define SCAN_CODE_KEY_P 025
87
#define SCAN_CODE_KEY_Q 016
87
#define SCAN_CODE_KEY_Q 016
88
#define SCAN_CODE_KEY_R 019
88
#define SCAN_CODE_KEY_R 019
89
#define SCAN_CODE_KEY_S 031
89
#define SCAN_CODE_KEY_S 031
90
#define SCAN_CODE_KEY_T 020
90
#define SCAN_CODE_KEY_T 020
91
#define SCAN_CODE_KEY_U 022
91
#define SCAN_CODE_KEY_U 022
92
#define SCAN_CODE_KEY_V 047
92
#define SCAN_CODE_KEY_V 047
93
#define SCAN_CODE_KEY_W 017
93
#define SCAN_CODE_KEY_W 017
94
#define SCAN_CODE_KEY_X 045 
94
#define SCAN_CODE_KEY_X 045 
95
#define SCAN_CODE_KEY_Y 021 
95
#define SCAN_CODE_KEY_Y 021 
96
#define SCAN_CODE_KEY_Z 044 
96
#define SCAN_CODE_KEY_Z 044 
97
 
97
 
98
 
98
 
99
#define KEY_LSHIFT     00000000001b
99
#define KEY_LSHIFT     00000000001b
100
#define KEY_RSHIFT     00000000010b
100
#define KEY_RSHIFT     00000000010b
101
#define KEY_LCTRL      00000000100b
101
#define KEY_LCTRL      00000000100b
102
#define KEY_RCTRL      00000001000b
102
#define KEY_RCTRL      00000001000b
103
#define KEY_LALT       00000010000b
103
#define KEY_LALT       00000010000b
104
#define KEY_RALT       00000100000b
104
#define KEY_RALT       00000100000b
105
#define KEY_CAPSLOCK   00001000000b
105
#define KEY_CAPSLOCK   00001000000b
106
#define KEY_NUMLOCK    00010000000b
106
#define KEY_NUMLOCK    00010000000b
107
#define KEY_SCROLLLOCK 00100000000b
107
#define KEY_SCROLLLOCK 00100000000b
108
#define KEY_LWIN       01000000000b
108
#define KEY_LWIN       01000000000b
109
#define KEY_RWIN       10000000000b
109
#define KEY_RWIN       10000000000b
110
 
110
 
111
:unsigned char key_ascii;
111
:unsigned char key_ascii;
112
:dword key_scancode, key_modifier, key_editbox;
112
:dword key_scancode, key_modifier, key_editbox;
113
:int GetKeys()
113
:int GetKeys()
114
{
114
{
115
		$push edx
115
		$push edx
116
GETKEY:
116
GETKEY:
117
		$mov  eax,2
117
		$mov  eax,2
118
		$int  0x40
118
		$int  0x40
119
		$cmp eax,1
119
		$cmp eax,1
120
		$jne GETKEYI
120
		$jne GETKEYI
121
		$mov eax,edx
121
		$mov eax,edx
122
		$jmp GETKEYII
122
		$jmp GETKEYII
123
GETKEYI:
123
GETKEYI:
124
		$mov edx,eax
124
		$mov edx,eax
125
		$jmp GETKEY
125
		$jmp GETKEY
126
GETKEYII:
126
GETKEYII:
127
		$pop edx
127
		$pop edx
128
	key_editbox = EAX;
128
	key_editbox = EAX;
129
	key_ascii = AH;
129
	key_ascii = AH;
130
	$shr  eax,16
130
	$shr  eax,16
131
	key_scancode = AL;
131
	key_scancode = AL;
132
	key_modifier = GetKeyModifier();
132
	key_modifier = GetKeyModifier();
133
	EAX = key_editbox;
133
	EAX = key_editbox;
134
}
134
}
-
 
135
 
-
 
136
inline fastcall byte GetKeyScancode()
-
 
137
{
-
 
138
	$mov  eax,2
-
 
139
	$int  0x40
-
 
140
	$shr  eax,16
-
 
141
	return AL;
-
 
142
}
135
 
143
 
136
// ECX is a mode: 1 - scancodes, 0 - ascii
144
// ECX is a mode: 1 - scancodes, 0 - ascii
137
inline fastcall SetKeyboardMode(ECX) 
145
inline fastcall SetKeyboardMode(ECX) 
138
{
146
{
139
	$mov  eax,66
147
	$mov  eax,66
140
	$mov  ebx,1
148
	$mov  ebx,1
141
	//$mov  ecx,?  
149
	//$mov  ecx,?  
142
	$int 0x40	
150
	$int 0x40	
143
}
151
}
144
 
152
 
145
//get alt/shift/ctrl key status
153
//get alt/shift/ctrl key status
146
inline fastcall dword GetKeyModifier()
154
inline fastcall dword GetKeyModifier()
147
{
155
{
148
	$mov eax,66
156
	$mov eax,66
149
	$mov ebx,3
157
	$mov ebx,3
150
	$int 0x40
158
	$int 0x40
151
	key_modifier = EAX;
159
	key_modifier = EAX;
152
}
160
}
153
 
161
 
154
#endif
162
#endif