81 lines · 1.9 KB · C
RawDownload
/*  * This file is part of the UCB release of Plan 9. It is subject to the license * terms in the LICENSE file found in the top-level directory of this * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No * part of the UCB release of Plan 9, including this file, may be copied, * modified, propagated, or distributed except according to the terms contained * in the LICENSE file. */ #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]; 	nsides++;	n = 0;	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);}