frame.c 1.5 KB

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