#include #include #include #include #include "sonnenverlauf.h" int strtod_error( const char *str, double *value ) { char *endptr; if ( *str == '\0' ) return 1; *value = strtod( str, &endptr); if ( *endptr != '\0' ) return 1; return 0; } int main( int argc, char *argv[] ) { struct tm t = { .tm_mday = 1, .tm_mon = 0, .tm_year = 122, .tm_hour = 0, .tm_min = 0, .tm_sec = 0 }; double Zeitzone = 1.0; Sonnenverlauf_t Sonnenverlauf; double GeographischeBreite; double GeographischeLaenge; int opt; int GeographischeBreiteGelesen = 0; int GeographischeLaengeGelesen = 0; while ( ( opt = getopt( argc, argv, "b:l:z:" ) ) != -1 ) { switch ( opt ) { case 'b': if ( strtod_error( optarg, &GeographischeBreite ) ) { fprintf( stderr, "Geographische Breite konnte nicht gelesen werden. Parameter -b ist fehlerhaft!\n" ); return 1; } GeographischeBreiteGelesen = 1; break; case 'l': if ( strtod_error( optarg, &GeographischeLaenge ) ) { fprintf( stderr, "Geographische Laenge konnte nicht gelesen werden. Parameter -l ist fehlerhaft!\n" ); return 1; } GeographischeLaengeGelesen = 1; break; case 'z': if ( strtod_error( optarg, &Zeitzone ) ) { fprintf( stderr, "Zeitzone konnte nicht gelesen werden. Parameter -z ist fehlerhaft!\n" ); return 1; } break; default: return 1; } } if ( !GeographischeBreiteGelesen ) { fprintf( stderr, "Geographische Breite wurde nicht angegeben. Parameter -b fehlt.\n" ); return 1; } if ( !GeographischeLaengeGelesen ) { fprintf( stderr, "Geographische Laenge wurde nicht angegeben. Parameter -l fehlt.!\n" ); return 1; } while ( ( t.tm_year + 1900 ) < 2023 ) { Sonnenverlauf = BerechneSonnenverlauf( t.tm_mday, t.tm_mon + 1, t.tm_year + 1900, Zeitzone, GeographischeBreite, GeographischeLaenge ); printf( "Datum : %02d.%02d.%d\t\t%02d:%02d\n", Sonnenverlauf.Tag, Sonnenverlauf.Monat, Sonnenverlauf.Jahr, Sonnenverlauf.AufgangStunden, Sonnenverlauf.AufgangMinuten ); t.tm_mday += 1; mktime(&t); } return 0; }