Annotation of researchv10no/cmd/ideal/ideal.c, revision 1.1.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.