]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/astro/init.c
devproc: can't wait for ourselfs to stop (thanks Shamar)
[plan9front.git] / sys / src / cmd / astro / init.c
1 #include "astro.h"
2
3 Obj2*   objlst[] =
4 {
5         &osun,
6         &omoon,
7         &oshad,
8         &omerc,
9         &ovenus,
10         &omars,
11         &ojup,
12         &osat,
13         &ouran,
14         &onept,
15         &oplut,
16         &ocomet,
17         0,
18 };
19
20 struct  idata
21 {
22         char*   name;
23         char*   name1;
24         void    (*obj)(void);
25 } idata[] =
26 {
27         "The sun",      "sun",          fsun,
28         "The moon",     "moon",         moon,
29         "The shadow",   "shadow",       shad,
30         "Mercury",      "mercury",      merc,
31         "Venus",        "venus",        venus,
32         "Mars",         "mars",         mars,
33         "Jupiter",      "jupiter",      jup,
34         "Saturn",       "saturn",       sat,
35         "Uranus",       "uranus",       uran,
36         "Neptune",      "neptune",      nept,
37         "Pluto",        "pluto",        plut,
38         "Comet",        "comet",        comet,
39 };
40
41 void
42 init(void)
43 {
44         Obj2 *q;
45         int i;
46
47         glat = nlat - (692.74*radsec)*sin(2.*nlat)
48                  + (1.16*radsec)*sin(4.*nlat);
49         erad = .99832707e0 + .00167644e0*cos(2.*nlat)
50                  - 0.352e-5*cos(4.*nlat)
51                  + 0.001e-5*cos(6.*nlat)
52                  + 0.1568e-6*elev;
53
54         for(i=0; q=objlst[i]; i++) {
55                 q->name = idata[i].name;
56                 q->name1 = idata[i].name1;
57                 q->obj = idata[i].obj;
58         }
59         ostar.obj = fstar;
60         ostar.name = "star";
61 }
62
63 void
64 setime(double d)
65 {
66         double x, xm, ym, zm;
67
68         eday = d + deltat/86400.;
69         wlong = awlong + 15.*deltat*radsec;
70
71         capt = eday/36524.220e0;
72         capt2 = capt*capt;
73         capt3 = capt*capt2;
74         nutate();
75         eday += .1;
76         sun();
77         srad = rad;
78         xm = rad*cos(beta)*cos(lambda);
79         ym = rad*cos(beta)*sin(lambda);
80         zm = rad*sin(beta);
81         eday -= .1;
82         sun();
83         xms = rad*cos(beta)*cos(lambda);
84         yms = rad*cos(beta)*sin(lambda);
85         zms = rad*sin(beta);
86         x = .057756;
87         xdot = x*(xm-xms);
88         ydot = x*(ym-yms);
89         zdot = x*(zm-zms);
90 }
91
92 void
93 setobj(Obj1 *op)
94 {
95         Obj1 *p;
96
97         p = op;
98         p->ra = ra;
99         p->decl2 = decl2;
100         p->semi2 = semi2;
101         p->az = az;
102         p->el = el;
103         p->mag = mag;
104 }
105
106 long    starsao = 0;
107
108 void
109 fstar(void)
110 {
111
112         ra = ostar.point[0].ra;
113         decl2 = ostar.point[0].decl2;
114         semi2 = ostar.point[0].semi2;
115         az = ostar.point[0].az;
116         el = ostar.point[0].el;
117         mag = ostar.point[0].mag;
118 }
119
120 void
121 fsun(void)
122 {
123
124         beta = 0;
125         rad = 0;
126         lambda = 0;
127         motion = 0;
128         helio();
129         geo();
130         seday = eday;
131         salph = alpha;
132         sdelt = delta;
133         mag = lmb2;
134 }
135
136 void
137 shad(void)
138 {
139
140         if(seday != eday)
141                 fsun();
142         if(meday != eday)
143                 moon();
144         alpha = fmod(salph+pi, pipi);
145         delta = -sdelt;
146         hp = mhp;
147         semi = 1.0183*mhp/radsec - 969.85/srad;
148         geo();
149 }