Initial revision
[newkind] / keyboard.c
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;
37 int kbd_fire_pressed;
38 int kbd_ecm_pressed;
39 int kbd_energy_bomb_pressed;
40 int kbd_hyperspace_pressed;
41 int kbd_ctrl_pressed;
42 int kbd_jump_pressed;
43 int kbd_escape_pressed;
44 int kbd_dock_pressed;
45 int kbd_d_pressed;
46 int kbd_origin_pressed;
47 int kbd_find_pressed;
48 int kbd_fire_missile_pressed;
49 int kbd_target_missile_pressed;
50 int kbd_unarm_missile_pressed;
51 int kbd_pause_pressed;
52 int kbd_resume_pressed;
53 int kbd_inc_speed_pressed;
54 int kbd_dec_speed_pressed;
55 int kbd_up_pressed;
56 int kbd_down_pressed;
57 int kbd_left_pressed;
58 int kbd_right_pressed;
59 int kbd_enter_pressed;
60 int kbd_backspace_pressed;
61 int kbd_space_pressed;
62
63
64 int kbd_keyboard_startup (void)
65 {
66 // set_keyboard_rate(2000, 2000);
67 return 0;
68 }
69
70 int kbd_keyboard_shutdown (void)
71 {
72 return 0;
73 }
74
75 void kbd_poll_keyboard (void)
76 {
77 poll_keyboard();
78
79 kbd_F1_pressed = key[KEY_F1];
80 kbd_F2_pressed = key[KEY_F2];
81 kbd_F3_pressed = key[KEY_F3];
82 kbd_F4_pressed = key[KEY_F4];
83 kbd_F5_pressed = key[KEY_F5];
84 kbd_F6_pressed = key[KEY_F6];
85 kbd_F7_pressed = key[KEY_F7];
86 kbd_F8_pressed = key[KEY_F8];
87 kbd_F9_pressed = key[KEY_F9];
88 kbd_F10_pressed = key[KEY_F10];
89 kbd_F11_pressed = key[KEY_F11];
90 kbd_F12_pressed = key[KEY_F12];
91
92 kbd_y_pressed = key[KEY_Y];
93 kbd_n_pressed = key[KEY_N];
94
95 kbd_fire_pressed = key[KEY_A];
96 kbd_ecm_pressed = key[KEY_E];
97 kbd_energy_bomb_pressed = key[KEY_TAB];
98 kbd_hyperspace_pressed = key[KEY_H];
99 kbd_ctrl_pressed = (key[KEY_LCONTROL]) || (key[KEY_RCONTROL]);
100 kbd_jump_pressed = key[KEY_J];
101 kbd_escape_pressed = key[KEY_ESC];
102
103 kbd_dock_pressed = key[KEY_C];
104 kbd_d_pressed = key[KEY_D];
105 kbd_origin_pressed = key[KEY_O];
106 kbd_find_pressed = key[KEY_F];
107
108 kbd_fire_missile_pressed = key[KEY_M];
109 kbd_target_missile_pressed = key[KEY_T];
110 kbd_unarm_missile_pressed = key[KEY_U];
111
112 kbd_pause_pressed = key[KEY_P];
113 kbd_resume_pressed = key[KEY_R];
114
115 kbd_inc_speed_pressed = key[KEY_SPACE];
116 kbd_dec_speed_pressed = key[KEY_SLASH];
117
118 kbd_up_pressed = key[KEY_S] || key[KEY_UP];
119 kbd_down_pressed = key[KEY_X] || key[KEY_DOWN];
120 kbd_left_pressed = key[KEY_COMMA] || key[KEY_LEFT];
121 kbd_right_pressed = key[KEY_STOP] || key[KEY_RIGHT];
122
123 kbd_enter_pressed = key[KEY_ENTER];
124 kbd_backspace_pressed = key[KEY_BACKSPACE];
125 kbd_space_pressed = key[KEY_SPACE];
126
127 while (keypressed())
128 readkey();
129 }
130
131
132 int kbd_read_key (void)
133 {
134 int keynum;
135 int keycode;
136 int keyasc;
137
138 kbd_enter_pressed = 0;
139 kbd_backspace_pressed = 0;
140
141 keynum = readkey();
142 keycode = keynum >> 8;
143 keyasc = keynum & 255;
144
145 if (keycode == KEY_ENTER)
146 {
147 kbd_enter_pressed = 1;
148 return 0;
149 }
150
151 if (keycode == KEY_BACKSPACE)
152 {
153 kbd_backspace_pressed = 1;
154 return 0;
155 }
156
157 return keyasc;
158 }
159
160
161 void kbd_clear_key_buffer (void)
162 {
163 while (keypressed())
164 readkey();
165 }
166