diff options
| author | Pietro Gagliardi <[email protected]> | 2014-08-19 13:25:52 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-08-19 13:25:52 -0400 |
| commit | a3ff63490b80c9f744978f3cf6e096a066c626e3 (patch) | |
| tree | 309b82732f09d858beaa7c79fd34410fb3411417 /redo/modalqueue.c | |
| parent | e5759d80de62958b24d5fe18c7e8b2d4a8241cc0 (diff) | |
Split the modal queue stuff into its own files.
Diffstat (limited to 'redo/modalqueue.c')
| -rw-r--r-- | redo/modalqueue.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/redo/modalqueue.c b/redo/modalqueue.c new file mode 100644 index 0000000..7474c95 --- /dev/null +++ b/redo/modalqueue.c @@ -0,0 +1,48 @@ +// 19 august 2014 + +#include <stdlib.h> +#include "modalqueue.h" + +static struct { + int inmodal; + void **queue; + size_t len; + size_t cap; +} mq = { 0, NULL, 0, 0 }; + +void beginModal(void) +{ + mq.inmodal = 1; + if (mq.queue == NULL) { + mq.cap = 128; + mq.queue = (void **) malloc(mq.cap * sizeof (void *)); + if (mq.queue == NULL) + abort();//TODO + mq.len = 0; + } +} + +void endModal(void) +{ + size_t i; + + mq.inmodal = 0; + for (i = 0; i < mq.len; i++) + doissue(mq.queue[i]); + mq.len = 0; +} + +int queueIfModal(void *what) +{ + if (!mq.inmodal) + return 0; + mq.queue[mq.len] = what; + mq.len++; + if (mq.len >= mq.cap) { + mq.cap *= 2; + mq.queue = (void **) realloc(mq.queue, mq.cap * sizeof (void *)); + if (mq.queue == NULL) + abort();//TODO + } + return 1; +} |
