/* Header for queue management module */

typedef lword qelem;
typedef qelem selem;
struct queuelem { qelem elem;
		  struct queuelem *next;
		};
typedef struct queuelem *queue;
typedef queue stack;

#ifndef NO_PROTOTYPES
queue qinit(void);
stack push(stack,selem);
qelem qfront(queue);
queue qremove(queue);
queue qdelete(queue,qelem);
queue qrotate(queue);
void qfree(queue);
#else
queue qinit();
stack push();
qelem qfront();
queue qremove();
queue qdelete();
queue qrotate();
void qfree();
#endif

#define qinsert(q, e)	(((queue) push((stack) (q), (selem) (e)))->next)
#define qempty(q)	((q) == NULL)
#define pinsert(q, p)	(qinsert(q, (qelem) (p)))
#define pfront(q)	((word) qfront(q))
#define minsert(q, m)	(qinsert(q, (qelem) (m)))
#define mfront(q)	((message *) qfront(q))
#define mdelete(q, m)	(qdelete(q, (qelem) (m)))
#define mpush(q, m)	((queue) push((stack) q, (selem) m))
#define sfree(s)	qfree((queue) s)
#define sinit		qinit
#define pop(s)		((stack) qremove((queue) s))
#define top(s)		((selem) qfront((queue) s))
