|  | #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); | 
|  | } |