coord.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include "grap.h"
  5. #include "y.tab.h"
  6. char *dflt_coord = "gg";
  7. char *curr_coord = "gg";
  8. int ncoord = 0; /* number of explicit coord's given */
  9. Point xcoord;
  10. Point ycoord;
  11. int xcflag = 0; /* 1 if xcoord set */
  12. int ycflag = 0;
  13. int logcoord = 0;
  14. void coord_x(Point pt) /* remember x coord */
  15. {
  16. xcoord = pt;
  17. xcflag = 1;
  18. margin = 0; /* no extra space around picture if explicit coords */
  19. }
  20. void coord_y(Point pt)
  21. {
  22. ycoord = pt;
  23. ycflag = 1;
  24. margin = 0; /* no extra space if explicit coords */
  25. }
  26. void coordlog(int n) /* remember log scaling */
  27. {
  28. logcoord = n;
  29. }
  30. void coord(Obj *p) /* set coord range */
  31. {
  32. static char buf[10];
  33. ncoord++;
  34. if (ncoord > 1 && strcmp(p->name, dflt_coord) == 0) {
  35. /* resetting default coordinate by implication */
  36. sprintf(buf, "gg%d", ncoord);
  37. dflt_coord = buf;
  38. p = lookup(dflt_coord, 1);
  39. }
  40. if (xcflag) {
  41. p->coord |= XFLAG;
  42. p->pt.x = min(xcoord.x,xcoord.y); /* "xcoord" is xmin, xmax */
  43. p->pt1.x = max(xcoord.x,xcoord.y);
  44. if ((logcoord&XFLAG) && p->pt.x <= 0.0)
  45. ERROR "can't have log of x coord %g,%g", p->pt.x, p->pt1.x FATAL;
  46. xcflag = 0;
  47. }
  48. if (ycflag) {
  49. p->coord |= YFLAG;
  50. p->pt.y = min(ycoord.x,ycoord.y); /* "ycoord" is ymin, ymax */
  51. p->pt1.y = max(ycoord.x,ycoord.y);
  52. if ((logcoord&YFLAG) && p->pt.y <= 0.0)
  53. ERROR "can't have log of y coord %g,%g", p->pt.y, p->pt1.y FATAL;
  54. ycflag = 0;
  55. }
  56. p->log = logcoord;
  57. logcoord = 0;
  58. auto_x = 0;
  59. }
  60. void resetcoord(Obj *p) /* reset current coordinate */
  61. {
  62. curr_coord = p->name;
  63. }