12 #define GRAPDEFINES "/sys/lib/grap.defines"
14 char *lib_defines = GRAPDEFINES;
16 int lib = 1; /* 1 to include lib_defines */
18 char tempfile[L_tmpnam];
21 int codegen = 0; /* 1=>output for this picture; 0=>no output */
24 Obj *objlist = NULL; /* all names stored here */
27 Point ptmin = { NULL, -BIG, -BIG };
28 Point ptmax = { NULL, BIG, BIG };
30 char *version = "version Dec 30, 1995";
32 extern int yyparse(void);
33 extern void setdefaults(void);
34 extern void getdata(void);
35 extern int unlink(char *);
37 main(int argc, char *argv[])
39 extern void onintr(int), fpecatch(int);
41 if (signal(SIGINT, SIG_IGN) != SIG_IGN)
42 signal(SIGINT, onintr);
43 signal(SIGFPE, fpecatch);
46 while (argc > 1 && *argv[1] == '-') {
51 strcpy(tempfile, "grap.temp");
53 fprintf(stderr, "%s\n", version);
55 case 'l': /* turn off /usr/lib inclusion */
66 curfile->fname = tostring("-");
67 pushsrc(File, curfile->fname);
71 if ((curfile->fin = fopen(*++argv, "r")) == NULL) {
72 fprintf(stderr, "grap: can't open %s\n", *argv);
75 curfile->fname = tostring(*argv);
76 pushsrc(File, curfile->fname);
96 ERROR "floating point exception" WARNING;
100 char *grow(char *ptr, char *name, int num, int size) /* make array bigger */
105 p = malloc(num * size);
107 p = realloc(ptr, num * size);
109 ERROR "can't grow %s to %d", name, num * size FATAL;
118 "framewid", FRAMEWID,
124 void setdefaults(void) /* set default sizes for variables */
129 for (i = 0; defaults[i].name != NULL; i++) {
130 p = lookup(defaults[i].name, 1);
131 setvar(p, defaults[i].val);
135 void getdata(void) /* read input */
138 char buf[1000], buf1[100];
143 printf(".lf 1 %s\n", curfile->fname);
144 while (fgets(buf, sizeof buf, fin) != NULL) {
146 if (*buf == '.' && *(buf+1) == 'G' && *(buf+2) == '1') {
148 fprintf(stdout, ".PS%s", &buf[3]); /* maps .G1 [w] to .PS w */
149 printf("scale = 1\n"); /* defends against cip users */
150 printf(".lf %d\n", curfile->lineno+1);
152 fprintf(stdout, ".PE\n");
153 printf(".lf %d\n", curfile->lineno+1);
155 } else if (buf[0] == '.' && buf[1] == 'l' && buf[2] == 'f') {
156 if (sscanf(buf+3, "%d %s", &ln, buf1) == 2) {
157 free(curfile->fname);
158 printf(".lf %d %s\n", curfile->lineno = ln, curfile->fname = tostring(buf1));
160 printf(".lf %d\n", curfile->lineno = ln);