/* dequeue.c - support routines to manage a doubly linked queue */ #include #include "dequeue.h" #define ERROR -1 QUEUE Nodeq = {&Nodeq, &Nodeq, ERROR}; /* semaphore element */ QUEUE *qNode = &Nodeq; /* pointer to semaphore */ void mDeQue(f) /* remove element f from dequeue */ QUEUE *f; { #if defined(DEBUG) && defined(QDEBUG) printf("mDeQue:"); qDump(); #endif f->pNode->nNode = f->nNode; f->nNode->pNode = f->pNode; /* make degenerate solitary queue */ f->pNode = f->nNode = f; #if defined(DEBUG) && defined(QDEBUG) qDump(); #endif } void mEnQue(f) /* add element f to head of dequeue */ QUEUE *f; { #if defined(DEBUG) && defined(QDEBUG) printf("mEnQue:",f); dump(f); qDump(); #endif f->nNode = firstNode; f->pNode = qNode; firstNode->pNode = f; firstNode = f; #if defined(DEBUG) && defined(QDEBUG) qDump(); #endif } void mSplice(f) /* move element f to head of dequeue */ QUEUE *f; { mDeQue(f); mEnQue(f); } /* end of dequeue.c */