]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/grap/frame.c
devpccard, pci: fix pccard support and handle pci expansion roms
[plan9front.git] / sys / src / cmd / grap / frame.c
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
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
41 void frameht(double f)  /* set height of frame */
42 {
43         frame_ht = f;
44 }
45
46 void framewid(double f) /* set width of frame */
47 {
48         frame_wid = f;
49 }
50
51 void frameside(int type, Attr *desc)    /* create and remember sides */
52 {
53         int n;
54         char buf[100];
55
56         nsides++;
57         switch (type) {
58         case 0:         /* no side specified; kludge up all */
59                 frameside(TOP, desc);
60                 frameside(BOT, desc);
61                 frameside(LEFT, desc);
62                 frameside(RIGHT, desc);
63                 return;
64         case TOP:       n = 0; break;
65         case BOT:       n = 1; break;
66         case LEFT:      n = 2; break;
67         case RIGHT:     n = 3; break;
68         }
69         sprintf(buf, "%s %s", sides[n], desc_str(desc));
70         newsides[n] = tostring(buf);
71 }