#include #include #include #include #include #define DATFILE "/home/randomuser/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 getTime() { time_t buf; struct tm b; buf = time(NULL); b = *localtime(&buf); return b; } void writeSession(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 dataToSession(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 lineToSession(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, "a"); char *line; struct session buffer; while(fgets(line, sizeof(line), f)) { buffer = lineToSession(&line); writeSession(f, buffer); } return 1; } bt = getTime(); signal(SIGINT, sighnd); flgwt(); int t = timediff(getTime(), bt); struct session data = dataToSession(bt, t, argv[1]); FILE *f = fopen(DATFILE, "a"); writeSession(f, data); fclose(f); return 0; }