ref: 2c6cc121339ade33ac5aa4b46356df1cd5469fbe
dir: /sys/src/cmd/astro/init.c/
#include "astro.h" Obj2* objlst[] = { &osun, &omoon, &oshad, &omerc, &ovenus, &omars, &ojup, &osat, &ouran, &onept, &oplut, &ocomet, 0, }; struct idata { char* name; char* name1; void (*obj)(void); } idata[] = { "The sun", "sun", fsun, "The moon", "moon", moon, "The shadow", "shadow", shad, "Mercury", "mercury", merc, "Venus", "venus", venus, "Mars", "mars", mars, "Jupiter", "jupiter", jup, "Saturn", "saturn", sat, "Uranus", "uranus", uran, "Neptune", "neptune", nept, "Pluto", "pluto", plut, "Comet", "comet", comet, }; void init(void) { Obj2 *q; int i; glat = nlat - (692.74*radsec)*sin(2.*nlat) + (1.16*radsec)*sin(4.*nlat); erad = .99832707e0 + .00167644e0*cos(2.*nlat) - 0.352e-5*cos(4.*nlat) + 0.001e-5*cos(6.*nlat) + 0.1568e-6*elev; for(i=0; q=objlst[i]; i++) { q->name = idata[i].name; q->name1 = idata[i].name1; q->obj = idata[i].obj; } ostar.obj = fstar; ostar.name = "star"; } void setime(double d) { double x, xm, ym, zm; eday = d + deltat/86400.; wlong = awlong + 15.*deltat*radsec; capt = eday/36524.220e0; capt2 = capt*capt; capt3 = capt*capt2; nutate(); eday += .1; sun(); srad = rad; xm = rad*cos(beta)*cos(lambda); ym = rad*cos(beta)*sin(lambda); zm = rad*sin(beta); eday -= .1; sun(); xms = rad*cos(beta)*cos(lambda); yms = rad*cos(beta)*sin(lambda); zms = rad*sin(beta); x = .057756; xdot = x*(xm-xms); ydot = x*(ym-yms); zdot = x*(zm-zms); } void setobj(Obj1 *op) { Obj1 *p; p = op; p->ra = ra; p->decl2 = decl2; p->semi2 = semi2; p->az = az; p->el = el; p->mag = mag; } long starsao = 0; void fstar(void) { ra = ostar.point[0].ra; decl2 = ostar.point[0].decl2; semi2 = ostar.point[0].semi2; az = ostar.point[0].az; el = ostar.point[0].el; mag = ostar.point[0].mag; } void fsun(void) { beta = 0; rad = 0; lambda = 0; motion = 0; helio(); geo(); seday = eday; salph = alpha; sdelt = delta; mag = lmb2; } void shad(void) { if(seday != eday) fsun(); if(meday != eday) moon(); alpha = fmod(salph+pi, pipi); delta = -sdelt; hp = mhp; semi = 1.0183*mhp/radsec - 969.85/srad; geo(); }