Annotation of early-roguelike/rogue4/list.c, Revision 1.1
1.1 ! rubenllo 1: /*
! 2: * Functions for dealing with linked lists of goodies
! 3: *
! 4: * @(#)list.c 4.7 (Berkeley) 12/19/81
! 5: *
! 6: * Rogue: Exploring the Dungeons of Doom
! 7: * Copyright (C) 1980, 1981, 1982 Michael Toy, Ken Arnold and Glenn Wichman
! 8: * All rights reserved.
! 9: *
! 10: * See the file LICENSE.TXT for full copyright and licensing information.
! 11: */
! 12:
! 13: #include <stdlib.h>
! 14: #include <curses.h>
! 15: #include "rogue.h"
! 16:
! 17: /*
! 18: * detach:
! 19: * Takes an item out of whatever linked list it might be in
! 20: */
! 21: void
! 22: _detach(THING **list, THING *item)
! 23: {
! 24: if (*list == item)
! 25: *list = next(item);
! 26: if (prev(item) != NULL) item->l_prev->l_next = next(item);
! 27: if (next(item) != NULL) item->l_next->l_prev = prev(item);
! 28: item->l_next = NULL;
! 29: item->l_prev = NULL;
! 30: }
! 31:
! 32: /*
! 33: * _attach:
! 34: * add an item to the head of a list
! 35: */
! 36: void
! 37: _attach(THING **list, THING *item)
! 38: {
! 39: if (*list != NULL)
! 40: {
! 41: item->l_next = *list;
! 42: (*list)->l_prev = item;
! 43: item->l_prev = NULL;
! 44: }
! 45: else
! 46: {
! 47: item->l_next = NULL;
! 48: item->l_prev = NULL;
! 49: }
! 50: *list = item;
! 51: }
! 52:
! 53: /*
! 54: * _free_list:
! 55: * Throw the whole blamed thing away
! 56: */
! 57: void
! 58: _free_list(THING **ptr)
! 59: {
! 60: register THING *item;
! 61:
! 62: while (*ptr != NULL)
! 63: {
! 64: item = *ptr;
! 65: *ptr = next(item);
! 66: discard(item);
! 67: }
! 68: }
! 69:
! 70: /*
! 71: * discard:
! 72: * Free up an item
! 73: */
! 74: void
! 75: discard(THING *item)
! 76: {
! 77: total--;
! 78: free((char *) item);
! 79: }
! 80:
! 81: /*
! 82: * new_item
! 83: * Get a new item with a specified size
! 84: */
! 85: THING *
! 86: new_item(void)
! 87: {
! 88: register THING *item;
! 89:
! 90: if ((item = calloc(1, sizeof *item)) == NULL)
! 91: msg("ran out of memory after %d items", total);
! 92: else
! 93: total++;
! 94: item->l_next = item->l_prev = NULL;
! 95: return item;
! 96: }
CVSweb