#include #include #include #include #include void print_current_activity(); void start_new_activity(); void stop_current_activity(); void print_activities(); void save_to_file(); void load_file(); typedef struct activities { time_t start_time; time_t end_time; char description[100]; } activity; activity current_activity; activity activities_list[100]; int main() { strcpy(current_activity.description,"N/A"); load_file(); char command; while(command != 'q') { system("clear"); print_current_activity(); print_activities(); printf("\n\n[s]tart tracking new activity | sto[p] current activity | sa[v]e to file | [q]uit: "); fgets(&command, 256, stdin); switch(command) { case 's': start_new_activity(); break; case 'p': stop_current_activity(); break; case 'v': save_to_file(); break; case 'q': break; default : break; } } return 0; } void print_current_activity() { time_t time_now = time(NULL); printf("==================================================" "==================================================\n" "Current activity: %s\nStart time: %sDuration: %ld mins.\n" "==================================================" "==================================================\n", current_activity.description, ctime(¤t_activity.start_time), (time_now - current_activity.start_time)/60); } void print_activities() { struct tm ts1, ts2; char buf1[80], buf2[80]; printf("\nPast activities:\n" "--------------------------------------------------" "--------------------------------------------------"); for(int i = 0; activities_list[i].start_time; i++) { ts1 = *localtime(&activities_list[i].start_time); ts2 = *localtime(&activities_list[i].end_time); strftime(buf1, sizeof(buf1), "%a %Y-%m-%d %H:%M:%S %Z", &ts1); strftime(buf2, sizeof(buf2), "%a %Y-%m-%d %H:%M:%S %Z", &ts2); printf("\nStart time: %s\nEnd time: %s\nActivity: %s\n" "--------------------------------------------------" "--------------------------------------------------", buf1, buf2, activities_list[i].description); } } void start_new_activity() { current_activity.start_time = time(NULL); printf("\nWhat are you doing: "); fgets(current_activity.description, 256, stdin); current_activity.description[strcspn(current_activity.description, "\n")] = 0; } void stop_current_activity() { current_activity.end_time = time(NULL); for(int i = 0; i < 100; i++) { if(!activities_list[i].start_time) { activities_list[i] = current_activity; strcpy(current_activity.description, "N/A"); break; } } } void save_to_file() { FILE *fp; time_t rawtime; struct tm *info; char buffer[80]; time(&rawtime); strftime(buffer, 80, "%Y-%m-%d", localtime(&rawtime)); char filename[80]; snprintf(filename, sizeof(filename), "%s/Timesheets/timesheet-%s.txt", getenv("HOME"), buffer); fp = fopen(filename, "w"); for(int i = 0; activities_list[i].start_time; i++) { fprintf(fp, "%ld;%ld;%s\n", activities_list[i].start_time, activities_list[i].end_time, activities_list[i].description); } fclose(fp); } void load_file() { FILE *fp; time_t rawtime; struct tm *info; char buffer[80]; time(&rawtime); strftime(buffer, 80, "%Y-%m-%d", localtime(&rawtime)); char filename[80]; snprintf(filename, sizeof(filename), "%s/Timesheets/timesheet-%s.txt", getenv("HOME"), buffer); fp = fopen(filename, "r"); int i = 0; while (EOF != fscanf(fp, "%ld;%ld;%s", &activities_list[i].start_time, &activities_list[i].end_time, activities_list[i].description)) i++; }