| 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 | static 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 | |