diff rogue4/list.c @ 12:9535a08ddc39

Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
author edwarj4
date Sat, 24 Oct 2009 16:52:52 +0000
parents
children 1b73a8641b37
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rogue4/list.c	Sat Oct 24 16:52:52 2009 +0000
@@ -0,0 +1,96 @@
+/*
+ * Functions for dealing with linked lists of goodies
+ *
+ * @(#)list.c	4.7 (Berkeley) 12/19/81
+ *
+ * Rogue: Exploring the Dungeons of Doom
+ * Copyright (C) 1980, 1981, 1982 Michael Toy, Ken Arnold and Glenn Wichman
+ * All rights reserved.
+ *
+ * See the file LICENSE.TXT for full copyright and licensing information.
+ */
+
+#include <stdlib.h>
+#include <curses.h>
+#include "rogue.h"
+
+/*
+ * detach:
+ *	Takes an item out of whatever linked list it might be in
+ */
+_detach(list, item)
+register THING **list, *item;
+{
+    if (*list == item)
+	*list = next(item);
+    if (prev(item) != NULL) item->l_prev->l_next = next(item);
+    if (next(item) != NULL) item->l_next->l_prev = prev(item);
+    item->l_next = NULL;
+    item->l_prev = NULL;
+}
+
+/*
+ * _attach:
+ *	add an item to the head of a list
+ */
+_attach(list, item)
+register THING **list, *item;
+{
+    if (*list != NULL)
+    {
+	item->l_next = *list;
+	(*list)->l_prev = item;
+	item->l_prev = NULL;
+    }
+    else
+    {
+	item->l_next = NULL;
+	item->l_prev = NULL;
+    }
+    *list = item;
+}
+
+/*
+ * _free_list:
+ *	Throw the whole blamed thing away
+ */
+_free_list(ptr)
+register THING **ptr;
+{
+    register THING *item;
+
+    while (*ptr != NULL)
+    {
+	item = *ptr;
+	*ptr = next(item);
+	discard(item);
+    }
+}
+
+/*
+ * discard:
+ *	Free up an item
+ */
+discard(item)
+register THING *item;
+{
+    total--;
+    free((char *) item);
+}
+
+/*
+ * new_item
+ *	Get a new item with a specified size
+ */
+THING *
+new_item()
+{
+    register THING *item;
+
+    if ((item = calloc(1, sizeof *item)) == NULL)
+	msg("ran out of memory after %d items", total);
+    else
+	total++;
+    item->l_next = item->l_prev = NULL;
+    return item;
+}