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