xref: /plan9/sys/src/cmd/grap/frame.c (revision 14f51593fd82e19ba95969a8c07ff71131015979)
13e12c5d1SDavid du Colombier #include <stdio.h>
23e12c5d1SDavid du Colombier #include <stdlib.h>
33e12c5d1SDavid du Colombier #include "grap.h"
43e12c5d1SDavid du Colombier #include "y.tab.h"
53e12c5d1SDavid du Colombier 
63e12c5d1SDavid du Colombier double	frame_ht;	/* default frame height */
73e12c5d1SDavid du Colombier double	frame_wid;	/* and width */
83e12c5d1SDavid du Colombier 
93e12c5d1SDavid du Colombier int	nsides	= 0;		/* how many sides given on this frame */
103e12c5d1SDavid du Colombier char	*sides[] = {
113e12c5d1SDavid du Colombier 		"\tline from Frame.nw to Frame.ne",
123e12c5d1SDavid du Colombier 		"\tline from Frame.sw to Frame.se",
133e12c5d1SDavid du Colombier 		"\tline from Frame.sw to Frame.nw",
143e12c5d1SDavid du Colombier 		"\tline from Frame.se to Frame.ne"
153e12c5d1SDavid du Colombier };
163e12c5d1SDavid du Colombier char	*newsides[4] = { 0, 0, 0, 0 };	/* filled in later */
173e12c5d1SDavid du Colombier 
frame(void)183e12c5d1SDavid du Colombier void frame(void)		/* pump out frame definition, reset for next */
193e12c5d1SDavid du Colombier {
203e12c5d1SDavid du Colombier 	int i;
213e12c5d1SDavid du Colombier 
223e12c5d1SDavid du Colombier 	fprintf(tfd, "\tframeht = %g\n", frame_ht);
233e12c5d1SDavid du Colombier 	fprintf(tfd, "\tframewid = %g\n", frame_wid);
243e12c5d1SDavid du Colombier 	fprintf(tfd, "Frame:\tbox ht frameht wid framewid with .sw at 0,0 ");
253e12c5d1SDavid du Colombier 	if (nsides == 0)
263e12c5d1SDavid du Colombier 		fprintf(tfd, "\n");
273e12c5d1SDavid du Colombier 	else {
283e12c5d1SDavid du Colombier 		fprintf(tfd, "invis\n");
293e12c5d1SDavid du Colombier 		for (i = 0; i < 4; i++) {
303e12c5d1SDavid du Colombier 			if (newsides[i]) {
313e12c5d1SDavid du Colombier 				fprintf(tfd, "%s\n", newsides[i]);
323e12c5d1SDavid du Colombier 				free(newsides[i]);
333e12c5d1SDavid du Colombier 				newsides[i] = 0;
343e12c5d1SDavid du Colombier 			} else
353e12c5d1SDavid du Colombier 				fprintf(tfd, "%s\n", sides[i]);
363e12c5d1SDavid du Colombier 		}
373e12c5d1SDavid du Colombier 		nsides = 0;
383e12c5d1SDavid du Colombier 	}
393e12c5d1SDavid du Colombier }
403e12c5d1SDavid du Colombier 
frameht(double f)413e12c5d1SDavid du Colombier void frameht(double f)	/* set height of frame */
423e12c5d1SDavid du Colombier {
433e12c5d1SDavid du Colombier 	frame_ht = f;
443e12c5d1SDavid du Colombier }
453e12c5d1SDavid du Colombier 
framewid(double f)463e12c5d1SDavid du Colombier void framewid(double f)	/* set width of frame */
473e12c5d1SDavid du Colombier {
483e12c5d1SDavid du Colombier 	frame_wid = f;
493e12c5d1SDavid du Colombier }
503e12c5d1SDavid du Colombier 
frameside(int type,Attr * desc)513e12c5d1SDavid du Colombier void frameside(int type, Attr *desc)	/* create and remember sides */
523e12c5d1SDavid du Colombier {
533e12c5d1SDavid du Colombier 	int n;
543e12c5d1SDavid du Colombier 	char buf[100];
553e12c5d1SDavid du Colombier 
563e12c5d1SDavid du Colombier 	nsides++;
57*14f51593SDavid du Colombier 	n = 0;
583e12c5d1SDavid du Colombier 	switch (type) {
593e12c5d1SDavid du Colombier 	case 0:		/* no side specified; kludge up all */
603e12c5d1SDavid du Colombier 		frameside(TOP, desc);
613e12c5d1SDavid du Colombier 		frameside(BOT, desc);
623e12c5d1SDavid du Colombier 		frameside(LEFT, desc);
633e12c5d1SDavid du Colombier 		frameside(RIGHT, desc);
643e12c5d1SDavid du Colombier 		return;
653e12c5d1SDavid du Colombier 	case TOP:	n = 0; break;
663e12c5d1SDavid du Colombier 	case BOT:	n = 1; break;
673e12c5d1SDavid du Colombier 	case LEFT:	n = 2; break;
683e12c5d1SDavid du Colombier 	case RIGHT:	n = 3; break;
693e12c5d1SDavid du Colombier 	}
703e12c5d1SDavid du Colombier 	sprintf(buf, "%s %s", sides[n], desc_str(desc));
713e12c5d1SDavid du Colombier 	newsides[n] = tostring(buf);
723e12c5d1SDavid du Colombier }
73