added unix timestamp output to sunrise script
This commit is contained in:
parent
88e8bf1601
commit
1fe309c53c
1 changed files with 29 additions and 4 deletions
33
src/sun.c
33
src/sun.c
|
@ -1,5 +1,6 @@
|
|||
#include "stdio.h"
|
||||
#include "stdlib.h"
|
||||
#include "string.h"
|
||||
#include "math.h"
|
||||
#include "time.h"
|
||||
|
||||
|
@ -8,6 +9,7 @@ double deg2rad(double deg) {
|
|||
}
|
||||
|
||||
enum sun { RISE, SET };
|
||||
enum out { HUMAN, UNIX };
|
||||
|
||||
double sun(enum sun mode, double lat, double lon, int timezone) {
|
||||
const double h = -0.0145;
|
||||
|
@ -35,24 +37,47 @@ double sun(enum sun mode, double lat, double lon, int timezone) {
|
|||
|
||||
int main(int argc, char *argv[]) {
|
||||
enum sun mode;
|
||||
enum out output;
|
||||
|
||||
if (argc < 5) goto usage;
|
||||
if (argc < 4 || argc > 6) goto usage;
|
||||
|
||||
|
||||
if (strcmp(argv[1], "rise") == 0) mode = RISE;
|
||||
else if (strcmp(argv[1], "set") == 0) mode = SET;
|
||||
else goto usage;
|
||||
|
||||
int timezone = atoi(argv[4]);
|
||||
if (argc >= 6) {
|
||||
if (strcmp(argv[5], "human") == 0) output = HUMAN;
|
||||
else if (strcmp(argv[5], "unix") == 0) output = UNIX;
|
||||
else goto usage;
|
||||
}
|
||||
else {
|
||||
output = HUMAN;
|
||||
}
|
||||
|
||||
int timezone = (argc >= 5) ? atoi(argv[4]) : 0;
|
||||
double lat = deg2rad(strtod(argv[2], NULL));
|
||||
double lon = deg2rad(strtod(argv[3], NULL));
|
||||
double time = sun(mode, lat, lon, timezone);
|
||||
double intpart;
|
||||
|
||||
printf("%d:%02d\n", (int) floor(time), (int) (modf(time, &intpart)*60));
|
||||
switch (output) {
|
||||
case HUMAN:
|
||||
printf("%d:%02d\n", (int) floor(time), (int) (modf(time, &intpart)*60));
|
||||
break;
|
||||
case UNIX:
|
||||
printf("%d\n", (int) round(time*60*60));
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
usage:
|
||||
fprintf(stderr, "usage: sun (rise|set) LAT LON TIMEZONE\n");
|
||||
fprintf(stderr, "usage: sun MODE LAT LON [TIMEZONE] [OUTPUT]\n");
|
||||
fprintf(stderr, " MODE\t\t'rise' or 'set'\n");
|
||||
fprintf(stderr, " LAT, LON\tthe geografical postition in degree\n");
|
||||
fprintf(stderr, " TIMEZONE\tan integer describing the timezone offset\n");
|
||||
fprintf(stderr, " OUTPUT\t'human' (default) or 'unix'\n");
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue