frame.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. n = 0;
  50. switch (type) {
  51. case 0: /* no side specified; kludge up all */
  52. frameside(TOP, desc);
  53. frameside(BOT, desc);
  54. frameside(LEFT, desc);
  55. frameside(RIGHT, desc);
  56. return;
  57. case TOP: n = 0; break;
  58. case BOT: n = 1; break;
  59. case LEFT: n = 2; break;
  60. case RIGHT: n = 3; break;
  61. }
  62. sprintf(buf, "%s %s", sides[n], desc_str(desc));
  63. newsides[n] = tostring(buf);
  64. }