|
|
1.1 root 1: #include "stdio.h"
2: #include "trace.h"
3: #include "trace.d"
4:
5: struct Swiffle *slist, *slast, *flast;
6: int nswiff = 0, fswiff = 0;
7:
8: struct Swiffle *
9: unswiffle(avoid)
10: struct STATE *avoid;
11: {
12: struct Swiffle *try, *result = (struct Swiffle *) NULL;
13: register int i;
14:
15: for (i = nswiff, try = slist; i > 0; i--, try = try->next)
16: if (try->st != avoid)
17: { result = try;
18: getput(try, i);
19: if (try->vi->analyzed == 0)
20: { fprintf(stderr, "assertion botched\n");
21: kill(getpid(), 3);
22: }
23: break;
24: }
25:
26: return result;
27: }
28:
29: swiffle(this, that)
30: struct STATE *this;
31: struct VISIT *that;
32: {
33: struct Swiffle *getswiff(), *try;
34:
35: try = getswiff();
36: try->st = this;
37: try->vi = that;
38:
39: if (nswiff++ == 0)
40: slist = try;
41: else
42: { slast->next = try;
43: try->last = slast;
44: }
45: slast = try;
46: }
47:
48: getput(try, n)
49: struct Swiffle *try;
50: {
51: /* unlink from slist: */
52: if (try == slist)
53: slist = try->next;
54: else
55: try->last->next = try->next;
56:
57: if (n > 1)
58: try->next->last = try->last;
59:
60: if (try == slast)
61: { if (try == slist)
62: slast = (struct Swiffle *) NULL;
63: else
64: slast = try->last;
65: }
66: nswiff--;
67:
68: /* relink in flist: */
69: try->next = (struct Swiffle *) NULL;
70:
71: if (fswiff++ == 0)
72: try->last = (struct Swiffle *) NULL;
73: else
74: { flast->next = try;
75: try->last = flast;
76: }
77: flast = try;
78: }
79:
80: struct Swiffle *
81: getswiff()
82: { struct Swiffle *try;
83:
84: if (fswiff == 0)
85: try = (struct Swiffle *) Smalloc(sizeof(struct Swiffle));
86: else
87: { fswiff--;
88: try = flast;
89: if ((flast = try->last) != NULL)
90: flast->next = (struct Swiffle *) NULL;
91: }
92: try->next = try->last = (struct Swiffle *) NULL;
93:
94: return try;
95: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.