]> Pileus Git - wmpus/blob - util.c
Implement keyboard focus/window movement
[wmpus] / util.c
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 #include "util.h"
5
6 list_t *list_insert(list_t *next, void *data)
7 {
8         list_t *node = new0(list_t);
9         node->data = data;
10         node->next = next;
11         node->prev = next ? next->prev : NULL;
12         if (node->next) node->next->prev = node;
13         if (node->prev) node->next->next = node;
14         return node;
15 }
16
17 list_t *list_append(list_t *head, void *data)
18 {
19         list_t *last = head;
20         while (last->next)
21                 last = last->next;
22         list_t *node = new0(list_t);
23         node->data = data;
24         node->prev = last;
25         if (last) last->next = node;
26         return last ? head : node;
27 }
28
29 list_t *list_remove(list_t *head, list_t *node)
30 {
31         list_t *next = node->next;
32         list_t *prev = node->prev;
33         if (next) next->prev = prev;
34         if (prev) prev->next = next;
35         free(node);
36         return head == node ? next : head;
37 }
38
39 int list_length(list_t *node)
40 {
41         int len = 0;
42         for (; node; node = node->next)
43                 len++;
44         return len;
45 }
46
47 void list_move(list_t *node, int offset)
48 {
49 }