fixed some bugs

This commit is contained in:
Steffen Vogel 2013-02-07 18:33:42 +01:00
parent dac4098c73
commit 0b556ad78c
10 changed files with 280 additions and 177 deletions

View file

@ -185,6 +185,7 @@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@

12
configure vendored
View file

@ -629,6 +629,7 @@ am__isrc
INSTALL_DATA
INSTALL_SCRIPT
INSTALL_PROGRAM
LN_S
OBJEXT
EXEEXT
ac_ct_CC
@ -2594,6 +2595,17 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
$as_echo_n "checking whether ln -s works... " >&6; }
LN_S=$as_ln_s
if test "$LN_S" = "ln -s"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
$as_echo "no, using $LN_S" >&6; }
fi
# Checks for libraries.

View file

@ -8,6 +8,7 @@ AC_CONFIG_HEADERS([config.h])
# Checks for programs.
AC_PROG_CC
AC_PROG_LN_S
# Checks for libraries.

View file

@ -1,6 +1,6 @@
bin_PROGRAMS = calcelestial
calcelestial_SOURCES = calcelestial.c objects.c
calcelestial_SOURCES = calcelestial.c objects.c helpers.c
calcelestial_LDADD = -lm -lnova
if GEONAMES_SUPPORT
@ -14,3 +14,11 @@ if GEONAMES_SUPPORT
AM_CFLAGS = $(DEPS_GEONAMES_CFLAGS)
endif
#OBJS = sun moon mars neptune jupiter mercury uranus saturn venus pluto
#for OBJ in $OBJS
#do
# ln -s calcelestial $OBJ
#done
#
# for OBJ in sun moon mars neptune jupiter mercury uranus saturn venus pluto; do ln -s calcelestial $OBJ; done

View file

@ -65,10 +65,11 @@ CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
am__calcelestial_SOURCES_DIST = calcelestial.c objects.c geonames.c
am__calcelestial_SOURCES_DIST = calcelestial.c objects.c helpers.c \
geonames.c
@GEONAMES_SUPPORT_TRUE@am__objects_1 = geonames.$(OBJEXT)
am_calcelestial_OBJECTS = calcelestial.$(OBJEXT) objects.$(OBJEXT) \
$(am__objects_1)
helpers.$(OBJEXT) $(am__objects_1)
calcelestial_OBJECTS = $(am_calcelestial_OBJECTS)
am__DEPENDENCIES_1 =
@GEONAMES_SUPPORT_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1)
@ -124,6 +125,7 @@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
@ -185,7 +187,8 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
calcelestial_SOURCES = calcelestial.c objects.c $(am__append_1)
calcelestial_SOURCES = calcelestial.c objects.c helpers.c \
$(am__append_1)
calcelestial_LDADD = -lm -lnova $(am__append_2)
@GEONAMES_SUPPORT_TRUE@geonames_SOURCES = geonames_main.c geonames.c
@GEONAMES_SUPPORT_TRUE@geonames_LDADD = $(DEPS_GEONAMES_LIBS)
@ -283,6 +286,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calcelestial.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/geonames.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/geonames_main.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/helpers.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/objects.Po@am__quote@
.c.o:
@ -504,6 +508,14 @@ uninstall-am: uninstall-binPROGRAMS
tags uninstall uninstall-am uninstall-binPROGRAMS
#OBJS = sun moon mars neptune jupiter mercury uranus saturn venus pluto
#for OBJ in $OBJS
#do
# ln -s calcelestial $OBJ
#done
#
# for OBJ in sun moon mars neptune jupiter mercury uranus saturn venus pluto; do ln -s calcelestial $OBJ; done
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View file

