|
|
1.1 root 1: int flags;
2: double wlong, awlong, nlat, elev;
3: double obliq, phi, eps, tobliq;
4: double dphi, deps;
5: double day, deld;
6: double eday, capt, capt2, capt3, gst;
7: double pi, radian, radsec, deltat;
8: double erad, glat;
9: double xms, yms, zms;
10: double xdot, ydot, zdot;
11: double ecc, incl, node, argp, mrad, anom, motion;
12: double lambda, beta, rad, mag, semi;
13: double alpha, delta, rp, hp;
14: double ra, decl, semi2;
15: double lha, decl2, lmb2;
16: double az, el;
17: double meday, seday, mhp, salph, sdelt, srad;
18: double rah, ram, ras, dday, dmin, dsec;
19: long agc;
20: double da, dd, px, epoch;
21: char line[100];
22: double sin();
23: double cos();
24: double floor();
25: double ltod();
26: double sqrt();
27: double pyth();
28: double fmod();
29: double atan2();
30: double log();
31: double fabs();
32: double dist();
33: double rise();
34: double set();
35: double melong();
36: double solstice();
37: double betcross();
38: int evcomp();
39: long time();
40: double sunel();
41: double readate();
42: double convdate();
43: double ltod();
44: double atof();
45: double cosadd();
46: double sinadd();
47: char * skip();
48: struct obj1
49: {
50: double ra;
51: double decl2;
52: double semi2;
53: double az;
54: double el;
55: double mag;
56: };
57: struct obj2
58: {
59: char *name;
60: int (*obj)();
61: struct obj1 point[12+2];
62: }
63: osun, omoon, oshad, omerc, ovenus,
64: omars, osat, ojup, ostar;
65: extern struct obj2 *objlst[];
66: struct obj3
67: {
68: double t1;
69: double t2;
70: double t3;
71: double t4;
72: double t5;
73: } occ;
74: extern int dmo[];
75: extern struct _iobuf {
76: int _cnt;
77: unsigned char *_ptr;
78: unsigned char *_base;
79: short _flag;
80: char _file;
81: } _iob[20];
82: struct _iobuf *fopen();
83: struct _iobuf *fdopen();
84: struct _iobuf *freopen();
85: long ftell();
86: char *fgets();
87: main(argc, argv)
88: char *argv[];
89: {
90: register i, j;
91: double d;
92: pi = 3.1415926535897932;
93: radian = pi/180.;
94: radsec = radian/3600.;
95: args(argc, argv);
96: init();
97: deld = 1.0/12;
98: loop:
99: d = day;
100: pdate(d);
101: if(flags & 8) {
102: printf(" ");
103: ptime(d);
104: }
105: printf("\n");
106: for(i=0; i<=12+1; i++) {
107: setime(d);
108: for(j=0; objlst[j]; j++) {
109: (*objlst[j]->obj)();
110: setobj(&objlst[j]->point[i]);
111: if(flags & 8)
112: output(objlst[j]->name, &objlst[j]->point[i]);
113: }
114: d += deld;
115: if(flags & 8)
116: exit(0);
117: }
118: search();
119: day += 1.0;
120: if(flags & 1)
121: goto loop;
122: exit(0);
123: }
124: args(argc, argv)
125: char *argv[];
126: {
127: register char *p;
128: long t;
129: p = "";
130: if(argc > 1)
131: p = argv[1];
132: while(*p)
133: switch(*p++) {
134: case 'd':
135: flags |= 64;
136: continue;
137: case 'l':
138: flags |= 128;
139: continue;
140: case 'c':
141: flags |= 1;
142: continue;
143: case 'p':
144: flags |= 8;
145: continue;
146: case 's':
147: flags |= 4;
148: continue;
149: case 'a':
150: flags |= 16;
151: continue;
152: case 't':
153: flags |= 256;
154: continue;
155: case 'o':
156: flags |= 2;
157: continue;
158: case 'k':
159: flags |= 512;
160: continue;
161: case '-':
162: continue;
163: default:
164: printf("unknown option '%c'\n", p[-1]);
165: }
166: t = time((int *)0);
167: day = t/86400. + 25567.5;
168: if(flags & 64)
169: day = readate();
170: awlong = (74. + 32./60.)*radian;
171: nlat = (40. + 40./60.)*radian;
172: elev = 0.;
173: if(flags & 128)
174: readlat();
175: }
176: double
177: readate()
178: {
179: register i;
180: double ifa[5];
181: printf("year mo da hr min\n");
182: rline((&_iob[0]));
183: for(i=0; i<5; i++)
184: ifa[i] = atof(skip(i));
185: return(convdate(ifa));
186: }
187: double
188: convdate(ifa)
189: double ifa[];
190: {
191: double y, d;
192: register i;
193: y = ifa[0];
194: i = (int)ifa[1];
195: d = ifa[2];
196: while(i < 1) {
197: i += 12;
198: y -= 1.;
199: }
200: while(i > 12) {
201: i -= 12;
202: y += 1.;
203: }
204: if(y < 0.)
205: y += 1.;
206: y += 4712.;
207: if(fmod(y, 4.) == 0 && i > 2)
208: d += 1.;
209: y = y*365. +
210: floor((y+3.)/4.) +
211: dmo[i-1] + d - 1.;
212: if(y > 2361232.)
213: y -= floor((y-1794167.)/36525.) -
214: floor((y-1721117.)/146100.);
215: y += ifa[3]/24. + ifa[4]/1440. - .5;
216: return(y-2415020.);
217: }
218: readlat()
219: {
220: register i;
221: double ifa[3];
222: printf("wlong nlat elev\n");
223: rline((&_iob[0]));
224: for(i=0; i<3; i++)
225: ifa[i] = atof(skip(i));
226: awlong = ifa[0] * radian;
227: nlat = ifa[1] * radian;
228: elev = ifa[2];
229: }
230: double
231: fmod(a, b)
232: double a, b;
233: {
234: return(a - floor(a/b)*b);
235: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.