Fix and change for scroll at the end of the line.
[eco.git] / timer.c
blob28da7118bd4b869919671350bf1de9cf061fae84
1 /*
2 * Copyright (C) 2009 Diego Hernan Borghetti.
3 * Eco
4 */
6 #include <stdio.h>
7 #include <stdlib.h>
9 #include "list.h"
10 #include "timer.h"
11 #include "time.h"
14 /* our timer list. */
15 static E_List timer_list= { NULL, NULL };
17 /* intial time. */
18 static double timer_time= 0.0;
20 int e_timer_list(void)
22 if (timer_list.first)
23 return(1);
24 return(0);
27 void e_timer_exec(void)
29 E_Timer *t, *tn;
30 double nt, delta;
32 if (timer_time == 0.0) {
33 timer_time= e_time_get();
34 return;
37 nt= e_time_get();
38 delta= nt - timer_time;
40 t= (E_Timer *)timer_list.first;
41 while (t) {
42 tn= t->next;
43 t->ctime += delta;
45 if (t->ctime >= t->time) {
46 t->ctime= 0.0;
47 (*t->exec)(t->id, t->data);
49 t= tn;
51 timer_time= nt;
54 void e_timer_add(int id, double time, void (*fn)(int, void *), void *data)
56 E_Timer *t;
58 t= (E_Timer *)malloc(sizeof(E_Timer));
59 t->next= NULL;
60 t->prev= NULL;
61 t->id= id;
62 t->time= time;
63 t->ctime= 0.0;
64 t->exec= fn;
65 t->data= data;
66 E_LIST_ADD(&timer_list, t);
69 void e_timer_rem(int id)
71 E_Timer *t;
73 t= (E_Timer *)timer_list.first;
74 while (t) {
75 if (t->id == id)
76 break;
77 t= t->next;
80 if (t) {
81 E_LIST_REM(&timer_list, t);
82 free((void *)t);