1 /*- 2 * Copyright (c) 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Ed James. 7 * 8 * %sccs.include.redist.c% 9 */ 10 11 /* 12 * Copyright (c) 1987 by Ed James, UC Berkeley. All rights reserved. 13 * 14 * Copy permission is hereby granted provided that this notice is 15 * retained on all partial or complete copies. 16 * 17 * For more info on this and all of my stuff, mail edjames@berkeley.edu. 18 */ 19 20 #ifndef lint 21 static char sccsid[] = "@(#)list.c 8.1 (Berkeley) 05/31/93"; 22 #endif /* not lint */ 23 24 #include "include.h" 25 26 PLANE * 27 newplane() 28 { 29 return ((PLANE *) calloc(1, sizeof (PLANE))); 30 } 31 32 append(l, p) 33 LIST *l; 34 PLANE *p; 35 { 36 PLANE *q = NULL, *r = NULL; 37 38 if (l->head == NULL) { 39 p->next = p->prev = NULL; 40 l->head = l->tail = p; 41 } else { 42 q = l -> head; 43 44 while (q != NULL && q->plane_no < p->plane_no) { 45 r = q; 46 q = q -> next; 47 } 48 49 if (q) { 50 if (r) { 51 p->prev = r; 52 r->next = p; 53 p->next = q; 54 q->prev = p; 55 } else { 56 p->next = q; 57 p->prev = NULL; 58 q->prev = p; 59 l->head = p; 60 } 61 } else { 62 l->tail->next = p; 63 p->next = NULL; 64 p->prev = l->tail; 65 l->tail = p; 66 } 67 } 68 } 69 70 delete(l, p) 71 LIST *l; 72 PLANE *p; 73 { 74 if (l->head == NULL) 75 loser(p, "deleted a non-existant plane! Get help!"); 76 77 if (l->head == p && l->tail == p) 78 l->head = l->tail = NULL; 79 else if (l->head == p) { 80 l->head = p->next; 81 l->head->prev = NULL; 82 } else if (l->tail == p) { 83 l->tail = p->prev; 84 l->tail->next = NULL; 85 } else { 86 p->prev->next = p->next; 87 p->next->prev = p->prev; 88 } 89 } 90