xref: /plan9-contrib/sys/src/cmd/astro/stars.c (revision 59cc4ca53493a3c6d2349fe2b7f7c40f7dce7294)
13e12c5d1SDavid du Colombier #include "astro.h"
23e12c5d1SDavid du Colombier 
33e12c5d1SDavid du Colombier char*	startab = "/lib/sky/estartab";
43e12c5d1SDavid du Colombier 
53e12c5d1SDavid du Colombier void
stars(void)63e12c5d1SDavid du Colombier stars(void)
73e12c5d1SDavid du Colombier {
83e12c5d1SDavid du Colombier 	double lomoon, himoon, sd;
93e12c5d1SDavid du Colombier 	int wrap, f, i;
103e12c5d1SDavid du Colombier 	char *saop;
113e12c5d1SDavid du Colombier 	static char saoa[100];
123e12c5d1SDavid du Colombier 
133e12c5d1SDavid du Colombier 	sd = 1000*radsec;
143e12c5d1SDavid du Colombier 	lomoon = omoon.point[0].ra - sd;
153e12c5d1SDavid du Colombier 	if(lomoon < 0)
163e12c5d1SDavid du Colombier 		lomoon += pipi;
173e12c5d1SDavid du Colombier 	himoon = omoon.point[NPTS+1].ra + sd;
183e12c5d1SDavid du Colombier 	if(himoon > pipi)
193e12c5d1SDavid du Colombier 		himoon -= pipi;
203e12c5d1SDavid du Colombier 	lomoon *= 12/pi;
213e12c5d1SDavid du Colombier 	himoon *= 12/pi;
223e12c5d1SDavid du Colombier 	wrap = 0;
233e12c5d1SDavid du Colombier 	if(lomoon > himoon)
243e12c5d1SDavid du Colombier 		wrap++;
253e12c5d1SDavid du Colombier 
263e12c5d1SDavid du Colombier 	f = open(startab, OREAD);
273e12c5d1SDavid du Colombier 	if(f < 0) {
283e12c5d1SDavid du Colombier 		fprint(2, "%s?\n", startab);
293e12c5d1SDavid du Colombier 		return;
303e12c5d1SDavid du Colombier 	}
313e12c5d1SDavid du Colombier 	epoch = 1950.0;
32*59cc4ca5SDavid du Colombier 	epoch = (epoch-1900.0) * 365.24220 + 0.313;
333e12c5d1SDavid du Colombier 	saop = saoa;
343e12c5d1SDavid du Colombier 
353e12c5d1SDavid du Colombier /*
363e12c5d1SDavid du Colombier  *	read mean places of stars at epoch of star table
373e12c5d1SDavid du Colombier  */
383e12c5d1SDavid du Colombier 
393e12c5d1SDavid du Colombier loop:
403e12c5d1SDavid du Colombier 	if(rline(f)) {
413e12c5d1SDavid du Colombier 		close(f);
423e12c5d1SDavid du Colombier 		return;
433e12c5d1SDavid du Colombier 	}
443e12c5d1SDavid du Colombier 	rah = atof(line+17);
453e12c5d1SDavid du Colombier 	ram = atof(line+20);
463e12c5d1SDavid du Colombier 	ras = atof(line+23);
473e12c5d1SDavid du Colombier 
483e12c5d1SDavid du Colombier 	alpha = rah + ram/60 + ras/3600;
493e12c5d1SDavid du Colombier 	if(wrap == 0) {
503e12c5d1SDavid du Colombier 		if(alpha < lomoon || alpha > himoon)
513e12c5d1SDavid du Colombier 			goto loop;
523e12c5d1SDavid du Colombier 	} else
533e12c5d1SDavid du Colombier 		if(alpha < lomoon && alpha > himoon)
543e12c5d1SDavid du Colombier 			goto loop;
553e12c5d1SDavid du Colombier 
563e12c5d1SDavid du Colombier 	sao = atof(line+0);
573e12c5d1SDavid du Colombier 	sprint(saop, "%ld", sao);
583e12c5d1SDavid du Colombier 	da = atof(line+30);
593e12c5d1SDavid du Colombier 	dday = atof(line+37);
603e12c5d1SDavid du Colombier 	dmin = atof(line+41);
613e12c5d1SDavid du Colombier 	dsec = atof(line+44);
623e12c5d1SDavid du Colombier 	dd = atof(line+50);
633e12c5d1SDavid du Colombier 	px = atof(line+57);
643e12c5d1SDavid du Colombier 	mag = atof(line+61);
653e12c5d1SDavid du Colombier 
663e12c5d1SDavid du Colombier /*
673e12c5d1SDavid du Colombier  *	convert rt ascension and declination to internal format
683e12c5d1SDavid du Colombier  */
693e12c5d1SDavid du Colombier 
703e12c5d1SDavid du Colombier 	delta = fabs(dday) + dmin/60 + dsec/3600;
713e12c5d1SDavid du Colombier 	if(dday < 0)
723e12c5d1SDavid du Colombier 		delta = -delta;
733e12c5d1SDavid du Colombier 
743e12c5d1SDavid du Colombier 	star();
753e12c5d1SDavid du Colombier /*
763e12c5d1SDavid du Colombier  *	if(fabs(beta) > 6.55*radian)
773e12c5d1SDavid du Colombier  *		goto loop;
783e12c5d1SDavid du Colombier  */
793e12c5d1SDavid du Colombier 	sd = .0896833e0*cos(beta)*sin(lambda-1.3820+.00092422117*eday)
803e12c5d1SDavid du Colombier 		 + 0.99597*sin(beta);
813e12c5d1SDavid du Colombier 	if(fabs(sd) > .0183)
823e12c5d1SDavid du Colombier 		goto loop;
833e12c5d1SDavid du Colombier 
843e12c5d1SDavid du Colombier 	for(i=0; i<=NPTS+1; i++)
853e12c5d1SDavid du Colombier 		setobj(&ostar.point[i]);
863e12c5d1SDavid du Colombier 
873e12c5d1SDavid du Colombier 	occult(&omoon, &ostar, 0);
887dd7cddfSDavid du Colombier 	if(occ.t1 >= 0 || occ.t5 >= 0) {
893e12c5d1SDavid du Colombier 		i = PTIME;
903e12c5d1SDavid du Colombier 		if(mag > 2)
913e12c5d1SDavid du Colombier 			i |= DARK;
923e12c5d1SDavid du Colombier 		if(mag < 5)
933e12c5d1SDavid du Colombier 			i |= SIGNIF;
947dd7cddfSDavid du Colombier 		if(occ.t1 >= 0 && occ.e1 >= 0)
953e12c5d1SDavid du Colombier 			event("Occultation of SAO %s begins at ",
963e12c5d1SDavid du Colombier 				saop, "", occ.t1, i);
977dd7cddfSDavid du Colombier 		if(occ.t5 >= 0 && occ.e5 >= 0)
983e12c5d1SDavid du Colombier 			event("Occultation of SAO %s ends at ",
993e12c5d1SDavid du Colombier 				saop, "", occ.t5, i);
1003e12c5d1SDavid du Colombier 		while(*saop++)
1013e12c5d1SDavid du Colombier 			;
1023e12c5d1SDavid du Colombier 	}
1033e12c5d1SDavid du Colombier 	goto loop;
1043e12c5d1SDavid du Colombier }
105