ref: 9b6630e3b2aa191c282cf59345fe874305ee3638
dir: /utils.c/
#include <u.h>
#include <libc.h>
#include <draw.h>
#include "dat.h"
#include "fns.h"
#define TASKLISTSIZE 10
QLock TaskLock;
Task TaskList[TASKLISTSIZE] = {0};
int newtask(ulong s, void (*f)(void))
{
uint i;
qlock(&TaskLock);
for (i = 0; i < ARRLEN(TaskList); i++) {
if (TaskList[i].func != nil)
continue;
TaskList[i] = (Task) { s, f };
break;
}
qunlock(&TaskLock);
return i >= ARRLEN(TaskList) ? -1 : i;
}
int removetask(int id)
{
if (id < 0 || id >= ARRLEN(TaskList))
return -1;
qlock(&TaskLock);
TaskList[id] = (Task) {0, nil};
qunlock(&TaskLock);
return 0;
}
void runtasks(void)
{
Task * t;
Task tl[ARRLEN(TaskList)];
ulong i;
qlock(&TaskLock);
memcpy(tl, TaskList, sizeof(TaskList));
qunlock(&TaskLock);
for (i = 0; i < ARRLEN(tl); i++) {
t = &tl[i];
if (t->func == nil || t->start > msec())
continue;
t->func();
removetask(i);
}
}
void
quitloop(void)
{
RunLoop = 0;
}
Point
mulptf(Point p, float f)
{
p.x = (int)(((float)p.x) * f);
p.y = (int)(((float)p.y) * f);
return p;
}