1 #include	<u.h>
2 #include	<libc.h>
3 
4 #ifdef VARARGCK
5 #pragma	varargck	type	"R"	double
6 #pragma	varargck	type	"D"	double
7 #endif
8 
9 #undef sun
10 #define sun astrosun	/* not the machine! */
11 #undef fmod
12 #define fmod astrofmod	/* ours is always positive */
13 
14 typedef	struct	Obj1	Obj1;
15 typedef	struct	Obj2	Obj2;
16 typedef	struct	Obj3	Obj3;
17 typedef	struct	Occ	Occ;
18 typedef	struct	Event	Event;
19 typedef	struct	Tim	Tim;
20 typedef	struct	Moontab	Moontab;
21 
22 #define	NPTS	12
23 #define	PER	1.0
24 
25 enum
26 {
27 	DARK	= 1<<0,
28 	SIGNIF	= 1<<1,
29 	PTIME	= 1<<2,
30 	LIGHT	= 1<<3
31 };
32 
33 struct	Obj1
34 {
35 	double	ra;
36 	double	decl2;
37 	double	semi2;
38 	double	az;
39 	double	el;
40 	double	mag;
41 };
42 struct	Obj2
43 {
44 	char*	name;
45 	char*	name1;
46 	void	(*obj)(void);
47 	Obj1	point[NPTS+2];
48 };
49 struct	Obj3
50 {
51 	double	t1;
52 	double	e1;
53 	double	t2;
54 	double	e2;
55 	double	t3;
56 	double	e3;
57 	double	t4;
58 	double	e4;
59 	double	t5;
60 	double	e5;
61 };
62 struct Event
63 {
64 	char*	format;
65 	char*	arg1;
66 	char*	arg2;
67 	double	tim;
68 	int	flag;
69 };
70 struct	Moontab
71 {
72 	double	f;
73 	char	c[4];
74 };
75 struct	Occ
76 {
77 	Obj1	act;
78 	Obj1	del0;
79 	Obj1	del1;
80 	Obj1	del2;
81 };
82 struct	Tim
83 {
84 	double	ifa[5];
85 	char	tz[4];
86 };
87 
88 double	converge;
89 
90 char	flags[128];
91 int	nperiods;
92 double	wlong, awlong, nlat, elev;
93 double	obliq, phi, eps, tobliq;
94 double	dphi, deps;
95 double	day, deld, per;
96 double	eday, capt, capt2, capt3, gst;
97 double	pi, pipi, radian, radsec, deltat;
98 double	erad, glat;
99 double	xms, yms, zms;
100 double	xdot, ydot, zdot;
101 
102 double	ecc, incl, node, argp, mrad, anom, motion;
103 
104 double	lambda, beta, rad, mag, semi;
105 double	alpha, delta, rp, hp;
106 double	ra, decl, semi2;
107 double	lha, decl2, lmb2;
108 double	az, el;
109 
110 double	meday, seday, mhp, salph, sdelt, srad;
111 
112 double*	cafp;
113 char*	cacp;
114 
115 double	rah, ram, ras, dday, dmin, dsec;
116 long	sao;
117 double	da, dd, px, epoch;
118 char	line[100];
119 Obj2	osun;
120 Obj2	omoon;
121 Obj2	oshad;
122 Obj2	omerc;
123 Obj2	ovenus;
124 Obj2	omars;
125 Obj2	osat;
126 Obj2	ouran;
127 Obj2	onept;
128 Obj2	oplut;
129 Obj2	ojup;
130 Obj2	ostar;
131 Obj2	ocomet;
132 Obj3	occ;
133 Obj2*	eobj1;
134 Obj2*	eobj2;
135 
136 char*	startab;
137 
138 extern	int	dmo[];
139 extern	Obj2*	objlst[];
140 
141 extern	double	venfp[];
142 extern	char	vencp[];
143 extern	double	sunfp[];
144 extern	char	suncp[];
145 extern	double	mercfp[];
146 extern	char	merccp[];
147 extern	double	nutfp[];
148 extern	char	nutcp[];
149 extern	Moontab moontab[];
150 
151 extern	void	args(int, char**);
152 extern	void	bdtsetup(double, Tim*);
153 extern	double	betcross(double);
154 extern	double	convdate(Tim*);
155 extern	double	cosadd(int, ...);
156 extern	double	cosx(double, int, int, int, int, double);
157 extern	double	dist(Obj1*, Obj1*);
158 extern	double	dsrc(double, Tim*, int);
159 extern	void	dtsetup(double, Tim*);
160 /*extern	int	evcomp(void*, void*);*/
161 extern	void	event(char*, char*, char*, double, int);
162 extern	void	evflush(void);
163 extern	double	fmod(double, double);
164 extern	void	fstar(void);
165 extern	void	fsun(void);
166 extern	void	geo(void);
167 extern	void	helio(void);
168 extern	void	icosadd(double*, char*);
169 extern	void	init(void);
170 extern	void	jup(void);
171 extern	int	lastsun(Tim*, int);
172 extern	int	main(int, char**);
173 extern	void	mars(void);
174 extern	double	melong(Obj2*);
175 extern	void	merc(void);
176 extern	void	moon(void);
177 extern	void	numb(int);
178 extern	void	nutate(void);
179 extern	void	occult(Obj2*, Obj2*, double);
180 extern	void	output(char*, Obj1*);
181 extern	void	pdate(double);
182 extern	double	pinorm(double);
183 extern	void	ptime(double);
184 extern	void	pstime(double);
185 extern	double	pyth(double);
186 extern	double	readate(void);
187 extern	double	readdt(void);
188 extern	void	readlat(int);
189 extern	double	rise(Obj2*, double);
190 extern	int	rline(int);
191 extern	void	sat(void);
192 extern	void	uran(void);
193 extern	void	nept(void);
194 extern	void	plut(void);
195 extern	void	satel(double);
196 extern	void	satels(void);
197 extern	void	search(void);
198 extern	double	set(Obj2*, double);
199 extern	void	set3pt(Obj2*, int, Occ*);
200 extern	void	setime(double);
201 extern	void	setobj(Obj1*);
202 extern	void	setpt(Occ*, double);
203 extern	void	shad(void);
204 extern	double	sinadd(int, ...);
205 extern	double	sinx(double, int, int, int, int, double);
206 extern	char*	skip(int);
207 extern	double	solstice(int);
208 extern	void	star(void);
209 extern	void	stars(void);
210 extern	void	sun(void);
211 extern	double	sunel(double);
212 extern	void	venus(void);
213 extern	int	vis(double, double, double, double);
214 extern	void	comet(void);
215 extern	int	Rconv(Fmt*);
216 extern	int	Dconv(Fmt*);
217 extern	double	etdate(long, int, double);
218