|
|
1.1 ! root 1: extern struct _iobuf { ! 2: int _cnt; ! 3: char *_ptr; ! 4: char *_base; ! 5: short _flag; ! 6: char _file; ! 7: } _iob[20]; ! 8: struct _iobuf *fopen(); ! 9: struct _iobuf *fdopen(); ! 10: struct _iobuf *freopen(); ! 11: long ftell(); ! 12: char *fgets(); ! 13: struct _Point { ! 14: int x; ! 15: int y; ! 16: }; ! 17: struct _Rectangle { ! 18: struct _Point ll; ! 19: struct _Point ur; ! 20: }; ! 21: struct _Object { ! 22: struct _Object *link; ! 23: }; ! 24: struct _Pool { ! 25: struct _Object *freelist; ! 26: struct _Object *arealist; ! 27: int objsize; ! 28: }; ! 29: struct _Vpool { ! 30: struct _Object *next; ! 31: struct _Object *arealist; ! 32: int left; ! 33: int quantum; ! 34: }; ! 35: struct _SEQFILE { ! 36: int hidden; ! 37: }; ! 38: extern char *myname; ! 39: extern int nullstring; ! 40: extern char *stringtab; ! 41: extern char *execname(); ! 42: extern struct _iobuf *chkfopen(); ! 43: extern struct _Pool *newpool(); ! 44: extern struct _Vpool *newvpool(); ! 45: extern char *maketemp(); ! 46: extern char *permspace(); ! 47: extern struct _SEQFILE *seqopen(); ! 48: extern char *strchr(); ! 49: extern char *strrchr(); ! 50: extern char debug; ! 51: struct _Bsim_hd { ! 52: int magic; ! 53: int vdd; ! 54: int vss; ! 55: int offtrans; ! 56: int offcap; ! 57: int ntrans; ! 58: int maxnode; ! 59: int offarrays; ! 60: int ngroups; ! 61: int nnodes; ! 62: int nsws; ! 63: int nargs; ! 64: int nops; ! 65: int nctrls; ! 66: char clean; ! 67: }; ! 68: struct _Bsim_tr { ! 69: char type; ! 70: char selfgate; ! 71: int group; ! 72: int numb; ! 73: float length; ! 74: float width; ! 75: int src; ! 76: int drn; ! 77: int gate; ! 78: }; ! 79: union _Objgroup { ! 80: struct { ! 81: char type; ! 82: char powstr; ! 83: short nnodes; ! 84: int nodeoffset; ! 85: int domoffset; ! 86: int vssoffset; ! 87: int vddoffset; ! 88: } gen; ! 89: struct { ! 90: char type; ! 91: int opoffset; ! 92: int argoffset; ! 93: int nodeoffset; ! 94: } pol; ! 95: struct { ! 96: char type; ! 97: int inoffset; ! 98: int outoffset; ! 99: int nodeoffset; ! 100: } inv; ! 101: }; ! 102: struct _Objnode { ! 103: int orignum; ! 104: int size; ! 105: int ctrloffset; ! 106: int swoffset; ! 107: char selfgate; ! 108: }; ! 109: struct _Objsw { ! 110: char flags; ! 111: char str; ! 112: short relnode; ! 113: int gate; ! 114: }; ! 115: struct _Objctrl { ! 116: int group; ! 117: int gate; ! 118: }; ! 119: extern struct _Bsim_tr *firsttrans (); ! 120: extern struct _Bsim_tr *nexttrans (); ! 121: union _Group { ! 122: struct { ! 123: union _Group *qlink; ! 124: struct _Node *nodelist; ! 125: char type; ! 126: char powstr; ! 127: short nnodes; ! 128: char *domtab; ! 129: struct _Sw *vsslist; ! 130: struct _Sw *vddlist; ! 131: } gen; ! 132: struct { ! 133: union _Group *qlink; ! 134: struct _Node *nodelist; ! 135: char type; ! 136: char *oplist; ! 137: struct _Node **arglist; ! 138: } pol; ! 139: struct { ! 140: union _Group *qlink; ! 141: struct _Node *nodelist; ! 142: char type; ! 143: struct _Node *input; ! 144: struct _Node *output; ! 145: } inv; ! 146: }; ! 147: struct _Delay { ! 148: struct _Delay *forw; ! 149: struct _Delay *back; ! 150: union _Group **ctrllist; ! 151: struct _Node *node; ! 152: char delta[3]; ! 153: int when; ! 154: } ; ! 155: struct _Node { ! 156: char val; ! 157: char nextval; ! 158: char flags; ! 159: char size; ! 160: int orignum; ! 161: union { ! 162: union _Group **ctrllist; ! 163: struct _Delay *delay; ! 164: } u; ! 165: struct _Sw *swlist; ! 166: }; ! 167: struct _Sw { ! 168: char flags; ! 169: char str; ! 170: short relnode; ! 171: struct _Node *gate; ! 172: }; ! 173: struct _Tnode { ! 174: struct _Tnode *forw; ! 175: struct _Tnode *back; ! 176: char str0; ! 177: char str1; ! 178: char xstr0; ! 179: char xstr1; ! 180: char val; ! 181: struct _Sw *swlist; ! 182: }; ! 183: extern char nottab []; ! 184: extern char *nettoname(); ! 185: extern char valstring[]; ! 186: extern char dqueue; ! 187: extern char devalgen; ! 188: extern char ddelay; ! 189: extern struct _Node *findnode(); ! 190: extern struct _Node *nettonode(); ! 191: extern union _Group *nodetogroup(); ! 192: extern union _Group **getctrllist(); ! 193: extern char debug; ! 194: extern struct _SEQFILE *objfile; ! 195: extern struct _Bsim_hd header; ! 196: extern union _Group *group; ! 197: extern union _Group **ctrl; ! 198: extern struct _Node *node; ! 199: extern struct _Sw *sw; ! 200: extern struct _Node **arg; ! 201: extern char *op; ! 202: extern struct _Tnode *tnode; ! 203: extern struct _Tnode *list; ! 204: extern union _Group endofq; ! 205: extern union _Group *firstonq; ! 206: extern union _Group *lastonq; ! 207: static struct _Node *firstnode, *lastnode; ! 208: static struct _Tnode *pasttnode; ! 209: static struct _Tnode *toplist; ! 210: static char anyxs; ! 211: static char *tnodename (this) ! 212: register struct _Tnode *this; ! 213: { ! 214: register int n; ! 215: switch (n = this - tnode) { ! 216: case 0: ! 217: return "vss"; ! 218: case 1: ! 219: return "vdd"; ! 220: default: ! 221: return nettoname (firstnode[n-2].orignum); ! 222: } ! 223: } ! 224: prop_on (domtab) ! 225: register char *domtab; ! 226: { ! 227: register struct _Tnode *this, *that, *newl; ! 228: register struct _Sw *s; ! 229: struct _Tnode *l; ! 230: char v; ! 231: for (l = toplist; l > &list[0]; l--) { ! 232: if (devalgen) ! 233: printf ("prop_on level %d\n", l-list); ! 234: for (this = l->forw; this != l; this = this->forw) { ! 235: if (this->str0 == l->str0) { ! 236: if ( (domtab[this->str1] >= ( this->str0))) ! 237: continue; ! 238: if (this->str1 == this->str0) { ! 239: { if (devalgen) printf ("\tonprop from %s, myval_%d\n", tnodename(this), 2); s = this->swlist; if (s != 0) { for (;;) { switch (s->gate->val) { default: fatal ("bad val"); case 2: anyxs = 1; break; case 0: if ( ! (s->flags & 0x02)) break; that = &tnode[s->relnode]; if (s->flags & 0x08 && this->val == 0 && that->val == 0) break; goto labx; case 1: if (s->flags & 0x02) break; that = &tnode[s->relnode]; if (s->flags & 0x08 && this->val == 1 && that->val == 1) break; labx: if (2 != 1) { { (v) = ( this->str0); if (( this->str0) > ( s->str)) (v) = ( s->str); }; if (v > that->str0) { that->str0 = v; if (v > that->str1) { { (that)->forw->back = (that)->back; (that)->back->forw = (that)->forw; }; newl = &list[v]; { (that)->back = ( newl)->back; ( newl)->back = (that); (that)->forw = ( newl); (that)->back->forw = (that); }; } } } if (2 != 0) { { (v) = ( this->str1); if (( this->str1) > ( s->str)) (v) = ( s->str); }; if (v > that->str1) { that->str1 = v; if (v > that->str0) { { (that)->forw->back = (that)->back; (that)->back->forw = (that)->forw; }; newl = &list[v]; { (that)->back = ( newl)->back; ( newl)->back = (that); (that)->forw = ( newl); (that)->back->forw = (that); }; } } } break; } if (s->flags & 0x04) break; s++; } } }; ! 240: continue; ! 241: } else { ! 242: { if (devalgen) printf ("\tonprop from %s, myval_%d\n", tnodename(this), 0); s = this->swlist; if (s != 0) { for (;;) { switch (s->gate->val) { default: fatal ("bad val"); case 2: anyxs = 1; break; case 0: if ( ! (s->flags & 0x02)) break; that = &tnode[s->relnode]; if (s->flags & 0x08 && this->val == 0 && that->val == 0) break; goto lab0; case 1: if (s->flags & 0x02) break; that = &tnode[s->relnode]; if (s->flags & 0x08 && this->val == 1 && that->val == 1) break; lab0: if (0 != 1) { { (v) = ( this->str0); if (( this->str0) > ( s->str)) (v) = ( s->str); }; if (v > that->str0) { that->str0 = v; if (v > that->str1) { { (that)->forw->back = (that)->back; (that)->back->forw = (that)->forw; }; newl = &list[v]; { (that)->back = ( newl)->back; ( newl)->back = (that); (that)->forw = ( newl); (that)->back->forw = (that); }; } } } if (0 != 0) { { (v) = ( this->str1); if (( this->str1) > ( s->str)) (v) = ( s->str); }; if (v > that->str1) { that->str1 = v; if (v > that->str0) { { (that)->forw->back = (that)->back; (that)->back->forw = (that)->forw; }; newl = &list[v]; { (that)->back = ( newl)->back; ( newl)->back = (that); (that)->forw = ( newl); (that)->back->forw = (that); }; } } } break; } if (s->flags & 0x04) break; s++; } } }; ! 243: if ( (domtab[this->str0] >= ( this->str1))) ! 244: continue; ! 245: if (this->str0 < this->str1) ! 246: continue; ! 247: newl = &list[this->str1]; ! 248: } ! 249: } else { ! 250: if ( (domtab[this->str0] >= ( this->str1))) ! 251: continue; ! 252: { if (devalgen) printf ("\tonprop from %s, myval_%d\n", tnodename(this), 1); s = this->swlist; if (s != 0) { for (;;) { switch (s->gate->val) { default: fatal ("bad val"); case 2: anyxs = 1; break; case 0: if ( ! (s->flags & 0x02)) break; that = &tnode[s->relnode]; if (s->flags & 0x08 && this->val == 0 && that->val == 0) break; goto lab1; case 1: if (s->flags & 0x02) break; that = &tnode[s->relnode]; if (s->flags & 0x08 && this->val == 1 && that->val == 1) break; lab1: if (1 != 1) { { (v) = ( this->str0); if (( this->str0) > ( s->str)) (v) = ( s->str); }; if (v > that->str0) { that->str0 = v; if (v > that->str1) { { (that)->forw->back = (that)->back; (that)->back->forw = (that)->forw; }; newl = &list[v]; { (that)->back = ( newl)->back; ( newl)->back = (that); (that)->forw = ( newl); (that)->back->forw = (that); }; } } } if (1 != 0) { { (v) = ( this->str1); if (( this->str1) > ( s->str)) (v) = ( s->str); }; if (v > that->str1) { that->str1 = v; if (v > that->str0) { { (that)->forw->back = (that)->back; (that)->back->forw = (that)->forw; }; newl = &list[v]; { (that)->back = ( newl)->back; ( newl)->back = (that); (that)->forw = ( newl); (that)->back->forw = (that); }; } } } break; } if (s->flags & 0x04) break; s++; } } }; ! 253: if ( (domtab[this->str1] >= ( this->str0))) ! 254: continue; ! 255: if (this->str1 < this->str0) ! 256: continue; ! 257: newl = &list[this->str0]; ! 258: } ! 259: that = this->forw; ! 260: { (this)->forw->back = (this)->back; (this)->back->forw = (this)->forw; }; ! 261: { (this)->back = ( newl)->back; ( newl)->back = (this); (this)->forw = ( newl); (this)->back->forw = (this); }; ! 262: this = that->back; ! 263: } ! 264: } ! 265: } ! 266: prop_xon (domtab) ! 267: register char *domtab; ! 268: { ! 269: register struct _Tnode *this, *that, *newl; ! 270: register struct _Sw *s; ! 271: struct _Tnode *l; ! 272: char v; ! 273: for (l = toplist; l > &list[0]; l--) { ! 274: if (devalgen) ! 275: printf ("prop_xon level %d\n", l-list); ! 276: for (this = l->forw; this != l; this = this->forw) { ! 277: if (this->xstr0 == l->str0) { ! 278: if ( (domtab[this->xstr1] >= ( this->xstr0))) ! 279: continue; ! 280: if (this->xstr1 == this->xstr0) { ! 281: { if (devalgen) printf ("\txonprop from %s, myval_%d\n", tnodename(this), 2); s = this->swlist; if (s != 0) { for (;;) { switch (s->gate->val) { default: fatal ("bad val"); case 0: if ( ! (s->flags & 0x02)) break; that = &tnode[s->relnode]; if (s->flags & 0x08 && this->val == 0 && that->val == 0) break; goto labx; case 2: that = &tnode[s->relnode]; if (s->flags & 0x02) { if (s->flags & 0x08 && this->val == 0 && that->val == 0) break; } else { if (s->flags & 0x08 && this->val == 1 && that->val == 1) break; } goto labx; case 1: if (s->flags & 0x02) break; that = &tnode[s->relnode]; if (s->flags & 0x08 && this->val == 1 && that->val == 1) break; labx: if (2 != 1) { { (v) = ( this->xstr0); if (( this->xstr0) > ( s->str)) (v) = ( s->str); }; if (v > that->xstr0) { that->xstr0 = v; if (v > that->xstr1) { { (that)->forw->back = (that)->back; (that)->back->forw = (that)->forw; }; newl = &list[v]; { (that)->back = ( newl)->back; ( newl)->back = (that); (that)->forw = ( newl); (that)->back->forw = (that); }; } } } if (2 != 0) { { (v) = ( this->xstr1); if (( this->xstr1) > ( s->str)) (v) = ( s->str); }; if (v > that->xstr1) { that->xstr1 = v; if (v > that->xstr0) { { (that)->forw->back = (that)->back; (that)->back->forw = (that)->forw; }; newl = &list[v]; { (that)->back = ( newl)->back; ( newl)->back = (that); (that)->forw = ( newl); (that)->back->forw = (that); }; } } } break; } if (s->flags & 0x04) break; s++; } } }; ! 282: continue; ! 283: } else { ! 284: { if (devalgen) printf ("\txonprop from %s, myval_%d\n", tnodename(this), 0); s = this->swlist; if (s != 0) { for (;;) { switch (s->gate->val) { default: fatal ("bad val"); case 0: if ( ! (s->flags & 0x02)) break; that = &tnode[s->relnode]; if (s->flags & 0x08 && this->val == 0 && that->val == 0) break; goto lab0; case 2: that = &tnode[s->relnode]; if (s->flags & 0x02) { if (s->flags & 0x08 && this->val == 0 && that->val == 0) break; } else { if (s->flags & 0x08 && this->val == 1 && that->val == 1) break; } goto lab0; case 1: if (s->flags & 0x02) break; that = &tnode[s->relnode]; if (s->flags & 0x08 && this->val == 1 && that->val == 1) break; lab0: if (0 != 1) { { (v) = ( this->xstr0); if (( this->xstr0) > ( s->str)) (v) = ( s->str); }; if (v > that->xstr0) { that->xstr0 = v; if (v > that->xstr1) { { (that)->forw->back = (that)->back; (that)->back->forw = (that)->forw; }; newl = &list[v]; { (that)->back = ( newl)->back; ( newl)->back = (that); (that)->forw = ( newl); (that)->back->forw = (that); }; } } } if (0 != 0) { { (v) = ( this->xstr1); if (( this->xstr1) > ( s->str)) (v) = ( s->str); }; if (v > that->xstr1) { that->xstr1 = v; if (v > that->xstr0) { { (that)->forw->back = (that)->back; (that)->back->forw = (that)->forw; }; newl = &list[v]; { (that)->back = ( newl)->back; ( newl)->back = (that); (that)->forw = ( newl); (that)->back->forw = (that); }; } } } break; } if (s->flags & 0x04) break; s++; } } }; ! 285: if ( (domtab[this->xstr0] >= ( this->xstr1))) ! 286: continue; ! 287: if (this->xstr0 < this->xstr1) ! 288: continue; ! 289: newl = &list[this->xstr1]; ! 290: } ! 291: } else { ! 292: if ( (domtab[this->xstr0] >= ( this->xstr1))) ! 293: continue; ! 294: { if (devalgen) printf ("\txonprop from %s, myval_%d\n", tnodename(this), 1); s = this->swlist; if (s != 0) { for (;;) { switch (s->gate->val) { default: fatal ("bad val"); case 0: if ( ! (s->flags & 0x02)) break; that = &tnode[s->relnode]; if (s->flags & 0x08 && this->val == 0 && that->val == 0) break; goto lab1; case 2: that = &tnode[s->relnode]; if (s->flags & 0x02) { if (s->flags & 0x08 && this->val == 0 && that->val == 0) break; } else { if (s->flags & 0x08 && this->val == 1 && that->val == 1) break; } goto lab1; case 1: if (s->flags & 0x02) break; that = &tnode[s->relnode]; if (s->flags & 0x08 && this->val == 1 && that->val == 1) break; lab1: if (1 != 1) { { (v) = ( this->xstr0); if (( this->xstr0) > ( s->str)) (v) = ( s->str); }; if (v > that->xstr0) { that->xstr0 = v; if (v > that->xstr1) { { (that)->forw->back = (that)->back; (that)->back->forw = (that)->forw; }; newl = &list[v]; { (that)->back = ( newl)->back; ( newl)->back = (that); (that)->forw = ( newl); (that)->back->forw = (that); }; } } } if (1 != 0) { { (v) = ( this->xstr1); if (( this->xstr1) > ( s->str)) (v) = ( s->str); }; if (v > that->xstr1) { that->xstr1 = v; if (v > that->xstr0) { { (that)->forw->back = (that)->back; (that)->back->forw = (that)->forw; }; newl = &list[v]; { (that)->back = ( newl)->back; ( newl)->back = (that); (that)->forw = ( newl); (that)->back->forw = (that); }; } } } break; } if (s->flags & 0x04) break; s++; } } }; ! 295: if ( (domtab[this->xstr1] >= ( this->xstr0))) ! 296: continue; ! 297: if (this->xstr1 < this->xstr0) ! 298: continue; ! 299: newl = &list[this->xstr0]; ! 300: } ! 301: that = this->forw; ! 302: { (this)->forw->back = (this)->back; (this)->back->forw = (this)->forw; }; ! 303: { (this)->back = ( newl)->back; ( newl)->back = (this); (this)->forw = ( newl); (this)->back->forw = (this); }; ! 304: this = that->back; ! 305: } ! 306: } ! 307: } ! 308: dumpstr (s, domtab) ! 309: char *s; ! 310: char *domtab; ! 311: { ! 312: register struct _Tnode *this; ! 313: puts (s); ! 314: for (this = &tnode[2]; this < pasttnode; this++) ! 315: printf ("\ttnode[%d] %s str0=%d>%d str1=%d>%d\n", ! 316: this-tnode, nettoname(firstnode[this-tnode-2].orignum), ! 317: this->str0, domtab[this->str0], ! 318: this->str1, domtab[this->str1] ! 319: ); ! 320: } ! 321: dumpxstr (s, domtab) ! 322: char *s; ! 323: char *domtab; ! 324: { ! 325: register struct _Tnode *this; ! 326: puts (s); ! 327: for (this = &tnode[2]; this < pasttnode; this++) { ! 328: printf ("\ttnode[%d] %s ", ! 329: this-tnode, nettoname(firstnode[this-tnode-2].orignum) ! 330: ); ! 331: printf ("str0=%d str1=%d xstr0=%d xstr1=%d\n", ! 332: this->str0, domtab[this->str0], ! 333: this->str1, domtab[this->str1], ! 334: this->xstr0, domtab[this->xstr0], ! 335: this->xstr1, domtab[this->xstr1] ! 336: ); ! 337: } ! 338: } ! 339: evalgen (g) ! 340: register union _Group *g; ! 341: { ! 342: register struct _Node *n; ! 343: register struct _Tnode *this, *l; ! 344: register char *domtab; ! 345: char v; ! 346: if (devalgen) ! 347: printf ("evalgen group %d\n", g - group); ! 348: domtab = g->gen.domtab; ! 349: firstnode = g->gen.nodelist; ! 350: lastnode = &firstnode[g->gen.nnodes - 3]; ! 351: tnode[0].str0 = tnode[1].str1 = g->gen.powstr; ! 352: tnode[0].str1 = tnode[0].str1 = 0; ! 353: toplist = &list[g->gen.powstr]; ! 354: v = 0; ! 355: for (l = &list[0]; l <= toplist; l++) { ! 356: l->forw = l->back = l; ! 357: l->str0 = v++; ! 358: } ! 359: tnode[0].swlist = g->gen.vsslist; ! 360: tnode[1].swlist = g->gen.vddlist; ! 361: { (&tnode[0])->back = ( toplist)->back; ( toplist)->back = (&tnode[0]); (&tnode[0])->forw = ( toplist); (&tnode[0])->back->forw = (&tnode[0]); }; ! 362: { (&tnode[1])->back = ( toplist)->back; ( toplist)->back = (&tnode[1]); (&tnode[1])->forw = ( toplist); (&tnode[1])->back->forw = (&tnode[1]); }; ! 363: ! 364: this = &tnode[2]; ! 365: for (n = firstnode; n <= lastnode; this++, n++) { ! 366: this->swlist = n->swlist; ! 367: this->val = n->val; ! 368: v = n->size; ! 369: if (n->flags & 0x08) ! 370: v = g->gen.powstr; ! 371: switch (n->val) { ! 372: case 0: ! 373: this->str0 = v; ! 374: this->str1 = 0; ! 375: break; ! 376: case 1: ! 377: this->str0 = 0; ! 378: this->str1 = v; ! 379: break; ! 380: case 2: ! 381: this->str0 = v; ! 382: this->str1 = v; ! 383: break; ! 384: } ! 385: l = &list[v]; ! 386: { (this)->back = ( l)->back; ( l)->back = (this); (this)->forw = ( l); (this)->back->forw = (this); }; ! 387: } ! 388: pasttnode = this; ! 389: ! 390: anyxs = 0; ! 391: if (devalgen) ! 392: dumpstr ("before prop over 1's", domtab); ! 393: prop_on (domtab); ! 394: if (devalgen) ! 395: dumpstr ("after prop over 1's", domtab); ! 396: ! 397: if (! anyxs) { ! 398: this = &tnode[2]; ! 399: for (n = firstnode; n <= lastnode; n++, this++) { ! 400: if ( (domtab[this->str0] >= ( this->str1))) { ! 401: if (n->nextval != 0) ! 402: assign (n, 0, 1); ! 403: } else if ( (domtab[this->str1] >= ( this->str0))) { ! 404: if (n->nextval != 1) ! 405: assign (n, 1, 1); ! 406: } else { ! 407: if (n->nextval != 2) ! 408: assign (n, 2, 1); ! 409: } ! 410: } ! 411: return; ! 412: } ! 413: ! 414: for (l = &list[0]; l <= toplist; l++) ! 415: l->forw = l->back = l; ! 416: for (this = tnode; this < pasttnode; this++) { ! 417: this->xstr0 = this->str0; ! 418: this->xstr1 = this->str1; ! 419: if (this->xstr0 > this->xstr1) ! 420: l = &list[this->xstr0]; ! 421: else ! 422: l = &list[this->xstr1]; ! 423: { (this)->back = ( l)->back; ( l)->back = (this); (this)->forw = ( l); (this)->back->forw = (this); }; ! 424: } ! 425: prop_xon (domtab); ! 426: if (devalgen) ! 427: dumpxstr ("after prop over X's", domtab); ! 428: ! 429: this = &tnode[2]; ! 430: for (n = firstnode; n <= lastnode; n++, this++) { ! 431: if ( (domtab[this->str0] >= ( this->str1)) && (domtab[this->str0] >= ( this->xstr1))) { ! 432: if (n->nextval != 0) ! 433: assign (n, 0, 1); ! 434: } else if ( (domtab[this->str1] >= ( this->str0)) && (domtab[this->str1] >= ( this->xstr0))) { ! 435: if (n->nextval != 1) ! 436: assign (n, 1, 1); ! 437: } else { ! 438: if (n->nextval != 2) ! 439: assign (n, 2, 1); ! 440: } ! 441: } ! 442: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.