fix DELETE mapping and add keyboard evt handler

Wed, 09 Feb 2011 15:40:05 +0000

author
Philip Pemberton <philpem@philpem.me.uk>
date
Wed, 09 Feb 2011 15:40:05 +0000
changeset 82
4c72b03ffdc0
parent 81
6484b646bc31
child 83
7d2f720daed8

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