stars.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #include "astro.h"
  2. char* startab = "/lib/sky/estartab";
  3. void
  4. stars(void)
  5. {
  6. double lomoon, himoon, sd;
  7. int wrap, f, i;
  8. char *saop;
  9. static char saoa[100];
  10. sd = 1000*radsec;
  11. lomoon = omoon.point[0].ra - sd;
  12. if(lomoon < 0)
  13. lomoon += pipi;
  14. himoon = omoon.point[NPTS+1].ra + sd;
  15. if(himoon > pipi)
  16. himoon -= pipi;
  17. lomoon *= 12/pi;
  18. himoon *= 12/pi;
  19. wrap = 0;
  20. if(lomoon > himoon)
  21. wrap++;
  22. f = open(startab, OREAD);
  23. if(f < 0) {
  24. fprint(2, "%s?\n", startab);
  25. return;
  26. }
  27. epoch = 1950.0;
  28. epoch = (epoch-1900.0) * 365.24220 + 0.313;
  29. saop = saoa;
  30. /*
  31. * read mean places of stars at epoch of star table
  32. */
  33. loop:
  34. if(rline(f)) {
  35. close(f);
  36. return;
  37. }
  38. rah = atof(line+17);
  39. ram = atof(line+20);
  40. ras = atof(line+23);
  41. alpha = rah + ram/60 + ras/3600;
  42. if(wrap == 0) {
  43. if(alpha < lomoon || alpha > himoon)
  44. goto loop;
  45. } else
  46. if(alpha < lomoon && alpha > himoon)
  47. goto loop;
  48. sao = atof(line+0);
  49. sprint(saop, "%ld", sao);
  50. da = atof(line+30);
  51. dday = atof(line+37);
  52. dmin = atof(line+41);
  53. dsec = atof(line+44);
  54. dd = atof(line+50);
  55. px = atof(line+57);
  56. mag = atof(line+61);
  57. /*
  58. * convert rt ascension and declination to internal format
  59. */
  60. delta = fabs(dday) + dmin/60 + dsec/3600;
  61. if(dday < 0)
  62. delta = -delta;
  63. star();
  64. /*
  65. * if(fabs(beta) > 6.55*radian)
  66. * goto loop;
  67. */
  68. sd = .0896833e0*cos(beta)*sin(lambda-1.3820+.00092422117*eday)
  69. + 0.99597*sin(beta);
  70. if(fabs(sd) > .0183)
  71. goto loop;
  72. for(i=0; i<=NPTS+1; i++)
  73. setobj(&ostar.point[i]);
  74. occult(&omoon, &ostar, 0);
  75. if(occ.t1 >= 0 || occ.t5 >= 0) {
  76. i = PTIME;
  77. if(mag > 2)
  78. i |= DARK;
  79. if(mag < 5)
  80. i |= SIGNIF;
  81. if(occ.t1 >= 0 && occ.e1 >= 0)
  82. event("Occultation of SAO %s begins at ",
  83. saop, "", occ.t1, i);
  84. if(occ.t5 >= 0 && occ.e5 >= 0)
  85. event("Occultation of SAO %s ends at ",
  86. saop, "", occ.t5, i);
  87. while(*saop++)
  88. ;
  89. }
  90. goto loop;
  91. }