84bbd123 |
1 | /* |
2 | * Elite - The New Kind. |
3 | * |
4 | * Allegro version of the keyboard routines. |
5 | * |
6 | * The code in this file has not been derived from the original Elite code. |
7 | * Written by C.J.Pinder 1999-2001. |
8 | * email: <christian@newkind.co.uk> |
9 | * |
10 | */ |
11 | |
12 | /* |
13 | * keyboard.c |
14 | * |
15 | * Code to handle keyboard input. |
16 | */ |
17 | |
18 | #include <stdlib.h> |
19 | #include <string.h> |
20 | |
21 | #include "allegro.h" |
22 | |
23 | int kbd_F1_pressed; |
24 | int kbd_F2_pressed; |
25 | int kbd_F3_pressed; |
26 | int kbd_F4_pressed; |
27 | int kbd_F5_pressed; |
28 | int kbd_F6_pressed; |
29 | int kbd_F7_pressed; |
30 | int kbd_F8_pressed; |
31 | int kbd_F9_pressed; |
32 | int kbd_F10_pressed; |
33 | int kbd_F11_pressed; |
34 | int kbd_F12_pressed; |
35 | int kbd_y_pressed; |
36 | int kbd_n_pressed; |
1a8abebd |
37 | int kbd_zoom_pressed; |
84bbd123 |
38 | int kbd_fire_pressed; |
39 | int kbd_ecm_pressed; |
40 | int kbd_energy_bomb_pressed; |
41 | int kbd_hyperspace_pressed; |
42 | int kbd_ctrl_pressed; |
43 | int kbd_jump_pressed; |
44 | int kbd_escape_pressed; |
45 | int kbd_dock_pressed; |
46 | int kbd_d_pressed; |
47 | int kbd_origin_pressed; |
48 | int kbd_find_pressed; |
49 | int kbd_fire_missile_pressed; |
50 | int kbd_target_missile_pressed; |
51 | int kbd_unarm_missile_pressed; |
52 | int kbd_pause_pressed; |
53 | int kbd_resume_pressed; |
54 | int kbd_inc_speed_pressed; |
1a8abebd |
55 | int kbd_i_pressed; |
84bbd123 |
56 | int kbd_dec_speed_pressed; |
57 | int kbd_up_pressed; |
58 | int kbd_down_pressed; |
59 | int kbd_left_pressed; |
60 | int kbd_right_pressed; |
61 | int kbd_enter_pressed; |
62 | int kbd_backspace_pressed; |
63 | int kbd_space_pressed; |
64 | |
1a8abebd |
65 | static char old_key[KEY_MAX]; |
84bbd123 |
66 | |
67 | int kbd_keyboard_startup (void) |
68 | { |
69 | // set_keyboard_rate(2000, 2000); |
70 | return 0; |
71 | } |
72 | |
73 | int kbd_keyboard_shutdown (void) |
74 | { |
75 | return 0; |
76 | } |
77 | |
78 | void kbd_poll_keyboard (void) |
79 | { |
1a8abebd |
80 | int i; |
84bbd123 |
81 | poll_keyboard(); |
1a8abebd |
82 | for (i = 0; i < KEY_MAX; i++) { |
83 | if (!key[i]) |
84 | continue; |
85 | key[i] = 1; |
86 | if (key[i] && old_key[i]) |
87 | key[i] |= 2; |
88 | } |
89 | memcpy(old_key, key, KEY_MAX); |
84bbd123 |
90 | |
91 | kbd_F1_pressed = key[KEY_F1]; |
92 | kbd_F2_pressed = key[KEY_F2]; |
93 | kbd_F3_pressed = key[KEY_F3]; |
94 | kbd_F4_pressed = key[KEY_F4]; |
95 | kbd_F5_pressed = key[KEY_F5]; |
96 | kbd_F6_pressed = key[KEY_F6]; |
97 | kbd_F7_pressed = key[KEY_F7]; |
98 | kbd_F8_pressed = key[KEY_F8]; |
99 | kbd_F9_pressed = key[KEY_F9]; |
100 | kbd_F10_pressed = key[KEY_F10]; |
101 | kbd_F11_pressed = key[KEY_F11]; |
102 | kbd_F12_pressed = key[KEY_F12]; |
103 | |
104 | kbd_y_pressed = key[KEY_Y]; |
105 | kbd_n_pressed = key[KEY_N]; |
1a8abebd |
106 | kbd_zoom_pressed = key[KEY_Z]; |
84bbd123 |
107 | |
108 | kbd_fire_pressed = key[KEY_A]; |
109 | kbd_ecm_pressed = key[KEY_E]; |
110 | kbd_energy_bomb_pressed = key[KEY_TAB]; |
111 | kbd_hyperspace_pressed = key[KEY_H]; |
112 | kbd_ctrl_pressed = (key[KEY_LCONTROL]) || (key[KEY_RCONTROL]); |
113 | kbd_jump_pressed = key[KEY_J]; |
114 | kbd_escape_pressed = key[KEY_ESC]; |
115 | |
116 | kbd_dock_pressed = key[KEY_C]; |
117 | kbd_d_pressed = key[KEY_D]; |
118 | kbd_origin_pressed = key[KEY_O]; |
119 | kbd_find_pressed = key[KEY_F]; |
120 | |
1a8abebd |
121 | kbd_i_pressed = key[KEY_I]; |
122 | |
84bbd123 |
123 | kbd_fire_missile_pressed = key[KEY_M]; |
124 | kbd_target_missile_pressed = key[KEY_T]; |
125 | kbd_unarm_missile_pressed = key[KEY_U]; |
126 | |
127 | kbd_pause_pressed = key[KEY_P]; |
128 | kbd_resume_pressed = key[KEY_R]; |
129 | |
130 | kbd_inc_speed_pressed = key[KEY_SPACE]; |
131 | kbd_dec_speed_pressed = key[KEY_SLASH]; |
132 | |
133 | kbd_up_pressed = key[KEY_S] || key[KEY_UP]; |
134 | kbd_down_pressed = key[KEY_X] || key[KEY_DOWN]; |
135 | kbd_left_pressed = key[KEY_COMMA] || key[KEY_LEFT]; |
136 | kbd_right_pressed = key[KEY_STOP] || key[KEY_RIGHT]; |
137 | |
138 | kbd_enter_pressed = key[KEY_ENTER]; |
139 | kbd_backspace_pressed = key[KEY_BACKSPACE]; |
140 | kbd_space_pressed = key[KEY_SPACE]; |
141 | |
142 | while (keypressed()) |
143 | readkey(); |
144 | } |
145 | |
146 | |
147 | int kbd_read_key (void) |
148 | { |
149 | int keynum; |
150 | int keycode; |
151 | int keyasc; |
152 | |
153 | kbd_enter_pressed = 0; |
154 | kbd_backspace_pressed = 0; |
155 | |
156 | keynum = readkey(); |
157 | keycode = keynum >> 8; |
158 | keyasc = keynum & 255; |
159 | |
160 | if (keycode == KEY_ENTER) |
161 | { |
162 | kbd_enter_pressed = 1; |
163 | return 0; |
164 | } |
165 | |
166 | if (keycode == KEY_BACKSPACE) |
167 | { |
168 | kbd_backspace_pressed = 1; |
169 | return 0; |
170 | } |
171 | |
172 | return keyasc; |
173 | } |
174 | |
175 | |
176 | void kbd_clear_key_buffer (void) |
177 | { |
178 | while (keypressed()) |
179 | readkey(); |
180 | } |
181 | |