xref: /plan9/sys/src/cmd/grap/frame.c (revision 14f51593fd82e19ba95969a8c07ff71131015979)
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include "grap.h"
4 #include "y.tab.h"
5 
6 double	frame_ht;	/* default frame height */
7 double	frame_wid;	/* and width */
8 
9 int	nsides	= 0;		/* how many sides given on this frame */
10 char	*sides[] = {
11 		"\tline from Frame.nw to Frame.ne",
12 		"\tline from Frame.sw to Frame.se",
13 		"\tline from Frame.sw to Frame.nw",
14 		"\tline from Frame.se to Frame.ne"
15 };
16 char	*newsides[4] = { 0, 0, 0, 0 };	/* filled in later */
17 
frame(void)18 void frame(void)		/* pump out frame definition, reset for next */
19 {
20 	int i;
21 
22 	fprintf(tfd, "\tframeht = %g\n", frame_ht);
23 	fprintf(tfd, "\tframewid = %g\n", frame_wid);
24 	fprintf(tfd, "Frame:\tbox ht frameht wid framewid with .sw at 0,0 ");
25 	if (nsides == 0)
26 		fprintf(tfd, "\n");
27 	else {
28 		fprintf(tfd, "invis\n");
29 		for (i = 0; i < 4; i++) {
30 			if (newsides[i]) {
31 				fprintf(tfd, "%s\n", newsides[i]);
32 				free(newsides[i]);
33 				newsides[i] = 0;
34 			} else
35 				fprintf(tfd, "%s\n", sides[i]);
36 		}
37 		nsides = 0;
38 	}
39 }
40 
frameht(double f)41 void frameht(double f)	/* set height of frame */
42 {
43 	frame_ht = f;
44 }
45 
framewid(double f)46 void framewid(double f)	/* set width of frame */
47 {
48 	frame_wid = f;
49 }
50 
frameside(int type,Attr * desc)51 void frameside(int type, Attr *desc)	/* create and remember sides */
52 {
53 	int n;
54 	char buf[100];
55 
56 	nsides++;
57 	n = 0;
58 	switch (type) {
59 	case 0:		/* no side specified; kludge up all */
60 		frameside(TOP, desc);
61 		frameside(BOT, desc);
62 		frameside(LEFT, desc);
63 		frameside(RIGHT, desc);
64 		return;
65 	case TOP:	n = 0; break;
66 	case BOT:	n = 1; break;
67 	case LEFT:	n = 2; break;
68 	case RIGHT:	n = 3; break;
69 	}
70 	sprintf(buf, "%s %s", sides[n], desc_str(desc));
71 	newsides[n] = tostring(buf);
72 }
73