1 cd5bae78 2004-04-21 devnull #include "astro.h"
4 cd5bae78 2004-04-21 devnull dist(Obj1 *p, Obj1 *q)
8 cd5bae78 2004-04-21 devnull a = sin(p->decl2)*sin(q->decl2) +
9 cd5bae78 2004-04-21 devnull cos(p->decl2)*cos(q->decl2)*cos(p->ra-q->ra);
10 cd5bae78 2004-04-21 devnull a = fabs(atan2(pyth(a), a)) / radsec;
11 cd5bae78 2004-04-21 devnull return a;
15 cd5bae78 2004-04-21 devnull rline(int f)
19 cd5bae78 2004-04-21 devnull static char buf[1024];
20 cd5bae78 2004-04-21 devnull static int bc, bn, bf;
22 cd5bae78 2004-04-21 devnull if(bf != f) {
26 cd5bae78 2004-04-21 devnull p = line;
28 cd5bae78 2004-04-21 devnull if(bn <= 0) {
29 cd5bae78 2004-04-21 devnull bn = read(bf, buf, sizeof(buf));
30 cd5bae78 2004-04-21 devnull if(bn <= 0)
31 cd5bae78 2004-04-21 devnull return 1;
34 cd5bae78 2004-04-21 devnull c = buf[bc];
35 cd5bae78 2004-04-21 devnull bn--; bc++;
36 cd5bae78 2004-04-21 devnull *p++ = c;
37 cd5bae78 2004-04-21 devnull } while(c != '\n');
38 cd5bae78 2004-04-21 devnull return 0;
42 cd5bae78 2004-04-21 devnull sunel(double t)
46 cd5bae78 2004-04-21 devnull i = floor(t);
47 cd5bae78 2004-04-21 devnull if(i < 0 || i > NPTS+1)
48 cd5bae78 2004-04-21 devnull return -90;
49 cd5bae78 2004-04-21 devnull t = osun.point[i].el +
50 cd5bae78 2004-04-21 devnull (t-i)*(osun.point[i+1].el - osun.point[i].el);
51 cd5bae78 2004-04-21 devnull return t;
55 cd5bae78 2004-04-21 devnull rise(Obj2 *op, double el)
59 cd5bae78 2004-04-21 devnull double e1, e2;
63 cd5bae78 2004-04-21 devnull for(i=0; i<=NPTS; i++) {
65 cd5bae78 2004-04-21 devnull e2 = p->point[i].el;
66 cd5bae78 2004-04-21 devnull if(i >= 1 && e1 <= el && e2 > el)
67 cd5bae78 2004-04-21 devnull goto found;
69 cd5bae78 2004-04-21 devnull return -1;
72 cd5bae78 2004-04-21 devnull return i - 1 + (el-e1)/(e2-e1);
76 cd5bae78 2004-04-21 devnull set(Obj2 *op, double el)
80 cd5bae78 2004-04-21 devnull double e1, e2;
84 cd5bae78 2004-04-21 devnull for(i=0; i<=NPTS; i++) {
86 cd5bae78 2004-04-21 devnull e2 = p->point[i].el;
87 cd5bae78 2004-04-21 devnull if(i >= 1 && e1 > el && e2 <= el)
88 cd5bae78 2004-04-21 devnull goto found;
90 cd5bae78 2004-04-21 devnull return -1;
93 cd5bae78 2004-04-21 devnull return i - 1 + (el-e1)/(e2-e1);
97 cd5bae78 2004-04-21 devnull solstice(int n)
100 cd5bae78 2004-04-21 devnull double d1, d2, d3;
102 cd5bae78 2004-04-21 devnull d3 = (n*pi)/2 - pi;
103 cd5bae78 2004-04-21 devnull if(n == 0)
104 cd5bae78 2004-04-21 devnull d3 += pi;
105 cd5bae78 2004-04-21 devnull d2 = 0.;
106 cd5bae78 2004-04-21 devnull for(i=0; i<=NPTS; i++) {
107 cd5bae78 2004-04-21 devnull d1 = d2;
108 cd5bae78 2004-04-21 devnull d2 = osun.point[i].ra;
109 cd5bae78 2004-04-21 devnull if(n == 0) {
110 cd5bae78 2004-04-21 devnull d2 -= pi;
111 cd5bae78 2004-04-21 devnull if(d2 < -pi)
112 cd5bae78 2004-04-21 devnull d2 += pipi;
114 cd5bae78 2004-04-21 devnull if(i >= 1 && d3 >= d1 && d3 < d2)
115 cd5bae78 2004-04-21 devnull goto found;
117 cd5bae78 2004-04-21 devnull return -1;
120 cd5bae78 2004-04-21 devnull return i - (d3-d2)/(d1-d2);
124 cd5bae78 2004-04-21 devnull betcross(double b)
127 cd5bae78 2004-04-21 devnull double d1, d2;
130 cd5bae78 2004-04-21 devnull for(i=0; i<=NPTS; i++) {
131 cd5bae78 2004-04-21 devnull d1 = d2;
132 cd5bae78 2004-04-21 devnull d2 = osun.point[i].mag;
133 cd5bae78 2004-04-21 devnull if(i >= 1 && b >= d1 && b < d2)
134 cd5bae78 2004-04-21 devnull goto found;
136 cd5bae78 2004-04-21 devnull return -1;
139 cd5bae78 2004-04-21 devnull return i - (b-d2)/(d1-d2);
143 cd5bae78 2004-04-21 devnull melong(Obj2 *op)
145 cd5bae78 2004-04-21 devnull Obj2 *p;
147 cd5bae78 2004-04-21 devnull double d1, d2, d3;
152 cd5bae78 2004-04-21 devnull for(i=0; i<=NPTS; i++) {
153 cd5bae78 2004-04-21 devnull d1 = d2;
154 cd5bae78 2004-04-21 devnull d2 = d3;
155 cd5bae78 2004-04-21 devnull d3 = dist(&p->point[i], &osun.point[i]);
156 cd5bae78 2004-04-21 devnull if(i >= 2 && d2 >= d1 && d2 >= d3)
157 cd5bae78 2004-04-21 devnull goto found;
159 cd5bae78 2004-04-21 devnull return -1;
162 cd5bae78 2004-04-21 devnull return i - 2;
165 cd5bae78 2004-04-21 devnull #define NEVENT 100
166 cd5bae78 2004-04-21 devnull Event events[NEVENT];
167 cd5bae78 2004-04-21 devnull Event* eventp = 0;
170 cd5bae78 2004-04-21 devnull event(char *format, char *arg1, char *arg2, double tim, int flag)
172 cd5bae78 2004-04-21 devnull Event *p;
174 cd5bae78 2004-04-21 devnull if(flag & DARK)
175 cd5bae78 2004-04-21 devnull if(sunel(tim) > -12)
177 cd5bae78 2004-04-21 devnull if(flag & LIGHT)
178 cd5bae78 2004-04-21 devnull if(sunel(tim) < 0)
180 cd5bae78 2004-04-21 devnull if(eventp == 0)
181 cd5bae78 2004-04-21 devnull eventp = events;
182 cd5bae78 2004-04-21 devnull p = eventp;
183 cd5bae78 2004-04-21 devnull if(p >= events+NEVENT) {
184 cd5bae78 2004-04-21 devnull fprint(2, "too many events\n");
187 cd5bae78 2004-04-21 devnull eventp++;
188 cd5bae78 2004-04-21 devnull p->format = format;
189 cd5bae78 2004-04-21 devnull p->arg1 = arg1;
190 cd5bae78 2004-04-21 devnull p->arg2 = arg2;
191 cd5bae78 2004-04-21 devnull p->tim = tim;
192 cd5bae78 2004-04-21 devnull p->flag = flag;
195 2b604081 2005-05-07 devnull int evcomp(const void*, const void*);
198 cd5bae78 2004-04-21 devnull evflush(void)
200 cd5bae78 2004-04-21 devnull Event *p;
202 cd5bae78 2004-04-21 devnull if(eventp == 0)
204 cd5bae78 2004-04-21 devnull qsort(events, eventp-events, sizeof *p, evcomp);
205 cd5bae78 2004-04-21 devnull for(p = events; p<eventp; p++) {
206 cd5bae78 2004-04-21 devnull if((p->flag&SIGNIF) && flags['s'])
207 cd5bae78 2004-04-21 devnull print("ding ding ding ");
208 cd5bae78 2004-04-21 devnull print(p->format, p->arg1, p->arg2);
209 cd5bae78 2004-04-21 devnull if(p->flag & PTIME)
210 cd5bae78 2004-04-21 devnull ptime(day + p->tim*deld);
211 cd5bae78 2004-04-21 devnull print("\n");
213 cd5bae78 2004-04-21 devnull eventp = 0;
217 2b604081 2005-05-07 devnull evcomp(const void *a1, const void *a2)
219 cd5bae78 2004-04-21 devnull double t1, t2;
220 cd5bae78 2004-04-21 devnull Event *p1, *p2;
222 2b604081 2005-05-07 devnull p1 = (Event*)a1;
223 2b604081 2005-05-07 devnull p2 = (Event*)a2;
224 cd5bae78 2004-04-21 devnull t1 = p1->tim;
225 cd5bae78 2004-04-21 devnull t2 = p2->tim;
226 cd5bae78 2004-04-21 devnull if(p1->flag & SIGNIF)
227 cd5bae78 2004-04-21 devnull t1 -= 1000.;
228 cd5bae78 2004-04-21 devnull if(p2->flag & SIGNIF)
229 cd5bae78 2004-04-21 devnull t2 -= 1000.;
230 cd5bae78 2004-04-21 devnull if(t1 > t2)
231 cd5bae78 2004-04-21 devnull return 1;
232 cd5bae78 2004-04-21 devnull if(t2 > t1)
233 cd5bae78 2004-04-21 devnull return -1;
234 cd5bae78 2004-04-21 devnull return 0;
238 cd5bae78 2004-04-21 devnull pyth(double x)
242 cd5bae78 2004-04-21 devnull if(x > 1)
244 cd5bae78 2004-04-21 devnull return sqrt(1-x);
248 cd5bae78 2004-04-21 devnull skip(int n)
251 cd5bae78 2004-04-21 devnull char *cp;
253 cd5bae78 2004-04-21 devnull cp = line;
254 cd5bae78 2004-04-21 devnull for(i=0; i<n; i++) {
255 cd5bae78 2004-04-21 devnull while(*cp == ' ' || *cp == '\t')
257 cd5bae78 2004-04-21 devnull while(*cp != '\n' && *cp != ' ' && *cp != '\t')
260 cd5bae78 2004-04-21 devnull while(*cp == ' ' || *cp == '\t')
262 cd5bae78 2004-04-21 devnull return cp;