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