From a3ff63490b80c9f744978f3cf6e096a066c626e3 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Tue, 19 Aug 2014 13:25:52 -0400 Subject: Split the modal queue stuff into its own files. --- redo/modalqueue.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 redo/modalqueue.c (limited to 'redo/modalqueue.c') 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 +#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; +} -- cgit v1.2.3