@ -35,17 +35,14 @@
#include <getopt.h>
#include <float.h>
#include <math.h>
#include <libgen.h>
#include <time.h>
#include <sys/time.h>
#include <libgen.h>
#include <libnova/libnova.h>
#include <libnova/utility.h>
#include "../config.h"
#include "objects.h"
#include "helpers.h"
enum mode {
MODE_NOW,
@ -110,33 +107,6 @@ void usage() {
printf("Please report bugs to: %s\n", PACKAGE_BUGREPORT);
}
char * strreplace(char *subject, char *search, char *replace) {
int new_len = strlen(subject);
int search_len = strlen(search);
int replace_len = strlen(replace);
char *tmp;
for (tmp = strstr(subject, search); tmp != NULL; tmp = strstr(tmp + search_len, search)) {
new_len += replace_len - search_len;
}
char *old = subject;
char *new = malloc(new_len);
new[0] = '\0'; /* empty string */
for (tmp = strstr(subject, search); tmp != NULL; tmp = strstr(tmp + search_len, search)) {
new_len = strlen(new);
strncpy(new + new_len, old, tmp - old);
strcpy(new + new_len + (tmp - old), replace);
old = tmp + search_len;
}
strcpy(new + strlen(new), old);
return new;
}
int main(int argc, char *argv[]) {
/* default options */
double horizon = LN_SOLAR_STANDART_HORIZON; /* 50 Bogenminuten; no twilight, normal sunset/rise */
@ -286,23 +256,21 @@ int main(int argc, char *argv[]) {
}
#ifdef DEBUG
{
char date_str[64];
time_t t;
ln_get_timet_from_julian(jd, &t);
strftime(date_str, 64, "%Y-%m-%d %H:%M:%S", gmtime(&t));
strftime(date_str, sizeof(date_str), "%Y-%m-%d %H:%M:%S", gmtime(&t));
printf("calculate for: %s\n", date_str);
printf("calculate for jd: %f\n", jd);
printf("for position: %f, %f\n", obs.lat, obs.lng);
printf("for object: %d\n", obj);
printf("with horizon: %f\n", horizon);
printf("with timezone: UTC +%dh\n", timezone / -3600);
}
#endif
char result_str[64];
struct tm result_date;
struct ln_date result_ln;
if (object_rst(obj, jd, horizon, &obs, &rst) == 1) {
fprintf(stderr, "object is circumpolar\n");
@ -310,50 +278,37 @@ int main(int argc, char *argv[]) {
}
switch (mode) {
case MODE_NOW: jd = jd; break; /* use given (current) date */
case MODE_RISE: jd = rst.rise; break;
case MODE_SET: jd = rst.set; break;
case MODE_TRANSIT: jd = rst.transit; break;
case MODE_DAYTIME: jd = rst.set - rst.rise; break;
case MODE_NIGHTTIME: jd = rst.set - rst.rise; break;
case MODE_INVALID: break;
}
if (mode == MODE_DAYTIME || mode == MODE_NIGHTTIME) {
ln_get_date(jd - 0.5, &result_ln);
if (strstr(format, "%s") != NULL) {
char timestamp_str[16];
int seconds = round(jd * 86400);
snprintf(timestamp_str, sizeof(timestamp_str), "%lu", seconds);
format = strreplace(format, "%s", timestamp_str);
}
result_date.tm_year = -1900;
result_date.tm_mon = -1;
result_date.tm_mday = 0;
}
else {
// calculate position
struct ln_equ_posn result_equ;
struct ln_hrz_posn result_hrz;
double result_dist;
double result_diam;
struct object_details result;
object_pos(obj, jd, &obs, &result_equ, &result_hrz, &result_diam, &result_dist);
object_pos(obj, jd, &obs, &result);
struct ln_hms ra;
ln_deg_to_hms(result_equ.ra, &ra);
ln_deg_to_hms(result.equ.ra, &ra);
double az = result_hrz.az + 180;
double az = result.hrz.az + 180;
az -= (int) (az / 360) * 360;
printf("diam = %f\n", result_diam);
printf("dist au = %f\n", result_dist);
printf("dist km = %f\n", AU_METERS * result_dist);
char date_str[64];
printf("diam = %f\n", result.diameter);
printf("dist = %f au\n", result.distance);
printf("dist = %f km\n", AU_METERS * result.distance);
printf("az = %s\n", ln_get_humanr_location(az));
printf("alt = %s\n", ln_get_humanr_location(result_hrz.alt));
printf("alt = %s\n", ln_get_humanr_location(result.hrz.alt));
printf("ra = %dh%dm%fs\n", ra.hours, ra.minutes, ra.seconds);
printf("dec = %s\n", ln_get_humanr_location(result_equ.dec));
printf("dec = %s\n", ln_get_humanr_location(result.equ.dec));
printf("rise = %s\n", strfjd(date_str, sizeof(date_str), "%H:%M:%S", rst.rise));
printf("set = %s\n", strfjd(date_str, sizeof(date_str), "%H:%M:%S", rst.set));
printf("transit = %s\n", strfjd(date_str, sizeof(date_str), "%H:%M:%S", rst.transit));
printf("daytime = %s\n", strfjd(date_str, sizeof(date_str), "%H:%M:%S", rst.set - rst.rise));
printf("nighttime = %s\n", strfjd(date_str, sizeof(date_str), "%H:%M:%S", rst.rise - rst.set));
/*if (strstr(format, "%R") != NULL) {
snprintf(timestamp_str, sizeof(timestamp_str), "%lu", seconds);
@ -364,19 +319,5 @@ int main(int argc, char *argv[]) {
format = strreplace(format, "%s", timestamp_str);
}*/
ln_get_date(jd - timezone / 86400.0, &result_ln);
result_date.tm_year = result_ln.years - 1900;
result_date.tm_mon = result_ln.months - 1;
result_date.tm_mday = result_ln.days;
}
result_date.tm_hour = result_ln.hours;
result_date.tm_min = result_ln.minutes;
result_date.tm_sec = result_ln.seconds;
strftime(result_str, 64, format, &result_date);
printf("%s\n", result_str);
return EXIT_SUCCESS;
}

108
src/helpers.c Normal file
View file

@ -0,0 +1,108 @@
/**
* Helper functions
*
* @copyright 2012 Steffen Vogel
* @license http://www.gnu.org/licenses/gpl.txt GNU Public License
* @author Steffen Vogel <post@steffenvogel.de>
* @link http://www.steffenvogel.de/2012/03/14/cron-jobs-fur-sonnenauf-untergang/
*/
/*
* This file is part of sun
*
* sun is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* sun is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with sun. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <libnova/libnova.h>
#include "helpers.h"
char * strfjddur(char *s, size_t max, const char *format, double jd) {
struct tm tmd;
struct ln_date lnd;
char *local_format = strdup(format);
ln_get_date(jd - 0.5, &lnd);
if (strstr(format, "%s") != NULL) {
char timestamp_str[16];
int seconds = round(jd * 86400);
snprintf(timestamp_str, sizeof(timestamp_str), "%lu", seconds);
format = strreplace(local_format, "%s", timestamp_str);
}
tmd.tm_year = -1900;
tmd.tm_mon = -1;
tmd.tm_mday = 0;
tmd.tm_hour = lnd.hours;
tmd.tm_min = lnd.minutes;
tmd.tm_sec = lnd.seconds;
strftime(s, max, local_format, &tmd);
free(local_format);
return s;
}
char * strfjd(char *s, size_t max, const char *format, double jd) {
struct tm tmd;
struct ln_date lnd;
// time_t t;
// ln_get_timet_from_julian(jd, &t);
// strftime(date_str, sizeof(date_str), "%Y-%m-%d %H:%M:%S", gmtime(&t));
// ln_get_date(jd - timezone / 86400.0, &lnd);
ln_get_date(jd, &lnd);
tmd.tm_year = lnd.years - 1900;
tmd.tm_mon = lnd.months - 1;
tmd.tm_mday = lnd.days;
tmd.tm_hour = lnd.hours;
tmd.tm_min = lnd.minutes;
tmd.tm_sec = lnd.seconds;
strftime(s, max, format, &tmd);
return s;
}
char * strreplace(char *subject, char *search, char *replace) {
int new_len = strlen(subject);
int search_len = strlen(search);
int replace_len = strlen(replace);
char *tmp;
for (tmp = strstr(subject, search); tmp != NULL; tmp = strstr(tmp + search_len, search)) {
new_len += replace_len - search_len;
}
char *old = subject;
char *new = malloc(new_len);
new[0] = '\0'; /* empty string */
for (tmp = strstr(subject, search); tmp != NULL; tmp = strstr(tmp + search_len, search)) {
new_len = strlen(new);
strncpy(new + new_len, old, tmp - old);
strcpy(new + new_len + (tmp - old), replace);
old = tmp + search_len;
}
strcpy(new + strlen(new), old);
return new;
}

33
src/helpers.h Normal file
View file

@ -0,0 +1,33 @@
/**
* Helper functions
*
* @copyright 2012 Steffen Vogel
* @license http://www.gnu.org/licenses/gpl.txt GNU Public License
* @author Steffen Vogel <post@steffenvogel.de>
* @link http://www.steffenvogel.de/2012/03/14/cron-jobs-fur-sonnenauf-untergang/
*/
/*
* This file is part of sun
*
* sun is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* sun is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with sun. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _HELPERS_H_
#define _HELPERS_H_
char * strfjddur(char *s, size_t max, const char *format, double jd);
char * strfjd(char *s, size_t max, const char *format, double jd);
char * strreplace(char *subject, char *search, char *replace);
#endif /* _HELPERS_H_ */

View file

@ -23,34 +23,22 @@
* along with sun. If not, see <http://www.gnu.org/licenses/>.
*/
#include <libnova/solar.h>
#include <libnova/mars.h>
#include <libnova/lunar.h>
#include <libnova/neptune.h>
#include <libnova/jupiter.h>
#include <libnova/mercury.h>
#include <libnova/uranus.h>
#include <libnova/saturn.h>
#include <libnova/venus.h>
#include <libnova/pluto.h>
#include <libnova/earth.h>
#include <string.h>
#include "objects.h"
void object_pos(enum object obj, double jd, struct ln_lnlat_posn *obs, struct ln_equ_posn *equ, struct ln_hrz_posn *hrz, double *diam, double *dist) {
void object_pos(enum object obj, double jd, struct ln_lnlat_posn *obs, struct object_details *details) {
switch (obj) {
case OBJECT_SUN: return object_pos_sun(jd, obs, equ, hrz, diam, dist);
case OBJECT_MOON: return object_pos_moon(jd, obs, equ, hrz, diam, dist);
case OBJECT_MARS: return object_pos_mars(jd, obs, equ, hrz, diam, dist);
case OBJECT_NEPTUNE: return object_pos_neptune(jd, obs, equ, hrz, diam, dist);
case OBJECT_JUPITER: return object_pos_jupiter(jd, obs, equ, hrz, diam, dist);
case OBJECT_MERCURY: return object_pos_mercury(jd, obs, equ, hrz, diam, dist);
case OBJECT_URANUS: return object_pos_uranus(jd, obs, equ, hrz, diam, dist);
case OBJECT_SATURN: return object_pos_saturn(jd, obs, equ, hrz, diam, dist);
case OBJECT_VENUS: return object_pos_venus(jd, obs, equ, hrz, diam, dist);
case OBJECT_PLUTO: return object_pos_pluto(jd, obs, equ, hrz, diam, dist);
case OBJECT_SUN: return object_pos_sun(jd, obs, details);
case OBJECT_MOON: return object_pos_moon(jd, obs, details);
case OBJECT_MARS: return object_pos_mars(jd, obs, details);
case OBJECT_NEPTUNE: return object_pos_neptune(jd, obs, details);
case OBJECT_JUPITER: return object_pos_jupiter(jd, obs, details);
case OBJECT_MERCURY: return object_pos_mercury(jd, obs, details);
case OBJECT_URANUS: return object_pos_uranus(jd, obs, details);
case OBJECT_SATURN: return object_pos_saturn(jd, obs, details);
case OBJECT_VENUS: return object_pos_venus(jd, obs, details);
case OBJECT_PLUTO: return object_pos_pluto(jd, obs, details);
}
}
@ -85,82 +73,82 @@ enum object object_from_name(const char *name, bool casesen) {
else return OBJECT_INVALID;
}
void object_pos_sun(double jd, struct ln_lnlat_posn *obs, struct ln_equ_posn *equ, struct ln_hrz_posn *hrz, double *diam, double *dist) {
ln_get_solar_equ_coords(jd, equ);
ln_get_hrz_from_equ(equ, obs, jd, hrz);
void object_pos_sun(double jd, struct ln_lnlat_posn *obs, struct object_details *details) {
ln_get_solar_equ_coords(jd, &details->equ);
ln_get_hrz_from_equ(&details->equ, obs, jd, &details->hrz);
*dist = ln_get_earth_solar_dist(jd);
*diam = ln_get_solar_sdiam(jd);
details->distance = ln_get_earth_solar_dist(jd);
details->diameter = ln_get_solar_sdiam(jd);
}
void object_pos_moon(double jd, struct ln_lnlat_posn *obs, struct ln_equ_posn *equ, struct ln_hrz_posn *hrz, double *diam, double *dist) {
ln_get_lunar_equ_coords(jd, equ);
ln_get_hrz_from_equ(equ, obs, jd, hrz);
void object_pos_moon(double jd, struct ln_lnlat_posn *obs, struct object_details *details) {
ln_get_lunar_equ_coords(jd, &details->equ);
ln_get_hrz_from_equ(&details->equ, obs, jd, &details->hrz);
*dist = ln_get_lunar_earth_dist(jd) / AU_METERS;
*diam = ln_get_lunar_sdiam(jd);
details->distance = ln_get_lunar_earth_dist(jd) / AU_METERS;
details->diameter = ln_get_lunar_sdiam(jd);
}
void object_pos_mars(double jd, struct ln_lnlat_posn *obs, struct ln_equ_posn *equ, struct ln_hrz_posn *hrz, double *diam, double *dist) {
ln_get_mars_equ_coords(jd, equ);
ln_get_hrz_from_equ(equ, obs, jd, hrz);
void object_pos_mars(double jd, struct ln_lnlat_posn *obs, struct object_details *details) {
ln_get_mars_equ_coords(jd, &details->equ);
ln_get_hrz_from_equ(&details->equ, obs, jd, &details->hrz);
*dist = ln_get_mars_earth_dist(jd);
*diam = ln_get_mars_sdiam(jd);
details->distance = ln_get_mars_earth_dist(jd);
details->diameter = ln_get_mars_sdiam(jd);
}
void object_pos_neptune(double jd, struct ln_lnlat_posn *obs, struct ln_equ_posn *equ, struct ln_hrz_posn *hrz, double *diam, double *dist) {
ln_get_neptune_equ_coords(jd, equ);
ln_get_hrz_from_equ(equ, obs, jd, hrz);
void object_pos_neptune(double jd, struct ln_lnlat_posn *obs, struct object_details *details) {
ln_get_neptune_equ_coords(jd, &details->equ);
ln_get_hrz_from_equ(&details->equ, obs, jd, &details->hrz);
*dist = ln_get_neptune_earth_dist(jd);
*diam = ln_get_neptune_sdiam(jd);
details->distance = ln_get_neptune_earth_dist(jd);
details->diameter = ln_get_neptune_sdiam(jd);
}
void object_pos_jupiter(double jd, struct ln_lnlat_posn *obs, struct ln_equ_posn *equ, struct ln_hrz_posn *hrz, double *diam, double *dist) {
ln_get_jupiter_equ_coords(jd, equ);
ln_get_hrz_from_equ(equ, obs, jd, hrz);
void object_pos_jupiter(double jd, struct ln_lnlat_posn *obs, struct object_details *details) {
ln_get_jupiter_equ_coords(jd, &details->equ);
ln_get_hrz_from_equ(&details->equ, obs, jd, &details->hrz);
*dist = ln_get_jupiter_earth_dist(jd);
*diam = ln_get_jupiter_equ_sdiam(jd);
details->distance = ln_get_jupiter_earth_dist(jd);
details->diameter = ln_get_jupiter_equ_sdiam(jd);
}
void object_pos_mercury(double jd, struct ln_lnlat_posn *obs, struct ln_equ_posn *equ, struct ln_hrz_posn *hrz, double *diam, double *dist) {
ln_get_mercury_equ_coords(jd, equ);
ln_get_hrz_from_equ(equ, obs, jd, hrz);
void object_pos_mercury(double jd, struct ln_lnlat_posn *obs, struct object_details *details) {
ln_get_mercury_equ_coords(jd, &details->equ);
ln_get_hrz_from_equ(&details->equ, obs, jd, &details->hrz);
*dist = ln_get_mercury_earth_dist(jd);
*diam = ln_get_mercury_sdiam(jd);
details->distance = ln_get_mercury_earth_dist(jd);
details->diameter = ln_get_mercury_sdiam(jd);
}
void object_pos_uranus(double jd, struct ln_lnlat_posn *obs, struct ln_equ_posn *equ, struct ln_hrz_posn *hrz, double *diam, double *dist) {
ln_get_uranus_equ_coords(jd, equ);
ln_get_hrz_from_equ(equ, obs, jd, hrz);
void object_pos_uranus(double jd, struct ln_lnlat_posn *obs, struct object_details *details) {
ln_get_uranus_equ_coords(jd, &details->equ);
ln_get_hrz_from_equ(&details->equ, obs, jd, &details->hrz);
*dist = ln_get_uranus_earth_dist(jd);
*diam = ln_get_uranus_sdiam(jd);
details->distance = ln_get_uranus_earth_dist(jd);
details->diameter = ln_get_uranus_sdiam(jd);
}
void object_pos_saturn(double jd, struct ln_lnlat_posn *obs, struct ln_equ_posn *equ, struct ln_hrz_posn *hrz, double *diam, double *dist) {
ln_get_saturn_equ_coords(jd, equ);
ln_get_hrz_from_equ(equ, obs, jd, hrz);
void object_pos_saturn(double jd, struct ln_lnlat_posn *obs, struct object_details *details) {
ln_get_saturn_equ_coords(jd, &details->equ);
ln_get_hrz_from_equ(&details->equ, obs, jd, &details->hrz);
*dist = ln_get_saturn_earth_dist(jd);
*diam = ln_get_saturn_equ_sdiam(jd);
details->distance = ln_get_saturn_earth_dist(jd);
details->diameter = ln_get_saturn_equ_sdiam(jd);
}
void object_pos_venus(double jd, struct ln_lnlat_posn *obs, struct ln_equ_posn *equ, struct ln_hrz_posn *hrz, double *diam, double *dist) {
ln_get_venus_equ_coords(jd, equ);
ln_get_hrz_from_equ(equ, obs, jd, hrz);
void object_pos_venus(double jd, struct ln_lnlat_posn *obs, struct object_details *details) {
ln_get_venus_equ_coords(jd, &details->equ);
ln_get_hrz_from_equ(&details->equ, obs, jd, &details->hrz);
*dist = ln_get_venus_earth_dist(jd);
*diam = ln_get_venus_sdiam(jd);
details->distance = ln_get_venus_earth_dist(jd);
details->diameter = ln_get_venus_sdiam(jd);
}
void object_pos_pluto(double jd, struct ln_lnlat_posn *obs, struct ln_equ_posn *equ, struct ln_hrz_posn *hrz, double *diam, double *dist) {
ln_get_pluto_equ_coords(jd, equ);
ln_get_hrz_from_equ(equ, obs, jd, hrz);
void object_pos_pluto(double jd, struct ln_lnlat_posn *obs, struct object_details *details) {
ln_get_pluto_equ_coords(jd, &details->equ);
ln_get_hrz_from_equ(&details->equ, obs, jd, &details->hrz);
*dist = ln_get_pluto_earth_dist(jd);
*diam = ln_get_pluto_sdiam(jd);
details->distance = ln_get_pluto_earth_dist(jd);
details->diameter = ln_get_pluto_sdiam(jd);
}

View file

@ -26,7 +26,7 @@
#ifndef _OBJECTS_H_
#define _OBJECTS_H_
#include <libnova/ln_types.h>
#include <libnova/libnova.h>
#include <stdbool.h>
@ -46,30 +46,29 @@ enum object {
OBJECT_PLUTO
};
struct object_infos {
struct ln_rst_time *rst;
struct object_details {
struct ln_rst_time rst; /* rise/set/transit time in JD */
struct ln_lnlat_posn *obs;
struct ln_equ_posn *equ;
struct ln_hrz_posn *hrz;
double *diam;
double *dist;
struct ln_equ_posn equ;
struct ln_hrz_posn hrz;
double diameter; /* in arc seconds */
double distance; /* in AU */
};
enum object object_from_name(const char *name, bool casesen);
void object_pos(enum object obj, double jd, struct object_details *details);
void object_pos(enum object obj, double jd, struct ln_lnlat_posn *obs, struct object_details *details);
int object_rst(enum object obj, double jd, double horizon, struct ln_lnlat_posn *obs, struct ln_rst_time *rst);
void object_pos_sun(double jd, struct object_details *details);
void object_pos_moon(double jd, struct object_details *details);
void object_pos_mars(double jd, struct object_details *details);
void object_pos_neptune(double jd, struct object_details *details);
void object_pos_jupiter(double jd, struct object_details *details);
void object_pos_mercury(double jd, struct object_details *details);
void object_pos_uranus(double jd, struct object_details *details);
void object_pos_saturn(double jd, struct object_details *details);
void object_pos_venus(double jd, struct object_details *details);
void object_pos_pluto(double jd, struct object_details *details);
void object_pos_sun(double jd, struct ln_lnlat_posn *obs, struct object_details *details);
void object_pos_moon(double jd, struct ln_lnlat_posn *obs, struct object_details *details);
void object_pos_mars(double jd, struct ln_lnlat_posn *obs, struct object_details *details);
void object_pos_neptune(double jd, struct ln_lnlat_posn *obs, struct object_details *details);
void object_pos_jupiter(double jd, struct ln_lnlat_posn *obs, struct object_details *details);
void object_pos_mercury(double jd, struct ln_lnlat_posn *obs, struct object_details *details);
void object_pos_uranus(double jd, struct ln_lnlat_posn *obs, struct object_details *details);
void object_pos_saturn(double jd, struct ln_lnlat_posn *obs, struct object_details *details);
void object_pos_venus(double jd, struct ln_lnlat_posn *obs, struct object_details *details);
void object_pos_pluto(double jd, struct ln_lnlat_posn *obs, struct object_details *details);
#endif /* _OBJECTS_H_ */