13e12c5d1SDavid du Colombier #include <u.h> 23e12c5d1SDavid du Colombier #include <libc.h> 33e12c5d1SDavid du Colombier 47dd7cddfSDavid du Colombier #pragma varargck type "R" double 57dd7cddfSDavid du Colombier #pragma varargck type "D" double 67dd7cddfSDavid du Colombier 73e12c5d1SDavid du Colombier typedef struct Obj1 Obj1; 83e12c5d1SDavid du Colombier typedef struct Obj2 Obj2; 93e12c5d1SDavid du Colombier typedef struct Obj3 Obj3; 103e12c5d1SDavid du Colombier typedef struct Occ Occ; 113e12c5d1SDavid du Colombier typedef struct Event Event; 123e12c5d1SDavid du Colombier typedef struct Tim Tim; 133e12c5d1SDavid du Colombier typedef struct Moontab Moontab; 143e12c5d1SDavid du Colombier 153e12c5d1SDavid du Colombier #define NPTS 12 163e12c5d1SDavid du Colombier #define PER 1.0 173e12c5d1SDavid du Colombier 183e12c5d1SDavid du Colombier enum 193e12c5d1SDavid du Colombier { 203e12c5d1SDavid du Colombier DARK = 1<<0, 213e12c5d1SDavid du Colombier SIGNIF = 1<<1, 223e12c5d1SDavid du Colombier PTIME = 1<<2, 233e12c5d1SDavid du Colombier LIGHT = 1<<3, 243e12c5d1SDavid du Colombier }; 253e12c5d1SDavid du Colombier 263e12c5d1SDavid du Colombier struct Obj1 273e12c5d1SDavid du Colombier { 283e12c5d1SDavid du Colombier double ra; 293e12c5d1SDavid du Colombier double decl2; 303e12c5d1SDavid du Colombier double semi2; 313e12c5d1SDavid du Colombier double az; 323e12c5d1SDavid du Colombier double el; 333e12c5d1SDavid du Colombier double mag; 343e12c5d1SDavid du Colombier }; 353e12c5d1SDavid du Colombier struct Obj2 363e12c5d1SDavid du Colombier { 373e12c5d1SDavid du Colombier char* name; 387dd7cddfSDavid du Colombier char* name1; 393e12c5d1SDavid du Colombier void (*obj)(void); 403e12c5d1SDavid du Colombier Obj1 point[NPTS+2]; 413e12c5d1SDavid du Colombier }; 423e12c5d1SDavid du Colombier struct Obj3 433e12c5d1SDavid du Colombier { 443e12c5d1SDavid du Colombier double t1; 457dd7cddfSDavid du Colombier double e1; 463e12c5d1SDavid du Colombier double t2; 477dd7cddfSDavid du Colombier double e2; 483e12c5d1SDavid du Colombier double t3; 497dd7cddfSDavid du Colombier double e3; 503e12c5d1SDavid du Colombier double t4; 517dd7cddfSDavid du Colombier double e4; 523e12c5d1SDavid du Colombier double t5; 537dd7cddfSDavid du Colombier double e5; 543e12c5d1SDavid du Colombier }; 553e12c5d1SDavid du Colombier struct Event 563e12c5d1SDavid du Colombier { 573e12c5d1SDavid du Colombier char* format; 583e12c5d1SDavid du Colombier char* arg1; 593e12c5d1SDavid du Colombier char* arg2; 603e12c5d1SDavid du Colombier double tim; 613e12c5d1SDavid du Colombier int flag; 623e12c5d1SDavid du Colombier }; 633e12c5d1SDavid du Colombier struct Moontab 643e12c5d1SDavid du Colombier { 657dd7cddfSDavid du Colombier double f; 663e12c5d1SDavid du Colombier char c[4]; 673e12c5d1SDavid du Colombier }; 683e12c5d1SDavid du Colombier struct Occ 693e12c5d1SDavid du Colombier { 703e12c5d1SDavid du Colombier Obj1 act; 713e12c5d1SDavid du Colombier Obj1 del0; 723e12c5d1SDavid du Colombier Obj1 del1; 733e12c5d1SDavid du Colombier Obj1 del2; 743e12c5d1SDavid du Colombier }; 753e12c5d1SDavid du Colombier struct Tim 763e12c5d1SDavid du Colombier { 773e12c5d1SDavid du Colombier double ifa[5]; 783e12c5d1SDavid du Colombier char tz[4]; 793e12c5d1SDavid du Colombier }; 803e12c5d1SDavid du Colombier 817dd7cddfSDavid du Colombier double converge; 823e12c5d1SDavid du Colombier 833e12c5d1SDavid du Colombier char flags[128]; 843e12c5d1SDavid du Colombier int nperiods; 853e12c5d1SDavid du Colombier double wlong, awlong, nlat, elev; 863e12c5d1SDavid du Colombier double obliq, phi, eps, tobliq; 873e12c5d1SDavid du Colombier double dphi, deps; 887dd7cddfSDavid du Colombier double day, deld, per; 893e12c5d1SDavid du Colombier double eday, capt, capt2, capt3, gst; 903e12c5d1SDavid du Colombier double pi, pipi, radian, radsec, deltat; 913e12c5d1SDavid du Colombier double erad, glat; 923e12c5d1SDavid du Colombier double xms, yms, zms; 933e12c5d1SDavid du Colombier double xdot, ydot, zdot; 943e12c5d1SDavid du Colombier 953e12c5d1SDavid du Colombier double ecc, incl, node, argp, mrad, anom, motion; 963e12c5d1SDavid du Colombier 973e12c5d1SDavid du Colombier double lambda, beta, rad, mag, semi; 983e12c5d1SDavid du Colombier double alpha, delta, rp, hp; 993e12c5d1SDavid du Colombier double ra, decl, semi2; 1003e12c5d1SDavid du Colombier double lha, decl2, lmb2; 1013e12c5d1SDavid du Colombier double az, el; 1023e12c5d1SDavid du Colombier 1033e12c5d1SDavid du Colombier double meday, seday, mhp, salph, sdelt, srad; 1043e12c5d1SDavid du Colombier 1057dd7cddfSDavid du Colombier double* cafp; 1063e12c5d1SDavid du Colombier char* cacp; 1073e12c5d1SDavid du Colombier 1083e12c5d1SDavid du Colombier double rah, ram, ras, dday, dmin, dsec; 1093e12c5d1SDavid du Colombier long sao; 1103e12c5d1SDavid du Colombier double da, dd, px, epoch; 1113e12c5d1SDavid du Colombier char line[100]; 11259cc4ca5SDavid du Colombier Obj2 osun; 11359cc4ca5SDavid du Colombier Obj2 omoon; 11459cc4ca5SDavid du Colombier Obj2 oshad; 11559cc4ca5SDavid du Colombier Obj2 omerc; 11659cc4ca5SDavid du Colombier Obj2 ovenus; 11759cc4ca5SDavid du Colombier Obj2 omars; 11859cc4ca5SDavid du Colombier Obj2 osat; 11959cc4ca5SDavid du Colombier Obj2 ouran; 12059cc4ca5SDavid du Colombier Obj2 onept; 12159cc4ca5SDavid du Colombier Obj2 oplut; 12259cc4ca5SDavid du Colombier Obj2 ojup; 12359cc4ca5SDavid du Colombier Obj2 ostar; 12459cc4ca5SDavid du Colombier Obj2 ocomet; 1253e12c5d1SDavid du Colombier Obj3 occ; 1267dd7cddfSDavid du Colombier Obj2* eobj1; 1277dd7cddfSDavid du Colombier Obj2* eobj2; 1283e12c5d1SDavid du Colombier 1293e12c5d1SDavid du Colombier char* startab; 1303e12c5d1SDavid du Colombier 1313e12c5d1SDavid du Colombier extern int dmo[]; 1323e12c5d1SDavid du Colombier extern Obj2* objlst[]; 1333e12c5d1SDavid du Colombier 1347dd7cddfSDavid du Colombier extern double venfp[]; 1353e12c5d1SDavid du Colombier extern char vencp[]; 1367dd7cddfSDavid du Colombier extern double sunfp[]; 1373e12c5d1SDavid du Colombier extern char suncp[]; 1387dd7cddfSDavid du Colombier extern double mercfp[]; 1393e12c5d1SDavid du Colombier extern char merccp[]; 1407dd7cddfSDavid du Colombier extern double nutfp[]; 1413e12c5d1SDavid du Colombier extern char nutcp[]; 1423e12c5d1SDavid du Colombier extern Moontab moontab[]; 1433e12c5d1SDavid du Colombier 1443e12c5d1SDavid du Colombier extern void args(int, char**); 1453e12c5d1SDavid du Colombier extern void bdtsetup(double, Tim*); 1463e12c5d1SDavid du Colombier extern double betcross(double); 1473e12c5d1SDavid du Colombier extern double convdate(Tim*); 1483e12c5d1SDavid du Colombier extern double cosadd(int, double, ...); 1493e12c5d1SDavid du Colombier extern double cosx(double, int, int, int, int, double); 1503e12c5d1SDavid du Colombier extern double dist(Obj1*, Obj1*); 1513e12c5d1SDavid du Colombier extern double dsrc(double, Tim*, int); 1523e12c5d1SDavid du Colombier extern void dtsetup(double, Tim*); 1533e12c5d1SDavid du Colombier extern int evcomp(void*, void*); 1543e12c5d1SDavid du Colombier extern void event(char*, char*, char*, double, int); 1553e12c5d1SDavid du Colombier extern void evflush(void); 1563e12c5d1SDavid du Colombier extern double fmod(double, double); 1573e12c5d1SDavid du Colombier extern void fstar(void); 1583e12c5d1SDavid du Colombier extern void fsun(void); 1593e12c5d1SDavid du Colombier extern void geo(void); 1603e12c5d1SDavid du Colombier extern void helio(void); 1617dd7cddfSDavid du Colombier extern void icosadd(double*, char*); 1623e12c5d1SDavid du Colombier extern void init(void); 1633e12c5d1SDavid du Colombier extern void jup(void); 1643e12c5d1SDavid du Colombier extern int lastsun(Tim*, int); 1653e12c5d1SDavid du Colombier extern void main(int, char**); 1663e12c5d1SDavid du Colombier extern void mars(void); 1673e12c5d1SDavid du Colombier extern double melong(Obj2*); 1683e12c5d1SDavid du Colombier extern void merc(void); 1693e12c5d1SDavid du Colombier extern void moon(void); 1703e12c5d1SDavid du Colombier extern void numb(int); 1713e12c5d1SDavid du Colombier extern void nutate(void); 1723e12c5d1SDavid du Colombier extern void occult(Obj2*, Obj2*, double); 1733e12c5d1SDavid du Colombier extern void output(char*, Obj1*); 1743e12c5d1SDavid du Colombier extern void pdate(double); 1753e12c5d1SDavid du Colombier extern double pinorm(double); 1763e12c5d1SDavid du Colombier extern void ptime(double); 17759cc4ca5SDavid du Colombier extern void pstime(double); 1783e12c5d1SDavid du Colombier extern double pyth(double); 1793e12c5d1SDavid du Colombier extern double readate(void); 1803e12c5d1SDavid du Colombier extern double readdt(void); 1813e12c5d1SDavid du Colombier extern void readlat(int); 1823e12c5d1SDavid du Colombier extern double rise(Obj2*, double); 1833e12c5d1SDavid du Colombier extern int rline(int); 1843e12c5d1SDavid du Colombier extern void sat(void); 18559cc4ca5SDavid du Colombier extern void uran(void); 18659cc4ca5SDavid du Colombier extern void nept(void); 18759cc4ca5SDavid du Colombier extern void plut(void); 1883e12c5d1SDavid du Colombier extern void satel(double); 1893e12c5d1SDavid du Colombier extern void satels(void); 1903e12c5d1SDavid du Colombier extern void search(void); 1913e12c5d1SDavid du Colombier extern double set(Obj2*, double); 1923e12c5d1SDavid du Colombier extern void set3pt(Obj2*, int, Occ*); 1933e12c5d1SDavid du Colombier extern void setime(double); 1943e12c5d1SDavid du Colombier extern void setobj(Obj1*); 1953e12c5d1SDavid du Colombier extern void setpt(Occ*, double); 1963e12c5d1SDavid du Colombier extern void shad(void); 1973e12c5d1SDavid du Colombier extern double sinadd(int, double, ...); 1983e12c5d1SDavid du Colombier extern double sinx(double, int, int, int, int, double); 1993e12c5d1SDavid du Colombier extern char* skip(int); 2003e12c5d1SDavid du Colombier extern double solstice(int); 2013e12c5d1SDavid du Colombier extern void star(void); 2023e12c5d1SDavid du Colombier extern void stars(void); 2033e12c5d1SDavid du Colombier extern void sun(void); 2043e12c5d1SDavid du Colombier extern double sunel(double); 2053e12c5d1SDavid du Colombier extern void venus(void); 2063e12c5d1SDavid du Colombier extern int vis(double, double, double, double); 2073e12c5d1SDavid du Colombier extern void comet(void); 208*9a747e4fSDavid du Colombier extern int Rconv(Fmt*); 209*9a747e4fSDavid du Colombier extern int Dconv(Fmt*); 2103e12c5d1SDavid du Colombier extern double etdate(long, int, double); 211