mirror of
https://salsa.debian.org/dskoll/remind.git
synced 2026-04-17 06:48:47 +02:00
Add moonrisedir and moonsetdir functions.
This commit is contained in:
28
src/funcs.c
28
src/funcs.c
@@ -126,7 +126,9 @@ static int FMoondate (func_info *);
|
||||
static int FMoondatetime (func_info *);
|
||||
static int FMoonphase (func_info *);
|
||||
static int FMoonrise (func_info *);
|
||||
static int FMoonrisedir (func_info *);
|
||||
static int FMoonset (func_info *);
|
||||
static int FMoonsetdir (func_info *);
|
||||
static int FMoontime (func_info *);
|
||||
static int FMultiTrig (func_info *);
|
||||
static int FNDawn (func_info *);
|
||||
@@ -289,7 +291,9 @@ BuiltinFunc Func[] = {
|
||||
{ "moondatetime", 1, 3, 0, FMoondatetime, NULL },
|
||||
{ "moonphase", 0, 2, 0, FMoonphase, NULL },
|
||||
{ "moonrise", 0, 1, 0, FMoonrise, NULL },
|
||||
{ "moonrisedir", 0, 1, 0, FMoonrisedir, NULL },
|
||||
{ "moonset", 0, 1, 0, FMoonset, NULL },
|
||||
{ "moonsetdir", 0, 1, 0, FMoonsetdir, NULL },
|
||||
{ "moontime", 1, 3, 0, FMoontime, NULL },
|
||||
{ "multitrig", 1, NO_MAX, 0, FMultiTrig, NULL },
|
||||
{ "ndawn", 0, 1, 0, FNDawn, NULL },
|
||||
@@ -3344,6 +3348,30 @@ static int FMoonset(func_info *info)
|
||||
return OK;
|
||||
}
|
||||
|
||||
static int FMoonrisedir(func_info *info)
|
||||
{
|
||||
int start = DSEToday;
|
||||
if (Nargs >= 1) {
|
||||
if (!HASDATE(ARG(0))) return E_BAD_TYPE;
|
||||
start = DATEPART(ARG(0));
|
||||
}
|
||||
RetVal.type = INT_TYPE;
|
||||
RETVAL = GetMoonrise_angle(start);
|
||||
return OK;
|
||||
}
|
||||
|
||||
static int FMoonsetdir(func_info *info)
|
||||
{
|
||||
int start = DSEToday;
|
||||
if (Nargs >= 1) {
|
||||
if (!HASDATE(ARG(0))) return E_BAD_TYPE;
|
||||
start = DATEPART(ARG(0));
|
||||
}
|
||||
RetVal.type = INT_TYPE;
|
||||
RETVAL = GetMoonset_angle(start);
|
||||
return OK;
|
||||
}
|
||||
|
||||
static int MoonStuff(int type_wanted, func_info *info)
|
||||
{
|
||||
int startdate, starttim;
|
||||
|
||||
36
src/moon.c
36
src/moon.c
@@ -896,31 +896,55 @@ calculate_moonrise_moonset(double latitude, double longitude, time_t t,
|
||||
Returns 0 if no moonrise could be computes */
|
||||
|
||||
#define ME_SEARCH_DAYS 180
|
||||
static int GetMoonevent(int dse, int is_rise)
|
||||
static int GetMoonevent(int dse, int is_rise, int want_angle)
|
||||
{
|
||||
int i;
|
||||
int angle;
|
||||
struct MoonInfo mi;
|
||||
time_t t = time_t_from_dse(dse);
|
||||
for (i=0; i<ME_SEARCH_DAYS; i++) {
|
||||
calculate_moonrise_moonset(Latitude, Longitude, t + i * 86400, &mi);
|
||||
if (is_rise) {
|
||||
if (mi.hasRise && mi.riseTime >= t) {
|
||||
return datetime_from_time_t(mi.riseTime);
|
||||
if (want_angle) {
|
||||
angle = (int) (mi.riseAz + 0.5);
|
||||
return angle;
|
||||
} else {
|
||||
return datetime_from_time_t(mi.riseTime);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mi.hasSet && mi.setTime >= t) {
|
||||
return datetime_from_time_t(mi.setTime);
|
||||
if (want_angle) {
|
||||
angle = (int) (mi.setAz + 0.5);
|
||||
return angle;
|
||||
} else {
|
||||
return datetime_from_time_t(mi.setTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
if (want_angle) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int GetMoonrise(int dse)
|
||||
{
|
||||
return GetMoonevent(dse, 1);
|
||||
return GetMoonevent(dse, 1, 0);
|
||||
}
|
||||
int GetMoonset(int dse)
|
||||
{
|
||||
return GetMoonevent(dse, 0);
|
||||
return GetMoonevent(dse, 0, 0);
|
||||
}
|
||||
|
||||
int GetMoonrise_angle(int dse)
|
||||
{
|
||||
return GetMoonevent(dse, 1, 1);
|
||||
}
|
||||
int GetMoonset_angle(int dse)
|
||||
{
|
||||
return GetMoonevent(dse, 0, 1);
|
||||
}
|
||||
|
||||
@@ -287,3 +287,5 @@ void WriteJSONInfoChain(TrigInfo *ti);
|
||||
char const *line_range(int lineno_start, int lineno);
|
||||
int GetMoonrise(int dse);
|
||||
int GetMoonset(int dse);
|
||||
int GetMoonrise_angle(int dse);
|
||||
int GetMoonset_angle(int dse);
|
||||
|
||||
Reference in New Issue
Block a user