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 *
newplane()27 newplane()
28 {
29 return ((PLANE *) calloc(1, sizeof (PLANE)));
30 }
31
append(l,p)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
delete(l,p)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