|
|
1.1 root 1: #include <stdio.h>
2: #include "trace.h"
3: #include "trace.d"
4:
5: extern int nrprocs, *processes, *state;
6:
7: char *Realloc(), *Emalloc(), *Smalloc();
8:
9: unsigned short **pstates;
10: int pgrowth = 32;
11: int nrpstates = 0;
12: int pbound = 0;
13:
14: growPtable()
15: { int p = pbound + pgrowth;
16:
17: if (p == pgrowth)
18: pstates = (unsigned short **)
19: Emalloc(p * sizeof(unsigned short *));
20: else
21: pstates = (unsigned short **)
22: Realloc(pstates, p * sizeof(unsigned short *));
23: pbound = p;
24: }
25:
26: unsigned short *
27: Pinsert()
28: { unsigned short *try;
29: register int i;
30:
31: if (nrpstates >= pbound)
32: growPtable();
33:
34: try = (unsigned short *)
35: Smalloc(nrprocs * sizeof(unsigned short));
36:
37: for (i = 0; i < nrprocs; i++)
38: try[i] = (unsigned short) (state[i] + (processes[i]<<10));
39:
40: pstates[nrpstates++] = try;
41:
42: return try;
43: }
44:
45: unsigned short *
46: inPtable()
47: { register int i;
48:
49: for (i = 0; i < nrpstates; i++)
50: if (sameP(pstates[i]))
51: return pstates[i];
52:
53: return Pinsert();
54: }
55:
56: sameP(at)
57: unsigned short *at;
58: { register int i;
59:
60: for (i = 0; i < nrprocs; i++)
61: { if ((at[i]&1023) != (unsigned short) state[i]
62: || at[i]>>10 != (unsigned short) processes[i])
63: return 0;
64: }
65: return 1;
66: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.