chiark / gitweb /
Proper Subversion configuration.
[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_zoom_pressed;
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;
55 int kbd_i_pressed;
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
65 char old_key[KEY_MAX];
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 {
80         int i;
81         poll_keyboard();
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);
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];
106         kbd_zoom_pressed = key[KEY_Z];
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
121         kbd_i_pressed = key[KEY_I];
122
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