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