62 lines
1.7 KiB
C
62 lines
1.7 KiB
C
/*
|
|
+----------------------------------------------------+
|
|
| Thunderbird Software |
|
|
+----------------------------------------------------+
|
|
| Filespec : Queue.c |
|
|
| Date : September 29, 1994 |
|
|
| Time : 10:16AM |
|
|
| Revision : 1.0 |
|
|
+----------------------------------------------------+
|
|
| Programmer: Scott Andrews |
|
|
| Address : 5358 Summit RD SW |
|
|
| City/State: Pataskala, Ohio |
|
|
| Zip : 43062 |
|
|
+----------------------------------------------------+
|
|
| Released to the Public Domain |
|
|
+----------------------------------------------------+
|
|
*/
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include "queue.h"
|
|
|
|
QUEUE *alloc_queue( int size)
|
|
{ QUEUE *retval;
|
|
retval = (QUEUE *) malloc( sizeof( QUEUE) + (size_t) size);
|
|
if ( (QUEUE *) 0 != retval)
|
|
{ retval->size = size;
|
|
retval->head = 0;
|
|
retval->tail = 0;
|
|
retval->avail = size;
|
|
retval->buffer = ( (char *) retval) + sizeof( QUEUE);
|
|
}
|
|
return retval;
|
|
}
|
|
|
|
int en_queue( QUEUE *queue, char data)
|
|
{ int retval = -1;
|
|
if ( 0 != queue->avail)
|
|
{ *( queue->buffer + queue->head) = data;
|
|
queue->head += 1;
|
|
if ( queue->head == queue->size)
|
|
queue->head = 0;
|
|
queue->avail -= 1;
|
|
retval = queue->avail;
|
|
}
|
|
return retval;
|
|
}
|
|
|
|
int de_queue( QUEUE *queue)
|
|
{ int retval = -1;
|
|
if ( queue->avail != queue->size)
|
|
{ retval = *( queue->buffer + queue->tail);
|
|
queue->tail += 1;
|
|
if ( queue->tail == queue->size)
|
|
queue->tail = 0;
|
|
queue->avail += 1;
|
|
}
|
|
return retval;
|
|
}
|
|
|
|
/* End of Queue.c */
|