diff --git a/Makefile.in b/Makefile.in index 137cbd8..5c88286 100644 --- a/Makefile.in +++ b/Makefile.in @@ -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@ diff --git a/configure b/configure index ee8e307..e7891b2 100755 --- a/configure +++ b/configure @@ -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. diff --git a/configure.ac b/configure.ac index f56ad2e..f4be475 100644 --- a/configure.ac +++ b/configure.ac @@ -8,6 +8,7 @@ AC_CONFIG_HEADERS([config.h]) # Checks for programs. AC_PROG_CC +AC_PROG_LN_S # Checks for libraries. diff --git a/src/Makefile.am b/src/Makefile.am index a713e61..6cafd71 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -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 diff --git a/src/Makefile.in b/src/Makefile.in index 6538be9..68c3eea 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -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: diff --git a/src/calcelestial.c b/src/calcelestial.c index 7261b8b..37ab0ab 100644 --- a/src/calcelestial.c +++ b/src/calcelestial.c @@ -35,17 +35,14 @@ #include #include #include - +#include #include #include - -#include - #include -#include #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; } diff --git a/src/helpers.c b/src/helpers.c new file mode 100644 index 0000000..7d26651 --- /dev/null +++ b/src/helpers.c @@ -0,0 +1,108 @@ +/** + * Helper functions + * + * @copyright 2012 Steffen Vogel + * @license http://www.gnu.org/licenses/gpl.txt GNU Public License + * @author Steffen Vogel + * @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 . + */ + +#include +#include +#include +#include + +#include + +#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; +} diff --git a/src/helpers.h b/src/helpers.h new file mode 100644 index 0000000..5ce14d5 --- /dev/null +++ b/src/helpers.h @@ -0,0 +1,33 @@ +/** + * Helper functions + * + * @copyright 2012 Steffen Vogel + * @license http://www.gnu.org/licenses/gpl.txt GNU Public License + * @author Steffen Vogel + * @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 . + */ + +#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_ */ diff --git a/src/objects.c b/src/objects.c index 2b1b9e6..abebbe1 100644 --- a/src/objects.c +++ b/src/objects.c @@ -23,34 +23,22 @@ * along with sun. If not, see . */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - #include #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); } diff --git a/src/objects.h b/src/objects.h index 3f8ef59..a26a278 100644 --- a/src/objects.h +++ b/src/objects.h @@ -26,7 +26,7 @@ #ifndef _OBJECTS_H_ #define _OBJECTS_H_ -#include +#include #include @@ -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_ */