|
|
1.1 ! root 1: struct ELM { ! 2: short transf; /* next state function */ ! 3: short valtrans; /* value transferred */ ! 4: }; ! 5: ! 6: struct IND { ! 7: short nrpils; ! 8: struct ELM *one; ! 9: }; ! 10: ! 11: struct VARPARS { ! 12: short nrms, *ms; /* message parameters */ ! 13: short nrvs, *vs; /* pvar parameters */ ! 14: short nrlvars, *lvarvals; /* local variables */ ! 15: }; ! 16: ! 17: struct TBLPARS { ! 18: short nrms; ! 19: short nrvs; /* max available space for params */ ! 20: short nrlvars; /* max available space for locvars */ ! 21: }; ! 22: ! 23: struct LOCVARS { ! 24: short nrlvars, *lvarvals; ! 25: }; ! 26: ! 27: struct CPARS { ! 28: short callwhat; ! 29: short nrms, *ms; /* message parameters */ ! 30: short nrvs, *vs; /* pvar parameters */ ! 31: }; ! 32: ! 33: struct LBT { ! 34: int *mapcol, *orgcol; /* mapped versions of colmap and colorg */ ! 35: }; ! 36: ! 37: /* ! 38: * endrow: proper endstates of the process table ! 39: * deadrow: set if deadend (eg return state) ! 40: * badrow: row with at least one output option ! 41: * labrow: labeled row (potential start of a loop) ! 42: */ ! 43: ! 44: struct TBL { ! 45: int nrrows, nrcols; ! 46: int *endrow, *deadrow, *badrow, *labrow; ! 47: int *colmap, *colorg, *coltyp; ! 48: ! 49: struct IND **ptr; ! 50: struct CPARS *calls; ! 51: }; ! 52: ! 53: struct MBOX { ! 54: char limit; /* length of queue */ ! 55: char owner; /* the process reading from this queue */ ! 56: char qname[PLENTY]; /* user-level name for the queue */ ! 57: }; ! 58: ! 59: struct MNAME { ! 60: char mname[PLENTY]; ! 61: }; ! 62: ! 63: struct BLTIN { ! 64: short target; ! 65: short type; ! 66: short value; ! 67: }; ! 68: ! 69: struct REVPOL { ! 70: char toktyp; ! 71: short tokval; ! 72: }; ! 73: ! 74: struct PROCSTACK { ! 75: short uptable; /* table where we come from */ ! 76: short uptransf; /* pending transition in that table */ ! 77: ! 78: struct VARPARS *varparsaved; /* saves parameters and locals */ ! 79: struct PROCSTACK *follow; /* next stackframe */ ! 80: }; ! 81: ! 82: #define USED 32768 ! 83: #define PASSED 16384 ! 84: ! 85: struct QUEUE { ! 86: short mesg; /* on rcv PASSED is OR'ed in */ ! 87: unsigned short cargo; /* when set USED is OR'ed in */ ! 88: struct QUEUE *next; ! 89: struct QUEUE *last; ! 90: struct QUEUE *s_forw; ! 91: struct QUEUE *s_back; ! 92: }; ! 93: ! 94: struct CONTS { ! 95: short mesg; ! 96: unsigned short cargo; ! 97: }; ! 98: ! 99: struct TUPLE { ! 100: short prev; ! 101: short pmap; ! 102: }; ! 103: ! 104: struct STATE { ! 105: short hash; ! 106: int nrvisits; /* nr of returns to this state (diff q's) */ ! 107: ! 108: short *g_vars; /* current globals */ ! 109: struct TUPLE *trip; /* old states, and maps */ ! 110: struct LOCVARS **l_vars; /* current local vars */ ! 111: struct PROCSTACK **traceback; /* traceback of complete stack */ ! 112: ! 113: struct VISIT *next; /* for loop analysis along a single path */ ! 114: }; ! 115: ! 116: struct STUFF { ! 117: struct QUEUE *s; /* pntr to last message sent */ ! 118: }; ! 119: ! 120: struct VISIT { ! 121: char analyzed; /* set when done with tree below this node */ ! 122: char howmany; /* how many queues are nonempty when analyzed */ ! 123: struct { ! 124: struct STUFF *h; /* when searching, points into history */ ! 125: struct CONTS **c; /* when analyzed, points to qcontents */ ! 126: } prop; ! 127: struct VISIT *next; ! 128: }; ! 129: ! 130: /* ! 131: * normal ppushes (via forward()) save the parameters in the procstack ! 132: * so that the corresponding ppop (via backup()) can reset them properly ! 133: * ! 134: * series of ppushes and ppops, performed in a single freeze() call ! 135: * (via the retable() and dotable() subroutines) are different: ! 136: * ! 137: * additional ppushes are no problem, since they save the ! 138: * proper state information via the normal route ! 139: * ! 140: * additional ppops however would lose the procstacked info ! 141: * that info is stored in the CUBE structure so that when ! 142: * a ppop from freeze() is undone in unfreeze() ! 143: * the proper state information can be restored onto the procstack ! 144: */ ! 145: ! 146: struct CUBE { ! 147: short poporpush; ! 148: short which; ! 149: short procsaved; ! 150: short transfsaved; ! 151: ! 152: struct VARPARS *varparsaved; /* parameter map and local var map */ ! 153: ! 154: struct CUBE *pntr; ! 155: struct CUBE *rtnp; ! 156: }; ! 157: ! 158: struct FREEZE { ! 159: short lastsav; ! 160: short *statsaved; /* save states of tables */ ! 161: short *varsaved; /* save global variables */ ! 162: ! 163: short whichvar; /* set if a var changed */ ! 164: short oldvalue; /* of that loc var */ ! 165: ! 166: struct CUBE *cube; /* place to save stackframe */ ! 167: }; ! 168: ! 169: #define NSPOKES 10 ! 170: ! 171: struct Spoke { /* spokes and wheels are used in trace8.c */ ! 172: struct STATE *st; ! 173: struct VISIT *vi; ! 174: }; ! 175: struct Wheel { ! 176: struct Spoke spoke[NSPOKES]; ! 177: short n; ! 178: }; ! 179: ! 180: struct Swiffle { ! 181: struct STATE *st; ! 182: struct VISIT *vi; ! 183: struct Swiffle *next; ! 184: struct Swiffle *last; ! 185: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.