Wed, 09 Feb 2011 15:40:05 +0000
fix DELETE mapping and add keyboard evt handler
src/keyboard.c | file | annotate | diff | revisions |
1.1 diff -r 6484b646bc31 -r 4c72b03ffdc0 src/keyboard.c 1.2 --- a/src/keyboard.c Wed Feb 09 15:39:16 2011 +0000 1.3 +++ b/src/keyboard.c Wed Feb 09 15:40:05 2011 +0000 1.4 @@ -124,8 +124,8 @@ 1.5 { SDLK_y, 0, 0x79 }, // Y 1.6 { SDLK_z, 0, 0x7a }, // Z 1.7 // Keycodes 7B, 7C, 7D not used 1.8 - { SDLK_NUMLOCK, 0, 0x7e } // Numlock 1.9 -// { SDLK_, 1, 0x7f }, // Dlete 1.10 + { SDLK_NUMLOCK, 0, 0x7e } // Numlock 1.11 + { SDLK_DELETE, 0, 0x7f }, // Dlete 1.12 }; 1.13 1.14 void keyboard_init(KEYBOARD_STATE *ks) 1.15 @@ -141,19 +141,39 @@ 1.16 1.17 void keyboard_event(KEYBOARD_STATE *ks, SDL_Event *ev) 1.18 { 1.19 - // event handler -- handles SDL events 1.20 + // Ignore non-keyboard events 1.21 + if ((event->type != SDL_KEYDOWN) && (event->type != SDL_KEYUP)) return; 1.22 + 1.23 + // scan the keymap 1.24 + int keyidx = 0; 1.25 + for (keyidx=0; keyidx < sizeof(keymap)/sizeof(keymap[0]); keyidx++) { 1.26 + if (keymap[keyidx].key == event->key.keysym.sym) break; 1.27 + } 1.28 + 1.29 + switch (event->type) { 1.30 + // key pressed 1.31 + case SDL_KEYDOWN: 1.32 + ks->keystate[keymap[keyidx].scancode] = 1; 1.33 + break; 1.34 + // key released 1.35 + case SDL_KEYUP: 1.36 + ks->keystate[keymap[keyidx].scancode] = 1; 1.37 + break; 1.38 + } 1.39 } 1.40 1.41 void keyboard_scan(KEYBOARD_STATE *ks) 1.42 { 1.43 // if buffer empty, do a keyboard scan 1.44 if (ks->buflen == 0) { 1.45 + // TODO: inject "keyboard data follows" chunk header 1.46 for (int i=0; i<(sizeof(ks->keystate)/sizeof(ks->keystate[0])); i++) { 1.47 if (ks->keystate[i]) { 1.48 ks->buffer[ks->writep] = i; 1.49 ks->writep = (ks->writep + 1) % KEYBOARD_BUFFER_SIZE; 1.50 } 1.51 } 1.52 + // TODO: inject "mouse data follows" chunk header and mouse movement info 1.53 } 1.54 } 1.55