/* convert radians to hh:mm:ss */ void ln_rad_to_hms (double radians, struct ln_hms * hms) { double degrees; radians = ln_range_radians(radians); degrees = ln_rad_to_deg(radians); ln_deg_to_hms(degrees, hms); }
void format_result(const char *format, struct object_details *result) { char buffer[128]; char *local_format = strdup(format); int i; struct ln_hms ra; /* convert results */ ln_deg_to_hms(result->equ.ra, &ra); ln_get_hrz_from_equ(&result->equ, &result->obs, result->jd, &result->hrz); result->azidir = ln_hrz_to_nswe(&result->hrz); result->hrz.az = ln_range_degrees(result->hrz.az + 180); result->hrz.alt = ln_range_degrees(result->hrz.alt); struct specifiers specifiers[] = { {"%J", &result->jd, DOUBLE}, {"§r", &result->equ.ra, DOUBLE}, {"§d", &result->equ.dec, DOUBLE}, {"§a", &result->hrz.az, DOUBLE}, {"§h", &result->hrz.alt, DOUBLE}, {"§d", &result->diameter, DOUBLE}, {"§e", &result->distance, DOUBLE}, {"§t", &result->tz, INTEGER}, {"§A", &result->obs.lat, DOUBLE}, {"§O", &result->obs.lng, DOUBLE}, {"§s", (void *) result->azidir, STRING}, {"§§", "§", STRING}, {0} }; for (i = 0; specifiers[i].token; i++) { if (strstr(local_format, specifiers[i].token) != NULL) { switch (specifiers[i].format) { case DOUBLE: snprintf(buffer, sizeof(buffer), "%." PRECISION "f", * (double *) specifiers[i].data); break; case STRING: snprintf(buffer, sizeof(buffer), "%s", (char *) specifiers[i].data); break; case INTEGER: snprintf(buffer, sizeof(buffer), "%d", * (int *) specifiers[i].data); break; } local_format = strreplace(local_format, specifiers[i].token, buffer); } } strfjd(buffer, sizeof(buffer), local_format, result->jd, result->tz); printf("%s\n", buffer); free(local_format); }
/*! \fn void ln_equ_to_hequ (struct ln_equ_posn * pos, struct lnh_equ_posn * hpos) * \brief human double equatorial position to human readable equatorial position * \ingroup conversion */ void ln_equ_to_hequ (struct ln_equ_posn * pos, struct lnh_equ_posn * hpos) { ln_deg_to_hms (pos->ra, &hpos->ra); ln_deg_to_dms (pos->dec, &hpos->dec); }