QUEUE.C

#include <windows.h> 
#include "queue.h"

qnode *addtoq(queue *q, void *p) {
qnode *t;

t = (qnode *) LocalAlloc(0, sizeof(qnode));
if (t == NULL) return NULL;
t->ptr = p;
t->next = NULL;
if (q->head == NULL) {
t->prev = NULL;
q->head = t;
q->tail = t;
} else {
t->prev = q->tail;
q->tail->next = t;
q->tail = t;
}

return t;
}

void *removeheadfromq(queue *q) {
qnode *t;
void *p;

if (q->head == NULL) return NULL;

t = q->head;
q->head = t->next;
if (q->head == NULL) q->tail = NULL;
else q->head->prev = NULL;
p = t->ptr;
LocalFree(t);

return p;
}

void *removeqnodefromq(queue *q, qnode *t) {
void *p;

if (q->head == t) q->head = t->next;
if (q->tail == t) q->tail = t->prev;
if (t->next != NULL) t->next->prev = t->prev;
if (t->prev != NULL) t->prev->next = t->next;
p = t->ptr;
LocalFree(t);

return p;
}

queue *newq(void) {
queue *q;

q = (queue *) LocalAlloc(0, sizeof(queue));
if (q == NULL) return NULL;
q->head = NULL;
q->tail = NULL;

return q;
}