This repository has been archived on 2023-06-23. You can view files and clone it, but cannot push or open issues or pull requests.
practice/main.c

116 lines
2.8 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <signal.h>
#include <string.h>
#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(&parameters[1], &parameters[2]));
session.date.day = atoi(concat(&parameters[3], &parameters[4]));
session.date.year = atoi(concat(
concat(&parameters[5], &parameters[6]),
concat(&parameters[7], &parameters[8])));
char charbuf[8];
for(int i = 9; parameters[i] == " "; i++) {
strcat(&charbuf, &parameters[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;
}