Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature_fixcpp/sys/src/cmd/astro/main.c – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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