Casio_asm/common/event.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;
}