|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include <signal.h> ! 3: #include "grap.h" ! 4: #include "y.tab.h" ! 5: ! 6: int dbg = 0; ! 7: char *lib_defines = "/usr/lib/grap.defines"; ! 8: int lib = 1; /* 1 to include lib_defines */ ! 9: FILE *tfd = NULL; ! 10: char *tempfile = NULL; ! 11: ! 12: int synerr = 0; ! 13: int codegen = 0; /* 1=>output for this picture; 0=>no output */ ! 14: char *cmdname; ! 15: ! 16: Obj *objlist = NULL; /* all names stored here */ ! 17: ! 18: Point ptmin = { NULL, -1.0e10, -1.0e10 }; ! 19: Point ptmax = { NULL, 1.0e10, 1.0e10 }; ! 20: ! 21: main(argc, argv) ! 22: char **argv; ! 23: { ! 24: extern int onintr(), fpecatch(); ! 25: char *p, *getenv(); ! 26: ! 27: if (signal(SIGINT, SIG_IGN) != SIG_IGN) ! 28: signal(SIGINT, onintr); ! 29: signal(SIGFPE, fpecatch); ! 30: tempfile = "/tmp/grap.XXXXXX"; ! 31: cmdname = argv[0]; ! 32: while (argc > 1 && *argv[1] == '-') { ! 33: switch (argv[1][1]) { ! 34: case 'd': ! 35: dbg = 1; ! 36: tfd = stdout; ! 37: tempfile = "grap.temp"; ! 38: unlink(tempfile); ! 39: break; ! 40: case 'l': /* turn off /usr/lib inclusion */ ! 41: lib = 0; ! 42: break; ! 43: } ! 44: argc--; ! 45: argv++; ! 46: } ! 47: setdefaults(); ! 48: if (!dbg) ! 49: mktemp(tempfile); ! 50: curfile = infile; ! 51: pushsrc(File, curfile); ! 52: if (argc <= 1) { ! 53: curfile->fin = stdin; ! 54: curfile->fname = tostring("-"); ! 55: getdata(); ! 56: } else ! 57: while (argc-- > 1) { ! 58: if ((curfile->fin = fopen(*++argv, "r")) == NULL) { ! 59: fprintf(stderr, "grap: can't open %s\n", *argv); ! 60: onintr(); ! 61: } ! 62: curfile->fname = tostring(*argv); ! 63: getdata(); ! 64: fclose(curfile->fin); ! 65: free(curfile->fname); ! 66: } ! 67: if (!dbg) ! 68: unlink(tempfile); ! 69: exit(0); ! 70: } ! 71: ! 72: onintr() ! 73: { ! 74: if (!dbg) ! 75: unlink(tempfile); ! 76: exit(1); ! 77: } ! 78: ! 79: fpecatch() ! 80: { ! 81: yyerror("floating point exception"); ! 82: onintr(); ! 83: } ! 84: ! 85: char *grow(ptr, name, num, size) /* make array bigger */ ! 86: char *ptr, *name; ! 87: int num, size; ! 88: { ! 89: char *p; ! 90: ! 91: if (ptr == NULL) ! 92: p = malloc(num * size); ! 93: else ! 94: p = realloc(ptr, num * size); ! 95: if (p == NULL) ! 96: fatal("can't grow %s to %d", name, num * size); ! 97: return p; ! 98: } ! 99: ! 100: static struct { ! 101: char *name; ! 102: double val; ! 103: } defaults[] ={ ! 104: "frameht", FRAMEHT, ! 105: "framewid", FRAMEWID, ! 106: "ticklen", TICKLEN, ! 107: "slop", SLOP, ! 108: NULL, 0 ! 109: }; ! 110: ! 111: setdefaults() /* set default sizes for variables */ ! 112: { ! 113: int i; ! 114: Obj *p; ! 115: ! 116: for (i = 0; defaults[i].name != NULL; i++) { ! 117: p = lookup(defaults[i].name, 1); ! 118: setvar(p, defaults[i].val); ! 119: } ! 120: } ! 121: ! 122: getdata() /* read input */ ! 123: { ! 124: register FILE *fin; ! 125: char buf[1000], buf1[100], *p; ! 126: int ln; ! 127: ! 128: fin = curfile->fin; ! 129: curfile->lineno = 0; ! 130: printf(".lf 1 %s\n", curfile->fname); ! 131: while (fgets(buf, sizeof buf, fin) != NULL) { ! 132: curfile->lineno++; ! 133: if (*buf == '.' && *(buf+1) == 'G' && *(buf+2) == '1') { ! 134: setup(); ! 135: fprintf(stdout, ".PS%s", &buf[3]); /* maps .G1 [w] to .PS w */ ! 136: printf(".lf %d\n", curfile->lineno+1); ! 137: yyparse(); ! 138: fprintf(stdout, ".PE\n"); ! 139: printf(".lf %d\n", curfile->lineno+1); ! 140: fflush(stdout); ! 141: } else if (buf[0] == '.' && buf[1] == 'l' && buf[2] == 'f') { ! 142: if (sscanf(buf+3, "%d %s", &ln, buf1) == 2) { ! 143: free(curfile->fname); ! 144: printf(".lf %d %s\n", curfile->lineno = ln, curfile->fname = tostring(buf1)); ! 145: } else ! 146: printf(".lf %d\n", curfile->lineno = ln); ! 147: } else ! 148: fputs(buf, stdout); ! 149: } ! 150: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.