forked from PlaneteCasio/Casio_asm
60 lines
901 B
C
60 lines
901 B
C
#include "event.h"
|
|
#include "platform.h"
|
|
|
|
// event queue
|
|
#define SIZE 32
|
|
event_t* queue=0;
|
|
int front=0, rear=-1, len=0;
|
|
|
|
int Event_count() {
|
|
return len;
|
|
}
|
|
|
|
int Event_get(event_t *evt) {
|
|
if(!queue) return 0;
|
|
if(!len) return 0;
|
|
*evt=queue[front++];
|
|
if(front==SIZE) front=0;
|
|
len--;
|
|
return 1;
|
|
}
|
|
|
|
int Event_wait(event_t *evt) {
|
|
if(!queue) return 0;
|
|
while(Platform_running()&&!len) Platform_tick(1);
|
|
return Event_get(evt);
|
|
}
|
|
|
|
int Event_peek(event_t *evt) {
|
|
if(!queue) return 0;
|
|
if(!len) return 0;
|
|
*evt=queue[front];
|
|
return 1;
|
|
}
|
|
|
|
int Event_put(event_t *evt) {
|
|
if(!queue) return 0;
|
|
if(len==SIZE) return 0;
|
|
if(rear==SIZE-1) rear=-1;
|
|
queue[++rear]=*evt;
|
|
len++;
|
|
return 1;
|
|
}
|
|
|
|
int Event_clean() {
|
|
if(!queue) return 0;
|
|
front=0;
|
|
rear=-1;
|
|
len=0;
|
|
return 1;
|
|
}
|
|
|
|
int Event_init() {
|
|
queue=calloc(SIZE, sizeof(event_t));
|
|
return queue!=0;
|
|
}
|
|
int Event_quit() {
|
|
if(queue) free(queue);
|
|
return 1;
|
|
}
|