
1: /* $NetBSD: list.c,v 1.6 2003/08/07 09:36:54 agc Exp $ */ 2: 3: /*- 4: * Copyright (c) 1990, 1993 5: * The Regents of the University of California. All rights reserved. 6: * 7: * This code is derived from software contributed to Berkeley by 8: * Ed James. 9: * 10: * Redistribution and use in source and binary forms, with or without 11: * modification, are permitted provided that the following conditions 12: * are met: 13: * 1. Redistributions of source code must retain the above copyright 14: * notice, this list of conditions and the following disclaimer. 15: * 2. Redistributions in binary form must reproduce the above copyright 16: * notice, this list of conditions and the following disclaimer in the 17: * documentation and/or other materials provided with the distribution. 18: * 3. Neither the name of the University nor the names of its contributors 19: * may be used to endorse or promote products derived from this software 20: * without specific prior written permission. 21: * 22: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 23: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 26: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32: * SUCH DAMAGE. 33: */ 34: 35: /* 36: * Copyright (c) 1987 by Ed James, UC Berkeley. All rights reserved. 37: * 38: * Copy permission is hereby granted provided that this notice is 39: * retained on all partial or complete copies. 40: * 41: * For more info on this and all of my stuff, mail edjames@berkeley.edu. 42: */ 43: 44: #include <sys/cdefs.h> 45: #ifndef lint 46: #if 0 47: static char sccsid[] = "@(#)list.c 8.1 (Berkeley) 5/31/93"; 48: #else 49: __RCSID("$NetBSD: list.c,v 1.6 2003/08/07 09:36:54 agc Exp $"); 50: #endif 51: #endif /* not lint */ 52: 53: #include "include.h" 54: 55: PLANE * 56: newplane() 57: { 58: return ((PLANE *) calloc(1, sizeof (PLANE))); 59: } 60: 61: void 62: append(l, p) 63: LIST *l; 64: PLANE *p; 65: { 66: PLANE *q = NULL, *r = NULL; 67: 68: if (l->head == NULL) { 69: p->next = p->prev = NULL; 70: l->head = l->tail = p; 71: } else { 72: q = l -> head; 73: 74: while (q != NULL && q->plane_no < p->plane_no) { 75: r = q; 76: q = q -> next; 77: } 78: 79: if (q) { 80: if (r) { 81: p->prev = r; 82: r->next = p; 83: p->next = q; 84: q->prev = p; 85: } else { 86: p->next = q; 87: p->prev = NULL; 88: q->prev = p; 89: l->head = p; 90: } 91: } else { 92: l->tail->next = p; 93: p->next = NULL; 94: p->prev = l->tail; 95: l->tail = p; 96: } 97: } 98: } 99: 100: void 101: delete(l, p) 102: LIST *l; 103: PLANE *p; 104: { 105: if (l->head == NULL) 106: loser(p, "deleted a non-existent plane! Get help!"); 107: 108: if (l->head == p && l->tail == p) 109: l->head = l->tail = NULL; 110: else if (l->head == p) { 111: l->head = p->next; 112: l->head->prev = NULL; 113: } else if (l->tail == p) { 114: l->tail = p->prev; 115: l->tail->next = NULL; 116: } else { 117: p->prev->next = p->next; 118: p->next->prev = p->prev; 119: } 120: }