]> git.huck.website - odot.git/commitdiff
Tue Nov 15 12:00:13 AM CST 2022 automatic backup
authorHuck Boles <huboles@protonmail.com>
Tue, 15 Nov 2022 06:00:13 +0000 (00:00 -0600)
committerHuck Boles <huboles@protonmail.com>
Tue, 15 Nov 2022 06:00:13 +0000 (00:00 -0600)
17 files changed:
.ccls-cache/@@home@huck@.repos@odot/@usr@include@stdio.h.blob
.ccls-cache/@home@huck@.repos@odot/dialogue.c
.ccls-cache/@home@huck@.repos@odot/dialogue.c.blob
.ccls-cache/@home@huck@.repos@odot/file.c
.ccls-cache/@home@huck@.repos@odot/file.c.blob
.ccls-cache/@home@huck@.repos@odot/func.c
.ccls-cache/@home@huck@.repos@odot/func.c.blob
.ccls-cache/@home@huck@.repos@odot/input.c
.ccls-cache/@home@huck@.repos@odot/input.c.blob
.ccls-cache/@home@huck@.repos@odot/main.c.blob
.ccls-cache/@home@huck@.repos@odot/odot.h
.ccls-cache/@home@huck@.repos@odot/odot.h.blob
Makefile
file.c
func.c
input.c
odot.h

index 2c54f42b3a61d53d5ae68adf428c9be5dfec5df5..a1526a4e7ca5be6ed9e7bd081df2f8faea2de00d 100644 (file)
Binary files a/.ccls-cache/@@home@huck@.repos@odot/@usr@include@stdio.h.blob and b/.ccls-cache/@@home@huck@.repos@odot/@usr@include@stdio.h.blob differ
index 91833018c07dc270be21dbe99dad061191c6d7b3..bf125b94658f83b46413e34ceff2a7b3e16d6265 100644 (file)
@@ -21,4 +21,3 @@ void formattask(struct task t){
     printf("* %s\t%s\t%i", t.task, t.group, t.date);
 }
 
-gT
index 53b636cb918acb1d784df752368fe5df7852096a..7dffb28a7d0da606bf51954586c01a1e656e9e67 100644 (file)
Binary files a/.ccls-cache/@home@huck@.repos@odot/dialogue.c.blob and b/.ccls-cache/@home@huck@.repos@odot/dialogue.c.blob differ
index b3855030b1497681162c2eef4ead197171462890..0d9dc1fcd3afb68d4748347a9051d12012a43c71 100644 (file)
@@ -1,84 +1,66 @@
 #include "odot.h"
 
 
-extern char *note;
 extern FILE *fp;
 
 enum color {BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE};
 
