Include and link physfs properly.
[tuxanci.git] / src / client / keyboardBuffer.c
blob129389f86bc72db90aaeabda37e12a270f49c9af
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <assert.h>
5 #include <SDL.h>
7 #include "keyboardBuffer.h"
9 static keyboardBuffer_t *keyboardBuffer = NULL;
11 static SDL_keysym emptyKey;
14 * Key buffer initialization
15 * the parameter sets the number of keys
17 void keyboard_buffer_init(int size)
19 assert(size > 0);
20 assert(keyboardBuffer == NULL);
22 keyboardBuffer = malloc(sizeof(keyboardBuffer_t));
23 assert(keyboardBuffer != NULL);
24 memset(keyboardBuffer, 0, sizeof(keyboardBuffer_t));
26 keyboardBuffer->buff = malloc(size * sizeof(SDL_keysym));
27 assert(keyboardBuffer->buff != NULL);
28 memset(keyboardBuffer->buff, 0, size * sizeof(SDL_keysym));
30 keyboardBuffer->begin = 0;
31 keyboardBuffer->end = 0;
32 keyboardBuffer->count = 0;
33 keyboardBuffer->size = size;
35 emptyKey.sym = SDLK_UNKNOWN;
39 * Empty the buffer
41 void keyboard_buffer_clear()
43 assert(keyboardBuffer != NULL);
45 keyboardBuffer->begin = 0;
46 keyboardBuffer->end = 0;
47 keyboardBuffer->count = 0;
48 memset(keyboardBuffer->buff, 0, keyboardBuffer->size * sizeof(SDL_keysym));
52 * Adds key to the end of the buffer. If the buffer is overrun,
53 * an error is printed to stderr and the key is dropped.
55 bool_t keyboard_buffer_push(SDL_keysym key)
57 assert(keyboardBuffer != NULL);
59 if (keyboardBuffer->count >= keyboardBuffer->size) {
60 error("Keyboard buffer overrun - dropping the key [%02x]", key.sym);
61 return FALSE;
64 keyboardBuffer->buff[keyboardBuffer->end] = key;
66 keyboardBuffer->end++;
67 if (keyboardBuffer->end >= keyboardBuffer->size) {
68 keyboardBuffer->end = 0;
71 keyboardBuffer->count++;
73 return TRUE;
77 * Takes out first key from the buffer and returns it. If the buffer is empty,
78 * an error is printed to stderr and SDLK_UNKNOWN is returned.
80 SDL_keysym keyboard_buffer_pop()
82 assert(keyboardBuffer != NULL);
84 if (keyboardBuffer->count <= 0) {
85 error("Keyboard buffer underrun");
86 return emptyKey;
89 SDL_keysym key = keyboardBuffer->buff[keyboardBuffer->begin];
90 keyboardBuffer->buff[keyboardBuffer->begin] = emptyKey;
92 keyboardBuffer->begin++;
94 if (keyboardBuffer->begin >= keyboardBuffer->size) {
95 keyboardBuffer->begin = 0;
98 keyboardBuffer->count--;
100 return key;
104 * The buffer size
106 int keyboard_buffer_get_size()
108 assert(keyboardBuffer != NULL);
109 return keyboardBuffer->size;
113 * Number of keys in the buffer
115 int keyboard_buffer_get_count()
117 assert(keyboardBuffer != NULL);
118 return keyboardBuffer->count;
122 bool_t keyboard_buffer_is_any_key()
124 return keyboard_buffer_get_count() > 0 ? TRUE : FALSE;
128 * Frees the buffer. If it is not empty, information
129 * about filling is prined to stderr first.
131 void keyboard_buffer_quit()
133 assert(keyboardBuffer != NULL);
135 if (keyboardBuffer->count > 0) {
136 warning("Shutting down non-empty keyboard buffer");
139 free(keyboardBuffer->buff);
140 free(keyboardBuffer);
141 keyboardBuffer = NULL;