Annotation of researchv10no/cmd/ideal/memut.c, revision 1.1

1.1     ! root        1: /* memory utilities */
        !             2: 
        !             3: #include "ideal.h"
        !             4: #include "y.tab.h"
        !             5: 
        !             6: char *fooalloc;
        !             7: #define        tryalloc(new,kind)      \
        !             8:        if (!(new =(kind *) malloc(sizeof (kind)))) {\
        !             9:        emergency ();\
        !            10:        if (!(new =(kind *) malloc(sizeof (kind)))) {\
        !            11:                fprintf (stderr, "ideal: Out of space\n");\
        !            12:                exit (1);\
        !            13:                }\
        !            14:        };\
        !            15:        for (fooalloc = (char *) new;\
        !            16:                fooalloc < ((char *) new) + sizeof (kind);\
        !            17:                fooalloc ++)\
        !            18:                *fooalloc = '\0';
        !            19: 
        !            20: STMTPTR stmtgen (kind, stmt)
        !            21: int kind;
        !            22: char *stmt;
        !            23: {
        !            24:        register STMTPTR newguy;
        !            25:        tryalloc(newguy,STMTNODE);
        !            26:        newguy->kind = kind;
        !            27:        newguy->stmt = stmt;
        !            28:        return (newguy);
        !            29: }
        !            30: 
        !            31: BOXPTR boxgen (name,stmtlist)
        !            32: int name;
        !            33: STMTPTR stmtlist;
        !            34: {
        !            35:        register BOXPTR newguy;
        !            36:        STMTPTR bdstmt;
        !            37:        tryalloc(newguy,BOXNODE);
        !            38:        newguy->name = name;
        !            39:        /* the stmts are in reverse order (check the yacc grammar) */
        !            40:        newguy->stmtlist = reverse (stmtlist);
        !            41:        if (bdstmt = nextstmt (BDLIST, stmtlist))
        !            42:                bdstmt->stmt = (char *) reverse ((STMTPTR) bdstmt->stmt);
        !            43:        return (newguy);
        !            44: }
        !            45: 
        !            46: NAMEPTR namegen (name)
        !            47: int name;
        !            48: {
        !            49:        register NAMEPTR newguy;
        !            50:        tryalloc(newguy,NAMENODE);
        !            51:        newguy->name = name;
        !            52:        return (newguy);
        !            53: }
        !            54: 
        !            55: EXPRPTR exprgen (expr)
        !            56: EXPR expr;
        !            57: {
        !            58:        register EXPRPTR newguy;
        !            59:        tryalloc(newguy,EXPRNODE);
        !            60:        newguy->expr = expr;
        !            61:        return (newguy);
        !            62: }
        !            63: 
        !            64: PUTPTR putgen (name, parm, p_or_c)
        !            65: int name;
        !            66: BOXPTR parm;
        !            67: int p_or_c;
        !            68: {
        !            69:        register PUTPTR newguy;
        !            70:        tryalloc(newguy,PUTNODE);
        !            71:        newguy->name = name;
        !            72:        newguy->parm = parm;
        !            73:        newguy->p_or_c = p_or_c;
        !            74:        return (newguy);
        !            75: }
        !            76: 
        !            77: PENPTR pengen (from, to, copies, start, end, pen)
        !            78: EXPR from,
        !            79:        to,
        !            80:        copies,
        !            81:        start,
        !            82:        end;
        !            83: BOXPTR pen;
        !            84: {
        !            85:        register PENPTR newguy;
        !            86:        tryalloc(newguy,PEN_NODE);
        !            87:        newguy->from = from;
        !            88:        newguy->to = to;
        !            89:        newguy->copies = copies;
        !            90:        newguy->start = start;
        !            91:        newguy->end = end;
        !            92:        newguy->pen = pen;
        !            93:        return (newguy);
        !            94: }
        !            95: 
        !            96: MISCPTR miscgen (info)
        !            97: int info;
        !            98: {
        !            99:        register MISCPTR newguy;
        !           100:        tryalloc(newguy,MISCNODE);
        !           101:        newguy->info = info;
        !           102:        return (newguy);
        !           103: }
        !           104: 
        !           105: INTLPTR intlgen (oper, left, right)
        !           106: int oper;
        !           107: EXPR left,
        !           108: right;
        !           109: {
        !           110:        register INTLPTR newguy;
        !           111:        tryalloc(newguy,EXPRINTL);
        !           112:        newguy->leaf = FALSE;
        !           113:        newguy->used = TRUE;
        !           114:        newguy->oper = oper;
        !           115:        newguy->left = left;
        !           116:        newguy->right = right;
        !           117:        return (newguy);
        !           118: }
        !           119: 
        !           120: INTLPTR commagen (real, imag)
        !           121: float real,
        !           122:        imag;
        !           123: {
        !           124:        register INTLPTR newguy;
        !           125:        tryalloc(newguy,EXPRINTL);
        !           126:        newguy->leaf = FALSE;
        !           127:        newguy->used = TRUE;
        !           128:        newguy->oper = ';';
        !           129:        newguy->left = (EXPR) depgen ((VARPTR) NULL, real);
        !           130:        newguy->right = (EXPR) depgen ((VARPTR) NULL, imag);
        !           131:        return (newguy);
        !           132: }
        !           133: 
        !           134: EXTLPTR extlgen (path)
        !           135: NAMEPTR path;
        !           136: {
        !           137:        register EXTLPTR newguy;
        !           138:        tryalloc(newguy,EXPREXTL);
        !           139:        newguy->leaf = TRUE;
        !           140:        newguy->used = TRUE;
        !           141:        newguy->info.path = path;
        !           142:        newguy->kind = PATH;
        !           143:        return (newguy);
        !           144: }
        !           145: 
        !           146: EXTLPTR fextlgen (value)
        !           147: float value;
        !           148: {
        !           149:        register EXTLPTR newguy;
        !           150:        tryalloc(newguy,EXPREXTL);
        !           151:        newguy->leaf = TRUE;
        !           152:        newguy->leaf = TRUE;
        !           153:        newguy->info.const = value;
        !           154:        newguy->kind = CONST;
        !           155:        return (newguy);
        !           156: }
        !           157: 
        !           158: NOADPTR noadgen (defnode, edgevarlist, boxvarlist)
        !           159: PUTPTR defnode;
        !           160: VARPTR edgevarlist;
        !           161: VARPTR boxvarlist;
        !           162: {
        !           163:        register NOADPTR newguy;
        !           164:        tryalloc(newguy,NOAD);
        !           165:        newguy->defnode = defnode;
        !           166:        newguy->edgevarlist = edgevarlist;
        !           167:        newguy->boxvarlist = boxvarlist;
        !           168:        return (newguy);
        !           169: }
        !           170: 
        !           171: VARPTR vargen (name, re, deplist)
        !           172: int name;
        !           173: boolean re;
        !           174: DEPPTR deplist;
        !           175: {
        !           176:        register VARPTR newguy;
        !           177:        tryalloc(newguy,VARNODE);
        !           178:        newguy->re_name = re?name:-name;
        !           179:        newguy->deplist = deplist;
        !           180:        return (newguy);
        !           181: }
        !           182: 
        !           183: static DEPPTR depavh = NULL;
        !           184: static DEPPTR depavt = NULL;
        !           185: 
        !           186: DEPPTR depgen (var, coeff)
        !           187: VARPTR var;
        !           188: float coeff;
        !           189: {
        !           190:        register DEPPTR newguy;
        !           191:        if (depavh) {
        !           192:                newguy = depavh;
        !           193:                depavh = depavh->next;
        !           194:                if (!depavh)
        !           195:                        depavt = NULL;
        !           196:                newguy->next = NULL;
        !           197:        } else
        !           198:                tryalloc(newguy,DEPNODE);
        !           199:        newguy->var = var;
        !           200:        newguy->coeff = coeff;
        !           201:        return (newguy);
        !           202: }
        !           203: 
        !           204: LINEPTR linegen (x0, y0, x1, y1)
        !           205: float x0,
        !           206:        y0,
        !           207:        x1,
        !           208:        y1;
        !           209: {
        !           210:        register LINEPTR newguy;
        !           211:        tryalloc(newguy,LINENODE);
        !           212:        newguy->kind = LINE;
        !           213:        newguy->x0 = x0;
        !           214:        newguy->y0 = y0;
        !           215:        newguy->x1 = x1;
        !           216:        newguy->y1 = y1;
        !           217:        return (newguy);
        !           218: }
        !           219: 
        !           220: EDGEPTR edgeline (x0, y0, x1, y1)
        !           221: float x0,
        !           222:        y0,
        !           223:        x1,
        !           224:        y1;
        !           225: {
        !           226:        EDGEPTR newguy;
        !           227:        tryalloc(newguy,EDGENODE);
        !           228:        newguy->fax = (ARCPTR) NULL;
        !           229:        newguy->sx = x0;
        !           230:        newguy->sy = y0;
        !           231:        newguy->ex = x1;
        !           232:        newguy->ey = y1;
        !           233:        newguy->stx = newguy->ex;
        !           234:        newguy->sty = newguy->ey;
        !           235:        newguy->etx = newguy->sx;
        !           236:        newguy->ety = newguy->sy;
        !           237:        dprintf "opaque polygon edge: %f,%f -- %f,%f\n",
        !           238:                x0,y0, x1,y1
        !           239:        );
        !           240:        return (newguy);
        !           241: }
        !           242: 
        !           243: LINEPTR circgen (x0, y0, r)
        !           244: float x0,
        !           245:        y0,
        !           246:        r;
        !           247: {
        !           248:        register CIRCPTR newguy;
        !           249:        tryalloc(newguy,CIRCNODE);
        !           250:        newguy->kind = CIRCLE;
        !           251:        newguy->x0 = x0;
        !           252:        newguy->y0 = y0;
        !           253:        newguy->r = r;
        !           254:        return ((LINEPTR) newguy);
        !           255: }
        !           256: 
        !           257: /*
        !           258: LINEPTR arcgen (x0, y0, x1, y1, x2, y2, theta1, theta2, radius)
        !           259: float x0,
        !           260:        y0,
        !           261:        x1,
        !           262:        y1,
        !           263:        x2,
        !           264:        y2,
        !           265:        theta1,
        !           266:        theta2,
        !           267:        radius;
        !           268: {
        !           269:        register ARCPTR newguy;
        !           270:        tryalloc(newguy,ARCNODE);
        !           271:        newguy->kind = ARC;
        !           272:        newguy->x0 = x0;
        !           273:        newguy->y0 = y0;
        !           274:        newguy->x1 = x1;
        !           275:        newguy->y1 = y1;
        !           276:        newguy->x2 = x2;
        !           277:        newguy->y2 = y2;
        !           278:        newguy->theta1 = theta1;
        !           279:        newguy->theta2 = theta2;
        !           280:        newguy->radius = radius;
        !           281:        return ((LINEPTR) newguy);
        !           282: }
        !           283: */
        !           284: 
        !           285: LINEPTR angularc (x0, y0, radius, theta1, theta2)
        !           286: float x0,
        !           287:        y0,
        !           288:        theta1,
        !           289:        theta2,
        !           290:        radius;
        !           291: {
        !           292:        /* theta1 and theta2 should be in radians */
        !           293:        register ARCPTR newguy;
        !           294:        tryalloc(newguy,ARCNODE);
        !           295:        radius = fabs(radius);
        !           296:        newguy->kind = ARC;
        !           297:        newguy->x0 = x0;
        !           298:        newguy->y0 = y0;
        !           299:        newguy->x1 = x0 + cos (theta1)*radius;
        !           300:        newguy->y1 = y0 + sin (theta1)*radius;
        !           301:        newguy->x2 = x0 + cos (theta2)*radius;
        !           302:        newguy->y2 = y0 + sin (theta2)*radius;
        !           303:        theta1 = rprin (theta1);
        !           304:        theta2 = rprin (theta2);
        !           305:        while (theta2 - theta1 < EPSILON)
        !           306:                theta2 += 2*PI;
        !           307:        if (fabs(theta2 - theta1) > PI)
        !           308:                radius *= -1;
        !           309:        newguy->theta1 = theta1;
        !           310:        newguy->theta2 = theta2;
        !           311:        newguy->radius = radius;
        !           312:        return ((LINEPTR) newguy);
        !           313: }
        !           314: 
        !           315: LINEPTR pointarc (x1,y1, x2,y2, x3,y3)
        !           316: float x1,y1, x2,y2, x3,y3;
        !           317: {
        !           318:        float A, B, C, D, E, F;
        !           319:        float denom, x, y;
        !           320:        float startang, midang, endang;
        !           321:        A = -2.0*(x2 - x1);
        !           322:        B = -2.0*(y2 - y1);
        !           323:        C = -2.0*(x3 - x2);
        !           324:        D = -2.0*(y3 - y2);
        !           325:        denom = A*D - B*C;
        !           326:        if (fabs(denom) < EPSILON) {
        !           327:                dprintf "pointarc: (%f,%f) (%f,%f) (%f,%f) collinear\n",
        !           328:                        x1,y1, x2,y2, x3,y3);
        !           329:                return (linegen (x1,y1, x3,y3));
        !           330:        }
        !           331:        E = x1*x1 + y1*y1 - x2*x2 - y2*y2;
        !           332:        F = x2*x2 + y2*y2 - x3*x3 - y3*y3;
        !           333:        x = E*D - F*B;
        !           334:        x /= denom;
        !           335:        y = A*F - C*E;
        !           336:        y /= denom;
        !           337:        startang = rprin(atan2 (y1-y, x1-x));
        !           338:        midang = rprin(atan2 (y2-y, x2-x));
        !           339:        endang = rprin(atan2 (y3-y, x3-x));
        !           340:        angorder (&startang, midang, &endang);
        !           341:        dprintf "pointarc: (%f,%f) (%f,%f) (%f,%f)\n", x1,y1, x2,y2, x3,y3);
        !           342:        dprintf "pointarc: (%f,%f) %f\n", x, y, hypot(x1-x,y1-y));
        !           343:        dprintf "pointarc: /_%f -- /_%f\n", startang, endang);
        !           344:        return (angularc (x, y, hypot(x1-x,y1-y), startang, endang));
        !           345: }
        !           346: 
        !           347: EDGEPTR edgearc (x1,y1, x2,y2, x3,y3)
        !           348: float x1,y1, x2,y2, x3,y3;
        !           349: {
        !           350:        EDGEPTR newguy;
        !           351:        tryalloc(newguy,EDGENODE);
        !           352:        newguy->fax = (ARCPTR) pointarc (x1,y1, x2,y2, x3,y3);
        !           353:        if (newguy->fax->kind == LINE) {
        !           354:                newguy->sx = newguy->etx = x1;
        !           355:                newguy->sy = newguy->ety = y1;
        !           356:                newguy->ex = newguy->stx = x3;
        !           357:                newguy->ey = newguy->sty = y3;
        !           358:                tryfree(newguy->fax);
        !           359:                newguy->fax = NULL;
        !           360:                newguy->flipped = FALSE;
        !           361:        } else if (newguy->fax->kind == ARC) {
        !           362:                ARCPTR temp;
        !           363:                temp = newguy->fax;
        !           364:                newguy->sx = x1;
        !           365:                newguy->sy = y1;
        !           366:                newguy->ex = x3;
        !           367:                newguy->ey = y3;
        !           368:                if ((fabs(newguy->sx - temp->x1) > EPSILON)
        !           369:                        || (fabs(newguy->sy - temp->y1) > EPSILON)) {
        !           370:                        newguy->stx = x1 - temp->y0 + y1;
        !           371:                        newguy->sty = y1 + temp->x0 - x1;
        !           372:                        newguy->etx = x3 + temp->y0 - y3;
        !           373:                        newguy->ety = y3 - temp->x0 + x3;
        !           374:                        newguy->flipped = TRUE;
        !           375:                } else {
        !           376:                        newguy->stx = x1 + temp->y0 - y1;
        !           377:                        newguy->sty = y1 - temp->x0 + x1;
        !           378:                        newguy->etx = x3 - temp->y0 + y3;
        !           379:                        newguy->ety = y3 + temp->x0 - x3;
        !           380:                        newguy->flipped = FALSE;
        !           381:                }
        !           382:                dprintf "edgearc: (%f,%f) --> (%f,%f)\n",
        !           383:                        newguy->sx, newguy->sy,
        !           384:                        newguy->ex, newguy->ey
        !           385:                );
        !           386:                dprintf "edgearc: st (%f,%f); et (%f,%f)\n",
        !           387:                        newguy->stx, newguy->sty,
        !           388:                        newguy->etx, newguy->ety
        !           389:                );
        !           390:                dprintf "edgearc: %sflipped\n", newguy->flipped?"":"UN");
        !           391:        } else impossible ("edgearc");
        !           392:        return (newguy);
        !           393: }
        !           394: 
        !           395: LINEPTR textgen (command, string, x0, y0)
        !           396: int command;
        !           397: char *string;
        !           398: float x0,
        !           399:        y0;
        !           400: {
        !           401:        register TEXTPTR newguy;
        !           402:        tryalloc(newguy,TEXTNODE);
        !           403:        newguy->kind = STRING;
        !           404:        newguy->command = command;
        !           405:        newguy->string = string;
        !           406:        newguy->x0 = x0;
        !           407:        newguy->y0 = y0;
        !           408:        return ((LINEPTR) newguy);
        !           409: }
        !           410: 
        !           411: LINEPTR splgen (knotlist)
        !           412: EXPRPTR knotlist;
        !           413: {
        !           414:        register SPLPTR newguy;
        !           415:        tryalloc(newguy,SPLNODE);
        !           416:        newguy->kind = SPLINE;
        !           417:        newguy->knotlist = knotlist;
        !           418:        return ((LINEPTR) newguy);
        !           419: }
        !           420: 
        !           421: STRPTR strgen (command, string, at)
        !           422: int command;
        !           423: char *string;
        !           424: EXPR at;
        !           425: {
        !           426:        register STRPTR newguy;
        !           427:        tryalloc(newguy,STRNODE);
        !           428:        newguy->command = command;
        !           429:        newguy->string = string;
        !           430:        newguy->at = at;
        !           431:        return (newguy);
        !           432: }
        !           433: 
        !           434: 
        !           435: EQNPTR eqngen (eqn, noad)
        !           436: EXPR eqn;
        !           437: NOADPTR noad;
        !           438: {
        !           439:        register EQNPTR newguy;
        !           440:        tryalloc(newguy,EQNNODE);
        !           441:        newguy->eqn = eqn;
        !           442:        newguy->noad = noad;
        !           443:        return (newguy);
        !           444: }
        !           445: OPQPTR opqgen (code, alpha)
        !           446: int code;
        !           447: float alpha;
        !           448: {
        !           449:        OPQPTR newguy;
        !           450:        tryalloc(newguy,OPQNODE);
        !           451:        newguy->code = code;
        !           452:        newguy->alpha = alpha;
        !           453:        return (newguy);
        !           454: }
        !           455: 
        !           456: void depfree (doomed)
        !           457: DEPPTR doomed;
        !           458: {
        !           459:        register DEPPTR doomwalk;
        !           460:        if (!doomed || doomed == depavt)
        !           461:                return;
        !           462:        if (!depavh) {
        !           463:                depavt = depavh = doomed;
        !           464:                while (depavt->next)
        !           465:                        depavt = depavt->next;
        !           466:                return;
        !           467:        }
        !           468:        doomwalk = doomed;
        !           469:        while (doomwalk->next) {
        !           470:                if (doomwalk->next == depavt)
        !           471:                        return;
        !           472:                doomwalk = doomwalk->next;
        !           473:        }
        !           474:        depavt->next = doomed;
        !           475:        depavt = doomwalk;
        !           476: }
        !           477: 
        !           478: void nextfree (doomed)
        !           479: DEPPTR doomed;
        !           480: {
        !           481:        register DEPPTR walk;
        !           482:        while (doomed) {
        !           483:                walk = doomed->next;
        !           484:                tryfree(doomed);
        !           485:                doomed = walk;
        !           486:        }
        !           487: }
        !           488: 
        !           489: void namefree (doomed)
        !           490: NAMEPTR doomed;
        !           491: {
        !           492:        nextfree ((DEPPTR) doomed);
        !           493: }
        !           494: 
        !           495: void exprlsfree (doomed)
        !           496: EXPRPTR doomed;
        !           497: {
        !           498:        register EXPRPTR walk;
        !           499:        while (doomed) {
        !           500:                walk = doomed->next;
        !           501:                exprfree (doomed->expr);
        !           502:                tryfree(doomed);
        !           503:                doomed = walk;
        !           504:        }
        !           505: }
        !           506: 
        !           507: void linefree (doomed)
        !           508: LINEPTR doomed;
        !           509: {
        !           510:        nextfree ((DEPPTR) doomed);
        !           511: }
        !           512: 
        !           513: void intlfree (doomed)
        !           514: INTLPTR doomed;
        !           515: {
        !           516:        depfree ((DEPPTR) doomed->left);
        !           517:        depfree ((DEPPTR) doomed->right);
        !           518:        tryfree(doomed);
        !           519: }
        !           520: 
        !           521: void noadfree (doomed)
        !           522: NOADPTR doomed;
        !           523: {
        !           524:        if (!doomed)
        !           525:                return;
        !           526:        noadfree (doomed->son);
        !           527:        noadfree (doomed->brother);
        !           528:        varfree (doomed->edgevarlist);
        !           529:        varfree (doomed->boxvarlist);
        !           530:        linefree(doomed->linelist);
        !           531:        tryfree(doomed);
        !           532: }
        !           533: 
        !           534: void varfree (doomed)
        !           535: VARPTR doomed;
        !           536: {
        !           537:        if (!doomed)
        !           538:                return;
        !           539:        varfree (doomed->next);
        !           540:        depfree (doomed->deplist);
        !           541:        tryfree(doomed);
        !           542: }
        !           543: 
        !           544: 
        !           545: void exprfree (doomed)
        !           546: EXPR doomed;
        !           547: {
        !           548:        if (!doomed)
        !           549:                return;
        !           550:        if (!((INTLPTR) doomed)->used)
        !           551:                return;
        !           552:        if (!((EXTLPTR) doomed)->leaf) {
        !           553:                /* convention for functions (name in left, arg list hanging
        !           554:                /* off right) will ream you if not careful */
        !           555:                if (((INTLPTR) doomed)->oper == NAME) {
        !           556:                        exprfree (((EXPRPTR)((INTLPTR) doomed)->right)->expr);
        !           557:                        /*
        !           558:                        if (((INTLPTR) ((INTLPTR) doomed)->right)->used) {
        !           559:                                ((INTLPTR) ((INTLPTR) doomed)->right)->used = FALSE;
        !           560:                                tryfree(((INTLPTR) doomed)->right);
        !           561:                        }
        !           562:                        */
        !           563:                } else if (((INTLPTR) doomed)->oper == ';') {
        !           564:                        depfree ((DEPPTR)((INTLPTR) doomed)->left);
        !           565:                        depfree ((DEPPTR)((INTLPTR) doomed)->right);
        !           566:                } else {
        !           567:                        exprfree (((INTLPTR) doomed)->left);
        !           568:                        exprfree (((INTLPTR) doomed)->right);
        !           569:                }
        !           570:        }
        !           571:        ((INTLPTR) doomed)->used = FALSE;
        !           572:        tryfree((INTLPTR) doomed);
        !           573: }
        !           574: 
        !           575: 
        !           576: 
        !           577: void boxfree (doomed)
        !           578: BOXPTR doomed;
        !           579: {
        !           580:        register STMTPTR curstmt, nextstmt;
        !           581:        for (curstmt = doomed->stmtlist;
        !           582:                curstmt;
        !           583:                curstmt = nextstmt) {
        !           584:                switch (curstmt->kind) {
        !           585:                case '=':
        !           586:                        exprfree ((EXPR) curstmt->stmt);
        !           587:                        break;
        !           588:                case CONN:
        !           589:                        exprlsfree ((EXPRPTR) curstmt->stmt);
        !           590:                        break;
        !           591:                case USING:
        !           592:                        exprfree (((PENPTR) curstmt->stmt)->from);
        !           593:                        exprfree (((PENPTR) curstmt->stmt)->to);
        !           594:                        exprfree (((PENPTR) curstmt->stmt)->copies);
        !           595:                        exprfree (((PENPTR) curstmt->stmt)->start);
        !           596:                        exprfree (((PENPTR) curstmt->stmt)->end);
        !           597:                        boxfree (((PENPTR) curstmt->stmt)->pen);
        !           598:                        tryfree(curstmt->stmt);
        !           599:                        break;
        !           600:                case PUT:
        !           601:                        boxfree (((PUTPTR) curstmt->stmt)->parm);
        !           602:                        tryfree(curstmt->stmt);
        !           603:                        break;
        !           604:                case DRAW:
        !           605:                        tryfree(curstmt->stmt);
        !           606:                        break;
        !           607:                case STRING:
        !           608: /* if using malloc to get string space, can use the real free here */
        !           609:                        free(((STRPTR) curstmt->stmt)->string);
        !           610:                        exprfree (((STRPTR) curstmt->stmt)->at);
        !           611:                        tryfree(curstmt->stmt);
        !           612:                        break;
        !           613:                case SPLINE:
        !           614:                        exprlsfree ((EXPRPTR) curstmt->stmt);
        !           615:                        break;
        !           616:                case OPAQUE:
        !           617:                        tryfree(curstmt->stmt);
        !           618:                        break;
        !           619:                case BDLIST:
        !           620:                        exprlsfree ((EXPRPTR) curstmt->stmt);
        !           621:                        break;
        !           622:                case VAR:
        !           623:                        namefree ((NAMEPTR) curstmt->stmt);
        !           624:                        break;
        !           625:        }
        !           626:        nextstmt = curstmt->next;
        !           627:        tryfree(curstmt);
        !           628:        }
        !           629: }
        !           630: 
        !           631: void emergency ()
        !           632: {
        !           633:        nextfree (depavh);
        !           634:        depavh = depavt = NULL;
        !           635: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.