4.3BSD-Reno/src/contrib/jove/list.c

Compare this file to the similar file:
Show the results in this format:

#include "jove.h"
#include "list.h"

extern char	*emalloc();

private List *
list_new()
{
	List	*new;

	new = (List *) emalloc(sizeof (List));
	new->car = NIL;
	return new;
}

/* push an object to the beginning of list */

Element *
list_push(list, element)
register List	**list;
Element	*element;
{
	List	*new;

	new = list_new();
	new->cdr = *list;
	new->car = element;
	*list = new;
	return element;
}

Element *
list_pop(list)
List	**list;
{
	List	*cell;
	Element	*element;

	if (*list == NIL)
		return NIL;
	cell = *list;
	element = cell->car;
	free((char *) cell);
	*list = (*list)->cdr;

	return element;
}

#ifdef	NEVER
Element *
list_remove(list_head, element)
List	**list_head;
Element	*element;
{
	register List	*cp = *list_head,
			*prev = NIL;

	while (cp != NIL) {
		if (cp->car == element)
			break;
		prev = cp;
		cp = cp->cdr;
	}
	if (cp == NIL)
		return NIL;
	if (prev == NIL)
		*list_head = (*list_head)->cdr;
	else
		prev->cdr = cp->cdr;

	return element;
}

Element *
list_append(list, element)
List	**list;
Element	*element;
{
	List	*new, *lp;

	lp = *list;
	if (lp == NIL)
		return list_push(list, element);

	while (lp->cdr != NIL)
		lp = lp->cdr;
	new = list_new();
	lp->cdr = new;
	new->car = element;

	return element;
}

Element *
list_find(list, element)
List	*list;
Element	*element;
{
	while (list != NIL)
		if (list->car == element)
			return element;
	return NIL;
}
#endif	/* NEVER */