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
)
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
;
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
);
64 keyboardBuffer
->buff
[keyboardBuffer
->end
] = key
;
66 keyboardBuffer
->end
++;
67 if (keyboardBuffer
->end
>= keyboardBuffer
->size
) {
68 keyboardBuffer
->end
= 0;
71 keyboardBuffer
->count
++;
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");
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
--;
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
;