Blame


1 cd5bae78 2004-04-21 devnull #include "astro.h"
2 cd5bae78 2004-04-21 devnull
3 79f2723f 2004-04-21 devnull char* herefile;
4 cd5bae78 2004-04-21 devnull
5 cd5bae78 2004-04-21 devnull int
6 cd5bae78 2004-04-21 devnull main(int argc, char *argv[])
7 cd5bae78 2004-04-21 devnull {
8 cd5bae78 2004-04-21 devnull int i, j;
9 cd5bae78 2004-04-21 devnull double d;
10 cd5bae78 2004-04-21 devnull
11 cd5bae78 2004-04-21 devnull pi = atan(1.0)*4;
12 cd5bae78 2004-04-21 devnull pipi = pi*2;
13 cd5bae78 2004-04-21 devnull radian = pi/180;
14 cd5bae78 2004-04-21 devnull radsec = radian/3600;
15 cd5bae78 2004-04-21 devnull converge = 1.0e-14;
16 cd5bae78 2004-04-21 devnull
17 8f8b0e54 2004-04-21 devnull startab = unsharp("#9/sky/estartab");
18 8f8b0e54 2004-04-21 devnull herefile = unsharp("#9/sky/here");
19 79f2723f 2004-04-21 devnull
20 cd5bae78 2004-04-21 devnull fmtinstall('R', Rconv);
21 cd5bae78 2004-04-21 devnull fmtinstall('D', Dconv);
22 cd5bae78 2004-04-21 devnull
23 cd5bae78 2004-04-21 devnull per = PER;
24 cd5bae78 2004-04-21 devnull deld = PER/NPTS;
25 cd5bae78 2004-04-21 devnull init();
26 cd5bae78 2004-04-21 devnull args(argc, argv);
27 cd5bae78 2004-04-21 devnull init();
28 cd5bae78 2004-04-21 devnull
29 cd5bae78 2004-04-21 devnull loop:
30 cd5bae78 2004-04-21 devnull d = day;
31 cd5bae78 2004-04-21 devnull pdate(d);
32 cd5bae78 2004-04-21 devnull if(flags['p'] || flags['e']) {
33 cd5bae78 2004-04-21 devnull print(" ");
34 cd5bae78 2004-04-21 devnull ptime(d);
35 cd5bae78 2004-04-21 devnull pstime(d);
36 cd5bae78 2004-04-21 devnull }
37 cd5bae78 2004-04-21 devnull print("\n");
38 cd5bae78 2004-04-21 devnull for(i=0; i<=NPTS+1; i++) {
39 cd5bae78 2004-04-21 devnull setime(d);
40 cd5bae78 2004-04-21 devnull
41 cd5bae78 2004-04-21 devnull for(j=0; objlst[j]; j++) {
42 cd5bae78 2004-04-21 devnull (*objlst[j]->obj)();
43 cd5bae78 2004-04-21 devnull setobj(&objlst[j]->point[i]);
44 cd5bae78 2004-04-21 devnull if(flags['p']) {
45 cd5bae78 2004-04-21 devnull if(flags['m'])
46 cd5bae78 2004-04-21 devnull if(strcmp(objlst[j]->name, "Comet"))
47 cd5bae78 2004-04-21 devnull continue;
48 cd5bae78 2004-04-21 devnull output(objlst[j]->name, &objlst[j]->point[i]);
49 cd5bae78 2004-04-21 devnull }
50 cd5bae78 2004-04-21 devnull }
51 cd5bae78 2004-04-21 devnull if(flags['e']) {
52 cd5bae78 2004-04-21 devnull d = dist(&eobj1->point[i], &eobj2->point[i]);
53 cd5bae78 2004-04-21 devnull print("dist %s to %s = %.4f\n", eobj1->name, eobj2->name, d);
54 cd5bae78 2004-04-21 devnull }
55 cbeb0b26 2006-04-01 devnull /* if(flags['p']) { */
56 cbeb0b26 2006-04-01 devnull /* pdate(d); */
57 cbeb0b26 2006-04-01 devnull /* print(" "); */
58 cbeb0b26 2006-04-01 devnull /* ptime(d); */
59 cbeb0b26 2006-04-01 devnull /* print("\n"); */
60 cbeb0b26 2006-04-01 devnull /* } */
61 cd5bae78 2004-04-21 devnull if(flags['p'] || flags['e'])
62 cd5bae78 2004-04-21 devnull break;
63 cd5bae78 2004-04-21 devnull d += deld;
64 cd5bae78 2004-04-21 devnull }
65 cd5bae78 2004-04-21 devnull if(!(flags['p'] || flags['e']))
66 cd5bae78 2004-04-21 devnull search();
67 cd5bae78 2004-04-21 devnull day += per;
68 cd5bae78 2004-04-21 devnull nperiods -= 1;
69 cd5bae78 2004-04-21 devnull if(nperiods > 0)
70 cd5bae78 2004-04-21 devnull goto loop;
71 cd5bae78 2004-04-21 devnull exits(0);
72 cd5bae78 2004-04-21 devnull return 0; /* gcc */
73 cd5bae78 2004-04-21 devnull }
74 cd5bae78 2004-04-21 devnull
75 cd5bae78 2004-04-21 devnull void
76 cd5bae78 2004-04-21 devnull args(int argc, char *argv[])
77 cd5bae78 2004-04-21 devnull {
78 cd5bae78 2004-04-21 devnull char *p;
79 cd5bae78 2004-04-21 devnull long t;
80 cd5bae78 2004-04-21 devnull int f, i;
81 cd5bae78 2004-04-21 devnull Obj2 *q;
82 cd5bae78 2004-04-21 devnull
83 cd5bae78 2004-04-21 devnull memset(flags, 0, sizeof(flags));
84 cd5bae78 2004-04-21 devnull ARGBEGIN {
85 cd5bae78 2004-04-21 devnull default:
86 cd5bae78 2004-04-21 devnull fprint(2, "astro [-adeklmopst] [-c nperiod] [-C tperiod]\n");
87 cd5bae78 2004-04-21 devnull exits(0);
88 cd5bae78 2004-04-21 devnull
89 cd5bae78 2004-04-21 devnull case 'c':
90 cd5bae78 2004-04-21 devnull nperiods = 1;
91 cd5bae78 2004-04-21 devnull p = ARGF();
92 cd5bae78 2004-04-21 devnull if(p)
93 cd5bae78 2004-04-21 devnull nperiods = atol(p);
94 cd5bae78 2004-04-21 devnull flags['c']++;
95 cd5bae78 2004-04-21 devnull break;
96 cd5bae78 2004-04-21 devnull case 'C':
97 cd5bae78 2004-04-21 devnull p = ARGF();
98 cd5bae78 2004-04-21 devnull if(p)
99 cd5bae78 2004-04-21 devnull per = atof(p);
100 cd5bae78 2004-04-21 devnull break;
101 cd5bae78 2004-04-21 devnull case 'e':
102 cd5bae78 2004-04-21 devnull eobj1 = nil;
103 cd5bae78 2004-04-21 devnull eobj2 = nil;
104 cd5bae78 2004-04-21 devnull p = ARGF();
105 cd5bae78 2004-04-21 devnull if(p) {
106 cd5bae78 2004-04-21 devnull for(i=0; q=objlst[i]; i++) {
107 cd5bae78 2004-04-21 devnull if(strcmp(q->name, p) == 0)
108 cd5bae78 2004-04-21 devnull eobj1 = q;
109 cd5bae78 2004-04-21 devnull if(strcmp(q->name1, p) == 0)
110 cd5bae78 2004-04-21 devnull eobj1 = q;
111 cd5bae78 2004-04-21 devnull }
112 cd5bae78 2004-04-21 devnull p = ARGF();
113 cd5bae78 2004-04-21 devnull if(p) {
114 cd5bae78 2004-04-21 devnull for(i=0; q=objlst[i]; i++) {
115 cd5bae78 2004-04-21 devnull if(strcmp(q->name, p) == 0)
116 cd5bae78 2004-04-21 devnull eobj2 = q;
117 cd5bae78 2004-04-21 devnull if(strcmp(q->name1, p) == 0)
118 cd5bae78 2004-04-21 devnull eobj2 = q;
119 cd5bae78 2004-04-21 devnull }
120 cd5bae78 2004-04-21 devnull }
121 cd5bae78 2004-04-21 devnull }
122 cd5bae78 2004-04-21 devnull if(eobj1 && eobj2) {
123 cd5bae78 2004-04-21 devnull flags['e']++;
124 cd5bae78 2004-04-21 devnull break;
125 cd5bae78 2004-04-21 devnull }
126 cd5bae78 2004-04-21 devnull fprint(2, "cant recognize eclipse objects\n");
127 cd5bae78 2004-04-21 devnull exits("eflag");
128 cd5bae78 2004-04-21 devnull
129 cd5bae78 2004-04-21 devnull case 'a':
130 cd5bae78 2004-04-21 devnull case 'd':
131 cd5bae78 2004-04-21 devnull case 'j':
132 cd5bae78 2004-04-21 devnull case 'k':
133 cd5bae78 2004-04-21 devnull case 'l':
134 cd5bae78 2004-04-21 devnull case 'm':
135 cd5bae78 2004-04-21 devnull case 'o':
136 cd5bae78 2004-04-21 devnull case 'p':
137 cd5bae78 2004-04-21 devnull case 's':
138 cd5bae78 2004-04-21 devnull case 't':
139 cd5bae78 2004-04-21 devnull flags[ARGC()]++;
140 cd5bae78 2004-04-21 devnull break;
141 cd5bae78 2004-04-21 devnull } ARGEND
142 cd5bae78 2004-04-21 devnull if(*argv){
143 cd5bae78 2004-04-21 devnull fprint(2, "usage: astro [-dlpsatokm] [-c nday] [-e obj1 obj2]\n");
144 cd5bae78 2004-04-21 devnull exits("usage");
145 cd5bae78 2004-04-21 devnull }
146 cd5bae78 2004-04-21 devnull
147 cd5bae78 2004-04-21 devnull t = time(0);
148 cd5bae78 2004-04-21 devnull day = t/86400. + 25567.5;
149 cd5bae78 2004-04-21 devnull if(flags['d'])
150 cd5bae78 2004-04-21 devnull day = readate();
151 cd5bae78 2004-04-21 devnull if(flags['j'])
152 cd5bae78 2004-04-21 devnull print("jday = %.4f\n", day);
153 cd5bae78 2004-04-21 devnull deltat = day * .001704;
154 cbeb0b26 2006-04-01 devnull if(deltat > 32.184) /* assume date is utc1 */
155 cbeb0b26 2006-04-01 devnull deltat = 32.184; /* correct by leap sec */
156 cd5bae78 2004-04-21 devnull if(flags['t'])
157 cd5bae78 2004-04-21 devnull deltat = readdt();
158 cd5bae78 2004-04-21 devnull
159 cd5bae78 2004-04-21 devnull if(flags['l']) {
160 cd5bae78 2004-04-21 devnull fprint(2, "nlat wlong elev\n");
161 cd5bae78 2004-04-21 devnull readlat(0);
162 cd5bae78 2004-04-21 devnull } else {
163 cd5bae78 2004-04-21 devnull f = open(herefile, OREAD);
164 cd5bae78 2004-04-21 devnull if(f < 0) {
165 cd5bae78 2004-04-21 devnull fprint(2, "%s?\n", herefile);
166 cd5bae78 2004-04-21 devnull /* btl mh */
167 cd5bae78 2004-04-21 devnull nlat = (40 + 41.06/60)*radian;
168 cd5bae78 2004-04-21 devnull awlong = (74 + 23.98/60)*radian;
169 cd5bae78 2004-04-21 devnull elev = 150 * 3.28084;
170 cd5bae78 2004-04-21 devnull } else {
171 cd5bae78 2004-04-21 devnull readlat(f);
172 cd5bae78 2004-04-21 devnull close(f);
173 cd5bae78 2004-04-21 devnull }
174 cd5bae78 2004-04-21 devnull }
175 cd5bae78 2004-04-21 devnull }
176 cd5bae78 2004-04-21 devnull
177 cd5bae78 2004-04-21 devnull double
178 cd5bae78 2004-04-21 devnull readate(void)
179 cd5bae78 2004-04-21 devnull {
180 cd5bae78 2004-04-21 devnull int i;
181 cd5bae78 2004-04-21 devnull Tim t;
182 cd5bae78 2004-04-21 devnull
183 cd5bae78 2004-04-21 devnull fprint(2, "year mo da hr min\n");
184 cd5bae78 2004-04-21 devnull rline(0);
185 cd5bae78 2004-04-21 devnull for(i=0; i<5; i++)
186 cd5bae78 2004-04-21 devnull t.ifa[i] = atof(skip(i));
187 cd5bae78 2004-04-21 devnull return convdate(&t);
188 cd5bae78 2004-04-21 devnull }
189 cd5bae78 2004-04-21 devnull
190 cd5bae78 2004-04-21 devnull double
191 cd5bae78 2004-04-21 devnull readdt(void)
192 cd5bae78 2004-04-21 devnull {
193 cd5bae78 2004-04-21 devnull
194 cd5bae78 2004-04-21 devnull fprint(2, "ΔT (sec) (%.3f)\n", deltat);
195 cd5bae78 2004-04-21 devnull rline(0);
196 cd5bae78 2004-04-21 devnull return atof(skip(0));
197 cd5bae78 2004-04-21 devnull }
198 cd5bae78 2004-04-21 devnull
199 cd5bae78 2004-04-21 devnull double
200 cd5bae78 2004-04-21 devnull etdate(long year, int mo, double day)
201 cd5bae78 2004-04-21 devnull {
202 cd5bae78 2004-04-21 devnull Tim t;
203 cd5bae78 2004-04-21 devnull
204 cd5bae78 2004-04-21 devnull t.ifa[0] = year;
205 cd5bae78 2004-04-21 devnull t.ifa[1] = mo;
206 cd5bae78 2004-04-21 devnull t.ifa[2] = day;
207 cd5bae78 2004-04-21 devnull t.ifa[3] = 0;
208 cd5bae78 2004-04-21 devnull t.ifa[4] = 0;
209 cd5bae78 2004-04-21 devnull return convdate(&t) + 2415020;
210 cd5bae78 2004-04-21 devnull }
211 cd5bae78 2004-04-21 devnull
212 cd5bae78 2004-04-21 devnull void
213 cd5bae78 2004-04-21 devnull readlat(int f)
214 cd5bae78 2004-04-21 devnull {
215 cd5bae78 2004-04-21 devnull
216 cd5bae78 2004-04-21 devnull rline(f);
217 cd5bae78 2004-04-21 devnull nlat = atof(skip(0)) * radian;
218 cd5bae78 2004-04-21 devnull awlong = atof(skip(1)) * radian;
219 cd5bae78 2004-04-21 devnull elev = atof(skip(2)) * 3.28084;
220 cd5bae78 2004-04-21 devnull }
221 cd5bae78 2004-04-21 devnull
222 cd5bae78 2004-04-21 devnull double
223 cd5bae78 2004-04-21 devnull fmod(double a, double b)
224 cd5bae78 2004-04-21 devnull {
225 cd5bae78 2004-04-21 devnull return a - floor(a/b)*b;
226 cd5bae78 2004-04-21 devnull }