changed Makefile; build all commands as an own file
[NeonServV5.git] / timeq.c
diff --git a/timeq.c b/timeq.c
index 60d92f7edced2bd3ec549f84913e0398aed93bd4..fe919c8332691e92bf2dee4f5ff8181d8b767c33 100644 (file)
--- a/timeq.c
+++ b/timeq.c
@@ -14,6 +14,7 @@ void timeq_tick() {
         } else
             break;
     }
+    timeq_events = entry;
 }
 
 struct timeq_entry* timeq_add(int seconds, timeq_callback_t *callback, void *data) {
@@ -27,6 +28,7 @@ struct timeq_entry* timeq_add(int seconds, timeq_callback_t *callback, void *dat
     entry->execute = now + seconds;
     entry->callback = callback;
     entry->data = data;
+    entry->name = NULL;
     struct timeq_entry *next, *prev = NULL;
     for(next = timeq_events; next; next = next->next) {
         if(next->execute >= entry->execute)
@@ -44,6 +46,12 @@ struct timeq_entry* timeq_add(int seconds, timeq_callback_t *callback, void *dat
     return entry;
 }
 
+struct timeq_entry* timeq_add_name(char *name, int seconds, timeq_callback_t *callback, void *data) {
+    struct timeq_entry *entry = timeq_add(seconds, callback, data);
+    entry->name = strdup(name);
+    return entry;
+}
+
 int timeq_del(struct timeq_entry* entry) {
     struct timeq_entry *centry, *last = NULL;
     for(centry = timeq_events; centry; centry = centry->next) {
@@ -52,6 +60,8 @@ int timeq_del(struct timeq_entry* entry) {
                 last->next = centry->next;
             else
                 timeq_events = centry->next;
+            if(centry->name)
+                free(centry->name);
             free(centry);
             return 1;
         } else {
@@ -60,3 +70,31 @@ int timeq_del(struct timeq_entry* entry) {
     }
     return 0;
 }
+
+int timeq_del_name(char *name) {
+    struct timeq_entry *centry, *last = NULL;
+    for(centry = timeq_events; centry; centry = centry->next) {
+        if(centry->name && !stricmp(centry->name, name)) {
+            if(last)
+                last->next = centry->next;
+            else
+                timeq_events = centry->next;
+            free(centry->name);
+            free(centry);
+            return 1;
+        } else {
+            last = centry;
+        }
+    }
+    return 0;
+}
+
+int timeq_name_exists(char *name) {
+    struct timeq_entry *centry;
+    for(centry = timeq_events; centry; centry = centry->next) {
+        if(centry->name && !stricmp(centry->name, name)) {
+            return 1;
+        }
+    }
+    return 0;
+}