From c616b985899fc7408d7f36a1d2a58181aa423f50 Mon Sep 17 00:00:00 2001 From: ketrptr Date: Mon, 16 Dec 2024 18:23:24 +0100 Subject: [PATCH] modified: Makefile modified: README.md new file: src/StudyPlanner.h modified: src/db.h modified: src/ui.c bugfixes. added release target to Makefile to use in other tools. --- Makefile | 10 +- README.md | 10 ++ src/StudyPlanner.h | 6 + src/db.h | 3 +- src/ui.c | 309 +++++++++++++++++++++++---------------------- 5 files changed, 182 insertions(+), 156 deletions(-) create mode 100644 src/StudyPlanner.h diff --git a/Makefile b/Makefile index d3c09a5..047ef52 100644 --- a/Makefile +++ b/Makefile @@ -12,11 +12,17 @@ CALF=src/iCal.c src/iCal.h LLST=src/llist.c src/llist.h CONFIG=src/config.h #config file +ALLF=$(UIF) $(PLF) $(DBF) $(LLST) #targets debug: test ui planner db iCal llist gcc test.o ui.o planner.o db.o iCal.o llist.o -o debugOut + +release: $(ALLF) + gcc -DRELEASE -fPIC -shared -o StudyPlanner.so $(ALLF) + + # config: $(CONFIG) llist: $(LLST) gcc -c $(CFLAGS) $(LLST) @@ -25,7 +31,7 @@ test: src/test.c iCal: $(CALF) gcc -c $(CFLAGS) $(CALF) ui: $(UIF) - gcc -c $(CFLAGS) $(UIF) + gcc -DDEBUG -c $(CFLAGS) $(UIF) planner: $(PLF) gcc -c $(CFLAGS) $(PLF) db: $(DBF) @@ -36,7 +42,7 @@ edit: nvim $(PLF) Makefile $(LLST) src/test.c clean: - rm -rf *.o debugOut src/*.gch *.csv *.ics + rm -rf *.o debugOut src/*.gch *.csv *.ics *.so diff --git a/README.md b/README.md index 54ed37b..19c930d 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,16 @@ Time management optimisation tool. +# How to use + + - to use program directly compile with + make debug + . this creates executable binary. + + - to integrate in other software use: + make release + . This creates shared library. use StudyPlanner.h (untested) + # Procedure ## User input diff --git a/src/StudyPlanner.h b/src/StudyPlanner.h new file mode 100644 index 0000000..9e853ec --- /dev/null +++ b/src/StudyPlanner.h @@ -0,0 +1,6 @@ +#ifndef PLANNER +#define PLANNER + +int StudyPlanner(); + +#endif // StudyPlanner diff --git a/src/db.h b/src/db.h index 73579c0..9418763 100644 --- a/src/db.h +++ b/src/db.h @@ -3,7 +3,6 @@ #include "planner.h" -#endif - void write_linkedlist_to_csv(llist *head, const char *filename); llist *write_csv_to_llist(const char *filename); +#endif diff --git a/src/ui.c b/src/ui.c index 9ee8959..a4cd8b8 100644 --- a/src/ui.c +++ b/src/ui.c @@ -23,103 +23,165 @@ #define hours(n) (60 * minutes(n)) #define days(n) (24 * hours(n)) const char *dbName = "db.csv"; - +// #define DEBUG +#ifdef DEBUG int main(void) { - int taskcreation_date = 0; - int taskdeadline_date = 0; - int taskpriority = 0; - int taskspare = 0; - char *taskname = NULL; // taskName Buffer +#endif +#ifdef RELEASE + int StudyPlanner() { +#endif + int taskcreation_date = 0; + int taskdeadline_date = 0; + int taskpriority = 0; + int taskspare = 0; + char *taskname = NULL; // taskName Buffer - llist *listT = NULL; - llist *listE = NULL; - int choice = 0, i = 0; - do { - printf(" -1- Neues Fach eingeben\n"); - printf(" -2- Verfuegbare Zeit eingeben\n"); - printf(" -3- Alle vorhandenen Faecher aufliesten\n"); - printf(" -4- Kalenderlink ausgeben\n"); - printf(" -5- Faecher Importieren\n"); - printf(" -6- Planer beenden\n"); - printf(" Waehle die gewuenschte Option aus\n"); - volatile int r = scanf("%d", &choice); - if (r != 1) { - printf("Falsche Eingabe\n"); - fgetc(stdin); - choice = 0; - continue; - }; + llist *listT = NULL; + llist *listE = NULL; + int choice = 0, i = 0; + do { + printf(" -1- Neues Fach eingeben\n"); + printf(" -2- Verfuegbare Zeit eingeben\n"); + printf(" -3- Alle vorhandenen Faecher aufliesten\n"); + printf(" -4- Kalenderlink ausgeben\n"); + printf(" -5- Faecher Importieren\n"); + printf(" -6- Planer beenden\n"); + printf(" Waehle die gewuenschte Option aus\n"); + volatile int r = scanf("%d", &choice); + if (r != 1) { + printf("Falsche Eingabe\n"); + fgetc(stdin); + choice = 0; + continue; + }; - taskname = NULL; - size_t nameLen; - ssize_t nnread; - switch (choice) { - case 1: - printf(" Geben sie das gewünschte Fach ein (Name): \n"); - time_t now = time(NULL); - struct tm lc; - localtime_r(&now, &lc); - fgetc(stdin); - nnread = getline(&taskname, &nameLen, stdin); - taskname[nnread - 1] = '\0'; - if (nnread < 0) { - printf("Ungültige Eingabe für den Namen.\n"); - return -1; - } - - printf(" Wie viel Zeit bleibt ihnen (tage bis deadline):\n"); - if (scanf("%d", &taskdeadline_date) != 1) { - printf("Ungueltige Eingabe.\n"); - return -1; - } - - printf(" Gib die Prioritaet des Faches an(1-10): \n"); - if (scanf("%d", &taskpriority) != 1) { - printf("Ungueltige Eingabe.\n"); - return -1; - } - - // printf(" Wie viel Zeit habe Sie für dieses Fach: \n"); - // if (scanf("%d", &taskspare) != 1) { - // printf("Ungültige Eingabe.\n"); - // return -1; - // } - - // create deadline timestamp - time_t deadline = now + days(taskdeadline_date); - Task *newT = newTask(taskname, now, deadline, taskpriority, 0); - if (listT == NULL) { - listT = llistNew(newT, cmpTaskN); - } else { - llistAppend(listT, newT); - } - - break; - case 2: - printf("Geben Sie die zur verfuegung stehende Zeit für die Faecher an " - "(geplante arbeitsstunden huete): \n"); - scanf("%d", &taskspare); - // if list exists use it to generate plan - if (listT != NULL) { + taskname = NULL; + size_t nameLen; + ssize_t nnread; + switch (choice) { + case 1: + printf(" Geben sie das gewünschte Fach ein (Name): \n"); + time_t now = time(NULL); struct tm lc; - now = time(NULL); localtime_r(&now, &lc); - lc.tm_hour += taskspare; - time_t avail = mktime(&lc); - listE = genPlan(listT, avail); - write_linkedlist_to_csv(listT, dbName); - } else { - printf("list is empty!"); - return -1; - } - break; + fgetc(stdin); + nnread = getline(&taskname, &nameLen, stdin); + taskname[nnread - 1] = '\0'; + if (nnread < 0) { + printf("Ungültige Eingabe für den Namen.\n"); + return -1; + } + + printf(" Wie viel Zeit bleibt ihnen (tage bis deadline):\n"); + if (scanf("%d", &taskdeadline_date) != 1) { + printf("Ungueltige Eingabe.\n"); + return -1; + } + + printf(" Gib die Prioritaet des Faches an(1-10): \n"); + if (scanf("%d", &taskpriority) != 1) { + printf("Ungueltige Eingabe.\n"); + return -1; + } + + // printf(" Wie viel Zeit habe Sie für dieses Fach: \n"); + // if (scanf("%d", &taskspare) != 1) { + // printf("Ungültige Eingabe.\n"); + // return -1; + // } + + // create deadline timestamp + time_t deadline = now + days(taskdeadline_date); + Task *newT = newTask(taskname, now, deadline, taskpriority, 0); + if (listT == NULL) { + listT = llistNew(newT, cmpTaskN); + } else { + llistAppend(listT, newT); + } - case 3: - if (listT == NULL) { - printf("Die Liste ist leer"); break; - } else { - llistPrintT(listT); + case 2: + printf("Geben Sie die zur verfuegung stehende Zeit für die Faecher an " + "(geplante arbeitsstunden huete): \n"); + scanf("%d", &taskspare); + // if list exists use it to generate plan + if (listT != NULL) { + struct tm lc; + now = time(NULL); + localtime_r(&now, &lc); + lc.tm_hour += taskspare; + time_t avail = mktime(&lc); + listE = genPlan(listT, avail); + write_linkedlist_to_csv(listT, dbName); + } else { + printf("list is empty!"); + return -1; + } + break; + + case 3: + if (listT == NULL) { + printf("Die Liste ist leer"); + break; + } else { + llistPrintT(listT); + // llist *iterator = list; + // while (iterator != NULL) { + // Task *currentTask = (Task *)(iterator->data); // Cast zu Task + // printf("Fach: %s, Deadline: %ld, Priorität: %d\n", + // currentTask->name, currentTask->deadline, + // currentTask->priority); + // iterator = iterator->next; // Gehe zum nächsten Listenelement + // } + } + break; + // // case 4: iCAl();break; + // + // printf(" Wie viel Zeit bleibt ihnen:\n"); + // if (scanf("%d", &taskdeadline_date) != 1) { + // printf("Ungültige Eingabe.\n"); + // return -1; + // } + // + // printf(" Gib die Priorität des Faches an: \n"); + // if (scanf("%d", &taskpriority) != 1) { + // printf("Ungültige Eingabe.\n"); + // return -1; + // } + // + // printf(" Wie viel Zeit habe Sie für dieses Fach: \n"); + // if (scanf("%d", &taskspare) != 1) { + // printf("Ungültige Eingabe.\n"); + // return -1; + // } + // break; + case 4: + if (listE == NULL || taskspare <= 0) { + printf("vor Export erst task list erstellen, dann verfuegbare zeit " + "eingeben!\n"); + break; + } + llistPrintE(listE); + exportiCal(listE); + // printf( + // "Geben Sie die zur verfuegung stehende Zeit für die Fächer an: + // \n"); + // scanf("%d", &taskspare); + + break; + case 5: + listT = write_csv_to_llist(dbName); + break; + + case 6: + printf("Goodbye!\n"); + if (listE != NULL) + llistFreeE(listE); + if (listT != NULL) + llistPrintT(listT); + // if (task == NULL) {//task? + // printf("Die Liste ist leer"); + // } else { // llist *iterator = list; // while (iterator != NULL) { // Task *currentTask = (Task *)(iterator->data); // Cast zu Task @@ -128,66 +190,9 @@ int main(void) { // currentTask->priority); // iterator = iterator->next; // Gehe zum nächsten Listenelement // } + // } + return EXIT_SUCCESS; + // case 4: iCAl();break; } - break; - // // case 4: iCAl();break; - // - // printf(" Wie viel Zeit bleibt ihnen:\n"); - // if (scanf("%d", &taskdeadline_date) != 1) { - // printf("Ungültige Eingabe.\n"); - // return -1; - // } - // - // printf(" Gib die Priorität des Faches an: \n"); - // if (scanf("%d", &taskpriority) != 1) { - // printf("Ungültige Eingabe.\n"); - // return -1; - // } - // - // printf(" Wie viel Zeit habe Sie für dieses Fach: \n"); - // if (scanf("%d", &taskspare) != 1) { - // printf("Ungültige Eingabe.\n"); - // return -1; - // } - // break; - case 4: - if (listE == NULL || taskspare <= 0) { - printf("vor Export erst task list erstellen, dann verfuegbare zeit " - "eingeben!\n"); - break; - } - llistPrintE(listE); - exportiCal(listE); - // printf( - // "Geben Sie die zur verfuegung stehende Zeit für die Fächer an: - // \n"); - // scanf("%d", &taskspare); - - break; - case 5: - listT = write_csv_to_llist(dbName); - break; - - case 6: - printf("Goodbye!\n"); - if (listE != NULL) - llistFreeE(listE); - if (listT != NULL) - llistPrintT(listT); - // if (task == NULL) {//task? - // printf("Die Liste ist leer"); - // } else { - // llist *iterator = list; - // while (iterator != NULL) { - // Task *currentTask = (Task *)(iterator->data); // Cast zu Task - // printf("Fach: %s, Deadline: %ld, Priorität: %d\n", - // currentTask->name, currentTask->deadline, - // currentTask->priority); - // iterator = iterator->next; // Gehe zum nächsten Listenelement - // } - // } - return EXIT_SUCCESS; - // case 4: iCAl();break; - } - } while (choice < 6); -} + } while (choice < 6); + }