#include #include #include #include #include #define DATFILE "/home/ryan/datfile" time_t buf; struct tm bt; struct tm et; int flg = 0; struct time { int hour; int min; }; struct date { int year; int month; int day; }; struct session { struct date date; int offset; char name[4096]; }; void sighnd() { flg = 1; } void flgwt() { while(flg == 0) { continue; } } char* concat(const char *s1, const char *s2) { char *result = malloc(strlen(s1) + strlen(s2) + 1); // let's hope malloc works correctly strcpy(result, s1); strcat(result, s2); return result; } struct tm get_time() { time_t buf; struct tm b; buf = time(NULL); b = *localtime(&buf); return b; } void write_session(FILE *fd, struct session session) { fprintf(fd, "P%02d%02d%04d%d %s\n", session.date.month, session.date.day, session.date.year, session.offset, session.name); } struct session data_to_session(struct tm time, int offset, char *name) { struct session session; session.date.year = time.tm_year + 1900; session.date.month = time.tm_mon; session.date.day = time.tm_mday; session.offset = offset; strcpy(session.name, name); return session; } struct session line_to_session(char *line) { struct session session; char *buf = line; char *parameters = strtok(buf, " "); strcpy(session.name, strtok(NULL, "")); session.date.month = atoi(concat(¶meters[1], ¶meters[2])); session.date.day = atoi(concat(¶meters[3], ¶meters[4])); session.date.year = atoi(concat( concat(¶meters[5], ¶meters[6]), concat(¶meters[7], ¶meters[8]))); char charbuf[8]; for(int i = 9; parameters[i] == " "; i++) { strcat(&charbuf, ¶meters[i]); } session.offset = atoi(&charbuf); return session; } int timediff(struct tm f, struct tm l) { int fm = f.tm_min + (f.tm_hour * 60); int lm = l.tm_min + (l.tm_hour * 60); return fm - lm; } int main(int argc, char **argv) { if (argc != 2) { FILE *f = fopen(DATFILE, "r"); char line[2048]; struct session session_array[20]; int counter = 0; while(fgets(line, sizeof(line), f)) { session_array[counter] = line_to_session(line); counter++; } fclose(f); FILE *fd = fopen(DATFILE, "a+"); for(int x = 0; x < counter; x++) { write_session(fd, session_array[x]); } return 1; } bt = get_time(); signal(SIGINT, sighnd); flgwt(); int t = timediff(get_time(), bt); struct session data = data_to_session(bt, t, argv[1]); FILE *f = fopen(DATFILE, "a"); write_session(f, data); fclose(f); return 0; }