/*Copyright (C) 1992, 1995 by Thomas Glen Smith. All Rights Reserved.*/
/* enqueue APL2 V1.0.0 *************************************************
* Called to insert a new element in a doubly linked list. *
***********************************************************************/
#define INCLUDES 0
#include "includes.h"
typedef struct el *El;
struct el { /* stack entry */
El nxt;
El lst;
};
void enqueue(hdr,old,new)
El hdr; /* head of list */
El old; /* element behind which to enqueue */
El new; /* element to add to list */
{
if (hdr->nxt == NULL) { /* empty list? */
hdr->nxt = hdr->lst = new;
new->nxt = new->lst = NULL;
}
else if (old == NULL) { /* new head of list? */
old = hdr->nxt;
hdr->nxt = new;
new->nxt = old;
old->lst = new;
new->lst = NULL;
}
else { /* insert or new tail */
new->nxt = old->nxt;
if (new->nxt == NULL)
hdr->lst = new; /* set new tail */
else new->nxt->lst = new;
old->nxt = new;
new->lst = old;
}
}