1 #include "astro.h" 2 3 char* herefile = "/lib/sky/here"; 4 5 void 6 main(int argc, char *argv[]) 7 { 8 int i, j; 9 double d; 10 11 pi = atan(1.0)*4; 12 pipi = 2*pi; 13 radian = pi/180; 14 radsec = radian/3600; 15 16 fmtinstall('R', Rconv); 17 fmtinstall('D', Dconv); 18 19 args(argc, argv); 20 init(); 21 deld = PER/NPTS; 22 23 loop: 24 d = day; 25 pdate(d); 26 if(flags['p']) { 27 print(" "); 28 ptime(d); 29 } 30 print("\n"); 31 for(i=0; i<=NPTS+1; i++) { 32 setime(d); 33 34 for(j=0; objlst[j]; j++) { 35 (*objlst[j]->obj)(); 36 setobj(&objlst[j]->point[i]); 37 if(flags['p']) { 38 if(flags['m']) 39 if(strcmp(objlst[j]->name, "Comet")) 40 continue; 41 output(objlst[j]->name, &objlst[j]->point[i]); 42 } 43 } 44 45 if(flags['p']) { 46 if(flags['e']) { 47 d = dist(&osun.point[0], &omoon.point[0]); 48 print(" dist = %.4f\n", d); 49 } 50 break; 51 } 52 d += deld; 53 } 54 if(!(flags['p'])) 55 search(); 56 day += PER; 57 nperiods -= 1; 58 if(nperiods > 0) 59 goto loop; 60 exits(0); 61 } 62 63 void 64 args(int argc, char *argv[]) 65 { 66 char *p; 67 long t; 68 int f; 69 70 memset(flags, 0, sizeof(flags)); 71 ARGBEGIN { 72 default: 73 fprint(2, "unknown option '%c'\n", ARGC()); 74 break; 75 76 case 'c': 77 nperiods = 1; 78 p = ARGF(); 79 if(p) 80 nperiods = atol(p); 81 break; 82 case 'd': 83 case 'l': 84 case 'e': 85 case 'p': 86 case 's': 87 case 'a': 88 case 't': 89 case 'o': 90 case 'k': 91 case 'm': 92 flags[ARGC()]++; 93 break; 94 } ARGEND 95 if(argc); 96 if(*argv){ 97 fprint(2, "usage: astro [-dlepsatokm] [-c nday]\n"); 98 exits("usage"); 99 } 100 101 t = time(0); 102 day = t/86400. + 25567.5; 103 if(flags['d']) 104 day = readate(); 105 deltat = day * .001704; 106 if(flags['t']) 107 deltat = readdt(); 108 109 if(flags['l']) { 110 print("nlat wlong elev\n"); 111 readlat(0); 112 } else { 113 f = open(herefile, OREAD); 114 if(f < 0) { 115 fprint(2, "%s?\n", herefile); 116 /* btl mh */ 117 nlat = (40 + 41.06/60)*radian; 118 awlong = (74 + 23.98/60)*radian; 119 elev = 150 * 3.28084; 120 } else { 121 readlat(f); 122 close(f); 123 } 124 } 125 } 126 127 double 128 readate(void) 129 { 130 int i; 131 Tim t; 132 133 print("year mo da hr min\n"); 134 rline(0); 135 for(i=0; i<5; i++) 136 t.ifa[i] = atof(skip(i)); 137 return convdate(&t); 138 } 139 140 double 141 readdt(void) 142 { 143 144 print("ΔT (sec)\n"); 145 rline(0); 146 return atof(skip(0)); 147 } 148 149 double 150 etdate(long year, int mo, double day) 151 { 152 Tim t; 153 154 t.ifa[0] = year; 155 t.ifa[1] = mo; 156 t.ifa[2] = day; 157 t.ifa[3] = 0; 158 t.ifa[4] = 0; 159 return convdate(&t) + 2415020; 160 } 161 162 void 163 readlat(int f) 164 { 165 166 rline(f); 167 nlat = atof(skip(0)) * radian; 168 awlong = atof(skip(1)) * radian; 169 elev = atof(skip(2)) * 3.28084; 170 } 171 172 double 173 fmod(double a, double b) 174 { 175 return a - floor(a/b)*b; 176 } 177