| #include <stdio.h> |
| #include <stdlib.h> |
| #include "grap.h" |
| #include "y.tab.h" |
| |
| double frame_ht; /* default frame height */ |
| double frame_wid; /* and width */ |
| |
| int nsides = 0; /* how many sides given on this frame */ |
| char *sides[] = { |
| "\tline from Frame.nw to Frame.ne", |
| "\tline from Frame.sw to Frame.se", |
| "\tline from Frame.sw to Frame.nw", |
| "\tline from Frame.se to Frame.ne" |
| }; |
| char *newsides[4] = { 0, 0, 0, 0 }; /* filled in later */ |
| |
| void frame(void) /* pump out frame definition, reset for next */ |
| { |
| int i; |
| |
| fprintf(tfd, "\tframeht = %g\n", frame_ht); |
| fprintf(tfd, "\tframewid = %g\n", frame_wid); |
| fprintf(tfd, "Frame:\tbox ht frameht wid framewid with .sw at 0,0 "); |
| if (nsides == 0) |
| fprintf(tfd, "\n"); |
| else { |
| fprintf(tfd, "invis\n"); |
| for (i = 0; i < 4; i++) { |
| if (newsides[i]) { |
| fprintf(tfd, "%s\n", newsides[i]); |
| free(newsides[i]); |
| newsides[i] = 0; |
| } else |
| fprintf(tfd, "%s\n", sides[i]); |
| } |
| nsides = 0; |
| } |
| } |
| |
| void frameht(double f) /* set height of frame */ |
| { |
| frame_ht = f; |
| } |
| |
| void framewid(double f) /* set width of frame */ |
| { |
| frame_wid = f; |
| } |
| |
| void frameside(int type, Attr *desc) /* create and remember sides */ |
| { |
| int n; |
| char buf[100]; |
| |
| n = 0; /* gcc */ |
| |
| nsides++; |
| switch (type) { |
| case 0: /* no side specified; kludge up all */ |
| frameside(TOP, desc); |
| frameside(BOT, desc); |
| frameside(LEFT, desc); |
| frameside(RIGHT, desc); |
| return; |
| case TOP: n = 0; break; |
| case BOT: n = 1; break; |
| case LEFT: n = 2; break; |
| case RIGHT: n = 3; break; |
| } |
| sprintf(buf, "%s %s", sides[n], desc_str(desc)); |
| newsides[n] = tostring(buf); |
| } |