Blame


1 cd5bae78 2004-04-21 devnull #include "astro.h"
2 cd5bae78 2004-04-21 devnull
3 cd5bae78 2004-04-21 devnull double
4 cd5bae78 2004-04-21 devnull dist(Obj1 *p, Obj1 *q)
5 cd5bae78 2004-04-21 devnull {
6 cd5bae78 2004-04-21 devnull double a;
7 cd5bae78 2004-04-21 devnull
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;
12 cd5bae78 2004-04-21 devnull }
13 cd5bae78 2004-04-21 devnull
14 cd5bae78 2004-04-21 devnull int
15 cd5bae78 2004-04-21 devnull rline(int f)
16 cd5bae78 2004-04-21 devnull {
17 cd5bae78 2004-04-21 devnull char *p;
18 cd5bae78 2004-04-21 devnull int c;
19 cd5bae78 2004-04-21 devnull static char buf[1024];
20 cd5bae78 2004-04-21 devnull static int bc, bn, bf;
21 cd5bae78 2004-04-21 devnull
22 cd5bae78 2004-04-21 devnull if(bf != f) {
23 cd5bae78 2004-04-21 devnull bf = f;
24 cd5bae78 2004-04-21 devnull bn = 0;
25 cd5bae78 2004-04-21 devnull }
26 cd5bae78 2004-04-21 devnull p = line;
27 cd5bae78 2004-04-21 devnull do {
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;
32 cd5bae78 2004-04-21 devnull bc = 0;
33 cd5bae78 2004-04-21 devnull }
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;
39 cd5bae78 2004-04-21 devnull }
40 cd5bae78 2004-04-21 devnull
41 cd5bae78 2004-04-21 devnull double
42 cd5bae78 2004-04-21 devnull sunel(double t)
43 cd5bae78 2004-04-21 devnull {
44 cd5bae78 2004-04-21 devnull int i;
45 cd5bae78 2004-04-21 devnull
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;
52 cd5bae78 2004-04-21 devnull }
53 cd5bae78 2004-04-21 devnull
54 cd5bae78 2004-04-21 devnull double
55 cd5bae78 2004-04-21 devnull rise(Obj2 *op, double el)
56 cd5bae78 2004-04-21 devnull {
57 cd5bae78 2004-04-21 devnull Obj2 *p;
58 cd5bae78 2004-04-21 devnull int i;
59 cd5bae78 2004-04-21 devnull double e1, e2;
60 cd5bae78 2004-04-21 devnull
61 cd5bae78 2004-04-21 devnull e2 = 0;
62 cd5bae78 2004-04-21 devnull p = op;
63 cd5bae78 2004-04-21 devnull for(i=0; i<=NPTS; i++) {
64 cd5bae78 2004-04-21 devnull e1 = e2;
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;
68 cd5bae78 2004-04-21 devnull }
69 cd5bae78 2004-04-21 devnull return -1;
70 cd5bae78 2004-04-21 devnull
71 cd5bae78 2004-04-21 devnull found:
72 cd5bae78 2004-04-21 devnull return i - 1 + (el-e1)/(e2-e1);
73 cd5bae78 2004-04-21 devnull }
74 cd5bae78 2004-04-21 devnull
75 cd5bae78 2004-04-21 devnull double
76 cd5bae78 2004-04-21 devnull set(Obj2 *op, double el)
77 cd5bae78 2004-04-21 devnull {
78 cd5bae78 2004-04-21 devnull Obj2 *p;
79 cd5bae78 2004-04-21 devnull int i;
80 cd5bae78 2004-04-21 devnull double e1, e2;
81 cd5bae78 2004-04-21 devnull
82 cd5bae78 2004-04-21 devnull e2 = 0;
83 cd5bae78 2004-04-21 devnull p = op;
84 cd5bae78 2004-04-21 devnull for(i=0; i<=NPTS; i++) {
85 cd5bae78 2004-04-21 devnull e1 = e2;
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;
89 cd5bae78 2004-04-21 devnull }
90 cd5bae78 2004-04-21 devnull return -1;
91 cd5bae78 2004-04-21 devnull
92 cd5bae78 2004-04-21 devnull found:
93 cd5bae78 2004-04-21 devnull return i - 1 + (el-e1)/(e2-e1);
94 cd5bae78 2004-04-21 devnull }
95 cd5bae78 2004-04-21 devnull
96 cd5bae78 2004-04-21 devnull double
97 cd5bae78 2004-04-21 devnull solstice(int n)
98 cd5bae78 2004-04-21 devnull {
99 cd5bae78 2004-04-21 devnull int i;
100 cd5bae78 2004-04-21 devnull double d1, d2, d3;
101 cd5bae78 2004-04-21 devnull
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;
113 cd5bae78 2004-04-21 devnull }
114 cd5bae78 2004-04-21 devnull if(i >= 1 && d3 >= d1 && d3 < d2)
115 cd5bae78 2004-04-21 devnull goto found;
116 cd5bae78 2004-04-21 devnull }
117 cd5bae78 2004-04-21 devnull return -1;
118 cd5bae78 2004-04-21 devnull
119 cd5bae78 2004-04-21 devnull found:
120 cd5bae78 2004-04-21 devnull return i - (d3-d2)/(d1-d2);
121 cd5bae78 2004-04-21 devnull }
122 cd5bae78 2004-04-21 devnull
123 cd5bae78 2004-04-21 devnull double
124 cd5bae78 2004-04-21 devnull betcross(double b)
125 cd5bae78 2004-04-21 devnull {
126 cd5bae78 2004-04-21 devnull int i;
127 cd5bae78 2004-04-21 devnull double d1, d2;
128 cd5bae78 2004-04-21 devnull
129 cd5bae78 2004-04-21 devnull d2 = 0;
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;
135 cd5bae78 2004-04-21 devnull }
136 cd5bae78 2004-04-21 devnull return -1;
137 cd5bae78 2004-04-21 devnull
138 cd5bae78 2004-04-21 devnull found:
139 cd5bae78 2004-04-21 devnull return i - (b-d2)/(d1-d2);
140 cd5bae78 2004-04-21 devnull }
141 cd5bae78 2004-04-21 devnull
142 cd5bae78 2004-04-21 devnull double
143 cd5bae78 2004-04-21 devnull melong(Obj2 *op)
144 cd5bae78 2004-04-21 devnull {
145 cd5bae78 2004-04-21 devnull Obj2 *p;
146 cd5bae78 2004-04-21 devnull int i;
147 cd5bae78 2004-04-21 devnull double d1, d2, d3;
148 cd5bae78 2004-04-21 devnull
149 cd5bae78 2004-04-21 devnull d2 = 0;
150 cd5bae78 2004-04-21 devnull d3 = 0;
151 cd5bae78 2004-04-21 devnull p = op;
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;
158 cd5bae78 2004-04-21 devnull }
159 cd5bae78 2004-04-21 devnull return -1;
160 cd5bae78 2004-04-21 devnull
161 cd5bae78 2004-04-21 devnull found:
162 cd5bae78 2004-04-21 devnull return i - 2;
163 cd5bae78 2004-04-21 devnull }
164 cd5bae78 2004-04-21 devnull
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;
168 cd5bae78 2004-04-21 devnull
169 cd5bae78 2004-04-21 devnull void
170 cd5bae78 2004-04-21 devnull event(char *format, char *arg1, char *arg2, double tim, int flag)
171 cd5bae78 2004-04-21 devnull {
172 cd5bae78 2004-04-21 devnull Event *p;
173 cd5bae78 2004-04-21 devnull
174 cd5bae78 2004-04-21 devnull if(flag & DARK)
175 cd5bae78 2004-04-21 devnull if(sunel(tim) > -12)
176 cd5bae78 2004-04-21 devnull return;
177 cd5bae78 2004-04-21 devnull if(flag & LIGHT)
178 cd5bae78 2004-04-21 devnull if(sunel(tim) < 0)
179 cd5bae78 2004-04-21 devnull return;
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");
185 cd5bae78 2004-04-21 devnull return;
186 cd5bae78 2004-04-21 devnull }
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;
193 cd5bae78 2004-04-21 devnull }
194 cd5bae78 2004-04-21 devnull
195 2b604081 2005-05-07 devnull int evcomp(const void*, const void*);
196 cd5bae78 2004-04-21 devnull
197 cd5bae78 2004-04-21 devnull void
198 cd5bae78 2004-04-21 devnull evflush(void)
199 cd5bae78 2004-04-21 devnull {
200 cd5bae78 2004-04-21 devnull Event *p;
201 cd5bae78 2004-04-21 devnull
202 cd5bae78 2004-04-21 devnull if(eventp == 0)
203 cd5bae78 2004-04-21 devnull return;
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");
212 cd5bae78 2004-04-21 devnull }
213 cd5bae78 2004-04-21 devnull eventp = 0;
214 cd5bae78 2004-04-21 devnull }
215 cd5bae78 2004-04-21 devnull
216 cd5bae78 2004-04-21 devnull int
217 2b604081 2005-05-07 devnull evcomp(const void *a1, const void *a2)
218 cd5bae78 2004-04-21 devnull {
219 cd5bae78 2004-04-21 devnull double t1, t2;
220 cd5bae78 2004-04-21 devnull Event *p1, *p2;
221 cd5bae78 2004-04-21 devnull
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;
235 cd5bae78 2004-04-21 devnull }
236 cd5bae78 2004-04-21 devnull
237 cd5bae78 2004-04-21 devnull double
238 cd5bae78 2004-04-21 devnull pyth(double x)
239 cd5bae78 2004-04-21 devnull {
240 cd5bae78 2004-04-21 devnull
241 cd5bae78 2004-04-21 devnull x *= x;
242 cd5bae78 2004-04-21 devnull if(x > 1)
243 cd5bae78 2004-04-21 devnull x = 1;
244 cd5bae78 2004-04-21 devnull return sqrt(1-x);
245 cd5bae78 2004-04-21 devnull }
246 cd5bae78 2004-04-21 devnull
247 cd5bae78 2004-04-21 devnull char*
248 cd5bae78 2004-04-21 devnull skip(int n)
249 cd5bae78 2004-04-21 devnull {
250 cd5bae78 2004-04-21 devnull int i;
251 cd5bae78 2004-04-21 devnull char *cp;
252 cd5bae78 2004-04-21 devnull
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')
256 cd5bae78 2004-04-21 devnull cp++;
257 cd5bae78 2004-04-21 devnull while(*cp != '\n' && *cp != ' ' && *cp != '\t')
258 cd5bae78 2004-04-21 devnull cp++;
259 cd5bae78 2004-04-21 devnull }
260 cd5bae78 2004-04-21 devnull while(*cp == ' ' || *cp == '\t')
261 cd5bae78 2004-04-21 devnull cp++;
262 cd5bae78 2004-04-21 devnull return cp;
263 cd5bae78 2004-04-21 devnull }