Mercurial > hg > early-roguelike
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; +}