libdgl/DGLEVENT.C
Gered ab9fe0cb9a add input device events
as a new subsystem that must be explicitly enabled/disabled
2018-05-21 14:50:12 -04:00

70 lines
1.3 KiB
C

#include "dglevent.h"
#include "dglerror.h"
#include "dglutil.h"
#include <string.h>
volatile boolean _events_enabled;
volatile INPUTEVENT _events_buffer[EVENTS_BUFFER_SIZE];
volatile int _events_buffer_start = 0;
volatile int _events_buffer_end = 0;
boolean events_init(void) {
if (_events_enabled) {
dgl_set_error(DGL_EVENTS_ALREADY_INITIALIZED);
return FALSE;
}
events_clear();
_events_enabled = TRUE;
return TRUE;
}
boolean events_shutdown(void) {
if (!_events_enabled)
return TRUE; // don't care
_events_enabled = FALSE;
events_clear();
return TRUE;
}
boolean events_poll(INPUTEVENT **event) {
if (events_is_empty())
return FALSE;
int_disable();
*event = &_events_buffer[_events_buffer_start];
++_events_buffer_start;
if (_events_buffer_start >= EVENTS_BUFFER_SIZE)
_events_buffer_start = 0;
int_enable();
return TRUE;
}
boolean events_peek(INPUTEVENT **event) {
if (events_is_empty())
return FALSE;
*event = &_events_buffer[_events_buffer_start];
return TRUE;
}
void events_clear(void) {
int_disable();
memset(_events_buffer, 0, sizeof(_events_buffer));
_events_buffer_start = 0;
_events_buffer_end = 0;
int_enable();
}