ti.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /* ti.c: classify line intersections */
  2. # include "t.h"
  3. /* determine local environment for intersections */
  4. int
  5. interv(int i, int c)
  6. {
  7. int ku, kl;
  8. if (c >= ncol || c == 0) {
  9. if (dboxflg) {
  10. if (i == 0)
  11. return(BOT);
  12. if (i >= nlin)
  13. return(TOP);
  14. return(THRU);
  15. }
  16. if (c >= ncol)
  17. return(0);
  18. }
  19. ku = i > 0 ? lefdata(i - 1, c) : 0;
  20. if (i + 1 >= nlin && allh(i))
  21. kl = 0;
  22. else
  23. kl = lefdata(allh(i) ? i + 1 : i, c);
  24. if (ku == 2 && kl == 2)
  25. return(THRU);
  26. if (ku == 2)
  27. return(TOP);
  28. if (kl == BOT)
  29. return(2);
  30. return(0);
  31. }
  32. int
  33. interh(int i, int c)
  34. {
  35. int kl, kr;
  36. if (fullbot[i] == '=' || (dboxflg && (i == 0 || i >= nlin - 1))) {
  37. if (c == ncol)
  38. return(LEFT);
  39. if (c == 0)
  40. return(RIGHT);
  41. return(THRU);
  42. }
  43. if (i >= nlin)
  44. return(0);
  45. kl = c > 0 ? thish (i, c - 1) : 0;
  46. if (kl <= 1 && i > 0 && allh(up1(i)))
  47. kl = c > 0 ? thish(up1(i), c - 1) : 0;
  48. kr = thish(i, c);
  49. if (kr <= 1 && i > 0 && allh(up1(i)))
  50. kr = c > 0 ? thish(up1(i), c) : 0;
  51. if (kl == '=' && kr == '=')
  52. return(THRU);
  53. if (kl == '=')
  54. return(LEFT);
  55. if (kr == '=')
  56. return(RIGHT);
  57. return(0);
  58. }
  59. int
  60. up1(int i)
  61. {
  62. i--;
  63. while (instead[i] && i > 0)
  64. i--;
  65. return(i);
  66. }