13e12c5d1SDavid du Colombier #include "astro.h"
23e12c5d1SDavid du Colombier
33e12c5d1SDavid du Colombier char* herefile = "/lib/sky/here";
43e12c5d1SDavid du Colombier
53e12c5d1SDavid du Colombier void
main(int argc,char * argv[])63e12c5d1SDavid du Colombier main(int argc, char *argv[])
73e12c5d1SDavid du Colombier {
83e12c5d1SDavid du Colombier int i, j;
93e12c5d1SDavid du Colombier double d;
103e12c5d1SDavid du Colombier
113e12c5d1SDavid du Colombier pi = atan(1.0)*4;
1259cc4ca5SDavid du Colombier pipi = pi*2;
133e12c5d1SDavid du Colombier radian = pi/180;
143e12c5d1SDavid du Colombier radsec = radian/3600;
157dd7cddfSDavid du Colombier converge = 1.0e-14;
163e12c5d1SDavid du Colombier
173e12c5d1SDavid du Colombier fmtinstall('R', Rconv);
183e12c5d1SDavid du Colombier fmtinstall('D', Dconv);
193e12c5d1SDavid du Colombier
207dd7cddfSDavid du Colombier per = PER;
213e12c5d1SDavid du Colombier deld = PER/NPTS;
22*80ee5cbfSDavid du Colombier init();
237dd7cddfSDavid du Colombier args(argc, argv);
24*80ee5cbfSDavid du Colombier init();
253e12c5d1SDavid du Colombier
263e12c5d1SDavid du Colombier loop:
273e12c5d1SDavid du Colombier d = day;
283e12c5d1SDavid du Colombier pdate(d);
297dd7cddfSDavid du Colombier if(flags['p'] || flags['e']) {
303e12c5d1SDavid du Colombier print(" ");
313e12c5d1SDavid du Colombier ptime(d);
3259cc4ca5SDavid du Colombier pstime(d);
333e12c5d1SDavid du Colombier }
343e12c5d1SDavid du Colombier print("\n");
353e12c5d1SDavid du Colombier for(i=0; i<=NPTS+1; i++) {
363e12c5d1SDavid du Colombier setime(d);
373e12c5d1SDavid du Colombier
383e12c5d1SDavid du Colombier for(j=0; objlst[j]; j++) {
393e12c5d1SDavid du Colombier (*objlst[j]->obj)();
403e12c5d1SDavid du Colombier setobj(&objlst[j]->point[i]);
413e12c5d1SDavid du Colombier if(flags['p']) {
423e12c5d1SDavid du Colombier if(flags['m'])
433e12c5d1SDavid du Colombier if(strcmp(objlst[j]->name, "Comet"))
443e12c5d1SDavid du Colombier continue;
453e12c5d1SDavid du Colombier output(objlst[j]->name, &objlst[j]->point[i]);
463e12c5d1SDavid du Colombier }
473e12c5d1SDavid du Colombier }
483e12c5d1SDavid du Colombier if(flags['e']) {
497dd7cddfSDavid du Colombier d = dist(&eobj1->point[i], &eobj2->point[i]);
507dd7cddfSDavid du Colombier print("dist %s to %s = %.4f\n", eobj1->name, eobj2->name, d);
513e12c5d1SDavid du Colombier }
527dd7cddfSDavid du Colombier // if(flags['p']) {
537dd7cddfSDavid du Colombier // pdate(d);
547dd7cddfSDavid du Colombier // print(" ");
557dd7cddfSDavid du Colombier // ptime(d);
567dd7cddfSDavid du Colombier // print("\n");
577dd7cddfSDavid du Colombier // }
587dd7cddfSDavid du Colombier if(flags['p'] || flags['e'])
593e12c5d1SDavid du Colombier break;
603e12c5d1SDavid du Colombier d += deld;
613e12c5d1SDavid du Colombier }
627dd7cddfSDavid du Colombier if(!(flags['p'] || flags['e']))
633e12c5d1SDavid du Colombier search();
647dd7cddfSDavid du Colombier day += per;
653e12c5d1SDavid du Colombier nperiods -= 1;
663e12c5d1SDavid du Colombier if(nperiods > 0)
673e12c5d1SDavid du Colombier goto loop;
683e12c5d1SDavid du Colombier exits(0);
693e12c5d1SDavid du Colombier }
703e12c5d1SDavid du Colombier
713e12c5d1SDavid du Colombier void
args(int argc,char * argv[])723e12c5d1SDavid du Colombier args(int argc, char *argv[])
733e12c5d1SDavid du Colombier {
743e12c5d1SDavid du Colombier char *p;
753e12c5d1SDavid du Colombier long t;
767dd7cddfSDavid du Colombier int f, i;
777dd7cddfSDavid du Colombier Obj2 *q;
783e12c5d1SDavid du Colombier
793e12c5d1SDavid du Colombier memset(flags, 0, sizeof(flags));
803e12c5d1SDavid du Colombier ARGBEGIN {
813e12c5d1SDavid du Colombier default:
827dd7cddfSDavid du Colombier fprint(2, "astro [-adeklmopst] [-c nperiod] [-C tperiod]\n");
837dd7cddfSDavid du Colombier exits(0);
843e12c5d1SDavid du Colombier
853e12c5d1SDavid du Colombier case 'c':
863e12c5d1SDavid du Colombier nperiods = 1;
873e12c5d1SDavid du Colombier p = ARGF();
883e12c5d1SDavid du Colombier if(p)
893e12c5d1SDavid du Colombier nperiods = atol(p);
907dd7cddfSDavid du Colombier flags['c']++;
913e12c5d1SDavid du Colombier break;
927dd7cddfSDavid du Colombier case 'C':
937dd7cddfSDavid du Colombier p = ARGF();
947dd7cddfSDavid du Colombier if(p)
957dd7cddfSDavid du Colombier per = atof(p);
967dd7cddfSDavid du Colombier break;
973e12c5d1SDavid du Colombier case 'e':
987dd7cddfSDavid du Colombier eobj1 = nil;
997dd7cddfSDavid du Colombier eobj2 = nil;
1007dd7cddfSDavid du Colombier p = ARGF();
1017dd7cddfSDavid du Colombier if(p) {
1027dd7cddfSDavid du Colombier for(i=0; q=objlst[i]; i++) {
1037dd7cddfSDavid du Colombier if(strcmp(q->name, p) == 0)
1047dd7cddfSDavid du Colombier eobj1 = q;
1057dd7cddfSDavid du Colombier if(strcmp(q->name1, p) == 0)
1067dd7cddfSDavid du Colombier eobj1 = q;
1077dd7cddfSDavid du Colombier }
1087dd7cddfSDavid du Colombier p = ARGF();
1097dd7cddfSDavid du Colombier if(p) {
1107dd7cddfSDavid du Colombier for(i=0; q=objlst[i]; i++) {
1117dd7cddfSDavid du Colombier if(strcmp(q->name, p) == 0)
1127dd7cddfSDavid du Colombier eobj2 = q;
1137dd7cddfSDavid du Colombier if(strcmp(q->name1, p) == 0)
1147dd7cddfSDavid du Colombier eobj2 = q;
1157dd7cddfSDavid du Colombier }
1167dd7cddfSDavid du Colombier }
1177dd7cddfSDavid du Colombier }
1187dd7cddfSDavid du Colombier if(eobj1 && eobj2) {
1197dd7cddfSDavid du Colombier flags['e']++;
1207dd7cddfSDavid du Colombier break;
1217dd7cddfSDavid du Colombier }
1227dd7cddfSDavid du Colombier fprint(2, "cant recognize eclipse objects\n");
1237dd7cddfSDavid du Colombier exits("eflag");
1247dd7cddfSDavid du Colombier
1257dd7cddfSDavid du Colombier case 'a':
1267dd7cddfSDavid du Colombier case 'd':
127*80ee5cbfSDavid du Colombier case 'j':
1287dd7cddfSDavid du Colombier case 'k':
1297dd7cddfSDavid du Colombier case 'l':
1307dd7cddfSDavid du Colombier case 'm':
1317dd7cddfSDavid du Colombier case 'o':
1323e12c5d1SDavid du Colombier case 'p':
1333e12c5d1SDavid du Colombier case 's':
1343e12c5d1SDavid du Colombier case 't':
1353e12c5d1SDavid du Colombier flags[ARGC()]++;
1363e12c5d1SDavid du Colombier break;
1373e12c5d1SDavid du Colombier } ARGEND
138219b2ee8SDavid du Colombier if(*argv){
1397dd7cddfSDavid du Colombier fprint(2, "usage: astro [-dlpsatokm] [-c nday] [-e obj1 obj2]\n");
140219b2ee8SDavid du Colombier exits("usage");
141219b2ee8SDavid du Colombier }
1423e12c5d1SDavid du Colombier
1433e12c5d1SDavid du Colombier t = time(0);
1443e12c5d1SDavid du Colombier day = t/86400. + 25567.5;
1453e12c5d1SDavid du Colombier if(flags['d'])
1463e12c5d1SDavid du Colombier day = readate();
147*80ee5cbfSDavid du Colombier if(flags['j'])
148*80ee5cbfSDavid du Colombier print("jday = %.4f\n", day);
1493e12c5d1SDavid du Colombier deltat = day * .001704;
15059cc4ca5SDavid du Colombier if(deltat > 32.184) // assume date is utc1
15159cc4ca5SDavid du Colombier deltat = 32.184; // correct by leap sec
1523e12c5d1SDavid du Colombier if(flags['t'])
1533e12c5d1SDavid du Colombier deltat = readdt();
1543e12c5d1SDavid du Colombier
1553e12c5d1SDavid du Colombier if(flags['l']) {
15659cc4ca5SDavid du Colombier fprint(2, "nlat wlong elev\n");
1573e12c5d1SDavid du Colombier readlat(0);
1583e12c5d1SDavid du Colombier } else {
1593e12c5d1SDavid du Colombier f = open(herefile, OREAD);
1603e12c5d1SDavid du Colombier if(f < 0) {
1613e12c5d1SDavid du Colombier fprint(2, "%s?\n", herefile);
1623e12c5d1SDavid du Colombier /* btl mh */
1633e12c5d1SDavid du Colombier nlat = (40 + 41.06/60)*radian;
1643e12c5d1SDavid du Colombier awlong = (74 + 23.98/60)*radian;
1653e12c5d1SDavid du Colombier elev = 150 * 3.28084;
1663e12c5d1SDavid du Colombier } else {
1673e12c5d1SDavid du Colombier readlat(f);
1683e12c5d1SDavid du Colombier close(f);
1693e12c5d1SDavid du Colombier }
1703e12c5d1SDavid du Colombier }
1713e12c5d1SDavid du Colombier }
1723e12c5d1SDavid du Colombier
1733e12c5d1SDavid du Colombier double
readate(void)1743e12c5d1SDavid du Colombier readate(void)
1753e12c5d1SDavid du Colombier {
1763e12c5d1SDavid du Colombier int i;
1773e12c5d1SDavid du Colombier Tim t;
1783e12c5d1SDavid du Colombier
17959cc4ca5SDavid du Colombier fprint(2, "year mo da hr min\n");
1803e12c5d1SDavid du Colombier rline(0);
1813e12c5d1SDavid du Colombier for(i=0; i<5; i++)
1823e12c5d1SDavid du Colombier t.ifa[i] = atof(skip(i));
1833e12c5d1SDavid du Colombier return convdate(&t);
1843e12c5d1SDavid du Colombier }
1853e12c5d1SDavid du Colombier
1863e12c5d1SDavid du Colombier double
readdt(void)1873e12c5d1SDavid du Colombier readdt(void)
1883e12c5d1SDavid du Colombier {
1893e12c5d1SDavid du Colombier
19059cc4ca5SDavid du Colombier fprint(2, "ΔT (sec) (%.3f)\n", deltat);
1913e12c5d1SDavid du Colombier rline(0);
1923e12c5d1SDavid du Colombier return atof(skip(0));
1933e12c5d1SDavid du Colombier }
1943e12c5d1SDavid du Colombier
1953e12c5d1SDavid du Colombier double
etdate(long year,int mo,double day)1963e12c5d1SDavid du Colombier etdate(long year, int mo, double day)
1973e12c5d1SDavid du Colombier {
1983e12c5d1SDavid du Colombier Tim t;
1993e12c5d1SDavid du Colombier
2003e12c5d1SDavid du Colombier t.ifa[0] = year;
2013e12c5d1SDavid du Colombier t.ifa[1] = mo;
2023e12c5d1SDavid du Colombier t.ifa[2] = day;
2033e12c5d1SDavid du Colombier t.ifa[3] = 0;
2043e12c5d1SDavid du Colombier t.ifa[4] = 0;
2053e12c5d1SDavid du Colombier return convdate(&t) + 2415020;
2063e12c5d1SDavid du Colombier }
2073e12c5d1SDavid du Colombier
2083e12c5d1SDavid du Colombier void
readlat(int f)2093e12c5d1SDavid du Colombier readlat(int f)
2103e12c5d1SDavid du Colombier {
2113e12c5d1SDavid du Colombier
2123e12c5d1SDavid du Colombier rline(f);
2133e12c5d1SDavid du Colombier nlat = atof(skip(0)) * radian;
2143e12c5d1SDavid du Colombier awlong = atof(skip(1)) * radian;
2153e12c5d1SDavid du Colombier elev = atof(skip(2)) * 3.28084;
2163e12c5d1SDavid du Colombier }
2173e12c5d1SDavid du Colombier
2183e12c5d1SDavid du Colombier double
fmod(double a,double b)2193e12c5d1SDavid du Colombier fmod(double a, double b)
2203e12c5d1SDavid du Colombier {
2213e12c5d1SDavid du Colombier return a - floor(a/b)*b;
2223e12c5d1SDavid du Colombier }
223