Blob


1 #include "astro.h"
3 char* solstr[] =
4 {
5 "Fall equinox",
6 "Winter solstice",
7 "Spring equinox",
8 "Summer solstice"
9 };
11 struct
12 {
13 double beta;
14 int rta;
15 int dec;
16 char *betstr;
17 } bettab[] =
18 {
19 -1.3572, 231, 50, "Quadrantid",
20 0.7620, 336, 0, "Eta aquarid",
21 1.5497, 260, -20, "Ophiuchid",
22 2.1324, 315, -15, "Capricornid",
23 2.1991, 339, -17, "Delta aquarid",
24 2.2158, 340, -30, "Pisces australid",
25 2.4331, 46, 58, "Perseid",
26 -2.6578, 95, 15, "Orionid",
27 -1.8678, 15, -55, "Phoenicid",
28 -1.7260, 113, 32, "Geminid",
29 0
30 };
32 void
33 search(void)
34 {
35 Obj2 *p, *q;
36 int i, j;
37 double t;
39 for(i=0; objlst[i]; i++) {
40 p = objlst[i];
41 if(p == &oshad)
42 continue;
43 t = rise(p, -.833);
44 if(t >= 0.)
45 event("%s rises at ", p->name, "", t,
46 i==0? PTIME: PTIME|DARK);
47 t = set(p, -.833);
48 if(t >= 0.)
49 event("%s sets at ", p->name, "", t,
50 i==0? PTIME: PTIME|DARK);
51 if(p == &osun) {
52 for(j=0; j<4; j++) {
53 t = solstice(j);
54 if(t >= 0)
55 event("%s at ", solstr[j], "", t,
56 SIGNIF|PTIME);
57 }
58 for(j=0; bettab[j].beta!=0; j++) {
59 t = betcross(bettab[j].beta);
60 if(t >= 0)
61 event("%s meeteeor shouwer",
62 bettab[j].betstr, "", t, SIGNIF);
63 }
64 t = rise(p, -18);
65 if(t >= 0)
66 event("Twilight starts at ", "", "", t, PTIME);
67 t = set(p, -18);
68 if(t >= 0)
69 event("Twilight ends at ", "", "", t, PTIME);
70 }
71 if(p == &omoon)
72 for(j=0; j<NPTS; j++) {
73 if(p->point[j].mag > .75 && p->point[j+1].mag < .25)
74 event("New moon", "", "", 0, 0);
75 if(p->point[j].mag <= .25 && p->point[j+1].mag > .25)
76 event("First quarter moon", "", "", 0, 0);
77 if(p->point[j].mag <= .50 && p->point[j+1].mag > .50)
78 event("Full moon", "", "", 0, 0);
79 if(p->point[j].mag <= .75 && p->point[j+1].mag > .75)
80 event("Last quarter moon", "", "", 0, 0);
81 }
82 if(p == &omerc || p == &ovenus) {
83 t = melong(p);
84 if(t >= 0) {
85 t = rise(p, 0) - rise(&osun, 0);
86 if(t < 0)
87 t += NPTS;
88 if(t > NPTS)
89 t -= NPTS;
90 if(t > NPTS/2)
91 event("Morning elongation of %s", p->name,
92 "", 0, SIGNIF);
93 else
94 event("Evening elongation of %s", p->name,
95 "", 0, SIGNIF);
96 }
97 }
98 for(j=i; objlst[j]; j++) {
99 if(i == j)
100 continue;
101 q = objlst[j];
102 if(p == &omoon || q == &omoon) {
103 occult(p, q, 0);
104 if(occ.t3 < 0)
105 continue;
106 if(p == &osun || q == &oshad) {
107 if(occ.t1 >= 0)
108 event("Partial eclipse of %s begins at ", p->name, "",
109 occ.t1, SIGNIF|PTIME);
110 if(occ.t2 >= 0)
111 event("Total eclipse of %s begins at ", p->name, "",
112 occ.t2, SIGNIF|PTIME);
113 if(occ.t4 >= 0)
114 event("Total eclipse of %s ends at ", p->name, "",
115 occ.t4, SIGNIF|PTIME);
116 if(occ.t5 >= 0)
117 event("Partial eclipse of %s ends at ", p->name, "",
118 occ.t5, SIGNIF|PTIME);
119 } else {
120 if(occ.t1 >= 0)
121 event("Occultation of %s begins at ", q->name, "",
122 occ.t1, SIGNIF|PTIME);
123 if(occ.t5 >= 0)
124 event("Occultation of %s ends at ", q->name, "",
125 occ.t5, SIGNIF|PTIME);
127 continue;
129 if(p == &osun) {
130 if(q != &omerc && q != &ovenus)
131 continue;
132 occult(p, q, -1);
133 if(occ.t3 >= 0.) {
134 if(occ.t1 >= 0)
135 event("Transit of %s begins at ", q->name, "",
136 occ.t1, SIGNIF|LIGHT|PTIME);
137 if(occ.t5 >= 0)
138 event("Transit of %s ends at ", q->name, "",
139 occ.t5, SIGNIF|LIGHT|PTIME);
141 continue;
143 t = dist(&p->point[0], &q->point[0]);
144 if(t > 5000)
145 continue;
146 event("%s is in the house of %s",
147 p->name, q->name, 0, 0);
150 if(flags['o'])
151 stars();
152 if(flags['a'])
153 satels();
154 evflush();