|
|
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.