Subversion Repositories planix.SVN

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include "astro.h"

char*   solstr[] =
{
        "Fall equinox",
        "Winter solstice",
        "Spring equinox",
        "Summer solstice",
};

struct
{
        double  beta;
        int     rta;
        int     dec;
        char    *betstr;
} bettab[] =
{
        -1.3572, 231,   50,     "Quadrantid",
         0.7620, 336,   0,      "Eta aquarid",
         1.5497, 260,   -20,    "Ophiuchid",
         2.1324, 315,   -15,    "Capricornid",
         2.1991, 339,   -17,    "Delta aquarid",
         2.2158, 340,   -30,    "Pisces australid",
         2.4331, 46,    58,     "Perseid",
        -2.6578, 95,    15,     "Orionid",
        -1.8678, 15,    -55,    "Phoenicid",
        -1.7260, 113,   32,     "Geminid",
        0
};

void
search(void)
{
        Obj2 *p, *q;
        int i, j;
        double t;

        for(i=0; objlst[i]; i++) {
                p = objlst[i];
                if(p == &oshad)
                        continue;
                t = rise(p, -.833);
                if(t >= 0.)
                        event("%s rises at ", p->name, "", t,
                                i==0? PTIME: PTIME|DARK);
                t = set(p, -.833);
                if(t >= 0.)
                        event("%s sets at ", p->name, "", t,
                                i==0? PTIME: PTIME|DARK);
                if(p == &osun) {
                        for(j=0; j<4; j++) {
                                t = solstice(j);
                                if(t >= 0)
                                        event("%s at ", solstr[j], "", t,
                                                SIGNIF|PTIME);
                        }
                        for(j=0; bettab[j].beta!=0; j++) {
                                t = betcross(bettab[j].beta);
                                if(t >= 0)
                                        event("%s  meeteeor shouwer",
                                        bettab[j].betstr, "", t, SIGNIF);
                        }
                        t = rise(p, -18);
                        if(t >= 0)
                                event("Twilight starts at ", "", "", t, PTIME);
                        t = set(p, -18);
                        if(t >= 0)
                                event("Twilight ends at ", "", "", t, PTIME);
                }
                if(p == &omoon)
                for(j=0; j<NPTS; j++) {
                        if(p->point[j].mag > .75 && p->point[j+1].mag < .25)
                                event("New moon", "", "", 0, 0);
                        if(p->point[j].mag <= .25 && p->point[j+1].mag > .25)
                                event("First quarter moon", "", "", 0, 0);
                        if(p->point[j].mag <= .50 && p->point[j+1].mag > .50)
                                event("Full moon", "", "", 0, 0);
                        if(p->point[j].mag <= .75 && p->point[j+1].mag > .75)
                                event("Last quarter moon", "", "", 0, 0);
                }
                if(p == &omerc || p == &ovenus) {
                        t = melong(p);
                        if(t >= 0) {
                                t = rise(p, 0) - rise(&osun, 0);
                                if(t < 0)
                                        t += NPTS;
                                if(t > NPTS)
                                        t -= NPTS;
                                if(t > NPTS/2)
                                event("Morning elongation of %s", p->name,
                                        "", 0, SIGNIF);
                                else
                                event("Evening elongation of %s", p->name,
                                        "", 0, SIGNIF);
                        }
                }
                for(j=i; objlst[j]; j++) {
                        if(i == j)
                                continue;
                        q = objlst[j];
                        if(p == &omoon || q == &omoon) {
                                occult(p, q, 0);
                                if(occ.t3 < 0)
                                        continue;
                                if(p == &osun || q == &oshad) {
                                        if(occ.t1 >= 0)
                                        event("Partial eclipse of %s begins at ", p->name, "",
                                                occ.t1, SIGNIF|PTIME);
                                        if(occ.t2 >= 0)
                                        event("Total eclipse of %s begins at ", p->name, "",
                                                occ.t2, SIGNIF|PTIME);
                                        if(occ.t4 >= 0)
                                        event("Total eclipse of %s ends at ", p->name, "",
                                                occ.t4, SIGNIF|PTIME);
                                        if(occ.t5 >= 0)
                                        event("Partial eclipse of %s ends at ", p->name, "",
                                                occ.t5, SIGNIF|PTIME);
                                } else {
                                        if(occ.t1 >= 0)
                                        event("Occultation of %s begins at ", q->name, "",
                                                occ.t1, SIGNIF|PTIME);
                                        if(occ.t5 >= 0)
                                        event("Occultation of %s ends at ", q->name, "",
                                                occ.t5, SIGNIF|PTIME);
                                }
                                continue;
                        }
                        if(p == &osun) {
                                if(q != &omerc && q != &ovenus)
                                        continue;
                                occult(p, q, -1);
                                if(occ.t3 >= 0.) {
                                        if(occ.t1 >= 0)
                                        event("Transit of %s begins at ", q->name, "",
                                                occ.t1, SIGNIF|LIGHT|PTIME);
                                        if(occ.t5 >= 0)
                                        event("Transit of %s ends at ", q->name, "",
                                                occ.t5, SIGNIF|LIGHT|PTIME);
                                }
                                continue;
                        }
                        t = dist(&p->point[0], &q->point[0]);
                        if(t > 5000)
                                continue;
                        event("%s is in the house of %s",
                                p->name, q->name, 0, 0);
                }
        }
        if(flags['o'])
                stars();
        if(flags['a'])
                satels();
        evflush();
}