13e12c5d1SDavid du Colombier #include "astro.h" 23e12c5d1SDavid du Colombier 33e12c5d1SDavid du Colombier char* herefile = "/lib/sky/here"; 43e12c5d1SDavid du Colombier 53e12c5d1SDavid du Colombier void 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; 123e12c5d1SDavid du Colombier pipi = 2*pi; 133e12c5d1SDavid du Colombier radian = pi/180; 143e12c5d1SDavid du Colombier radsec = radian/3600; 153e12c5d1SDavid du Colombier 163e12c5d1SDavid du Colombier fmtinstall('R', Rconv); 173e12c5d1SDavid du Colombier fmtinstall('D', Dconv); 183e12c5d1SDavid du Colombier 193e12c5d1SDavid du Colombier args(argc, argv); 203e12c5d1SDavid du Colombier init(); 213e12c5d1SDavid du Colombier deld = PER/NPTS; 223e12c5d1SDavid du Colombier 233e12c5d1SDavid du Colombier loop: 243e12c5d1SDavid du Colombier d = day; 253e12c5d1SDavid du Colombier pdate(d); 263e12c5d1SDavid du Colombier if(flags['p']) { 273e12c5d1SDavid du Colombier print(" "); 283e12c5d1SDavid du Colombier ptime(d); 293e12c5d1SDavid du Colombier } 303e12c5d1SDavid du Colombier print("\n"); 313e12c5d1SDavid du Colombier for(i=0; i<=NPTS+1; i++) { 323e12c5d1SDavid du Colombier setime(d); 333e12c5d1SDavid du Colombier 343e12c5d1SDavid du Colombier for(j=0; objlst[j]; j++) { 353e12c5d1SDavid du Colombier (*objlst[j]->obj)(); 363e12c5d1SDavid du Colombier setobj(&objlst[j]->point[i]); 373e12c5d1SDavid du Colombier if(flags['p']) { 383e12c5d1SDavid du Colombier if(flags['m']) 393e12c5d1SDavid du Colombier if(strcmp(objlst[j]->name, "Comet")) 403e12c5d1SDavid du Colombier continue; 413e12c5d1SDavid du Colombier output(objlst[j]->name, &objlst[j]->point[i]); 423e12c5d1SDavid du Colombier } 433e12c5d1SDavid du Colombier } 443e12c5d1SDavid du Colombier 453e12c5d1SDavid du Colombier if(flags['p']) { 463e12c5d1SDavid du Colombier if(flags['e']) { 473e12c5d1SDavid du Colombier d = dist(&osun.point[0], &omoon.point[0]); 483e12c5d1SDavid du Colombier print(" dist = %.4f\n", d); 493e12c5d1SDavid du Colombier } 503e12c5d1SDavid du Colombier break; 513e12c5d1SDavid du Colombier } 523e12c5d1SDavid du Colombier d += deld; 533e12c5d1SDavid du Colombier } 543e12c5d1SDavid du Colombier if(!(flags['p'])) 553e12c5d1SDavid du Colombier search(); 563e12c5d1SDavid du Colombier day += PER; 573e12c5d1SDavid du Colombier nperiods -= 1; 583e12c5d1SDavid du Colombier if(nperiods > 0) 593e12c5d1SDavid du Colombier goto loop; 603e12c5d1SDavid du Colombier exits(0); 613e12c5d1SDavid du Colombier } 623e12c5d1SDavid du Colombier 633e12c5d1SDavid du Colombier void 643e12c5d1SDavid du Colombier args(int argc, char *argv[]) 653e12c5d1SDavid du Colombier { 663e12c5d1SDavid du Colombier char *p; 673e12c5d1SDavid du Colombier long t; 683e12c5d1SDavid du Colombier int f; 693e12c5d1SDavid du Colombier 703e12c5d1SDavid du Colombier memset(flags, 0, sizeof(flags)); 713e12c5d1SDavid du Colombier ARGBEGIN { 723e12c5d1SDavid du Colombier default: 733e12c5d1SDavid du Colombier fprint(2, "unknown option '%c'\n", ARGC()); 743e12c5d1SDavid du Colombier break; 753e12c5d1SDavid du Colombier 763e12c5d1SDavid du Colombier case 'c': 773e12c5d1SDavid du Colombier nperiods = 1; 783e12c5d1SDavid du Colombier p = ARGF(); 793e12c5d1SDavid du Colombier if(p) 803e12c5d1SDavid du Colombier nperiods = atol(p); 813e12c5d1SDavid du Colombier break; 823e12c5d1SDavid du Colombier case 'd': 833e12c5d1SDavid du Colombier case 'l': 843e12c5d1SDavid du Colombier case 'e': 853e12c5d1SDavid du Colombier case 'p': 863e12c5d1SDavid du Colombier case 's': 873e12c5d1SDavid du Colombier case 'a': 883e12c5d1SDavid du Colombier case 't': 893e12c5d1SDavid du Colombier case 'o': 903e12c5d1SDavid du Colombier case 'k': 913e12c5d1SDavid du Colombier case 'm': 923e12c5d1SDavid du Colombier flags[ARGC()]++; 933e12c5d1SDavid du Colombier break; 943e12c5d1SDavid du Colombier } ARGEND 953e12c5d1SDavid du Colombier if(argc); 96*219b2ee8SDavid du Colombier if(*argv){ 97*219b2ee8SDavid du Colombier fprint(2, "usage: astro [-dlepsatokm] [-c nday]\n"); 98*219b2ee8SDavid du Colombier exits("usage"); 99*219b2ee8SDavid du Colombier } 1003e12c5d1SDavid du Colombier 1013e12c5d1SDavid du Colombier t = time(0); 1023e12c5d1SDavid du Colombier day = t/86400. + 25567.5; 1033e12c5d1SDavid du Colombier if(flags['d']) 1043e12c5d1SDavid du Colombier day = readate(); 1053e12c5d1SDavid du Colombier deltat = day * .001704; 1063e12c5d1SDavid du Colombier if(flags['t']) 1073e12c5d1SDavid du Colombier deltat = readdt(); 1083e12c5d1SDavid du Colombier 1093e12c5d1SDavid du Colombier if(flags['l']) { 1103e12c5d1SDavid du Colombier print("nlat wlong elev\n"); 1113e12c5d1SDavid du Colombier readlat(0); 1123e12c5d1SDavid du Colombier } else { 1133e12c5d1SDavid du Colombier f = open(herefile, OREAD); 1143e12c5d1SDavid du Colombier if(f < 0) { 1153e12c5d1SDavid du Colombier fprint(2, "%s?\n", herefile); 1163e12c5d1SDavid du Colombier /* btl mh */ 1173e12c5d1SDavid du Colombier nlat = (40 + 41.06/60)*radian; 1183e12c5d1SDavid du Colombier awlong = (74 + 23.98/60)*radian; 1193e12c5d1SDavid du Colombier elev = 150 * 3.28084; 1203e12c5d1SDavid du Colombier } else { 1213e12c5d1SDavid du Colombier readlat(f); 1223e12c5d1SDavid du Colombier close(f); 1233e12c5d1SDavid du Colombier } 1243e12c5d1SDavid du Colombier } 1253e12c5d1SDavid du Colombier } 1263e12c5d1SDavid du Colombier 1273e12c5d1SDavid du Colombier double 1283e12c5d1SDavid du Colombier readate(void) 1293e12c5d1SDavid du Colombier { 1303e12c5d1SDavid du Colombier int i; 1313e12c5d1SDavid du Colombier Tim t; 1323e12c5d1SDavid du Colombier 1333e12c5d1SDavid du Colombier print("year mo da hr min\n"); 1343e12c5d1SDavid du Colombier rline(0); 1353e12c5d1SDavid du Colombier for(i=0; i<5; i++) 1363e12c5d1SDavid du Colombier t.ifa[i] = atof(skip(i)); 1373e12c5d1SDavid du Colombier return convdate(&t); 1383e12c5d1SDavid du Colombier } 1393e12c5d1SDavid du Colombier 1403e12c5d1SDavid du Colombier double 1413e12c5d1SDavid du Colombier readdt(void) 1423e12c5d1SDavid du Colombier { 1433e12c5d1SDavid du Colombier 1443e12c5d1SDavid du Colombier print("ΔT (sec)\n"); 1453e12c5d1SDavid du Colombier rline(0); 1463e12c5d1SDavid du Colombier return atof(skip(0)); 1473e12c5d1SDavid du Colombier } 1483e12c5d1SDavid du Colombier 1493e12c5d1SDavid du Colombier double 1503e12c5d1SDavid du Colombier etdate(long year, int mo, double day) 1513e12c5d1SDavid du Colombier { 1523e12c5d1SDavid du Colombier Tim t; 1533e12c5d1SDavid du Colombier 1543e12c5d1SDavid du Colombier t.ifa[0] = year; 1553e12c5d1SDavid du Colombier t.ifa[1] = mo; 1563e12c5d1SDavid du Colombier t.ifa[2] = day; 1573e12c5d1SDavid du Colombier t.ifa[3] = 0; 1583e12c5d1SDavid du Colombier t.ifa[4] = 0; 1593e12c5d1SDavid du Colombier return convdate(&t) + 2415020; 1603e12c5d1SDavid du Colombier } 1613e12c5d1SDavid du Colombier 1623e12c5d1SDavid du Colombier void 1633e12c5d1SDavid du Colombier readlat(int f) 1643e12c5d1SDavid du Colombier { 1653e12c5d1SDavid du Colombier 1663e12c5d1SDavid du Colombier rline(f); 1673e12c5d1SDavid du Colombier nlat = atof(skip(0)) * radian; 1683e12c5d1SDavid du Colombier awlong = atof(skip(1)) * radian; 1693e12c5d1SDavid du Colombier elev = atof(skip(2)) * 3.28084; 1703e12c5d1SDavid du Colombier } 1713e12c5d1SDavid du Colombier 1723e12c5d1SDavid du Colombier double 1733e12c5d1SDavid du Colombier fmod(double a, double b) 1743e12c5d1SDavid du Colombier { 1753e12c5d1SDavid du Colombier return a - floor(a/b)*b; 1763e12c5d1SDavid du Colombier } 177