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

1.1     ! root        1: #include "ideal.h"
        !             2: #include "y.tab.h"
        !             3: 
        !             4: boolean dbg = FALSE;
        !             5: int when_bug = 0;
        !             6: char *filename;
        !             7: int lineno = 0;
        !             8: char libstr[100];
        !             9: boolean radflag = FALSE;
        !            10: #ifdef DUMPVARS
        !            11: boolean dumpvars = FALSE;
        !            12: #endif
        !            13: 
        !            14: BOXPTR boxlist = NULL;
        !            15: 
        !            16: main(argc, argv)
        !            17: int argc;
        !            18: char *argv[];
        !            19: {
        !            20:        bug_off;
        !            21:        while (argc > 1 && argv[1][0] == '-') {
        !            22:                switch (argv[1][1]) {
        !            23:                case 'd':
        !            24:                        when_bug = argv[1][2]?atoi(&argv[1][2]):~0;
        !            25:                        break;
        !            26:                case 'l':
        !            27:                        idinclude (&argv[1][2], LIBFIL);
        !            28:                        while (yyparse());
        !            29:                        break;
        !            30:                case 'r':
        !            31:                        radflag = TRUE;
        !            32:                        break;
        !            33:                case 'p':
        !            34:                case '4':
        !            35:                case 'n':
        !            36:                        break;
        !            37: #ifdef DUMPVARS
        !            38:                case 'v':
        !            39:                        dumpvars = TRUE;
        !            40:                        break;
        !            41: #endif
        !            42:                default:
        !            43:                        fprintf(stderr, "ideal: unknown flag %c\n", argv[1][1]);
        !            44:                        break;
        !            45:                }
        !            46:                argc--;
        !            47:                argv++;
        !            48:        }
        !            49:        if (argc < 2) {
        !            50:                filename = "-";
        !            51:                lineno = 0;
        !            52:                filepush (stdin);
        !            53:                while (yyparse ());
        !            54:        } else
        !            55:                while (argc-- > 1) {
        !            56:                        filename = *argv;
        !            57:                        lineno = 0;
        !            58:                        idinclude (*++argv, CHATTY);
        !            59:                        while (yyparse ());
        !            60:                }
        !            61:        exit(0);
        !            62: }
        !            63: 
        !            64: interpret()
        !            65: {
        !            66:        PUTNODE dummyroot;
        !            67:        if (when_bug & 01) bug_on;
        !            68:        else bug_off;
        !            69:        dummyroot.name = lookup("main");
        !            70:        dummyroot.parm = boxgen (lookup("main"), (STMTPTR) NULL);
        !            71:        /* if boxlist includes main, execute it */
        !            72:        if (boxlist && findbox(lookup("main"),TRUE)->stmtlist) {
        !            73:                NOADPTR noadtree;
        !            74:                bug_off;
        !            75:                /* make room for all variables */
        !            76:                noadtree = buildnoadtree (&dummyroot);
        !            77:                /* solve all equations */
        !            78:                eqneval (noadtree);
        !            79:                nl_eval ();
        !            80:                depvarkill ();
        !            81: #ifdef DUMPVARS
        !            82:                if (dumpvars)
        !            83:                        dumpnoad (noadtree);
        !            84: #endif
        !            85:                /* make a list of segments in the picture */
        !            86:                noadtree->linelist = build (noadtree, noadtree->linelist);
        !            87:                /* draw the thing */
        !            88:                act (noadtree->linelist);
        !            89:                /* free the thing, but save definitions */
        !            90:                noadfree (noadtree);
        !            91:                fflush (stdout);
        !            92:                forget (lookup ("main"));
        !            93:        }
        !            94: }
        !            95: 
        !            96: idinclude (filnam, mode)
        !            97: char *filnam;
        !            98: int mode;
        !            99: {
        !           100:        FILE *nufile;
        !           101:        char *lib, *getenv();
        !           102:        dprintf "opening file %s\n", filnam);
        !           103:        printf (".lf 1 %s\n", filnam);
        !           104:        if (mode == CHATTY)
        !           105:                nufile = fopen (filnam, "r");
        !           106:        else if (mode == LIBFIL) {
        !           107:                if (!(lib = getenv("LIBDIR")))
        !           108:                        lib = "/usr/lib/ideal/lib/";
        !           109:                strcpy (libstr, lib);
        !           110:                strcat (&libstr[0],filnam);
        !           111:                filnam = libstr;
        !           112:                nufile = fopen (filnam, "r");
        !           113:        }
        !           114:        filename = filnam;
        !           115:        if (!nufile) {
        !           116:                fprintf (stderr, "ideal: can't open file %s\n", filnam);
        !           117:                exit (1);
        !           118:        } else {
        !           119:                filepush (nufile);
        !           120:        }
        !           121: }
        !           122: 
        !           123: act (the_picture)
        !           124: LINEPTR the_picture;
        !           125: {
        !           126:        LINEPTR lineseg;
        !           127:        double bounds[4];
        !           128: #define        maxx    bounds[MAXX]
        !           129: #define        maxy    bounds[MAXY]
        !           130: #define        minx    bounds[MINX]
        !           131: #define        miny    bounds[MINY]
        !           132:        maxx = -10000.0;
        !           133:        maxy = -10000.0;
        !           134:        minx = 10000.0;
        !           135:        miny = 10000.0;
        !           136:        for (lineseg = the_picture; lineseg; lineseg = lineseg->next) {
        !           137:                switch (lineseg->kind) {
        !           138:                case LINE:
        !           139:                        bbline (lineseg, bounds);
        !           140:                        break;
        !           141:                case CIRCLE:
        !           142:                        bbcirc ((CIRCPTR) lineseg, bounds);
        !           143:                        break;
        !           144:                case ARC:
        !           145:                        bbarc ((ARCPTR) lineseg, bounds);
        !           146:                        break;
        !           147:                case STRING:
        !           148:                        bbstring ((TEXTPTR) lineseg, bounds);
        !           149:                        break;
        !           150:                case SPLINE:
        !           151:                        break;
        !           152:                default:
        !           153:                        fprintf (stderr, "ideal: act: can't happen\n");
        !           154:                        break;
        !           155:                }
        !           156:        }
        !           157:        if (the_picture) {
        !           158:                boundscall (bounds);
        !           159:        }
        !           160:        for (lineseg = the_picture; lineseg; lineseg = lineseg->next) {
        !           161:                switch (lineseg->kind) {
        !           162:                case LINE:
        !           163:                        linecall (lineseg);
        !           164:                        break;
        !           165:                case CIRCLE:
        !           166:                        circcall ((CIRCPTR) lineseg);
        !           167:                        break;
        !           168:                case ARC:
        !           169:                        arccall ((ARCPTR) lineseg);
        !           170:                        break;
        !           171:                case STRING:
        !           172:                        textcall ((TEXTPTR) lineseg);
        !           173:                        break;
        !           174:                case SPLINE:
        !           175:                        splcall (((SPLPTR) lineseg)->knotlist);
        !           176:                        break;
        !           177:                default:
        !           178:                        fprintf (stderr, "ideal: act: can't happen\n");
        !           179:                        break;
        !           180:                }
        !           181:        }
        !           182: }
        !           183: 
        !           184: #ifdef DUMPVARS
        !           185: 
        !           186: /* print the variable values in the first level blocks of n */
        !           187: dumpnoad(n)
        !           188: NOADPTR n;
        !           189: {
        !           190:        VARPTR vp, vpi;
        !           191:        NOADPTR np;
        !           192:        char *bname;
        !           193:        fprintf(stderr,"DUMP\n");
        !           194:        for (np=n->son; np; np=np->brother) {
        !           195:                bname=idprint(np->defnode->name);
        !           196:                for (vp=np->boxvarlist ; vp ; ) {
        !           197:                        if(vp->re_name) {
        !           198:                                fprintf(stderr,"%s.%s ", bname,
        !           199:                                        idprint(THENAME(vp)));
        !           200:                                depprint(vp->deplist);
        !           201:                                fprintf(stderr," ");
        !           202:                                /* next should be imag part */
        !           203:                                vpi=vp->next;
        !           204:                                if(!vpi || THENAME(vpi)!=THENAME(vp))
        !           205:                                        exit(1);
        !           206:                                depprint(vpi->deplist);
        !           207:                                fprintf(stderr,"\n");
        !           208:                                vp=vpi;
        !           209:                        }
        !           210:                        vp = vp->next;
        !           211:                }
        !           212:        }
        !           213: }
        !           214: 
        !           215: #endif

unix.superglobalmegacorp.com

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