-
-void add(struct task t, int size){
-    int l,m,h,i;
-    FILE *fcopy = fopen("/tmp/fcopy", "w");
-    char *s = malloc(MAXLINE * sizeof(char));
-    h = size;
-    m = h / 2;
-    l = 0;
-
-    while (!(h == m && m == l)){
-        i = strcmp(t.task,gettask(fp).task);
-
-        if (i < 0) {
-            h = m;
-        } else if (i > 0) {
-            l = m;
-        } else { 
-            dialogue("Task already on list",t.task, BLUE);
-            return;
+void add(struct task t, FILE *fp){
+    char *c = malloc(strlen(t.task)*sizeof(char));
+    FILE *fc = fopen("/tmp/odot", "w");
+    int i = 0;
+    
+    while (fgets(c,strlen(t.task),fp) != NULL){
+        switch (listcheck(t,fp)){
+            case 3:
+                dialogue("Already on todo list", t.task, CYAN);
+                break;
+            case 1:
+                dialogue("Already on list in a different group", gettask(fp).group, YELLOW);
+                /* confirm(); */
+                break;
+            default:
+                if (i == 0 && strcmp(c,t.task) > 0){
+                    puttask(t,fc);
+                    ++i;
+                }
         }
-
-        m = (h + l)/2;
-        fseek(fp, m, SEEK_SET);
+        puttask(gettask(fp), fc);
     }
 
-    fseek(fp, 0, SEEK_SET);
-
-    for (i = 0; i <= (size + 1); i++){
-        if (i == m){
-            fprintf(fp, "%s\t%i\t%s\n",t.task,t.date,t.group);
-        } else {
-            fgets(s, MAXLINE, fp);
-            fputs(s, fcopy);
-        }
-    }
+    free(c);
     fclose(fp);
-    fclose(fcopy);
+    fclose(fc);
     remove(TODOLIST);
-    rename("/tmp/fcopy", TODOLIST);
-    free(s);
-    return;
+    rename("/tmp/odot", TODOLIST);
+    return; 
 }
 
-void rem(void){
-    char *s = malloc(MAXLINE * sizeof(char));
-    FILE *tmp = fopen("temp", "w");
-
-    fp = fopen(TODOLIST, "r");
 
+void rem(FILE *fp){
+    char *s = malloc(MAXLINE * sizeof(char));
+    FILE *fc = fopen("/tmp/odot", "w");
 
     while (fgets(s, MAXLINE, fp) != NULL){
         s[strlen(s) - 1] = 0;
         if (strcmp(note, s) != 0){
-            fputs(strcat(s,"\n"),tmp);
+            fputs(strcat(s,"\n"),fc);
         }
     }
 
     fclose(fp);
-    fclose(tmp);
+    fclose(fc);
 
     remove (TODOLIST);
-    rename("temp", TODOLIST);
+    rename("/tmp/odot", TODOLIST);
 
     free(s);
 }
 
-void show(void){
-    char *c;
-
-    c = (char *) malloc(MAXLINE * sizeof(int));
+void show(FILE *fp){
+    char *c = malloc(sizeof(char));
 
-    fp = fopen(TODOLIST,"r");
-    while (fgets(c, MAXLINE, fp) != NULL )
+    while (fgets(c, 1, fp) != NULL )
         formattask(gettask(fp));
     free(c);
 }
index 70d8cc5e67758201d1f5eedb5583369db9364354..e7c1ccb1550e08b2eeaa2f88d1e76dae42ec0122 100644 (file)
Binary files a/.ccls-cache/@home@huck@.repos@odot/file.c.blob and b/.ccls-cache/@home@huck@.repos@odot/file.c.blob differ
index 30d512c834fe6a768772ec83693316a18128137f..1991b9e6df4a15c3602b99c2c01aab52715a9e5a 100644 (file)
@@ -1,26 +1,18 @@
 #include "odot.h"
 
 enum color {BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE};
-extern FILE *fp;
 
-
-int listcheck(struct task t){
-    char *s = malloc(strlen(t.task) * sizeof(char));
-
-    fp = fopen(TODOLIST, "r");
-    if (fp == NULL)
-        error('f');
-
-    while (fgets(s, strlen(t.task), fp) != NULL){
-        /* strip newline for comparison, return 1 if string matches */
-        s[strlen(s) - 1] = 0;
-        if (strcmp(t.task, s) == 0){
-            free(s);
-            return 1;
-        }
-    }
-    free(s);
-    return 0;
+    /* Returns:
+        0 - Nothing matches
+        1 - Task matches
+        2 - Group matches
+        3 - Both match
+    */
+int listcheck(struct task t, FILE *fp){
+    int i;
+    i += (strcmp(t.task,gettask(fp).task) == 0) ? 1 : 0;
+    i += (strcmp(t.group,gettask(fp).group) == 0) ? 2 : 0;
+    return i;
 }
 
 
index c72c6d09c852467d318fea300a09b7ada43ca215..4100071c98b31a5fcf860c386945402367f7e50a 100644 (file)
Binary files a/.ccls-cache/@home@huck@.repos@odot/func.c.blob and b/.ccls-cache/@home@huck@.repos@odot/func.c.blob differ
index 0fc6eb7e8e907ccb49de6e1b47252f45c4212f4f..0cc316aa78cb7d322e93486c8b2ffb6c73aa53de 100644 (file)
@@ -28,18 +28,13 @@ short getopt(int n, char *arg[]){
         return 1;
     
     while (--n > 0 && (*++arg)[0] == '-'){
-        c = malloc(strlen(*arg) * sizeof(char));
-        c = *arg;
-
-        options += strchr(c, 'd') ? 4 : 2;
-        options += strchr(c, 's') ? 1 : 0;
-
+        /* if theres a d delete, otherwise add */
+        options += strchr(*arg, 'd') ? 4 : 2;
+        options += strchr(*arg, 's') ? 1 : 0;
         /* if theres a g then add the next argument as a group */
-        if (strchr(c,'g') != NULL){
-            group = *++arg;
+        if (strchr(*arg,'g') != NULL){
+            strcpy(group,*++arg);
         }
-
-        free(c);
     }
 
     return options;
@@ -65,3 +60,7 @@ struct task gettask(FILE *fp){
 
     return tmp;
 }
+
+void puttask(struct task t, FILE *fp){
+    fprintf(fp,"%s\t%s\t%i\n",t.task,t.group,t.date);
+}
index 3ed7c31c342ebfd06228b2e51eb0dab4038a631f..3ae02cf4b95f0e223a8d1351de4984bcf3098b00 100644 (file)
Binary files a/.ccls-cache/@home@huck@.repos@odot/input.c.blob and b/.ccls-cache/@home@huck@.repos@odot/input.c.blob differ
index 1cfe75fa10e9910c8e8e9bef4e484c5a11d7449d..eaa9588029e6420eb3fb1e2003579e452cfbe936 100644 (file)
Binary files a/.ccls-cache/@home@huck@.repos@odot/main.c.blob and b/.ccls-cache/@home@huck@.repos@odot/main.c.blob differ
index 61544ad53b7d70fe61d73ee324b304cdbd5d670c..b88180215904110325b878771b7b5c0e8e12d7d7 100644 (file)
@@ -17,11 +17,11 @@ struct task {
 char *getnote(int, char *[]);
 short getopt(int, char *[]);
 
-void add(struct task, int);
-void rem(void);
-void show(void);
+void add(struct task, FILE *);
+void rem(FILE *);
+void show(FILE *);
 
-int listcheck(struct task);
+int listcheck(struct task, FILE *);
 int geturgency(int);
 char *gettime(void);
 
@@ -29,10 +29,10 @@ void dialogue(char *, char *, int);
 void formattask(struct task t);
 void error(int);
 
-int linecount(FILE);
+int linecount(FILE *);
 
 struct task maketask(char *, char *);
-void puttask(struct task n);
+void puttask(struct task n, FILE*);
 struct task gettask(FILE *);
 
 char *note, *o;
index 4e83d72cf37f476c6d70f71ea687b33d2a03d435..54cbfa50ccc19c4afc0f3e61052966ed92d4e893 100644 (file)
Binary files a/.ccls-cache/@home@huck@.repos@odot/odot.h.blob and b/.ccls-cache/@home@huck@.repos@odot/odot.h.blob differ
index 7e48f1cc136852b07f6ed0f341ea5399a91af970..722a5a53faabbf6a7241bc851c78d8201189d8c9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -3,8 +3,9 @@ PROG = todo
 PREFIX ?= /usr/local/bin
 TODOLIST = $(HOME)/.local/share/odot/todo
 
-install : main.c input.c file.c
+install : main.c input.c file.c dialogue.c func.c
        gcc *.c -o '$(PREFIX)/$(PROG)'
+       [[ ! -d $(TODOLIST) ]] && mkdir -p $(TODOLIST)
 
 header : todo.h
        gcc *.h
@@ -13,9 +14,3 @@ clean :
        rm *.gch
        rm "$(PREFIX)/$(PROG)"
 
-test :
-       todo
-       todo -n something
-       todo -d stuff to do now
-       todo -ns stuff to do 
-       todo -ds stuff to do
diff --git a/file.c b/file.c
index b3855030b1497681162c2eef4ead197171462890..0d9dc1fcd3afb68d4748347a9051d12012a43c71 100644 (file)
--- a/file.c
+++ b/file.c
@@ -1,84 +1,66 @@
 #include "odot.h"
 
 
-extern char *note;
 extern FILE *fp;
 
 enum color {BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE};
 
-
-void add(struct task t, int size){
-    int l,m,h,i;
-    FILE *fcopy = fopen("/tmp/fcopy", "w");
-    char *s = malloc(MAXLINE * sizeof(char));
-    h = size;
-    m = h / 2;
-    l = 0;
-
-    while (!(h == m && m == l)){
-        i = strcmp(t.task,gettask(fp).task);
-
-        if (i < 0) {
-            h = m;
-        } else if (i > 0) {
-            l = m;
-        } else { 
-            dialogue("Task already on list",t.task, BLUE);
-            return;
+void add(struct task t, FILE *fp){
+    char *c = malloc(strlen(t.task)*sizeof(char));
+    FILE *fc = fopen("/tmp/odot", "w");
+    int i = 0;
+    
+    while (fgets(c,strlen(t.task),fp) != NULL){
+        switch (listcheck(t,fp)){
+            case 3:
+                dialogue("Already on todo list", t.task, CYAN);
+                break;
+            case 1:
+                dialogue("Already on list in a different group", gettask(fp).group, YELLOW);
+                /* confirm(); */
+                break;
+            default:
+                if (i == 0 && strcmp(c,t.task) > 0){
+                    puttask(t,fc);
+                    ++i;
+                }
         }
-
-        m = (h + l)/2;
-        fseek(fp, m, SEEK_SET);
+        puttask(gettask(fp), fc);
     }
 
-    fseek(fp, 0, SEEK_SET);
-
-    for (i = 0; i <= (size + 1); i++){
-        if (i == m){
-            fprintf(fp, "%s\t%i\t%s\n",t.task,t.date,t.group);
-        } else {
-            fgets(s, MAXLINE, fp);
-            fputs(s, fcopy);
-        }
-    }
+    free(c);
     fclose(fp);
-    fclose(fcopy);
+    fclose(fc);
     remove(TODOLIST);
-    rename("/tmp/fcopy", TODOLIST);
-    free(s);
-    return;
+    rename("/tmp/odot", TODOLIST);
+    return; 
 }
 
-void rem(void){
-    char *s = malloc(MAXLINE * sizeof(char));
-    FILE *tmp = fopen("temp", "w");
-
-    fp = fopen(TODOLIST, "r");
 
+void rem(FILE *fp){
+    char *s = malloc(MAXLINE * sizeof(char));
+    FILE *fc = fopen("/tmp/odot", "w");
 
     while (fgets(s, MAXLINE, fp) != NULL){
         s[strlen(s) - 1] = 0;
         if (strcmp(note, s) != 0){
-            fputs(strcat(s,"\n"),tmp);
+            fputs(strcat(s,"\n"),fc);
         }
     }
 
     fclose(fp);
-    fclose(tmp);
+    fclose(fc);
 
     remove (TODOLIST);
-    rename("temp", TODOLIST);
+    rename("/tmp/odot", TODOLIST);
 
     free(s);
 }
 
-void show(void){
-    char *c;
-
-    c = (char *) malloc(MAXLINE * sizeof(int));
+void show(FILE *fp){
+    char *c = malloc(sizeof(char));
 
-    fp = fopen(TODOLIST,"r");
-    while (fgets(c, MAXLINE, fp) != NULL )
+    while (fgets(c, 1, fp) != NULL )
         formattask(gettask(fp));
     free(c);
 }
diff --git a/func.c b/func.c
index 30d512c834fe6a768772ec83693316a18128137f..1991b9e6df4a15c3602b99c2c01aab52715a9e5a 100644 (file)
--- a/func.c
+++ b/func.c
@@ -1,26 +1,18 @@
 #include "odot.h"
 
 enum color {BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE};
-extern FILE *fp;
 
-
-int listcheck(struct task t){
-    char *s = malloc(strlen(t.task) * sizeof(char));
-
-    fp = fopen(TODOLIST, "r");
-    if (fp == NULL)
-        error('f');
-
-    while (fgets(s, strlen(t.task), fp) != NULL){
-        /* strip newline for comparison, return 1 if string matches */
-        s[strlen(s) - 1] = 0;
-        if (strcmp(t.task, s) == 0){
-            free(s);
-            return 1;
-        }
-    }
-    free(s);
-    return 0;
+    /* Returns:
+        0 - Nothing matches
+        1 - Task matches
+        2 - Group matches
+        3 - Both match
+    */
+int listcheck(struct task t, FILE *fp){
+    int i;
+    i += (strcmp(t.task,gettask(fp).task) == 0) ? 1 : 0;
+    i += (strcmp(t.group,gettask(fp).group) == 0) ? 2 : 0;
+    return i;
 }
 
 
diff --git a/input.c b/input.c
index 0fc6eb7e8e907ccb49de6e1b47252f45c4212f4f..0cc316aa78cb7d322e93486c8b2ffb6c73aa53de 100644 (file)
--- a/input.c
+++ b/input.c
@@ -28,18 +28,13 @@ short getopt(int n, char *arg[]){
         return 1;
     
     while (--n > 0 && (*++arg)[0] == '-'){
-        c = malloc(strlen(*arg) * sizeof(char));
-        c = *arg;
-
-        options += strchr(c, 'd') ? 4 : 2;
-        options += strchr(c, 's') ? 1 : 0;
-
+        /* if theres a d delete, otherwise add */
+        options += strchr(*arg, 'd') ? 4 : 2;
+        options += strchr(*arg, 's') ? 1 : 0;
         /* if theres a g then add the next argument as a group */
-        if (strchr(c,'g') != NULL){
-            group = *++arg;
+        if (strchr(*arg,'g') != NULL){
+            strcpy(group,*++arg);
         }
-
-        free(c);
     }
 
     return options;
@@ -65,3 +60,7 @@ struct task gettask(FILE *fp){
 
     return tmp;
 }
+
+void puttask(struct task t, FILE *fp){
+    fprintf(fp,"%s\t%s\t%i\n",t.task,t.group,t.date);
+}
diff --git a/odot.h b/odot.h
index 61544ad53b7d70fe61d73ee324b304cdbd5d670c..b88180215904110325b878771b7b5c0e8e12d7d7 100644 (file)
--- a/odot.h
+++ b/odot.h
@@ -17,11 +17,11 @@ struct task {
 char *getnote(int, char *[]);
 short getopt(int, char *[]);
 
-void add(struct task, int);
-void rem(void);
-void show(void);
+void add(struct task, FILE *);
+void rem(FILE *);
+void show(FILE *);
 
-int listcheck(struct task);
+int listcheck(struct task, FILE *);
 int geturgency(int);
 char *gettime(void);
 
@@ -29,10 +29,10 @@ void dialogue(char *, char *, int);
 void formattask(struct task t);
 void error(int);
 
-int linecount(FILE);
+int linecount(FILE *);
 
 struct task maketask(char *, char *);
-void puttask(struct task n);
+void puttask(struct task n, FILE*);
 struct task gettask(FILE *);
 
 char *note, *o;