|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include "pret.h" ! 3: ! 4: #define MAXACTUALS (MANY) ! 5: ! 6: struct ACTUALS { ! 7: int typefs[MAXACTUALS]; /* queue mesg or pvar */ ! 8: int index [MAXACTUALS]; /* qid, if mesg */ ! 9: struct ACTUALS *nxtcall; ! 10: int nractuals; ! 11: int whattask; /* id of task called */ ! 12: }; ! 13: ! 14: struct ACTUALS *calls; /* procedure call data */ ! 15: int nrcalls; /* nr of procedure calls */ ! 16: ! 17: extern pid, rid, linenumber; ! 18: ! 19: newcalltable() ! 20: { nrcalls = 0; ! 21: calls = NULL; ! 22: } ! 23: ! 24: scrapcalltable() ! 25: { struct ACTUALS *tmp; ! 26: struct ACTUALS *hook = calls; ! 27: int i; ! 28: ! 29: for (i = 0; i < nrcalls; i++) ! 30: { tmp = hook; ! 31: hook = hook->nxtcall; ! 32: free(tmp); ! 33: } ! 34: } ! 35: ! 36: newcall(ofwhat) ! 37: { int i, j; ! 38: struct ACTUALS *new, *old; ! 39: ! 40: new = ( struct ACTUALS *) ! 41: Emalloc( sizeof(struct ACTUALS) ); ! 42: new->nractuals = 0; ! 43: new->whattask = ofwhat; ! 44: ! 45: if ((j = nrcalls++) == 0) ! 46: calls = new; ! 47: else ! 48: { old = calls; ! 49: for (i = 1; i < j; i++) ! 50: old = old->nxtcall; ! 51: old->nxtcall = new; ! 52: } ! 53: return nrcalls-1; ! 54: } ! 55: ! 56: putcalls(tb) ! 57: FILE *tb; ! 58: { struct ACTUALS *hook; ! 59: int j, k, a, b; ! 60: int maxm = 0; ! 61: int maxv = 0; ! 62: ! 63: fprintf(tb, "FCT_CALLS %d\n", nrcalls); ! 64: for (j = 0, hook = calls; j < nrcalls; j++) ! 65: { ! 66: for (k = a = b = 0; k < hook->nractuals; k++) ! 67: { if (hook->typefs[k] == ISM) ! 68: a++; ! 69: else if (hook->typefs[k] == ISV) ! 70: b++; ! 71: } ! 72: if (a > maxm) maxm = a; ! 73: if (b > maxv) maxv = b; ! 74: ! 75: fprintf(tb, "%d-%d/%d:", hook->whattask, a, b); ! 76: for (k = 0; k < hook->nractuals; k++) ! 77: { if (hook->typefs[k] != ISQ) ! 78: fprintf(tb, " %d/%d", hook->typefs[k], hook->index[k]); ! 79: } ! 80: putc('\n', tb); ! 81: hook = hook->nxtcall; ! 82: } ! 83: fprintf(tb, "PARS %d/%d\n", maxm, maxv); ! 84: } ! 85: ! 86: callentry(x, val) ! 87: { int i; ! 88: struct ACTUALS *hook = calls; ! 89: ! 90: for (i = 1; i < nrcalls; i++) ! 91: hook = hook->nxtcall; ! 92: ! 93: if ((i = hook->nractuals++) >= MAXACTUALS) ! 94: whoops("too many parameters"); ! 95: hook->typefs[i] = x; ! 96: hook->index[i] = val; ! 97: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.