#define ONE_HOUR 3600
+typedef struct {
+ time_t* now;
+ time_t* begin;
+ time_t* worktime;
+ struct tm* now_tm;
+ struct tm* begin_tm;
+ struct tm* work_end_tm;
+ char* weekday;
+ char* timestr;
+} feierabend;
+
+void init_feierabend(feierabend* fabend)
+{
+ fabend->now = malloc(sizeof(time_t));
+ fabend->begin = malloc(sizeof(time_t));
+ fabend->worktime = malloc(sizeof(time_t));
+ fabend->now_tm = malloc(sizeof(struct tm));
+ fabend->begin_tm = malloc(sizeof(struct tm));
+ fabend->work_end_tm = malloc(sizeof(struct tm));
+ fabend->weekday = malloc(sizeof(char) * 11);
+ fabend->timestr = malloc(sizeof(char) * 7);
+}
+
+void free_feierabend(feierabend* fabend)
+{
+ free(fabend->now);
+ free(fabend->begin);
+ free(fabend->worktime);
+ free(fabend->now_tm);
+ free(fabend->begin_tm);
+ free(fabend->work_end_tm);
+ free(fabend->weekday);
+ free(fabend->timestr);
+ fabend->now = NULL;
+ fabend->begin = NULL;
+ fabend->worktime = NULL;
+ fabend->begin_tm = NULL;
+ fabend->work_end_tm = NULL;
+ fabend->weekday = NULL;
+ fabend->timestr = NULL;
+}
+
int main(int argc, char* argv[])
{
if (argc < 3 || (argc > 3 && argc < 5)) {
return 1;
}
- time_t* now = malloc(sizeof(time_t));
- time_t* begin = malloc(sizeof(time_t));
- time_t* worktime = malloc(sizeof(time_t));
- struct tm* now_tm = malloc(sizeof(struct tm));
- struct tm* begin_tm = malloc(sizeof(struct tm));
- struct tm* work_end_tm = malloc(sizeof(struct tm));
- char* weekday = malloc(sizeof(char) * 11);
- char* timestr = malloc(sizeof(char) * 7);
+ feierabend* fabend = malloc(sizeof(feierabend));
+ init_feierabend(fabend);
printf("Version: %s\n\n", PROJECT_VERSION);
- time(begin);
- localtime_r(begin, begin_tm);
- begin_tm->tm_hour = atoi(argv[1]);
- begin_tm->tm_min = atoi(argv[2]);
- *begin = timelocal(begin_tm);
+ time(fabend->begin);
+ localtime_r(fabend->begin, fabend->begin_tm);
+ fabend->begin_tm->tm_hour = atoi(argv[1]);
+ fabend->begin_tm->tm_min = atoi(argv[2]);
+ *fabend->begin = timelocal(fabend->begin_tm);
- time(now);
- localtime_r(now, now_tm);
+ time(fabend->now);
+ localtime_r(fabend->now, fabend->now_tm);
if (argc == 5) {
- now_tm->tm_hour = atoi(argv[3]);
- now_tm->tm_min = atoi(argv[4]);
- *now = timelocal(now_tm);
+ fabend->now_tm->tm_hour = atoi(argv[3]);
+ fabend->now_tm->tm_min = atoi(argv[4]);
+ *fabend->now = timelocal(fabend->now_tm);
}
- get_weekday(now_tm->tm_wday, weekday);
+ get_weekday(fabend->now_tm->tm_wday, fabend->weekday);
printf("%-25s%s %02d.%02d.%04d %02d:%02d %s\n",
"Arbeitsbeginn:",
- weekday,
- begin_tm->tm_mday,
- begin_tm->tm_mon + 1,
- begin_tm->tm_year + 1900,
- begin_tm->tm_hour,
- begin_tm->tm_min,
- begin_tm->tm_zone);
+ fabend->weekday,
+ fabend->begin_tm->tm_mday,
+ fabend->begin_tm->tm_mon + 1,
+ fabend->begin_tm->tm_year + 1900,
+ fabend->begin_tm->tm_hour,
+ fabend->begin_tm->tm_min,
+ fabend->begin_tm->tm_zone);
printf("\n");
printf("%-25s%s %02d.%02d.%04d %02d:%02d %s\n",
"Aktuelle Zeit:",
- weekday,
- now_tm->tm_mday,
- now_tm->tm_mon + 1,
- now_tm->tm_year + 1900,
- now_tm->tm_hour,
- now_tm->tm_min,
- now_tm->tm_zone);
+ fabend->weekday,
+ fabend->now_tm->tm_mday,
+ fabend->now_tm->tm_mon + 1,
+ fabend->now_tm->tm_year + 1900,
+ fabend->now_tm->tm_hour,
+ fabend->now_tm->tm_min,
+ fabend->now_tm->tm_zone);
printf("\n");
- *worktime = get_eight_hour_end_worktime(*begin);
- localtime_r(worktime, work_end_tm);
+ *fabend->worktime = get_eight_hour_end_worktime(*fabend->begin);
+ localtime_r(fabend->worktime, fabend->work_end_tm);
printf("%-25s%s %02d.%02d.%04d %02d:%02d %s\n",
"Arbeitsende 8 Std:",
- weekday,
- work_end_tm->tm_mday,
- work_end_tm->tm_mon + 1,
- work_end_tm->tm_year + 1900,
- work_end_tm->tm_hour,
- work_end_tm->tm_min,
- work_end_tm->tm_zone);
-
- *worktime = get_ten_hour_end_worktime(*begin);
- localtime_r(worktime, work_end_tm);
+ fabend->weekday,
+ fabend->work_end_tm->tm_mday,
+ fabend->work_end_tm->tm_mon + 1,
+ fabend->work_end_tm->tm_year + 1900,
+ fabend->work_end_tm->tm_hour,
+ fabend->work_end_tm->tm_min,
+ fabend->work_end_tm->tm_zone);
+
+ *fabend->worktime = get_ten_hour_end_worktime(*fabend->begin);
+ localtime_r(fabend->worktime, fabend->work_end_tm);
printf("%-25s%s %02d.%02d.%04d %02d:%02d %s\n",
"Arbeitsende 10 Std:",
- weekday,
- work_end_tm->tm_mday,
- work_end_tm->tm_mon + 1,
- work_end_tm->tm_year + 1900,
- work_end_tm->tm_hour,
- work_end_tm->tm_min,
- work_end_tm->tm_zone);
+ fabend->weekday,
+ fabend->work_end_tm->tm_mday,
+ fabend->work_end_tm->tm_mon + 1,
+ fabend->work_end_tm->tm_year + 1900,
+ fabend->work_end_tm->tm_hour,
+ fabend->work_end_tm->tm_min,
+ fabend->work_end_tm->tm_zone);
printf("\n");
- *worktime = get_brutto_worktime(*begin, *now);
- get_time_str(*worktime, timestr);
- printf("%-25s%s\n", "Brutto Arbeitzeit:", timestr);
+ *fabend->worktime = get_brutto_worktime(*fabend->begin, *fabend->now);
+ get_time_str(*fabend->worktime, fabend->timestr);
+ printf("%-25s%s\n", "Brutto Arbeitzeit:", fabend->timestr);
- *worktime = get_current_worktime(*begin, *now);
- get_time_str(*worktime, timestr);
- printf("%-25s%s\n", "Netto Arbeitzeit:", timestr);
+ *fabend->worktime = get_current_worktime(*fabend->begin, *fabend->now);
+ get_time_str(*fabend->worktime, fabend->timestr);
+ printf("%-25s%s\n", "Netto Arbeitzeit:", fabend->timestr);
- *worktime = get_brutto_worktime(*begin, *now);
- *worktime = get_break_time(*worktime);
- get_time_str(*worktime, timestr);
- printf("%-25s%s\n", "Aktuelle Pausenzeit:", timestr);
+ *fabend->worktime = get_brutto_worktime(*fabend->begin, *fabend->now);
+ *fabend->worktime = get_break_time(*fabend->worktime);
+ get_time_str(*fabend->worktime, fabend->timestr);
+ printf("%-25s%s\n", "Aktuelle Pausenzeit:", fabend->timestr);
printf("\n");
- *worktime = get_current_worktime_diff_to_end_eight_hour(*begin, *now);
- get_time_str(*worktime, timestr);
- printf("%-25s%s\n", "Arbeitzeit bis 8 Std:", timestr);
-
- *worktime = get_current_worktime_diff_to_end_ten_hour(*begin, *now);
- get_time_str(*worktime, timestr);
- printf("%-25s%s\n", "Arbeitzeit bis 10 Std:", timestr);
-
- free(now);
- now = NULL;
- free(begin);
- begin = NULL;
- free(worktime);
- worktime = NULL;
- free(now_tm);
- now_tm = NULL;
- free(begin_tm);
- begin_tm = NULL;
- free(work_end_tm);
- work_end_tm = NULL;
- free(weekday);
- weekday = NULL;
- free(timestr);
- timestr = NULL;
+ *fabend->worktime = get_current_worktime_diff_to_end_eight_hour(*fabend->begin, *fabend->now);
+ get_time_str(*fabend->worktime, fabend->timestr);
+ printf("%-25s%s\n", "Arbeitzeit bis 8 Std:", fabend->timestr);
+
+ *fabend->worktime = get_current_worktime_diff_to_end_ten_hour(*fabend->begin, *fabend->now);
+ get_time_str(*fabend->worktime, fabend->timestr);
+ printf("%-25s%s\n", "Arbeitzeit bis 10 Std:", fabend->timestr);
+
+ free_feierabend(fabend);
+ free(fabend);
+ fabend = NULL;
return 0;
}
\ No newline at end of file