217 lines
4.1 KiB
C
217 lines
4.1 KiB
C
#include <u.h>
|
|
#include <libc.h>
|
|
|
|
#ifdef VARARGCK
|
|
#pragma varargck type "R" double
|
|
#pragma varargck type "D" double
|
|
#endif
|
|
|
|
#undef sun
|
|
#define sun astrosun /* not the machine! */
|
|
#undef fmod
|
|
#define fmod astrofmod /* ours is always positive */
|
|
|
|
typedef struct Obj1 Obj1;
|
|
typedef struct Obj2 Obj2;
|
|
typedef struct Obj3 Obj3;
|
|
typedef struct Occ Occ;
|
|
typedef struct Event Event;
|
|
typedef struct Tim Tim;
|
|
typedef struct Moontab Moontab;
|
|
|
|
#define NPTS 12
|
|
#define PER 1.0
|
|
|
|
enum
|
|
{
|
|
DARK = 1<<0,
|
|
SIGNIF = 1<<1,
|
|
PTIME = 1<<2,
|
|
LIGHT = 1<<3
|
|
};
|
|
|
|
struct Obj1
|
|
{
|
|
double ra;
|
|
double decl2;
|
|
double semi2;
|
|
double az;
|
|
double el;
|
|
double mag;
|
|
};
|
|
struct Obj2
|
|
{
|
|
char* name;
|
|
char* name1;
|
|
void (*obj)(void);
|
|
Obj1 point[NPTS+2];
|
|
};
|
|
struct Obj3
|
|
{
|
|
double t1;
|
|
double e1;
|
|
double t2;
|
|
double e2;
|
|
double t3;
|
|
double e3;
|
|
double t4;
|
|
double e4;
|
|
double t5;
|
|
double e5;
|
|
};
|
|
struct Event
|
|
{
|
|
char* format;
|
|
char* arg1;
|
|
char* arg2;
|
|
double tim;
|
|
int flag;
|
|
};
|
|
struct Moontab
|
|
{
|
|
double f;
|
|
char c[4];
|
|
};
|
|
struct Occ
|
|
{
|
|
Obj1 act;
|
|
Obj1 del0;
|
|
Obj1 del1;
|
|
Obj1 del2;
|
|
};
|
|
struct Tim
|
|
{
|
|
double ifa[5];
|
|
char tz[4];
|
|
};
|
|
|
|
double converge;
|
|
|
|
char flags[128];
|
|
int nperiods;
|
|
double wlong, awlong, nlat, elev;
|
|
double obliq, phi, eps, tobliq;
|
|
double dphi, deps;
|
|
double day, deld, per;
|
|
double eday, capt, capt2, capt3, gst;
|
|
double pi, pipi, radian, radsec, deltat;
|
|
double erad, glat;
|
|
double xms, yms, zms;
|
|
double xdot, ydot, zdot;
|
|
|
|
double ecc, incl, node, argp, mrad, anom, motion;
|
|
|
|
double lambda, beta, rad, mag, semi;
|
|
double alpha, delta, rp, hp;
|
|
double ra, decl, semi2;
|
|
double lha, decl2, lmb2;
|
|
double az, el;
|
|
|
|
double meday, seday, mhp, salph, sdelt, srad;
|
|
|
|
double* cafp;
|
|
char* cacp;
|
|
|
|
double rah, ram, ras, dday, dmin, dsec;
|
|
long sao;
|
|
double da, dd, px, epoch;
|
|
char line[100];
|
|
Obj2 osun;
|
|
Obj2 omoon;
|
|
Obj2 oshad;
|
|
Obj2 omerc;
|
|
Obj2 ovenus;
|
|
Obj2 omars;
|
|
Obj2 osat;
|
|
Obj2 ouran;
|
|
Obj2 onept;
|
|
Obj2 oplut;
|
|
Obj2 ojup;
|
|
Obj2 ostar;
|
|
Obj2 ocomet;
|
|
Obj3 occ;
|
|
Obj2* eobj1;
|
|
Obj2* eobj2;
|
|
|
|
char* startab;
|
|
|
|
extern int dmo[];
|
|
extern Obj2* objlst[];
|
|
|
|
extern double venfp[];
|
|
extern char vencp[];
|
|
extern double sunfp[];
|
|
extern char suncp[];
|
|
extern double mercfp[];
|
|
extern char merccp[];
|
|
extern double nutfp[];
|
|
extern char nutcp[];
|
|
extern Moontab moontab[];
|
|
|
|
extern void args(int, char**);
|
|
extern void bdtsetup(double, Tim*);
|
|
extern double betcross(double);
|
|
extern double convdate(Tim*);
|
|
extern double cosadd(int, ...);
|
|
extern double cosx(double, int, int, int, int, double);
|
|
extern double dist(Obj1*, Obj1*);
|
|
extern double dsrc(double, Tim*, int);
|
|
extern void dtsetup(double, Tim*);
|
|
/*extern int evcomp(void*, void*);*/
|
|
extern void event(char*, char*, char*, double, int);
|
|
extern void evflush(void);
|
|
extern double fmod(double, double);
|
|
extern void fstar(void);
|
|
extern void fsun(void);
|
|
extern void geo(void);
|
|
extern void helio(void);
|
|
extern void icosadd(double*, char*);
|
|
extern void init(void);
|
|
extern void jup(void);
|
|
extern int lastsun(Tim*, int);
|
|
extern int main(int, char**);
|
|
extern void mars(void);
|
|
extern double melong(Obj2*);
|
|
extern void merc(void);
|
|
extern void moon(void);
|
|
extern void numb(int);
|
|
extern void nutate(void);
|
|
extern void occult(Obj2*, Obj2*, double);
|
|
extern void output(char*, Obj1*);
|
|
extern void pdate(double);
|
|
extern double pinorm(double);
|
|
extern void ptime(double);
|
|
extern void pstime(double);
|
|
extern double pyth(double);
|
|
extern double readate(void);
|
|
extern double readdt(void);
|
|
extern void readlat(int);
|
|
extern double rise(Obj2*, double);
|
|
extern int rline(int);
|
|
extern void sat(void);
|
|
extern void uran(void);
|
|
extern void nept(void);
|
|
extern void plut(void);
|
|
extern void satel(double);
|
|
extern void satels(void);
|
|
extern void search(void);
|
|
extern double set(Obj2*, double);
|
|
extern void set3pt(Obj2*, int, Occ*);
|
|
extern void setime(double);
|
|
extern void setobj(Obj1*);
|
|
extern void setpt(Occ*, double);
|
|
extern void shad(void);
|
|
extern double sinadd(int, ...);
|
|
extern double sinx(double, int, int, int, int, double);
|
|
extern char* skip(int);
|
|
extern double solstice(int);
|
|
extern void star(void);
|
|
extern void stars(void);
|
|
extern void sun(void);
|
|
extern double sunel(double);
|
|
extern void venus(void);
|
|
extern int vis(double, double, double, double);
|
|
extern void comet(void);
|
|
extern int Rconv(Fmt*);
|
|
extern int Dconv(Fmt*);
|
|
extern double etdate(long, int, double);
|