|
|
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: char **rowname; ! 49: ! 50: struct IND **ptr; ! 51: struct CPARS *calls; ! 52: }; ! 53: ! 54: struct MBOX { ! 55: char limit; /* length of queue */ ! 56: char owner; /* the process reading from this queue */ ! 57: char qname[PLENTY]; /* user-level name for the queue */ ! 58: }; ! 59: ! 60: struct MNAME { ! 61: char mname[PLENTY]; ! 62: }; ! 63: ! 64: struct BLTIN { ! 65: short target; ! 66: short type; ! 67: short value; ! 68: }; ! 69: ! 70: struct REVPOL { ! 71: char toktyp; ! 72: short tokval; ! 73: }; ! 74: ! 75: struct PROCSTACK { ! 76: short uptable; /* table where we come from */ ! 77: short uptransf; /* pending transition in that table */ ! 78: ! 79: struct VARPARS *varparsaved; /* saves parameters and locals */ ! 80: struct PROCSTACK *follow; /* next stackframe */ ! 81: }; ! 82: ! 83: #define USED 32768 ! 84: #define PASSED 16384 ! 85: #define TRAIL 1 ! 86: ! 87: struct QUEUE { ! 88: short mesg; /* on rcv PASSED is OR'ed in */ ! 89: unsigned short cargo; /* when set USED is OR'ed in */ ! 90: #if TRAIL ! 91: short tstate[2]; /* linecode reference */ ! 92: #endif TRAIL ! 93: struct QUEUE *next; ! 94: struct QUEUE *last; ! 95: struct QUEUE *s_forw; ! 96: struct QUEUE *s_back; ! 97: }; ! 98: ! 99: struct CONTS { ! 100: short mesg; ! 101: unsigned short cargo; ! 102: }; ! 103: ! 104: struct TEMPLATE { ! 105: short *g_vars; /* current globals */ ! 106: struct LOCVARS **l_vars; /* current local vars */ ! 107: struct PROCSTACK **traceback; /* traceback of complete stack */ ! 108: }; ! 109: ! 110: struct STATE { ! 111: unsigned short *pstate; /* old states & maps */ ! 112: struct TEMPLATE *pcon; /* variables and stacks */ ! 113: struct VISIT *next; ! 114: }; ! 115: ! 116: #define ANALYZED 16384 ! 117: ! 118: struct VISIT { ! 119: unsigned int howmany; /* which queues are nonempty */ ! 120: struct CONTS **c; /* queue contents */ ! 121: union { ! 122: struct QUEUE *s; /* when searching, last message sent */ ! 123: short countme; /* when analyzed, counts nr of returns */ ! 124: } prop; ! 125: unsigned short depth; /* level of first visit, ANALYZED is OR'ed in */ ! 126: struct VISIT *next; ! 127: }; ! 128: ! 129: #define ISANA(x) (x->depth & ANALYZED) ! 130: #define DEPTH(x) (x->depth & ~ANALYZED) ! 131: ! 132: /* ! 133: * normal ppushes (via forward()) save the parameters in the procstack ! 134: * so that the corresponding ppop (via backup()) can reset them properly ! 135: * ! 136: * series of ppushes and ppops, performed in a single freeze() call ! 137: * (via the retable() and dotable() subroutines) are different: ! 138: * ! 139: * additional ppushes are no problem, since they save the ! 140: * proper state information via the normal route ! 141: * ! 142: * additional ppops however would lose the procstacked info ! 143: * that info is stored in the CUBE structure so that when ! 144: * a ppop from freeze() is undone in unfreeze() ! 145: * the proper state information can be restored onto the procstack ! 146: */ ! 147: ! 148: struct CUBE { ! 149: short poporpush; ! 150: short which; ! 151: short procsaved; ! 152: short transfsaved; ! 153: ! 154: struct VARPARS *varparsaved; /* parameter map and local var map */ ! 155: ! 156: struct CUBE *pntr; ! 157: struct CUBE *rtnp; ! 158: }; ! 159: ! 160: struct FREEZE { ! 161: short lastsav; ! 162: short *statsaved; /* save states of tables */ ! 163: short *varsaved; /* save global variables */ ! 164: short whichvar; /* set if a var changed */ ! 165: short oldvalue; /* of that loc var */ ! 166: ! 167: struct CUBE *cube; /* place to save stackframe */ ! 168: }; ! 169: ! 170: struct Swiffle { ! 171: struct STATE *st; ! 172: struct VISIT *vi; ! 173: struct Swiffle *next; ! 174: struct Swiffle *last; ! 175: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.